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 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 115 insertions(+), 114 deletions(-) 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; } -- Gitblit v1.9.1