From f2518583da4cc3d3737986e112b92154535aea4d Mon Sep 17 00:00:00 2001
From: pengmn <pmn@HanInfo>
Date: 星期四, 29 五月 2025 17:32:48 +0800
Subject: [PATCH] 1

---
 HH.WCS.Mobox3.HangYang/process/TaskProcess.cs |  246 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 236 insertions(+), 10 deletions(-)

diff --git a/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs b/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs
index b5b0ab4..178735f 100644
--- a/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs
@@ -924,12 +924,12 @@
         /// </summary>
         /// <param name="mst"></param>
         /// <returns></returns>
-        internal static bool CreateInTask(WMSTask mst)
+        internal static async Task<bool> CreateInTask(WMSTask mst)
         {
             try
             {
                 if (mst.S_B_STATE.Trim() != "绛夊緟") return true;
-                if (string.IsNullOrEmpty(mst.S_START_LOC)) return false;
+                //if (string.IsNullOrEmpty(mst.S_START_LOC)) return false;
 
                 var reservoirs = Settings.ReservoirAreas?.ToList();
                 if (reservoirs == null || !reservoirs.Any())
@@ -947,7 +947,13 @@
                     case "鍚堟墭鍥炲簱":
                         return HandleMergeReturn(mst, reservoirs);
                     case "鍒嗘嫞鍥炲簱":
-                        return HandleMergeReturn(mst, reservoirs);
+                        return await SortingReturn(mst, reservoirs);
+                    case "瑙g粦鍥炲簱":
+                        return await UnbindReturn(mst, reservoirs);
+                    case "绌烘墭鍥炲簱":
+                        return await EmptyPalletReturn(mst, reservoirs);
+                    case "绌烘墭鍑哄簱":
+                        return EmptyPalletOutbound(mst);
                     case "鏂欑鍑哄簱":
                         return HandleBoxOutbound(mst, reservoirs);
                     case "鍙戣揣鏆傚瓨":
@@ -1135,7 +1141,7 @@
         }
 
         /// <summary>
-        /// 鍚堟墭鍥炲簱 || 鍒嗘嫞鍥炲簱
+        /// 鍚堟墭鍥炲簱
         /// </summary>
         /// <param name="mst"></param>
         /// <param name="reservoirs"></param>
@@ -1237,6 +1243,218 @@
                 }
             }
             return true;
+        }
+
+        /// <summary>
+        /// 鍒嗘嫞鍥炲簱
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="reservoirs"></param>
+        /// <returns></returns>
+        private static async Task<bool> SortingReturn(WMSTask mst, List<ReservoirArea> reservoirs)
+        {
+            var trayLst = ContainerHelper.GetCntr(mst.S_CNTR_CODE);
+            if (trayLst != null && trayLst.S_TYPE.Equals("鎵樼洏"))
+            {
+                //鎵樼洏鍒嗘嫞鍥炲簱
+                var area = reservoirs.Where(s => s.areaName == "鍏ュ簱鎺ラ┏浣�).FirstOrDefault();
+                if (area == null)
+                {
+                    LogHelper.Info("Settings鍑虹幇閿欒鏈煡璇㈠埌鍏ュ簱鎺ラ┏浣嶏紒", "鏉哀");
+                    return false;
+                }
+                //(2.1)鍏堟煡璇㈠叆搴撴帴椹充綅鏄惁涓虹┖锛屽鏋滀负绌虹洿鎺ョ敓鎴愬埌鍏ュ簱鐨勪换鍔�+                var anyLoc = LocationHelper.GetLocAreaList(area.areaCode);
+                if (anyLoc.Any())
+                {
+                    //鐢熸垚鍒版帴椹充綅鐨勪换鍔�+                    var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, anyLoc.FirstOrDefault().S_CODE, "鎵樼洏鍒嗘嫞鍥炲簱", mst.S_CNTR_CODE, mst.S_CODE);
+                    if (!res)
+                    {
+                        LogHelper.Info("鎵樼洏鍒嗘嫞鍥炲簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                        return false;
+                    }
+                    WMSHelper.UpdateStatus(mst, 1);
+                }
+            }
+            else
+            {
+                //鏂欑鍥炲簱
+                var inbound = new Inbound()
+                {
+                    areaCode = "LXLKQ"
+                };
+                var wh = new Warehouse(inbound);
+                var stored = await wh.StoreItemAsync();
+                if (stored == null)
+                {
+                    LogHelper.Info($"鏈煡璇㈠埌{inbound.areaCode}鍙敤璐т綅锛�, "鏉哀");
+                    return false;
+                }
+                
+                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, stored.loationCode, "鏂欑鍒嗘嫞鍥炲簱" , mst.S_CNTR_CODE, mst.S_CODE);
+                if (!res)
+                {
+                    LogHelper.Info("鏂欑鍒嗘嫞鍥炲簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                    return false;
+                }
+                WMSHelper.UpdateStatus(mst, 1);
+            }
+            return true;
+        }
+
+        /// <summary>
+        /// 瑙g粦鍥炲簱
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="reservoirs"></param>
+        /// <returns></returns>
+        private static async Task<bool> UnbindReturn(WMSTask mst, List<ReservoirArea> reservoirs)
+        {
+            var trayLst = ContainerHelper.GetCntr(mst.S_CNTR_CODE);
+            if (trayLst != null && trayLst.S_TYPE.Equals("鎵樼洏"))
+            {
+                //鎵樼洏鍒嗘嫞鍥炲簱
+                var area = reservoirs.Where(s => s.areaName == "鍏ュ簱鎺ラ┏浣�).FirstOrDefault();
+                if (area == null)
+                {
+                    LogHelper.Info("Settings鍑虹幇閿欒鏈煡璇㈠埌鍏ュ簱鎺ラ┏浣嶏紒", "鏉哀");
+                    return false;
+                }
+                //(2.1)鍏堟煡璇㈠叆搴撴帴椹充綅鏄惁涓虹┖锛屽鏋滀负绌虹洿鎺ョ敓鎴愬埌鍏ュ簱鐨勪换鍔�+                var anyLoc = LocationHelper.GetLocAreaList(area.areaCode);
+                if (anyLoc.Any())
+                {
+                    //鐢熸垚鍒版帴椹充綅鐨勪换鍔�+                    var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, anyLoc.FirstOrDefault().S_CODE, "鎵樼洏瑙g粦鍥炲簱", mst.S_CNTR_CODE, mst.S_CODE);
+                    if (!res)
+                    {
+                        LogHelper.Info("鎵樼洏瑙g粦鍥炲簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                        return false;
+                    }
+                    WMSHelper.UpdateStatus(mst, 1);
+                }
+            }
+            else
+            {
+                //鏂欑鍥炲簱
+                var inbound = new Inbound()
+                {
+                    areaCode = "LXLKQ"
+                };
+                var wh = new Warehouse(inbound);
+                var stored = await wh.StoreItemAsync();
+                if (stored == null)
+                {
+                    LogHelper.Info($"鏈煡璇㈠埌{inbound.areaCode}鍙敤璐т綅锛�, "鏉哀");
+                    return false;
+                }
+
+                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, stored.loationCode, "鏂欑瑙g粦鍥炲簱", mst.S_CNTR_CODE, mst.S_CODE);
+                if (!res)
+                {
+                    LogHelper.Info("鏂欑瑙g粦鍥炲簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                    return false;
+                }
+                WMSHelper.UpdateStatus(mst, 1);
+            }
+            return true;
+        }
+
+        /// <summary>
+        /// 绌烘墭鍥炲簱
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="reservoirs"></param>
+        /// <returns></returns>
+        private static async Task<bool> EmptyPalletReturn(WMSTask mst, List<ReservoirArea> reservoirs)
+        {
+            var trayLst = ContainerHelper.GetCntr(mst.S_CNTR_CODE);
+            if (trayLst != null && trayLst.S_TYPE.Equals("鎵樼洏"))
+            {
+                //鎵樼洏绌烘墭鍥炲簱
+                var area = reservoirs.Where(s => s.areaName == "鍏ュ簱鎺ラ┏浣�).FirstOrDefault();
+                if (area == null)
+                {
+                    LogHelper.Info("Settings鍑虹幇閿欒鏈煡璇㈠埌鍏ュ簱鎺ラ┏浣嶏紒", "鏉哀");
+                    return false;
+                }
+                //(2.1)鍏堟煡璇㈠叆搴撴帴椹充綅鏄惁涓虹┖锛屽鏋滀负绌虹洿鎺ョ敓鎴愬埌鍏ュ簱鐨勪换鍔�+                var anyLoc = LocationHelper.GetLocAreaList(area.areaCode);
+                if (anyLoc.Any())
+                {
+                    //鐢熸垚鍒版帴椹充綅鐨勪换鍔�+                    var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, anyLoc.FirstOrDefault().S_CODE, "鎵樼洏绌烘墭鍥炲簱", mst.S_CNTR_CODE, mst.S_CODE);
+                    if (!res)
+                    {
+                        LogHelper.Info("鎵樼洏绌烘墭鍥炲簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                        return false;
+                    }
+                    WMSHelper.UpdateStatus(mst, 1);
+                }
+            }
+            else
+            {
+                //鏂欑绌烘墭鍥炲簱
+                var inbound = new Inbound()
+                {
+                    areaCode = "LXLKQ"
+                };
+                var wh = new Warehouse(inbound);
+                var stored = await wh.StoreItemAsync();
+                if (stored == null)
+                {
+                    LogHelper.Info($"鏈煡璇㈠埌{inbound.areaCode}鍙敤璐т綅锛�, "鏉哀");
+                    return false;
+                }
+
+                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, stored.loationCode, "鏂欑绌烘墭鍥炲簱", mst.S_CNTR_CODE, mst.S_CODE);
+                if (!res)
+                {
+                    LogHelper.Info("鏂欑绌烘墭鍥炲簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                    return false;
+                }
+                WMSHelper.UpdateStatus(mst, 1);
+            }
+            return true;
+        }
+
+        /// <summary>
+        /// 绌烘墭鍑哄簱
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="reservoirs"></param>
+        /// <returns></returns>
+        private static bool EmptyPalletOutbound(WMSTask mst)
+        {
+            var result = true;
+            var scheduler = new EmptyPalletOutboundScheduler(mst.S_START_AREA);
+
+            var outbound = new Outbound
+            {
+                endArea = mst.S_END_AREA,
+                endBit = mst.S_END_LOC,
+                requiredCount = 1,
+                taskType = "绌烘墭鍑哄簱"
+            };
+            // 璇锋眰鍑哄簱
+            var tasks = scheduler.GenerateEmptyPalletTasks(outbound);
+
+            foreach (var item in tasks)
+            {
+                // 鍒涘缓鍑哄簱浠诲姟
+                var res = TaskProcess.HYCreateTransport(item.S_START_LOC, item.S_END_LOC, item.S_TYPE, item.S_CNTR_CODE, mst.S_CODE);
+                mst.S_START_LOC = item.S_START_LOC;
+                mst.S_CNTR_CODE  = item.S_CNTR_CODE;
+                //淇敼绌烘墭鍑哄簱璧风偣鍜屾墭鐩樼爜
+                UpdateTask(mst,1);
+                if (!res)
+                {
+                    LogHelper.Info($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�);
+                    return false;
+                }
+            }
+            return result;
         }
 
         /// <summary>
@@ -1370,13 +1588,17 @@
             if (locList.Any())
             {
                 var startLoc = WMSHelper.GetCntrLoc(mst.S_CNTR_CODE);
-                // 鍒涘缓鍑哄簱浠诲姟
-                var res = TaskProcess.HYCreateTransport(startLoc.S_LOC_CODE, locList.FirstOrDefault().S_CODE, mst.S_TYPE, mst.S_CNTR_CODE, mst.S_CODE);
-                if (!res)
+                if (startLoc != null)
                 {
-                    LogHelper.Info($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�);
-                    return false;
+                    // 鍒涘缓鍑哄簱浠诲姟
+                    var res = TaskProcess.HYCreateTransport(startLoc.S_LOC_CODE, locList.FirstOrDefault().S_CODE, mst.S_TYPE, mst.S_CNTR_CODE, mst.S_CODE);
+                    if (!res)
+                    {
+                        LogHelper.Info($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�);
+                        return false;
+                    }
                 }
+                
             }
 
             return true;
@@ -1595,13 +1817,17 @@
                     if (list == null)
                     {
                         list = WMSHelper.GetWmsTaskList("鎵ц", item.cntrNo);
+                        if (list != null && list.S_TYPE.Contains("鍥炲簱"))
+                        {
+                            list.S_END_AREA = "TPLKQ";
+                        }
                     }
                     if (list == null)
                     {
                         result.errMsg = "鏈煡璇㈠埌鍦ㄧ瓑寰呬腑鐨勪綔涓氾紒";
                         return result;
                     }
-
+                    
                     var inbound = new Inbound()
                     {
                         areaCode = list.S_END_AREA

--
Gitblit v1.9.1