| | |
| | | { |
| | | "Version": 1, |
| | | "WorkspaceRootPath": "F:\\hanhe\\YNJT\\HH.WCS.Mobox3\\HH.WCS.Mobox3.FJJT\\", |
| | | "Documents": [], |
| | | "WorkspaceRootPath": "F:\\hanhe\\WMS\\HH-0127_YinNiJiaTong\\HH.WCS.Mobox3\\HH.WCS.Mobox3.FJJT\\", |
| | | "Documents": [ |
| | | { |
| | | "AbsoluteMoniker": "D:0:0:{0809739B-B9DF-4757-86FE-045EB5D44798}|HH.WCS.Mobox3.FJJT.csproj|f:\\hanhe\\wms\\hh-0127_yinnijiatong\\hh.wcs.mobox3\\hh.wcs.mobox3.fjjt\\api\\wmscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", |
| | | "RelativeMoniker": "D:0:0:{0809739B-B9DF-4757-86FE-045EB5D44798}|HH.WCS.Mobox3.FJJT.csproj|solutionrelative:api\\wmscontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" |
| | | } |
| | | ], |
| | | "DocumentGroupContainers": [ |
| | | { |
| | | "Orientation": 0, |
| | |
| | | "DocumentGroups": [ |
| | | { |
| | | "DockedWidth": 200, |
| | | "SelectedChildIndex": -1, |
| | | "SelectedChildIndex": 5, |
| | | "Children": [ |
| | | { |
| | | "$type": "Bookmark", |
| | |
| | | { |
| | | "$type": "Bookmark", |
| | | "Name": "ST:128:0:{1fc202d4-d401-403c-9834-5b218574bb67}" |
| | | }, |
| | | { |
| | | "$type": "Document", |
| | | "DocumentIndex": 0, |
| | | "Title": "WmsController.cs", |
| | | "DocumentMoniker": "F:\\hanhe\\WMS\\HH-0127_YinNiJiaTong\\HH.WCS.Mobox3\\HH.WCS.Mobox3.FJJT\\api\\WmsController.cs", |
| | | "RelativeDocumentMoniker": "api\\WmsController.cs", |
| | | "ToolTip": "F:\\hanhe\\WMS\\HH-0127_YinNiJiaTong\\HH.WCS.Mobox3\\HH.WCS.Mobox3.FJJT\\api\\WmsController.cs", |
| | | "RelativeToolTip": "api\\WmsController.cs", |
| | | "ViewState": "AQIAAAAAAAAAAAAAAADwvwAAAAAAAAAA", |
| | | "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", |
| | | "WhenOpened": "2025-06-04T09:30:35.38Z", |
| | | "EditorCaption": "" |
| | | } |
| | | ] |
| | | }, |
| | |
| | | # Visual Studio Version 17 |
| | | VisualStudioVersion = 17.10.35013.160 |
| | | MinimumVisualStudioVersion = 10.0.40219.1 |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.FJJT", "HH.WCS.Mobox3.FJJT.csproj", "{E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}" |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.FJJT", "HH.WCS.Mobox3.FJJT.csproj", "{0809739B-B9DF-4757-86FE-045EB5D44798}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.HD", "..\HH.WCS.Mobox3.HD\HH.WCS.Mobox3.HD.csproj", "{44207EA0-2B75-4387-8A15-5C3D70A73C20}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.TSSG", "..\HH.WCS.Mobox3.TSSG\HH.WCS.Mobox3.TSSG.csproj", "{8ACEE926-6897-4380-BF9D-9A443FEE6A6F}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.SXJK", "..\HH.WCS.Mobox3.SXJK\HH.WCS.Mobox3.SXJK.csproj", "{F6E51E0D-CCFD-44AD-AF62-B741F33C0E28}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.Template", "..\HH.WCS.Mobox3.Template\HH.WCS.Mobox3.Template.csproj", "{E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.YNJT_BZP", "..\HH.WCS.Mobox3.YNJT_BZP\HH.WCS.Mobox3.YNJT_BZP.csproj", "{0B722ABA-0915-419D-BE61-84AE033AE5B0}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.YNJT_BZP_GT", "..\HH.WCS.Mobox3.YNJT_BZP_GT\HH.WCS.Mobox3.YNJT_BZP_GT.csproj", "{82699D04-CB3F-4511-8CCF-08FA3730BB11}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.YNJT_PT", "..\HH.WCS.Mobox3.YNJT_PT\HH.WCS.Mobox3.YNJT_PT.csproj", "{344FD924-1B98-4B91-942B-619A1ADE8C5E}" |
| | | EndProject |
| | | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.ZS7412", "..\HH.WCS.Mobox3.ZS7412\HH.WCS.Mobox3.ZS7412.csproj", "{FFBB13EB-B1BC-45EC-922E-1B3AA642622A}" |
| | | EndProject |
| | | Global |
| | | GlobalSection(SolutionConfigurationPlatforms) = preSolution |
| | |
| | | Release|Any CPU = Release|Any CPU |
| | | EndGlobalSection |
| | | GlobalSection(ProjectConfigurationPlatforms) = postSolution |
| | | {E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {0809739B-B9DF-4757-86FE-045EB5D44798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {0809739B-B9DF-4757-86FE-045EB5D44798}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {0809739B-B9DF-4757-86FE-045EB5D44798}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {0809739B-B9DF-4757-86FE-045EB5D44798}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {44207EA0-2B75-4387-8A15-5C3D70A73C20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {44207EA0-2B75-4387-8A15-5C3D70A73C20}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {44207EA0-2B75-4387-8A15-5C3D70A73C20}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | |
| | | {8ACEE926-6897-4380-BF9D-9A443FEE6A6F}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {8ACEE926-6897-4380-BF9D-9A443FEE6A6F}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {8ACEE926-6897-4380-BF9D-9A443FEE6A6F}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {F6E51E0D-CCFD-44AD-AF62-B741F33C0E28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {F6E51E0D-CCFD-44AD-AF62-B741F33C0E28}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {F6E51E0D-CCFD-44AD-AF62-B741F33C0E28}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {F6E51E0D-CCFD-44AD-AF62-B741F33C0E28}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {E98DD345-9B0E-46C8-B0AB-20B99B5ACAEA}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {0B722ABA-0915-419D-BE61-84AE033AE5B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {0B722ABA-0915-419D-BE61-84AE033AE5B0}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {0B722ABA-0915-419D-BE61-84AE033AE5B0}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {0B722ABA-0915-419D-BE61-84AE033AE5B0}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {82699D04-CB3F-4511-8CCF-08FA3730BB11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {82699D04-CB3F-4511-8CCF-08FA3730BB11}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {82699D04-CB3F-4511-8CCF-08FA3730BB11}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {82699D04-CB3F-4511-8CCF-08FA3730BB11}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {344FD924-1B98-4B91-942B-619A1ADE8C5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {344FD924-1B98-4B91-942B-619A1ADE8C5E}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {344FD924-1B98-4B91-942B-619A1ADE8C5E}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {344FD924-1B98-4B91-942B-619A1ADE8C5E}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | {FFBB13EB-B1BC-45EC-922E-1B3AA642622A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
| | | {FFBB13EB-B1BC-45EC-922E-1B3AA642622A}.Debug|Any CPU.Build.0 = Debug|Any CPU |
| | | {FFBB13EB-B1BC-45EC-922E-1B3AA642622A}.Release|Any CPU.ActiveCfg = Release|Any CPU |
| | | {FFBB13EB-B1BC-45EC-922E-1B3AA642622A}.Release|Any CPU.Build.0 = Release|Any CPU |
| | | EndGlobalSection |
| | | GlobalSection(SolutionProperties) = preSolution |
| | | HideSolutionNode = FALSE |
| | |
| | | return responseResult; |
| | | } |
| | | |
| | | middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, "1", "2"); |
| | | middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2 , 2); |
| | | if (middleLoc == null) { |
| | | WMSHelper.addAlarmRecord("流程异常", "高", $"MES叫料任务{mesTask.ID},立库接驳位可能处于锁定或禁用状态,请查看"); |
| | | responseResult.code = 1; |
| | |
| | | wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE); |
| | | if (wmsEndLoc != null) |
| | | { |
| | | agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, "1", "1", "2"); // 1.立库接驳位 1.入库 2.非直连 |
| | | agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2); // 1.立库接驳位 1.入库 2.非直连 |
| | | if (agvEndLoc != null) |
| | | { |
| | | LogHelper.Info($"创建立库站台到立库的预创建任务,agv终点货位:{agvEndLoc.S_CODE},立库终点货位:{wmsEndLoc.S_CODE}", "AGV"); |
| | |
| | | wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE); |
| | | if (wmsEndLoc != null) |
| | | { |
| | | agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, "1", "1", "2"); // 1.立库接驳位 1.入库 2.非直连 |
| | | agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2); // 1.立库接驳位 1.入库 2.非直连 |
| | | if (agvEndLoc != null) |
| | | { |
| | | LogHelper.Info($"创建立库站台到立库的预创建任务,agv终点货位:{agvEndLoc.S_CODE},立库终点货位:{wmsEndLoc.S_CODE}", "AGV"); |
| | |
| | | } |
| | | } |
| | | |
| | | middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, "1" , "2"); |
| | | middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1 , 2); |
| | | |
| | | if (middleLoc != null) |
| | | { |
| | |
| | | wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE); |
| | | if (wmsEndLoc != null) |
| | | { |
| | | agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, "1", "1", "2"); // 1.立库接驳位 1.入库 2.非直连 |
| | | agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2); // 1.立库接驳位 1.入库 2.非直连 |
| | | if (agvEndLoc != null) |
| | | { |
| | | // 预先生成入库站台-立库终点的搬运任务 |
| | |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public static bool switchStationAttribute(SwitchStationAttributeModel model) |
| | | public static ResponseResult switchStationAttribute(SwitchStationAttributeModel model) |
| | | { |
| | | bool result = false; |
| | | ResponseResult responseResult = new ResponseResult(); |
| | | var task = WCSHelper.GetTaskByStartOrEnd(model.locCode); |
| | | if (task == null) |
| | | if (task == null) |
| | | { |
| | | var transfeRelevance= WMSHelper.GetTransfeRelevance(model.locCode); // 接驳位属性 |
| | | var transfeRelevance = WMSHelper.GetTransfeRelevance(model.locCode); // 接驳位属性 |
| | | LogHelper.Info($"原站台属性:{JsonConvert.SerializeObject(transfeRelevance)}", "WMS"); |
| | | if (transfeRelevance != null && transfeRelevance.S_TYPE == "1") |
| | | if (transfeRelevance != null && transfeRelevance.N_PROPERTY == 2) |
| | | { |
| | | if (model.signalType == "1") |
| | | { |
| | | if (transfeRelevance.S_PROPERTY == "2") |
| | | { |
| | | result = true; |
| | | } |
| | | else |
| | | { |
| | | result = WMSHelper.updateTransfeLocProperty(model.locCode, "2"); |
| | | } |
| | | WMSHelper.updateTransfeLocProperty(model.locCode, 0); |
| | | } |
| | | if (model.signalType == "2") |
| | | { |
| | | if (transfeRelevance.S_PROPERTY == "3") |
| | | { |
| | | result = true; |
| | | } |
| | | else |
| | | { |
| | | result = WMSHelper.updateTransfeLocProperty(model.locCode, "3"); |
| | | } |
| | | WMSHelper.updateTransfeLocProperty(model.locCode, 1); |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | else |
| | | { |
| | | responseResult.code = 1; |
| | | responseResult.msg = "接驳位存在未完成的任务,无法切换站台属性"; |
| | | } |
| | | return responseResult; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | LogHelper.Info("switchStationAttribute 入参:" + JsonConvert.SerializeObject(model), "WMS"); |
| | | ResponseResult result = new ResponseResult(); |
| | | var bo = ApiHelper.switchStationAttribute(model); |
| | | if (!bo) |
| | | { |
| | | result.code = 201; |
| | | } |
| | | result = ApiHelper.switchStationAttribute(model); |
| | | LogHelper.Info("switchStationAttribute 出参:" + JsonConvert.SerializeObject(result), "WMS"); |
| | | return result; |
| | | } |
| | |
| | | public string RECEIVE_DATE { get; set; } //读取日期 读取后更新 |
| | | public string EQP { get; set; } //机台编号 |
| | | public string PLAN_ID { get; set; } //计划号 |
| | | public string AWAIT_MSG { get; set; } // 等待消息 |
| | | public bool IS_FINISH { get; set; } // 是否完成上料 |
| | | public string RECEIVE_MSG { get; set; } //错误信息 错误时,AGV写入详细错误信息 |
| | | } |
| | | } |
| | |
| | | /// <summary> |
| | | /// WMS下发任务表 |
| | | /// </summary> |
| | | [SugarTable("TN_AGV_TASK")] |
| | | [SugarTable("TN_WMS_TASK")] |
| | | internal class LjXcTask : BaseModel |
| | | { |
| | | public int ID { get; set; } //主键 |
| | |
| | | [SugarTable("TN_WMS_Zone")] |
| | | public class LogicConfig : BaseModel |
| | | { |
| | | public string S_JT_CODE { get; set; } //机台号 |
| | | public string S_MTJBLOC { get; set; } //满框入库接驳位 |
| | | public string S_JTBKLYLOC { get; set; } //机台补空来源位 |
| | | public string S_LKBKHCLOC { get; set; } //补空缓存位 |
| | | public string S_LKKTJBLOC { get; set; } //补空接驳位 |
| | | public string S_AREA_CODE { get; set; } //关联立库 |
| | | public string S_JT_CODE { get; set; } //机台号 对应 MES下发任务表里的机台编号 EQP |
| | | public string S_MTJBLOC { get; set; } //满框入库接驳位 直连/非直连都是对应立库入库接驳位 |
| | | public string S_JTBKLYLOC { get; set; } //机台补空来源位 缓存位 -> 机台 |
| | | public string S_LKBKHCLOC { get; set; } //立库补空缓存位 立库 -> 缓存位 |
| | | public string S_LKKTJBLOC { get; set; } //立库补空接驳位 直连/非直连都是对应立库出库接驳位 |
| | | public string S_AREA_CODE { get; set; } //关联立库 出入库对应的存储立库 |
| | | public string S_TASK_TYPE { get; set; } //任务类型 1.胎侧直连类型 2.帘布直连类型 3.非直连类型 |
| | | public string S_PRI { get; set; } //优先级 |
| | | public string S_RG_LOC { get; set; } //是否为人工下线位 是/否 |
| | | public string S_RG_LOC { get; set; } //机台是否为人工下线位 是/否 (人工下线位代表人工机台补空工装) |
| | | public string S_ENABLE { get; set; } //是否启用 是/否 |
| | | |
| | | } |
| | |
| | | /// <summary> |
| | | /// 立库接驳位配置表 |
| | | /// </summary> |
| | | [SugarTable("TN_ConnectLoc_ReleArea")] |
| | | [SugarTable("TN_ShipmentLocConfig")] |
| | | internal class TransfeRelevance :BaseModel |
| | | { |
| | | public string S_LOC_CODE { get; set; } // 立库接驳位编码 |
| | | public string S_TYPE { get; set; } // 类型 1.立库接驳位 2.缓存位 |
| | | public string S_PROPERTY { get; set; } // 货位属性 (1.直连 2.非直连、3.人工 、4.固定站台) |
| | | public string S_ACT_TYPE { get; set; } // 动作类型 0.默认 1.入库 2.出库 |
| | | public string S_RELE_AREA { get; set; } // 关联立库库区编码 |
| | | public string S_DEVICE_NO { get; set; } // 设备号 |
| | | public int N_READ_LOC { get; set; } // 是否读码位 0、否 1.是 |
| | | |
| | | public string S_LOC_CODE { get; set; } // 货位编码 |
| | | public int N_PROPERTY { get; set; } // 货位属性 (1.直连 2.非直连) |
| | | public int N_ACT_TYPE { get; set; } // 货位类型 1.入库接驳位 2.出库接驳位 |
| | | public string S_RELE_AREA { get; set; } // 所属库区 |
| | | public string S_DEVICE_NO { get; set; } // 设备号 用途:用于查询线体光电,判断缓存位是否为空 |
| | | public int N_IS_MANUAL { get; set; } // 是否为人工 (0.非人工 2.人工) 用途:切换人工站台 |
| | | public int N_READ_LOC { get; set; } // 是否读码位 (0、否 1.是) |
| | | |
| | | } |
| | | } |
| | |
| | | LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,起点解绑容器{mst.S_CNTR_CODE}"); |
| | | // 终点为直连缓存位,不绑定 |
| | | var loc = WMSHelper.GetTransfeRelevance(mst.S_END_LOC); |
| | | if (loc != null && loc.S_PROPERTY == "1") |
| | | if (loc != null && loc.N_PROPERTY == 1) |
| | | { |
| | | LocationHelper.UnLockLoc(mst.S_END_LOC); |
| | | return; |
| | |
| | | /// 1.查询异常区货位 |
| | | /// </summary> |
| | | /// <param name="areaCode">库区</param> |
| | | /// <param name="type">类型 1.立库接驳位 2.缓存位</param> |
| | | /// <param name="property">货位属性(1.直连 2.非直连 3.人工 4.固定站台)</param> |
| | | /// <param name="actType">动作类型(0.默认 1.入库 2.出库)</param> |
| | | /// <param name="property">货位属性(1.直连 2.非直连)</param> |
| | | /// <param name="actType">动作类型(0.人工接驳位 1.入库接驳位 2.出库接驳位)</param> |
| | | /// <returns></returns> |
| | | public static Location GetTransfeRelevanceLoc(string areaCode , string type ,string actType = "0" ,string property = "2" ) |
| | | public static Location GetTransfeRelevanceLoc(string areaCode ,int actType ,int property ) |
| | | { |
| | | Location loc = null; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | loc = db.Queryable<Location>() |
| | | .LeftJoin<TransfeRelevance>((a,b)=> a.S_CODE == b.S_LOC_CODE) |
| | | .Where((a, b) => b.S_RELE_AREA.Trim() == areaCode && b.S_TYPE.Trim() == type && b.S_PROPERTY == property && b.S_ACT_TYPE == actType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") |
| | | .Where((a, b) => b.S_RELE_AREA.Trim() == areaCode && b.N_PROPERTY == property && b.N_ACT_TYPE == actType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") |
| | | .First(); |
| | | return loc; |
| | | } |
| | |
| | | /// 查询接驳位关联属性 |
| | | /// </summary> |
| | | /// <param name="locCode"></param> |
| | | /// <param name="property">货位属性 (1.直连 2.非直连、3.人工 、4.固定站台)</param> |
| | | /// <param name="isManual">货位属性 (0.非人工 1.人工)</param> |
| | | /// <returns></returns> |
| | | public static bool updateTransfeLocProperty(string locCode ,string property) |
| | | public static bool updateTransfeLocProperty(string locCode ,int isManual) |
| | | { |
| | | bool result = false; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | result = db.Updateable<TransfeRelevance>().SetColumns(a => new TransfeRelevance() { S_PROPERTY = property } ).Where(a => a.S_LOC_CODE.Trim() == locCode).ExecuteCommand() > 0; |
| | | result = db.Updateable<TransfeRelevance>().SetColumns(a => new TransfeRelevance() { N_IS_MANUAL = isManual } ).Where(a => a.S_LOC_CODE.Trim() == locCode).ExecuteCommand() > 0; |
| | | return result; |
| | | } |
| | | |
| | |
| | | /// 注:查询任务最少的接驳位 |
| | | /// </summary> |
| | | /// <param name="areaCode">库区</param> |
| | | /// <param name="property">货位属性 (1.直连 2.非直连、3.人工 、4.固定站台)</param> |
| | | /// <param name="type">类型 1.立库接驳位 2.缓存位 3.机台下线位 4.异常库位</param> |
| | | /// <param name="actType">动作类型 1.入库 2.出库</param> |
| | | /// <param name="property">货位属性 ( 0.人工 1.直连 2.非直连)</param> |
| | | /// <param name="actType">动作类型 (1.入库接驳位 2.出库接驳位)</param> |
| | | /// <returns></returns> |
| | | public static Location GetMinTaskTransfeLoc(string areaCode , string type ,string actType, string property = "2") |
| | | public static Location GetMinTaskTransfeLoc(string areaCode ,int actType, int property) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var loc = db.Queryable<Location>() |
| | | .LeftJoin<TransfeRelevance>((a,b) => a.S_CODE == b.S_LOC_CODE) |
| | | .LeftJoin<WCSTask>((a,b,c) => a.S_CODE == c.S_END_LOC && c.N_B_STATE < 3) |
| | | .Where((a, b, c) => b.S_RELE_AREA.Trim() == areaCode && b.S_TYPE.Trim() == type && b.S_ACT_TYPE.Trim() == actType && b.S_PROPERTY.Trim() == property && a.N_LOCK_STATE < 3 && a.C_ENABLE == "Y") |
| | | .Where((a, b, c) => b.S_RELE_AREA.Trim() == areaCode && b.N_ACT_TYPE == actType && b.N_PROPERTY == property && a.N_LOCK_STATE < 3 && a.C_ENABLE == "Y") |
| | | .GroupBy((a, b, c) => a.S_CODE) |
| | | .Select((a, b, c) => new { |
| | | count = SqlFunc.AggregateCount(c.S_END_LOC), |
| | |
| | | try |
| | | { |
| | | Location endLoc = LocationHelper.GetLoc(model.endLoc); |
| | | if (endLoc.N_CURRENT_NUM == 0) |
| | | if (endLoc.N_CURRENT_NUM == 0) |
| | | { |
| | | for (int i = 0; i < endLoc.N_CAPACITY; i++) |
| | | int taskNum = 0; |
| | | for (int i = 0; i < endLoc.N_CAPACITY; i++) |
| | | { |
| | | Location startLoc = WMSHelper.GetoutStockStartLoc(model.itemCode); |
| | | Location middleLoc = null; |
| | |
| | | } |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "库内没有满足条件的物料"; |
| | | return result; |
| | | LogHelper.Info($"库内没有物料:{model.itemCode}", "WMS"); |
| | | break; |
| | | } |
| | | |
| | | |
| | | |
| | | if (endLoc != null) |
| | | { |
| | | var wmsTask = new WMSTask() |
| | |
| | | // 更新作业任务状态 |
| | | wmsTask.N_B_STATE = 1; |
| | | WMSHelper.UpdateTaskState(wmsTask); |
| | | taskNum++; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (taskNum < endLoc.N_CAPACITY) |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = $"库内物料不足,已生成出库任务数:{taskNum}"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result.ResultCode = 1; |
| | | result.ResultMsg = "终点货位当前容量不为0,无法叫料"; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | "SqlServer": "server=192.168.1.204;uid=root;pwd=yn123456;database=oimobox", |
| | | "SqlServer1": "Data Source=192.168.1.198\\sql2008;Initial Catalog=OIMobox;User ID=sa;Password=sa@2015", |
| | | "ApiPort": 8901, |
| | | "FacCode": "1122", |
| | | "WHCode": "YNJT", |
| | | "FacCode": "IF001", |
| | | "WHCode": "IW001", |
| | | "NDCApiUrl": "", |
| | | "baseTrayBufferLoc": [ |
| | | { |
| | | "bufferOutLoc": "SeA21", |
| | | "bufferInLoc": "PPA06-12-7-2" |
| | | |
| | | { |
| | | "bufferOutLoc": "SeA26", |
| | | "bufferInLoc": "PPA06-12-1-2" |
| | | }, |
| | | { |
| | | "bufferOutLoc": "SeA27", |
| | | "bufferInLoc": "PPA07-13-1-1" |
| | | }, |
| | | { |
| | | "bufferOutLoc": "SeA28", |
| | | "bufferInLoc": "PPA07-13-1-2" |
| | | }, |
| | | { |
| | | "bufferOutLoc": "SeA29", |
| | | "bufferInLoc": "PPA07-14-1-1" |
| | | }, |
| | | { |
| | | "bufferOutLoc": "SeA231", |
| | | "bufferInLoc": "PPA07-14-1-2" |
| | | } |
| | | ], // 母拖自动入库货位 |
| | | ], |
| | | "errorBufferArea": "EA", |
| | | "storeAreaCode": "PPA", |
| | | |
| | | "AgvWaitLoc": [ |
| | | { |
| | | "loc": "WA01", |
| | |
| | | } |
| | | ], |
| | | |
| | | // type 1.agv接驳位 2.人工接驳位 action 0.通用 1.入库 2.出库 |
| | | // action 0.通用 1.入库 2.出库 |
| | | "AgvJBLoc": [ |
| | | { |
| | | "locCode": "SeA01", |
| | | "type": 2, |
| | | "roadway": [ 1 ], |
| | | "action": 0 |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA02", |
| | | "type": 2, |
| | | "roadway": [ 1 ], |
| | | "action": 0 |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA03", |
| | | "type": 1, |
| | | "roadway": [ 1 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA04", |
| | | "type": 1, |
| | | "roadway": [ 1 ], |
| | | "action": 2 |
| | | }, |
| | | { |
| | | "locCode": "SeA05", |
| | | "type": 2, |
| | | "roadway": [ 2, 3 ], |
| | | "action": 0 |
| | | "roadway": [ 2], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA06", |
| | | "type": 2, |
| | | "roadway": [ 2, 3 ], |
| | | "action": 0 |
| | | "roadway": [ 2 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA07", |
| | | "type": 2, |
| | | "roadway": [ 2, 3 ], |
| | | "action": 0 |
| | | "roadway": [ 2 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA08", |
| | | "type": 2, |
| | | "roadway": [ 2, 3 ], |
| | | "action": 0 |
| | | "roadway": [ 2 ], |
| | | "action": 2 |
| | | }, |
| | | { |
| | | "locCode": "SeA09", |
| | | "type": 1, |
| | | "roadway": [ 2, 3 ], |
| | | "roadway": [ 3 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA10", |
| | | "type": 1, |
| | | "roadway": [ 2, 3 ], |
| | | "action": 2 |
| | | "roadway": [ 3 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA11", |
| | | "type": 2, |
| | | "roadway": [ 4, 5 ], |
| | | "action": 0 |
| | | "roadway": [ 3 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA12", |
| | | "type": 2, |
| | | "roadway": [ 4, 5 ], |
| | | "action": 0 |
| | | "roadway": [ 3 ], |
| | | "action": 2 |
| | | }, |
| | | { |
| | | "locCode": "SeA13", |
| | | "type": 1, |
| | | "roadway": [ 4, 5 ], |
| | | "roadway": [ 3 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA14", |
| | | "type": 1, |
| | | "roadway": [ 4, 5 ], |
| | | "roadway": [ 3 ], |
| | | "action": 2 |
| | | }, |
| | | { |
| | | "locCode": "SeA15", |
| | | "type": 2, |
| | | "roadway": [ 4, 5 ], |
| | | "action": 0 |
| | | "roadway": [ 4 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA16", |
| | | "type": 2, |
| | | "roadway": [ 4, 5 ], |
| | | "action": 0 |
| | | "roadway": [ 4 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA17", |
| | | "type": 2, |
| | | "roadway": [ 6, 7 ], |
| | | "action": 0 |
| | | "roadway": [ 4 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA18", |
| | | "type": 2, |
| | | "roadway": [ 6, 7 ], |
| | | "action": 0 |
| | | "roadway": [ 4 ], |
| | | "action": 2 |
| | | }, |
| | | { |
| | | "locCode": "SeA19", |
| | | "type": 2, |
| | | "roadway": [ 6, 7 ], |
| | | "action": 0 |
| | | "roadway": [ 4 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA20", |
| | | "type": 2, |
| | | "roadway": [ 6, 7 ], |
| | | "action": 0 |
| | | "roadway": [ 4 ], |
| | | "action": 2 |
| | | }, |
| | | { |
| | | "locCode": "SeA21", |
| | | "type": 1, |
| | | "roadway": [ 6, 7 ], |
| | | "roadway": [ 5 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA22", |
| | | "type": 1, |
| | | "roadway": [ 6, 7 ], |
| | | "roadway": [ 5 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA23", |
| | | "roadway": [ 5 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA24", |
| | | "roadway": [ 5 ], |
| | | "action": 2 |
| | | }, |
| | | { |
| | | "locCode": "SeA25", |
| | | "roadway": [ 6 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA26", |
| | | "roadway": [ 6 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA27", |
| | | "roadway": [ 7 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA28", |
| | | "roadway": [ 7 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA29", |
| | | "roadway": [ 6,7 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA30", |
| | | "roadway": [ 6,7 ], |
| | | "action": 2 |
| | | }, |
| | | { |
| | | "locCode": "SeA31", |
| | | "roadway": [ 6,7 ], |
| | | "action": 1 |
| | | }, |
| | | { |
| | | "locCode": "SeA32", |
| | | "roadway": [ 6,7 ], |
| | | "action": 2 |
| | | } |
| | | ] |
| | |
| | | var wmsTask = WMSHelper.GetWmsTask(TN_Task.S_OP_CODE); |
| | | if (wmsTask != null && wmsTask.N_B_STATE < 2) |
| | | { |
| | | WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData); |
| | | if (model.State <= 7) |
| | | { |
| | | //有任务号请求 |
| | |
| | | if (agvJBLoc != null && agvJBLoc.action == 1) |
| | | { |
| | | //是则查询WCS的任务执行情况 |
| | | var wcsTask = WCSHelper.GetTaskBySrcNoAndScheduleType(TN_Task.S_OP_CODE, "WCS"); |
| | | var wcsTask = WCSHelper.GetTaskBySrcNoAndScheduleType(TN_Task.S_OP_CODE, "WCS" , wmsTask.S_TYPE); |
| | | if (wcsTask != null) |
| | | { |
| | | bool existAction = WCSHelper.CheckActionRecordExist(wcsTask.S_CODE, 7); |
| | |
| | | //安全请求等 |
| | | TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData); |
| | | } |
| | | |
| | | WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData); |
| | | } |
| | | } |
| | | } |
| | |
| | | // 安全请求发送成功,添加任务动作记录 |
| | | if (result) |
| | | { |
| | | WCSHelper.AddActionRecord(no, state, forkliftNo, extData); |
| | | LogHelper.Info($"首次进行安全请求成功", "AGV"); |
| | | } |
| | | } |
| | |
| | | if (mst.N_B_STATE == 0) { |
| | | var startLoc = LocationHelper.GetLocation(mst.S_START_LOC); |
| | | var endLoc = LocationHelper.GetLocation(mst.S_END_LOC); |
| | | var container = ContainerHelper.GetCntr(mst.S_CNTR_CODE); |
| | | if (mst.S_SCHEDULE_TYPE == "AGV") |
| | | { |
| | | AddOrderNewModel model = new AddOrderNewModel() |
| | |
| | | from = mst.S_START_LOC, |
| | | to = mst.S_END_LOC, |
| | | cntrNo = mst.S_CNTR_CODE, |
| | | cntrType = container.N_TYPE.ToString(), |
| | | }; |
| | | LogHelper.Info($"向WCS下发任务,任务参数:{sendTask}", "WMS"); |
| | | var bo = WCSDispatch.sendTask(sendTask); |
| | |
| | | public string locCode { get; set; } |
| | | public string name { get; set; } |
| | | public List<int> roadway { get; set; } |
| | | public int action { get; set; } // 0.通用 1.入库 2.出库 |
| | | public int action { get; set; } // 1.入库 2.出库 |
| | | } |
| | | |
| | | public class AgvWaitLoc |
| | |
| | | var task = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE== no).First(); |
| | | return task; |
| | | } |
| | | internal static WCSTask GetTaskBySrcNoAndScheduleType(string no ,string scheduleType) |
| | | internal static WCSTask GetTaskBySrcNoAndScheduleType(string no ,string scheduleType ,string taskType) |
| | | { |
| | | var db = new SqlHelper<WCSTask>().GetInstance(); |
| | | var task = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == no && a.S_SCHEDULE_TYPE == scheduleType).First(); |
| | | var task = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == no && a.S_SCHEDULE_TYPE == scheduleType && a.S_TYPE.Contains(taskType)).First(); |
| | | return task; |
| | | } |
| | | internal static List<WCSTask> GetTaskListBySrcNo(string no) |