From 382c009ba2bb04374468e9584f262d6682841d9b Mon Sep 17 00:00:00 2001
From: pengmn <pmn@HanInfo>
Date: 星期三, 28 五月 2025 18:09:41 +0800
Subject: [PATCH] 杭氧测试流程

---
 HH.WCS.Mobox3.HangYang/process/TaskProcess.cs | 1243 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 909 insertions(+), 334 deletions(-)

diff --git a/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs b/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs
index 294b195..b5b0ab4 100644
--- a/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs
@@ -15,9 +15,11 @@
 using System.Linq;
 using System.Reflection;
 using System.Security.Cryptography;
+using System.Text;
 using System.Threading.Tasks;
 using static HH.WCS.HangYang.api.OtherModel.Putaway_Order_In;
 using static HH.WCS.HangYang.LISTA.process.HttpModel;
+using static HH.WCS.HangYang.util.Settings;
 using static HH.WCS.HangYang.wms.WMSHelper;
 using static System.Runtime.CompilerServices.RuntimeHelpers;
 
@@ -45,7 +47,7 @@
             {
 
                 LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}");
-                LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList(),mst.S_NOTE);
+                LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList(), mst.S_NOTE);
             }
 
         }
@@ -84,7 +86,7 @@
         internal static bool Intercept(WCSTask mst)
         {
             var result = false;
-           
+
             return result;
         }
 
@@ -521,7 +523,7 @@
         /// <returns></returns>
         public static Result GetOutboundOrder(OutOrder model)
         {
-            Result result = new Result() { success = false, };
+            Result result = new Result() { success = false };
             try
             {
                 if (model == null || !model.OutOrderDetail.Any())
@@ -530,6 +532,7 @@
                     return result;
                 }
 
+                // 绗竴姝ワ細璁剧疆鐗╂枡灞炴�淇℃伅
                 foreach (var item in model.OutOrderDetail)
                 {
                     var itemType = WMSHelper.GetItemType(item.S_ITEM_CODE);
@@ -539,31 +542,40 @@
                         return result;
                     }
                     item.S_EXT_ATTR1 = itemType.S_ITEM_TYPE;
-                    item.S_ITEM_NAME  = itemType.S_ITEM_NAME;
+                    item.S_ITEM_NAME = itemType.S_ITEM_NAME;
+                    item.C_CLEAN = itemType.C_CLEAN;
                 }
 
-                var groupedInOrders = model.OutOrderDetail
-                                      .GroupBy(detail => detail.S_EXT_ATTR1) // 鎸夌墿鏂欏睘鎬у垎缁�-                                      .Select((group, index) => new OutOrder
-                                      {
-                                          S_NO = $"{model.S_BS_NO}_{index + 1}", // 鎷兼帴鏉ユ簮鍗曞彿
-                                          S_BS_NO = model.S_BS_NO,
-                                          S_OP_TYPE = model.S_OP_TYPE,
-                                          S_NOTE = model.S_NOTE,
-                                          S_BS_TYPE = "ERP",
-                                          S_FACTORY = "HY001",
-                                          S_WH_CODE = "CK001",
-                                          S_AREA_CODE = group.Key.Equals("鏂欑搴�) ? "LXLKQ" : "TPLKQ",
-                                          OutOrderDetail = group.Select(detail =>
-                                          {
-                                              // 淇敼 group 涓殑 S_IO_NO 瀛楁涓�S_NO 鐨勫�
-                                              detail.S_OO_NO = $"{model.S_BS_NO}_{index + 1}";
-                                              detail.S_BS_NO = model.S_BS_NO;
-                                              return detail;
-                                          }).ToList() // 鍒嗙粍鍚庣殑鏄庣粏
-                                      })
-                                      .ToList();
-                var res = WMSHelper.CreateOrderOut(groupedInOrders);
+                // 绗簩姝ワ細鍏堟寜鐗╂枡灞炴�鍒嗙粍锛屽啀鎸夋槸鍚︽竻娲楀垎缁�+                var groupedOrders = model.OutOrderDetail
+                    .GroupBy(detail => new
+                    {
+                        MaterialType = detail.S_EXT_ATTR1,
+                        IsClean = detail.C_CLEAN
+                    }) // 鎸夌墿鏂欏睘鎬у拰鏄惁娓呮礂鍙岄噸鍒嗙粍
+                    .Select((group, index) => new OutOrder
+                    {
+                        S_NO = $"{model.S_BS_NO}_{index + 1}",
+                        S_BS_NO = model.S_BS_NO,
+                        S_OP_TYPE = model.S_OP_TYPE,
+                        S_OUT_TO = model.S_OUT_TO,
+                        S_NOTE = model.S_NOTE,
+                        S_BS_TYPE = "ERP",
+                        S_FACTORY = "HY001",
+                        S_WH_CODE = "CK001",
+                        S_AREA_CODE = group.Key.MaterialType.Equals("鏂欑搴�) ? "LXLKQ" : "TPLKQ",
+                        C_CLEAN = group.Key.IsClean, // 娣诲姞鏄惁娓呮礂鏍囪
+                        OutOrderDetail = group.Select(detail =>
+                        {
+                            detail.S_OO_NO = $"{model.S_BS_NO}_{index + 1}";
+                            detail.S_BS_NO = model.S_BS_NO;
+                            return detail;
+                        }).ToList()
+                    })
+                    .ToList();
+
+                // 绗笁姝ワ細璋冪敤鍒涘缓鍑哄簱鍗曟柟娉�+                var res = WMSHelper.CreateOrderOut(groupedOrders);
                 if (res)
                 {
                     result.success = true;
@@ -575,18 +587,337 @@
                 result.success = false;
                 result.errMsg = ex.Message;
                 var st = new System.Diagnostics.StackTrace(ex, true);
-                var frame = st.GetFrame(0); // 鑾峰彇绗竴涓爢鏍堝抚
+                var frame = st.GetFrame(0);
                 if (frame != null)
                 {
-                    LogHelper.Error($"GetInboundOrder鍏ュ簱鍗曟柊澧炲嚭鐜伴敊璇紒锛�, ex);
+                    LogHelper.Error($"GetOutboundOrder鍑哄簱鍗曟柊澧炲嚭鐜伴敊璇紒", ex);
                     LogHelper.Error($"鏂囦欢鍚� {frame.GetFileName()}", ex);
                     LogHelper.Error($"琛屽彿: {frame.GetFileLineNumber()}", ex);
                     LogHelper.Error($"鍒楀彿: {frame.GetFileColumnNumber()}", ex);
                 }
                 return result;
             }
-
         }
+
+        ///// <summary>
+        ///// 鑾峰彇浣滀笟鍒涘缓鍏ュ簱浠诲姟
+        ///// </summary>
+        ///// <param name="mst"></param>
+        ///// <returns></returns>
+        //internal static bool CreateInTask(WMSTask mst)
+        //{
+        //    try
+        //    {
+        //        var result = false;
+        //        var taskState = mst.S_B_STATE.Trim();
+        //        if (taskState == "绛夊緟")
+        //        {
+        //            if (!string.IsNullOrEmpty(mst.S_START_LOC))
+        //            {
+        //                //鏉哀鎵�湁搴撳尯
+        //                var reservoirs = Settings.ReservoirAreas.ToList();
+        //                if (!reservoirs.Any() || reservoirs == null)
+        //                {
+        //                    LogHelper.Info("Settings鍑虹幇閿欒鏈煡璇㈠埌鏉哀鐨勫簱鍖猴紒", "鏉哀");
+        //                    return false;
+        //                }
+        //                if (mst.S_TYPE == "鎵樼洏杞繍")
+        //                {
+        //                    var lxAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鏂欑鍏ュ簱缂撳瓨浣�).FirstOrDefault().areaCode);
+        //                    if (lxAnyLoc.Any())
+        //                    {
+        //                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, lxAnyLoc.FirstOrDefault().S_CODE, "鏂欑缂撳瓨浣嶅叆搴�, mst.S_CNTR_CODE, mst.S_CODE);
+        //                        if (!res)
+        //                        {
+        //                            LogHelper.Info("鏂欑缂撳瓨浣嶅叆搴撲换鍔″垱寤哄け璐ワ紒", "鏉哀");
+        //                            return false;
+        //                        }
+        //                        WMSHelper.UpdateStatus(mst, 1);
+        //                    }
+        //                    else
+        //                    {
+        //                        var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
+        //                        if (rkAnyLoc.Any())
+        //                        {
+        //                            var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鏂欑鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+        //                            if (!res)
+        //                            {
+        //                                LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+        //                                return false;
+        //                            }
+        //                            WMSHelper.UpdateStatus(mst, 1);
+        //                            //鏍囪涓哄悎鎵�+        //                            ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "鏂欑鍚堟墭");
+        //                        }
+        //                        else
+        //                        {
+        //                            LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
+        //                            return false;
+        //                        }
+        //                    }
+        //                }
+        //                if (mst.S_TYPE == "鎵樼洏鍏ュ簱")
+        //                {
+        //                    //1.鏌ヨ涓嬩笅搴撻噷闈㈡槸鍚︽湁瑕佸悎鎵樼殑鎵樼洏
+        //                    var locMerge = WMSHelper.GetLocMerge(mst.S_CNTR_CODE);
+        //                    if (locMerge != null)
+        //                    {
+        //                        //锛�.1锛夊鏋滄湁瑕佸悎鎵樼殑鎵樼洏灏卞幓鍒ゆ柇涓�笅鍚堟墭宸ヤ綅鏄惁涓虹┖
+        //                        var anyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍚堟墭鍖�).FirstOrDefault().areaCode);
+        //                        if (anyLoc.Any())
+        //                        {
+
+        //                            foreach (var item in anyLoc)
+        //                            {
+        //                                //鐢熸垚涓�潯鍑哄簱鐨勪换鍔�+        //                                var relevancys = Settings.Relevancys.Where(s => s.InLoc == item.S_CODE).FirstOrDefault();
+        //                                if (relevancys == null)
+        //                                {
+        //                                    LogHelper.Info($"Settings鏈煡璇㈠埌鍚堟墭鍏ュ簱浣峽item.S_CODE}瀵瑰簲鐨勫嚭搴撲綅锛�, "鏉哀");
+        //                                    continue;
+        //                                }
+        //                                //鐢熸垚鍒板悎鎵樺尯鐨勪换鍔�+        //                                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, item.S_CODE, "鐮佺洏鍚堟墭鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+        //                                if (!res)
+        //                                {
+        //                                    LogHelper.Info("鐮佺洏鍚堟墭鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+        //                                    return false;
+        //                                }
+        //                                res = TaskProcess.HYCreateTransport(locMerge.S_LOC_CODE, relevancys.OutLoc, "鐮佺洏鍚堟墭鍑哄簱", locMerge.S_CNTR_CODE, mst.S_CODE);
+        //                                if (!res)
+        //                                {
+        //                                    LogHelper.Info("鐮佺洏鍚堟墭鍑哄簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+        //                                    return false;
+        //                                }
+        //                                //锛�.2锛夊鏋滃悎鎵樺伐浣嶄负绌哄氨鐩存帴鍚堟墭鍒板悎鎵樺伐浣嶉噷闈紝鍚屾椂鐢熸垚涓�釜鍑哄簱浠诲姟鎶婅鍚堟墭鐨勬墭鐩樺嚭鍑烘潵锛堟爣璁颁负瑕佸悎鎵橈級
+        //                                ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "鍚堟墭");
+        //                                WMSHelper.UpdateStatus(mst, 1);
+        //                                break;
+        //                            }
+
+
+        //                        }
+        //                        else
+        //                        {
+        //                            //锛�.3锛夊鏋滃悎鎵樺伐浣嶄笉涓虹┖灏卞幓鍏ュ簱缂撳瓨鍖猴紙鏍囪涓鸿鍚堟墭锛�+        //                            //鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔�+        //                            var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
+        //                            if (rkAnyLoc.Any())
+        //                            {
+        //                                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+        //                                if (!res)
+        //                                {
+        //                                    LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+        //                                    return false;
+        //                                }
+        //                                WMSHelper.UpdateStatus(mst, 1);
+        //                                //鏍囪涓哄悎鎵�+        //                                ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "鍚堟墭");
+        //                            }
+        //                            else
+        //                            {
+        //                                LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
+        //                                return false;
+        //                            }
+        //                        }
+
+        //                    }
+        //                    else
+        //                    {
+        //                        //2.濡傛灉娌℃湁瑕佸悎鎵樼殑鎵樼洏
+        //                        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
+        //                        {
+        //                            //(2.2)濡傛灉鍏ュ簱鎺ラ┏浣嶄笉涓虹┖锛屽垯鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔★紙鏍囪涓轰笉鍚堟墭锛�+        //                            //鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔�+        //                            var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
+        //                            if (rkAnyLoc.Any())
+        //                            {
+        //                                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+        //                                if (!res)
+        //                                {
+        //                                    LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+        //                                    return false;
+        //                                }
+        //                                WMSHelper.UpdateStatus(mst, 1);
+        //                                //鏍囪涓轰笉鍚堟墭
+        //                                ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "涓嶅悎鎵�);
+        //                            }
+        //                            else
+        //                            {
+        //                                LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
+        //                                return false;
+        //                            }
+
+        //                        }
+
+        //                    }
+        //                }
+        //                if (mst.S_TYPE == "鍚堟墭鍥炲簱")
+        //                {
+        //                    var trayLst = ContainerHelper.GetCntrItemRel(mst.S_CNTR_CODE);
+        //                    if (trayLst.Any())
+        //                    {
+        //                        //婊℃墭鍥炲簱
+        //                        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
+        //                        {
+        //                            //(2.2)濡傛灉鍏ュ簱鎺ラ┏浣嶄笉涓虹┖锛屽垯鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔★紙鏍囪涓轰笉鍚堟墭锛�+        //                            //鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔�+        //                            var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
+        //                            if (rkAnyLoc.Any())
+        //                            {
+        //                                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+        //                                if (!res)
+        //                                {
+        //                                    LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+        //                                    return false;
+        //                                }
+        //                                WMSHelper.UpdateStatus(mst, 1);
+        //                                //鏍囪涓轰笉鍚堟墭
+        //                                ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "涓嶅悎鎵�);
+        //                            }
+        //                            else
+        //                            {
+        //                                LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
+        //                                return false;
+        //                            }
+
+        //                        }
+        //                    }
+        //                    else
+        //                    {
+        //                        //绌烘墭鍥炲簱
+        //                        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 rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
+        //                            if (rkAnyLoc.Any())
+        //                            {
+        //                                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+        //                                if (!res)
+        //                                {
+        //                                    LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+        //                                    return false;
+        //                                }
+        //                                //鏍囪涓轰笉鍚堟墭
+        //                                ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "涓嶅悎鎵�);
+        //                                WMSHelper.UpdateStatus(mst, 1);
+
+        //                            }
+        //                            else
+        //                            {
+        //                                LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
+        //                                return false;
+        //                            }
+        //                        }
+        //                    }
+        //                }
+        //                if (mst.S_TYPE == "鏂欑鍑哄簱")
+        //                {
+
+        //                    //婊℃墭鍥炲簱
+        //                    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
+        //                    {
+        //                        LogHelper.Info("鏂欑鐮佺洏鍖烘湭鏈夊彲鐢ㄨ揣浣嶏紒", "鏉哀");
+        //                    }
+        //                }
+        //            }
+        //        }
+        //        else { result = true; }
+        //        return result;
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        var st = new System.Diagnostics.StackTrace(ex, true);
+        //        var frame = st.GetFrame(0); // 鑾峰彇绗竴涓爢鏍堝抚
+        //        if (frame != null)
+        //        {
+        //            LogHelper.Error($"CreateInTask鑾峰彇浣滀笟鍒涘缓鍏ュ簱浠诲姟鍑虹幇閿欒锛侊紒", ex);
+        //            LogHelper.Error($"鏂囦欢鍚� {frame.GetFileName()}", ex);
+        //            LogHelper.Error($"琛屽彿: {frame.GetFileLineNumber()}", ex);
+        //            LogHelper.Error($"鍒楀彿: {frame.GetFileColumnNumber()}", ex);
+        //        }
+        //        return false;
+        //    }
+
+        //}
+
+        #region 绛夊緟浣滀笟
 
         /// <summary>
         /// 鑾峰彇浣滀笟鍒涘缓鍏ュ簱浠诲姟
@@ -597,310 +928,488 @@
         {
             try
             {
-                var result = false;
-                var taskState = mst.S_B_STATE.Trim();
-                if (taskState == "绛夊緟")
+                if (mst.S_B_STATE.Trim() != "绛夊緟") return true;
+                if (string.IsNullOrEmpty(mst.S_START_LOC)) return false;
+
+                var reservoirs = Settings.ReservoirAreas?.ToList();
+                if (reservoirs == null || !reservoirs.Any())
                 {
-                    if (!string.IsNullOrEmpty(mst.S_START_LOC))
-                    {
-                        //鏉哀鎵�湁搴撳尯
-                        var reservoirs = Settings.ReservoirAreas.ToList();
-                        if (!reservoirs.Any() || reservoirs == null)
-                        {
-                            LogHelper.Info("Settings鍑虹幇閿欒鏈煡璇㈠埌鏉哀鐨勫簱鍖猴紒", "鏉哀");
-                            return false;
-                        }
-                        if (mst.S_TYPE == "鎵樼洏杞繍")
-                        {
-                            var lxAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鏂欑鍏ュ簱缂撳瓨浣�).FirstOrDefault().areaCode);
-                            if (lxAnyLoc.Any())
-                            {
-
-                                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, lxAnyLoc.FirstOrDefault().S_CODE, "鏂欑缂撳瓨浣嶅叆搴�, mst.S_CNTR_CODE, mst.S_CODE);
-                                if (!res)
-                                {
-                                    LogHelper.Info("鏂欑缂撳瓨浣嶅叆搴撲换鍔″垱寤哄け璐ワ紒", "鏉哀");
-                                    return false;
-                                }
-                                WMSHelper.UpdateStatus(mst, 1);
-                            }
-                            else
-                            {
-                                var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
-                                if (rkAnyLoc.Any())
-                                {
-                                    var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鏂欑鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
-                                    if (!res)
-                                    {
-                                        LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
-                                        return false;
-                                    }
-                                    WMSHelper.UpdateStatus(mst, 1);
-                                    //鏍囪涓哄悎鎵�-                                    ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "鏂欑鍚堟墭");
-                                }
-                                else
-                                {
-                                    LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
-                                    return false;
-                                }
-                            }
-                        }
-                        if (mst.S_TYPE == "鎵樼洏鍏ュ簱")
-                        {
-                            //1.鏌ヨ涓嬩笅搴撻噷闈㈡槸鍚︽湁瑕佸悎鎵樼殑鎵樼洏
-                            var locMerge = WMSHelper.GetLocMerge(mst.S_CNTR_CODE);
-                            if (locMerge != null)
-                            {
-                                //锛�.1锛夊鏋滄湁瑕佸悎鎵樼殑鎵樼洏灏卞幓鍒ゆ柇涓�笅鍚堟墭宸ヤ綅鏄惁涓虹┖
-                                var anyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍚堟墭鍖�).FirstOrDefault().areaCode);
-                                if (anyLoc.Any())
-                                {
-                                    
-                                    //鐢熸垚涓�潯鍑哄簱鐨勪换鍔�-                                    var relevancys = Settings.Relevancys.Where(s => s.InLoc == anyLoc.FirstOrDefault().S_CODE).FirstOrDefault();
-                                    if (relevancys == null)
-                                    {
-                                        LogHelper.Info("Settings鍑虹幇閿欒鏈煡璇㈠埌鍚堟墭鍏ュ簱浣嶅搴旂殑鍑哄簱浣嶏紒", "鏉哀");
-                                        return false;
-                                    }
-                                    //鐢熸垚鍒板悎鎵樺尯鐨勪换鍔�-                                    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;
-                                    }
-                                    res = TaskProcess.HYCreateTransport(locMerge.S_LOC_CODE, relevancys.OutLoc, "鐮佺洏鍚堟墭鍑哄簱", locMerge.S_CNTR_CODE, mst.S_CODE);
-                                    if (!res)
-                                    {
-                                        LogHelper.Info("鐮佺洏鍚堟墭鍑哄簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
-                                        return false;
-                                    }
-                                    //锛�.2锛夊鏋滃悎鎵樺伐浣嶄负绌哄氨鐩存帴鍚堟墭鍒板悎鎵樺伐浣嶉噷闈紝鍚屾椂鐢熸垚涓�釜鍑哄簱浠诲姟鎶婅鍚堟墭鐨勬墭鐩樺嚭鍑烘潵锛堟爣璁颁负瑕佸悎鎵橈級
-                                    ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "鍚堟墭");
-
-                                    WMSHelper.UpdateStatus(mst, 1);
-                                }
-                                else
-                                {
-                                    //锛�.3锛夊鏋滃悎鎵樺伐浣嶄笉涓虹┖灏卞幓鍏ュ簱缂撳瓨鍖猴紙鏍囪涓鸿鍚堟墭锛�-                                    //鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔�-                                    var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
-                                    if (rkAnyLoc.Any())
-                                    {
-                                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
-                                        if (!res)
-                                        {
-                                            LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
-                                            return false;
-                                        }
-                                        WMSHelper.UpdateStatus(mst, 1);
-                                        //鏍囪涓哄悎鎵�-                                        ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "鍚堟墭");
-                                    }
-                                    else
-                                    {
-                                        LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
-                                        return false;
-                                    }
-                                }
-
-                            }
-                            else
-                            {
-                                //2.濡傛灉娌℃湁瑕佸悎鎵樼殑鎵樼洏
-                                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
-                                {
-                                    //(2.2)濡傛灉鍏ュ簱鎺ラ┏浣嶄笉涓虹┖锛屽垯鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔★紙鏍囪涓轰笉鍚堟墭锛�-                                    //鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔�-                                    var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
-                                    if (rkAnyLoc.Any())
-                                    {
-                                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
-                                        if (!res)
-                                        {
-                                            LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
-                                            return false;
-                                        }
-                                        WMSHelper.UpdateStatus(mst, 1);
-                                        //鏍囪涓轰笉鍚堟墭
-                                        ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "涓嶅悎鎵�);
-                                    }
-                                    else
-                                    {
-                                        LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
-                                        return false;
-                                    }
-
-                                }
-
-                            }
-                        }
-                        if (mst.S_TYPE == "鍚堟墭鍥炲簱")
-                        {
-                            var trayLst = ContainerHelper.GetCntrItemRel(mst.S_CNTR_CODE);
-                            if (trayLst.Any())
-                            {
-                                //婊℃墭鍥炲簱
-                                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
-                                {
-                                    //(2.2)濡傛灉鍏ュ簱鎺ラ┏浣嶄笉涓虹┖锛屽垯鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔★紙鏍囪涓轰笉鍚堟墭锛�-                                    //鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔�-                                    var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
-                                    if (rkAnyLoc.Any())
-                                    {
-                                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
-                                        if (!res)
-                                        {
-                                            LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
-                                            return false;
-                                        }
-                                        WMSHelper.UpdateStatus(mst, 1);
-                                        //鏍囪涓轰笉鍚堟墭
-                                        ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "涓嶅悎鎵�);
-                                    }
-                                    else
-                                    {
-                                        LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
-                                        return false;
-                                    }
-
-                                }
-                            }
-                            else
-                            {
-                                //绌烘墭鍥炲簱
-                                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 rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
-                                    if (rkAnyLoc.Any())
-                                    {
-                                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
-                                        if (!res)
-                                        {
-                                            LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
-                                            return false;
-                                        }
-                                        //鏍囪涓轰笉鍚堟墭
-                                        ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "涓嶅悎鎵�);
-                                        WMSHelper.UpdateStatus(mst, 1);
-
-                                    }
-                                    else
-                                    {
-                                        LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
-                                        return false;
-                                    }
-                                }
-                            }
-                        }
-                        if (mst.S_TYPE == "鏂欑鍑哄簱")
-                        {
-
-                            //婊℃墭鍥炲簱
-                            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
-                            {
-                                LogHelper.Info("鏂欑鐮佺洏鍖烘湭鏈夊彲鐢ㄨ揣浣嶏紒", "鏉哀");
-                            }
-                        }
-                    }
+                    LogHelper.Info("Settings鍑虹幇閿欒鏈煡璇㈠埌鏉哀鐨勫簱鍖猴紒", "鏉哀");
+                    return false;
                 }
-                else { result = true; }
-                return result;
+
+                switch (mst.S_TYPE)
+                {
+                    case "鎵樼洏杞繍":
+                        return HandlePalletTransport(mst, reservoirs);
+                    case "鎵樼洏鍏ュ簱":
+                        return HandlePalletStorage(mst, reservoirs);
+                    case "鍚堟墭鍥炲簱":
+                        return HandleMergeReturn(mst, reservoirs);
+                    case "鍒嗘嫞鍥炲簱":
+                        return HandleMergeReturn(mst, reservoirs);
+                    case "鏂欑鍑哄簱":
+                        return HandleBoxOutbound(mst, reservoirs);
+                    case "鍙戣揣鏆傚瓨":
+                        return PreShipmentStage(mst);
+                    case "鍙戣揣娓呮礂":
+                        return PreShipmentStage(mst);
+                    case "鍙戣揣瑁呴厤":
+                        return PreShipmentStage(mst);
+                    default:
+                        return true;
+                }
             }
             catch (Exception ex)
             {
-                var st = new System.Diagnostics.StackTrace(ex, true);
-                var frame = st.GetFrame(0); // 鑾峰彇绗竴涓爢鏍堝抚
-                if (frame != null)
+                LogErrorDetails(ex);
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// 鎵樼洏杞繍
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="reservoirs"></param>
+        /// <returns></returns>
+        private static bool HandlePalletTransport(WMSTask mst, List<ReservoirArea> reservoirs)
+        {
+            var res = true;
+            var lxArea = reservoirs.FirstOrDefault(s => s.areaName == "鏂欑鍏ュ簱缂撳瓨浣�);
+            if (lxArea != null)
+            {
+                var lxLocations = LocationHelper.GetLocAreaList(lxArea.areaCode);
+                if (lxLocations.Any())
                 {
-                    LogHelper.Error($"CreateInTask鑾峰彇浣滀笟鍒涘缓鍏ュ簱浠诲姟鍑虹幇閿欒锛侊紒", ex);
-                    LogHelper.Error($"鏂囦欢鍚� {frame.GetFileName()}", ex);
-                    LogHelper.Error($"琛屽彿: {frame.GetFileLineNumber()}", ex);
-                    LogHelper.Error($"鍒楀彿: {frame.GetFileColumnNumber()}", ex);
+                    res = TaskProcess.HYCreateTransport(mst.S_START_LOC, lxLocations.FirstOrDefault().S_CODE, "鏂欑缂撳瓨浣嶅叆搴�, mst.S_CNTR_CODE, mst.S_CODE);
+                    if (!res)
+                    {
+                        LogHelper.Info("鏂欑缂撳瓨浣嶅叆搴撲换鍔″垱寤哄け璐ワ紒", "鏉哀");
+                        return false;
+                    }
+                    WMSHelper.UpdateStatus(mst, 1);
                 }
+            }
+
+            var rkArea = reservoirs.FirstOrDefault(s => s.areaName == "鍏ュ簱缂撳瓨鍖�);
+            if (rkArea == null) return false;
+
+            var rkLocations = LocationHelper.GetLocAreaList(rkArea.areaCode);
+            if (!rkLocations.Any())
+            {
+                LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
                 return false;
             }
 
+            res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkLocations.FirstOrDefault().S_CODE, "鏂欑鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+            if (!res)
+            {
+                LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                return false;
+            }
+            WMSHelper.UpdateStatus(mst, 1);
+            //鏍囪涓哄悎鎵�+            ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "鏂欑鍚堟墭");
+            return true;
         }
+
+        /// <summary>
+        /// 鎵樼洏鍏ュ簱
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="reservoirs"></param>
+        /// <returns></returns>
+        private static bool HandlePalletStorage(WMSTask mst, List<ReservoirArea> reservoirs)
+        {
+            var result = true;
+            var locMerge = WMSHelper.GetLocMerge(mst.S_CNTR_CODE);
+            if (locMerge != null)
+            {
+                //锛�.1锛夊鏋滄湁瑕佸悎鎵樼殑鎵樼洏灏卞幓鍒ゆ柇涓�笅鍚堟墭宸ヤ綅鏄惁涓虹┖
+                var anyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍚堟墭鍖�).FirstOrDefault().areaCode);
+                if (anyLoc.Any())
+                {
+                    foreach (var item in anyLoc)
+                    {
+                        //鐢熸垚涓�潯鍑哄簱鐨勪换鍔�+                        var relevancys = Settings.Relevancys.Where(s => s.InLoc == item.S_CODE).FirstOrDefault();
+                        if (relevancys == null)
+                        {
+                            LogHelper.Info($"Settings鏈煡璇㈠埌鍚堟墭鍏ュ簱浣峽item.S_CODE}瀵瑰簲鐨勫嚭搴撲綅锛�, "鏉哀");
+                            continue;
+                        }
+                        //鐢熸垚鍒板悎鎵樺尯鐨勪换鍔�+                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, item.S_CODE, "鐮佺洏鍚堟墭鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+                        if (!res)
+                        {
+                            LogHelper.Info("鐮佺洏鍚堟墭鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                            return false;
+                        }
+                        res = TaskProcess.HYCreateTransport(locMerge.S_LOC_CODE, relevancys.OutLoc, "鐮佺洏鍚堟墭鍑哄簱", locMerge.S_CNTR_CODE, mst.S_CODE);
+                        if (!res)
+                        {
+                            LogHelper.Info("鐮佺洏鍚堟墭鍑哄簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                            return false;
+                        }
+                        //锛�.2锛夊鏋滃悎鎵樺伐浣嶄负绌哄氨鐩存帴鍚堟墭鍒板悎鎵樺伐浣嶉噷闈紝鍚屾椂鐢熸垚涓�釜鍑哄簱浠诲姟鎶婅鍚堟墭鐨勬墭鐩樺嚭鍑烘潵锛堟爣璁颁负瑕佸悎鎵橈級
+                        ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "鍚堟墭");
+                        WMSHelper.UpdateStatus(mst, 1);
+                        break;
+                    }
+                }
+                else
+                {
+                    //锛�.3锛夊鏋滃悎鎵樺伐浣嶄笉涓虹┖灏卞幓鍏ュ簱缂撳瓨鍖猴紙鏍囪涓鸿鍚堟墭锛�+                    //鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔�+                    var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
+                    if (rkAnyLoc.Any())
+                    {
+                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+                        if (!res)
+                        {
+                            LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                            return false;
+                        }
+                        WMSHelper.UpdateStatus(mst, 1);
+                        //鏍囪涓哄悎鎵�+                        ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "鍚堟墭");
+                    }
+                    else
+                    {
+                        LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
+                        return false;
+                    }
+                }
+
+            }
+            else
+            {
+                //2.濡傛灉娌℃湁瑕佸悎鎵樼殑鎵樼洏
+                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
+                {
+                    //(2.2)濡傛灉鍏ュ簱鎺ラ┏浣嶄笉涓虹┖锛屽垯鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔★紙鏍囪涓轰笉鍚堟墭锛�+                    //鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔�+                    var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
+                    if (rkAnyLoc.Any())
+                    {
+                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+                        if (!res)
+                        {
+                            LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                            return false;
+                        }
+                        WMSHelper.UpdateStatus(mst, 1);
+                        //鏍囪涓轰笉鍚堟墭
+                        ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "涓嶅悎鎵�);
+                    }
+                    else
+                    {
+                        LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
+                        return false;
+                    }
+
+                }
+
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 鍚堟墭鍥炲簱 || 鍒嗘嫞鍥炲簱
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="reservoirs"></param>
+        /// <returns></returns>
+        private static bool HandleMergeReturn(WMSTask mst, List<ReservoirArea> reservoirs)
+        {
+            var trayLst = ContainerHelper.GetCntrItemRel(mst.S_CNTR_CODE);
+            if (trayLst.Any())
+            {
+                //婊℃墭鍥炲簱
+                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
+                {
+                    //(2.2)濡傛灉鍏ュ簱鎺ラ┏浣嶄笉涓虹┖锛屽垯鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔★紙鏍囪涓轰笉鍚堟墭锛�+                    //鐢熸垚鍒板叆搴撶紦瀛樺尯鐨勪换鍔�+                    var rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
+                    if (rkAnyLoc.Any())
+                    {
+                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+                        if (!res)
+                        {
+                            LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                            return false;
+                        }
+                        WMSHelper.UpdateStatus(mst, 1);
+                        //鏍囪涓轰笉鍚堟墭
+                        ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "涓嶅悎鎵�);
+                    }
+                    else
+                    {
+                        LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
+                        return false;
+                    }
+
+                }
+            }
+            else
+            {
+                //绌烘墭鍥炲簱
+                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 rkAnyLoc = LocationHelper.GetLocAreaList(reservoirs.Where(s => s.areaName == "鍏ュ簱缂撳瓨鍖�).FirstOrDefault().areaCode);
+                    if (rkAnyLoc.Any())
+                    {
+                        var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, rkAnyLoc.FirstOrDefault().S_CODE, "鐮佺洏缂撳瓨鍏ュ簱", mst.S_CNTR_CODE, mst.S_CODE);
+                        if (!res)
+                        {
+                            LogHelper.Info("鐮佺洏缂撳瓨鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                            return false;
+                        }
+                        //鏍囪涓轰笉鍚堟墭
+                        ContainerHelper.UpdateCntrAbouts(mst.S_CNTR_CODE, "涓嶅悎鎵�);
+                        WMSHelper.UpdateStatus(mst, 1);
+
+                    }
+                    else
+                    {
+                        LogHelper.Info("鍏ュ簱缂撳瓨鍖烘病鏈夌┖璐т綅锛�, "鏉哀");
+                        return false;
+                    }
+                }
+            }
+            return true;
+        }
+
+        /// <summary>
+        /// 鏂欑鍑哄簱
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="reservoirs"></param>
+        /// <returns></returns>
+        private static bool HandleBoxOutbound(WMSTask mst, List<ReservoirArea> reservoirs)
+        {
+            var result = true;
+            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
+            {
+                LogHelper.Info("鏂欑鐮佺洏鍖烘湭鏈夊彲鐢ㄨ揣浣嶏紒", "鏉哀");
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 鍙戣揣鏆傚瓨 || 鍙戣揣娓呮礂 || 鍙戣揣瑁呴厤 (鏆傛椂浣跨敤涓�釜鏂规硶澶勭悊)
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <returns></returns>
+        private static bool PreShipmentStage(WMSTask mst)
+        {
+            var locList = LocationHelper.GetLocAreaList(mst.S_END_AREA);
+            if (locList.Any())
+            {
+                var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, locList.FirstOrDefault().S_CODE, mst.S_TYPE, mst.S_CNTR_CODE, mst.S_CODE);
+                if (!res)
+                {
+                    LogHelper.Info($"{mst.S_TYPE}鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
+                    return false;
+                }
+                WMSHelper.UpdateStatus(mst, 1);
+            }
+            return true;
+        }
+
+        /// <summary>
+        /// 鍙戣揣娓呮礂
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <returns></returns>
+        private static bool OutboundCleaning(WMSTask mst)
+        {
+            return true;
+        }
+
+        /// <summary>
+        /// 鍙戣揣瑁呴厤
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <returns></returns>
+        private static bool OutboundAssembly(WMSTask mst)
+        {
+            return true;
+        }
+        #endregion
+
+        #region 鎵ц浣滀笟
+
+        /// <summary>
+        /// 鑾峰彇鎵ц鐨勪綔涓氬垱寤轰换鍔�+        /// </summary>
+        /// <param name="mst"></param>
+        /// <returns></returns>
+        internal static bool exeCreateInTask(WMSTask mst)
+        {
+            try
+            {
+                if (mst.S_B_STATE.Trim() != "鎵ц") return true;
+                if (string.IsNullOrEmpty(mst.S_START_LOC)) return false;
+
+                var reservoirs = Settings.ReservoirAreas?.ToList();
+                if (reservoirs == null || !reservoirs.Any())
+                {
+                    LogHelper.Info("Settings鍑虹幇閿欒鏈煡璇㈠埌鏉哀鐨勫簱鍖猴紒", "鏉哀");
+                    return false;
+                }
+
+                switch (mst.S_TYPE)
+                {
+                    case "閰嶇洏鍑哄簱":
+                        return PalletOutbound(mst);
+                    default:
+                        return true;
+                }
+            }
+            catch (Exception ex)
+            {
+                LogErrorDetails(ex);
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// 閰嶇洏鍑哄簱
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="reservoirs"></param>
+        /// <returns></returns>
+        private static bool PalletOutbound(WMSTask mst)
+        {
+            var relevancys = Settings.OutRelevancys.Where(s => s.conLoc == mst.S_END_LOC).FirstOrDefault();
+            if (relevancys == null)
+            {
+                LogHelper.Info($"Settings鏈煡璇㈠埌闆嗚揣浣峽mst.S_END_LOC}瀵瑰簲鐨勫垎鎷d綅锛�, "鏉哀");
+                return false;
+            }
+            var locList = LocationHelper.GetLocListEmptyFree(relevancys.sorLoc.ToList());
+            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)
+                {
+                    LogHelper.Info($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�);
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        #endregion
+
+
+
+
+        /// <summary>
+        /// 閿欒鏃ュ織璁板綍
+        /// </summary>
+        /// <param name="ex">閿欒淇℃伅</param>
+        private static void LogErrorDetails(Exception ex)
+        {
+            var st = new System.Diagnostics.StackTrace(ex, true);
+            var frame = st.GetFrame(0);
+            if (frame == null) return;
+
+            var errorDetails = new StringBuilder()
+                .AppendLine($"閿欒淇℃伅: {ex.Message}")
+                .AppendLine($"鏂囦欢鍚� {frame.GetFileName()}")
+                .AppendLine($"琛屽彿: {frame.GetFileLineNumber()}")
+                .AppendLine($"鍒楀彿: {frame.GetFileColumnNumber()}")
+                .ToString();
+
+            LogHelper.Error("CreateInTask鑾峰彇浣滀笟鍒涘缓鍏ュ簱浠诲姟鍑虹幇閿欒锛� + errorDetails, ex);
+        }
+
+
+
+
 
         /// <summary>
         /// 寰幆鍏ュ簱缂撳瓨鍖烘煡璇㈠悎鎵樺伐浣嶅拰鍏ュ簱鎺ラ┏浣嶆槸鍚︽湁绌鸿揣浣嶏紙鍒涘缓浠诲姟锛�@@ -950,7 +1459,7 @@
                             {
                                 return false;
                             }
-                           
+
                             //鐢熸垚涓�潯鍑哄簱鐨勪换鍔�                             var relevancys = Settings.Relevancys.Where(s => s.InLoc == anyLoc.FirstOrDefault().S_CODE).FirstOrDefault();
                             if (relevancys == null)
@@ -979,7 +1488,7 @@
                         return false;
                     }
                 }
-                
+
                 //涓嶅悎鎵橀�杈�                 var noCntrAbouts = ContainerHelper.GetCntrAbouts(rkAnyLoc.areaCode, "涓嶅悎鎵�).FirstOrDefault();
                 if (noCntrAbouts != null)
@@ -999,7 +1508,7 @@
                             }
                             //2.2濡傛灉鍏ュ簱鎺ラ┏浣嶄负绌哄垱寤虹爜鐩樻帴椹冲叆搴撶殑浠诲姟
                             //鐢熸垚鍒版帴椹充綅鐨勪换鍔�-                            res = TaskProcess.HYCreateTransport(noCntrAbouts.S_LOC_CODE, anyLoc.FirstOrDefault().S_CODE, "鐮佺洏鎺ラ┏鍏ュ簱", noCntrAbouts.S_CNTR_CODE,list.S_CODE);
+                            res = TaskProcess.HYCreateTransport(noCntrAbouts.S_LOC_CODE, anyLoc.FirstOrDefault().S_CODE, "鐮佺洏鎺ラ┏鍏ュ簱", noCntrAbouts.S_CNTR_CODE, list.S_CODE);
                             if (!res)
                             {
                                 LogHelper.Info("鐮佺洏鎺ラ┏鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
@@ -1120,7 +1629,7 @@
                     WMSHelper.UpdateTaskStatus(list.S_CODE, 1);
                     ContainerHelper.UpdateCntrAbouts(list.S_CNTR_CODE, "");
                 }
-                
+
 
                 result.success = true;
                 return result;
@@ -1152,7 +1661,7 @@
             try
             {
                 // 鍒涘缓璋冨害鍣�-                var scheduler =  new DoubleDeepOutboundScheduler(distributionCntr);
+                var scheduler = new DoubleDeepOutboundScheduler(distributionCntr);
 
                 var listOut = new List<Outbound>();
                 foreach (var item in distributionCntr)
@@ -1169,15 +1678,81 @@
                 }
                 // 璇锋眰鍑哄簱
                 var tasks = scheduler.GenerateOutboundTasks(listOut);
+
                 foreach (var item in tasks)
                 {
-                    // 鍒涘缓鍑哄簱浠诲姟
-                    var res = TaskProcess.HYCreateTransport(item.S_START_LOC, item.S_END_LOC, item.S_TYPE, item.S_CNTR_CODE, item.S_OP_CODE);
-                    UpdateDistributionCntrState("浣滀笟涓�, item.S_CNTR_CODE);
-                    if (!res)
+                    var wmsTask = new WMSTask();
+                    if (string.IsNullOrEmpty(item.S_OP_CODE))
                     {
-                        LogHelper.Info($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�);
-                        return false;
+                        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;
+                        }
+                    }
+
+                    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;
@@ -1188,7 +1763,7 @@
                 var frame = st.GetFrame(0); // 鑾峰彇绗竴涓爢鏍堝抚
                 if (frame != null)
                 {
-                    LogHelper.Error($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔★紒锛�, ex);
+                    LogHelper.Error($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″け璐ex.Message}锛侊紒", ex);
                     LogHelper.Error($"鏂囦欢鍚� {frame.GetFileName()}", ex);
                     LogHelper.Error($"琛屽彿: {frame.GetFileLineNumber()}", ex);
                     LogHelper.Error($"鍒楀彿: {frame.GetFileColumnNumber()}", ex);

--
Gitblit v1.9.1