From b7308bba3d7ffad271ce7fc7a93c8c45d76be87d Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期五, 13 六月 2025 17:21:03 +0800 Subject: [PATCH] 优化印尼佳通-硫化胚胎出入库逻辑策略优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs | 229 ++++---- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs | 2 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs | 126 +++- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs | 439 +++++++++++------ HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs | 3 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs | 1 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/SideLocConfig.cs | 1 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs | 130 ++-- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs | 427 +++++++++++----- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/LocationHelper.cs | 23 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs | 84 +- HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs | 6 12 files changed, 904 insertions(+), 567 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs index 1de6c57..e36ba54 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs @@ -81,8 +81,10 @@ List<Task> tasks = new List<Task>(); // 娣诲姞浠诲姟鎺ㄩ�绾跨▼ tasks.Add(GetTask(WCSCore.Dispatch)); - // 鐩戝惉MES浠诲姟锛屼笅鍙戜换鍔�- tasks.Add(GetTask(Monitor.MonitorMesTask)); + // 鐩戝惉鎴愬瀷鏈哄彨鏂欎换鍔�+ tasks.Add(GetTask(Monitor.MonitorCXJCallMaterialMesTask)); + // 鐩戝惉閽㈠寘婊℃枡涓嬬嚎浠诲姟 + tasks.Add(GetTask(Monitor.MonitorGBOffLineMesTask)); // 鐩戝惉鏂滆鍑哄簱浠诲姟琛� tasks.Add(GetTask(Monitor.MonitorXcOutTask)); // 鑷姩琛ュ厖绌哄伐瑁呬换鍔�diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs index 176e9dc..49ea593 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs @@ -228,43 +228,53 @@ public static ResponseResult offLineProcess(OffLineRequest model) { ResponseResult responseResult = new ResponseResult(); - // 鏌ヨ璧风偣璐т綅鏄惁瀛樺湪宸插瓨鍦ㄤ换鍔★紝闃叉浠诲姟閲嶅鍙戣捣 - var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc); - if (existWmsTask == null) + var areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList(); + var isExistCntr = LocationHelper.checkAreaExistCntr(areaCodes,model.cntrNo); + if (!isExistCntr) { - // 鏌ヨ瀵瑰簲鏈哄彴鐨勭墿鏂欎笅绾块厤缃俊鎭�- var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo); - if (logicConfig != null) + // 鏌ヨ璧风偣璐т綅鏄惁瀛樺湪宸插瓨鍦ㄤ换鍔★紝闃叉浠诲姟閲嶅鍙戣捣 + var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc); + if (existWmsTask == null) { - Container container = ContainerHelper.GetCntr(model.cntrNo); - if (container == null || !model.isNormal) + // 鏌ヨ瀵瑰簲鏈哄彴鐨勭墿鏂欎笅绾块厤缃俊鎭�+ var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo); + if (logicConfig != null) { - ContainerHelper.AddCntr(model.cntrNo); - ContainerHelper.UpdateCntrState(model.cntrNo, 1); - WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null); - } + Container container = ContainerHelper.GetCntr(model.cntrNo); + if (container == null || !model.isNormal) + { + ContainerHelper.AddCntr(model.cntrNo); + ContainerHelper.UpdateCntrState(model.cntrNo, 1); + WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null); + } - // 鏍规嵁鐗╂枡涓嬬嚎閰嶇疆淇℃伅锛屽垽鏂换鍔$被鍨嬫槸鐩磋繛涓嬬嚎杩樻槸闈炵洿杩炰笅绾�- if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2") - { - triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig); + // 鏍规嵁鐗╂枡涓嬬嚎閰嶇疆淇℃伅锛屽垽鏂换鍔$被鍨嬫槸鐩磋繛涓嬬嚎杩樻槸闈炵洿杩炰笅绾�+ if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2") + { + triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig); + } + else + { + // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�+ triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig); + } } else { - // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�- triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺�璇疯仈绯荤鐞嗕汉鍛�); + throw new BusinessException($"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺紝璇疯仈绯荤鐞嗕汉鍛�); } } else { - WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺�璇疯仈绯荤鐞嗕汉鍛�); - throw new BusinessException($"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺紝璇疯仈绯荤鐞嗕汉鍛�); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�); + throw new BusinessException($"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�); } } else { - WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�); - throw new BusinessException($"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"宸ヨ锛歿model.cntrNo}宸插叆搴擄紝璇峰嬁閲嶅鍏ュ簱"); + throw new BusinessException($"宸ヨ锛歿model.cntrNo}宸插叆搴擄紝璇峰嬁閲嶅鍏ュ簱"); } return responseResult; } @@ -369,8 +379,8 @@ } else { - WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"绌哄伐瑁呭嚭搴撶珯鍙�{logicConfig.S_LKKTJBLOC},娌℃湁绌哄伐瑁�); - photoStatus = false; + kgzCntrCode = "铏氭嫙瀹瑰櫒"; + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴撶珯鍙�{logicConfig.S_LKKTJBLOC},娌℃湁绌哄伐瑁�); } } @@ -917,7 +927,6 @@ // 鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬� WMSHelper.updateLotOutTask(cst.S_CNTR_CODE, "2"); } - } } } @@ -941,45 +950,27 @@ if (mst != null && mst.N_B_STATE < 2) { int emptyFlag = 0; // 瀹瑰櫒绌烘弧鏍囪瘑 - Container cntr = ContainerHelper.GetCntr(cst.S_CNTR_CODE); - if (cntr != null && cntr.N_DETAIL_COUNT > 0) { + var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE); + if (cntrItemRels.Count > 0) { emptyFlag = 1; } // 1锛氬爢鍨涙満鏀捐揣寮傚父鐢宠鏂扮粓鐐� if (model.applyType == 1) { // 鎶ヨ锛氭祦绋嬪紓甯�- WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"鍫嗗灈鏈烘斁璐у紓甯革紝寮傚父璐т綅锛歿cst.S_END_LOC}"); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鍫嗗灈鏈烘斁璐у紓甯革紝浠诲姟鍙凤細{cst.S_CODE}锛屽紓甯歌揣浣嶏細{cst.S_END_LOC}"); // 1.灏嗗紓甯歌揣浣嶄笂閿侊紝骞舵姤璀� LocationHelper.LockLoc(cst.S_END_LOC, 3); // 2.鏌ヨ鏂扮殑鍏ュ簱缁堢偣 - Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag); + Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag ); cst.S_END_LOC = endLoc.S_CODE; WCSHelper.UpdateEndLoc(cst); LocationHelper.LockLoc(endLoc.S_CODE, 1); applyDest.destLoc = endLoc.S_CODE; } - else if (model.applyType == 2) - { - if (cst.S_END_LOC == "铏氭嫙搴撲綅") - { - var transfeRelevance = WMSHelper.GetTransfeRelevance(model.loc); // 鎺ラ┏浣嶅叧鑱斿睘鎬�- if (transfeRelevance != null) - { - // 1.鏌ヨ鏂扮殑鍏ュ簱缁堢偣 - Location endLoc = WMSHelper.getInStockEndLoc(transfeRelevance.S_RELE_AREA, emptyFlag); - cst.S_END_LOC = endLoc.S_CODE; - WCSHelper.UpdateEndLoc(cst); - - LocationHelper.LockLoc(endLoc.S_CODE, 1); - applyDest.destLoc = endLoc.S_CODE; - } - } - } - } } result.data = applyDest; @@ -1066,18 +1057,22 @@ { if (mst.S_TYPE == "浣欐枡/绌哄伐瑁呭叆搴�) { - var mesTask = WMSHelper.GetLjMesTaskById(int.Parse(mst.S_OP_DEF_CODE)); - if (mesTask.QTY != 0) + var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId); + if (bo) { - var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE); - if (awaitTask != null) + var mesTask = WMSHelper.GetLjMesTaskById(mesId); + if (mesTask.QTY != 0) { - // 鍙栨秷浠诲姟 - ApiHelper.cancelTask(awaitTask.S_CODE); - // 淇敼缁堢偣 - agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC); - wmsEndLoc = agvEndLoc; - mst.S_TYPE = "鍙枡鍑哄簱浠诲姟"; + var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE); + if (awaitTask != null) + { + // 鍙栨秷浠诲姟 + ApiHelper.cancelTask(awaitTask.S_CODE); + // 淇敼缁堢偣 + agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC); + wmsEndLoc = agvEndLoc; + mst.S_TYPE = "鍙枡鍑哄簱浠诲姟"; + } } } } @@ -1199,7 +1194,7 @@ } else { - WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛屾湭鏌ヨ鍒扮珛搴撴帴椹充綅"); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛岀珛搴�{wmsEndLoc.S_AREA_CODE}鏈厤缃珛搴撴帴椹充綅"); return null; } } @@ -1342,118 +1337,112 @@ /// 鎴愭柊鏈哄彨鏂� /// </summary> /// <param name="materialCode"></param> - /// <param name="endLocCode"></param> + /// <param name="jtNo"></param> /// <param name="mesTaskId"></param> - public static void callMaterial(string materialCode, string endLocCode, int mesTaskId) + public static void callMaterial(string materialCode, string jtNo, int mesTaskId) { - var oldWmsTask = WMSHelper.GetWmsTaskByEnd(endLocCode); - if (oldWmsTask == null) { - string cntrCode = ""; - Location endLoc = LocationHelper.GetLoc(endLocCode); + string cntrCode = ""; + var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId); + + if (mesTask != null) + { + Location endLoc = WMSHelper.getCallMaterialLocCode(jtNo); if (endLoc != null) { Location middleLoc = null; Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode); - if (startLoc == null) - { - var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId); - if (mesTask != null) - { - mesTask.RECEIVE_MSG = "娌℃湁搴撳瓨"; - WMSHelper.updateLjMesTask(mesTask); - } - WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鍙枡澶辫触锛岀墿鏂�{materialCode}娌℃湁搴撳瓨"); - return; - } - else + if (startLoc != null) { var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); if (locCntrRels.Count > 0) { cntrCode = locCntrRels[0].S_CNTR_CODE; - } - else - { - WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏌ヨ鐗╂枡寮傚父锛岃揣浣�{startLoc.S_CODE}缂哄皯瀹瑰櫒淇℃伅"); - return; - } - } - - middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1 , 2); - - if (middleLoc != null) - { - // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�- var wmsTask = new WMSTask() - { - S_CNTR_CODE = cntrCode, - S_CODE = WMSHelper.GenerateTaskNo(), - S_START_LOC = startLoc.S_CODE, - S_START_AREA = startLoc.S_AREA_CODE, - S_END_LOC = endLoc.S_CODE, - S_END_AREA = endLoc.S_AREA_CODE, - S_TYPE = "鍙枡鍑哄簱浠诲姟", - S_OP_DEF_CODE = mesTaskId.ToString(), - S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�, - T_START_TIME = DateTime.Now, - }; - if (WMSHelper.CreateWmsTask(wmsTask)) - { - WCSTask wcsTask = new WCSTask() + middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2); + if (middleLoc != null) { - S_OP_NAME = wmsTask.S_OP_DEF_NAME, - S_OP_CODE = wmsTask.S_CODE, - S_CODE = WCSHelper.GenerateTaskNo(), - S_CNTR_CODE = wmsTask.S_CNTR_CODE, - S_TYPE = wmsTask.S_TYPE + "-WCS", - S_START_LOC = startLoc.S_CODE, - S_START_AREA = startLoc.S_AREA_CODE, - S_END_LOC = middleLoc.S_CODE, - S_END_AREA = middleLoc.S_AREA_CODE, - S_SCHEDULE_TYPE = "WCS", - N_PRIORITY = 10, - T_START_TIME = DateTime.Now, - }; + // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+ var wmsTask = new WMSTask() + { + S_CNTR_CODE = cntrCode, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_TYPE = "鍙枡鍑哄簱浠诲姟", + S_OP_DEF_CODE = mesTaskId.ToString(), + S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�, + T_START_TIME = DateTime.Now, + }; + if (WMSHelper.CreateWmsTask(wmsTask)) + { + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = middleLoc.S_CODE, + S_END_AREA = middleLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "WCS", + N_PRIORITY = 10, + T_START_TIME = DateTime.Now, + }; - if (WCSHelper.CreateTask(wcsTask)) - { - // 璧风偣銆佺粓鐐瑰姞閿�- LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); - LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); - // 鏇存柊浣滀笟浠诲姟鐘舵� - wmsTask.N_B_STATE = 1; - WMSHelper.UpdateTaskState(wmsTask); + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + } + + // 棰勫垱寤轰簩娈典换鍔�+ WCSTask twoWcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = middleLoc.S_CODE, + S_START_AREA = middleLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "AGV", + N_PRIORITY = 10, + T_START_TIME = DateTime.Now, + N_B_STATE = -1 + }; + WCSHelper.CreateTask(twoWcsTask); + WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId); + } } - - // 棰勫垱寤轰簩娈典换鍔�- WCSTask twoWcsTask = new WCSTask() + else { - S_OP_NAME = wmsTask.S_OP_DEF_NAME, - S_OP_CODE = wmsTask.S_CODE, - S_CODE = WCSHelper.GenerateTaskNo(), - S_CNTR_CODE = wmsTask.S_CNTR_CODE, - S_TYPE = wmsTask.S_TYPE, - S_START_LOC = middleLoc.S_CODE, - S_START_AREA = middleLoc.S_AREA_CODE, - S_END_LOC = endLoc.S_CODE, - S_END_AREA = endLoc.S_AREA_CODE, - S_SCHEDULE_TYPE = "AGV", - N_PRIORITY = 10, - T_START_TIME = DateTime.Now, - N_B_STATE = -1 - }; - WCSHelper.CreateTask(twoWcsTask); - - WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅"); + } + } + else + { + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�); } } - else + else { - WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅"); - } + mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻"; + WMSHelper.updateLjMesTask(mesTask); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻"); + } } } + } /// <summary> @@ -1465,14 +1454,142 @@ /// <param name="materialCode"></param> /// <param name="endLocCode"></param> /// <param name="mesTaskId"></param> - public static void callMaterialHDK(string materialCode, string endLocCode, int mesTaskId) + public static void callMaterialXC(string materialCode, string endLocCode, int mesTaskId) { // 1.鏌ヨ鐜甫搴撶墿鏂欏簱瀛�+ DateTime inStockTimeXc = DateTime.MinValue; + List<CntrItemRel> cntrItemRelsXc = new List<CntrItemRel>(); + if (cntrItemRelsXc.Count > 0) + { + inStockTimeXc = cntrItemRelsXc[0].T_INBOUND_TIME; + } - // 2.鏌ヨ涓浆搴撳簱瀛橈紝鏍规嵁鍏ュ簱鏃堕棿 杩涜鍏堝叆鍏堝嚭 + // 2.鏌ヨ涓浆搴撳簱瀛�+ DateTime inStockTime = DateTime.MinValue; + var cntrItemRels = WMSHelper.getZZKInventoryInfo(materialCode); + if (cntrItemRels.Count > 0) + { + inStockTime = cntrItemRels[0].T_INBOUND_TIME; + } - // 3.灏哅ES浠诲姟鍐欏叆鐜甫搴撲换鍔′腑闂磋〃 - WMSHelper.addLjXcTask(mesTaskId); + // 3.鏍规嵁鍏堣繘鍏堝嚭璁$畻鍑哄簱鐨勭墿鏂欐槸鐜甫搴�杩樻槸涓浆搴�+ var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId); + if (inStockTime >= inStockTimeXc) + { + //鏂滆鐗╂枡鍑哄簱 + if (cntrItemRelsXc.Count > 0) + { + // 4.灏哅ES浠诲姟鍐欏叆鐜甫搴撲换鍔′腑闂磋〃 + WMSHelper.addLjXcTask(mesTask); + } + } + else + { + //涓浆搴撶墿鏂欏嚭搴�+ if (cntrItemRels.Count > 0) + { + var cntrItemRel = cntrItemRels[0]; + var locCntrRel = LocationHelper.GetLocCntrByCntr(cntrItemRel.S_CNTR_CODE); + if (locCntrRel != null) + { + var endLoc = LocationHelper.GetLoc(locCntrRel.S_LOC_CODE); + if (endLoc != null) + { + Location middleLoc = null; + Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode); + if (startLoc != null) + { + var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); + if (locCntrRels.Count > 0) + { + var cntrCode = cntrItemRel.S_CNTR_CODE; + middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2); + if (middleLoc != null) + { + // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+ var wmsTask = new WMSTask() + { + S_CNTR_CODE = cntrCode, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_TYPE = "鍙枡鍑哄簱浠诲姟", + S_OP_DEF_CODE = mesTaskId.ToString(), + S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�, + T_START_TIME = DateTime.Now, + }; + if (WMSHelper.CreateWmsTask(wmsTask)) + { + WCSTask wcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = middleLoc.S_CODE, + S_END_AREA = middleLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "WCS", + N_PRIORITY = 10, + T_START_TIME = DateTime.Now, + }; + + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); + } + + // 棰勫垱寤轰簩娈典换鍔�+ WCSTask twoWcsTask = new WCSTask() + { + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = middleLoc.S_CODE, + S_START_AREA = middleLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "AGV", + N_PRIORITY = 10, + T_START_TIME = DateTime.Now, + N_B_STATE = -1 + }; + WCSHelper.CreateTask(twoWcsTask); + WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId); + } + } + else + { + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅"); + } + } + else + { + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�); + } + } + else + { + mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻"; + WMSHelper.updateLjMesTask(mesTask); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻"); + } + } + } + } + } } /// <summary> @@ -1483,12 +1600,12 @@ /// 3.鍒涘缓浣欐枡鍥炲簱浣滀笟锛屽垱寤篴gv鎼繍浠诲姟锛岃櫄鎷熺粓鐐� /// </summary> /// <param name="locCode">鎴愬瀷鏈哄彨鏂欑粓鐐�/param> - public static void returnMaterialOrEmptyTray(string locCode) + /// <param name="jtNo">鎴愬瀷鏈哄彨鏂欑粓鐐�/param> + public static void returnMaterialOrEmptyTray(string locCode ,string jtNo) { if (locCode != null) { - // 2.鏌ヨmes浠诲姟涓棿琛�- var mesTask = WMSHelper.getLjMesTaskByLoc(locCode); + var mesTask = WMSHelper.getLjMesTaskByJtNo(jtNo); if (mesTask != null) { createReturnTask(locCode, mesTask); @@ -1665,10 +1782,11 @@ } } - if (cst.S_TYPE == "鍙枡鍑哄簱浠诲姟") + var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId); + if (bo) { - var mesTask = WMSHelper.GetLjMesTaskByAgvorderId(mst.S_CODE); - callMaterial( mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); + var mesTask = WMSHelper.GetLjMesTaskById(mesId); + callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); } } return result; @@ -2019,7 +2137,8 @@ //---------------------------------------------------------------------------------------------------------------------------- public class LocModel { - public string locCode { get; set; } + public string locCode { get; set; } // 杩旀枡璐т綅缂栧彿 + public string jtNo { get; set; } // 鏈哄彴鍙� } public class ApplyDest { diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs index 56f8e9d..6652b31 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs @@ -70,7 +70,7 @@ { LogHelper.Info("浣欐枡/绌哄伐瑁呰繑鍥�returnMaterialAndPallet 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "Mobox"); ResponseResult responseResult = new ResponseResult(); - ApiHelper.returnMaterialOrEmptyTray(model.locCode); + ApiHelper.returnMaterialOrEmptyTray(model.locCode ,model.jtNo); LogHelper.Info("浣欐枡/绌哄伐瑁呰繑鍥�returnMaterialAndPallet 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "Mobox"); return responseResult; } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs index d7a5809..889f4cc 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs @@ -23,55 +23,67 @@ /// </summary> internal class Monitor { - + /// <summary> - /// 鐩戝惉MES浠诲姟涓棿琛�- /// 1.閽㈠寘婊℃枡涓嬬嚎 - /// 2.鎴愬瀷鏈哄彨鏂�+ /// 鐩戝惉閽㈠寘婊℃枡涓嬬嚎MES浠诲姟 /// </summary> - public static void MonitorMesTask() { - LogHelper.Info("鐩戝惉MES浠诲姟涓棿琛�, "WMS"); + public static void MonitorGBOffLineMesTask() + { var mesTaskList = WMSHelper.GetLjMesTaskList("PENDING"); - foreach (var mesTask in mesTaskList) + if (mesTaskList.Count > 0) { - // 1.閽㈠寘婊℃枡涓嬬嚎 - List<string> lineLoclist = new List<string>() { }; - lineLoclist.Add("GBJTW-01"); - lineLoclist.Add("GBJTW-02"); - if (mesTask.MSG_TYPE == "1" && mesTask.PALLET_TYPE == "7" && lineLoclist.Contains(mesTask.PALLET_ID)) + mesTaskList = mesTaskList.Where(a => a.MSG_TYPE == "1" && a.PALLET_TYPE == "7").ToList(); + if (mesTaskList.Count > 0) { - LogHelper.Info("MES閽㈠寘婊℃枡涓嬬嚎浠诲姟", "WMS"); - OffLineRequest request = new OffLineRequest(){ loc = mesTask.POSITION_ID, cntrNo = mesTask.PALLET_ID}; - ApiHelper.offLineProcess(request); - } - - // 2.鎴愭柊鏈哄彨鏂�- if (mesTask.MSG_TYPE == "0") { - var lineSideLoc = WMSHelper.GetLineSideLoc(mesTask.POSITION_ID); - if (lineSideLoc != null ) + foreach (var mesTask in mesTaskList) { - LogHelper.Info("MES鎴愭柊鏈哄彨鏂欎换鍔�, "WMS"); + LogHelper.Info("MES閽㈠寘婊℃枡涓嬬嚎浠诲姟", "WMS"); + OffLineRequest request = new OffLineRequest() { loc = mesTask.POSITION_ID, cntrNo = mesTask.PALLET_ID }; + ApiHelper.offLineProcess(request); + } + } + } + } - // 2.1鎴愭柊鏈哄彨鏂�鏂滆) - if (mesTask.PALLET_TYPE == "5" || mesTask.PALLET_TYPE == "6") + /// <summary> + /// 鐩戝惉鎴愬瀷鏈哄彨鏂橫ES浠诲姟 + /// </summary> + public static void MonitorCXJCallMaterialMesTask() + { + var mesTaskList = WMSHelper.GetLjMesTaskList("PENDING"); + if (mesTaskList.Count > 0) + { + mesTaskList = mesTaskList.Where(a => a.MSG_TYPE == "0").ToList(); + if (mesTaskList.Count > 0) + { + foreach (var mesTask in mesTaskList) + { + var lineSideLoc = WMSHelper.GetLineSideLoc(mesTask.EQP); + if (lineSideLoc != null) { - var xcTask = WMSHelper.GetLjXcTaskById(mesTask.ID); - if (xcTask == null) + LogHelper.Info($"鎴愬瀷鏈哄彨鏂欎换鍔★紝MES浠诲姟ID锛歿mesTask.ID}", "WMS"); + + // 2.1鎴愭柊鏈哄彨鏂�鏂滆) + if (mesTask.PALLET_TYPE == "5" || mesTask.PALLET_TYPE == "6") { - ApiHelper.callMaterialHDK(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); + var xcTask = WMSHelper.GetLjXcTaskById(mesTask.ID); + if (xcTask == null) + { + ApiHelper.callMaterialXC(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); + } + else + { + mesTask.RETURN_CODE = xcTask.RETURN_CODE; + mesTask.RECEIVE_FLAG = xcTask.RECEIVE_FLAG; + mesTask.RECEIVE_DATE = xcTask.RECEIVE_DATE; + WMSHelper.updateLjMesTask(mesTask); + } } else { - mesTask.RETURN_CODE = xcTask.RETURN_CODE; - mesTask.RECEIVE_FLAG = xcTask.RECEIVE_FLAG; - mesTask.RECEIVE_DATE = xcTask.RECEIVE_DATE; - WMSHelper.updateLjMesTask(mesTask); + // 2.2 鎴愭柊鏈哄彨鏂�+ ApiHelper.callMaterial(mesTask.MATERIAL_CODE, mesTask.EQP, mesTask.ID); } - } - else - { - // 2.2 鎴愭柊鏈哄彨鏂�- ApiHelper.callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID); } } } @@ -91,12 +103,15 @@ if (mesTask != null && mesTask.RETURN_CODE == "2") { Location startLoc = LocationHelper.GetLoc(outTask.POSITION_ID); - Location endLoc = LocationHelper.GetLoc(mesTask.POSITION_ID); - - var wmsTask = WMSHelper.GetWmsTaskByCntr(outTask.PALLET_ID); - if (wmsTask == null) + if (startLoc == null) { - if (startLoc.N_LOCK_STATE == 0 && endLoc.N_LOCK_STATE == 0) + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏嚭搴�鏂滆)锛岃捣鐐�{outTask.POSITION_ID}鍦╓MS绯荤粺涓笉瀛樺湪"); + } + Location endLoc = WMSHelper.getCallMaterialLocCode(mesTask.EQP); + if (endLoc != null) + { + var wmsTask = WMSHelper.GetWmsTaskByCntr(outTask.PALLET_ID); + if (wmsTask == null) { // 1.鍒涘缓鏂滆-鎴愭柊鏈哄彨鏂欎綔涓� wmsTask = new WMSTask() @@ -141,39 +156,6 @@ WMSHelper.UpdateTaskState(wmsTask); } } - } - else - { - LogHelper.Info($"XC鍑哄簱浠诲姟ID锛歿mesTask.ID},鏃犳硶鐢熸垚鍙枡浠诲姟,璧风偣鎴栫粓鐐逛笂閿�, "鏂滆"); - } - } - else - { - WCSTask wcsTask = new WCSTask() - { - S_OP_NAME = wmsTask.S_OP_DEF_NAME, - S_OP_CODE = wmsTask.S_CODE, - S_CODE = WCSHelper.GenerateTaskNo(), - S_CNTR_CODE = wmsTask.S_CNTR_CODE, - S_TYPE = wmsTask.S_TYPE, - S_START_LOC = startLoc.S_CODE, - S_START_AREA = startLoc.S_AREA_CODE, - S_END_LOC = endLoc.S_CODE, - S_END_AREA = endLoc.S_AREA_CODE, - S_SCHEDULE_TYPE = "AGV", - N_PRIORITY = 10, - T_START_TIME = DateTime.Now, - }; - - if (WCSHelper.CreateTask(wcsTask)) - { - // 璧风偣銆佺粓鐐瑰姞閿�- LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); - LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); - - // 鏇存柊浣滀笟浠诲姟鐘舵� - wmsTask.N_B_STATE = 1; - WMSHelper.UpdateTaskState(wmsTask); } } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs index d77c89c..fe6838e 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs @@ -54,7 +54,7 @@ case 3: WCSHelper.UpdateStatus(cst, "寮�鍙栬揣"); var locCntrRels = LocationHelper.GetLocCntr(cst.S_START_LOC); - if (locCntrRels.Count > 0) + if (locCntrRels.Count > 0) { cst.S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE; WCSHelper.UpdateWcsTask(cst); @@ -90,9 +90,9 @@ WMSHelper.addRfidAnomalyRecord(cst.S_CNTR_CODE, 2, cst.S_START_LOC, null); // 鏌ヨ鎵弿鐨凴FID // 鍙戦� 00 04 71 02鍒版壂鐮佸櫒 锛屾帴鍙楄繑鍥炴暟鎹苟瑙f瀽 - byte[] bytes = new byte[] { 00, 04, 71, 02 }; - var plc = Settings.carDeviceInfos.Where(a => a.deviceNo == model.ForkliftNo && a.enable == 1).FirstOrDefault(); - TcpServer.TcpServerSend(plc.address, bytes); + /* byte[] bytes = new byte[] { 00, 04, 71, 02 }; + var plc = Settings.carDeviceInfos.Where(a => a.deviceNo == model.ForkliftNo && a.enable == 1).FirstOrDefault(); + TcpServer.TcpServerSend(plc.address, bytes);*/ } else if (model.State == 1002) { @@ -113,7 +113,7 @@ agvEndLoc = ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "2"); } - ChangeParamModel paramModel = new ChangeParamModel() + ChangeParamModel paramModel = new ChangeParamModel() { task_no = model.No, param_no = 0, @@ -124,7 +124,7 @@ } else { - WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"AGV浠诲姟鍥炴姤,浠诲姟瀹瑰櫒缂栫爜:{cst.S_CNTR_CODE}鐨勫鍣ㄦ病鏈夊綍鍏ュ埌WMS绯荤粺","AGV"); + WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"AGV浠诲姟鍥炴姤,浠诲姟瀹瑰櫒缂栫爜:{cst.S_CNTR_CODE}鐨勫鍣ㄦ病鏈夊綍鍏ュ埌WMS绯荤粺", "AGV"); } } else @@ -136,39 +136,9 @@ // AGV浠诲姟瀹屾垚 if (model.State == 2) { - // 妫�祴鐗╂枡鏄惁鍚堟牸,濡備笉鍚堟牸锛�- // 鍒ゆ柇鐗╂枡鏄惁鏄幆甯﹀簱鐗╂枡锛屾槸鍒欏洖鐜甫搴擄紝骞惰鐜甫涓嬪彂鏂扮殑鐗╂枡 - // 闈炵幆甯﹀簱鐗╂枡锛屽垯閫�嚭绔嬪簱锛屽悓鏃朵笅鍙戞柊鐨勭墿鏂欏嚭搴撲换鍔�- if (cst.S_TYPE.Contains("鍙枡鍑哄簱浠诲姟")) - { - var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE); - if (cntrItemRels != null && cntrItemRels.Count > 0) - { - if (cntrItemRels[0].S_ITEM_STATE == "2") - { - // 涓嶅悎鏍煎搧鍥炲簱 - ApiHelper.rejectReturnStock(mst, cst); - } - } - } - - // 妫�祴鏄惁鏄鐮佷綅锛岄潪璇荤爜浣嶏紝鍙互婵�椿棰勫垱寤轰换鍔�- var transfe = WMSHelper.GetTransfeRelevance(cst.S_END_LOC); // 鎺ラ┏浣嶅睘鎬�- if (transfe != null && transfe.N_READ_LOC == 1) - { - WCSHelper.ActivatePreCreateTask(mst.S_CODE); - } - else if ( transfe.N_READ_LOC == 0) - { - if (cst.S_TYPE.Contains("銆愬紓甯搞�")) - { - WCSHelper.ActivatePreCreateTask(mst.S_CODE,1); - } - else - { - WCSHelper.ActivatePreCreateTask(mst.S_CODE); - } - } + // 婵�椿棰勫垱寤轰换鍔�+ // 鍦烘櫙锛�.璇荤爜浣嶆縺娲婚鍒涘缓浠诲姟 2.绌哄伐瑁呭嚭搴撴縺娲绘弧鏂欎笅绾夸换鍔�闈炵洿杩� + WCSHelper.ActivatePreCreateTask(mst.S_CODE); // 鏌ヨ鏄惁鏈夋湭瀹屾垚鐨勪换鍔� if (WMSHelper.isFinishTask(mst.S_CODE)) @@ -180,16 +150,42 @@ // 鏇存柊浠诲姟涓棿琛ㄧ姸鎬� WMSHelper.updateMesTaskStatus(mst.S_CODE, "3"); + } - // 濡傛灉浣滀笟鍚嶇О涓烘垚鍨嬫満鍙枡鍑哄簱浠诲姟锛屽垯瑙﹀彂浣欐枡/绌烘墭鎼繍浠诲姟 - string locCode = WMSHelper.getReturnMaterialLocCode(mst.S_END_LOC); - ApiHelper.returnMaterialOrEmptyTray(locCode); - } + // 妫�祴鐗╂枡鏄惁鍚堟牸,濡備笉鍚堟牸锛�+ // 鍒ゆ柇鐗╂枡鏄惁鏄幆甯﹀簱鐗╂枡锛屾槸鍒欏洖鐜甫搴擄紝骞惰鐜甫涓嬪彂鏂扮殑鐗╂枡 + // 闈炵幆甯﹀簱鐗╂枡锛屽垯閫�嚭绔嬪簱锛屽悓鏃朵笅鍙戞柊鐨勭墿鏂欏嚭搴撲换鍔�+ if (cst.S_TYPE.Contains("鍙枡鍑哄簱浠诲姟")) + { + var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId); + if (bo) + { + var mesTask = WMSHelper.GetLjMesTaskById(mesId); + var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE); + if (cntrItemRels != null && cntrItemRels.Count > 0) + { + if (cntrItemRels[0].S_ITEM_STATE == "2") + { + mesTask.AWAIT_MSG = "鐗╂枡妫�獙鐘舵�涓轰笉鍚堟牸锛岄噸鏂板彨鏂欎腑"; + WMSHelper.updateLjMesTask(mesTask); + + // 涓嶅悎鏍煎搧鍥炲簱 + ApiHelper.rejectReturnStock(mst, cst); + } + else + { + // 濡傛灉浣滀笟鍚嶇О涓烘垚鍨嬫満鍙枡鍑哄簱浠诲姟锛屽垯瑙﹀彂浣欐枡/绌烘墭鎼繍浠诲姟 + var sideLocConfig = WMSHelper.getReturnMaterialLocCode(mst.S_END_LOC); + ApiHelper.returnMaterialOrEmptyTray(sideLocConfig.S_RETURN_LOC_CODE, sideLocConfig.EQP); + } + } + } + } } } else { - WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"AGV浠诲姟鐘舵�鍥炴姤锛屼綔涓氬彿:{cst.S_OP_CODE}锛屾湭鏌ヨ鍒颁綔涓�,"AGV"); + WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"AGV浠诲姟鐘舵�鍥炴姤锛屼綔涓氬彿:{cst.S_OP_CODE}锛屾湭鏌ヨ鍒颁綔涓�, "AGV"); } } else diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs index 9f69fe0..547af1b 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs @@ -24,5 +24,6 @@ public float QTY { get; set; } //鏁伴噺 public DateTime IN_DATE { get; set; } //鍏ュ簱鏃堕棿 public DateTime CREATION_DATE { get; set; } //鍒涘缓鏃ユ湡 + public string WAREHOUSE_TYPE { get; set; } //鍖哄垎涓嶅悓鍘傚锛�/鎬濆皵鐗癸紝2/鏉弶锛� } } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/SideLocConfig.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/SideLocConfig.cs index bf6a4d0..f8fa32a 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/SideLocConfig.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/SideLocConfig.cs @@ -14,6 +14,7 @@ [SugarTable("TN_Side_Loc_Config")] internal class SideLocConfig : BaseModel { + public string EQP { get; set; } // 鏈哄彴鍙� public string S_LOC_CODE { get; set; } // 绾胯竟鍙枡璐т綅 public string S_RETURN_LOC_CODE { get; set; } // 瀵瑰簲杩旀枡璐т綅 } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/LocationHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/LocationHelper.cs index 9140963..b5f0207 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/LocationHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/LocationHelper.cs @@ -112,6 +112,19 @@ return db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == areaCode && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); } + internal static bool checkAreaExistCntr(List<string> areaCodes ,string cntrCode) + { + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<Location>() + .LeftJoin<LocCntrRel>((a,b) => a.S_CODE == b.S_LOC_CODE) + .Where((a, b) => areaCodes.Contains(a.S_AREA_CODE.Trim()) + && a.N_CURRENT_NUM == 0 + && a.N_LOCK_STATE == 0 + && a.C_ENABLE == "Y" + && b.S_CNTR_CODE == cntrCode + ).Count() > 0; + } + /// <summary> ///鑾峰彇鎵�湁璐т綅鎵╁睍淇℃伅 /// </summary> @@ -150,8 +163,16 @@ }); } return result; - } + + internal static LocCntrRel GetLocCntrByCntr(string cntrCode) + { + var result = new List<LocCntrRel>(); + //1.0 鏌ヨ揣浣嶅鍣ㄨ〃 + var db = new SqlHelper<object>().GetInstance(); + return db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == cntrCode).OrderBy(a => a.T_CREATE).First(); + } + internal static List<LocCntrRel> GetLocCntrRel(string loc) { //1.0 鏌ヨ揣浣嶅鍣ㄨ〃 var db = new SqlHelper<object>().GetInstance(); diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs index 47e90f5..66bc083 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs @@ -165,18 +165,39 @@ } /// <summary> - /// + /// 鏌ヨ鎴愬瀷鏈鸿繑鏂欒揣浣� /// </summary> /// <param name="locCode"></param> /// <returns></returns> - public static string getReturnMaterialLocCode(string locCode) + public static SideLocConfig getReturnMaterialLocCode(string locCode) { var db = new SqlHelper<object>().GetInstance(); - var returnMaterialLoc = db.Queryable<SideLocConfig>().Where(a => a.S_LOC_CODE.Trim() == locCode).First(); - if (returnMaterialLoc != null) { - return returnMaterialLoc.S_RETURN_LOC_CODE; + return db.Queryable<SideLocConfig>().Where(a => a.S_LOC_CODE.Trim() == locCode).First(); + } + + /// <summary> + /// 鏌ヨ鎴愬瀷鏈哄彨鏂欎綅 + /// </summary> + /// <param name="jtNo"></param> + /// <returns></returns> + public static Location getCallMaterialLocCode(string jtNo) + { + var db = new SqlHelper<object>().GetInstance(); + + Location loc = null; + var returnMaterialLocs = db.Queryable<SideLocConfig>().Where(a => a.EQP.Trim() == jtNo).ToList(); + if (returnMaterialLocs.Count > 0) + { + foreach (var item in returnMaterialLocs) + { + loc = LocationHelper.GetLoc(item.S_LOC_CODE); + if (loc.N_CURRENT_NUM == 0 && loc.N_LOCK_STATE == 0) + { + break; + } + } } - return null; + return loc; } // --------------------------------------------------------绂忓缓浣抽�----------------------------------------- @@ -239,6 +260,34 @@ .OrderBy(a => a.S_PRI) .First(); return logicConfig; + } + + /// <summary> + /// 鏌ヨ鏌愪釜鐗╂枡鍦ㄤ腑杞簱鐨勫簱瀛樹俊鎭�+ /// </summary> + /// <param name="itemCode"></param> + /// <returns></returns> + public static List<CntrItemRel> getZZKInventoryInfo(string itemCode) + { + var db = new SqlHelper<object>().GetInstance(); + List < CntrItemRel > cntrItemRels = new List<CntrItemRel>(); + string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("涓浆搴�)).Select(a => a.areaCode).FirstOrDefault(); + if (areaCode != null) + { + cntrItemRels = db.Queryable<CntrItemRel>() + .LeftJoin<LocCntrRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE) + .LeftJoin<Location>((a, b, c) => b.S_LOC_CODE == c.S_CODE) + .LeftJoin<Container>((a, b, c, d) => a.S_CNTR_CODE == d.S_CODE) + .Where((a, b, c, d) => c.S_AREA_CODE == areaCode + && c.N_CURRENT_NUM == 1 + && c.N_LOCK_STATE == 0 + && a.S_ITEM_CODE == itemCode + && d.N_E_STATE == 0 // 鎵樼洏姝e父 + ) + .OrderBy((a, b, c, d) => a.T_INBOUND_TIME) + .ToList(); + } + return cntrItemRels; } /// <summary> @@ -380,7 +429,7 @@ bool result = true; LogHelper.Info(alarmMsg, logSite); var alarmRecord = db.Queryable<AlarmRecord>().Where(a => a.N_IS_READ == 0 && a.S_ALARM_MSG == alarmMsg).First(); - if (alarmRecord == null) + if (alarmRecord == null) { alarmRecord = new AlarmRecord() { @@ -391,6 +440,11 @@ S_FILE_NAME = logSite, }; result = db.Insertable<AlarmRecord>(alarmRecord).ExecuteCommand() > 0; + } + else + { + alarmRecord.T_MODIFY = DateTime.Now; + result = db.Updateable<AlarmRecord>(alarmRecord).ExecuteCommand() > 0; } return result; } @@ -412,12 +466,12 @@ /// <summary> /// 鏌ヨ鎴愬瀷鏈虹嚎杈� /// </summary> - /// <param name="locCode"></param> + /// <param name="jtNo"></param> /// <returns></returns> - public static SideLocConfig GetLineSideLoc(string locCode) + public static SideLocConfig GetLineSideLoc(string jtNo) { var db = new SqlHelper<object>().GetInstance(); - return db.Queryable<SideLocConfig>().Where(a => a.S_LOC_CODE.Trim() == locCode).First(); + return db.Queryable<SideLocConfig>().Where(a => a.EQP.Trim() == jtNo).First(); } /// <summary> @@ -701,7 +755,20 @@ } /// <summary> - /// 鏌ヨMES鍙枡浠诲姟 + /// 鏍规嵁鏈哄彴鍙锋煡璇ES浠诲姟 + /// </summary> + /// <param name="jtNo"></param> + /// <returns></returns> + internal static LjMesTask getLjMesTaskByJtNo(string jtNo) + { + // 1.鏌ヨMES浠诲姟琛�+ var db = new SqlHelper<object>().GetInstance(); + var mesTask = db.Queryable<LjMesTask>().Where(a => a.EQP.Trim() == jtNo && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First(); + return mesTask; + } + + /// <summary> + /// 鏍规嵁鐐逛綅缂栧彿鏌ヨMES鍙枡浠诲姟 /// </summary> /// <param name="positionId"></param> /// <returns></returns> @@ -722,8 +789,6 @@ { bool result = false; var db = new SqlHelper<object>().GetInstance(); - mesTask.RECEIVE_FLAG = "COMPLETE"; - mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd"); result = db.Updateable(mesTask).ExecuteCommand() > 0; return result; } @@ -898,30 +963,29 @@ /// <summary> /// 涓嬪彂XC浠诲姟 /// </summary> - /// <param name="mesTaksId"></param> + /// <param name="mesTask"></param> /// <returns></returns> - public static bool addLjXcTask(int mesTaksId) + public static bool addLjXcTask(LjMesTask mesTask) { bool result = false; var db = new SqlHelper<object>().GetInstance(); - var ljMesTask = GetLjMesTaskById(mesTaksId); - if (ljMesTask != null) { + if (mesTask != null) { LjXcTask ljXcTask = new LjXcTask() { - ID = ljMesTask.ID, - POSITION_ID = ljMesTask.POSITION_ID, - RETURN_CODE = ljMesTask.RETURN_CODE, - MSG_TYPE = ljMesTask.MSG_TYPE, - PALLET_TYPE = ljMesTask.PALLET_TYPE, - MATERIAL_NAME = ljMesTask.MATERIAL_NAME, - MATERIAL_CODE = ljMesTask.MATERIAL_CODE, - QTY = ljMesTask.QTY, - YCL_BATCH = ljMesTask.YCL_BATCH, - PALLET_ID = ljMesTask.PALLET_ID, - AGVORDER_ID = ljMesTask.AGVORDER_ID, + ID = mesTask.ID, + POSITION_ID = mesTask.POSITION_ID, + RETURN_CODE = mesTask.RETURN_CODE, + MSG_TYPE = mesTask.MSG_TYPE, + PALLET_TYPE = mesTask.PALLET_TYPE, + MATERIAL_NAME = mesTask.MATERIAL_NAME, + MATERIAL_CODE = mesTask.MATERIAL_CODE, + QTY = mesTask.QTY, + YCL_BATCH = mesTask.YCL_BATCH, + PALLET_ID = mesTask.PALLET_ID, + AGVORDER_ID = mesTask.AGVORDER_ID, CREATION_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - RECEIVE_FLAG = ljMesTask.RECEIVE_FLAG, - EQP = ljMesTask.EQP, - PLAN_ID = ljMesTask.PLAN_ID + RECEIVE_FLAG = mesTask.RECEIVE_FLAG, + EQP = mesTask.EQP, + PLAN_ID = mesTask.PLAN_ID }; result = db.Insertable<LjXcTask>(ljXcTask).ExecuteCommand() > 0; } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs index 911da84..959c9e7 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs @@ -134,7 +134,13 @@ EndLocGroup endLocGroup = null; if (barcodeList.Count > 0) { - endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count); + string itemCode = null; + var cntrItemRels = ContainerHelper.GetCntrItemRel(barcodeList[0].rfid); + if (cntrItemRels.Count > 0) + { + itemCode = cntrItemRels[0].S_ITEM_CODE; + } + endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count, itemCode); } foreach (var ext in extData) @@ -365,126 +371,120 @@ { ResponseResult response = new ResponseResult(); - //鍙傛暟鏍¢獙 - if (model.locCodes.Count == 0) + int locNum = model.locCodes.Count; + if (locNum > 0) { - string msg = $"纭寲鏈猴細{model.mcn}鍛煎彨鑳氳儙鍑哄簱锛屽弬鏁版牎楠屽け璐ワ紝缂哄皯璐т綅淇℃伅"; - LogHelper.Info(msg, "WMS"); - response.code = 1; - response.msg = msg; - return response; - } - - // 1.涓�釜纭寲鏈哄伐浣嶅彧鑳藉悓鏃跺瓨鍦ㄤ竴涓鍦ㄦ墽琛屼腑鐨勪换鍔�- WCSTask existTask = WCSHelper.GetTaskByEqNo(model.mcn); - if (existTask == null) - { - // 2.鏍规嵁褰撳墠鏃堕棿锛屽垽鏂彮娆℃棩鏈熷拰鐝 - var currentTime = DateTime.Now; - var shift = getShift(currentTime.TimeOfDay); - var dateShift = DateTime.Now.ToString("dd/MM/yyyy"); - TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00 - if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start) + Location prevLoc = null; + Dictionary<string,Location> outLocDic = new Dictionary<string,Location>(); + foreach (var mcn in model.locCodes) { - dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy"); + // 1.涓�釜纭寲鏈哄伐浣嶅彧鑳藉悓鏃跺瓨鍦ㄤ竴涓鍦ㄦ墽琛屼腑鐨勪换鍔�+ var existTask = WCSHelper.GetTaskByEnd(mcn); + if (existTask.Count == 0) + { + // 2.鏍规嵁褰撳墠鏃堕棿锛屽垽鏂彮娆℃棩鏈熷拰鐝 + var currentTime = DateTime.Now; + var shift = getShift(currentTime.TimeOfDay); // 鐝 + var dateShift = currentTime.ToString("dd/MM/yyyy"); + TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00 + if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start) + { + dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy"); + } + + // 3.鏍规嵁鐝鏃ユ湡+鐝+纭寲鏈哄伐浣嶅彿鏌ヨ 纭寲鏈哄伐鍗�涓殑鐗╂枡缂栫爜銆侀璁$敓浜ф暟閲�+ var productionShedule = WMSHelper.getProductionShedule(dateShift, mcn, shift); + + if (productionShedule != null && productionShedule.QTY != 0) + { + // 4鏌ヨ銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戝苟璁$畻褰撳墠鐝鐨勫凡瀹屾垚鏁伴噺 + int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, mcn, shift); + if (productionShedule.QTY > finishNum) + { + // 5.鍑哄簱绛栫暐 1.浼樺厛鏌ヨ鍓嶄竴鎷栬揣浣嶇殑宸﹀彸涓よ竟鏄惁婊¤冻鏉′欢 2.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟 + var startLoc = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE, prevLoc); + if (startLoc != null) + { + outLocDic.Add(mcn, startLoc); + prevLoc = startLoc; + } + } + } + } } - // 3.鏍规嵁鐝鏃ユ湡+鐝+纭寲鏈哄伐浣嶅彿鏌ヨ鍛煎彨鐨勭墿鏂欑紪鐮併�棰勮鐢熶骇鏁伴噺 - var productionShedule = WMSHelper.getProductionShedule(dateShift, model.mcn, shift); - if (productionShedule != null && productionShedule.QTY != 0) + // 6.鍒ゆ柇鍑哄簱璐т綅鏄惁鏄悓涓�贩閬擄紝鍚屼竴宸烽亾鐢熸垚浠诲姟缁勫彿 + string groupNo = null; + if (outLocDic.Count > 1) { - // 4.鏌ヨ銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戝苟璁$畻褰撳墠鐝鐨勫凡瀹屾垚鏁伴噺 - int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, model.mcn, shift); - - if (productionShedule.QTY > finishNum) + var groupNum = outLocDic.Select(a => a.Value).ToList().GroupBy(a => a.N_ROADWAY).Count(); + if (groupNum == 1) { - // 5.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟 - int locNum = model.locCodes.Count; - var startLocData = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE,locNum); - if (startLocData.startLocList != null && startLocData.startLocList.Count == locNum) + groupNo = GenerateTaskGroupNo(); + } + } + + // 7.鐢熸垚鍑哄簱浠诲姟 + if (outLocDic.Count > 0) + { + foreach (var item in outLocDic) + { + Location endLoc = LocationHelper.GetLoc(item.Key); + Location startLoc = item.Value; + if (endLoc != null) { - var startLocList = startLocData.startLocList; - for (int i = 0; i < locNum; i++) + var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); + if (locCntrRels != null && locCntrRels.Count > 0) { - Location startLoc = startLocList[i]; - Location endLoc = LocationHelper.GetLoc(model.locCodes[i]); - if (endLoc != null) + var wmsTask = new WMSTask() { - var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); - if (locCntrRels != null && locCntrRels.Count > 0) + S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟", + S_OP_DEF_CODE = model.reqId, + S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�, + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + S_GROUP_NO = groupNo, + }; + if (WMSHelper.CreateWmsTask(wmsTask)) + { + // 鍒涘缓涓�鍏ュ簱浠诲姟 + WCSTask wcsTask = new WCSTask() { - var wmsTask = new WMSTask() - { - S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE, - S_CODE = WMSHelper.GenerateTaskNo(), - S_START_LOC = startLoc.S_CODE, - S_START_AREA = startLoc.S_AREA_CODE, - S_END_LOC = endLoc.S_CODE, - S_END_AREA = endLoc.S_AREA_CODE, - S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟", - S_OP_DEF_CODE = model.reqId, - S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�, - N_PRIORITY = 1, - T_START_TIME = DateTime.Now, - S_GROUP_NO = startLocData.groupNo, - }; - if (WMSHelper.CreateWmsTask(wmsTask)) - { - // 鍒涘缓涓�鍏ュ簱浠诲姟 - WCSTask wcsTask = new WCSTask() - { - S_OP_NAME = wmsTask.S_OP_DEF_NAME, - S_OP_CODE = wmsTask.S_CODE, - S_CODE = WCSHelper.GenerateTaskNo(), - S_CNTR_CODE = wmsTask.S_CNTR_CODE, - S_TYPE = wmsTask.S_TYPE, - S_START_LOC = startLoc.S_CODE, - S_START_AREA = startLoc.S_AREA_CODE, - S_END_LOC = endLoc.S_CODE, - S_END_AREA = endLoc.S_AREA_CODE, - S_SCHEDULE_TYPE = "WCS", - N_PRIORITY = 1, - T_START_TIME = DateTime.Now, - }; + S_OP_NAME = wmsTask.S_OP_DEF_NAME, + S_OP_CODE = wmsTask.S_CODE, + S_CODE = WCSHelper.GenerateTaskNo(), + S_CNTR_CODE = wmsTask.S_CNTR_CODE, + S_TYPE = wmsTask.S_TYPE, + S_START_LOC = startLoc.S_CODE, + S_START_AREA = startLoc.S_AREA_CODE, + S_END_LOC = endLoc.S_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_SCHEDULE_TYPE = "WCS", + N_PRIORITY = 1, + T_START_TIME = DateTime.Now, + }; - if (WCSHelper.CreateTask(wcsTask)) - { - // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�- LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); - LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); + if (WCSHelper.CreateTask(wcsTask)) + { + // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+ LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); + LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); - // 鏇存柊浣滀笟浠诲姟鐘舵� - wmsTask.N_B_STATE = 1; - WMSHelper.UpdateTaskState(wmsTask); - } - } + // 鏇存柊浣滀笟浠诲姟鐘舵� + wmsTask.N_B_STATE = 1; + WMSHelper.UpdateTaskState(wmsTask); } } } } - else - { - string msg = $"搴撳唴娌℃湁婊¤冻鏉′欢鐨勭墿鏂�; - LogHelper.Info(msg, "WMS"); - response.code = 1; - response.msg = msg; - } - } - else - { - string msg = $"纭寲鏈�{model.mcn}鐨勫綋鍓嶇彮娆′换鍔″凡瀹屾垚锛屽仠姝㈠彨鏂�; - LogHelper.Info(msg, "WMS"); - response.code = 1; - response.msg = msg; } } - } - else - { - string msg = $"纭寲鏈猴細{model.mcn}鐨勫瓨鍦ㄦ鍦ㄦ墽琛屼腑鐨勪换鍔★紝璇峰嬁閲嶅鍙枡"; - LogHelper.Info(msg, "WMS"); - response.code = 1; - response.msg = msg; } return response; } @@ -498,7 +498,7 @@ { ResponseResult response = new ResponseResult(); Location startLoc = LocationHelper.GetLoc(model.startLoc); - var endLocGroup = WMSHelper.getInStockEndLoc(1); + var endLocGroup = WMSHelper.getInStockEndLoc(1,null); if (endLocGroup.endLocList.Count == 1) { Location endLoc = endLocGroup.endLocList[0]; @@ -562,11 +562,10 @@ public static ResponseResult callEmptyTrayOutStock(CallEmptyTrayOutStockModel model) { ResponseResult responseResult = new ResponseResult(); - Location endLoc = LocationHelper.GetLoc(model.endLoc); - var startLocData = WMSHelper.getOutStockStartLoc(null, 1); - if (startLocData.startLocList != null && startLocData.startLocList.Count == 1) + Location startLoc = WMSHelper.getOutStockStartLoc(null); + if (startLoc != null) { - Location startLoc = startLocData.startLocList[0]; + Location endLoc = LocationHelper.GetLoc(model.endLoc); if (endLoc != null) { var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE); @@ -584,8 +583,7 @@ S_OP_DEF_CODE = model.reqId, S_OP_DEF_NAME = "鍛煎彨绌烘墭鍑哄簱", N_PRIORITY = 1, - T_START_TIME = DateTime.Now, - S_GROUP_NO = startLocData.groupNo, + T_START_TIME = DateTime.Now }; if (WMSHelper.CreateWmsTask(wmsTask)) { @@ -619,13 +617,16 @@ } } } + else + { + responseResult.code = 1; + responseResult.msg = $"缁堢偣璐т綅:{model.endLoc}鍦╓MS绯荤粺涓笉瀛樺湪"; + } } - else + else { - string msg = $"搴撳唴娌℃湁婊¤冻鏉′欢鐨勭墿鏂�; - LogHelper.Info(msg, "WMS"); responseResult.code = 1; - responseResult.msg = msg; + responseResult.msg = "搴撳唴绌烘墭涓嶈冻"; } return responseResult; } diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs index 89ec50a..6d02829 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs @@ -230,8 +230,7 @@ { public string reqId { get; set; } public string reqTime { get; set; } - public string mcn { get; set; } - public List<string> locCodes { get; set; } + public List<string> locCodes { get; set; } // 纭寲鏈哄伐浣� } public class NotifyDeviceSignalModel diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs index 5e8905b..da0078c 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs @@ -384,121 +384,309 @@ return greenTireInformation; } - /// <summary> + /*/// <summary> /// 鏌ヨ鍏ュ簱缁堢偣璐т綅 + /// 鍏ュ簱绛栫暐锛�+ /// 宸烽亾鍐呭悓瑙勬牸鏁伴噺 灏忎簬 10锛堟殏瀹氾級锛屾寜鐗╂枡鍧囪 璁$畻锛屽鏋滄墍鏈夌殑宸烽亾鍐呭悓瑙勬牸鏁伴噺閮藉ぇ浜�0锛屽垯鎸夌収宸烽亾鍧囪 璁$畻 /// </summary> /// <param name="locNum">1.鍗曡揣浣�2.鍙岃揣浣�/param> /// <returns></returns> - public static EndLocGroup getInStockEndLoc(int locNum) + public static EndLocGroup getInStockEndLoc(int locNum , string itemCode) { var db = new SqlHelper<object>().GetInstance(); EndLocGroup endLocGroup = new EndLocGroup(); List<Location> locations = new List<Location>(); - // 1.鎸夊绉巼浠庡ぇ鍒板皬锛屽宸烽亾杩涜鎺掑簭 - var roadwayOrderList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") - .GroupBy(a => a.N_ROADWAY) - .Select(a => new { roadway = a.N_ROADWAY , num = SqlFunc.AggregateCount(a.S_CODE)}) - .OrderByDescending(a => a.num) + + List<int> roadwayList = new List<int>(); + + // 1.鎸夊贩閬撹繘琛屽垎缁勶紝鏌ヨ姣忎釜宸烽亾鍐呭悓瑙勬牸鐗╂枡鐨勬暟閲忥紝骞朵粠灏忓埌澶ф帓搴�+ var roadwayItemNumOrderGroup = db.Queryable<Location>() + .LeftJoin<LocCntrRel>((a,b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<CntrItemRel>((a,b,c) => b.S_CNTR_CODE == c.S_CNTR_CODE) + .Where((a, b, c) => a.S_AREA_CODE == Settings.stockArea && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ITEM_CODE == itemCode) + .GroupBy((a, b, c) => a.N_ROADWAY) + .Select((a, b, c) => new { roadway = a.N_ROADWAY, num = SqlFunc.AggregateCount(a.S_CODE) }) + .OrderBy(a => a.num) .ToList(); - // 鏌ヨ鍗曡揣浣�- foreach (var order in roadwayOrderList) + roadwayList = roadwayItemNumOrderGroup.Where(a => a.num < 10).OrderBy(a => a.num).Select(a => a.roadway).ToList(); + + // 2.鎸夊贩閬撹繘琛屽垎缁勶紝鏌ヨ姣忎釜宸烽亾绌鸿揣浣嶆暟閲忥紝骞朵粠澶у埌灏忔帓搴�+ if (roadwayList.Count == 0) { - if (locNum == 1) + var roadwayEmptyNumOrderGroup = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") + .GroupBy(a => a.N_ROADWAY) + .Select(a => new { roadway = a.N_ROADWAY, num = SqlFunc.AggregateCount(a.S_CODE) }) + .OrderByDescending(a => a.num) + .ToList(); + roadwayList = roadwayEmptyNumOrderGroup.Select(a => a.roadway).ToList(); + } + + if (roadwayList.Count > 0) + { + // 鏌ヨ鍗曡揣浣�+ foreach (var roadway in roadwayList) { - /*// 鏌ヨ鎵�湁鐩稿悓鐗╂枡璐т綅 - var sameItemLocList = db.Queryable<Location>() - .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) - .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE) - .Where((a, b, c) => a.S_AREA_CODE == Settings.stockArea - && a.N_ROADWAY == order.roadway - && a.N_CURRENT_NUM == 1 - && a.N_LOCK_STATE == 0 - && a.C_ENABLE == "Y" - && b.S_CNTR_CODE != null - && c.S_ITEM_CODE == itemCode - ) - .OrderBy((a, b, c) => new { a.N_LAYER, a.N_COL }) - .ToList(); - - // 鏌ヨ鐩稿悓鐗╂枡鐨勫乏鍙虫槸鍚︽湁绌鸿揣浣�- foreach (var loc in sameItemLocList) + if (locNum == 1) { - var leftLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (leftLoc != null) + // 鏌ヨ绌鸿揣浣�+ var emptyLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == roadway && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => new { a.N_LAYER, a.N_COL }).First(); + if (emptyLoc != null) { - locations.Add(leftLoc); - break; + locations.Add(emptyLoc); + endLocGroup.endLocList = locations; + return endLocGroup; } + } - var rightLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (rightLoc != null) - { - locations.Add(leftLoc); - break; - } - }*/ - - // 鏌ヨ绌鸿揣浣�- var emptyLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => new { a.N_LAYER, a.N_COL }).First(); - if (emptyLoc != null) + if (locNum == 2) { - locations.Add(emptyLoc); - endLocGroup.endLocList = locations; - return endLocGroup; + var emptyLocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == roadway && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => new { a.N_LAYER, a.N_COL }).ToList(); + if (emptyLocList.Count > 0) + { + // 浼樺厛鏌ヨ鐩搁偦鍙屾嫋绌鸿揣浣�+ if (locations.Count == 0) + { + foreach (var loc in emptyLocList) + { + // 鏌ヨ鐩搁偦宸︿晶鏄惁鏈夌┖璐т綅 + var leftLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); + if (leftLoc != null) + { + locations.Add(loc); + locations.Add(leftLoc); + break; + } + + // 鏌ヨ鐩搁偦鍙充晶鏄惁鏈夌┖璐т綅 + var rightLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); + if (rightLoc != null) + { + locations.Add(loc); + locations.Add(rightLoc); + break; + } + } + } + + if (locations.Count < locNum) + { + // 鏌ヨ涓嶇浉閭荤殑鍗曟嫋璐т綅 + foreach (var loc in emptyLocList) + { + locations.Add(loc); + if (locations.Count == locNum) + { + break; + } + } + } + + if (locations.Count == locNum) + { + endLocGroup.endLocList = locations; + // 鏍¢獙璐т綅鏄惁鏄悓宸烽亾锛屾槸鍒欑敓鎴愪换鍔$粍鍙�+ var groupNum = locations.GroupBy(a => a.N_ROADWAY).Count(); + if (groupNum == 1) + { + endLocGroup.groupNo = WMSHelper.GenerateTaskGroupNo(); + } + return endLocGroup; + } + } } } - - if (locNum == 2) - { - var emptyLocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => new { a.N_LAYER, a.N_COL }).ToList(); - - if (emptyLocList.Count > 0) - { - // 鏌ヨ鍙屾嫋绌鸿揣浣�- if (locations.Count == 0) - { - foreach (var loc in emptyLocList) - { - var leftLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (leftLoc != null) - { - locations.Add(loc); - locations.Add(leftLoc); - break; - } - - var rightLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (rightLoc != null) - { - locations.Add(loc); - locations.Add(leftLoc); - break; - } - } - - if (locations.Count == locNum) - { - endLocGroup.groupNo = WMSHelper.GenerateTaskGroupNo(); - endLocGroup.endLocList = locations; - return endLocGroup; - } - } - - // 鏌ヨ鍗曟嫋璐т綅 - foreach (var loc in emptyLocList) - { - locations.Add(loc); - if (locations.Count == locNum) - { - endLocGroup.endLocList = locations; - return endLocGroup; - } - } - } - } } return endLocGroup; + }*/ + + /// <summary> + /// 鏌ヨ鍏ュ簱缁堢偣璐т綅 + /// 鍏ュ簱绛栫暐锛�+ /// 宸烽亾鍐呭悓瑙勬牸鏁伴噺 灏忎簬 10锛堟殏瀹氾級锛屾寜鐗╂枡鍧囪 璁$畻锛屽鏋滄墍鏈夌殑宸烽亾鍐呭悓瑙勬牸鏁伴噺閮藉ぇ浜�0锛屽垯鎸夌収宸烽亾鍧囪 璁$畻 + /// </summary> + /// <param name="locNum"></param> + /// <param name="itemCode"></param> + /// <returns></returns> + public static EndLocGroup getInStockEndLoc(int locNum, string itemCode) + { + var db = new SqlHelper<object>().GetInstance(); + EndLocGroup endLocGroup = new EndLocGroup { endLocList = new List<Location>() }; + + // 1. 鑾峰彇鍊欓�宸烽亾鍒楄〃锛堢墿鏂欏潎琛℃垨宸烽亾鍧囪 锛�+ var candidateRoadways = GetCandidateRoadways(db, itemCode); + if (candidateRoadways.Count == 0) return endLocGroup; + + // 2. 澶勭悊鍗曡揣浣嶅叆搴�+ if (locNum == 1) + { + return FindSingleLocation(db, candidateRoadways); + } + + // 3. 澶勭悊鍙岃揣浣嶅叆搴�+ return FindDoubleLocations(db, candidateRoadways); + } + + /// <summary> + /// 鑾峰彇鍊欓�宸烽亾鍒楄〃锛堟寜绛栫暐鎺掑簭锛�+ /// </summary> + private static List<int> GetCandidateRoadways(SqlSugarClient db, string itemCode) + { + // 绛栫暐1锛氬贩閬撳唴鍚岃鏍肩墿鏂�< 10 鐨勫贩閬擄紙鎸夋暟閲忓崌搴忥級 + var materialRoadways = db.Queryable<Location>() + .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE) + .Where((a, b, c) => + a.S_AREA_CODE == Settings.stockArea && + a.N_CURRENT_NUM == 1 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y" && + b.S_CNTR_CODE != null && + c.S_ITEM_CODE == itemCode) + .GroupBy(a => a.N_ROADWAY) + .Having(a => SqlFunc.AggregateCount(a.S_CODE) < 10) + .Select(a => new { Roadway = a.N_ROADWAY, Count = SqlFunc.AggregateCount(a.S_CODE) }) + .OrderBy(a => a.Count) + .Select(a => a.Roadway) + .ToList(); + + if (materialRoadways.Count > 0) return materialRoadways; + + // 绛栫暐2锛氭墍鏈夊贩閬撴寜绌鸿揣浣嶆暟闄嶅簭鎺掑簭 + return db.Queryable<Location>() + .Where(a => + a.S_AREA_CODE == Settings.stockArea && + a.N_CURRENT_NUM == 0 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y") + .GroupBy(a => a.N_ROADWAY) + .Select(a => new { Roadway = a.N_ROADWAY, Count = SqlFunc.AggregateCount(a.S_CODE) }) + .OrderByDescending(a => a.Count) + .Select(a => a.Roadway) + .ToList(); + } + + /// <summary> + /// 鏌ユ壘鍗曡揣浣�+ /// </summary> + private static EndLocGroup FindSingleLocation(SqlSugarClient db, List<int> candidateRoadways) + { + foreach (var roadway in candidateRoadways) + { + var location = db.Queryable<Location>() + .Where(a => + a.S_AREA_CODE == Settings.stockArea && + a.N_ROADWAY == roadway && + a.N_CURRENT_NUM == 0 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y") + .OrderBy(a => a.N_LAYER) + .OrderBy(a => a.N_COL) + .First(); + + if (location != null) + { + return new EndLocGroup + { + endLocList = new List<Location> { location } + }; + } + } + return new EndLocGroup(); + } + + /// <summary> + /// 鏌ユ壘鍙岃揣浣嶏紙浼樺寲鐩搁偦璐т綅鏌ユ壘锛�+ /// </summary> + private static EndLocGroup FindDoubleLocations(SqlSugarClient db, List<int> candidateRoadways) + { + // 鍏堝皾璇曟壘鐩搁偦璐т綅 + foreach (var roadway in candidateRoadways) + { + // 涓�鎬ц幏鍙栧贩閬撴墍鏈夌┖璐т綅锛堝噺灏慏B鏌ヨ锛�+ var emptyLocs = db.Queryable<Location>() + .Where(a => + a.S_AREA_CODE == Settings.stockArea && + a.N_ROADWAY == roadway && + a.N_CURRENT_NUM == 0 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y") + .OrderBy(a => a.N_LAYER) + .OrderBy(a => a.N_COL) + .ToList(); + + if (emptyLocs.Count < 2) continue; + + // 鍦ㄥ唴瀛樹腑鏌ユ壘鐩搁偦璐т綅锛堥珮鎬ц兘锛�+ var adjacentPair = FindAdjacentLocations(emptyLocs); + if (adjacentPair != null) + { + return CreateDoubleLocGroup(adjacentPair); + } + } + + // 娌℃湁鐩搁偦璐т綅鏃讹紝鍙栦换鎰忎袱涓揣浣�+ foreach (var roadway in candidateRoadways) + { + var emptyLocs = db.Queryable<Location>() + .Where(a => + a.S_AREA_CODE == Settings.stockArea && + a.N_ROADWAY == roadway && + a.N_CURRENT_NUM == 0 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y") + .OrderBy(a => a.N_LAYER) + .OrderBy(a => a.N_COL) + .Take(2) + .ToList(); + + if (emptyLocs.Count == 2) + { + return CreateDoubleLocGroup(emptyLocs); + } + } + + return new EndLocGroup(); + } + + /// <summary> + /// 鍦ㄥ唴瀛樹腑鏌ユ壘鐩搁偦璐т綅锛堥珮鏁堢畻娉曪級 + /// </summary> + private static List<Location> FindAdjacentLocations(List<Location> locations) + { + // 鎸夊眰->鍒楁帓搴忥紝渚夸簬鏌ユ壘鐩搁偦 + var sorted = locations + .OrderBy(l => l.N_LAYER) + .ThenBy(l => l.N_COL) + .ToList(); + + for (int i = 0; i < sorted.Count - 1; i++) + { + var current = sorted[i]; + var next = sorted[i + 1]; + + // 鍒ゆ柇鏄惁鍚屼竴灞備笖鐩搁偦鍒�+ if (current.N_LAYER == next.N_LAYER && + current.N_COL + 1 == next.N_COL) + { + return new List<Location> { current, next }; + } + } + return null; + } + + /// <summary> + /// 鍒涘缓鍙岃揣浣嶈繑鍥炵粨鏋�+ /// </summary> + private static EndLocGroup CreateDoubleLocGroup(List<Location> locations) + { + return new EndLocGroup + { + endLocList = locations, + groupNo = locations.GroupBy(a => a.N_ROADWAY).Count() == 1 + ? WMSHelper.GenerateTaskGroupNo() + : null + }; } public class EndLocGroup @@ -509,14 +697,15 @@ /// <summary> /// 鏌ヨ鍑哄簱寮�璐т綅 - /// 璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂�+ /// 1.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂�+ /// 2.鍚岀瓑鏉′欢涓嬶紝浼樺厛鍙栧墠涓�墭璐х殑鐩搁偦璐т綅(鏆傛椂涓嶅仛鑰冭檻锛岄渶纭畾鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級鏄寜澶╃畻锛岃繕鏄簿纭埌鏃跺垎绉� /// </summary> /// <param name="itemCode"></param> - /// <param name="locNum"></param> - public static StartLocGroup getOutStockStartLoc(string itemCode, int locNum ) + /// <param name="prevLoc"></param> + public static Location getOutStockStartLoc(string itemCode, Location prevLoc = null) { var db = new SqlHelper<object>().GetInstance(); - StartLocGroup startLocGroup = new StartLocGroup(); + Location startLoc = null; // 1.鏌ヨ锛堢墿鏂欑姸鎬丱K 锛屼笖灏忎簬澶辨晥鏃堕棿锛屽ぇ浜庣瓑浜庣敓鏁堟椂闂达級鍑哄簱鐗╂枡锛屽苟鎸夊姞鎬ユ枡鍏堝嚭锛屽厛鍏ュ厛鍑猴紙鐢熶骇鏃堕棿锛夌殑鍘熷垯杩涜鎺掑簭 var query = db.Queryable<Location>() @@ -557,48 +746,10 @@ continue; } - var cntrItemRel = db.Queryable<CntrItemRel>().LeftJoin<LocCntrRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE).Where((a, b) => b.S_LOC_CODE == loc.S_CODE).First(); - if (cntrItemRel != null) - { - startLocGroup.startLocList.Add(loc); - if (locNum == startLocGroup.startLocList.Count) - { - break; - } - - var leftLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == loc.N_ROADWAY && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (leftLoc != null) - { - var locCntrRel = db.Queryable<LocCntrRel>() - .LeftJoin<CntrItemRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE) - .Where((a, b) => a.S_LOC_CODE == leftLoc.S_CODE && b.S_ITEM_CODE == itemCode) - .First(); - if (locCntrRel != null) - { - startLocGroup.groupNo = WMSHelper.GenerateTaskGroupNo(); - startLocGroup.startLocList.Add(leftLoc); - break; - } - } - - var rightLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == loc.N_ROADWAY && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (rightLoc != null && startLocGroup.startLocList.Count == 0) - { - var locCntrRel = db.Queryable<LocCntrRel>() - .LeftJoin<CntrItemRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE) - .Where((a, b) => a.S_LOC_CODE == rightLoc.S_CODE && b.S_ITEM_CODE == itemCode) - .First(); - if (locCntrRel != null) - { - startLocGroup.groupNo = WMSHelper.GenerateTaskGroupNo(); - startLocGroup.startLocList.Add(rightLoc); - break; - } - } - } + startLoc = loc; } } - return startLocGroup; + return startLoc; } -- Gitblit v1.9.1