From a93b0e99036c24b9bd58c79bf5e7364b1ba28bae Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期二, 01 七月 2025 16:02:33 +0800
Subject: [PATCH] 福建佳通-流程优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/WmsController.cs            |   38 +
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs             |   14 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/AgvController.cs            |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs           |   15 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs       |   70 +
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItem.cs                |   11 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs          |  147 ++-
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WCSHelper.cs                |    1 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs             |  300 ++++---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs          |    8 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs         |  165 +---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOutTask.cs          |   16 
 HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs              |    3 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs                 |  105 +-
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotStatus.cs           |   15 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjMesTask.cs             |   24 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs       |   17 
 HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/core/Monitor.cs                 |   18 
 HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/process/DeviceProcess.cs        |   18 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs                      |    6 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs                |  394 +++++++----
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs                |  232 +++++
 HH.WCS.Mobox3/HH.WCS.Mobox3.ZS7412/dispatch/HanAo.cs             |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/util/SqlHelper.cs               |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs      |    1 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItemConfig.cs          |   10 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json              |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json           |    8 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/EmbryoFinishRecord.cs |    3 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs             |   11 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/HH.WCS.Mobox3.FJJT.csproj       |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs             |   12 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/dispatch/WCSDispatch.cs      |  272 ++++++-
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotCarrier.cs          |   15 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj |    1 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs                 |   16 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs          |   82 --
 37 files changed, 1,345 insertions(+), 713 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/HH.WCS.Mobox3.FJJT.csproj b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/HH.WCS.Mobox3.FJJT.csproj
index 747e795..e983e00 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/HH.WCS.Mobox3.FJJT.csproj
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/HH.WCS.Mobox3.FJJT.csproj
@@ -160,12 +160,14 @@
     <Compile Include="dispatch\NDC.cs" />
     <Compile Include="core\Monitor.cs" />
     <Compile Include="dispatch\WCSDispatch.cs" />
+    <Compile Include="dispatch\XcDispatch.cs" />
     <Compile Include="models\AbnormalAreaConfig.cs" />
     <Compile Include="models\AlarmRecord.cs" />
     <Compile Include="models\BaseModel.cs" />
     <Compile Include="models\Area.cs" />
     <Compile Include="models\LjItem.cs" />
     <Compile Include="models\LjItemConfig.cs" />
+    <Compile Include="models\LjXcCarrier.cs" />
     <Compile Include="models\LjLotCarrier.cs" />
     <Compile Include="models\LjLotOnhand.cs" />
     <Compile Include="models\LjXcOutTask.cs" />
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs
index e36ba54..65e721b 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/Program.cs
@@ -85,12 +85,12 @@
                 tasks.Add(GetTask(Monitor.MonitorCXJCallMaterialMesTask));
                 // 鐩戝惉閽㈠寘婊℃枡涓嬬嚎浠诲姟
                 tasks.Add(GetTask(Monitor.MonitorGBOffLineMesTask));
-                // 鐩戝惉鏂滆鍑哄簱浠诲姟琛�-                tasks.Add(GetTask(Monitor.MonitorXcOutTask));
+                // 鐩戝惉鏂滆浠诲姟琛�+                tasks.Add(GetTask(Monitor.MonitorXcTask));
                 // 鑷姩琛ュ厖绌哄伐瑁呬换鍔�                 tasks.Add(GetTask(Monitor.AutoReplenishEmptyPallet));
                 // 鐩戝惉鎵樼洏鐗╂枡琛ㄣ�鐗╂枡琛紝骞舵洿鏂�-                tasks.Add(GetTask(Monitor.MonitorPalletAndMateral));
+ /*               tasks.Add(GetTask(Monitor.MonitorPalletAndMateral));*/
                 // 瀹氭椂鏇存柊搴撳瓨涓棿琛�                 tasks.Add(GetTask(Monitor.UpdateInventoryRegularly,60000));
                 // 瀹氭椂鎵规鐘舵�琛�diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/AgvController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/AgvController.cs
index e65bc46..db26636 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/AgvController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/AgvController.cs
@@ -44,6 +44,7 @@
             LogHelper.Info("AGVCallbackEvent Request锛� + JsonConvert.SerializeObject(model), "HosttoagvTask");
             return new ReturnResult();
         }
+
         /// <summary>
         /// ndc agv杞﹁締鐘舵�鍥炴姤
         /// </summary>
@@ -68,7 +69,6 @@
             WCSCore.OperateHATaskStatus(model);
             return new ReturnResult();
         }
-
 
     }
 }
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 9fe06a7..16e19b6 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
@@ -980,7 +980,7 @@
         /// <summary>
         /// AGV鐢宠缁堢偣
         /// 椤哄簭 RFID楠岃瘉 -> RFID涓庝换鍔″彿楠岃瘉 -> 鐗╂枡鍚堟牸鐘舵�楠岃瘉 -> 铏氭嫙缁堢偣
-        /// 鐢宠绫诲瀷锛�1.铏氭嫙缁堢偣 2.RFID涓庝换鍔′笉鍖归厤 3.鐗╂枡鐘舵�涓嶅悎鏍�+        /// 鐢宠绫诲瀷锛�1.姝e父 2.寮傚父
         /// 鍏ュ簱绛栫暐锛氬厛璁$畻搴撳尯鐨勫绉巼锛屽啀璁$畻搴撳尯瀵瑰簲鐨勫叆搴撶珯鍙扮殑浠诲姟鏁帮紝閮藉彇鏈�皬鐨�         /// 
         /// 1.纭畾浠诲姟鏄惁鍦ㄦ墽琛屼腑
@@ -1036,7 +1036,8 @@
             {
                 WMSHelper.addAlarmRecord("绯荤粺閿欒","楂�, $"AGV鐢宠缁堢偣锛學MS鍐呴儴閿欒锛岄敊璇師鍥狅細{ex.Message}", "AGV");
             }
-            return null;
+            LogHelper.Info($"鍙樻洿AGV缁堢偣锛歿applyDest}", "AGV");
+            return applyDest;
         }
 
         /// <summary>
@@ -1050,9 +1051,7 @@
         /// <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 == "浣欐枡/绌哄伐瑁呭叆搴�)
@@ -1069,8 +1068,7 @@
                                 // 鍙栨秷浠诲姟
                                 ApiHelper.cancelTask(awaitTask.S_CODE);
                                 // 淇敼缁堢偣
-                                agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
-                                wmsEndLoc = agvEndLoc;
+                                endLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
                                 mst.S_TYPE = "鍙枡鍑哄簱浠诲姟";
                             }
                         }
@@ -1078,36 +1076,33 @@
                 }
             }
 
-            if (agvEndLoc == null)
+            if (endLoc == null)
             {
                 string msg = "";
-                if (applyType == "2" || applyType == "3" || applyType == "4")
+                if (applyType == "2")
                 {
                     cst.S_TYPE = cst.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>
@@ -1288,25 +1283,9 @@
                         return null;
                     }
                 }
-            }
 
-            if (agvEndLoc != null && wmsEndLoc != null)
-            {
-                destLoc = agvEndLoc.S_CODE;
-                cst.S_END_LOC = agvEndLoc.S_CODE;
-                cst.S_END_AREA = agvEndLoc.S_AREA_CODE;
-                WCSHelper.UpdateEndLoc(cst);
-
-                mst.S_END_LOC = wmsEndLoc.S_CODE;
-                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 (mesTask != null)
                 {
                     if (mst.S_TYPE.Contains("鍙枡鍑哄簱浠诲姟"))
                     {
@@ -1321,7 +1300,7 @@
                         var logicConfig = WMSHelper.getLogicConfigByJtCode(mesTask.EQP);
                         if (logicConfig != null)
                         {
-                            triggerItemOffLineFlow4(mesTask.POSITION_ID, mst.S_CNTR_CODE, logicConfig ,mesTask);
+                            triggerItemOffLineFlow4(mesTask.POSITION_ID, mst.S_CNTR_CODE, logicConfig, mesTask);
                         }
                         else
                         {
@@ -1329,6 +1308,18 @@
                         }
                     }
                 }
+            }
+
+            if (agvEndLoc != null && wmsEndLoc != null)
+            {
+                destLoc = agvEndLoc.S_CODE;
+                cst.S_END_LOC = agvEndLoc.S_CODE;
+                cst.S_END_AREA = agvEndLoc.S_AREA_CODE;
+                WCSHelper.UpdateEndLoc(cst);
+
+                mst.S_END_LOC = wmsEndLoc.S_CODE;
+                mst.S_END_AREA = wmsEndLoc.S_AREA_CODE;
+                WMSHelper.UpdateTaskEnd(mst);
             }
             return destLoc;
         }
@@ -1357,7 +1348,7 @@
                         if (locCntrRels.Count > 0)
                         {
                             cntrCode = locCntrRels[0].S_CNTR_CODE;
-                            middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
+                            middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 2, 2);
                             if (middleLoc != null)
                             {
                                 // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�@@ -1456,136 +1447,164 @@
         /// <param name="mesTaskId"></param>
         public static void callMaterialXC(string materialCode, string endLocCode, int mesTaskId)
         {
-            // 1.鏌ヨ鐜甫搴撶墿鏂欏簱瀛�-            DateTime inStockTimeXc = DateTime.MinValue;
-            List<CntrItemRel> cntrItemRelsXc = new List<CntrItemRel>();
-            if (cntrItemRelsXc.Count > 0) 
-            {
-                inStockTimeXc = cntrItemRelsXc[0].T_INBOUND_TIME;
-            }
-
-            // 2.鏌ヨ涓浆搴撳簱瀛�-            DateTime inStockTime = DateTime.MinValue;
-            var cntrItemRels = WMSHelper.getZZKInventoryInfo(materialCode);
-            if (cntrItemRels.Count > 0) 
-            {
-                inStockTime = cntrItemRels[0].T_INBOUND_TIME;   
-            }
-
-            // 3.鏍规嵁鍏堣繘鍏堝嚭璁$畻鍑哄簱鐨勭墿鏂欐槸鐜甫搴�杩樻槸涓浆搴�             var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
-            if (inStockTime >= inStockTimeXc)
+            if (mesTask != null) 
             {
-                //鏂滆鐗╂枡鍑哄簱
-                if (cntrItemRelsXc.Count > 0) 
+                // 1.鏌ヨ鐜甫搴撶墿鏂欏簱瀛樻渶鏃╁叆搴撴椂闂�+                DateTime inStockTimeXc = DateTime.MinValue;
+
+                // 2.鏌ヨ涓浆搴撳簱瀛�+                DateTime inStockTime = WMSHelper.getZZKInventoryInfo(materialCode);
+
+                // 3.鏍规嵁鍏堣繘鍏堝嚭璁$畻鍑哄簱鐨勭墿鏂欐槸鐜甫搴�杩樻槸涓浆搴�+                if (inStockTime >= inStockTimeXc)
                 {
-                    // 4.灏哅ES浠诲姟鍐欏叆鐜甫搴撲换鍔′腑闂磋〃
-                    WMSHelper.addLjXcTask(mesTask);
-                }
-            }
-            else 
-            {
-                //涓浆搴撶墿鏂欏嚭搴�-                if (cntrItemRels.Count > 0) 
-                {
-                    var cntrItemRel = cntrItemRels[0];
-                    var locCntrRel = LocationHelper.GetLocCntrByCntr(cntrItemRel.S_CNTR_CODE);
-                    if (locCntrRel != null) 
+                    Location endLoc = WMSHelper.getCallMaterialLocCode(mesTask.EQP);
+                    if (endLoc != null) 
                     {
-                      var endLoc = LocationHelper.GetLoc(locCntrRel.S_LOC_CODE);
-                        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 startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
-                            if (startLoc != null)
+                            Location endLoc = WMSHelper.getCallMaterialLocCode(mesTask.EQP);
+                            if (endLoc != null)
                             {
-                                var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
-                                if (locCntrRels.Count > 0)
+                                middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 2, 2);
+                                if (middleLoc != null)
                                 {
-                                    var cntrCode = cntrItemRel.S_CNTR_CODE;
-                                    middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
-                                    if (middleLoc != null)
+                                    // 1.鍒涘缓鎴愭柊鏈哄彨鏂欎綔涓�+                                    var wmsTask = new WMSTask()
                                     {
-                                        // 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_CNTR_CODE = cntrCode,
-                                            S_CODE = WMSHelper.GenerateTaskNo(),
+                                            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_TYPE = "鍙枡鍑哄簱浠诲姟",
-                                            S_OP_DEF_CODE = mesTaskId.ToString(),
-                                            S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�,
+                                            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 (WMSHelper.CreateWmsTask(wmsTask))
+
+                                        if (WCSHelper.CreateTask(wcsTask))
                                         {
-                                            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,
-                                            };
+                                            // 璧风偣銆佺粓鐐瑰姞閿�+                                            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);
-                                            }
-
-                                            // 棰勫垱寤轰簩娈典换鍔�-                                            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);
+                                            // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                            wmsTask.N_B_STATE = 1;
+                                            WMSHelper.UpdateTaskState(wmsTask);
                                         }
-                                    }
-                                    else
-                                    {
-                                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
+
+                                        // 棰勫垱寤轰簩娈典换鍔�+                                        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_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
+                                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝搴撳尯{startLoc.S_AREA_CODE}鏈煡璇㈠埌鍙敤鐨勬帴椹充綅");
                                 }
                             }
                             else
                             {
-                                mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
-                                WMSHelper.updateLjMesTask(mesTask);
-                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
+                                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝寮�璐т綅:{startLoc.S_CODE}寮傚父锛岀己灏戝鍣ㄤ俊鎭�);
                             }
+                        }
+                        else
+                        {
+                            mesTask.AWAIT_MSG = "搴撳瓨涓嶈冻";
+                            WMSHelper.updateLjMesTask(mesTask);
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏け璐ワ紝鐗╂枡:{materialCode}搴撳瓨涓嶈冻");
                         }
                     }
                 }
@@ -1635,7 +1654,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
@@ -1704,7 +1723,7 @@
                         S_OP_CODE = mst.S_CODE,
                         S_CODE = WCSHelper.GenerateTaskNo(),
                         S_CNTR_CODE = cst.S_CNTR_CODE,
-                        S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                        S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
                         S_START_LOC = startLoc.S_CODE,
                         S_START_AREA = startLoc.S_AREA_CODE,
                         S_END_LOC = agvEndLoc.S_CODE,
@@ -1738,7 +1757,7 @@
                             S_OP_CODE = mst.S_CODE,
                             S_CODE = WCSHelper.GenerateTaskNo(),
                             S_CNTR_CODE = cst.S_CNTR_CODE,
-                            S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                            S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
                             S_START_LOC = startLoc.S_CODE,
                             S_START_AREA = startLoc.S_AREA_CODE,
                             S_END_LOC = agvEndLoc.S_CODE,
@@ -1762,7 +1781,7 @@
                             S_OP_CODE = mst.S_CODE,
                             S_CODE = WCSHelper.GenerateTaskNo(),
                             S_CNTR_CODE = cst.S_CNTR_CODE,
-                            S_TYPE = "涓嶅悎鏍煎搧鍥炲簱",
+                            S_TYPE = "涓嶅悎鏍煎搧鍏ュ簱浠诲姟",
                             S_START_LOC = agvEndLoc.S_CODE,
                             S_START_AREA = agvEndLoc.S_AREA_CODE,
                             S_END_LOC = wmsEndLoc.S_CODE,
@@ -2134,6 +2153,83 @@
             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
         {
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs
index 6652b31..70ab6a2 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/MoboxController.cs
@@ -24,10 +24,10 @@
         [HttpPost]
         public ResponseResult manualStorage(ManualStorageModel model)
         {
-            LogHelper.Info("manualStorage Request锛� + JsonConvert.SerializeObject(model), "Mobox");
+            LogHelper.Info("浜哄伐鍏ュ簱 Request锛� + JsonConvert.SerializeObject(model), "Mobox");
             ResponseResult result = new ResponseResult();
             result = ApiHelper.manualStorage(model);
-            LogHelper.Info("manualStorage response锛� + JsonConvert.SerializeObject(model), "Mobox");
+            LogHelper.Info("浜哄伐鍏ュ簱 response锛� + JsonConvert.SerializeObject(model), "Mobox");
             return result;
         }
 
@@ -39,10 +39,10 @@
         [HttpPost]
         public ResponseResult manualDelivery(ManualDeliveryModel model)
         {
-            LogHelper.Info("manualDelivery Request锛� + JsonConvert.SerializeObject(model), "Mobox");
+            LogHelper.Info("浜哄伐鍑哄簱 Request锛� + JsonConvert.SerializeObject(model), "Mobox");
             ResponseResult result = new ResponseResult();
             result = ApiHelper.manualDelivery(model);
-            LogHelper.Info("manualDelivery response锛� + JsonConvert.SerializeObject(model), "Mobox");
+            LogHelper.Info("浜哄伐鍑哄簱 response锛� + JsonConvert.SerializeObject(model), "Mobox");
             return result;
         }
 
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/WmsController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/WmsController.cs
index 007c3b2..0ef3414 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/WmsController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/WmsController.cs
@@ -159,7 +159,7 @@
         /// <param name="model"></param>
         /// <returns></returns>
         [HttpPost]
-      /*  [Route("notifyAlarm")]*/
+        /*  [Route("notifyAlarm")]  */
         public ResponseResult unBindingLoc(LocModel model)
         {
             LogHelper.Info("UnBindingLoc 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
@@ -221,6 +221,42 @@
             return result;
         }
 
+
+        //--------------------------------- 鎻愪緵缁欐枩瑁佺殑鎺ュ彛 --------------------------------
+
+        /// <summary>
+        /// 9.鏂滆鍑哄簱浠诲姟
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost]
+        /* [Route("notifyAlarm")]*/
+        public ResponseResult createXcItemOutStockTask(XcItemOutStockModel model)
+        {
+            LogHelper.Info("XcItemOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
+            ResponseResult result = new ResponseResult();
+            result = ApiHelper.createXcItemOutStockTask(model);
+            LogHelper.Info("XcItemOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(result), "WMS");
+            return result;
+        }
+
+        public class XcItemOutStockModel 
+        {
+            public string reqId { get; set; }
+            public string reqTime { get; set; }
+            public string startLoc { get; set; }
+            public string eqNo { get; set; }  // 璁惧鍙�+            public string palletId { get; set; }  // 鎵樼洏鍙�+            /*public string lotName { get; set; }  // 鎵规鏉$爜
+            public string yclBatch { get; set; }  // 鍘熸潗鏂欐壒娆″彿
+            public string materialCode { get; set; }  // 鐗╂枡缂栫爜
+            public float qty { get; set; }  // 鐗╂枡鏁伴噺
+            public string productionDate { get; set; }  // 鐢熶骇鏃ユ湡锛坹yyy-MM-dd HH:mm:ss锛�+            public string qcStatus { get; set; }  // 妫�獙鐘舵� 0锛氭湭妫�獙 1锛氬悎鏍硷紝2锛氫笉鍚堟牸
+            public string shelfLifeDate { get; set; }  // 鏈�暱鍋滄斁鏃ユ湡
+            public string minShelfLife_Date { get; set; }  // 鏈�皬鍋滄斁鏃ユ湡*/
+        }
+
         public class LocStateFeedBackModel 
         {
             public string reqId { get; set; }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json
index 540ba02..b242eb1 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json
@@ -82,7 +82,7 @@
       "areaName": "閽㈠寘搴�闈炵洿杩�",
       "cntrType": [ 7 ],
       "type": 2
-    },
+    },  
     {
       "areaCode": "ZZFZLCK",
       "areaName": "涓浆搴�闈炵洿杩�",
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs
index 9436f87..951bf44 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs
@@ -62,21 +62,13 @@
                         if (lineSideLoc != null)
                         {
                             LogHelper.Info($"鎴愬瀷鏈哄彨鏂欎换鍔★紝MES浠诲姟ID锛歿mesTask.ID}", "WMS");
-
-                            // 2.1鎴愭柊鏈哄彨鏂�鏂滆)
                             if (mesTask.PALLET_TYPE == "5" || mesTask.PALLET_TYPE == "6")
                             {
+                                // 2.1鎴愭柊鏈哄彨鏂�鏂滆)
                                 var xcTask = WMSHelper.GetLjXcTaskById(mesTask.ID);
                                 if (xcTask == null)
                                 {
                                     ApiHelper.callMaterialXC(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
-                                }
-                                else
-                                {
-                                    mesTask.RETURN_CODE = xcTask.RETURN_CODE;
-                                    mesTask.RECEIVE_FLAG = xcTask.RECEIVE_FLAG;
-                                    mesTask.RECEIVE_DATE = xcTask.RECEIVE_DATE;
-                                    WMSHelper.updateLjMesTask(mesTask);
                                 }
                             }
                             else
@@ -91,73 +83,53 @@
         }
 
         /// <summary>
-        /// 鐩戝惉XC鍑哄簱浠诲姟涓棿琛�-        /// 璇诲彇鏂滆绔嬪簱鍑哄簱浠诲姟琛紝鏌ヨ浠诲姟鏄惁鎵ц瀹屾垚锛屽畬鎴愬垯锛岃Е鍙慉GV浠诲姟
+        /// 鐩戝惉浠诲姟涓棿琛�         /// </summary>
-        public static void MonitorXcOutTask()
+        public static void MonitorXcTask()
         {
-           var xcOutTasks = WMSHelper.getLjXcOutTask("PENDING", "2");
-            foreach (var outTask in xcOutTasks)
+           var ljMesTasks = WMSHelper.GetLjMesTaskListHD();
+            foreach (var mesTask in ljMesTasks)
             {
-               var mesTask = WMSHelper.GetLjMesTaskById(outTask.ID);
-                if (mesTask != null && mesTask.RETURN_CODE == "2")
+               var xcTask = WMSHelper.GetLjXcTaskById(mesTask.ID);
+                if (xcTask != null && xcTask.RETURN_CODE != mesTask.RETURN_CODE)
                 {
-                    Location startLoc = LocationHelper.GetLoc(outTask.POSITION_ID);
-                    if (startLoc == null) 
+                    if (xcTask.RETURN_CODE == "3")
                     {
-                        WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"鎴愬瀷鏈哄彨鏂欏嚭搴�鏂滆)锛岃捣鐐�{outTask.POSITION_ID}鍦╓MS绯荤粺涓笉瀛樺湪");
-                    }
-                    Location endLoc = WMSHelper.getCallMaterialLocCode(mesTask.EQP);
-                    if (endLoc != null) 
-                    {
-                        var wmsTask = WMSHelper.GetWmsTaskByCntr(outTask.PALLET_ID);
-                        if (wmsTask == null)
+                        var wcsTask = WCSHelper.GetTask(xcTask.AGVORDER_ID);
+                        if (wcsTask != null) 
                         {
-                            // 1.鍒涘缓鏂滆-鎴愭柊鏈哄彨鏂欎綔涓�-                            wmsTask = new WMSTask()
+                            var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+                            if (wmsTask != null) 
                             {
-                                S_CNTR_CODE = outTask.PALLET_ID,
-                                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 = mesTask.ID.ToString(),
-                                S_OP_DEF_NAME = "鎴愬瀷鏈哄彨鏂欏嚭搴撲换鍔�鏂滆)",
-                                T_START_TIME = DateTime.Now,
-                            };
-                            if (WMSHelper.CreateWmsTask(wmsTask))
-                            {
-                                WCSTask wcsTask = new WCSTask()
+                                Location startLoc = LocationHelper.GetLoc(xcTask.POSITION_ID);
+                                if (startLoc != 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,
-                                    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,
-                                };
+                                    wcsTask.S_CNTR_CODE = xcTask.PALLET_ID;
+                                    wcsTask.S_START_LOC = startLoc.S_CODE;
+                                    wcsTask.S_START_AREA = startLoc.S_AREA_CODE;
+                                    wcsTask.N_B_STATE = 0;
+                                    wcsTask.S_B_STATE = "绛夊緟";
+                                    WCSHelper.UpdateWcsTask(wcsTask);
 
-                                if (WCSHelper.CreateTask(wcsTask))
-                                {
-                                    // 璧风偣銆佺粓鐐瑰姞閿�-                                    LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
-                                    LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
-
-                                    // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                    wmsTask.S_CNTR_CODE = xcTask.PALLET_ID;
+                                    wmsTask.S_START_LOC = startLoc.S_CODE;
+                                    wmsTask.S_START_AREA = startLoc.S_AREA_CODE;
                                     wmsTask.N_B_STATE = 1;
-                                    WMSHelper.UpdateTaskState(wmsTask);
+                                    wmsTask.S_B_STATE = "鎵ц";
+                                    WMSHelper.UpdateWmsTask(wmsTask);
+
+                                    // 鏌ヨ鎵樼洏鐗╂枡淇℃伅琛�+                                    WMSHelper.updateCarrier(mesTask.PALLET_ID);
                                 }
                             }
                         }
                     }
+
+                    mesTask.POSITION_ID = xcTask.POSITION_ID;
+                    mesTask.RETURN_CODE = xcTask.RETURN_CODE;
+                    mesTask.YCL_BATCH = xcTask.YCL_BATCH;
+                    mesTask.PALLET_ID = xcTask.PALLET_ID;
+                    WMSHelper.updateLjMesTask(mesTask);
                 }
             }
         }
@@ -260,6 +232,7 @@
             WMSHelper.updateMateral();
         }
 
+
         /// <summary>
         /// 瀹氭椂鏇存柊搴撳瓨淇℃伅  鏇存柊棰戠巼锛�1鍒嗛挓
         /// </summary>
@@ -272,13 +245,11 @@
                 .Where((a,b) => a.N_CURRENT_NUM > 0 && b.S_CNTR_CODE != null && areaCodeList.Contains(a.S_AREA_CODE) )
                 .ToList();
 
+            // 鍒犻櫎鎵�湁搴撳瓨淇℃伅锛岃繘琛岄噸缃�+            db.Deleteable<LjLotOnhand>().ExecuteCommand();
+
             foreach (var loc in locations)
             {
-                var lotOnhand = db.Queryable<LjLotOnhand>().Where(a => a.STORAGE_LOCATION == loc.S_CODE).First();
-                if (lotOnhand != null) { 
-                    db.Deleteable<LjLotOnhand>().Where(a => a.ID == lotOnhand.ID).ExecuteCommand();
-                }
-
                 var locCntrRels = LocationHelper.GetLocCntr(loc.S_CODE);
                 if (locCntrRels != null && locCntrRels.Count > 0) 
                 {
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs
index fe6838e..c5e9168 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/WCSCore.cs
@@ -103,14 +103,13 @@
                                 if (container != null)
                                 {
                                     LogHelper.Info($"瀹瑰櫒鐨勫紓甯哥姸鎬佷负锛歿container.N_E_STATE}", "AGV");
-                                    string agvEndLoc = null;
                                     if (container.N_E_STATE == 0)
                                     {
-                                        agvEndLoc = ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "1");
+                                        ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "1");
                                     }
                                     else
                                     {
-                                        agvEndLoc = ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "2");
+                                        ApiHelper.AGVApplyDest(model.No, cst.S_START_LOC, cst.S_CNTR_CODE, "2");
                                     }
 
                                     ChangeParamModel paramModel = new ChangeParamModel()
@@ -120,7 +119,6 @@
                                         param = $"{model.No};{cst.S_START_LOC};{cst.S_END_LOC};4;512;0;1"
                                     };
                                     NDCApi.ChangeOrderParam(paramModel);
-                                    LogHelper.Info($"鍙樻洿AGV缁堢偣锛歿agvEndLoc}", "AGV");
                                 }
                                 else
                                 {
@@ -172,13 +170,11 @@
                                                 // 涓嶅悎鏍煎搧鍥炲簱
                                                 ApiHelper.rejectReturnStock(mst, cst);
                                             }
-                                            else
-                                            {
-                                                // 濡傛灉浣滀笟鍚嶇О涓烘垚鍨嬫満鍙枡鍑哄簱浠诲姟锛屽垯瑙﹀彂浣欐枡/绌烘墭鎼繍浠诲姟
-                                                var sideLocConfig = WMSHelper.getReturnMaterialLocCode(mst.S_END_LOC);
-                                                ApiHelper.returnMaterialOrEmptyTray(sideLocConfig.S_RETURN_LOC_CODE, sideLocConfig.EQP);
-                                            }
                                         }
+
+                                        // 濡傛灉浣滀笟鍚嶇О涓烘垚鍨嬫満鍙枡鍑哄簱浠诲姟锛屽垯瑙﹀彂浣欐枡/绌烘墭鎼繍浠诲姟
+                                        var sideLocConfig = WMSHelper.getReturnMaterialLocCode(mst.S_END_LOC);
+                                        ApiHelper.returnMaterialOrEmptyTray(sideLocConfig.S_RETURN_LOC_CODE, sideLocConfig.EQP);
                                     } 
                                 }
                             }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItem.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItem.cs
index 3e74990..885ef70 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItem.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItem.cs
@@ -24,5 +24,16 @@
         public string CREATION_DATE { get; set; } //鍒涘缓鏃ユ湡
         public string RECEIVE_FLAG { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�         public string RECEIVE_DATE { get; set; } //璇诲彇鏃ユ湡 璇诲彇鍚庢洿鏂�+
+        /*public int ID { get; set; } //涓婚敭
+        public string Material_Code { get; set; } //鐗╂枡缂栫爜
+        public string Material_Name { get; set; } //鐗╂枡绠�О
+        public string Spec { get; set; } //瑙勬牸
+        public string Model { get; set; } //鍨嬪彿
+        public string Unit { get; set; } //鍗曚綅
+        public string Memo { get; set; } //澶囨敞
+        public string creation_date { get; set; } //鍒涘缓鏃ユ湡
+        public string receive_flag { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�+        public string receive_date { get; set; } //璇诲彇鏃ユ湡 璇诲彇鍚庢洿鏂�/
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItemConfig.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItemConfig.cs
index b840031..cfebee6 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItemConfig.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjItemConfig.cs
@@ -24,5 +24,15 @@
         public string RECEIVE_FLAG { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�         public DateTime RECEIVE_DATE { get; set; } //璇诲彇鏃ユ湡
 
+        /*public int ID { get; set; } //涓婚敭
+        public string Material_Code { get; set; } //鐗╂枡缂栫爜
+        public string Material_Name { get; set; } //鐗╂枡鍚嶇О
+        public string Pallet_Type { get; set; } //鎵樼洏绫诲瀷
+        public string QTY { get; set; } //瀹夊叏搴撳瓨閲�宸ヨ鏁伴噺
+        public string Transfer_Flag { get; set; } //杞繍鏍囪 Y锛氫紭鍏堣浆杩�N:
+        public DateTime creation_date { get; set; } //鍒涘缓鏃ユ湡
+        public string receive_flag { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�+        public DateTime receive_date { get; set; } //璇诲彇鏃ユ湡*/
+
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotCarrier.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotCarrier.cs
index e483aa3..9034570 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotCarrier.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotCarrier.cs
@@ -28,5 +28,20 @@
         public string CREATION_DATE { get; set; } //鍒涘缓鏃ユ湡
         public string RECEIVE_FLAG { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�         public string RECEIVE_DATE { get; set; } //璇诲彇鏃ユ湡
+
+
+        /*public int ID { get; set; } //涓婚敭
+        public string Pallet_Id { get; set; } //鎵樼洏鍙�+        public string lot_name { get; set; } //鎵规鏉$爜 (鎵规琛ㄦ洿鏂�
+        public string YCL_BATCH { get; set; } //鍘熸潗鏂欐壒娆″彿
+        public string MaterialCode { get; set; } //鐗╂枡缂栫爜
+        public int QTY { get; set; } //鐗╂枡鏁伴噺
+        public string Production_date { get; set; } //鐢熶骇鏃ユ湡
+        public string QC_Status { get; set; } //妫�獙鐘舵�
+        public string ShelfLife_Date { get; set; } //鏈�暱鍋滄斁鏃ユ湡
+        public string MinShelfLife_Date { get; set; } //鏈�皬鍋滄斁鏃ユ湡
+        public string creation_date { get; set; } //鍒涘缓鏃ユ湡
+        public string receive_flag { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�+        public string receive_date { get; set; } //璇诲彇鏃ユ湡*/
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs
index cd726eb..2029ae7 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs
@@ -25,5 +25,20 @@
         public string IN_DATE { get; set; } //鍏ュ簱鏃堕棿
         public DateTime CREATION_DATE { get; set; } //鍒涘缓鏃ユ湡
         public string WAREHOUSE_TYPE { get; set; } //鍖哄垎涓嶅悓鍘傚锛�/鎬濆皵鐗癸紝2/鏉弶锛�+
+
+
+
+        /*public int ID { get; set; } //涓婚敭
+        public string Material_Code { get; set; } //鐗╂枡缂栫爜
+        public string lot_name { get; set; } //鎵规鏉$爜
+        public string Pallet_Id { get; set; } //鎵樼洏鍙�+        public string Storage_Location { get; set; } //搴撲綅
+        public string QC_Status { get; set; } //鐘舵�
+        public string Unit { get; set; } //鍗曚綅
+        public float QTY { get; set; } //鏁伴噺
+        public string In_Date { get; set; } //鍏ュ簱鏃堕棿
+        public DateTime creation_date { get; set; } //鍒涘缓鏃ユ湡
+        public string warehouse_type { get; set; } //鍖哄垎涓嶅悓鍘傚锛�/鎬濆皵鐗癸紝2/鏉弶锛�/
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOutTask.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOutTask.cs
index af7b3b3..0ce6a41 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOutTask.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOutTask.cs
@@ -29,5 +29,21 @@
         public string RECEIVE_DATE { get; set; } //璇诲彇鏃ユ湡 
         public string TASK_STATUS { get; set; } //浠诲姟鎵ц鐘舵� 1锛氭墽琛屼腑锛�锛氬畬鎴� 3锛氭満鍙板凡杩斿洖
         public string EQP { get; set; } //鏈哄彴缂栧彿
+
+
+        /*public int ID { get; set; } //涓婚敭
+        public string Material_Code { get; set; } //鐗╂枡缂栫爜
+        public string lot_name { get; set; } //鎵规鏉$爜
+        public string Pallet_Id { get; set; } //鎵樼洏鍙�+        public string Position_Id { get; set; } //鐐逛綅缂栧彿
+        public string QC_Status { get; set; } //鐘舵�
+        public string Unit { get; set; } //鍗曚綅
+        public int QTY { get; set; } //鏁伴噺
+        public string Out_Date { get; set; } //鍑哄簱鏃堕棿
+        public string creation_date  { get; set; } //鍒涘缓鏃ユ湡
+        public string receive_flag { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�+        public string receive_date { get; set; } //璇诲彇鏃ユ湡 
+        public string Task_Status { get; set; } //浠诲姟鎵ц鐘舵� 1锛氭墽琛屼腑锛�锛氬畬鎴� 3锛氭満鍙板凡杩斿洖
+        public string EQP { get; set; } //鏈哄彴缂栧彿*/
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotStatus.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotStatus.cs
index 970d811..adc5567 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotStatus.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotStatus.cs
@@ -25,5 +25,20 @@
         public DateTime CREATION_DATE { get; set; } //鍒涘缓鏃ユ湡
         public string RECEIVE_FLAG { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�         public DateTime RECEIVE_DATE { get; set; } //璇诲彇鏃ユ湡
+
+
+
+
+       /* public int ID { get; set; } //涓婚敭
+        public string Material_Code { get; set; } //鐗╂枡缂栫爜
+        public string lot_name { get; set; } //鎵规鏉$爜
+        public string QC_Status { get; set; } //鐘舵�
+        public string Unit { get; set; } //鍗曚綅
+        public string QTY { get; set; } //鏁伴噺
+        public string ShelfLife_Date { get; set; } //鏈�暱鍋滄斁鏃ユ湡 浼氬彉鏇�+        public string MinShelfLife_Date { get; set; } //鏈�皬鍋滄斁鏃ユ湡 浼氬彉鏇�+        public DateTime creation_date { get; set; } //鍒涘缓鏃ユ湡
+        public string receive_flag { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�+        public DateTime receive_date { get; set; } //璇诲彇鏃ユ湡*/
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjMesTask.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjMesTask.cs
index e58d017..a8cdeb0 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjMesTask.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjMesTask.cs
@@ -33,5 +33,29 @@
         public string AWAIT_MSG { get; set; } // 绛夊緟娑堟伅
         public bool IS_FINISH { get; set; } // 鏄惁瀹屾垚涓婃枡
         public string RECEIVE_MSG { get; set; } //閿欒淇℃伅 閿欒鏃讹紝AGV鍐欏叆璇︾粏閿欒淇℃伅
+
+
+
+
+
+       /* public int ID { get; set; } //涓婚敭
+        public string Position_Id { get; set; } //鐐逛綅缂栧彿
+        public string Return_Code { get; set; } //鍙嶉鏍囪瘑(AGV绯荤粺鍐欏叆) 0:榛樿鍊�1锛氫换鍔″凡鐢熸垚 2锛氫换鍔¤繍琛屼腑 3锛氫换鍔″畬鎴�4锛氫换鍔″け璐�5锛氫换鍔″彇娑�6锛氬叾浠栭敊璇�+        public string Msg_Type { get; set; } //娑堟伅绫诲瀷 0锛氳鏂� 1锛氳繑杞�+        public string Pallet_Type { get; set; } //鎵樼洏绫诲瀷  1.鑳庨潰锛�.鑳庝晶锛�.鍐呰‖锛�.甯樺竷锛�.鐜甫锛�.鍐犲甫锛�.閽㈠寘
+        public string Material_Name { get; set; } //鐗╂枡鍚嶇О 瑕佹枡鏃剁粰
+        public string Material_Code { get; set; } //鐗╂枡缂栫爜 瑕佹枡鏃剁敤锛岃鏂欐椂锛屽鏋滅墿鏂欑紪鐮佷负绌猴紝浠h〃瑕佺┖宸ヨ
+        public int QTY { get; set; } //鏁伴噺 杩旇溅鏃剁敤锛屾暟閲忎负0浠h〃杩旂┖杞︼紝鏁伴噺涓�浠h〃杩旀弧鏂欙紝鏁伴噺涓�1浠h〃杩斾綑鏂欍� 鐗╂枡淇℃伅鍦ㄣ�鎵樼洏涓庝俊鎭搴旇〃銆戜腑
+        public string Ycl_batch { get; set; } //鍘熸潗鏂欐壒娆″彿
+        public string Pallet_Id { get; set; } //鎵樼洏鍙�杩旇溅鏃剁敤锛屾牴鎹墭鐩樺彿鏌ユ壘銆愭墭鐩樹笌淇℃伅瀵瑰簲琛ㄣ�涓殑淇℃伅
+        public string AGVOrder_ID { get; set; } //AGV浠诲姟鍙�MES涓嶇敤鍐欏叆锛孉GV浣跨敤
+        public string creation_date { get; set; } //鍒涘缓鏃ユ湡
+        public string receive_flag { get; set; } //璁板綍鐘舵� PENDING锛氶粯璁�COMPLETE锛氳鍙�+        public string receive_date { get; set; } //璇诲彇鏃ユ湡 璇诲彇鍚庢洿鏂�+        public string EQP { get; set; } //鏈哄彴缂栧彿
+        public string Plan_Id { get; set; } //璁″垝鍙�+        public string Await_Msg { get; set; } // 绛夊緟娑堟伅
+        public bool Is_Finish { get; set; } // 鏄惁瀹屾垚涓婃枡
+        public string Receive_Msg { get; set; } //閿欒淇℃伅 閿欒鏃讹紝AGV鍐欏叆璇︾粏閿欒淇℃伅*/
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs
index 5ad8998..739910e 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs
@@ -9,6 +9,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Security.Cryptography;
+using static HH.WCS.Mobox3.FJJT.dispatch.XcDispatch;
 
 namespace HH.WCS.Mobox3.FJJT.process {
     internal class TaskProcess {
@@ -62,42 +63,89 @@
         internal static void OperateReq(string no, int state, string forkliftNo, string extData) {
             LogHelper.Info($"寮�瀹夊叏璇锋眰锛屼换鍔″彿:{no},璇锋眰鐮�{state}", "HosttoagvTask");
             var cst = WCSHelper.GetTask(no);
-            var taskAction = WCSHelper.getActionRecord(no, state);
-            if (taskAction != null)
+            if (cst != null) 
             {
-                LogHelper.Info($"鍐嶆瀹夊叏璇锋眰锛屾煡璇㈣澶囨槸鍚﹀弽棣�, "HosttoagvTask");
-                if (taskAction.N_S_STATUS == 1) 
+                var taskAction = WCSHelper.getActionRecord(no, state);
+                if (taskAction != null)
                 {
-                    LogHelper.Info($"鍐嶆瀹夊叏璇锋眰锛岃澶囧凡鍙嶉", "HosttoagvTask");
-                    NDCApi.ChangeOrderParam(no, 8, "1");
+                    LogHelper.Info($"鍐嶆瀹夊叏璇锋眰锛屾煡璇㈣澶囨槸鍚﹀弽棣�, "HosttoagvTask");
+                    if (taskAction.N_S_STATUS == 1)
+                    {
+                        LogHelper.Info($"鍐嶆瀹夊叏璇锋眰锛岃澶囧凡鍙嶉", "HosttoagvTask");
+                        NDCApi.ChangeOrderParam(no, 8, "1");
+                    }
                 }
-            }
-            else 
-            {
-                LogHelper.Info($"棣栨杩涜瀹夊叏璇锋眰锛屼换鍔″彿:{no},璇锋眰鐮�{state}", "HosttoagvTask");
-                bool result = false;
-                if (state == 1101)
+                else
                 {
-                    result = WCSDispatch.safetyInteraction(cst.S_CODE ,cst.S_START_LOC, "1");  //璇锋眰鍙栬揣锛�-                }
-                if (state == 1102)
-                {
-                    result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "2");  //璇锋眰杩旇揣
-                }
-                if (state == 1103)
-                {
-                    result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "3");  //鍙栬揣瀹屾垚鍏佽绂诲紑
-                }
-                if (state == 1104)
-                {
-                    result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "4");  //鏀捐揣瀹屾垚鍏佽绂诲紑
-                }
+                    LogHelper.Info($"棣栨杩涜瀹夊叏璇锋眰锛屼换鍔″彿:{no},璇锋眰鐮�{state}", "HosttoagvTask");
+                    bool result = false;
+                    if (state == 1101)
+                    {
+                        if (cst.S_START_AREA == "")
+                        {
+                            result = XcDispatch.CanOut(new SafetyRequest() { stnNo = cst.S_START_LOC, taskNo = cst.S_CODE });
+                            if (result) 
+                            {
+                                NDCApi.ChangeOrderParam(no, 8, "1");
+                            }
+                        }
+                        else 
+                        {
+                            result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "1");  //璇锋眰鍙栬揣锛�+                        }
+                    }
+                    if (state == 1102)
+                    {
+                        if (cst.S_START_AREA == "")
+                        {
+                            result = XcDispatch.CanIn(new SafetyRequest() { stnNo = cst.S_END_LOC, taskNo = cst.S_CODE });
+                            if (result)
+                            {
+                                NDCApi.ChangeOrderParam(no, 8, "1");
+                            }
+                        }
+                        else
+                        {
+                            result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_END_LOC, "2");  //璇锋眰鏀捐揣
+                        }
+                    }
+                    if (state == 1103)
+                    {
+                        if (cst.S_START_AREA == "")
+                        {
+                            result = XcDispatch.loadComplete(new SafetyRequest() { stnNo = cst.S_END_LOC, taskNo = cst.S_CODE });
+                            if (result)
+                            {
+                                NDCApi.ChangeOrderParam(no, 8, "1");
+                            }
+                        }
+                        else 
+                        {
+                            result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "3");  //鍙栬揣瀹屾垚鍏佽绂诲紑
+                        }
+                    }
+                    if (state == 1104)
+                    {
+                        if (cst.S_START_AREA == "")
+                        {
+                            result = XcDispatch.putComplete(new SafetyRequest() { stnNo = cst.S_END_LOC, taskNo = cst.S_CODE });
+                            if (result)
+                            {
+                                NDCApi.ChangeOrderParam(no, 8, "1");
+                            }
+                        }
+                        else 
+                        {
+                            result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_END_LOC, "4");  //鏀捐揣瀹屾垚鍏佽绂诲紑
+                        }
+                    }
 
-                // 瀹夊叏璇锋眰鍙戦�鎴愬姛锛屾坊鍔犱换鍔″姩浣滆褰�-                if (result) 
-                {
-                    WCSHelper.AddActionRecord(no, state, forkliftNo, extData);
-                    LogHelper.Info($"棣栨杩涜瀹夊叏璇锋眰鎴愬姛", "HosttoagvTask");
+                    // 瀹夊叏璇锋眰鍙戦�鎴愬姛锛屾坊鍔犱换鍔″姩浣滆褰�+                    if (result)
+                    {
+                        WCSHelper.AddActionRecord(no, state, forkliftNo, extData);
+                        LogHelper.Info($"棣栨杩涜瀹夊叏璇锋眰鎴愬姛", "HosttoagvTask");
+                    }
                 }
             }
         }
@@ -143,26 +191,28 @@
         /// <param name="mst"></param>
         internal static bool SendTask(WCSTask mst) {
             var result = false;
-            var start = "0"; var end = "0";
             if (mst.N_B_STATE == 0) {
                 if (mst.S_SCHEDULE_TYPE == "NDC") 
                 {
-                    start = LocationHelper.GetAgvSite(mst.S_START_LOC);
-                    end = LocationHelper.GetAgvSite(mst.S_END_LOC);
-
-                    var dic = new List<param>();
-                    dic.Add( new param() { name = "No" , value = ""});
-                    dic.Add( new param() { name = "From", value = ""});
-                    dic.Add( new param() { name = "To", value = ""});
-                    dic.Add( new param() { name = "3" , value = "4"});
-                    dic.Add( new param() { name = "4" , value = "512"});
-                    dic.Add( new param() { name = "5" , value = "0"});
-                    var res = NDCApi.AddOrderNew(1,mst.N_PRIORITY,mst.S_CODE,dic);
-                    if (res != null && res.err_code == 0 ) {
-                        //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇
-                        mst.N_B_STATE = 1;
-                        WCSHelper.UpdateStatus(mst);
-                        result = true;
+                    var startLoc = LocationHelper.GetLoc(mst.S_START_LOC);
+                    var endLoc = LocationHelper.GetLoc(mst.S_END_LOC);
+                    if (startLoc != null && endLoc != null) 
+                    {
+                        var dic = new List<param>();
+                        dic.Add(new param() { name = "No", value = mst.S_CODE });
+                        dic.Add(new param() { name = "From", value = mst.S_START_LOC });
+                        dic.Add(new param() { name = "To", value = mst.S_END_LOC });
+                        dic.Add(new param() { name = "3", value = "4" });
+                        dic.Add(new param() { name = "4", value = "512" });
+                        dic.Add(new param() { name = "5", value = "0" });
+                        var res = NDCApi.AddOrderNew(1, mst.N_PRIORITY, mst.S_CODE, dic);
+                        if (res != null && res.err_code == 0)
+                        {
+                            //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇
+                            mst.N_B_STATE = 1;
+                            WCSHelper.UpdateStatus(mst);
+                            result = true;
+                        }
                     }
                 }
                 else if (mst.S_SCHEDULE_TYPE == "WCS") {
@@ -175,7 +225,6 @@
                     mst.N_B_STATE = 1;
                     WCSHelper.UpdateStatus(mst);
                 }
-
             }
             return result;
         }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/util/SqlHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/util/SqlHelper.cs
index bc0eb0c..2829ef5 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/util/SqlHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/util/SqlHelper.cs
@@ -142,7 +142,7 @@
 
             db.Aop.OnExecutingChangeSql = (sql, pars) => //鍙互淇敼SQL鍜屽弬鏁扮殑鍊�             {
-                if (db.CurrentConnectionConfig.DbType == DbType.Oracle && pars.Any())
+                if (pars != null && db.CurrentConnectionConfig.DbType == DbType.Oracle && pars.Any())
                 {
                     var input = sql;
                     Stack<int> stack = new Stack<int>();
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs
index 49e4e08..e05968b 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/ContainerHelper.cs
@@ -18,20 +18,6 @@
             var date = DateTime.Now.ToString("yyMMdd");
             return $"TP{date}{id.ToString().PadLeft(4, '0')}";
         }
-        
-        /// <summary>
-        /// TN_ContainerHelper.test("4L澶╃劧姘寸瑁�鍏�, 50, "335ml涓滄柟鏍戝彾15鍏�, 30);
-        /// </summary>
-        /// <param name="item1"></param>
-        /// <param name="qty1"></param>
-        /// <param name="item2"></param>
-        /// <param name="qty2"></param>
-        //internal static void test(string item1, int qty1, string item2, int qty2) {
-        //    var db = new SqlHelper<object>().GetInstance();
-        //    var cntr = db.Queryable<TN_Container>().Includes(a => a.CntrItemRelList).
-        //        Where(a => a.CntrItemRelList.Count(b => b.S_ITEM_CODE == item1 && int.Parse(b.F_QTY) > qty1) > 0
-        //        && a.CntrItemRelList.Count(b => b.S_ITEM_CODE == item2 && int.Parse(b.F_QTY) > qty2) > 0).First();
-        //}
 
         /// <summary>
         /// 鍒ゆ柇瀹瑰櫒鏄惁鏈夌墿鏂欎俊鎭�@@ -44,27 +30,6 @@
             return db.Queryable<LocCntrRel>().Count(a => a.S_LOC_CODE.Trim() == cntr) == 0;
 
         }
-
-        /*internal static bool AddCntr(string cntrCode, string itemCode) {
-            var res = false;
-            var db = new SqlHelper<object>().GetInstance();
-            var TN_Container = new Container { S_CODE = cntrCode };
-            var cntrItemRel = new CntrItemRel { S_CNTR_CODE = cntrCode, S_ITEM_CODE = itemCode };
-            try {
-                db.BeginTran();
-
-                db.Insertable<Container>(TN_Container).ExecuteCommand();
-                db.Insertable<CntrItemRel>(cntrItemRel).ExecuteCommand();
-
-                db.CommitTran();
-                res = true;
-            }
-            catch (Exception ex) {
-                db.RollbackTran();
-
-            }
-            return res;
-        }*/
 
         internal static bool AddCntr(string cntrCode ,int detallCount = 0)
         {
@@ -159,58 +124,11 @@
             return db.Updateable(cntrItem).ExecuteCommand()>0;
         }
 
-        /// <summary>
-        /// 鐗╂枡淇℃伅缁戝畾鍒版弧瀹瑰櫒涓�-        /// </summary>
-        /// <param name="cntrCode"></param>
-        /// <param name="itemCode"></param>
-        /// <param name="batchNo"></param>
-        /// <param name="qty"></param>
-        /// <returns></returns>
-        internal static bool BindCntrItem(Container cntr, string itemCode, string batchNo, float qty) {
-            var res = false;
-            var db = new SqlHelper<object>().GetInstance();
-            try {
-                db.BeginTran();
-                //1.鏌ョ湅鏄惁鏈夌浉鍚岀墿鏂欐壒娆$殑淇℃伅锛屽鏋滄湁瑕佺疮鍔狅紝涓嶅悓鎵规鐨勫彲浠ュ垎寮�-                var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo).First();
-                if (cir != null) {
-                    cir.F_QTY += qty;
-                    db.Updateable(cir).UpdateColumns(it => new { it.F_QTY }).ExecuteCommand();
-                }
-                else {
-                    //2.鎻掑叆鏂扮殑瀹瑰櫒鐗╂枡淇℃伅锛堝鍣ㄥ彿涓嶅彉锛�-                    cir = new CntrItemRel { S_CNTR_CODE = cntr.S_CODE.Trim(), S_BATCH_NO = batchNo, F_QTY = qty, S_ITEM_CODE = itemCode };
-                    db.Insertable<CntrItemRel>(cir).ExecuteCommand();
-                }
-                var count = db.Queryable<CntrItemRel>().Count(a => a.S_CNTR_CODE == cntr.S_CODE);
-                cntr.N_DETAIL_COUNT = count;
-                cntr.C_ENABLE = "N";//鐮佺洏鍚庡皢鎵樼洏璁剧疆涓轰笉鍙敤鐘舵�锛屽叆搴撳悗鍙樻垚鍙敤
-                db.Updateable(cntr).UpdateColumns(it => new { it.N_DETAIL_COUNT, it.C_ENABLE}).ExecuteCommand();
-
-                db.CommitTran();
-                res = true;
-            }
-            catch (Exception ex) {
-                db.RollbackTran();
-                Console.WriteLine(ex.Message);
-            }
-
-            return res;
-        }
-
-        
-       
-        
-
         internal static bool UpdateCntr(Container container)
         {
             var db = new SqlHelper<object>().GetInstance();
             return db.Updateable(container).ExecuteCommand()>0;
         }
-
-        
-       
 
         /// <summary>
         /// 
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WCSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WCSHelper.cs
index 02fa96c..9d9103f 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WCSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WCSHelper.cs
@@ -25,6 +25,7 @@
         {
             var res = false;
             var db = new SqlHelper<WCSTask>().GetInstance();
+            task.T_MODIFY = DateTime.Now;
             res = db.Updateable(task).ExecuteCommand() > 0;
             return res;
         }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
index 7acb4b7..d88c163 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
@@ -11,6 +11,7 @@
 using System.Globalization;
 using System.Linq;
 using System.Linq.Expressions;
+using System.Numerics;
 using System.Reflection;
 using System.Runtime.ConstrainedExecution;
 using System.Threading.Tasks;
@@ -135,7 +136,13 @@
             task.S_B_STATE = WMSTask.GetStateStr(task.N_B_STATE);
             db.Updateable<WMSTask>(task).UpdateColumns(a => new { a.N_TYPE,a.N_B_STATE, a.S_B_STATE, a.T_MODIFY,a.T_END_TIME }).ExecuteCommand();
         }
-        
+
+        internal static void UpdateWmsTask(WMSTask task)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            task.T_MODIFY = DateTime.Now;
+            db.Updateable<WMSTask>(task).ExecuteCommand();
+        }
 
         internal static bool UpdateTaskEnd(WMSTask a) {
             var db = new SqlHelper<object>().GetInstance();
@@ -271,14 +278,14 @@
         /// </summary>
         /// <param name="itemCode"></param>
         /// <returns></returns>
-        public static List<CntrItemRel> getZZKInventoryInfo(string itemCode) 
+        public static DateTime getZZKInventoryInfo(string itemCode) 
         {
+            DateTime inboundTime = DateTime.MinValue;
             var db = new SqlHelper<object>().GetInstance();
-            List < CntrItemRel > cntrItemRels = new List<CntrItemRel>();
             string areaCode = Settings.areaPropertyList.Where(a => a.areaName.Contains("涓浆搴�)).Select(a => a.areaCode).FirstOrDefault();
             if (areaCode != null) 
             {
-                cntrItemRels = db.Queryable<CntrItemRel>()
+                    inboundTime = db.Queryable<CntrItemRel>()
                     .LeftJoin<LocCntrRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE)
                     .LeftJoin<Location>((a, b, c) => b.S_LOC_CODE == c.S_CODE)
                     .LeftJoin<Container>((a, b, c, d) => a.S_CNTR_CODE == d.S_CODE)
@@ -289,9 +296,10 @@
                                             && d.N_E_STATE == 0             // 鎵樼洏姝e父
                     )
                     .OrderBy((a, b, c, d) => a.T_INBOUND_TIME)
-                    .ToList();
+                    .Select((a, b, c, d) => a.T_INBOUND_TIME)
+                    .First();
             }
-            return cntrItemRels;
+            return inboundTime;
         }
 
         /// <summary>
@@ -314,9 +322,14 @@
                 .LeftJoin<CntrItemRel>((a, b, c, d) => c.S_CODE == d.S_CNTR_CODE)
                 .Where((a, b, c, d) =>  a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE.Trim() == "Y"  );
 
-            if (areaCode != null && areaCode != "") 
+            if (areaCode != null && areaCode != "")
             {
-                queryable = queryable.Where((a, b, c, d ) => a.S_AREA_CODE.Trim() == areaCode);
+                queryable = queryable.Where((a, b, c, d) => a.S_AREA_CODE.Trim() == areaCode);
+            }
+            else 
+            {
+                List<string> areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList();
+                queryable = queryable.Where((a, b, c, d) => areaCodes.Contains(a.S_AREA_CODE.Trim()));
             }
             if (traySatus == 0)
             {
@@ -428,7 +441,7 @@
             return location;
         }
 
-        public static bool addAlarmRecord(string alarmType , string alarmLevel ,string alarmMsg ,string logSite = "WMS") {
+        public static bool addAlarmRecord(string alarmType  , string alarmLevel ,string alarmMsg ,string logSite = "WMS") {
             var db = new SqlHelper<object>().GetInstance();
             bool result = true;
             LogHelper.Info(alarmMsg, logSite);
@@ -510,8 +523,8 @@
         /// 1.鏌ヨ寮傚父鍖鸿揣浣�         /// </summary>
         /// <param name="areaCode">搴撳尯</param>
-        /// <param name="property">璐т綅灞炴�锛�.鐩磋繛 2.闈炵洿杩烇級</param>
         /// <param name="type">鍔ㄤ綔绫诲瀷锛�.浜哄伐鎺ラ┏浣�1.鍏ュ簱鎺ラ┏浣�2.鍑哄簱鎺ラ┏浣嶏級</param>
+        /// <param name="property">璐т綅灞炴�锛�.鐩磋繛 2.闈炵洿杩烇級</param>
         /// <returns></returns>
         public static Location GetTransfeRelevanceLoc(string areaCode  ,int type ,int property )
         {
@@ -601,46 +614,140 @@
 
         /// <summary>
         /// 璇诲彇MES涓嬫枡浠诲姟
-        /// 1.澶囦唤瀹瑰櫒鐗╂枡淇℃伅  
-        /// 2.鏇存柊涓棿琛ㄧ姸鎬佷负宸茶
+        /// 1.璇诲彇MES涓嬪彂浠诲姟琛�+        /// 2.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+        /// 3.璇诲彇鍩虹鐗╂枡淇℃伅琛�         /// </summary>
         /// <param name="taskNo"></param>
         /// <param name="id"></param>
         /// <returns></returns>
-        internal static LjMesTask readLjMesOffItemTask(string taskNo , int id)
+        internal static bool readLjMesOffItemTask(string taskNo , int id)
         {
+            bool res = true;
             LogHelper.Info($"鏌ヨ鍒癕ES涓嬪彂WMS浠诲姟,mesTaskId:{id},浠诲姟鍙�{taskNo}"  , "WMS");
             var db = new SqlHelper<object>().GetInstance();
             try
             {
                 db.BeginTran();
-                // 1.鏌ヨMES浠诲姟琛�+                // 1.璇诲彇MES涓嬪彂浠诲姟琛�                 var mesTask = db.Queryable<LjMesTask>().Where(a => a.ID == id && a.RECEIVE_FLAG.Trim() == "PENDING" ).OrderByDescending(a => a.T_CREATE).First();
                 if (mesTask != null)
                 {
-                    // 閲嶇疆绌哄伐瑁呬俊鎭�-                    ContainerHelper.AddContainer(mesTask.PALLET_ID, int.Parse(mesTask.PALLET_TYPE),mesTask.QTY == 0 ? 0 : 1);
-
-                    mesTask.AGVORDER_ID = taskNo;
-                    mesTask.RETURN_CODE = "1";
-                    mesTask.RECEIVE_FLAG = "COMPLETE";
-                    mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
-                    db.Updateable(mesTask).ExecuteCommand();
+                    // 2.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+                    res = updateCarrier(mesTask.PALLET_ID);
+                    if (res) 
+                    {
+                        mesTask.AGVORDER_ID = taskNo;
+                        mesTask.RETURN_CODE = "1";
+                        mesTask.RECEIVE_FLAG = "COMPLETE";
+                        mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                        db.Updateable(mesTask).ExecuteCommand();
+                    }
                 }
                 else 
                 {
-                    LogHelper.Info("鏈煡璇㈠埌MES涓嬪彂WMS浠诲姟", "WMS");
+                    WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏈煡璇㈠埌MES涓嬪彂鐨勪换鍔�MES浠诲姟ID锛歿id}");
                 }
                 db.CommitTran();
-                return mesTask;
             }
             catch (Exception ex)
             {
+                res = false;
                 db.RollbackTran();
                 LogHelper.Info($"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}" , "WMS");
                 WMSHelper.addAlarmRecord("绯荤粺閿欒", "楂�, $"璇诲彇MES涓嬪彂浠诲姟澶辫触锛岄敊璇師鍥�{ex.Message}");
             }
-            return null;
+            return res;
+        }
+
+        public static bool updateCarrier(string palletId) 
+        {
+            bool res = true;
+            var db = new SqlHelper<object>().GetInstance();
+            var container = ContainerHelper.GetCntr(palletId);
+            if (container != null)
+            {
+                // 1.璇诲彇鎵樼洏鐗╂枡淇℃伅琛�+                var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.PALLET_ID == palletId).OrderByDescending(a => a.CREATION_DATE).First();
+                if (lotCarrier != null)
+                {
+                    CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == palletId).First();
+                    if (cntrItemRel != null)
+                    {
+                        cntrItemRel.S_CNTR_CODE = lotCarrier.PALLET_ID;
+                        cntrItemRel.S_BATCH_NO = lotCarrier.LOT_NAME;
+                        cntrItemRel.S_SERIAL_NO = lotCarrier.YCL_BATCH;
+                        cntrItemRel.S_ITEM_CODE = lotCarrier.MATERIALCODE;
+                        cntrItemRel.F_QTY = lotCarrier.QTY;
+                        cntrItemRel.D_PRD_DATE = lotCarrier.PRODUCTION_DATE;
+                        cntrItemRel.S_ITEM_STATE = lotCarrier.QC_STATUS;
+                        cntrItemRel.D_EXP_DATE = lotCarrier.SHELFLIFE_DATE;
+                        cntrItemRel.D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE;
+                        db.Updateable(cntrItemRel).ExecuteCommand();
+                    }
+                    else
+                    {
+                        cntrItemRel = new CntrItemRel()
+                        {
+                            S_CNTR_CODE = lotCarrier.PALLET_ID,
+                            S_BATCH_NO = lotCarrier.LOT_NAME,
+                            S_SERIAL_NO = lotCarrier.YCL_BATCH,
+                            S_ITEM_CODE = lotCarrier.MATERIALCODE,
+                            F_QTY = lotCarrier.QTY,
+                            D_PRD_DATE = lotCarrier.PRODUCTION_DATE,
+                            S_ITEM_STATE = lotCarrier.QC_STATUS,
+                            D_EXP_DATE = lotCarrier.SHELFLIFE_DATE,
+                            D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE,
+                        };
+                        db.Insertable(cntrItemRel).ExecuteCommand();
+                    }
+
+                    lotCarrier.RECEIVE_FLAG = "COMPLETE";
+                    lotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
+                    db.Updateable(lotCarrier).UpdateColumns(a => new { a.RECEIVE_FLAG, a.RECEIVE_DATE }).ExecuteCommand();
+
+                    // 璇诲彇鍩虹鐗╂枡淇℃伅琛�+                    var material = db.Queryable<LjItem>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING" && a.MATERIAL_CODE == lotCarrier.MATERIALCODE).OrderByDescending(a => a.CREATION_DATE).First();
+                    if (material != null)
+                    {
+                        TN_Material tn_material = db.Queryable<TN_Material>().Where(a => a.S_ITEM_CODE == material.MATERIAL_CODE).First();
+
+                        if (tn_material != null)
+                        {
+                            tn_material.S_ITEM_CODE = material.MATERIAL_CODE;
+                            tn_material.S_ITEM_NAME = material.MATERIAL_NAME;
+                            tn_material.S_SPEC = material.SPEC;
+                            tn_material.S_MODEL = material.MODEL;
+                            tn_material.S_UNIT = material.UNIT;
+                            tn_material.S_MEMO = material.MEMO;
+                            db.Updateable(material).ExecuteCommand();
+                        }
+                        else
+                        {
+                            tn_material = new TN_Material()
+                            {
+                                S_ITEM_CODE = material.MATERIAL_CODE,
+                                S_ITEM_NAME = material.MATERIAL_NAME,
+                                S_SPEC = material.SPEC,
+                                S_MODEL = material.MODEL,
+                                S_UNIT = material.UNIT,
+                                S_MEMO = material.MEMO,
+                            };
+                            db.Insertable(material).ExecuteCommand();
+                        }
+
+                        material.RECEIVE_FLAG = "COMPLETE";
+                        material.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
+                        db.Updateable(material).ExecuteCommand();
+                    }
+                }
+            }
+            else 
+            {
+                WMSHelper.addAlarmRecord("娴佺▼寮傚父", "涓�, $"鏈湪WMS绯荤粺涓煡璇㈠埌瀹瑰櫒淇℃伅,瀹瑰櫒缂栫爜锛歿palletId}");
+                res = false;
+            }
+            return res;
         }
 
         /// <summary>
@@ -652,6 +759,7 @@
             var lotCarrierList = db.Queryable<LjLotCarrier>().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList();
             foreach (var lotCarrier in lotCarrierList)
             {
+                // 鍐欏叆鏂滆鎵樼洏鐗╂枡淇℃伅涓棿琛�                 CntrItemRel cntrItemRel = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == lotCarrier.PALLET_ID).First();
 
                 if (cntrItemRel != null)
@@ -738,7 +846,6 @@
         /// <returns></returns>
         internal static LjLotCarrier getLjCntrMaterial(string trayNo)
         {
-            // 1.鏌ヨMES浠诲姟琛�             var db = new SqlHelper<object>().GetInstance();
             var lotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.PALLET_ID.Trim() == trayNo).First();
             return lotCarrier;
@@ -869,6 +976,28 @@
         }
 
         /// <summary>
+        /// 鏌ヨMES浠诲姟琛�鐜甫)
+        /// </summary>
+        /// <returns></returns>
+        public static List<LjMesTask> GetLjMesTaskListHD()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            return db.Queryable<LjMesTask>().Where(a => (a.PALLET_TYPE == "5" || a.PALLET_TYPE == "6") && (a.RETURN_CODE.Trim() == "0" || a.RETURN_CODE.Trim() == "1" || a.RETURN_CODE.Trim() == "2")).ToList();
+        }
+
+        /// <summary>
+        /// 鏇存柊MES浠诲姟鐘舵�
+        /// </summary>
+        /// <returns></returns>
+        public static bool updateMesTaskStatus(LjMesTask mesTask)
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            result = db.Updateable<LjMesTask>(mesTask).ExecuteCommand() > 0;
+            return result;
+        }
+
+        /// <summary>
         /// 鏇存柊MES浠诲姟鐘舵�
         /// </summary>
         /// <param name="taskNo"></param>
@@ -963,9 +1092,20 @@
 
         // -----------------------------------------鏂滆涓棿琛�---------------------------------------------
 
+        /// <summary>
+        /// 鏇存柊MES浠诲姟鐘舵�
+        /// </summary>
+        /// <returns></returns>
+        public static bool updateXcTaskStatus(LjXcTask xcTask)
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            result = db.Updateable<LjXcTask>(xcTask).ExecuteCommand() > 0;
+            return result;
+        }
 
         /// <summary>
-        /// 涓嬪彂XC浠诲姟
+        /// 灏哅ES涓嬪彂浠诲姟銆佹墭鐩樼墿鏂欎俊鎭�杞彂缁欐枩瑁�         /// </summary>
         /// <param name="mesTask"></param>
         /// <returns></returns>
@@ -974,6 +1114,37 @@
             bool result = false;
             var db = new SqlHelper<object>().GetInstance();
             if (mesTask != null) {
+                if (mesTask.MSG_TYPE == "1") 
+                {
+                    // 杞彂鎵樼洏鐗╂枡淇℃伅
+                    var ljLotCarrier = db.Queryable<LjLotCarrier>().Where(a => a.PALLET_ID == mesTask.PALLET_ID && a.RECEIVE_FLAG == "PENDING").OrderByDescending(a => a.CREATION_DATE).First();
+                    if (ljLotCarrier != null) 
+                    {
+                        LjXcCarrier ljXcCarrier = new LjXcCarrier() 
+                        {
+                            ID = ljLotCarrier.ID,
+                            PALLET_ID = ljLotCarrier.PALLET_ID,
+                            LOT_NAME = ljLotCarrier.LOT_NAME,
+                            YCL_BATCH = ljLotCarrier.YCL_BATCH,
+                            MATERIALCODE = ljLotCarrier.MATERIALCODE,
+                            QTY = ljLotCarrier.QTY,
+                            PRODUCTION_DATE = ljLotCarrier.PRODUCTION_DATE,
+                            QC_STATUS = ljLotCarrier.QC_STATUS,
+                            SHELFLIFE_DATE = ljLotCarrier.SHELFLIFE_DATE,
+                            MINSHELFLIFE_DATE = ljLotCarrier.MINSHELFLIFE_DATE,
+                            CREATION_DATE = ljLotCarrier.CREATION_DATE,
+                            RECEIVE_FLAG = ljLotCarrier.RECEIVE_FLAG,
+                        };
+                        var bo = db.Insertable<LjXcCarrier>(ljXcCarrier).ExecuteCommand() > 0;
+                        if (bo) 
+                        {
+                            ljLotCarrier.RECEIVE_FLAG = "COMPLETE";
+                            ljLotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                            db.Updateable<LjLotCarrier>(ljLotCarrier).ExecuteCommand();
+                        }
+                    }
+                }
+
                 LjXcTask ljXcTask = new LjXcTask() { 
                     ID = mesTask.ID,
                     POSITION_ID = mesTask.POSITION_ID,
@@ -992,6 +1163,13 @@
                     PLAN_ID = mesTask.PLAN_ID
                 };
                 result = db.Insertable<LjXcTask>(ljXcTask).ExecuteCommand() > 0;
+                if (result) 
+                {
+                    mesTask.RETURN_CODE = "1";
+                    mesTask.RECEIVE_FLAG = "COMPLETE";
+                    mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                    db.Updateable<LjMesTask>(mesTask).ExecuteCommand();
+                }
             }
             return result;
         }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs
index 570f642..7193e16 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs
@@ -635,10 +635,7 @@
                                     ContainerHelper.deleteCntrItem(wmsTask.S_CNTR_CODE);
                                 }
                             }
-
-                            
                         }
-
 
                         WCSHelper.Fail(wcsTask);
                         LocationHelper.UnLockLoc(wcsTask.S_START_LOC);
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/core/Monitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/core/Monitor.cs
index 9eb8071..e403702 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/core/Monitor.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/core/Monitor.cs
@@ -63,9 +63,10 @@
 
             foreach (var item in ApiHelper.cacheInstockInfos)
             {
+                LogHelper.Info($"缂撳瓨淇″彿澶勭悊锛岀紦瀛業P锛歿item.Key}", "TSSG");
                 var instockInfo = item.Value;
                 var end = WMSHelper.GetInstockEnd(instockInfo.item, instockInfo.endArea);
-                LogHelper.Info("缁堢偣璐т綅锛� + JsonConvert.SerializeObject(end), "TSSG");
+                LogHelper.Info("(缂撳瓨淇″彿)缁堢偣璐т綅锛� + JsonConvert.SerializeObject(end), "TSSG");
                 if (end != null)
                 {
                     ApiHelper.Instock(instockInfo);
@@ -114,8 +115,11 @@
                 var instockInfo = item.Value;
                 if (instockInfo.UDID == flag1) {
                     if (Settings.BufferArea != null && Settings.BufferArea != "") {
-                        item.Value.endArea = Settings.BufferArea;
-                        LogHelper.Info("ip:" + item.Key + "淇″彿绛夊緟鏃堕棿瓒呮椂锛屽彉鏇寸粓鐐瑰簱鍖轰负缂撳瓨鍖�, "TSSG");
+                        var end = WMSHelper.GetInstockEnd(instockInfo.item, Settings.BufferArea);
+                        if (end != null) {
+                            item.Value.endArea = Settings.BufferArea;
+                            LogHelper.Info("ip:" + item.Key + "淇″彿绛夊緟鏃堕棿瓒呮椂锛屽彉鏇寸粓鐐瑰簱鍖轰负缂撳瓨鍖�, "TSSG");
+                        }
                     }
                 }
             }
@@ -130,8 +134,12 @@
                 {
                     if (Settings.BufferArea != null && Settings.BufferArea != "")
                     {
-                        item.Value.endArea = Settings.BufferArea;
-                        LogHelper.Info("ip:" + item.Key + "淇″彿绛夊緟鏃堕棿瓒呮椂锛屽彉鏇寸粓鐐瑰簱鍖轰负缂撳瓨鍖�, "TSSG");
+                        var end = WMSHelper.GetInstockEnd(instockInfo.item, Settings.BufferArea);
+                        if (end != null)
+                        {
+                            item.Value.endArea = Settings.BufferArea;
+                            LogHelper.Info("ip:" + item.Key + "淇″彿绛夊緟鏃堕棿瓒呮椂锛屽彉鏇寸粓鐐瑰簱鍖轰负缂撳瓨鍖�, "TSSG");
+                        }
                     }
                 }
             }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/process/DeviceProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/process/DeviceProcess.cs
index 54db749..380ded9 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/process/DeviceProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.TSSG/process/DeviceProcess.cs
@@ -27,19 +27,17 @@
 
         internal static void Analysis(string data, string ip) {
 
-            if (!lastReceiptTime.TryGetValue(ip, out DateTime lastTime)) // 瀹夊叏鑾峰彇鍊�+           // 妫�煡鏄惁闇�璺宠繃澶勭悊
+            if (lastReceiptTime.TryGetValue(ip, out DateTime lastTime) &&
+                DateTime.Now < lastTime.AddMinutes(1))
             {
-                lastReceiptTime[ip] = DateTime.Now; // 浣跨敤绱㈠紩鍣ㄨ嚜鍔ㄦ坊鍔犳垨鏇存柊
-            }
-            else if (lastTime < DateTime.Now.AddMinutes(-1))
-            {
-                lastReceiptTime[ip] = DateTime.Now;
-            }
-            else
-            {
-                return;
+                return; // 1鍒嗛挓鍐呴噸澶嶈姹傦紝璺宠繃
             }
 
+            // 鏇存柊鎺ユ敹鏃堕棿骞舵墽琛屼笟鍔¢�杈�+            lastReceiptTime[ip] = DateTime.Now;
+
+            LogHelper.Info($"涓嬪彂鍏ュ簱璇锋眰锛孖P锛歿ip}", "TSSG");
             if (data.Length >= 6) {
                //鍘绘帀娑堟伅澶�F 00
                data = data.Substring(4);
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj
index 612ea58..f71c451 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj
@@ -180,6 +180,7 @@
     <Compile Include="dispatch\HanAo.cs" />
     <Compile Include="dispatch\NDC.cs" />
     <Compile Include="core\Monitor.cs" />
+    <Compile Include="dispatch\NDCApi.cs" />
     <Compile Include="dispatch\WCSDispatch.cs" />
     <Compile Include="models\BaseModel.cs" />
     <Compile Include="models\Area.cs" />
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
index c63c661..c8f040b 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
@@ -15,9 +15,11 @@
 using System.Reflection;
 using System.Text.RegularExpressions;
 using System.Threading;
+using Ubiety.Dns.Core;
 using static HH.WCS.Mobox3.YNJT_PT.api.ApiModel;
 using static HH.WCS.Mobox3.YNJT_PT.api.OtherModel;
 using static HH.WCS.Mobox3.YNJT_PT.api.WmsController;
+using static HH.WCS.Mobox3.YNJT_PT.dispatch.WCSDispatch;
 using static HH.WCS.Mobox3.YNJT_PT.util.Settings;
 using static HH.WCS.Mobox3.YNJT_PT.wms.WMSHelper;
 using static System.Net.Mime.MediaTypeNames;
@@ -35,24 +37,26 @@
         /// 鎴愬瀷鏈轰笅绾胯褰�         /// </summary>
         /// <param name="model"></param>
-        public static ResponseResult cxjOffLineRecord(OffLineModel model) 
+        public static ResponseResult cxjOffLineRecord(NotifyDeviceSignalModel model) 
         {
             ResponseResult response = new ResponseResult();
-            var container = ContainerHelper.GetCntr(model.rfid);
+            var container = ContainerHelper.GetCntr(model.cntrNo);
             if (container == null)
             {
-                ContainerHelper.AddCntr(model.rfid);
+                ContainerHelper.AddCntr(model.cntrNo);
             }
 
             try
             {
+                OffLineModel extData1 = JsonConvert.DeserializeObject<OffLineModel>(model.extData.ToString());
                 OffLineRecord record = new OffLineRecord()
                 {
-                    S_RFID = model.rfid,
+                    S_RFID = model.cntrNo,
                     S_DEVICE_NO = model.deviceNo,
-                    N_IS_URGENT = model.isUrgent,
+                    N_IS_URGENT = extData1.isUrgent,
                     T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                    N_IS_FULL = model.isFull,
+                    N_IS_FULL = extData1.isFull,
+                    N_NEED_PAIR = extData1.needPair,
                     S_LOC = model.loc
                 };
                 WMSHelper.addOffLineRecord(record);
@@ -76,7 +80,7 @@
             var startLoc = LocationHelper.GetLoc(model.loc);
             if (startLoc != null)
             {
-                List<BarcodeModel> extData = model.extData;
+                List<BarcodeModel> extData = JsonConvert.DeserializeObject<List<BarcodeModel>>(model.extData.ToString());
                 int dataCount = extData.Count;
                 if (dataCount > 0)
                 {
@@ -106,7 +110,7 @@
                                     var offLineRecord = WMSHelper.getOffLineRecord(rfid);
                                     if (offLineRecord != null)
                                     {
-                                        if (offLineRecord.N_IS_FULL == 1) 
+                                        if (offLineRecord.N_IS_FULL == 1)
                                         {
                                             if (ext.barcode.Contains("99999999"))
                                             {
@@ -143,7 +147,7 @@
                                                 }
                                                 else
                                                 {
-                                                   // 璁板綍鏌ヨ鏉$爜淇℃伅寮傚父
+                                                    // 璁板綍鏌ヨ鏉$爜淇℃伅寮傚父
 
                                                 }
                                             }
@@ -346,7 +350,8 @@
                 }
                 else if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟")
                 {
-                    if (model.cntrNo != wcsTask.S_CNTR_CODE)
+                    var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE);
+                    if (model.cntrNo != wcsTask.S_CNTR_CODE || cntrItemRels.Count == 0 || cntrItemRels.Count > 0 && cntrItemRels[0].S_ITEM_STATE != "OK")
                     {
                         // 璁$畻鎺掑嚭鍙�                         endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW);
@@ -362,32 +367,58 @@
                         readCodeFeedbackResponse.verifyResult = false;
                         readCodeFeedbackResponse.endLoc = endLoc.S_CODE;
                     }
-                    else 
-                    {
-                        var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE);
-                        if (cntrItemRels.Count > 0)
-                        {
-                            if (cntrItemRels[0].S_ITEM_STATE != "OK")
-                            {
-                                endLoc = WMSHelper.getMinTaskMiddleLoc(1,endLoc.N_ROADWAY); ;
-
-                                wcsTask.S_END_LOC = endLoc.S_CODE;
-                                wcsTask.S_END_AREA = endLoc.S_AREA_CODE;
-                                WCSHelper.updateTaskEnd(wcsTask);
-
-                                wmsTask.S_END_LOC = endLoc.S_CODE;
-                                wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
-                                WMSHelper.UpdateTaskEnd(wmsTask);
-
-                                readCodeFeedbackResponse.verifyResult = false;
-                                readCodeFeedbackResponse.endLoc = endLoc.S_CODE;
-                            }
-                        }
-                    }
-                      
                 }
             }
             else 
+            {
+                response.code = 1;
+                response.msg = $"浠诲姟鍙凤細{model.taskNo},鏈煡璇㈠埌鎵ц涓殑浠诲姟";
+            }
+            response.data = readCodeFeedbackResponse;
+            return response;
+        }
+
+        /// <summary>
+        /// 寮傚父鐢宠锛堝彇娑堜换鍔★級
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult anomalyRequest(NotifyDeviceSignalModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            readCodeFeedbackResponse readCodeFeedbackResponse = new readCodeFeedbackResponse()
+            {
+                verifyResult = true
+            };
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+            if (wcsTask != null && wmsTask != null)
+            {
+                Location endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);   // 鍘熺粓鐐�+                if (wcsTask.S_TYPE == "婊℃枡涓嬬嚎鍏ュ簱浠诲姟")
+                {
+                    // 鏌ヨ鎺掑嚭鍙�+                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, endLoc.N_ROADWAY);
+                    wcsTask.S_END_LOC = middleLoc.S_CODE;
+                    wcsTask.S_END_AREA = middleLoc.S_AREA_CODE;
+                    WCSHelper.updateTaskEnd(wcsTask);
+                    readCodeFeedbackResponse.verifyResult = false;
+                    readCodeFeedbackResponse.endLoc = middleLoc.S_CODE;
+
+                    // 鏌ヨ鏂扮粓鐐�+                    endLoc = WMSHelper.getOnlneLoc(2);
+                }
+                else if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟")
+                {
+                    endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW);
+                    readCodeFeedbackResponse.verifyResult = false;
+                    readCodeFeedbackResponse.endLoc = endLoc.S_CODE;
+                }
+                wmsTask.S_END_LOC = endLoc.S_CODE;
+                wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
+                WMSHelper.UpdateTaskEnd(wmsTask);
+            }
+            else
             {
                 response.code = 1;
                 response.msg = $"浠诲姟鍙凤細{model.taskNo},鏈煡璇㈠埌鎵ц涓殑浠诲姟";
@@ -454,19 +485,25 @@
         }
 
         /// <summary>
-        /// 纭寲鏈哄懠鍙儦鑳庡嚭搴�+        /// 4.纭寲鏈哄懠鍙儦鑳庡嚭搴�+        /// 閫昏緫锛�+        /// 1.鏍规嵁鏈哄彴鍙锋煡璇€�纭寲鏈哄伐鍗曡〃銆戙�銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戠瓫閫夊綋鍓嶇彮娆$殑鐢熶骇璁″垝鏁伴噺鏄惁婊¤冻锛屽綋棰勮鐢熶骇鏁伴噺 = 瀹為檯鏁�鍦ㄩ�鏁伴噺 锛屽垯鍋滄鍙枡
+        /// 2.鏌ヨ鏈哄彴鍙峰湪銆愮~鍖栨満宸ュ崟琛ㄣ�瀵瑰簲鐨勭墿鏂欑紪鐮侊紝
+        ///   寮�璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟
         /// </summary>
         /// <param name="model"></param>
-        public static ResponseResult callItemOutStock(CallItemModel model)
+        public static ResponseResult callItemOutStock(NotifyDeviceSignalModel model)
         {
             ResponseResult response = new ResponseResult();
 
-            int locNum = model.locCodes.Count;
+            var locCodes = model.loc.Split(',').ToList();
+
+            int locNum = locCodes.Count;
             if (locNum > 0) 
             {
                 Location prevLoc = null;
                 Dictionary<string,Location> outLocDic = new Dictionary<string,Location>();
-                foreach (var mcn in model.locCodes)
+                foreach (var mcn in locCodes)
                 {
                     // 1.涓�釜纭寲鏈哄伐浣嶅彧鑳藉悓鏃跺瓨鍦ㄤ竴涓鍦ㄦ墽琛屼腑鐨勪换鍔�                     var existTask = WCSHelper.GetTaskByEnd(mcn);
@@ -584,96 +621,33 @@
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-        public static ResponseResult emptyTrayInStock(EmptyTrayInStockModel model) 
+        public static ResponseResult emptyTrayInStock(NotifyDeviceSignalModel model) 
         {
             ResponseResult response = new ResponseResult();
-            Location startLoc = LocationHelper.GetLoc(model.startLoc);
-            var endLocGroup = WMSHelper.getInStockEndLoc(1,null);
-            if (endLocGroup.endLocList.Count == 1)
-            {
-                Location endLoc = endLocGroup.endLocList[0];
-                var wmsTask = new WMSTask()
-                {
-                    S_CNTR_CODE = model.trayCode,
-                    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 = "绌烘墭鐩樺洖搴撲换鍔�,
-                    N_PRIORITY = 1,
-                    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 = "WCS",
-                        N_PRIORITY = 1,
-                        T_START_TIME = DateTime.Now,
-                    };
+            Location startLoc = LocationHelper.GetLoc(model.loc);
 
-                    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
+            var cntrCodeList = model.loc.Split(',').ToList();
+            if (cntrCodeList.Count > 0) 
             {
-                response.code = 1;
-                response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅";
-            }
-            return response;
-        }
-
-        /// <summary>
-        /// 鍛煎彨绌烘墭鍑哄簱
-        /// </summary>
-        /// <returns></returns>
-        public static ResponseResult callEmptyTrayOutStock(CallEmptyTrayOutStockModel model) 
-        {
-            ResponseResult responseResult = new ResponseResult();
-            Location startLoc = WMSHelper.getOutStockStartLoc(null);
-            if (startLoc != null) 
-            {
-                Location endLoc = LocationHelper.GetLoc(model.endLoc);
-                if (endLoc != null)
+                var endLocGroup = WMSHelper.getInStockEndLoc(cntrCodeList.Count, null);
+                if (endLocGroup.endLocList.Count > 0)
                 {
-                    var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
-                    if (locCntrRels != null && locCntrRels.Count > 0)
+                    foreach (var endLoc in endLocGroup.endLocList)
                     {
                         var wmsTask = new WMSTask()
                         {
-                            S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
+                            S_CNTR_CODE = model.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_TYPE = "绌烘墭鍏ュ簱浠诲姟",
                             S_OP_DEF_CODE = model.reqId,
-                            S_OP_DEF_NAME = "鍛煎彨绌烘墭鍑哄簱",
+                            S_OP_DEF_NAME = "绌烘墭鐩樺洖搴撲换鍔�,
                             N_PRIORITY = 1,
-                            T_START_TIME = DateTime.Now
+                            T_START_TIME = DateTime.Now,
+                            S_GROUP_NO = endLocGroup.groupNo,
                         };
                         if (WMSHelper.CreateWmsTask(wmsTask))
                         {
@@ -707,16 +681,92 @@
                         }
                     }
                 }
-                else 
+                else
                 {
-                    responseResult.code = 1;
-                    responseResult.msg = $"缁堢偣璐т綅:{model.endLoc}鍦╓MS绯荤粺涓笉瀛樺湪";
+                    response.code = 1;
+                    response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅";
                 }
             }
-            else 
+            
+            return response;
+        }
+
+        /// <summary>
+        /// 鍛煎彨绌烘墭鍑哄簱
+        /// </summary>
+        /// <returns></returns>
+        public static ResponseResult callEmptyTrayOutStock(NotifyDeviceSignalModel model) 
+        {
+            ResponseResult responseResult = new ResponseResult();
+            int executeNum = 0;
+            string startLocCode = null;
+            for (int i = 1; i <= 2; i++) 
+            {
+                Location startLoc = WMSHelper.getOutStockStartLoc(startLocCode);
+                if (startLoc != null)
+                {
+                    startLocCode = startLoc.S_CODE;
+                    Location endLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, startLoc.N_ROADWAY);
+                    if (endLoc != null)
+                    {
+                        var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                        if (locCntrRels != null && locCntrRels.Count > 0)
+                        {
+                            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 = model.reqId,
+                                S_OP_DEF_NAME = "鍛煎彨绌烘墭鍑哄簱",
+                                N_PRIORITY = 1,
+                                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 = "WCS",
+                                    N_PRIORITY = 1,
+                                    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);
+
+                                    executeNum += 1;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (executeNum < 1) 
             {
                 responseResult.code = 1;
-                responseResult.msg = "搴撳唴绌烘墭涓嶈冻";
+                responseResult.msg = "绔嬪簱鍐呯┖鎵樼洏鏁伴噺涓嶈冻";
             }
             return responseResult;
         }
@@ -725,9 +775,9 @@
         /// 鑳氳儙鎶芥鍑哄簱
         /// </summary>
         /// <returns></returns>
-        public static ResponseResult embryoCheckOutStock(EmbryoCheckOutStockModel model) 
+        public static SimpleResult embryoCheckOutStock(EmbryoCheckOutStockModel model) 
         {
-            ResponseResult responseResult = new ResponseResult();
+            SimpleResult result = new SimpleResult();
             var locCntrs = LocationHelper.GetLocCntrRelByCntr(model.trayCode);
             if (locCntrs.Count == 1)
             {
@@ -783,7 +833,7 @@
                     }
                 }
             }
-            return responseResult;
+            return result;
         }
 
         /// <summary>
@@ -791,11 +841,11 @@
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-        public static ResponseResult anomalyTrayInStock(AnomalyTrayInStockModel model) 
+        public static ResponseResult anomalyTrayInStock(NotifyDeviceSignalModel model) 
         {
             ResponseResult responseResult = new ResponseResult();
-            LocationHelper.UnBindingLoc(model.startLoc, new List<string>() { model.trayCode });
-            ContainerHelper.deleteCntrItemRelByCntr(model.trayCode);
+            LocationHelper.UnBindingLoc(model.loc, new List<string>() { model.cntrNo });
+            ContainerHelper.deleteCntrItemRelByCntr(model.cntrNo);
             return responseResult;
         }
 
@@ -1058,11 +1108,9 @@
 
         public class OffLineModel
         {
-            public string loc { get; set; } // 涓嬬嚎浣�-            public string rfid { get; set; } // 鎵樼洏鍙�-            public string deviceNo { get; set; } // 鏈哄彴鍙�             public int isUrgent { get; set; } // N_IS_URGENT 鏄惁鍔犳�锛�.鍚�1.鏄級
             public int isFull { get; set; } // 鏄惁婊℃嫋 0.鍚�1.鏄�+            public int needPair { get; set; } // 0.鍚� 1.鏄紙褰撳墠绌烘墭鐩樹负閰嶅鎵樼洏锛�         }
         public class AddTaskModel {
             public string From { get; set; }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs
index 5c915b5..bb67ca0 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs
@@ -9,12 +9,29 @@
 using System.Web.Http;
 using static HH.WCS.Mobox3.YNJT_PT.api.ApiModel;
 using static HH.WCS.Mobox3.YNJT_PT.api.OtherModel;
+using static HH.WCS.Mobox3.YNJT_PT.api.WmsController;
 
 namespace HH.WCS.Mobox3.YNJT_PT.api {
     /// <summary>
     /// mobox3璋冪敤锛岃剼鏈腑璋冪敤
     /// </summary>
     public class MoboxController : System.Web.Http.ApiController {
+
+        /// <summary>
+        /// 1.鑳庤儦绔嬪簱鎶芥鍑哄簱銆佷汉宸ュ嚭搴撹儙鑳�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public SimpleResult embryoCheckOutStock(EmbryoCheckOutStockModel model)
+        {
+            LogHelper.Info("銆�.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
+            SimpleResult result = new SimpleResult();
+            result = ApiHelper.embryoCheckOutStock(model);
+            LogHelper.Info("銆�.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(result), "WMS");
+            return result;
+        }
+
+
         /// <summary>
         /// 浠诲姟鍙栨秷锛堢洰鍓嶆敮鎸乶dc锛�         /// </summary>
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs
index 8bec1eb..a9c46d0 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs
@@ -19,21 +19,7 @@
     {
 
         /// <summary>
-        /// 1.鎴愬瀷鏈轰笅绾胯褰�-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        [HttpPost]
-        public ResponseResult cxjOffLineRecord(OffLineModel model)
-        {
-            LogHelper.Info("銆�.鎴愬瀷鏈轰笅绾胯褰曘�Request锛� + JsonConvert.SerializeObject(model), "WMS");
-            var result = ApiHelper.cxjOffLineRecord(model);
-            LogHelper.Info("銆�.鎴愬瀷鏈轰笅绾胯褰曘�response锛� + JsonConvert.SerializeObject(result), "WMS");
-            return result;
-        }
-
-        /// <summary>
-        /// 2.璁惧淇″彿鍙嶉
+        /// 1.璁惧淇″彿鍙嶉
         /// 涓氬姟鍦烘櫙锛歐CS鍙嶉鎴愬瀷鏈鸿儦鑳庝笅绾垮叆搴撲俊鍙凤紙娉細蹇呴』涓ゆ墭涓�捣涓婃姤锛屾病鏈変袱鎵橈紝鍒欒ˉ鍏呬竴涓┖鎵橈級
         /// 閫昏緫锛�         /// 1.鏌ヨ鎴愬瀷鏈轰笅绾胯褰曡〃锛屽垽鏂璕FID鏄惁瀛樺湪锛岀姸鎬佹槸鍚K锛屼笉瀛樺湪鎴朜G寮傚父鎺掑嚭
@@ -45,17 +31,36 @@
         [HttpPost]
         public ResponseResult notifyDeviceSignal(NotifyDeviceSignalModel model)
         {
-            LogHelper.Info("銆�.璁惧淇″彿鍙嶉銆憂otifyDeviceSignal 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
+            LogHelper.Info("銆�.璁惧淇″彿鍙嶉銆憂otifyDeviceSignal 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
             ResponseResult responseResult = new ResponseResult();
             try
             {
-                if (model.signalType == 1)
+                switch (model.signalType) 
                 {
-                    responseResult = ApiHelper.offLineRequest(model);
-                }
-                else if(model.signalType == 3)
-                {
-                    responseResult = ApiHelper.readCodeRequest(model);
+                    case 1: 
+                        responseResult = ApiHelper.offLineRequest(model);  // 涓嬬嚎璇锋眰
+                        break;
+                    case 2:
+                        responseResult = ApiHelper.callItemOutStock(model);  // 鍙枡璇锋眰
+                        break;
+                    case 3: 
+                        responseResult = ApiHelper.readCodeRequest(model);  // 璇荤爜璇锋眰
+                        break;
+                    case 4:
+                        responseResult = ApiHelper.cxjOffLineRecord(model);  // 涓嬬嚎璁板綍
+                        break ;
+                    case 5:
+                        responseResult = ApiHelper.anomalyRequest(model);  // 寮傚父鐢宠
+                        break;
+                    case 6:
+                        responseResult = ApiHelper.emptyTrayInStock(model);  // 绌烘墭鍥炲簱
+                        break;
+                    case 7:
+                        responseResult = ApiHelper.callEmptyTrayOutStock(model);  // 绌烘墭鍑哄簱
+                        break;
+                    case 8:
+                        responseResult = ApiHelper.anomalyTrayInStock(model);  // 绌烘墭閲嶇疆
+                        break;
                 }
             }
             catch (BusinessException be)
@@ -70,8 +75,24 @@
                 responseResult.code = 500;
                 responseResult.msg = $"WMS鍐呴儴閿欒锛岃鑱旂郴寮�彂浜哄憳澶勭悊";
             }
-            LogHelper.Info("銆�.璁惧淇″彿鍙嶉銆憂otifyDeviceSignal 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
+            LogHelper.Info("銆�.璁惧淇″彿鍙嶉銆憂otifyDeviceSignal 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
             return responseResult;
+        }
+
+        /// <summary>
+        /// 2.WCS 浠诲姟鐘舵�鍙嶉
+        /// 涓氬姟鍦烘櫙锛歐CS鍦ㄦ墽琛屼换鍔℃椂锛屽洖鎶ヤ换鍔$姸鎬�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        [HttpPost]
+        /*[Route("notifyTaskStatus")]*/
+        public ReturnResult notifyTaskStatus(TaskStatusFeedbackModel model)
+        {
+            LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆慠equest锛� + JsonConvert.SerializeObject(model), "WMS");
+            var result = ApiHelper.taskStatusFeedback(model);
+            LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆憆esponse锛� + JsonConvert.SerializeObject(result), "WMS");
+            return result;
         }
 
         /// <summary>
@@ -90,97 +111,7 @@
         }
 
         /// <summary>
-        /// 4.纭寲鏈哄懠鍙儦鑳庡嚭搴�-        /// 閫昏緫锛�-        /// 1.鏍规嵁鏈哄彴鍙锋煡璇€�纭寲鏈哄伐鍗曡〃銆戙�銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戠瓫閫夊綋鍓嶇彮娆$殑鐢熶骇璁″垝鏁伴噺鏄惁婊¤冻锛屽綋棰勮鐢熶骇鏁伴噺 = 瀹為檯鏁�鍦ㄩ�鏁伴噺 锛屽垯鍋滄鍙枡
-        /// 2.鏌ヨ鏈哄彴鍙峰湪銆愮~鍖栨満宸ュ崟琛ㄣ�瀵瑰簲鐨勭墿鏂欑紪鐮侊紝
-        ///   寮�璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟
-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        public ResponseResult callItemOutStock(CallItemModel model ) 
-        {
-            LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
-            ResponseResult responseResult = new ResponseResult();
-            responseResult = ApiHelper.callItemOutStock(model);
-            LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
-            return responseResult;
-        }
-
-        /// <summary>
-        /// 5.绌烘墭鍥炵珛搴�-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        public ResponseResult emptyTrayInStock(EmptyTrayInStockModel model ) 
-        {
-            LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
-            ResponseResult responseResult = new ResponseResult();
-            responseResult = ApiHelper.emptyTrayInStock(model);
-            LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
-            return responseResult;
-        }
-
-        /// <summary>
-        /// 6.鎴愬瀷鏈哄懠鍙┖鎵�-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        public ResponseResult callEmptyTrayOutStock(CallEmptyTrayOutStockModel model)
-        {
-            LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
-            ResponseResult responseResult = new ResponseResult();
-            responseResult = ApiHelper.callEmptyTrayOutStock(model);
-            LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
-            return responseResult;
-        }
-
-        /// <summary>
-        /// 7.鑳庤儦绔嬪簱鎶芥鍑哄簱銆佷汉宸ュ嚭搴撹儙鑳�-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        public ResponseResult embryoCheckOutStock(EmbryoCheckOutStockModel model)
-        {
-            LogHelper.Info("銆�.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
-            ResponseResult responseResult = new ResponseResult();
-            responseResult = ApiHelper.embryoCheckOutStock(model);
-            LogHelper.Info("銆�7.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
-            return responseResult;
-        }
-
-        /// <summary>
-        /// 8.寮傚父鍥炲簱娴佺▼
-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        public ResponseResult anomalyTrayInStock(AnomalyTrayInStockModel model) 
-        {
-            LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
-            ResponseResult responseResult = new ResponseResult();
-            responseResult = ApiHelper.anomalyTrayInStock(model);
-            LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
-            return responseResult;
-        }
-
-        /// <summary>
-        /// 9.WCS 浠诲姟鐘舵�鍙嶉
-        /// 涓氬姟鍦烘櫙锛歐CS鍦ㄦ墽琛屼换鍔℃椂锛屽洖鎶ヤ换鍔$姸鎬�-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        [HttpPost]
-        /*[Route("notifyTaskStatus")]*/
-        public ReturnResult notifyTaskStatus(TaskStatusFeedbackModel model)
-        {
-            LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆慠equest锛� + JsonConvert.SerializeObject(model), "WMS");
-            var result = ApiHelper.taskStatusFeedback(model);
-            LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆憆esponse锛� + JsonConvert.SerializeObject(result), "WMS");
-            return result;
-        }
-
-        /// <summary>
-        /// 10.绌烘墭鐩樿В缁�+        /// 4.绌烘墭鐩樿В缁�         /// 涓氬姟鍦烘櫙锛氱┖鎵樼洏鍥炰富绾�         /// </summary>
         /// <param name="model"></param>
@@ -188,9 +119,9 @@
         [HttpPost]
         public ReturnResult emptyTrayUnBind(EmptyTrayUnBindModel model)
         {
-            LogHelper.Info("銆�0.绌烘墭鐩樿В缁戙�Request锛� + JsonConvert.SerializeObject(model), "WMS");
+            LogHelper.Info("銆�.绌烘墭鐩樿В缁戙�Request锛� + JsonConvert.SerializeObject(model), "WMS");
             var result = ApiHelper.emptyTrayUnBind(model);
-            LogHelper.Info("銆�0.绌烘墭鐩樿В缁戙�response锛� + JsonConvert.SerializeObject(result), "WMS");
+            LogHelper.Info("銆�.绌烘墭鐩樿В缁戙�response锛� + JsonConvert.SerializeObject(result), "WMS");
             return result;
         }
 
@@ -266,7 +197,7 @@
             public string taskNo { get; set; }
             public string cntrNo { get; set; }
             public int signalType { get; set; }
-            public List<BarcodeModel> extData { get; set; }
+            public object extData { get; set; }
             public string deviceNo { get; set; }
         }
 
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json
index 495b2d3..b80e3a1 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json
@@ -78,5 +78,13 @@
       "locCode": "OA1-2-4-1",
       "roadway": 4
     }
+  ],
+
+  "DeviceConfig": [
+    {
+      "deviceNo": "",
+      "deviceName": "",
+      "roadway": 1
+    }
   ]
 }
\ No newline at end of file
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/dispatch/WCSDispatch.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/dispatch/WCSDispatch.cs
index d1bb19c..7d82fbf 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/dispatch/WCSDispatch.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/dispatch/WCSDispatch.cs
@@ -4,7 +4,9 @@
 using System.Text;
 using System.Threading.Tasks;
 using HH.WCS.Mobox3.YNJT_PT.util;
+using HH.WCS.Mobox3.YNJT_PT.wms;
 using Newtonsoft.Json;
+using static HH.WCS.Mobox3.YNJT_PT.api.ApiModel;
 
 namespace HH.WCS.Mobox3.YNJT_PT.dispatch
 {
@@ -13,64 +15,264 @@
         private static readonly HttpHelper apiHelper = new HttpHelper();
         private static readonly string baseUrl = "http://192.168.1.99:2000/";
 
+
+        internal static string GenerateReqId()
+        {
+            var id = SYSHelper.GetSerialNumber("璇锋眰ID", "RE");
+            var date = DateTime.Now.ToString("yyMMdd");
+            return $"{date}{id.ToString().PadLeft(4, '0')}";
+        }
+
         /// <summary>
-        /// WMS鍚慦CS鑾峰彇璁惧鐘舵�锛堝爢鍨涙満锛�+        /// 浠诲姟涓嬪彂
         /// </summary>
-        /// <param name="roadway"></param>
+        /// <param name="model"></param>
         /// <returns></returns>
-        public static List<StackerState> getStackerState(int roadway)
+        public static bool sendTask(SendTaskModel model)
         {
-            var msg = "";
-            List<StackerState> stackerStates = new List<StackerState>();
-            var data = new StackerStateModel() { req_no = Guid.NewGuid().ToString("D"), roadway = roadway.ToString() };
-            var request = JsonConvert.SerializeObject(data);
-            var response = apiHelper.Post(baseUrl + "api/StackerState", request);
-            msg = $"WMS鍚慦CS鑾峰彇璁惧鐘舵�锛堝爢鍨涙満锛塠StackerState] request={request} response={response}";
-            LogHelper.Info(msg, "WCS");
-            if (response != "")
+            var result = false;
+            model.reqId = GenerateReqId();
+            model.reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            var request = JsonConvert.SerializeObject(model);
+            try
             {
-                try
+                var response = apiHelper.Post(baseUrl + "/sendTask", request);
+                LogHelper.Info($"[WCS-sendTask] request={request} response={response}", "WMS");
+                if (response != null && response != "")
                 {
-                    var dataResult = JsonConvert.DeserializeObject<StackerStateResponseData>(response);
-                    if (dataResult.result_flag == 0)
+                    var dataResult = JsonConvert.DeserializeObject<ResponseResult>(response);
+                    if (dataResult.code == 200)
                     {
-                        stackerStates = dataResult.data;
+                        result = true;
                     }
-                    else 
+                    else
                     {
-                        LogHelper.Info($"WMS鍚慦CS鑾峰彇璁惧鐘舵�锛堝爢鍨涙満锛夊け璐ワ紝WCS鍙嶉閿欒淇℃伅锛歿dataResult.err_msg}", "WCS");
+                        LogHelper.Info($"璋冪敤WCS浠诲姟涓嬪彂鎺ュ彛鎴愬姛锛屼絾WCS鍙嶉涓嬪彂浠诲姟澶辫触锛屽け璐ュ師鍥狅細{dataResult.msg}", "WMS");
                     }
                 }
-                catch (Exception ex)
+                else
                 {
-                    LogHelper.Info($"WMS鍚慦CS鑾峰彇璁惧鐘舵�锛堝爢鍨涙満锛夐敊璇紝閿欒鍘熷洜锛歿ex.Message}", "WCS");
+                    LogHelper.Info("璋冪敤WCS浠诲姟涓嬪彂鎺ュ彛澶辫触", "WMS");
                 }
             }
-            else
+            catch (Exception ex)
             {
-                msg = "[StackerState]WMS鍚慦CS鑾峰彇璁惧鐘舵�锛堝爢鍨涙満锛夊け璐�;
-                LogHelper.Info(msg, "WCS");
+                LogHelper.Info($"璋冪敤WCS浠诲姟涓嬪彂鎺ュ彛閿欒锛岄敊璇師鍥狅細{ex.Message}", "WMS");
             }
-            return stackerStates;
+            return result;
         }
 
-        public class StackerStateResponseData 
+        /// <summary>
+        /// 浠诲姟鍙栨秷锛堜换鍔℃墽琛屼腑涓嶅厑璁稿彇娑堬級
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static bool cancelTask(CancelTaskModel model)
         {
-            public int result_flag { get; set; }
-            public string err_msg { get; set; }
-            public List<StackerState> data { get; set; }
-        }
-        public class StackerState 
-        {
-            public string roadway { get; set; }
-            public string roadway_state { get; set; }  // 鍫嗗灈鏈虹姸鎬�1=绌洪棽锛�=鎵ц涓紝3=鎶ヨ锛�=涓嶅彲鐢�+            var result = false;
+            model.reqId = GenerateReqId();
+            model.reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            var request = JsonConvert.SerializeObject(model);
+            try
+            {
+                var response = apiHelper.Post(baseUrl + "/api/hecWms/produceProcessTracing/trayMaterialUnBind", request);
+                LogHelper.Info($"[WCS-cancelTask] request={request} response={response}", "WMS");
+                if (response != null && response != "")
+                {
+
+                    var dataResult = JsonConvert.DeserializeObject<ResponseResult>(response);
+                    if (dataResult.code == 200)
+                    {
+                        result = true;
+                    }
+
+                }
+                else
+                {
+                    LogHelper.Info("璋冪敤WCS浠诲姟鍙栨秷鎺ュ彛澶辫触", "WMS");
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info($"璋冪敤WCS浠诲姟鍙栨秷鎺ュ彛閿欒锛岄敊璇師鍥狅細{ex.Message}", "WMS");
+            }
+            return result;
         }
 
-        public class StackerStateModel
+        /// <summary>
+        /// 鑾峰彇璁惧鐘舵�
+        /// </summary>
+        /// <param name="deviceNoList"></param>
+        /// <returns></returns>
+        public static List<DeviceStatusData> getDeviceStatus(List<string> deviceNoList)
         {
-            public string req_no { get; set; }
-            public string roadway { get; set; }
+            List<DeviceStatusData> deviceStatusDatas = new List<DeviceStatusData>();
+
+            DeviceStatusModel model = new DeviceStatusModel()
+            {
+                reqId = GenerateReqId(),
+                reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                deviceNoList = deviceNoList
+            };
+
+            var request = JsonConvert.SerializeObject(model);
+            try
+            {
+                var response = apiHelper.Post(baseUrl + "/api/hecWms/produceProcessTracing/trayMaterialUnBind", request);
+                LogHelper.Info($"[WCS-getDeviceStatus] request={request} response={response}", "WMS");
+                if (response != null && response != "")
+                {
+
+                    var dataResult = JsonConvert.DeserializeObject<ResponseResult>(response);
+                    if (dataResult.code == 200)
+                    {
+                        deviceStatusDatas = JsonConvert.DeserializeObject<List<DeviceStatusData>>(response);
+                    }
+
+                }
+                else
+                {
+                    LogHelper.Info("璋冪敤WCS鑾峰彇璁惧鐘舵�鎺ュ彛澶辫触", "WMS");
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info($"璋冪敤WCS鑾峰彇璁惧鐘舵�鎺ュ彛閿欒锛岄敊璇師鍥狅細{ex.Message}", "WMS");
+            }
+            return deviceStatusDatas;
         }
 
+        /// <summary>
+        /// 淇敼浠诲姟浼樺厛绾�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static bool changePriority(ChangePriorityModel model)
+        {
+            var result = false;
+            model.reqId = GenerateReqId();
+            model.reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            var request = JsonConvert.SerializeObject(model);
+            try
+            {
+                var response = apiHelper.Post(baseUrl + "/api/hecWms/produceProcessTracing/trayMaterialUnBind", request);
+                LogHelper.Info($"[WCS-changePriority] request={request} response={response}", "WMS");
+                if (response != null && response != "")
+                {
+
+                    var dataResult = JsonConvert.DeserializeObject<ResponseResult>(response);
+                    if (dataResult.code == 200)
+                    {
+                        result = true;
+                    }
+
+                }
+                else
+                {
+                    LogHelper.Info("璋冪敤WCS淇敼浠诲姟浼樺厛绾ф帴鍙eけ璐�, "WMS");
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info($"璋冪敤WCS淇敼浠诲姟浼樺厛绾ф帴鍙i敊璇紝閿欒鍘熷洜锛歿ex.Message}", "WMS");
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// AGV瀹夊叏浜や簰
+        /// </summary>
+        /// <param name="req_no"></param>
+        /// <param name="locCode"></param>
+        /// <param name="type"></param>
+        /// <returns></returns>
+        public static bool safetyInteraction(string req_no, string locCode, string type)
+        {
+            var result = false;
+            LocStateModel model = new LocStateModel()
+            {
+                req_no = req_no,
+                loc_code = locCode,
+                type = type
+            };
+
+            var request = JsonConvert.SerializeObject(model);
+            try
+            {
+                var response = apiHelper.Post(baseUrl + "/api/hecWms/produceProcessTracing/trayMaterialUnBind", request);
+                LogHelper.Info($"[WCS-changePriority] request={request} response={response}", "WMS");
+                if (response != null && response != "")
+                {
+
+                    var dataResult = JsonConvert.DeserializeObject<ResponseResult>(response);
+                    if (dataResult.code == 200)
+                    {
+                        result = true;
+                    }
+                }
+                else
+                {
+                    LogHelper.Info("璋冪敤WCS瀹夊叏璇锋眰鎺ュ彛澶辫触", "AGV");
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info($"璋冪敤WCS瀹夊叏璇锋眰鎺ュ彛閿欒锛岄敊璇師鍥狅細{ex.Message}", "AGV");
+            }
+            return result;
+        }
+       
+
+        public class LocStateModel
+        {
+            public string req_no { get; set; } // 璇锋眰id
+            public string loc_code { get; set; } // 璐т綅
+            public string type { get; set; } // 璐т綅 1 璇锋眰鍙栬揣 2 璇锋眰鏀捐揣 3 鍙栬揣瀹屾垚绂诲紑淇″彿 4 鏀捐揣瀹屾垚绂诲紑淇″彿
+        }
+
+        public class ChangePriorityModel
+        {
+            public string reqId { get; set; } // 璇锋眰id
+            public string reqTime { get; set; } // 璇锋眰鏃堕棿
+            public string taskNo { get; set; } // 浠诲姟鍙�+            public int priority { get; set; } // 浼樺厛绾�+        }
+
+        public class DeviceStatusData
+        {
+            public string deviceNo { get; set; } // 璁惧鍙�+            public int workStatus { get; set; } // 宸ヤ綔鐘舵�  1姝e父 锛�绂佺敤 锛�鏁呴殰 
+            public int photoStatus { get; set; } // 鍏夌數鐘舵� 1鏄┖杞�,2鏄湁杞�+            public int manualStatus { get; set; } //鎵嬪姩鐘舵�  1鎵嬪姩锛�鑷姩
+        }
+
+        public class DeviceStatusModel
+        {
+            public string reqId { get; set; } // 璇锋眰id
+            public string reqTime { get; set; } // 璇锋眰鏃堕棿
+            public List<string> deviceNoList { get; set; } // 璁惧鍙�+        }
+
+        public class CancelTaskModel
+        {
+            public string reqId { get; set; } // 璇锋眰id
+            public string reqTime { get; set; } // 璇锋眰鏃堕棿
+            public string taskNo { get; set; } // 浠诲姟鍙�+        }
+
+        public class SendTaskModel
+        {
+            public string reqId { get; set; } // 璇锋眰id
+            public string reqTime { get; set; } // 璇锋眰鏃堕棿
+            public string taskNo { get; set; } // 浠诲姟鍙�+            public int groupNo { get; set; } // 浠诲姟缁�
+            public string taskType { get; set; } // 浠诲姟绫诲瀷  1.鐗╂枡鍏ュ簱 2.鐗╂枡鍑哄簱
+            public string from { get; set; } // 璧风偣
+            public string to { get; set; } // 缁堢偣
+            public string cntrNo { get; set; } // 瀹瑰櫒缂栫爜
+            public string cntrType { get; set; } // 瀹瑰櫒绫诲瀷
+            public List<object> extData { get; set; } // 
+
+        }
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/EmbryoFinishRecord.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/EmbryoFinishRecord.cs
index e1a2662..222eb7f 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/EmbryoFinishRecord.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/EmbryoFinishRecord.cs
@@ -7,6 +7,9 @@
 
 namespace HH.WCS.Mobox3.YNJT_PT.models
 {
+    /// <summary>
+    /// 纭寲瀹屾垚璁板綍
+    /// </summary>
     [SugarTable("TN_EmbryoFinishRecord")]
     public class EmbryoFinishRecord : BaseModel
     {
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs
index 8ba5b9e..301bc0b 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs
@@ -20,6 +20,7 @@
         public int N_IS_URGENT { get; set; } // N_IS_URGENT 鏄惁鍔犳�锛�.鍚�1.鏄級
         public string T_OFF_TIME { get; set; } // 涓嬬嚎鏃堕棿
         public int N_IS_FULL { get; set; } // 鏄惁婊℃嫋 0.鍚�1.鏄�+        public int N_NEED_PAIR { get; set; } // 鏄惁闇�閰嶅 0.鍚� 1.鏄紙褰撳墠绌烘墭鐩樹负閰嶅鎵樼洏锛� 
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs
index 95fb466..0cbfa0f 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs
@@ -9,6 +9,7 @@
 using System.Linq;
 using System.Reflection;
 using System.Security.Cryptography;
+using static HH.WCS.Mobox3.YNJT_PT.dispatch.WCSDispatch;
 
 namespace HH.WCS.Mobox3.YNJT_PT.process {
     internal class TaskProcess {
@@ -243,22 +244,67 @@
                 var startLoc = LocationHelper.GetLocation(mst.S_START_LOC);
                 var endLoc = LocationHelper.GetLocation(mst.S_END_LOC);
 
-                if (mst.S_SCHEDULE_TYPE == "NDC") {
-                 
-                }
-                else if (mst.S_SCHEDULE_TYPE == "鏉ゥ") {
-                    //璋冪涓夋柟鎺ュ彛
-                    var model = new HanAo.TaskInfoModel
+                if (mst.S_SCHEDULE_TYPE == "AGV")
+                {
+                    AddOrderNewModel model = new AddOrderNewModel()
                     {
-                        requestPk = mst.S_CODE,
-                        frmPos = mst.S_START_LOC,
-                        toPos = mst.S_END_LOC,
-                        trkType = mst.S_OP_NAME == "鍏ュ簱" ? "1" : "2",
-                        contNo = mst.S_CNTR_CODE
+                        ts_no = 1,
+                        pri = 1,
+                        task_no = mst.S_CODE
                     };
-                    if (HanAo.CreateOrder(model)) {
+                    List<Param> paramList = new List<Param>();
+                    var dic = new Dictionary<string, string>();
+                    dic.Add("IKey", mst.S_CODE);
+                    dic.Add("From", startLoc.S_CODE);
+                    dic.Add("To", endLoc.S_CODE);
+                    dic.Add("FUNC", "0");
+                    if (mst.S_TYPE.Contains("鍏ュ簱"))
+                    {
+                        dic.Add("DATA", "300");
+                    }
+                    else
+                    {
+                        dic.Add("DATA", "0");
+                    }
+                    dic.Add("Ctype", "0");
+                    foreach (var item in dic)
+                    {
+                        Param param = new Param
+                        {
+                            name = item.Key,
+                            value = item.Value,
+                        };
+                        paramList.Add(param);
+                    }
+                    model.param = paramList;
+                    LogHelper.Info($"鍚慉GV涓嬪彂浠诲姟锛屼换鍔″弬鏁帮細{model}", "WMS");
+                    var res = NDCApi.AddOrderNew(model);
+                    if (res != null && res.err_code == 0 || true)
+                    {
+                        //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇
                         mst.N_B_STATE = 1;
                         WCSHelper.UpdateStatus(mst);
+                        result = true;
+                    }
+                }
+                else if (mst.S_SCHEDULE_TYPE == "WCS")
+                {
+                    SendTaskModel sendTask = new SendTaskModel()
+                    {
+                        taskNo = mst.S_CODE,
+                        taskType = mst.S_TYPE.Contains("鍏ュ簱") ? "1" : "2",
+                        from = mst.S_START_LOC,
+                        to = mst.S_END_LOC,
+                        cntrNo = mst.S_CNTR_CODE,
+                    };
+                    LogHelper.Info($"鍚慦CS涓嬪彂浠诲姟锛屼换鍔″弬鏁帮細{sendTask}", "WMS");
+                    var bo = WCSDispatch.sendTask(sendTask);
+                    if (true || bo)
+                    {
+                        //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇
+                        mst.N_B_STATE = 1;
+                        WCSHelper.UpdateStatus(mst);
+                        result = true;
                     }
                 }
             }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs
index 282a25a..733ba17 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs
@@ -18,6 +18,7 @@
         public static List<ConnectLoc> connectLocList { get; set; }
         public static List<OnLineLoc> onLineLocList { get; set; }
         public static List<CallOutLoc> callOutLocList { get; set; }
+        public static List<DeviceConfig> deviceConfigList { get; set; }
         public static int port { get; set; }
         public static string WHCode { get; set; }
         public static string FacCode { get; set; }
@@ -65,6 +66,10 @@
                             {
                                 callOutLocList = JsonConvert.DeserializeObject<List<CallOutLoc>>(keyValue.Value.ToString());
                             }
+                            if (keyValue.Name == "DeviceConfig")
+                            {
+                                deviceConfigList = JsonConvert.DeserializeObject<List<DeviceConfig>>(keyValue.Value.ToString());
+                            }
                             if (keyValue.Name == "StockArea")
                             {
                                 stockArea = keyValue.Value.ToString();
@@ -81,6 +86,12 @@
 
         }
 
+        public class DeviceConfig 
+        {
+            public string deviceNo { get; set; }
+            public string deviceName { get; set; }
+            public int roadway { get; set; }
+        }
 
         public class ConnectLoc
         {
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs
index d04f74e..66b1684 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs
@@ -180,12 +180,16 @@
             if (task != null)
             {
                 task.N_B_STATE = 4;
-                if (WCSHelper.CheckActionRecordExist(task.S_CODE, 4))
+                WCSHelper.UpdateStatus(task, "鍙栨秷");
+
+                var mst = WMSHelper.GetWmsTask(task.S_OP_CODE);
+                if (mst != null) 
                 {
-                    WCSHelper.UpdateStatus(task, "寮哄埗瀹屾垚");
-                }
-                else {
-                    WCSHelper.UpdateStatus(task, "鍙栨秷");
+                    LocationHelper.UnLockLoc(mst.S_END_LOC);
+
+                    mst.N_B_STATE = 3;
+                    mst.S_B_STATE = "鍙栨秷";
+                    WMSHelper.UpdateTaskState(mst);
                 }
             } 
         }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs
index a1736e8..69a9200 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs
@@ -774,6 +774,7 @@
             {
                 query = query.Where((a, b, c) => c.S_ITEM_CODE == itemCode);
             }
+            query = query.OrderByDescending((a, b, c) => a.N_ROADWAY == prevLoc.N_ROADWAY);
             var outLocList = query.ToList();
 
             if (outLocList.Count > 0)
@@ -781,12 +782,15 @@
                 foreach (var loc in outLocList)
                 {
                     // 鏌ヨ宸烽亾鏄惁姝e父锛屽紓甯歌烦杩�-                    var stackerStates = WCSDispatch.getStackerState(loc.N_ROADWAY);
-                    if ( false  /*stackerStates.Count == 0 || stackerStates[0].roadway_state == "0" || stackerStates[0].roadway_state == "3"*/) 
+                    var deviceConfig = Settings.deviceConfigList.Where(a => a.roadway == loc.N_ROADWAY).First();
+                    if (deviceConfig != null) 
                     {
-                        continue;
+                        var stackerStates = WCSDispatch.getDeviceStatus(new List<string>() { deviceConfig.deviceNo } );
+                        if ( stackerStates.Count == 0 || stackerStates[0].workStatus != 1 || stackerStates[0].manualStatus == 1 )
+                        {
+                            continue;
+                        }
                     }
-
                     startLoc = loc;
                     break;
                 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.ZS7412/dispatch/HanAo.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.ZS7412/dispatch/HanAo.cs
index 67fa4e5..7ac2b9a 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.ZS7412/dispatch/HanAo.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.ZS7412/dispatch/HanAo.cs
@@ -8,7 +8,7 @@
 
 namespace HH.WCS.Mobox3.ZS7412.dispatch {
     /// <summary>
-    /// 鍥借嚜璋冨害杈呭姪绫�+    /// 鏉ゥ
     /// </summary>
     public class HanAo {
         private static readonly HttpHelper apiHelper = new HttpHelper();

--
Gitblit v1.9.1