From cd40ada4efe0d0a4036714cf597ce170b8cf5a54 Mon Sep 17 00:00:00 2001 From: pengmn <pmn@HanInfo> Date: 星期五, 30 五月 2025 17:29:17 +0800 Subject: [PATCH] 测试 --- HH.WCS.Mobox3.HangYang/process/TaskProcess.cs | 292 ++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 190 insertions(+), 102 deletions(-) diff --git a/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs b/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs index 178735f..2996c62 100644 --- a/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs +++ b/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs @@ -12,6 +12,7 @@ using Swashbuckle.Swagger; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Reflection; using System.Security.Cryptography; @@ -1880,123 +1881,210 @@ /// <summary> /// 鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔� /// </summary> - /// <param name="distributionCntr">閰嶇洏鍗�/param> + /// <param name="distributionCntrs">閰嶇洏鍗�/param> /// <returns></returns> - internal static bool GenerateFromPicking(List<DistributionCntr> distributionCntr) + internal static bool GenerateFromPicking(List<DistributionCntr> distributionCntrs) { try { - // 鍒涘缓璋冨害鍣�- var scheduler = new DoubleDeepOutboundScheduler(distributionCntr); + // 1. 鍒濆鍖栬皟搴﹀櫒鍜屽嚭搴撲换鍔″垪琛�+ var scheduler = new DoubleDeepOutboundScheduler(distributionCntrs); + var outboundTasks = CreateOutboundTasks(distributionCntrs); - var listOut = new List<Outbound>(); - foreach (var item in distributionCntr) - { - listOut.Add(new Outbound - { - locCode = item.S_LOC_CODE, - areaCode = item.S_AREA_CODE, - endArea = item.S_EXIT_AREA_CODE, - endBit = item.S_EXIT_LOC_CODE, - trayCode = item.S_CNTR_CODE, - taskType = "閰嶇洏鍑哄簱" - }); - } - // 璇锋眰鍑哄簱 - var tasks = scheduler.GenerateOutboundTasks(listOut); + // 2. 璁$畻璐т綅鐢熸垚浠诲姟鏁版嵁 + var tasks = scheduler.GenerateOutboundTasks(outboundTasks); + if (!tasks.Any()) return false; - foreach (var item in tasks) - { - var wmsTask = new WMSTask(); - if (string.IsNullOrEmpty(item.S_OP_CODE)) - { - wmsTask = new WMSTask - { - S_CNTR_CODE = item.S_CNTR_CODE, - S_CODE = WMSHelper.GenerateTaskNo(), - S_START_LOC = item.S_START_LOC, - S_START_AREA = item.S_START_AREA, - S_END_LOC = item.S_END_LOC, - S_END_AREA = item.S_END_AREA, - S_START_WH = "CK001", - S_END_WH = "CK001", - N_B_STATE = 1, - S_B_STATE = "鎵ц", - N_TYPE = 2, - S_TYPE = "閰嶇洏鍑哄簱" - }; - if (!WMSHelper.CreateWmsTask(wmsTask)) - { - return false; - } - } + // 3. 鍒涘缓WMS浣滀笟 + var mainTask = CreateMainWmsTask(tasks.Where(s=>s.S_TYPE == "閰嶇洏鍑哄簱").First()); + if (!WMSHelper.CreateWmsTask(mainTask)) return false; - if (item.S_END_AREA == "LXLKQ") - { - // 鍒涘缓鍑哄簱浠诲姟 - var res = TaskProcess.HYCreateTransport(item.S_START_LOC, item.S_END_LOC, item.S_TYPE, item.S_CNTR_CODE, wmsTask.S_CODE); - UpdateDistributionCntrState(1, 2, item.S_CNTR_CODE); - if (!res) - { - LogHelper.Info($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�); - return false; - } - } - else - { - //鏍规嵁鍒嗘嫞璐т綅鍘绘煡璇㈤厤缃紝濡傛灉鍒嗘嫞鍖烘病鏈夌┖璐т綅灏卞幓鍑哄簱鍒嗘嫞鏆傚瓨鍖�- var relevancys = Settings.OutRelevancys.Where(s => s.conLoc == item.S_END_LOC).FirstOrDefault(); - if (relevancys == null) - { - LogHelper.Info($"Settings鏈煡璇㈠埌闆嗚揣浣峽item.S_END_LOC}瀵瑰簲鐨勫垎鎷d綅锛�, "鏉哀"); - break; - } - var locList = LocationHelper.GetLocListEmptyFree(relevancys.sorLoc.ToList()); - if (locList.Any()) - { - // 鍒涘缓鍑哄簱浠诲姟 - var res = TaskProcess.HYCreateTransport(item.S_START_LOC, locList.FirstOrDefault().S_CODE, item.S_TYPE, item.S_CNTR_CODE, wmsTask.S_CODE); - UpdateDistributionCntrState(1, 2, item.S_CNTR_CODE); - if (!res) - { - LogHelper.Info($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�); - return false; - } - } - else - { - var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "鎷i�缂撳瓨鍖�).FirstOrDefault(); - var lxLocations = LocationHelper.GetLocAreaList(reservoirs.areaCode); - if (lxLocations.Any()) - { - // 鍒涘缓鍑哄簱浠诲姟 - var res = TaskProcess.HYCreateTransport(item.S_START_LOC, lxLocations.FirstOrDefault().S_CODE, "閰嶇洏缂撳瓨", item.S_CNTR_CODE, wmsTask.S_CODE); - UpdateDistributionCntrState(1, 2, item.S_CNTR_CODE); - if (!res) - { - LogHelper.Info($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�); - return false; - } - } - } - } - } - return true; + // 4. 鐢熸垚WMS涓讳换鍔�+ return ProcessAllTransportTasks(tasks, mainTask.S_CODE); } catch (Exception ex) { - var st = new System.Diagnostics.StackTrace(ex, true); - var frame = st.GetFrame(0); // 鑾峰彇绗竴涓爢鏍堝抚 - if (frame != null) + LogErrorWithStackTrace("鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″け璐�, ex); + return false; + } + } + + // --------------------- 杈呭姪鏂规硶 --------------------- + + private static List<Outbound> CreateOutboundTasks(List<DistributionCntr> distributionCntrs) + { + return distributionCntrs.Select(item => new Outbound + { + locCode = item.S_LOC_CODE, + areaCode = item.S_AREA_CODE, + endArea = item.S_EXIT_AREA_CODE, + endBit = item.S_EXIT_LOC_CODE, + trayCode = item.S_CNTR_CODE, + taskType = "閰嶇洏鍑哄簱" + }).ToList(); + } + + private static WMSTask CreateMainWmsTask(WCSTask firstTask) + { + return new WMSTask + { + S_CNTR_CODE = firstTask.S_CNTR_CODE, + S_CODE = WMSHelper.GenerateTaskNo(), + S_START_LOC = firstTask.S_START_LOC, + S_START_AREA = firstTask.S_START_AREA, + S_END_LOC = firstTask.S_END_LOC, + S_END_AREA = firstTask.S_END_AREA, + S_START_WH = "CK001", + S_END_WH = "CK001", + N_B_STATE = 1, + S_B_STATE = "鎵ц", + N_TYPE = 2, + S_TYPE = "閰嶇洏鍑哄簱" + }; + } + + private static bool ProcessAllTransportTasks(List<WCSTask> tasks, string wmsTaskCode) + { + foreach (var task in tasks.OrderBy(t => t.N_PRIORITY)) + { + if (IsLxLkqOrRelocationTask(task)) { - LogHelper.Error($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″け璐ex.Message}锛侊紒", ex); - LogHelper.Error($"鏂囦欢鍚� {frame.GetFileName()}", ex); - LogHelper.Error($"琛屽彿: {frame.GetFileLineNumber()}", ex); - LogHelper.Error($"鍒楀彿: {frame.GetFileColumnNumber()}", ex); + if (!ProcessLxLkqTransportTask(task, wmsTaskCode)) + return false; } + else + { + if (!ProcessNormalTransportTask(task, wmsTaskCode)) + return false; + } + } + return true; + } + + private static bool IsLxLkqOrRelocationTask(WCSTask task) + { + return task.S_START_AREA == "LXLKQ" || task.S_TYPE == "娣变綅绉诲簱"; + } + + /// <summary> + /// 鐢熸垚LXLKQ || 娣变綅绉诲簱鐨勯厤鐩樹换鍔�+ /// </summary> + /// <param name="task"></param> + /// <param name="wmsTaskCode"></param> + /// <returns></returns> + private static bool ProcessLxLkqTransportTask(WCSTask task, string wmsTaskCode) + { + bool success = false; + if (task.S_TYPE == "娣变綅绉诲簱") + { + success = TaskProcess.HYCreateTransport( + task.S_START_LOC, + task.S_END_LOC, + task.S_TYPE, + task.S_CNTR_CODE, + wmsTaskCode, + task.N_PRIORITY); + return success; + } + var relevancy = Settings.OutRelevancys.FirstOrDefault(s => s.conLoc == task.S_END_LOC); + if (relevancy == null) + { + LogHelper.Info($"Settings鏈煡璇㈠埌闆嗚揣浣峽task.S_END_LOC}瀵瑰簲鐨勫垎鎷d綅锛�, "鏉哀"); return false; } + + // 灏濊瘯浣跨敤鍒嗘嫞浣�+ var emptyLoc = LocationHelper.GetLocListEmptyFree(relevancy.sorLoc.ToList()).FirstOrDefault(); + if (emptyLoc != null) + { + success = TaskProcess.HYCreateTransport( + task.S_START_LOC, + emptyLoc.S_CODE, + task.S_TYPE, + task.S_CNTR_CODE, + wmsTaskCode, + task.N_PRIORITY); + if (success && task.S_TYPE != "娣变綅绉诲簱") + { + UpdateDistributionCntrState(1, 2, task.S_CNTR_CODE); + } + } + return success; + } + + /// <summary> + /// 鐢熸垚TPLKQ鐨勯厤鐩樹换鍔�+ /// </summary> + /// <param name="task"></param> + /// <param name="wmsTaskCode"></param> + /// <returns></returns> + private static bool ProcessNormalTransportTask(WCSTask task, string wmsTaskCode) + { + var relevancy = Settings.OutRelevancys.FirstOrDefault(s => s.conLoc == task.S_END_LOC); + if (relevancy == null) + { + LogHelper.Info($"Settings鏈煡璇㈠埌闆嗚揣浣峽task.S_END_LOC}瀵瑰簲鐨勫垎鎷d綅锛�, "鏉哀"); + return false; + } + + // 灏濊瘯浣跨敤鍒嗘嫞浣�+ var emptyLoc = LocationHelper.GetLocListEmptyFree(relevancy.sorLoc.ToList()).FirstOrDefault(); + if (emptyLoc != null) + { + return CreateAndLogTransport( + task.S_START_LOC, + emptyLoc.S_CODE, + task.S_TYPE, + task.S_CNTR_CODE, + wmsTaskCode, + task.N_PRIORITY); + } + + // 灏濊瘯浣跨敤鎷i�缂撳瓨鍖�+ var reservoir = Settings.ReservoirAreas.FirstOrDefault(s => s.areaName == "鎷i�缂撳瓨鍖�); + if (reservoir == null) return false; + + var lxLocation = LocationHelper.GetLocAreaList(reservoir.areaCode).FirstOrDefault(); + if (lxLocation == null) return false; + + return CreateAndLogTransport( + task.S_START_LOC, + lxLocation.S_CODE, + "閰嶇洏缂撳瓨", + task.S_CNTR_CODE, + wmsTaskCode, + task.N_PRIORITY); + } + + private static bool CreateAndLogTransport(string startLoc, string endLoc, string taskType, + string cntrCode, string wmsTaskCode, int priority) + { + var success = TaskProcess.HYCreateTransport( + startLoc, endLoc, taskType, cntrCode, wmsTaskCode, priority); + + if (success) + { + UpdateDistributionCntrState(1, 2, cntrCode); + } + else + { + LogHelper.Info("鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�); + } + + return success; + } + + private static void LogErrorWithStackTrace(string message, Exception ex) + { + var st = new StackTrace(ex, true); + var frame = st.GetFrame(0); + if (frame == null) return; + + LogHelper.Error($"{message}{ex.Message}锛侊紒", ex); + LogHelper.Error($"鏂囦欢鍚� {frame.GetFileName()}", ex); + LogHelper.Error($"琛屽彿: {frame.GetFileLineNumber()}", ex); + LogHelper.Error($"鍒楀彿: {frame.GetFileColumnNumber()}", ex); } #endregion -- Gitblit v1.9.1