From f398a14e78be869dbe96746bada7be3fc2b0b223 Mon Sep 17 00:00:00 2001
From: pengmn <pmn@HanInfo>
Date: 星期一, 23 六月 2025 17:47:24 +0800
Subject: [PATCH] 杭氧

---
 HH.WCS.Mobox3.HangYang/process/TaskProcess.cs | 1761 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 1,355 insertions(+), 406 deletions(-)

diff --git a/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs b/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs
index 294b195..1ef67ec 100644
--- a/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3.HangYang/process/TaskProcess.cs
@@ -12,12 +12,15 @@
 using Swashbuckle.Swagger;
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 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 +48,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 +87,7 @@
         internal static bool Intercept(WCSTask mst)
         {
             var result = false;
-           
+
             return result;
         }
 
@@ -371,9 +374,9 @@
         }
 
         /// <summary>
-        /// 鍏ュ簱鍗曟柊澧�+        /// 鏉哀鐗╂枡涓绘暟鎹柊澧炴帴鍙�         /// </summary>
-        /// <param name="model">鍏ュ簱鍗�/param>
+        /// <param name="model">鐗╂枡涓绘暟鎹�/param>
         /// <returns></returns>
         public static Result GetMaterialData(List<MES_Material> model)
         {
@@ -382,44 +385,25 @@
             {
                 if (model == null)
                 {
-                    result.errMsg = "鍏ュ簱鍗曚笉鍙负绌哄�锛�;
+                    result.errMsg = "鐗╂枡涓绘暟鎹笉鍙负绌哄�锛�;
                     return result;
                 }
+                var materialList = new List<TN_Material>();
 
-                //foreach (var item in model.InOrderDetail)
-                //{
-                //    var itemType = WMSHelper.GetItemType(item.S_ITEM_CODE);
-                //    if (itemType == null)
-                //    {
-                //        result.errMsg = $"鏈煡璇㈠埌鐗╂枡{item.S_ITEM_CODE}鐨勭墿鏂欏睘鎬э紒";
-                //        return result;
-                //    }
-                //    item.S_EXT_ATTR1 = itemType.S_ITEM_TYPE;
-                //}
-
-                //var groupedInOrders = model.InOrderDetail
-                //                      .GroupBy(detail => detail.S_EXT_ATTR1) // 鎸夌墿鏂欏睘鎬у垎缁�-                //                      .Select((group, index) => new InOrder
-                //                      {
-                //                          S_NO = $"{model.S_BS_NO}_{index + 1}", // 鎷兼帴鏉ユ簮鍗曞彿
-                //                          S_BS_NO = model.S_BS_NO,
-                //                          S_OP_TYPE = model.S_OP_TYPE,
-                //                          S_BS_TYPE = model.S_BS_TYPE,
-                //                          S_NOTE = model.S_NOTE,
-                //                          InOrderDetail = group.Select(detail =>
-                //                          {
-                //                              // 淇敼 group 涓殑 S_IO_NO 瀛楁涓�S_NO 鐨勫�
-                //                              detail.S_IO_NO = $"{model.S_BS_NO}_{index + 1}";
-                //                              detail.S_BS_NO = model.S_BS_NO;
-                //                              return detail;
-                //                          }).ToList() // 鍒嗙粍鍚庣殑鏄庣粏
-                //                      })
-                //                      .ToList();
-                //var res = WMSHelper.CreateOrderIn(groupedInOrders);
-                //if (res)
-                //{
-                //    result.success = true;
-                //}
+                foreach (var item in model)
+                {
+                    materialList.Add(new TN_Material
+                    {
+                        S_ITEM_CODE = item.S_ITEM_CODE,
+                        S_ITEM_NAME = item.S_ITEM_NAME,
+                        S_ITEM_TYPE = item.S_AREA_CODE,
+                        S_ITEM_SPEC = item.S_MATERIAL_SPEC,
+                        S_MATERIAL = item.S_MATERIAL,
+                        S_UOM = item.S_UOM,
+                        C_CLEAN = item.C_CLEAN,
+                    });
+                }
+                WMSHelper.CreateMaterialData(materialList);
                 return result;
             }
             catch (Exception ex)
@@ -430,7 +414,7 @@
                 var frame = st.GetFrame(0); // 鑾峰彇绗竴涓爢鏍堝抚
                 if (frame != null)
                 {
-                    LogHelper.Error($"GetInboundOrder鍏ュ簱鍗曟柊澧炲嚭鐜伴敊璇紒锛�, ex);
+                    LogHelper.Error($"GetMaterialData鐗╂枡涓绘暟鎹柊澧炲嚭鐜伴敊璇紒锛�, ex);
                     LogHelper.Error($"鏂囦欢鍚� {frame.GetFileName()}", ex);
                     LogHelper.Error($"琛屽彿: {frame.GetFileLineNumber()}", ex);
                     LogHelper.Error($"鍒楀彿: {frame.GetFileColumnNumber()}", ex);
@@ -441,7 +425,7 @@
         }
 
         /// <summary>
-        /// 鍏ュ簱鍗曟柊澧�+        /// 鍏ュ簱鍗曟柊澧炰互鍙婁慨鏀�         /// </summary>
         /// <param name="model">鍏ュ簱鍗�/param>
         /// <returns></returns>
@@ -515,13 +499,13 @@
         }
 
         /// <summary>
-        /// 鍑哄簱鍗曟柊澧�+        /// 鍑哄簱鍗曟柊澧炰互鍙婁慨鏀�         /// </summary>
-        /// <param name="model">鍏ュ簱鍗�/param>
+        /// <param name="model">鍑哄簱鍗�/param>
         /// <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 +514,7 @@
                     return result;
                 }
 
+                // 绗竴姝ワ細璁剧疆鐗╂枡灞炴�淇℃伅
                 foreach (var item in model.OutOrderDetail)
                 {
                     var itemType = WMSHelper.GetItemType(item.S_ITEM_CODE);
@@ -539,31 +524,79 @@
                         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;
+                }
+                return result;
+            }
+            catch (Exception ex)
+            {
+                result.success = false;
+                result.errMsg = ex.Message;
+                var st = new System.Diagnostics.StackTrace(ex, true);
+                var frame = st.GetFrame(0);
+                if (frame != null)
+                {
+                    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="model">鍏ュ簱鍗�/param>
+        /// <returns></returns>
+        public static Result CancelInboundOrder(InOrder model)
+        {
+            Result result = new Result() { success = false, };
+            try
+            {
+                if (model == null || !model.OrderDetail.Any())
+                {
+                    result.errMsg = "鍏ュ簱鍗曞彇娑堜笉鍙负绌哄�锛�;
+                    return result;
+                }
+                var res = WMSHelper.CancelOrderIn(model);
                 if (res)
                 {
                     result.success = true;
@@ -578,329 +611,1088 @@
                 var frame = st.GetFrame(0); // 鑾峰彇绗竴涓爢鏍堝抚
                 if (frame != null)
                 {
-                    LogHelper.Error($"GetInboundOrder鍏ュ簱鍗曟柊澧炲嚭鐜伴敊璇紒锛�, ex);
+                    LogHelper.Error($"CancelInboundOrder鍏ュ簱鍗曞彇娑堝嚭鐜伴敊璇紒锛�, ex);
                     LogHelper.Error($"鏂囦欢鍚� {frame.GetFileName()}", ex);
                     LogHelper.Error($"琛屽彿: {frame.GetFileLineNumber()}", ex);
                     LogHelper.Error($"鍒楀彿: {frame.GetFileColumnNumber()}", ex);
                 }
                 return result;
             }
-
         }
+
+        /// <summary>
+        /// 鍑哄簱鍗曞彇娑�+        /// </summary>
+        /// <param name="model">鍑哄簱鍗�/param>
+        /// <returns></returns>
+        public static Result CancelOutboundOrder(OutOrder model)
+        {
+            Result result = new Result() { success = false };
+            try
+            {
+                if (model == null || !model.OrderDetail.Any())
+                {
+                    result.errMsg = "鍑哄簱鍗曚笉鍙负绌哄�锛�;
+                    return result;
+                }
+                var res = WMSHelper.CancelOrderOut(model);
+                if (res)
+                {
+                    result.success = true;
+                }
+                return result;
+            }
+            catch (Exception ex)
+            {
+                result.success = false;
+                result.errMsg = ex.Message;
+                var st = new System.Diagnostics.StackTrace(ex, true);
+                var frame = st.GetFrame(0);
+                if (frame != null)
+                {
+                    LogHelper.Error($"CancelOutboundOrder鍑哄簱鍗曞彇娑堝嚭鐜伴敊璇紒", 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>
         /// 鑾峰彇浣滀笟鍒涘缓鍏ュ簱浠诲姟
         /// </summary>
         /// <param name="mst"></param>
         /// <returns></returns>
-        internal static bool CreateInTask(WMSTask mst)
+        internal static async Task<bool> CreateInTask(WMSTask mst)
         {
             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 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 "鍙戣揣鏆傚瓨":
+                        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 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>
+        /// 鏂欑鍑哄簱
+        /// </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);
+                if (startLoc != null)
+                {
+                    // 鍒涘缓鍑哄簱浠诲姟
+                    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 +1742,7 @@
                             {
                                 return false;
                             }
-                           
+
                             //鐢熸垚涓�潯鍑哄簱鐨勪换鍔�                             var relevancys = Settings.Relevancys.Where(s => s.InLoc == anyLoc.FirstOrDefault().S_CODE).FirstOrDefault();
                             if (relevancys == null)
@@ -979,7 +1771,7 @@
                         return false;
                     }
                 }
-                
+
                 //涓嶅悎鎵橀�杈�                 var noCntrAbouts = ContainerHelper.GetCntrAbouts(rkAnyLoc.areaCode, "涓嶅悎鎵�).FirstOrDefault();
                 if (noCntrAbouts != null)
@@ -999,7 +1791,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("鐮佺洏鎺ラ┏鍏ュ簱浠诲姟鍒涘缓澶辫触锛�, "鏉哀");
@@ -1086,13 +1878,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
@@ -1120,7 +1916,7 @@
                     WMSHelper.UpdateTaskStatus(list.S_CODE, 1);
                     ContainerHelper.UpdateCntrAbouts(list.S_CNTR_CODE, "");
                 }
-                
+
 
                 result.success = true;
                 return result;
@@ -1145,57 +1941,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);
-                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)
-                    {
-                        LogHelper.Info($"鏍规嵁閰嶇洏鍗曠敓鎴愬嚭搴撲换鍔″垱寤哄嚭搴撲换鍔″け璐ワ紒锛�);
-                        return false;
-                    }
-                }
-                return true;
+                // 2. 璁$畻璐т綅鐢熸垚浠诲姟鏁版嵁
+                var tasks = scheduler.GenerateOutboundTasks(outboundTasks);
+                if (!tasks.Any()) return false;
+
+                // 3. 鍒涘缓WMS浣滀笟
+                var mainTask = CreateMainWmsTask(tasks.Where(s=>s.S_TYPE == "閰嶇洏鍑哄簱").First());
+                if (!WMSHelper.CreateWmsTask(mainTask)) return false;
+
+                // 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);
-                    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