From 06a8b6963d6d4f229d4e196b4b09ce57e2cbf2dd Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期四, 24 七月 2025 17:21:40 +0800
Subject: [PATCH] 印尼佳通-GT服务开发

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs | 1261 +++++++++++++++++++++++++++++++-------------------------
 1 files changed, 699 insertions(+), 562 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
index 176e9dc..769e300 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
@@ -16,6 +16,7 @@
 using System.Reflection;
 using System.Reflection.Emit;
 using System.Threading;
+using System.Threading.Tasks;
 using static HH.WCS.Mobox3.FJJT.api.ApiModel;
 using static HH.WCS.Mobox3.FJJT.api.OtherModel;
 using static HH.WCS.Mobox3.FJJT.api.WmsController;
@@ -52,17 +53,18 @@
                 throw new BusinessException($"绌哄伐瑁呭嚭搴擄紝缁堢偣璐т綅锛歿model.endLocCode}澶勪簬閿佸畾鐘舵�");
             }
 
-            var areaCodes = Settings.getRelAreaCodes(endLoc.S_AREA_CODE);
-            if (areaCodes.Count == 0) 
+            // 鏌ヨ缂撳瓨閰嶇疆
+            var bufferLocConfig = WMSHelper.GetBufferLocConfig(model.endLocCode);
+            if (bufferLocConfig == null) 
             {
-                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴擄紝鏈厤缃簱鍖�{endLoc.S_AREA_CODE}鐨勫叧鑱斿叧绯�);
-                throw new BusinessException($"绌哄伐瑁呭嚭搴擄紝鏈厤缃簱鍖�{endLoc.S_AREA_CODE}鐨勫叧鑱斿叧绯�);
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴擄紝鏈煡璇㈠埌鐩磋繛缂撳瓨浣�{model.endLocCode}鐨勯厤缃俊鎭�);
+                throw new BusinessException($"绌哄伐瑁呭嚭搴擄紝鏈煡璇㈠埌鐩磋繛缂撳瓨浣�{model.endLocCode}鐨勯厤缃俊鎭�);
             }
 
-            Location startLoc = WMSHelper.getOutStockStartLoc(areaCodes[0], null);
+            Location startLoc = WMSHelper.getOutStockStartLoc(bufferLocConfig.S_AREA_CODE, null);
             if (startLoc == null)
             {
-                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴擄紝搴撳尯:{areaCodes[0]}鏈煡璇㈠埌绌哄伐瑁�);
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"绌哄伐瑁呭嚭搴擄紝搴撳尯:{bufferLocConfig.S_AREA_CODE}鏈煡璇㈠埌绌哄伐瑁�);
                 throw new BusinessException($"绌哄伐瑁呭嚭搴擄紝鏈煡璇㈠埌绌哄伐瑁咃紝绔嬪簱鍙兘缂哄皯绌哄伐瑁�);
             }
 
@@ -227,44 +229,53 @@
         /// <returns></returns>
         public static ResponseResult offLineProcess(OffLineRequest model) {
             ResponseResult responseResult = new ResponseResult();
-
-            // 鏌ヨ璧风偣璐т綅鏄惁瀛樺湪宸插瓨鍦ㄤ换鍔★紝闃叉浠诲姟閲嶅鍙戣捣
-            var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc);
-            if (existWmsTask == null)
+            var offLineLoc = LocationHelper.GetLoc(model.loc);
+            if (offLineLoc != null)
             {
-                // 鏌ヨ瀵瑰簲鏈哄彴鐨勭墿鏂欎笅绾块厤缃俊鎭�-                var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo);
-                if (logicConfig != null)
+                var areaCodes = Settings.areaRelevanceList.Select(a => a.areaCode).ToList();
+                var isExistCntr = LocationHelper.checkAreaExistCntr(areaCodes, model.cntrNo);
+                if (!isExistCntr)
                 {
-                    Container container = ContainerHelper.GetCntr(model.cntrNo);
-                    if (container == null || !model.isNormal)
+                    // 鏌ヨ璧风偣璐т綅鏄惁瀛樺湪宸插瓨鍦ㄤ换鍔★紝闃叉浠诲姟閲嶅鍙戣捣
+                    var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc);
+                    if (existWmsTask == null)
                     {
-                        ContainerHelper.AddCntr(model.cntrNo);
-                        ContainerHelper.UpdateCntrState(model.cntrNo, 1);
-                        WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null);
-                    }
+                        Container container = ContainerHelper.GetCntr(model.cntrNo);
+                        if (container == null || !model.isNormal)
+                        {
+                            ContainerHelper.AddCntr(model.cntrNo);
+                            ContainerHelper.UpdateCntrState(model.cntrNo, 1);
+                            WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null);
+                        }
 
-                    // 鏍规嵁鐗╂枡涓嬬嚎閰嶇疆淇℃伅锛屽垽鏂换鍔$被鍨嬫槸鐩磋繛涓嬬嚎杩樻槸闈炵洿杩炰笅绾�-                    if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2")
-                    {
-                        triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig);
+                        var areaRelevance = Settings.areaRelevanceList.Where(a => a.xxAreaCode == offLineLoc.S_AREA_CODE).First();
+                        if (areaRelevance == null)
+                        {
+                            // 婊℃枡涓嬬嚎锛堢洿杩烇級
+                            triggerItemOffLineFlow(model.loc, model.cntrNo, model.jtNo);
+                        }
+                        else
+                        {
+                            // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�+                            triggerItemOffLineFlow4(model.loc, model.cntrNo);
+                        }
                     }
                     else
                     {
-                        // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�-                        triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig);
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
+                        throw new BusinessException($"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
                     }
                 }
                 else
                 {
-                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺�璇疯仈绯荤鐞嗕汉鍛�);
-                    throw new BusinessException($"鏈哄彴鍙穥model.jtNo},娌℃湁鍙敤鐨勯�杈戠嚎璺紝璇疯仈绯荤鐞嗕汉鍛�);
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"宸ヨ锛歿model.cntrNo}宸插叆搴擄紝璇峰嬁閲嶅鍏ュ簱");
+                    throw new BusinessException($"宸ヨ锛歿model.cntrNo}宸插叆搴擄紝璇峰嬁閲嶅鍏ュ簱");
                 }
             }
             else 
             {
-                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
-                throw new BusinessException($"涓嬬嚎璐т綅锛歿model.loc}宸叉湁浠诲姟锛岃鍕块噸澶嶄笅鍙戜换鍔�);
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"涓嬬嚎璐т綅锛歿model.loc}涓嶅瓨鍦紝璇锋鏌�);
+                throw new BusinessException($"涓嬬嚎璐т綅锛歿model.loc}涓嶅瓨鍦紝璇锋鏌�);
             }
             return responseResult;
         }
@@ -278,106 +289,22 @@
         /// 4.浣滀笟鍒涘缓瀹屾垚鍚庯紝璇诲彇涓棿琛紝鏇存柊涓棿琛ㄧ姸鎬�         /// </summary>
         /// <param name="offLineLoc"></param>
-        /// <param name="logicConfig"></param>
+        /// <param name="mesTask"></param>
         /// <param name="cntrNo"></param>
         /// <returns></returns>
-        public static bool triggerItemOffLineFlow4(string offLineLoc,string cntrNo, LogicConfig logicConfig ,LjMesTask mesTask = null)
+        public static bool triggerItemOffLineFlow4(string offLineLoc,string cntrNo ,LjMesTask mesTask = null)
         {
             bool result = true;
             try
             {
-                if (mesTask == null) 
-                {
-                    mesTask = WMSHelper.getLjMesTaskByCntr(cntrNo);
-                }
-                
+                mesTask = WMSHelper.getLjMesTaskByCntr(cntrNo);
                 if (mesTask != null)
                 {
-                    // 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕侊紝鍒欏垱寤虹┖宸ヨ鍑哄簱浠诲姟
-                    bool photoStatus = false;
-                    var hcLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC);
-                    if (hcLoc != null)
-                    {
-                        if (hcLoc.N_CURRENT_NUM != 0 && hcLoc.N_LOCK_STATE == 0) 
-                        {
-                            hcLoc = LocationHelper.GetEmptyLoc(hcLoc.S_AREA_CODE);
-                        }
-
-                        if (hcLoc != null) 
-                        {
-                            var bufferLocConfig = Settings.GetBufferLocConfig(hcLoc.S_CODE);  // 缂撳瓨浣嶅叧鑱斿睘鎬�-                            if (bufferLocConfig != null || hcLoc.N_CURRENT_NUM == 0)
-                            {
-                                photoStatus = true;
-                                // 鏂规1锛屽鏋滈潪鐩磋繛鐨勭紦瀛樹綅鏈夊厜鐢典俊鍙凤紝鍒欐煡璇㈣澶囩姸鎬佸垽鏂槸鍚﹂渶瑕佽ˉ绌哄伐瑁�-                                /*   var deviceStatusDatas = WCSDispatch.getDeviceStatus(new List<string>() { bufferLocConfig.deviceNo });
-                                   if (deviceStatusDatas != null && deviceStatusDatas.Count > 0)
-                                   {
-                                       var deviceStatus = deviceStatusDatas[0];
-                                       if (deviceStatus.workStatus == 1 && deviceStatus.manualStatus == 0)
-                                       {
-                                           photoStatus = deviceStatus.photoStatus == 1;
-                                       }
-                                       else
-                                       {
-                                           WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.deviceNo},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
-                                           throw new BusinessException($"璁惧鍙�{bufferLocConfig.deviceNo},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
-                                       }
-                                   }
-                                   else
-                                   {
-                                       WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
-                                       throw new BusinessException($"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
-                                   }*/
-                            }
-                            else
-                            {
-                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁閰嶇疆灞炴�淇℃伅锛岃鑱旂郴绠$悊浜哄憳閰嶇疆");
-                                throw new BusinessException($"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁閰嶇疆灞炴�淇℃伅锛岃鑱旂郴绠$悊浜哄憳閰嶇疆");
-                            }
-                        }
-                    }
-                    else
-                    {
-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁WMS绯荤粺涓綍鍏�);
-                        throw new BusinessException($"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁WMS绯荤粺涓綍鍏�);
-                    }
-
-                    // 绌哄伐瑁呭嚭搴撳垽鏂潯浠�-                    Location kgzStartLoc = null;
-                    Location kgzEndLoc = null;
-                    string kgzCntrCode = null;
-                    if (photoStatus)
-                    {
-                        kgzStartLoc = LocationHelper.GetLoc(logicConfig.S_LKKTJBLOC);
-                        kgzEndLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC);
-                        if (kgzStartLoc == null)
-                        {
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯:{logicConfig.S_AREA_CODE},娌℃湁鍙敤鐨勭┖宸ヨ");
-                            photoStatus = false;
-                        }
-                        if (kgzEndLoc == null)
-                        {
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"绌哄伐瑁呯紦瀛樹綅:{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
-                            photoStatus = false;
-                        }
-
-                        var locCntrRels = LocationHelper.GetLocCntr(kgzStartLoc.S_CODE);
-                        if (locCntrRels.Count > 0)
-                        {
-                            kgzCntrCode = locCntrRels[0].S_CNTR_CODE;
-                        }
-                        else
-                        {
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"绌哄伐瑁呭嚭搴撶珯鍙�{logicConfig.S_LKKTJBLOC},娌℃湁绌哄伐瑁�);
-                            photoStatus = false;
-                        }
-                    }
-
-                    string cntrCode = mesTask.PALLET_ID;
                     Location startLoc = LocationHelper.GetLoc(offLineLoc);
-                    if (startLoc != null)
+                    if (startLoc != null) 
                     {
+                        string cntrCode = mesTask.PALLET_ID;
+                        var areaRelevance = Settings.areaRelevanceList.Where(a => a.xxAreaCode == startLoc.S_AREA_CODE).FirstOrDefault();
                         // 1.鍒涘缓婊℃枡涓嬬嚎浣滀笟
                         var wmsTask = new WMSTask()
                         {
@@ -394,32 +321,58 @@
                         };
                         if (WMSHelper.CreateWmsTask(wmsTask))
                         {
+                            bool photoStatus = false;
                             int priority = 10;
-                            // 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕佸垯鍒涘缓绌哄伐瑁呰ˉ缂撳瓨浣嶄换鍔�-                            if (photoStatus)
+                            // 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕侊紝鍒欏垱寤虹┖宸ヨ鍑哄簱浠诲姟
+                            var bufferLoc = WMSHelper.getEmptyBufferLoc(areaRelevance.hcAreaCode);
+                            if (bufferLoc != null)
                             {
-                                WCSTask kgzWcsTask = new WCSTask()
+                                var fixedOutLoc = WMSHelper.GetFullFixedOutLoc(areaRelevance.jbAreaCode);
+                                if (fixedOutLoc != null)
                                 {
-                                    S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                                    S_OP_CODE = wmsTask.S_CODE,
-                                    S_CODE = WCSHelper.GenerateTaskNo(),
-                                    S_CNTR_CODE = kgzCntrCode,
-                                    S_TYPE = "绌哄伐瑁呭嚭搴撲换鍔�,
-                                    S_START_LOC = kgzStartLoc.S_CODE,
-                                    S_START_AREA = kgzStartLoc.S_AREA_CODE,
-                                    S_END_LOC = kgzEndLoc.S_CODE,
-                                    S_END_AREA = kgzEndLoc.S_AREA_CODE,
-                                    S_SCHEDULE_TYPE = "AGV",
-                                    N_PRIORITY = priority,
-                                    T_START_TIME = DateTime.Now,
-                                };
+                                    // 绌哄伐瑁呭嚭搴撳垽鏂潯浠�+                                    string kgzCntrCode = null;
+                                    var locCntrRels = LocationHelper.GetLocCntr(fixedOutLoc.S_CODE);
+                                    if (locCntrRels.Count > 0)
+                                    {
+                                        kgzCntrCode = locCntrRels[0].S_CNTR_CODE;
+                                        WCSTask kgzWcsTask = new WCSTask()
+                                        {
+                                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                            S_OP_CODE = wmsTask.S_CODE,
+                                            S_CODE = WCSHelper.GenerateTaskNo(),
+                                            S_CNTR_CODE = kgzCntrCode,
+                                            S_TYPE = "绌哄伐瑁呭嚭搴撲换鍔�,
+                                            S_START_LOC = fixedOutLoc.S_CODE,
+                                            S_START_AREA = fixedOutLoc.S_AREA_CODE,
+                                            S_END_LOC = bufferLoc.S_CODE,
+                                            S_END_AREA = bufferLoc.S_AREA_CODE,
+                                            S_SCHEDULE_TYPE = "AGV",
+                                            N_PRIORITY = priority,
+                                            T_START_TIME = DateTime.Now,
+                                        };
 
-                                if (WCSHelper.CreateTask(kgzWcsTask))
-                                {
-                                    // 璧风偣銆佺粓鐐瑰姞閿�-                                    LocationHelper.LockLoc(kgzWcsTask.S_START_LOC, 2);
-                                    LocationHelper.LockLoc(kgzWcsTask.S_END_LOC, 1);
+                                        if (WCSHelper.CreateTask(kgzWcsTask))
+                                        {
+                                            // 璧风偣銆佺粓鐐瑰姞閿�+                                            LocationHelper.LockLoc(kgzWcsTask.S_START_LOC, 2);
+                                            LocationHelper.LockLoc(kgzWcsTask.S_END_LOC, 1);
+                                        }
+                                        photoStatus = true;
+                                    }
+                                    else
+                                    {
+                                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏌ヨ鍥哄畾绌哄伐瑁呭嚭搴撶珯鍙伴敊璇紝璇峰紑鍙戞帓鏌�);
+                                    }
                                 }
+                                else
+                                {
+                                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鎺ラ┏搴撳尯锛歿areaRelevance.jbAreaCode}鐨勫浐瀹氱┖宸ヨ绔欏彴娌℃湁绌哄伐瑁�);
+                                }
+                            }
+                            else
+                            {
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"缂撳瓨搴撳尯锛歿areaRelevance.hcAreaCode}娌℃湁绌鸿揣浣�);
                             }
 
                             // 3.鍒涘缓婊℃枡宸ヨ鍏ュ簱浠诲姟锛堝闇�琛ョ┖宸ヨ锛屽垯灏嗕换鍔$姸鎬佹敼涓洪鍒涘缓锛岀瓑寰呰ˉ绌哄伐瑁呬换鍔″畬鎴愬悗瑙﹀彂锛�@@ -460,11 +413,6 @@
                             }
                         }
                     }
-                    else
-                    {
-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
-                        throw new BusinessException($"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
-                    }
                 }
                 else
                 {
@@ -495,194 +443,147 @@
         /// </summary>
         /// <param name="offLineLoc">涓嬬嚎璐т綅</param>
         /// <param name="cntrNo">涓嬬嚎瀹瑰櫒缂栫爜</param>
-        /// <param name="logicConfig">閫昏緫閰嶇疆</param>
+        /// <param name="jtNo">鏈哄彴鍙�/param>
         /// <returns></returns>
-        public static bool triggerItemOffLineFlow(string offLineLoc, string cntrNo, LogicConfig logicConfig ) {
+        public static bool triggerItemOffLineFlow(string offLineLoc, string cntrNo ,string jtNo) {
             bool result = true;
             try
             {
-                // 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕侊紝鍒欏垱寤虹┖宸ヨ鍑哄簱浠诲姟
-                bool photoStatus = false;
-                var hcLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC);
-                if (hcLoc != null)
+                var startLoc = LocationHelper.GetLoc(offLineLoc);
+                if (startLoc != null)
                 {
-                    var bufferLocConfig = Settings.GetBufferLocConfig(hcLoc.S_CODE);
-                    if (bufferLocConfig != null)
+                    var areaRelevance = Settings.areaRelevanceList.Where(a => a.xxAreaCode == startLoc.S_AREA_CODE).FirstOrDefault();
+                    if (areaRelevance != null)
                     {
-                        // 娴嬭瘯浠g爜
-                        photoStatus = true;
-
-                       /* // 涓氬姟浠g爜锛屽嬁鍒�-                        var deviceStatusDatas = WCSDispatch.getDeviceStatus(new List<string>() { bufferLocConfig.deviceNo });
-                        if (deviceStatusDatas != null && deviceStatusDatas.Count > 0)
+                        Location endLoc = WMSHelper.getInStockEndLoc(areaRelevance.areaCode, 1);
+                        if (endLoc != null)
                         {
-                            var deviceStatus = deviceStatusDatas[0];
-                            if (deviceStatus.workStatus == 1 && deviceStatus.manualStatus == 0)
+                            LjMesTask mesTask = WMSHelper.getLjMesTaskByCntr(cntrNo);
+                            // 1.鍒涘缓婊℃枡涓嬬嚎浣滀笟
+                            var wmsTask = new WMSTask()
                             {
-                                photoStatus = deviceStatus.photoStatus == 1;
-                            }
-                            else
-                            {
-                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.deviceNo},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
-                                throw new BusinessException($"璁惧鍙�{bufferLocConfig.deviceNo},璁惧褰撳墠澶勪簬涓嶅彲鐢ㄧ姸鎬侊紝璇疯仈绯荤鐞嗕汉鍛樿皟鏁磋澶囩姸鎬�);
-                            }
-                        }
-                        else
-                        {
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
-                            throw new BusinessException($"璁惧鍙�{bufferLocConfig.deviceNo},鏌ヨ璁惧鐘舵�澶辫触锛岃鑱旂郴宸ヤ綔浜哄憳鏌ョ湅璁惧鏄惁姝e父");
-                        }*/
-                    }
-                    else
-                    {
-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁閰嶇疆灞炴�淇℃伅锛岃鑱旂郴绠$悊浜哄憳閰嶇疆");
-                        throw new BusinessException($"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁閰嶇疆灞炴�淇℃伅锛岃鑱旂郴绠$悊浜哄憳閰嶇疆");
-                    }
-                }
-                else
-                {
-                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
-                    throw new BusinessException($"缂撳瓨浣�{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
-                }
-
-                Location startLoc = LocationHelper.GetLoc(offLineLoc);
-                if (startLoc == null)
-                {
-                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
-                    throw new BusinessException($"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
-                }
-
-                Location endLoc = WMSHelper.getInStockEndLoc(logicConfig.S_AREA_CODE, 1);
-                if (endLoc == null)
-                {
-                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳唴娌℃湁绌轰綑璐т綅");
-                    throw new BusinessException($"搴撳唴娌℃湁绌轰綑璐т綅");
-                }
-
-                LjMesTask mesTask = WMSHelper.getLjMesTaskByCntr(cntrNo);
-                // 1.鍒涘缓婊℃枡涓嬬嚎浣滀笟
-                var wmsTask = new WMSTask()
-                {
-                    S_CNTR_CODE = cntrNo,
-                    S_CODE = WMSHelper.GenerateTaskNo(),
-                    S_START_LOC = startLoc.S_CODE,
-                    S_START_AREA = startLoc.S_AREA_CODE,
-                    S_END_LOC = endLoc.S_CODE,
-                    S_END_AREA = endLoc.S_AREA_CODE,
-                    S_TYPE = "婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟(鐩磋繛)",
-                    S_OP_DEF_NAME = "婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟(鐩磋繛)",
-                    S_OP_DEF_CODE = mesTask != null ? mesTask.ID.ToString() : null,
-                    T_START_TIME = DateTime.Now,
-                };
-                if (WMSHelper.CreateWmsTask(wmsTask))
-                {
-                    int priority = 10;
-                    Dictionary<int, WCSTask> taskDic = new Dictionary<int, WCSTask>();
-
-                    // 鏄惁鍒涘缓绌哄伐瑁呭嚭鍙d换鍔�-                    if (photoStatus || true )
-                    {
-                        Location kgzStartLoc = WMSHelper.getOutStockStartLoc(logicConfig.S_AREA_CODE, null);
-                        Location kgzEndLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC);
-                        if (kgzStartLoc == null)
-                        {
-                            WMSHelper.DeleteWmsTask(wmsTask.S_CODE);
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯:{logicConfig.S_AREA_CODE},娌℃湁鍙敤鐨勭┖宸ヨ");
-                            throw new BusinessException($"搴撳尯:{logicConfig.S_AREA_CODE},娌℃湁鍙敤鐨勭┖宸ヨ");
-                        }
-                        if (kgzEndLoc == null)
-                        {
-                            WMSHelper.DeleteWmsTask(wmsTask.S_CODE);
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"绌哄伐瑁呯紦瀛樹綅:{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
-                            throw new BusinessException($"绌哄伐瑁呯紦瀛樹綅:{logicConfig.S_LKBKHCLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
-                        }
-
-                        var locCntrRels = LocationHelper.GetLocCntr(kgzStartLoc.S_CODE);
-                        if (locCntrRels.Count > 0)
-                        {
-                            string kgzCntrCode = locCntrRels[0].S_CNTR_CODE;
-                            // 濡傛槸鑳庝晶鐩磋繛妯″紡锛屽垯鎻愰珮绌哄伐瑁呭嚭搴撲换鍔′紭鍏堢骇
-                            if (logicConfig.S_TASK_TYPE == "1")
-                            {
-                                priority = 99;
-                            }
-                            WCSTask kgzWcsTask = new WCSTask()
-                            {
-                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                                S_OP_CODE = wmsTask.S_CODE,
-                                S_CODE = WCSHelper.GenerateTaskNo(),
-                                S_CNTR_CODE = kgzCntrCode,
-                                S_TYPE = "绌哄伐瑁呭嚭搴撲换鍔�,
-                                S_START_LOC = kgzStartLoc.S_CODE,
-                                S_START_AREA = kgzStartLoc.S_AREA_CODE,
-                                S_END_LOC = kgzEndLoc.S_CODE,
-                                S_END_AREA = kgzEndLoc.S_AREA_CODE,
-                                S_SCHEDULE_TYPE = "WCS",
-                                N_PRIORITY = priority,
+                                S_CNTR_CODE = cntrNo,
+                                S_CODE = WMSHelper.GenerateTaskNo(),
+                                S_START_LOC = startLoc.S_CODE,
+                                S_START_AREA = startLoc.S_AREA_CODE,
+                                S_END_LOC = endLoc.S_CODE,
+                                S_END_AREA = endLoc.S_AREA_CODE,
+                                S_TYPE = "婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟(鐩磋繛)",
+                                S_OP_DEF_NAME = "婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟(鐩磋繛)",
+                                S_OP_DEF_CODE = mesTask != null ? mesTask.ID.ToString() : null,
                                 T_START_TIME = DateTime.Now,
                             };
-                            taskDic.Add(priority, kgzWcsTask);
+                            if (WMSHelper.CreateWmsTask(wmsTask))
+                            {
+                                WCSTask wcsTask = new WCSTask()
+                                {
+                                    S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                    S_OP_CODE = wmsTask.S_CODE,
+                                    S_CODE = WCSHelper.GenerateTaskNo(),
+                                    S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                    S_TYPE = wmsTask.S_TYPE,
+                                    S_START_LOC = startLoc.S_CODE,
+                                    S_START_AREA = startLoc.S_AREA_CODE,
+                                    S_END_LOC = endLoc.S_CODE,
+                                    S_END_AREA = endLoc.S_AREA_CODE,
+                                    S_SCHEDULE_TYPE = "WCS",
+                                    N_PRIORITY = 100,
+                                    T_START_TIME = DateTime.Now,
+                                };
+
+                                if (WCSHelper.CreateTask(wcsTask))
+                                {
+                                    // 璧风偣銆佺粓鐐瑰姞閿�+                                    LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                    LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                                }
+
+                                // 2.鍒ゆ柇鏄惁闇�琛ョ┖宸ヨ锛岄渶瑕侊紝鍒欏垱寤虹┖宸ヨ鍑哄簱浠诲姟
+                                var bufferLocConfig = WMSHelper.GetBufferLocConfigByJtNo(jtNo);
+                                if (bufferLocConfig != null) 
+                                {
+                                    var bufferLoc = LocationHelper.GetLoc(bufferLocConfig.S_LOC_CODE);
+                                    if (bufferLoc != null)
+                                    {
+                                        Location kgzStartLoc = WMSHelper.getOutStockStartLoc(areaRelevance.areaCode, null);
+                                        if (kgzStartLoc == null)
+                                        {
+                                            WMSHelper.DeleteWmsTask(wmsTask.S_CODE);
+                                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯:{areaRelevance.areaCode},娌℃湁鍙敤鐨勭┖宸ヨ");
+                                            throw new BusinessException($"搴撳尯:{areaRelevance.areaCode},娌℃湁鍙敤鐨勭┖宸ヨ");
+                                        }
+
+                                        var locCntrRels = LocationHelper.GetLocCntr(kgzStartLoc.S_CODE);
+                                        if (locCntrRels.Count > 0)
+                                        {
+                                            string kgzCntrCode = locCntrRels[0].S_CNTR_CODE;
+                                            WCSTask kgzWcsTask = new WCSTask()
+                                            {
+                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                                S_OP_CODE = wmsTask.S_CODE,
+                                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                                S_CNTR_CODE = kgzCntrCode,
+                                                S_TYPE = "绌哄伐瑁呭嚭搴撲换鍔�,
+                                                S_START_LOC = kgzStartLoc.S_CODE,
+                                                S_START_AREA = kgzStartLoc.S_AREA_CODE,
+                                                S_END_LOC = bufferLoc.S_CODE,
+                                                S_END_AREA = bufferLoc.S_AREA_CODE,
+                                                S_SCHEDULE_TYPE = "WCS",
+                                                N_PRIORITY = 10,
+                                                T_START_TIME = DateTime.Now,
+                                            };
+                                            if (WCSHelper.CreateTask(kgzWcsTask))
+                                            {
+                                                // 璧风偣銆佺粓鐐瑰姞閿�+                                                LocationHelper.LockLoc(kgzWcsTask.S_START_LOC, 2);
+                                                LocationHelper.LockLoc(kgzWcsTask.S_END_LOC, 1);
+                                            }
+                                        }
+                                        else
+                                        {
+                                            WMSHelper.DeleteWmsTask(wmsTask.S_CODE);
+                                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏌ヨ绌哄伐瑁呰揣浣嶉敊璇紝璐т綅锛歿kgzStartLoc.S_CODE}娌℃湁绌哄伐瑁�);
+                                        }
+                                    }
+                                    else
+                                    {
+                                        WMSHelper.DeleteWmsTask(wmsTask.S_CODE);
+                                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"缂撳瓨鍖猴細{areaRelevance.hcAreaCode}娌℃湁绌鸿揣浣�);
+                                    }
+                                }
+
+                                // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                wmsTask.N_B_STATE = 1;
+                                WMSHelper.UpdateTaskState(wmsTask);
+
+                                // 5.浣滀笟鍒涘缓瀹屾垚鍚庯紝璇诲彇涓棿琛紝鏇存柊涓棿琛ㄧ姸鎬�+                                if (mesTask != null)
+                                {
+                                    WMSHelper.readLjMesOffItemTask(wmsTask.S_CODE, mesTask.ID);
+                                }
+                                else
+                                {
+                                    ContainerHelper.UpdateCntrState(cntrNo, 1);
+                                    WMSHelper.addRfidAnomalyRecord(cntrNo, 3, offLineLoc, null);
+                                }
+                            }
                         }
                         else
                         {
-                            WMSHelper.DeleteWmsTask(wmsTask.S_CODE);
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏌ヨ绌哄伐瑁呰揣浣嶉敊璇紝璐т綅锛歿kgzStartLoc.S_CODE}娌℃湁绌哄伐瑁�);
-                            throw new BusinessException($"鏌ヨ绌哄伐瑁呰揣浣嶉敊璇紝璐т綅锛歿kgzStartLoc.S_CODE}娌℃湁绌哄伐瑁�);
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯锛歿areaRelevance.areaCode}娌℃湁绌轰綑璐т綅");
+                            throw new BusinessException($"搴撳尯锛歿areaRelevance.areaCode}娌℃湁绌轰綑璐т綅");
                         }
-                    }
-
-                    // 濡傛槸甯樺竷鐩磋繛妯″紡鍒欙紝鎻愰珮婊℃枡鍏ュ簱浼樺厛绾�-                    if (logicConfig.S_TASK_TYPE == "2")
-                    {
-                        priority = 99;
-                    }
-                    else
-                    {
-                        priority = 10;
-                    }
-
-                    WCSTask wcsTask = new WCSTask()
-                    {
-                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                        S_OP_CODE = wmsTask.S_CODE,
-                        S_CODE = WCSHelper.GenerateTaskNo(),
-                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
-                        S_TYPE = wmsTask.S_TYPE,
-                        S_START_LOC = startLoc.S_CODE,
-                        S_START_AREA = startLoc.S_AREA_CODE,
-                        S_END_LOC = endLoc.S_CODE,
-                        S_END_AREA = endLoc.S_AREA_CODE,
-                        S_SCHEDULE_TYPE = "WCS",
-                        N_PRIORITY = priority,
-                        T_START_TIME = DateTime.Now,
-                    };
-                    taskDic.Add(priority, wcsTask);
-
-                    var tasks = taskDic.OrderByDescending(a => a.Key).Select(a => a.Value).ToList();
-                    foreach (var task in tasks) 
-                    {
-                        if (WCSHelper.CreateTask(task))
-                        {
-                            // 璧风偣銆佺粓鐐瑰姞閿�-                            LocationHelper.LockLoc(task.S_START_LOC, 2);
-                            LocationHelper.LockLoc(task.S_END_LOC, 1);
-                        }
-                    }
-
-                    // 鏇存柊浣滀笟浠诲姟鐘舵�
-                    wmsTask.N_B_STATE = 1;
-                    WMSHelper.UpdateTaskState(wmsTask);
-
-                    // 5.浣滀笟鍒涘缓瀹屾垚鍚庯紝璇诲彇涓棿琛紝鏇存柊涓棿琛ㄧ姸鎬�-                    if (mesTask != null)
-                    {
-                        WMSHelper.readLjMesOffItemTask(wmsTask.S_CODE, mesTask.ID);
                     }
                     else 
                     {
-                        ContainerHelper.UpdateCntrState(cntrNo, 1);
-                        WMSHelper.addRfidAnomalyRecord(cntrNo, 3, offLineLoc, null);
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏈厤缃笅绾垮簱鍖猴細{startLoc.S_AREA_CODE}鐨勫叧鑱斿叧绯�);
+                        throw new BusinessException($"鏈厤缃笅绾垮簱鍖猴細{startLoc.S_AREA_CODE}鐨勫叧鑱斿叧绯�);
                     }
+                }
+                else 
+                {
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
+                    throw new BusinessException($"涓嬬嚎浣�{offLineLoc},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
                 }
             }
             catch (BusinessException be) 
@@ -743,7 +644,7 @@
                     return responseResult;
                 }
 
-                middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2 , 2);
+                middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2 );
                 if (middleLoc == null) {
                     WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"MES鍙枡浠诲姟{mesTask.ID},绔嬪簱鎺ラ┏浣嶅彲鑳藉浜庨攣瀹氭垨绂佺敤鐘舵�锛岃鏌ョ湅");
                     responseResult.code = 1;
@@ -917,7 +818,6 @@
                                 // 鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬�                                 WMSHelper.updateLotOutTask(cst.S_CNTR_CODE, "2");
                             }
-
                         }
                     }
                 }
@@ -941,45 +841,27 @@
                 if (mst != null && mst.N_B_STATE < 2) {
 
                     int emptyFlag = 0;  // 瀹瑰櫒绌烘弧鏍囪瘑
-                    Container cntr = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
-                    if (cntr != null && cntr.N_DETAIL_COUNT > 0) {
+                    var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE);
+                    if (cntrItemRels.Count > 0) {
                         emptyFlag = 1;
                     }
 
                     // 1锛氬爢鍨涙満鏀捐揣寮傚父鐢宠鏂扮粓鐐�                     if (model.applyType == 1) {
                         // 鎶ヨ锛氭祦绋嬪紓甯�-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "浣�, $"鍫嗗灈鏈烘斁璐у紓甯革紝寮傚父璐т綅锛歿cst.S_END_LOC}");
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鍫嗗灈鏈烘斁璐у紓甯革紝浠诲姟鍙凤細{cst.S_CODE}锛屽紓甯歌揣浣嶏細{cst.S_END_LOC}");
 
                         // 1.灏嗗紓甯歌揣浣嶄笂閿侊紝骞舵姤璀�                         LocationHelper.LockLoc(cst.S_END_LOC, 3);
 
                         // 2.鏌ヨ鏂扮殑鍏ュ簱缁堢偣
-                        Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag);
+                        Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag );
                         cst.S_END_LOC = endLoc.S_CODE;
                         WCSHelper.UpdateEndLoc(cst);
 
                         LocationHelper.LockLoc(endLoc.S_CODE, 1);
                         applyDest.destLoc = endLoc.S_CODE;
                     }
-                    else if (model.applyType == 2)
-                    {
-                        if (cst.S_END_LOC == "铏氭嫙搴撲綅")
-                        {
-                            var transfeRelevance = WMSHelper.GetTransfeRelevance(model.loc);  // 鎺ラ┏浣嶅叧鑱斿睘鎬�-                            if (transfeRelevance != null)
-                            {
-                                // 1.鏌ヨ鏂扮殑鍏ュ簱缁堢偣
-                                Location endLoc = WMSHelper.getInStockEndLoc(transfeRelevance.S_RELE_AREA, emptyFlag);
-                                cst.S_END_LOC = endLoc.S_CODE;
-                                WCSHelper.UpdateEndLoc(cst);
-
-                                LocationHelper.LockLoc(endLoc.S_CODE, 1);
-                                applyDest.destLoc = endLoc.S_CODE;
-                            }
-                        }
-                    }
-
                 }
             }
             result.data = applyDest;
@@ -989,7 +871,7 @@
         /// <summary>
         /// AGV鐢宠缁堢偣
         /// 椤哄簭 RFID楠岃瘉 -> RFID涓庝换鍔″彿楠岃瘉 -> 鐗╂枡鍚堟牸鐘舵�楠岃瘉 -> 铏氭嫙缁堢偣
-        /// 鐢宠绫诲瀷锛�1.铏氭嫙缁堢偣 2.RFID涓庝换鍔′笉鍖归厤 3.鐗╂枡鐘舵�涓嶅悎鏍�+        /// 鐢宠绫诲瀷锛�1.姝e父 2.寮傚父
         /// 鍏ュ簱绛栫暐锛氬厛璁$畻搴撳尯鐨勫绉巼锛屽啀璁$畻搴撳尯瀵瑰簲鐨勫叆搴撶珯鍙扮殑浠诲姟鏁帮紝閮藉彇鏈�皬鐨�         /// 
         /// 1.纭畾浠诲姟鏄惁鍦ㄦ墽琛屼腑
@@ -1045,7 +927,8 @@
             {
                 WMSHelper.addAlarmRecord("绯荤粺閿欒","楂�, $"AGV鐢宠缁堢偣锛學MS鍐呴儴閿欒锛岄敊璇師鍥狅細{ex.Message}", "AGV");
             }
-            return null;
+            LogHelper.Info($"鍙樻洿AGV缁堢偣锛歿applyDest}", "AGV");
+            return applyDest;
         }
 
         /// <summary>
@@ -1059,60 +942,59 @@
         /// <returns></returns>
         public static string applyAgvDestXC(string applyType, WMSTask mst, WCSTask cst)
         {
-            string destLoc = null;
-            Location agvEndLoc = null;
-            Location wmsEndLoc = null;
+            Location endLoc = null;
             if (applyType == "1")
             {
-                if (mst.S_TYPE == "浣欐枡/绌哄伐瑁呭叆搴�)
+                if (cst.S_TYPE.Contains("浣欐枡/绌哄伐瑁呭叆搴�))
                 {
-                    var mesTask = WMSHelper.GetLjMesTaskById(int.Parse(mst.S_OP_DEF_CODE));
-                    if (mesTask.QTY != 0)
+                    var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
+                    if (bo) 
                     {
-                        var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE);
-                        if (awaitTask != null)
+                        var mesTask = WMSHelper.GetLjMesTaskById(mesId);
+                        if (mesTask.QTY != 0)
                         {
-                            // 鍙栨秷浠诲姟
-                            ApiHelper.cancelTask(awaitTask.S_CODE);
-                            // 淇敼缁堢偣
-                            agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
-                            wmsEndLoc = agvEndLoc;
-                            mst.S_TYPE = "鍙枡鍑哄簱浠诲姟";
+                            var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE);
+                            if (awaitTask != null)
+                            {
+                                // 鍙栨秷浠诲姟
+                                ApiHelper.cancelTask(awaitTask.S_CODE);
+                                // 淇敼缁堢偣
+                                endLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
+                                mst.S_TYPE = "鍙枡鍑哄簱浠诲姟";
+                            }
                         }
                     }
                 }
             }
 
-            if (agvEndLoc == null)
+            if (endLoc == null)
             {
                 string msg = "";
-                if (applyType == "2" || applyType == "3" || applyType == "4")
+                if (applyType == "2")
                 {
                     cst.S_TYPE = cst.S_TYPE + "銆愬紓甯搞�";
+                    mst.S_TYPE = mst.S_TYPE + "銆愬紓甯搞�";
                     msg = "宸ヨ寮傚父";
                 }
 
                 // TODO 鍙嶉鏂滆绔嬪簱寮傚父锛岃姹傛枩瑁佸叆搴撶粓鐐�-                agvEndLoc = null;
-
+                string locCode = "XCCRKZTKQ-1-1";
+                endLoc = LocationHelper.GetLoc(locCode);
             }
 
-            if (agvEndLoc != null)
+            if (endLoc != null)
             {
-                destLoc = agvEndLoc.S_CODE;
-
-                cst.S_END_LOC = agvEndLoc.S_CODE;
-                cst.S_END_AREA = agvEndLoc.S_AREA_CODE;
+                cst.S_END_LOC = endLoc.S_CODE;
+                cst.S_END_AREA = endLoc.S_AREA_CODE;
                 WCSHelper.UpdateEndLoc(cst);
-            }
 
-            if (wmsEndLoc != null)
-            {
-                mst.S_END_LOC = wmsEndLoc.S_CODE;
-                mst.S_END_AREA = wmsEndLoc.S_AREA_CODE;
+                mst.S_END_LOC = endLoc.S_CODE;
+                mst.S_END_AREA = endLoc.S_AREA_CODE;
                 WMSHelper.UpdateTaskEnd(mst);
+
+                return endLoc.S_CODE;
             }
-            return destLoc;
+            return null;
         }
 
         /// <summary>
@@ -1169,7 +1051,7 @@
                         wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
                         if (wmsEndLoc != null)
                         {
-                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2);  // 1.绔嬪簱鎺ラ┏浣�1.鍏ュ簱 2.闈炵洿杩�+                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1);  
                             if (agvEndLoc != null)
                             {
                                 LogHelper.Info($"鍒涘缓绔嬪簱绔欏彴鍒扮珛搴撶殑棰勫垱寤轰换鍔★紝agv缁堢偣璐т綅:{agvEndLoc.S_CODE},绔嬪簱缁堢偣璐т綅:{wmsEndLoc.S_CODE}", "AGV");
@@ -1188,6 +1070,7 @@
                                     S_SCHEDULE_TYPE = "WCS",
                                     N_PRIORITY = 10,
                                     N_B_STATE = -1,
+                                    S_B_STATE = "棰勫垱寤�,
                                     T_START_TIME = DateTime.Now,
                                 };
                                 if (WCSHelper.CreateTask(wcsTask))
@@ -1199,7 +1082,7 @@
                             }
                             else
                             {
-                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛屾湭鏌ヨ鍒扮珛搴撴帴椹充綅");
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"AGV鐢宠缁堢偣澶辫触锛岀珛搴�{wmsEndLoc.S_AREA_CODE}鏈厤缃珛搴撴帴椹充綅");
                                 return null;
                             }
                         }
@@ -1245,7 +1128,7 @@
                         wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
                         if (wmsEndLoc != null)
                         {
-                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2);  // 1.绔嬪簱鎺ラ┏浣�1.鍏ュ簱 2.闈炵洿杩�+                            agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1); 
                             if (agvEndLoc != null)
                             {
                                 LogHelper.Info($"鍒涘缓绔嬪簱绔欏彴鍒扮珛搴撶殑棰勫垱寤轰换鍔★紝agv缁堢偣璐т綅:{agvEndLoc.S_CODE},绔嬪簱缁堢偣璐т綅:{wmsEndLoc.S_CODE}", "AGV");
@@ -1256,7 +1139,7 @@
                                     S_OP_CODE = mst.S_CODE,
                                     S_CODE = WCSHelper.GenerateTaskNo(),
                                     S_CNTR_CODE = cst.S_CNTR_CODE,
-                                    S_TYPE = cst.S_TYPE + "銆愬紓甯搞�",
+                                    S_TYPE = "寮傚父宸ヨ鍏ュ簱",
                                     S_START_LOC = agvEndLoc.S_CODE,
                                     S_START_AREA = agvEndLoc.S_AREA_CODE,
                                     S_END_LOC = wmsEndLoc.S_CODE,
@@ -1293,6 +1176,23 @@
                         return null;
                     }
                 }
+
+                var mesTask = WMSHelper.GetLjMesTaskByAgvorderId(mst.S_CODE);
+                if (mesTask != null)
+                {
+                    if (mst.S_TYPE.Contains("鍙枡鍑哄簱浠诲姟"))
+                    {
+                        LogHelper.Info($"鍙枡鍑哄簱浠诲姟寮傚父锛屽啀娆″彂璧峰彨鏂欏嚭搴撲换鍔�, "AGV");
+                        callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
+                    }
+
+                    // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�+                    if (mst.S_TYPE.Contains("婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟") && cst.S_TYPE.Contains("绌哄伐瑁呭嚭搴撲换鍔�))
+                    {
+                        LogHelper.Info($"婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟寮傚父锛屽啀娆″彂璧锋弧鏂�寮傚父宸ヨ鍏ュ簱浠诲姟", "AGV");
+                        triggerItemOffLineFlow4(mesTask.POSITION_ID, mst.S_CNTR_CODE, mesTask);
+                    }
+                }
             }
 
             if (agvEndLoc != null && wmsEndLoc != null)
@@ -1306,35 +1206,6 @@
                 mst.S_END_AREA = wmsEndLoc.S_AREA_CODE;
                 WMSHelper.UpdateTaskEnd(mst);
             }
-
-            // 閲嶆柊鍙戣捣鏂颁换鍔�-            if (applyType != "1")
-            {
-                var mesTask = WMSHelper.GetLjMesTaskByAgvorderId(mst.S_CODE);
-                if (mesTask != null) 
-                {
-                    if (mst.S_TYPE.Contains("鍙枡鍑哄簱浠诲姟"))
-                    {
-                        LogHelper.Info($"鍙枡鍑哄簱浠诲姟寮傚父锛屽啀娆″彂璧峰彨鏂欏嚭搴撲换鍔�, "AGV");
-                        callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
-                    }
-
-                    // 婊℃枡涓嬬嚎锛堥潪鐩磋繛锛�-                    if (mst.S_TYPE.Contains("婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟") && cst.S_TYPE.Contains("绌哄伐瑁呭嚭搴撲换鍔�))
-                    {
-                        LogHelper.Info($"婊℃枡/寮傚父宸ヨ鍏ュ簱浠诲姟寮傚父锛屽啀娆″彂璧锋弧鏂�寮傚父宸ヨ鍏ュ簱浠诲姟", "AGV");
-                        var logicConfig = WMSHelper.getLogicConfigByJtCode(mesTask.EQP);
-                        if (logicConfig != null)
-                        {
-                            triggerItemOffLineFlow4(mesTask.POSITION_ID, mst.S_CNTR_CODE, logicConfig ,mesTask);
-                        }
-                        else
-                        {
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"MES浠诲姟{mesTask.ID},鏈哄彴鍙凤細{mesTask.EQP},鏈煡璇㈠埌閫昏緫绾胯矾", "AGV");
-                        }
-                    }
-                }
-            }
             return destLoc;
         }
 
@@ -1342,118 +1213,112 @@
         /// 鎴愭柊鏈哄彨鏂�         /// </summary>
         /// <param name="materialCode"></param>
-        /// <param name="endLocCode"></param>
+        /// <param name="jtNo"></param>
         /// <param name="mesTaskId"></param>
-        public static void callMaterial(string materialCode, string endLocCode, int mesTaskId)
+        public static void callMaterial(string materialCode, string jtNo, int mesTaskId)
         {
-            var oldWmsTask = WMSHelper.GetWmsTaskByEnd(endLocCode);
-            if (oldWmsTask == null) {
-                string cntrCode = "";
-                Location endLoc = LocationHelper.GetLoc(endLocCode);
+            string cntrCode = "";
+            var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
+
+            if (mesTask != null)
+            {
+                Location endLoc = WMSHelper.getCallMaterialLocCode(jtNo);
                 if (endLoc != null)
                 {
                     Location middleLoc = null;
                     Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
-                    if (startLoc == null)
-                    {
-                        var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
-                        if (mesTask != null)
-                        {
-                            mesTask.RECEIVE_MSG = "娌℃湁搴撳瓨";
-                            WMSHelper.updateLjMesTask(mesTask);
-                        }
-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鍙枡澶辫触锛岀墿鏂�{materialCode}娌℃湁搴撳瓨");
-                        return;
-                    }
-                    else 
+                    if (startLoc != null)
                     {
                         var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
                         if (locCntrRels.Count > 0)
                         {
                             cntrCode = locCntrRels[0].S_CNTR_CODE;
-                        }
-                        else 
-                        {
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鏌ヨ鐗╂枡寮傚父锛岃揣浣�{startLoc.S_CODE}缂哄皯瀹瑰櫒淇℃伅");
-                            return;
-                        }
-                    }
-
-                    middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1 , 2);
-
-                    if (middleLoc != null)
-                    {
-                        // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�-                        var wmsTask = new WMSTask()
-                        {
-                            S_CNTR_CODE = cntrCode,
-                            S_CODE = WMSHelper.GenerateTaskNo(),
-                            S_START_LOC = startLoc.S_CODE,
-                            S_START_AREA = startLoc.S_AREA_CODE,
-                            S_END_LOC = endLoc.S_CODE,
-                            S_END_AREA = endLoc.S_AREA_CODE,
-                            S_TYPE = "鍙枡鍑哄簱浠诲姟",
-                            S_OP_DEF_CODE = mesTaskId.ToString(),
-                            S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�,
-                            T_START_TIME = DateTime.Now,
-                        };
-                        if (WMSHelper.CreateWmsTask(wmsTask))
-                        {
-                            WCSTask wcsTask = new WCSTask()
+                            middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2);
+                            if (middleLoc != null)
                             {
-                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                                S_OP_CODE = wmsTask.S_CODE,
-                                S_CODE = WCSHelper.GenerateTaskNo(),
-                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
-                                S_TYPE = wmsTask.S_TYPE + "-WCS",
-                                S_START_LOC = startLoc.S_CODE,
-                                S_START_AREA = startLoc.S_AREA_CODE,
-                                S_END_LOC = middleLoc.S_CODE,
-                                S_END_AREA = middleLoc.S_AREA_CODE,
-                                S_SCHEDULE_TYPE = "WCS",
-                                N_PRIORITY = 10,
-                                T_START_TIME = DateTime.Now,
-                            };
+                                // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+                                var wmsTask = new WMSTask()
+                                {
+                                    S_CNTR_CODE = cntrCode,
+                                    S_CODE = WMSHelper.GenerateTaskNo(),
+                                    S_START_LOC = startLoc.S_CODE,
+                                    S_START_AREA = startLoc.S_AREA_CODE,
+                                    S_END_LOC = endLoc.S_CODE,
+                                    S_END_AREA = endLoc.S_AREA_CODE,
+                                    S_TYPE = "鍙枡鍑哄簱浠诲姟",
+                                    S_OP_DEF_CODE = mesTaskId.ToString(),
+                                    S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�,
+                                    T_START_TIME = DateTime.Now,
+                                };
+                                if (WMSHelper.CreateWmsTask(wmsTask))
+                                {
+                                    WCSTask wcsTask = new WCSTask()
+                                    {
+                                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                        S_OP_CODE = wmsTask.S_CODE,
+                                        S_CODE = WCSHelper.GenerateTaskNo(),
+                                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                        S_TYPE = wmsTask.S_TYPE,
+                                        S_START_LOC = startLoc.S_CODE,
+                                        S_START_AREA = startLoc.S_AREA_CODE,
+                                        S_END_LOC = middleLoc.S_CODE,
+                                        S_END_AREA = middleLoc.S_AREA_CODE,
+                                        S_SCHEDULE_TYPE = "WCS",
+                                        N_PRIORITY = 10,
+                                        T_START_TIME = DateTime.Now,
+                                    };
 
-                            if (WCSHelper.CreateTask(wcsTask))
-                            {
-                                // 璧风偣銆佺粓鐐瑰姞閿�-                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
-                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                                    if (WCSHelper.CreateTask(wcsTask))
+                                    {
+                                        // 璧风偣銆佺粓鐐瑰姞閿�+                                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
 
-                                // 鏇存柊浣滀笟浠诲姟鐘舵�
-                                wmsTask.N_B_STATE = 1;
-                                WMSHelper.UpdateTaskState(wmsTask);
+                                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                        wmsTask.N_B_STATE = 1;
+                                        WMSHelper.UpdateTaskState(wmsTask);
+                                    }
+
+                                    // 棰勫垱寤轰簩娈典换鍔�+                                    WCSTask twoWcsTask = new WCSTask()
+                                    {
+                                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                        S_OP_CODE = wmsTask.S_CODE,
+                                        S_CODE = WCSHelper.GenerateTaskNo(),
+                                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                        S_TYPE = wmsTask.S_TYPE,
+                                        S_START_LOC = middleLoc.S_CODE,
+                                        S_START_AREA = middleLoc.S_AREA_CODE,
+                                        S_END_LOC = endLoc.S_CODE,
+                                        S_END_AREA = endLoc.S_AREA_CODE,
+                                        S_SCHEDULE_TYPE = "AGV",
+                                        N_PRIORITY = 10,
+                                        T_START_TIME = DateTime.Now,
+                                        N_B_STATE = -1
+                                    };
+                                    WCSHelper.CreateTask(twoWcsTask);
+                                    WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
+                                }
                             }
-
-                            // 棰勫垱寤轰簩娈典换鍔�-                            WCSTask twoWcsTask = new WCSTask()
+                            else
                             {
-                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
-                                S_OP_CODE = wmsTask.S_CODE,
-                                S_CODE = WCSHelper.GenerateTaskNo(),
-                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
-                                S_TYPE = wmsTask.S_TYPE,
-                                S_START_LOC = middleLoc.S_CODE,
-                                S_START_AREA = middleLoc.S_AREA_CODE,
-                                S_END_LOC = endLoc.S_CODE,
-                                S_END_AREA = endLoc.S_AREA_CODE,
-                                S_SCHEDULE_TYPE = "AGV",
-                                N_PRIORITY = 10,
-                                T_START_TIME = DateTime.Now,
-                                N_B_STATE = -1
-                            };
-                            WCSHelper.CreateTask(twoWcsTask);
-
-                            WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
+                            }
+                        }
+                        else
+                        {
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
                         }
                     }
-                    else 
+                    else
                     {
-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
-                    }
+                        mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
+                        WMSHelper.updateLjMesTask(mesTask);
+                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
+                    }  
                 }
             }
+            
         }
         
         /// <summary>
@@ -1465,14 +1330,170 @@
         /// <param name="materialCode"></param>
         /// <param name="endLocCode"></param>
         /// <param name="mesTaskId"></param>
-        public static void callMaterialHDK(string materialCode, string endLocCode, int mesTaskId)
+        public static void callMaterialXC(string materialCode, string endLocCode, int mesTaskId)
         {
-            // 1.鏌ヨ鐜甫搴撶墿鏂欏簱瀛�+            var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
+            if (mesTask != null) 
+            {
+                // 1.鏌ヨ鐜甫搴撶墿鏂欏簱瀛樻渶鏃╁叆搴撴椂闂�+                DateTime inStockTimeXc = DateTime.MinValue;
 
-            // 2.鏌ヨ涓浆搴撳簱瀛橈紝鏍规嵁鍏ュ簱鏃堕棿 杩涜鍏堝叆鍏堝嚭
+                // 2.鏌ヨ涓浆搴撳簱瀛�+                DateTime inStockTime = WMSHelper.getZZKInventoryInfo(materialCode);
 
-            // 3.灏哅ES浠诲姟鍐欏叆鐜甫搴撲换鍔′腑闂磋〃
-            WMSHelper.addLjXcTask(mesTaskId);
+                // 3.鏍规嵁鍏堣繘鍏堝嚭璁$畻鍑哄簱鐨勭墿鏂欐槸鐜甫搴�杩樻槸涓浆搴�+                if (inStockTime >= inStockTimeXc)
+                {
+                    Location endLoc = WMSHelper.getCallMaterialLocCode(mesTask.EQP);
+                    if (endLoc != null) 
+                    {
+                        // 4.鍒涘缓鏂滆-鎴愭柊鏈哄彨鏂欎綔涓�+                        var wmsTask = new WMSTask()
+                        {
+                            S_CODE = WMSHelper.GenerateTaskNo(),
+                            S_CNTR_CODE = "",
+                            S_START_LOC = "铏氭嫙璧风偣",
+                            S_START_AREA = "铏氭嫙搴撳尯",
+                            S_END_LOC = endLoc.S_CODE,
+                            S_END_AREA = endLoc.S_AREA_CODE,
+                            S_TYPE = "鍙枡鍑哄簱浠诲姟",
+                            S_OP_DEF_CODE = mesTask.ID.ToString(),
+                            S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�鏂滆)",
+                            T_START_TIME = DateTime.Now,
+                            N_B_STATE = 0
+                        };
+                        if (WMSHelper.CreateWmsTask(wmsTask))
+                        {
+                            WCSTask wcsTask = new WCSTask()
+                            {
+                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                S_OP_CODE = wmsTask.S_CODE,
+                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                S_TYPE = wmsTask.S_TYPE,
+                                S_START_LOC = wmsTask.S_START_LOC,
+                                S_START_AREA = wmsTask.S_START_AREA,
+                                S_END_LOC = endLoc.S_CODE,
+                                S_END_AREA = endLoc.S_AREA_CODE,
+                                S_SCHEDULE_TYPE = "AGV",
+                                N_PRIORITY = 10,
+                                T_START_TIME = DateTime.Now,
+                                N_B_STATE = -1,
+                                S_B_STATE = "棰勫垱寤�,
+                            };
+
+                            if (WCSHelper.CreateTask(wcsTask))
+                            {
+                                // 璧风偣銆佺粓鐐瑰姞閿�+                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                // 5.灏哅ES浠诲姟鍐欏叆鏂滆浠诲姟涓棿琛�+                                mesTask.AGVORDER_ID = wcsTask.S_CODE;
+                                WMSHelper.addLjXcTask(mesTask);
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    //涓浆搴撶墿鏂欏嚭搴�+                    Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
+                    if (startLoc != null)
+                    {
+                        var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                        if (locCntrRels != null && locCntrRels.Count > 0)
+                        {
+                            Location middleLoc = null;
+                            Location endLoc = WMSHelper.getCallMaterialLocCode(mesTask.EQP);
+                            if (endLoc != null)
+                            {
+                                middleLoc = WMSHelper.GetMinTaskTransfeLoc(startLoc.S_AREA_CODE, 2);
+                                if (middleLoc != null)
+                                {
+                                    // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+                                    var wmsTask = new WMSTask()
+                                    {
+                                        S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
+                                        S_CODE = WMSHelper.GenerateTaskNo(),
+                                        S_START_LOC = startLoc.S_CODE,
+                                        S_START_AREA = startLoc.S_AREA_CODE,
+                                        S_END_LOC = endLoc.S_CODE,
+                                        S_END_AREA = endLoc.S_AREA_CODE,
+                                        S_TYPE = "鍙枡鍑哄簱浠诲姟",
+                                        S_OP_DEF_CODE = mesTaskId.ToString(),
+                                        S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�,
+                                        T_START_TIME = DateTime.Now,
+                                    };
+                                    if (WMSHelper.CreateWmsTask(wmsTask))
+                                    {
+                                        WCSTask wcsTask = new WCSTask()
+                                        {
+                                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                            S_OP_CODE = wmsTask.S_CODE,
+                                            S_CODE = WCSHelper.GenerateTaskNo(),
+                                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                            S_TYPE = wmsTask.S_TYPE,
+                                            S_START_LOC = startLoc.S_CODE,
+                                            S_START_AREA = startLoc.S_AREA_CODE,
+                                            S_END_LOC = middleLoc.S_CODE,
+                                            S_END_AREA = middleLoc.S_AREA_CODE,
+                                            S_SCHEDULE_TYPE = "WCS",
+                                            N_PRIORITY = 10,
+                                            T_START_TIME = DateTime.Now,
+                                        };
+
+                                        if (WCSHelper.CreateTask(wcsTask))
+                                        {
+                                            // 璧风偣銆佺粓鐐瑰姞閿�+                                            LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                            LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                            // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                            wmsTask.N_B_STATE = 1;
+                                            WMSHelper.UpdateTaskState(wmsTask);
+                                        }
+
+                                        // 棰勫垱寤轰簩娈典换鍔�+                                        WCSTask twoWcsTask = new WCSTask()
+                                        {
+                                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                            S_OP_CODE = wmsTask.S_CODE,
+                                            S_CODE = WCSHelper.GenerateTaskNo(),
+                                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                            S_TYPE = wmsTask.S_TYPE,
+                                            S_START_LOC = middleLoc.S_CODE,
+                                            S_START_AREA = middleLoc.S_AREA_CODE,
+                                            S_END_LOC = endLoc.S_CODE,
+                                            S_END_AREA = endLoc.S_AREA_CODE,
+                                            S_SCHEDULE_TYPE = "AGV",
+                                            N_PRIORITY = 10,
+                                            T_START_TIME = DateTime.Now,
+                                            N_B_STATE = -1
+                                        };
+                                        WCSHelper.CreateTask(twoWcsTask);
+                                        WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
+                                    }
+                                }
+                                else
+                                {
+                                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
+                                }
+                            }
+                            else
+                            {
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
+                            }
+                        }
+                        else
+                        {
+                            mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
+                            WMSHelper.updateLjMesTask(mesTask);
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
+                        }
+                    }
+                }
+            }
         }
 
         /// <summary>
@@ -1483,12 +1504,12 @@
         /// 3.鍒涘缓浣欐枡鍥炲簱浣滀笟锛屽垱寤篴gv鎼繍浠诲姟锛岃櫄鎷熺粓鐐�         /// </summary>
         /// <param name="locCode">鎴愬瀷鏈哄彨鏂欑粓鐐�/param>
-        public static void returnMaterialOrEmptyTray(string locCode) 
+        /// <param name="jtNo">鎴愬瀷鏈哄彨鏂欑粓鐐�/param>
+        public static void returnMaterialOrEmptyTray(string locCode ,string jtNo) 
         {
             if (locCode != null)
             {
-                // 2.鏌ヨmes浠诲姟涓棿琛�-                var mesTask = WMSHelper.getLjMesTaskByLoc(locCode);
+                var mesTask = WMSHelper.getLjMesTaskByJtNo(jtNo);
                 if (mesTask != null)
                 {
                     createReturnTask(locCode, mesTask);
@@ -1518,7 +1539,7 @@
                 S_START_AREA = startLoc.S_AREA_CODE,
                 S_END_LOC = endLoc.S_CODE,
                 S_END_AREA = endLoc.S_AREA_CODE,
-                S_TYPE = "浣欐枡/绌哄伐瑁呭叆搴撲换鍔� + suffix,
+                S_TYPE = "浣欐枡/绌哄伐瑁呭叆搴撲换鍔�,
                 S_OP_DEF_CODE = mesTask.ID.ToString(),
                 S_OP_DEF_NAME = "浣欐枡/绌哄伐瑁呭叆搴� + suffix,
                 T_START_TIME = DateTime.Now
@@ -1574,54 +1595,35 @@
             // 鏂滆绔嬪簱
             if (mst.S_OP_DEF_NAME.Contains("鏂滆"))
             {
-                // TODO 鍙嶉鏂滆绔嬪簱寮傚父锛岃姹傛枩瑁佸叆搴撶粓鐐�-                agvEndLoc = null;
+                // TODO 璇锋眰鏂滆鍏ュ簱缁堢偣
+                string locCode = "XCCRKZTKQ-1-1";
+                agvEndLoc = LocationHelper.GetLoc(locCode);
                 wmsEndLoc = agvEndLoc;
 
                 if (agvEndLoc != null) 
                 {
-                    // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�-                    WCSTask wcsTask = new WCSTask()
+                    var wmsTask = new WMSTask()
                     {
-                        S_OP_NAME = mst.S_OP_DEF_NAME,
-                        S_OP_CODE = mst.S_CODE,
-                        S_CODE = WCSHelper.GenerateTaskNo(),
                         S_CNTR_CODE = cst.S_CNTR_CODE,
-                        S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                        S_CODE = WMSHelper.GenerateTaskNo(),
                         S_START_LOC = startLoc.S_CODE,
                         S_START_AREA = startLoc.S_AREA_CODE,
-                        S_END_LOC = agvEndLoc.S_CODE,
-                        S_END_AREA = agvEndLoc.S_AREA_CODE,
-                        S_SCHEDULE_TYPE = "AGV",
-                        N_PRIORITY = 10,
+                        S_END_LOC = wmsEndLoc.S_CODE,
+                        S_END_AREA = wmsEndLoc.S_AREA_CODE,
+                        S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
+                        S_OP_DEF_NAME = "涓嶅悎鏍煎搧鍥炲簱",
                         T_START_TIME = DateTime.Now,
                     };
-
-                    if (WCSHelper.CreateTask(wcsTask))
-                    {
-                        // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�-                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 1);
-                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
-                    }
-                }
-            }
-            else
-            {
-                Container container = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
-                wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
-                if (wmsEndLoc != null)
-                {
-                    agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1, 2);  // 1.绔嬪簱鎺ラ┏浣�1.鍏ュ簱 2.闈炵洿杩�-                    if (agvEndLoc != null)
+                    if (WMSHelper.CreateWmsTask(wmsTask))
                     {
                         // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�-                        WCSTask oneWcsTask = new WCSTask()
+                        WCSTask wcsTask = new WCSTask()
                         {
-                            S_OP_NAME = mst.S_OP_DEF_NAME,
-                            S_OP_CODE = mst.S_CODE,
+                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                            S_OP_CODE = wmsTask.S_CODE,
                             S_CODE = WCSHelper.GenerateTaskNo(),
                             S_CNTR_CODE = cst.S_CNTR_CODE,
-                            S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                            S_TYPE = wmsTask.S_TYPE,
                             S_START_LOC = startLoc.S_CODE,
                             S_START_AREA = startLoc.S_AREA_CODE,
                             S_END_LOC = agvEndLoc.S_CODE,
@@ -1631,44 +1633,101 @@
                             T_START_TIME = DateTime.Now,
                         };
 
-                        if (WCSHelper.CreateTask(oneWcsTask))
+                        if (WCSHelper.CreateTask(wcsTask))
                         {
                             // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�-                            LocationHelper.LockLoc(oneWcsTask.S_START_LOC, 1);
-                            LocationHelper.LockLoc(oneWcsTask.S_END_LOC, 1);
-                        }
+                            LocationHelper.LockLoc(wcsTask.S_START_LOC, 1);
+                            LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
 
-                        // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�-                        WCSTask twoWcsTask = new WCSTask()
+                            wmsTask.N_B_STATE = 1;
+                            WMSHelper.UpdateTaskState(wmsTask);
+                        }
+                    }  
+                }
+            }
+            else
+            {
+                Container container = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
+                wmsEndLoc = WMSHelper.getInStockEndLoc(null, container.N_DETAIL_COUNT == 0 ? 0 : 1, container.N_TYPE);
+                if (wmsEndLoc != null)
+                {
+                    agvEndLoc = WMSHelper.GetMinTaskTransfeLoc(wmsEndLoc.S_AREA_CODE, 1); 
+                    if (agvEndLoc != null)
+                    {
+                        var wmsTask = new WMSTask()
                         {
-                            S_OP_NAME = mst.S_OP_DEF_NAME,
-                            S_OP_CODE = mst.S_CODE,
-                            S_CODE = WCSHelper.GenerateTaskNo(),
                             S_CNTR_CODE = cst.S_CNTR_CODE,
-                            S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
-                            S_START_LOC = agvEndLoc.S_CODE,
-                            S_START_AREA = agvEndLoc.S_AREA_CODE,
+                            S_CODE = WMSHelper.GenerateTaskNo(),
+                            S_START_LOC = startLoc.S_CODE,
+                            S_START_AREA = startLoc.S_AREA_CODE,
                             S_END_LOC = wmsEndLoc.S_CODE,
                             S_END_AREA = wmsEndLoc.S_AREA_CODE,
-                            S_SCHEDULE_TYPE = "WCS",
-                            N_PRIORITY = 10,
-                            N_B_STATE = -1,
+                            S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
+                            S_OP_DEF_NAME = "涓嶅悎鏍煎搧鍥炲簱",
                             T_START_TIME = DateTime.Now,
                         };
-
-                        if (WCSHelper.CreateTask(twoWcsTask))
+                        if (WMSHelper.CreateWmsTask(wmsTask))
                         {
-                            // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�-                            LocationHelper.LockLoc(twoWcsTask.S_START_LOC, 1);
-                            LocationHelper.LockLoc(twoWcsTask.S_END_LOC, 1);
-                        }
+                            // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�+                            WCSTask oneWcsTask = new WCSTask()
+                            {
+                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                S_OP_CODE = wmsTask.S_CODE,
+                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                S_CNTR_CODE = cst.S_CNTR_CODE,
+                                S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
+                                S_START_LOC = startLoc.S_CODE,
+                                S_START_AREA = startLoc.S_AREA_CODE,
+                                S_END_LOC = agvEndLoc.S_CODE,
+                                S_END_AREA = agvEndLoc.S_AREA_CODE,
+                                S_SCHEDULE_TYPE = "AGV",
+                                N_PRIORITY = 10,
+                                T_START_TIME = DateTime.Now,
+                            };
+
+                            if (WCSHelper.CreateTask(oneWcsTask))
+                            {
+                                // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                LocationHelper.LockLoc(oneWcsTask.S_START_LOC, 1);
+                                LocationHelper.LockLoc(oneWcsTask.S_END_LOC, 1);
+                            }
+
+                            // 棰勫厛鐢熸垚鍏ュ簱绔欏彴-绔嬪簱缁堢偣鐨勬惉杩愪换鍔�+                            WCSTask twoWcsTask = new WCSTask()
+                            {
+                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                S_OP_CODE = wmsTask.S_CODE,
+                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                S_CNTR_CODE = cst.S_CNTR_CODE,
+                                S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
+                                S_START_LOC = agvEndLoc.S_CODE,
+                                S_START_AREA = agvEndLoc.S_AREA_CODE,
+                                S_END_LOC = wmsEndLoc.S_CODE,
+                                S_END_AREA = wmsEndLoc.S_AREA_CODE,
+                                S_SCHEDULE_TYPE = "WCS",
+                                N_PRIORITY = 10,
+                                N_B_STATE = -1,
+                                T_START_TIME = DateTime.Now,
+                            };
+
+                            if (WCSHelper.CreateTask(twoWcsTask))
+                            {
+                                // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                LocationHelper.LockLoc(twoWcsTask.S_START_LOC, 1);
+                                LocationHelper.LockLoc(twoWcsTask.S_END_LOC, 1);
+                            }
+
+                            wmsTask.N_B_STATE = 1;
+                            WMSHelper.UpdateTaskState(wmsTask);
+                        }  
                     }
                 }
 
-                if (cst.S_TYPE == "鍙枡鍑哄簱浠诲姟")
+                var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
+                if (bo) 
                 {
-                    var mesTask = WMSHelper.GetLjMesTaskByAgvorderId(mst.S_CODE);
-                    callMaterial( mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
+                    var mesTask = WMSHelper.GetLjMesTaskById(mesId);
+                    callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
                 }
             }
             return result;
@@ -1964,7 +2023,7 @@
             {
                 var transfeRelevance = WMSHelper.GetTransfeRelevance(model.locCode);  // 鎺ラ┏浣嶅睘鎬�                 LogHelper.Info($"鍘熺珯鍙板睘鎬э細{JsonConvert.SerializeObject(transfeRelevance)}", "WMS");
-                if (transfeRelevance != null && transfeRelevance.N_PROPERTY == 2)
+                if (transfeRelevance != null)
                 {
                     if (model.signalType == "1")
                     {
@@ -2016,10 +2075,88 @@
             return result;
         }
 
+        /// <summary>
+        /// 鏂滆鐗╂枡鍑哄簱浠诲姟
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult createXcItemOutStockTask(XcItemOutStockModel model)
+        {
+            ResponseResult responseResult = new ResponseResult();
+            Location startLoc = LocationHelper.GetLoc(model.startLoc);
+            if (startLoc == null)
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏嚭搴�鏂滆)锛岃捣鐐�{model.startLoc}鍦╓MS绯荤粺涓笉瀛樺湪");
+                responseResult.code = 201;
+                responseResult.msg = $"璧风偣:{model.startLoc}鍦╓MS绯荤粺涓笉瀛樺湪";
+                return responseResult;
+            }
+            Location endLoc = WMSHelper.getCallMaterialLocCode(model.eqNo);
+            if (endLoc != null)
+            {
+                var wmsTask = WMSHelper.GetWmsTaskByCntr(model.palletId);
+                if (wmsTask == null)
+                {
+                    ContainerHelper.AddCntr(model.palletId);
+
+                    // 1.鍒涘缓鏂滆-鎴愭柊鏈哄彨鏂欎綔涓�+                    wmsTask = new WMSTask()
+                    {
+                        S_CNTR_CODE = model.palletId,
+                        S_CODE = WMSHelper.GenerateTaskNo(),
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = endLoc.S_CODE,
+                        S_END_AREA = endLoc.S_AREA_CODE,
+                        S_TYPE = "鍙枡鍑哄簱浠诲姟",
+                        S_OP_DEF_CODE = model.reqId,
+                        S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�鏂滆)",
+                        T_START_TIME = DateTime.Now,
+                    };
+                    if (WMSHelper.CreateWmsTask(wmsTask))
+                    {
+                        WCSTask wcsTask = new WCSTask()
+                        {
+                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                            S_OP_CODE = wmsTask.S_CODE,
+                            S_CODE = WCSHelper.GenerateTaskNo(),
+                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                            S_TYPE = wmsTask.S_TYPE,
+                            S_START_LOC = startLoc.S_CODE,
+                            S_START_AREA = startLoc.S_AREA_CODE,
+                            S_END_LOC = endLoc.S_CODE,
+                            S_END_AREA = endLoc.S_AREA_CODE,
+                            S_SCHEDULE_TYPE = "AGV",
+                            N_PRIORITY = 10,
+                            T_START_TIME = DateTime.Now,
+                        };
+
+                        if (WCSHelper.CreateTask(wcsTask))
+                        {
+                            // 璧风偣銆佺粓鐐瑰姞閿�+                            LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                            LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                            // 鏇存柊浣滀笟浠诲姟鐘舵�
+                            wmsTask.N_B_STATE = 1;
+                            WMSHelper.UpdateTaskState(wmsTask);
+                        }
+                    }
+                }
+            }
+            else 
+            {
+                responseResult.code = 201;
+                responseResult.msg = $"鎴愬瀷鏈烘満鍙�{model.eqNo}娌℃湁绌轰綑鐨勫彨鏂欒揣浣�;
+            }
+            return responseResult;
+        }
+
         //----------------------------------------------------------------------------------------------------------------------------
         public class LocModel
         {
-            public string locCode { get; set; }
+            public string locCode { get; set; }  // 杩旀枡璐т綅缂栧彿
+            public string jtNo { get; set; } // 鏈哄彴鍙�         }
 
         public class ApplyDest {

--
Gitblit v1.9.1