From d42ad8b01195def2a9309930e14f90ff13ad47b1 Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期四, 19 六月 2025 17:24:28 +0800
Subject: [PATCH] 印尼佳通出入库策略优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WCSHelper.cs               |    3 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs            |   20 -
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs             |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/process/TaskProcess.cs         |   75 ----
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs              |    7 
 HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs            |    4 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs               |  189 ++++++++--
 HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs                   |   19 +
 HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs                |   20 +
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/WmsController.cs           |   67 ++-
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs                   |   17 
 HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs                     |   10 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/MoboxController.cs         |   26 +
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs                     |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config                |    6 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs               |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config                     |    8 
 HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs                   |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs                  |    4 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs                  |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs                  |   18 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/OffLineRecord.cs        |    3 
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json                |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs              |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/config/config.json             |   73 +++
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs            |   43 -
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs        |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json            |   25 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/Settings.cs               |   26 +
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs               |  163 ++++++--
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs         |  161 ++------
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs              |    2 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs                |   10 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/HH.WCS.Mobox3.YNJT_PT.csproj   |   28 +
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs                |    3 
 HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs              |    1 
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs |    7 
 37 files changed, 643 insertions(+), 411 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
index 49ea593..9fe06a7 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
@@ -363,7 +363,7 @@
                         kgzEndLoc = LocationHelper.GetLoc(logicConfig.S_LKBKHCLOC);
                         if (kgzStartLoc == null)
                         {
-                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"搴撳尯:{logicConfig.S_AREA_CODE},娌℃湁鍙敤鐨勭┖宸ヨ");
+                            WMSHelper.addAlarmRecord("娴佺▼寮傚父", "楂�, $"绌哄伐瑁呭嚭搴撶珯鍙�{logicConfig.S_LKKTJBLOC},娌℃湁鍦╓MS绯荤粺涓綍鍏�);
                             photoStatus = false;
                         }
                         if (kgzEndLoc == null)
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 cf55ba9..540ba02 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/config/config.json
@@ -86,7 +86,7 @@
     {
       "areaCode": "ZZFZLCK",
       "areaName": "涓浆搴�闈炵洿杩�",
-      "cntrType": [ 7 ],
+      "cntrType": [ 0 ],
       "type": 2
     }
   ],
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 889f4cc..9436f87 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/core/Monitor.cs
@@ -266,17 +266,17 @@
         public static void UpdateInventoryRegularly()
         {
             var db = new SqlHelper<object>().GetInstance();
+            var areaCodeList = Settings.areaPropertyList.Select(a => a.areaCode).ToList();
             var locations = db.Queryable<Location>()
-                .LeftJoin<LjLotOnhand>((a, b) => a.S_CODE == b.STORAGE_LOCATION)
-                .LeftJoin<LocCntrRel>((a, b, c) => a.S_CODE == c.S_LOC_CODE)
-                .Where((a, b, c) => b.PALLET_ID != c.S_CNTR_CODE)
+                .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE)
+                .Where((a,b) => a.N_CURRENT_NUM > 0 && b.S_CNTR_CODE != null && areaCodeList.Contains(a.S_AREA_CODE) )
                 .ToList();
 
             foreach (var loc in locations)
             {
                 var lotOnhand = db.Queryable<LjLotOnhand>().Where(a => a.STORAGE_LOCATION == loc.S_CODE).First();
                 if (lotOnhand != null) { 
-                    db.Deleteable(lotOnhand).ExecuteCommand();
+                    db.Deleteable<LjLotOnhand>().Where(a => a.ID == lotOnhand.ID).ExecuteCommand();
                 }
 
                 var locCntrRels = LocationHelper.GetLocCntr(loc.S_CODE);
@@ -289,16 +289,19 @@
                             var material = WMSHelper.GetMaterial(cntrItem.S_ITEM_CODE);
                             LjLotOnhand ljLotOnhand = new LjLotOnhand()
                             {
+                                ID = WMSHelper.GenerateStockRecordNo(),
                                 MATERIAL_CODE = cntrItem.S_ITEM_CODE,
                                 LOT_NAME = cntrItem.S_BATCH_NO,
                                 PALLET_ID = cntrItem.S_CNTR_CODE,
                                 STORAGE_LOCATION = loc.S_CODE,
                                 QC_STATUS = cntrItem.S_ITEM_STATE,
-                                UNIT = material.S_UNIT,
+                                UNIT = material == null ? "":material.S_UNIT,
                                 QTY = cntrItem.F_QTY,
-                                IN_DATE = cntrItem.T_INBOUND_TIME,
+                                IN_DATE = cntrItem.T_INBOUND_TIME.ToString("yyyy-MM-dd"),
+                                CREATION_DATE = DateTime.Now,
+                                WAREHOUSE_TYPE = "2"
                             };
-                            db.Insertable(lotOnhand).ExecuteCommand();
+                            db.Insertable(ljLotOnhand).ExecuteCommand();
                         }
                     });
                 }
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 547af1b..cd726eb 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/models/LjLotOnhand.cs
@@ -22,7 +22,7 @@
         public string QC_STATUS { get; set; } //鐘舵�
         public string UNIT { get; set; } //鍗曚綅
         public float QTY { get; set; } //鏁伴噺
-        public DateTime IN_DATE { 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/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
index 66bc083..7acb4b7 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/wms/WMSHelper.cs
@@ -33,6 +33,10 @@
             var date = DateTime.Now.ToString("yyMMdd");
             return $"SO{date}{id.ToString().PadLeft(4, '0')}";
         }
+        internal static int GenerateStockRecordNo()
+        {
+            return SYSHelper.GetSerialNumber("搴撳瓨璁板綍鍙�, "SR");
+        }
 
         internal static string GenerateAlarmNo()
         {
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 06b9fdd..570f642 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/api/WmsController.cs
@@ -63,6 +63,7 @@
                 result.success = false;
                 result.message = "鍐呴儴寮傚父锛岃鑱旂郴寮�彂浜哄憳澶勭悊";
                 LogHelper.Info($"鍐呴儴寮傚父锛岄敊璇俊鎭細{ex.Message}", "杞﹂棿鎺у埗鍣�);
+                LogHelper.Info(ex.StackTrace, "杞﹂棿鎺у埗鍣�);
             }
             LogHelper.Info("鍒涘缓鍏ュ簱鎼繍浠诲姟-createInOrder 鍑哄弬锛� + JsonConvert.SerializeObject(result), "杞﹂棿鎺у埗鍣�);
             return result;
@@ -96,6 +97,7 @@
                 result.success = false;
                 result.message = "鍐呴儴寮傚父锛岃鑱旂郴寮�彂浜哄憳澶勭悊";
                 LogHelper.Info($"鍐呴儴寮傚父锛岄敊璇俊鎭細{ex.Message}", "杞﹂棿鎺у埗鍣�);
+                LogHelper.Info(ex.StackTrace, "杞﹂棿鎺у埗鍣�);
             }
             
             LogHelper.Info("鍒涘缓鍑哄簱鎼繍浠诲姟-createOutOrder 鍑哄弬锛� + JsonConvert.SerializeObject(result), "杞﹂棿鎺у埗鍣�);
@@ -602,6 +604,20 @@
 
                         if (wcsTask.S_SCHEDULE_TYPE.Contains("LD"))
                         {
+                            if (wcsTask.S_TYPE.Contains("鍑哄簱"))
+                            {
+                                var locCntrs = LocationHelper.GetLocCntrRel(wcsTask.S_START_LOC);
+                                if (locCntrs.Count > 0) 
+                                {
+                                    var cntrList = locCntrs.Select(a => a.S_CNTR_CODE).ToList();
+                                    if (cntrList.Contains(wcsTask.S_CNTR_CODE)) 
+                                    {
+                                        var linePlcInfo = WCSHelper.GetLinePlcInfo(wcsTask.S_START_LOC);
+                                        triggerAlarmCommand(linePlcInfo , 1);
+                                    }
+                                }
+                            }
+
                             LocationHelper.UnBindingLoc(wcsTask.S_START_LOC, new List<string>() { wcsTask.S_CNTR_CODE });
                             LocationHelper.UnBindingLoc(wcsTask.S_END_LOC, new List<string>() { wcsTask.S_CNTR_CODE });
 
@@ -619,7 +635,11 @@
                                     ContainerHelper.deleteCntrItem(wmsTask.S_CNTR_CODE);
                                 }
                             }
+
+                            
                         }
+
+
                         WCSHelper.Fail(wcsTask);
                         LocationHelper.UnLockLoc(wcsTask.S_START_LOC);
                         LocationHelper.UnLockLoc(wcsTask.S_END_LOC);
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs
index 1c56af2..efa0ea3 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/core/Monitor.cs
@@ -498,6 +498,16 @@
             S7Helper.WriteInt(line.deviceNo, 101, line.writeAddr + 8, command); // 涓嬪彂鎸囦护锛堥粯璁�0 鍏ュ簱=2 鍑哄簱=1 涓嶅悎鏍奸�鍥�3锛�         }
 
+        /// <summary>
+        /// 娓呴櫎杈撻�绾垮懡浠�+        /// </summary>
+        /// <param name="line"></param>
+        /// <param name="command"> 1.agv浠诲姟寮傚父鍙栨秷</param>
+        public static void triggerAlarmCommand(LinePlcInfo line, short command)
+        {
+            S7Helper.WriteDint(line.deviceNo, 101, line.writeAddr + 20, command); // 浠诲姟鍙�+        }
+
         public class SSXStatusInfo {
             public string deviceNo { get; set; }
             public string status { get; set; }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs
index 4428931..990dee3 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.HD/process/TaskProcess.cs
@@ -240,7 +240,6 @@
                             else {
                                 Console.WriteLine($"璧风偣鎵樼洏鏁伴噺鍜岃揣浣嶅鍣ㄨ〃涓嶇鍚堬紝璇锋鏌ャ�璐т綅琛ㄣ�鍜屻�璐т綅瀹瑰櫒琛ㄣ�");
                             }
-
                         }
                     }
                 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs
index 07262ce..b7d79c7 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/Monitor.cs
@@ -149,7 +149,7 @@
                                         {
                                             
                                             float weight = pipelineSignalInfo.weight / trayCodes.Count;
-                                            float furWeight =  WMSHelper.getFurWeight(child.LOTATT09);  // 姣涚毊閲嶉噺
+                                            float furWeight =  WMSHelper.getFurWeight(child.LOTATT10);  // 姣涚毊閲嶉噺
                                             child.F_NET_WEIGHT = weight - furWeight;
                                             asnNo = child.S_ASN_NO;
                                             orientSign = child.LOTATT18;
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs
index 0f3fad3..d1dad47 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/core/WCSCore.cs
@@ -312,6 +312,25 @@
                             ContainerHelper.deleteCntrItem(cntrCode);
                         }
                     }
+
+                    if (wst.S_TYPE == "鍑哄簱浠诲姟") 
+                    {
+                        var child = WMSHelper.getOutstockListChild(wst.S_OP_DEF_CODE, cst.S_DATA);
+
+                        var cntrCodeList = cst.S_CNTR_CODE.Split(',').ToList();
+                        // 鏇存柊鍑哄簱鏁伴噺
+                        float qty = 0;
+                        for (int i = 0; i < cntrCodeList.Count; i++)
+                        {
+                            var cntrItemRels = ContainerHelper.GetCntrItemRel(cntrCodeList[i]);
+                            foreach (var cntrItemRel in cntrItemRels)
+                            {
+                                qty -= cntrItemRel.F_QTY;
+                            }
+                        }
+                        child.PRE_COMPLETED_QTY = child.PRE_COMPLETED_QTY + qty;
+                        WMSHelper.updateOutStockListChild(child);
+                    }
                 }
             }
         }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs
index 9cae50b..d5aecc2 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/process/TaskProcess.cs
@@ -280,7 +280,7 @@
                                 var cntrItemRel = ContainerHelper.GetCntrItemRel(downCntr.S_CNTR_CODE).FirstOrDefault();
                                 if (cntrItemRel != null)
                                 {
-                                    float height = WMSHelper.getFurHeight(cntrItemRel.LOTATT09);
+                                    float height = WMSHelper.getFurHeight(cntrItemRel.LOTATT10);
                                     mst.S_START_LOC = mst.S_START_LOC + "-" + height;
                                 }
                             }
@@ -291,7 +291,7 @@
                         if (endLocCntrRels != null && endLocCntrRels.Count == 1) {
                             var cntrItemRel = ContainerHelper.GetCntrItemRel(endLocCntrRels[0].S_CNTR_CODE).FirstOrDefault();
                             if (cntrItemRel != null) {
-                                float height = WMSHelper.getFurHeight(cntrItemRel.LOTATT09);
+                                float height = WMSHelper.getFurHeight(cntrItemRel.LOTATT10);
                                 mst.S_END_LOC = mst.S_END_LOC + "-" + height;
                             }
                         }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs
index 9999732..52c4633 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.SXJK/wms/WMSHelper.cs
@@ -1360,12 +1360,22 @@
                 }
 
                 // 鏌ヨ鍚屾壒娆″叆搴撻攣鏁伴噺锛屽鏋滈攣鏁伴噺 >= 2 ,鍒欎笉鍐嶄粠銆愮┖鎺掋�鍏ュ簱
-                int lockNum = db.Queryable<Location>().Where(a => a.N_LOCK_STATE == 1 && a.S_LOCK_OP.Trim() == asnNo).Count();
-                LogHelper.Info("鍚屾壒娆″叆搴撻攣鏁伴噺锛� + lockNum, "Mobox");
-                if (end == null && rowNum < 2 && lockNum < 2 )
+                var lockRow = db.Queryable<Location>().Where(a => a.N_LOCK_STATE == 1 && a.S_LOCK_OP.Trim() == asnNo).Take(1).PartitionBy(l => new { l.S_AREA_CODE, l.N_ROW }).ToList();
+                LogHelper.Info("鍚屾壒娆″叆搴撻攣鏁伴噺锛� + lockRow.Count, "Mobox");
+                if (end == null && rowNum < 2 && lockRow.Count < 2 )
                 {
                     string fullerCode = null;
-                    if (rowNum == 1) 
+                    if (lockRow.Count > 0) 
+                    {
+                        var maxLoc = lockRow[0];
+                        var fuller = db.Queryable<TN_Fuller>().Where(a => a.S_AREA_CODE == maxLoc.S_AREA_CODE && a.N_ROW == maxLoc.N_ROW).First();
+                        if (fuller != null)
+                        {
+                            fullerCode = fuller.FULLER_CODE;
+                        }
+                    }
+
+                    if (fullerCode == null && rowNum > 0 ) 
                     {
                         var maxLoc = listMaxCol[0];
                         var fuller = db.Queryable<TN_Fuller>().Where(a => a.S_AREA_CODE == maxLoc.S_AREA_CODE && a.N_ROW == maxLoc.N_ROW).First();
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json
index 67b3418..e2e8447 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/config/config.json
@@ -1,6 +1,7 @@
 {
   "HostToAgvServerUrl": "http://192.168.1.146:9988/HostToAGV.cgi",
   "HASeverUrl": "http://172.16.10.41",
+  "NDCApiUrl": "",
   "SqlServer": "server=192.168.1.204;uid=root;pwd=yn123456;database=oimobox",
   "SqlServer1": "Data Source=192.168.1.198\\sql2008;Initial Catalog=OIMobox;User ID=sa;Password=sa@2015",
   "ApiPort": 8901,
@@ -8,24 +9,24 @@
   "WHCode": "IW001",
   "NDCApiUrl": "",
   "baseTrayBufferLoc": [
-   
-	{
+
+    {
       "bufferOutLoc": "SeA26",
       "bufferInLoc": "PPA06-12-1-2"
     },
-	{
+    {
       "bufferOutLoc": "SeA27",
       "bufferInLoc": "PPA07-13-1-1"
     },
-	{
+    {
       "bufferOutLoc": "SeA28",
       "bufferInLoc": "PPA07-13-1-2"
     },
-	{
+    {
       "bufferOutLoc": "SeA29",
       "bufferInLoc": "PPA07-14-1-1"
     },
-	{
+    {
       "bufferOutLoc": "SeA231",
       "bufferInLoc": "PPA07-14-1-2"
     }
@@ -69,7 +70,7 @@
     },
     {
       "locCode": "SeA05",
-      "roadway": [ 2],
+      "roadway": [ 2 ],
       "action": 1
     },
     {
@@ -94,7 +95,7 @@
     },
     {
       "locCode": "SeA10",
-      "roadway": [  3 ],
+      "roadway": [ 3 ],
       "action": 1
     },
     {
@@ -189,22 +190,22 @@
     },
     {
       "locCode": "SeA29",
-      "roadway": [ 6,7 ],
+      "roadway": [ 6, 7 ],
       "action": 1
     },
     {
       "locCode": "SeA30",
-      "roadway": [ 6,7 ],
+      "roadway": [ 6, 7 ],
       "action": 2
     },
     {
       "locCode": "SeA31",
-      "roadway": [ 6,7 ],
+      "roadway": [ 6, 7 ],
       "action": 1
     },
     {
       "locCode": "SeA32",
-      "roadway": [ 6,7 ],
+      "roadway": [ 6, 7 ],
       "action": 2
     }
   ]
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs
index 926a604..47e2af7 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/dispatch/NDCApi.cs
@@ -8,6 +8,7 @@
 {
     public class NDCApi
     {
+        private static readonly HttpHelper apiHelper = new HttpHelper();
         public static string NDCApiUrl { set; get; }
 
         static NDCApi() {
@@ -20,20 +21,19 @@
         /// <param name="ts"></param>
         /// <param name="pri"></param>
         /// <param name="taskNo"></param>
-        /// <param name="param"></param>
+        /// <param name="paramList"></param>
         /// <returns></returns>
         public static AgvApiResult AddOrderNew(int ts, int pri, string taskNo, List<Param> paramList) 
         {
-            var httpH = new HttpHelper();
             var agvApiResult = new AgvApiResult();
             var model = new AddOrderNewModel();
             model.ts_no = ts;
             model.pri = pri;
             model.task_no = taskNo;
-            model.paramList = paramList;
+            model.param = paramList;
             try {
                 LogHelper.Info($"浠诲姟{taskNo}涓嬪彂锛寋JsonConvert.SerializeObject(model)}" , "NDC");
-                var result = httpH.WebPost(NDCApiUrl + "Add",JsonConvert.SerializeObject(model));
+                var result = apiHelper.Post(NDCApiUrl + "Add",JsonConvert.SerializeObject(model));
                 LogHelper.Info($"浠诲姟涓嬪彂缁撴灉res={result}", "NDC");
                 agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result);
                 return agvApiResult;
@@ -53,15 +53,12 @@
         /// <returns></returns>
         public static AgvApiResult AddOrderNew(AddOrderNewModel model)
         {
-            var httpH = new HttpHelper();
             var agvApiResult = new AgvApiResult();
             try
             {
                 LogHelper.Info($"浠诲姟{model.task_no}涓嬪彂锛寋JsonConvert.SerializeObject(model)}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}涓嬪彂锛寋JsonConvert.SerializeObject(model)}", "NDC");
-                var result = httpH.WebPost(NDCApiUrl + "Add", JsonConvert.SerializeObject(model));
+                var result = apiHelper.Post(NDCApiUrl + "Add", JsonConvert.SerializeObject(model));
                 LogHelper.Info($"浠诲姟涓嬪彂缁撴灉res={result}", "NDC");
-                Console.WriteLine($"浠诲姟涓嬪彂缁撴灉res={result}");
                 agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result);
                 return agvApiResult;
             }
@@ -82,7 +79,6 @@
         /// <returns></returns>
         public static AgvApiResult CancelOrder(string tsNo, bool is_force) 
         {
-            var httpH = new HttpHelper();
             var agvApiResult = new AgvApiResult();
             var model = new CancelOrderModel();
             model.task_no = tsNo;
@@ -90,7 +86,7 @@
             try {
                 LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷锛寋JsonConvert.SerializeObject(model)}", "NDC");
                 Console.WriteLine($"浠诲姟{model.task_no}鍙栨秷锛寋JsonConvert.SerializeObject(model)}", "NDC");
-                var result = httpH.WebPost(NDCApiUrl + "Cancel", JsonConvert.SerializeObject(model));
+                var result = apiHelper.Post(NDCApiUrl + "Cancel", JsonConvert.SerializeObject(model));
                 LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC");
                 Console.WriteLine($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC");
                 agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result);
@@ -111,15 +107,12 @@
         /// <returns></returns>
         public static AgvApiResult CancelOrder(CancelOrderModel model)
         {
-            var httpH = new HttpHelper();
             var agvApiResult = new AgvApiResult();
             try
             {
                 LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷锛寋JsonConvert.SerializeObject(model)}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}鍙栨秷锛寋JsonConvert.SerializeObject(model)}", "NDC");
-                var result = httpH.WebPost(NDCApiUrl + "Cancel", JsonConvert.SerializeObject(model));
+                var result = apiHelper.Post(NDCApiUrl + "Cancel", JsonConvert.SerializeObject(model));
                 LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC");
                 agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result);
                 return agvApiResult;
             }
@@ -141,7 +134,6 @@
         /// <returns></returns>
         public static AgvApiResult ChangeOrderPri(string taskNo, int newPri)
         {
-            var httpH = new HttpHelper();
             var agvApiResult = new AgvApiResult();
             var model = new ChangePriModel();
             model.task_no = taskNo;
@@ -149,10 +141,8 @@
             try
             {
                 LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{JsonConvert.SerializeObject(model)}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{JsonConvert.SerializeObject(model)}", "NDC");
-                var result = httpH.WebPost(NDCApiUrl + "ChangePri", JsonConvert.SerializeObject(model));
+                var result = apiHelper.Post(NDCApiUrl + "ChangePri", JsonConvert.SerializeObject(model));
                 LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC");
                 agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result);
                 return agvApiResult;
             }
@@ -172,15 +162,12 @@
         /// <returns></returns>
         public static AgvApiResult ChangeOrderPri(ChangePriModel model)
         {
-            var httpH = new HttpHelper();
             var agvApiResult = new AgvApiResult();
             try
             {
                 LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{JsonConvert.SerializeObject(model)}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{JsonConvert.SerializeObject(model)}", "NDC");
-                var result = httpH.WebPost(NDCApiUrl + "ChangePri", JsonConvert.SerializeObject(model));
+                var result = apiHelper.Post(NDCApiUrl + "ChangePri", JsonConvert.SerializeObject(model));
                 LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC");
                 agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result);
                 return agvApiResult;
             }
@@ -202,7 +189,6 @@
         /// <returns></returns>
         public static AgvApiResult ChangeOrderParam(string taskNo,int paramNo, string paramStr) 
         {
-            var httpH = new HttpHelper();
             var agvApiResult = new AgvApiResult();
             var model = new ChangeParamModel();
             model.task_no = taskNo;
@@ -210,10 +196,8 @@
             model.param = paramStr;
             try {
                 LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋JsonConvert.SerializeObject(model)}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋JsonConvert.SerializeObject(model)}", "NDC");
-                var result = httpH.WebPost(NDCApiUrl + "ChangeParam", JsonConvert.SerializeObject(model));
+                var result = apiHelper.Post(NDCApiUrl + "ChangeParam", JsonConvert.SerializeObject(model));
                 LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC");
                 agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result);
                 return agvApiResult;
             }
@@ -232,15 +216,12 @@
         /// <returns></returns>
         public static AgvApiResult ChangeOrderParam(ChangeParamModel model)
         {
-            var httpH = new HttpHelper();
             var agvApiResult = new AgvApiResult();
             try
             {
                 LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋JsonConvert.SerializeObject(model)}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋JsonConvert.SerializeObject(model)}", "NDC");
-                var result = httpH.WebPost(NDCApiUrl + "ChangeParam", JsonConvert.SerializeObject(model));
+                var result = apiHelper.Post(NDCApiUrl + "ChangeParam", JsonConvert.SerializeObject(model));
                 LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC");
-                Console.WriteLine($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC");
                 agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result);
                 return agvApiResult;
             }
@@ -269,7 +250,7 @@
         public int ts_no { set; get; }//TS 鍙凤紝蹇呴』鏈夊�	
         public int pri { set; get; }//浼樺厛绾�         public string task_no { set; get; }//涓婃父浠诲姟缂栫爜锛屽鏋�no_feedback = 1 鏃讹紝鍙互涓虹┖
-        public List<Param> paramList { set; get; } = new List<Param>();//鍙傛暟鍒楄〃
+        public List<Param> param { set; get; } = new List<Param>();//鍙傛暟鍒楄〃
     }
 
 
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs
index ed693e9..5aaec1e 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/process/TaskProcess.cs
@@ -255,7 +255,7 @@
                         };
                         paramList.Add(param);
                     }
-                    model.paramList = paramList;
+                    model.param = paramList;
                     LogHelper.Info($"鍚慉GV涓嬪彂浠诲姟锛屼换鍔″弬鏁帮細{model}", "WMS");
                     var res = NDCApi.AddOrderNew(model);
                     if (res != null && res.err_code == 0 || true)
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config
index 7f541b1..44d0f06 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/App.config
@@ -37,6 +37,14 @@
         <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-5.2.9.0" newVersion="5.2.9.0" />
       </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-8.0.30.0" newVersion="8.0.30.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
+      </dependentAssembly>
     </assemblyBinding>
   </runtime>
 </configuration>
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 bc8dae9..612ea58 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
@@ -35,8 +35,23 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
+      <HintPath>packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath>
+    </Reference>
     <Reference Include="EasyModbus, Version=5.6.0.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>packages\EasyModbusTCP.5.6.0\lib\net40\EasyModbus.dll</HintPath>
+    </Reference>
+    <Reference Include="Google.Protobuf, Version=3.19.4.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+      <HintPath>packages\Google.Protobuf.3.19.4\lib\net45\Google.Protobuf.dll</HintPath>
+    </Reference>
+    <Reference Include="K4os.Compression.LZ4, Version=1.2.6.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
+      <HintPath>packages\K4os.Compression.LZ4.1.2.6\lib\net46\K4os.Compression.LZ4.dll</HintPath>
+    </Reference>
+    <Reference Include="K4os.Compression.LZ4.Streams, Version=1.2.6.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
+      <HintPath>packages\K4os.Compression.LZ4.Streams.1.2.6\lib\net46\K4os.Compression.LZ4.Streams.dll</HintPath>
+    </Reference>
+    <Reference Include="K4os.Hash.xxHash, Version=1.0.6.0, Culture=neutral, PublicKeyToken=32cd54395057cec3, processorArchitecture=MSIL">
+      <HintPath>packages\K4os.Hash.xxHash.1.0.6\lib\net46\K4os.Hash.xxHash.dll</HintPath>
     </Reference>
     <Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\netstandard2.0\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
@@ -52,6 +67,9 @@
     </Reference>
     <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
+    </Reference>
+    <Reference Include="MySql.Data, Version=8.0.30.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
+      <HintPath>packages\MySql.Data.8.0.30\lib\net452\MySql.Data.dll</HintPath>
     </Reference>
     <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <HintPath>..\ConsoleApp1\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
@@ -82,10 +100,13 @@
     <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
     </Reference>
+    <Reference Include="System.ComponentModel, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Configuration.Install" />
     <Reference Include="System.Core" />
     <Reference Include="System.IO.Compression" />
+    <Reference Include="System.Management" />
     <Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
     </Reference>
@@ -109,6 +130,7 @@
     <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
     </Reference>
+    <Reference Include="System.Transactions" />
     <Reference Include="System.Web" />
     <Reference Include="System.Web.Http, Version=5.2.9.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Web.Http.dll</HintPath>
@@ -132,9 +154,15 @@
     <Reference Include="Topshelf.NLog, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL">
       <HintPath>..\packages\Topshelf.NLog.4.3.0\lib\net452\Topshelf.NLog.dll</HintPath>
     </Reference>
+    <Reference Include="Ubiety.Dns.Core, Version=2.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
+      <HintPath>packages\MySql.Data.8.0.30\lib\net452\Ubiety.Dns.Core.dll</HintPath>
+    </Reference>
     <Reference Include="WebActivatorEx, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7b26dc2a43f6a0d4, processorArchitecture=MSIL">
       <HintPath>..\packages\WebActivatorEx.2.0\lib\net40\WebActivatorEx.dll</HintPath>
     </Reference>
+    <Reference Include="ZstdNet, Version=1.4.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
+      <HintPath>packages\MySql.Data.8.0.30\lib\net452\ZstdNet.dll</HintPath>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
     <Compile Include="api\MoboxController.cs" />
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs
index 595c4df..3244513 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/Program.cs
@@ -22,6 +22,8 @@
     internal class Program
     {
         static void Main(string[] args) {
+
+            Settings.Init();
             //1.0 寮�惎api
             Startup();
             //2.0 寮�惎tcp
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 959c9e7..c63c661 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
@@ -4,6 +4,7 @@
 using HH.WCS.Mobox3.YNJT_PT.process;
 using HH.WCS.Mobox3.YNJT_PT.util;
 using HH.WCS.Mobox3.YNJT_PT.wms;
+using MySqlX.XDevAPI.Common;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using SqlSugar;
@@ -52,7 +53,7 @@
                     N_IS_URGENT = model.isUrgent,
                     T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                     N_IS_FULL = model.isFull,
-
+                    S_LOC = model.loc
                 };
                 WMSHelper.addOffLineRecord(record);
             }
@@ -118,6 +119,26 @@
                                                 var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
                                                 if (itemBarcodeInfo != null)
                                                 {
+                                                    itemBarcodeInfo.N_URGENT_FLAG = offLineRecord.N_IS_URGENT;
+                                                    // 璁$畻鐢熸晥鏃堕棿銆佸け鏁堟椂闂�+                                                    var overage = WMSHelper.getOverage(itemBarcodeInfo.BARCODE);
+                                                    LogHelper.Info($"璁$畻鐢熸晥鏃堕棿銆佸け鏁堟椂闂达紝杩斿洖鍊硷細{JsonConvert.SerializeObject(overage)}", "WMS");
+                                                    if (overage != null)
+                                                    {
+                                                        DateTime txndate = DateTime.Parse(itemBarcodeInfo.TXNDATE);
+                                                        DateTime minTime = txndate.AddHours(overage.MINHOUR);
+                                                        DateTime maxTime = txndate.AddDays(overage.OVERAGE);
+                                                        itemBarcodeInfo.S_EFFECTIVE_TIME = minTime.ToString("yyyy-MM-dd HH:mm:ss");
+                                                        itemBarcodeInfo.S_EXPIRATION_TIME = maxTime.ToString("yyyy-MM-dd HH:mm:ss");
+                                                    }
+                                                    else
+                                                    {
+                                                        response.code = 1;
+                                                        response.msg = $"鏈煡璇㈠埌鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅锛屾潯褰㈢爜锛歿itemBarcodeInfo.BARCODE}";
+                                                        return response;
+                                                    }
+
+                                                    ContainerHelper.addCntrItemRel(rfid, itemBarcodeInfo);
                                                     barcodeList.Add(ext);
                                                 }
                                                 else
@@ -203,9 +224,9 @@
                                                 wmsTask.N_B_STATE = 1;
                                                 WMSHelper.UpdateTaskState(wmsTask);
 
-                                                // 缁戝畾瀹瑰櫒鐗╂枡淇℃伅
+                                                /*// 缁戝畾瀹瑰櫒鐗╂枡淇℃伅
                                                 var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
-                                                WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);
+                                                WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);*/
                                             }
                                         }
                                     }
@@ -213,8 +234,8 @@
                                 else
                                 {
                                     // 寮傚父鎵樼洏鎺掗櫎
-                                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.寮傚父鎺掑嚭浣�-                                    endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
+                                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.鎺掑嚭浣�+                                    endLoc = WMSHelper.getOnlneLoc(2);  // 2.绌烘墭涓婄嚎浣嶏紙鎺掑嚭鐨勬墭鐩橀兘鍑哄簱鍒扮┖鎵樹笂绾夸綅杩涜澶勭悊锛�                                     if (endLoc != null && middleLoc != null)
                                     {
                                         var wmsTask = new WMSTask()
@@ -287,6 +308,7 @@
 
         /// <summary>
         /// 璇荤爜璇锋眰
+        /// 鍦烘櫙锛�.
         /// </summary>
         public static ResponseResult readCodeRequest(NotifyDeviceSignalModel model) 
         {
@@ -295,63 +317,74 @@
             {
                 verifyResult = true
             };
-            var wmsTask = WMSHelper.GetWmsTask(model.taskNo);
-            if (wmsTask != null)
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+            if (wcsTask != null && wmsTask != null)
             {
-                if (wmsTask.S_TYPE != "寮傚父鎵樼洏鍑哄簱浠诲姟") 
+                Location endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);   // 鍘熺粓鐐�+                if (wcsTask.S_TYPE == "婊℃枡涓嬬嚎鍏ュ簱浠诲姟")
                 {
-                    Location endLoc = null;
-                    Location middleLoc = null;
                     // 鍒ゆ柇rfid鏄惁寮傚父
-                    if (model.cntrNo != wmsTask.S_CNTR_CODE)
+                    if (model.cntrNo != wcsTask.S_CNTR_CODE)
                     {
-                        endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);
-                        var connectLoc = Settings.connectLocList.Where(a => a.roadway == endLoc.N_ROADWAY && a.type == 1).FirstOrDefault();
-                        middleLoc = LocationHelper.GetLoc(connectLoc.locCode);
-                        endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
+                        // 鏌ヨ鎺掑嚭鍙�+                        Location middleLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, endLoc.N_ROADWAY);
+                        // 鏌ヨ鏂扮粓鐐�+                        endLoc = WMSHelper.getOnlneLoc(2);
+
+                        wcsTask.S_END_LOC = middleLoc.S_CODE;
+                        wcsTask.S_END_AREA = middleLoc.S_AREA_CODE;
+                        WCSHelper.updateTaskEnd(wcsTask);
+
                         wmsTask.S_END_LOC = endLoc.S_CODE;
                         wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
                         WMSHelper.UpdateTaskEnd(wmsTask);
 
-                        var wcsTask = WCSHelper.GetTaskBySrcNo(wmsTask.S_CODE);
-                        if (wcsTask != null)
-                        {
-                            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;
-                        response.data = readCodeFeedbackResponse;
+                    }
+                }
+                else if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟")
+                {
+                    if (model.cntrNo != wcsTask.S_CNTR_CODE)
+                    {
+                        // 璁$畻鎺掑嚭鍙�+                        endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW);
+
+                        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 
                     {
-                        var cntrItemRels = ContainerHelper.GetCntrItemRel(wmsTask.S_CNTR_CODE);
-                        if (cntrItemRels.Count > 0) 
+                        var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE);
+                        if (cntrItemRels.Count > 0)
                         {
-                            if (cntrItemRels[0].S_ITEM_STATE != "OK") 
+                            if (cntrItemRels[0].S_ITEM_STATE != "OK")
                             {
-                                middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.寮傚父鎺掑嚭浣�-                                endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
+                                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);
 
-                                var wcsTask = WCSHelper.GetTaskBySrcNo(wmsTask.S_CODE);
-                                if (wcsTask != null)
-                                {
-                                    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;
-                                response.data = readCodeFeedbackResponse;
+                                readCodeFeedbackResponse.endLoc = endLoc.S_CODE;
                             }
                         }
                     }
+                      
                 }
             }
             else 
@@ -361,6 +394,63 @@
             }
             response.data = readCodeFeedbackResponse;
             return response;
+        }
+
+        /// <summary>
+        /// 鐢宠鏂扮粓鐐�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult applyDest(ApplyDestModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            ApplyDest applyDest = new ApplyDest();
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            if (wcsTask != null)
+            {
+                var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+                if (wcsTask != null)
+                {
+                    string itemCode = null;
+                    var endLoc = LocationHelper.GetLoc(wcsTask.S_END_LOC);
+                    var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE);
+                    if (cntrItemRels.Count > 0)
+                    {
+                        itemCode = cntrItemRels[0].S_ITEM_CODE;
+                    }
+
+                    if (model.applyType == 1)
+                    {
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 3);  // 灏嗗師璐т綅閿佸畾锛堝叾浠栭攣锛�+                        var endLocGroup = WMSHelper.getInStockEndLoc(1, itemCode, endLoc.N_ROADWAY);
+                        if (endLocGroup.endLocList.Count > 0)
+                        {
+                            endLoc = endLocGroup.endLocList[0];
+                            applyDest.endLoc = endLoc.S_CODE;
+                        }
+                    }
+                    else if (model.applyType == 2)
+                    {
+                        var endLocGroup = WMSHelper.getInStockEndLoc(1, cntrItemRels[0].S_ITEM_CODE, 0, endLoc.N_ROADWAY);
+                        if (endLocGroup.endLocList.Count > 0)
+                        {
+                            endLoc = endLocGroup.endLocList[0];
+                            applyDest.endLoc = endLoc.S_CODE;
+                        }
+                    }
+                }
+            }
+            else 
+            {
+                response.code = 1;
+                response.msg = $"浠诲姟:{model.taskNo}涓嶅瓨鍦�;
+            }
+            return response;
+        }
+
+        public class ApplyDest 
+        {
+            public string endLoc { get; set; }
         }
 
         /// <summary>
@@ -444,9 +534,9 @@
                                     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,
                                     S_GROUP_NO = groupNo,
@@ -642,7 +732,7 @@
             if (locCntrs.Count == 1)
             {
                 Location startLoc = LocationHelper.GetLoc(locCntrs[0].S_LOC_CODE);
-                var connectLoc = Settings.connectLocList.Where(a => a.roadway == startLoc.N_ROADWAY && a.type == 1).First();
+                var connectLoc = Settings.connectLocList.Where(a => a.roadway == startLoc.N_ROADWAY).First();
                 Location middleLoc = LocationHelper.GetLoc(connectLoc.locCode);
                 Location endLoc = LocationHelper.GetLoc("");
                 if (endLoc != null)
@@ -767,11 +857,21 @@
 
                         if (model.status == 2 || model.status == 8)
                         {
-                            if (mst != null)
+                            if (mst != null && mst.N_B_STATE != 2)
                             {
-                                if (mst.N_B_STATE != 2)
+                                if (mst.S_END_LOC != cst.S_END_LOC)
                                 {
                                     WCSCore.createLastTask(cst.S_END_LOC, mst);
+                                }
+                                else 
+                                {
+                                    mst.N_B_STATE = 2;
+                                    WMSHelper.UpdateTaskState(mst);
+                                }
+
+                                if (mst.S_TYPE == "鍛煎彨绌烘墭鍑哄簱") 
+                                {
+                                    LocationHelper.UnBindingLoc(mst.S_END_LOC, new List<string>() { mst.S_CNTR_CODE });
                                 }
                             }
                         }
@@ -958,6 +1058,7 @@
 
         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.鏄級
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 8823cb0..5c915b5 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
@@ -26,7 +26,9 @@
             var result = new SimpleResult();
             var task = WCSHelper.GetTask(model.TaskNo);
             if (task != null) {
-                if (task.N_B_STATE == 0) {
+
+                if (task.N_B_STATE == 0)
+                {
                     //绛夊緟鐩存帴淇敼鐘舵�涓哄彇娑�                     WCSHelper.UpdateStatus(model.TaskNo, "鍙栨秷");
                     LocationHelper.UnLockLoc(task.S_START_LOC);
@@ -35,15 +37,27 @@
                     /*LocationHelper.UnBindingLoc(task.S_START_LOC, new List<string> { task.S_CNTR_CODE });*/
                     result.resultMsg = "浠诲姟绛夊緟锛岀洿鎺ュ彇娑�;
                 }
-                else if (task.N_B_STATE < 3) {
-                    //宸叉帹閫佷絾鏄病鏈夊畬鎴愭垨鑰呭彇娑堬紝閫氱煡hosttoagv
-                    NDCHelper.Cancel(task.S_CODE);
-                    result.resultMsg = "浠诲姟鍙栨秷宸茬粡鍙戦�缁欏皬杞�;
+                else if (task.N_B_STATE < 3)
+                {
+                    if (task.S_SCHEDULE_TYPE == "AGV")
+                    {
+                        //宸叉帹閫佷絾鏄病鏈夊畬鎴愭垨鑰呭彇娑堬紝閫氱煡hosttoagv
+                        NDCHelper.Cancel(task.S_CODE);
+                        result.resultMsg = "浠诲姟鍙栨秷宸茬粡鍙戦�缁欏皬杞�;
+                    }
+                    else if (task.S_SCHEDULE_TYPE == "WCS") 
+                    {
+                    
+                    }
+                   
                 }
-                else {
+                else
+                {
                     result.resultCode = 1;
                     result.resultMsg = "浠诲姟宸茬粨鏉�;
                 }
+               
+               
             }
             else {
                 result.resultCode = 1;
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 6d02829..8bec1eb 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
@@ -66,6 +66,7 @@
             catch (Exception ex)
             {
                 LogHelper.Info($"WMS鍐呴儴閿欒,閿欒鍘熷洜锛歿ex.Message}", "WMS");
+                LogHelper.Info(ex.StackTrace, "WMS");
                 responseResult.code = 500;
                 responseResult.msg = $"WMS鍐呴儴閿欒锛岃鑱旂郴寮�彂浜哄憳澶勭悊";
             }
@@ -74,7 +75,22 @@
         }
 
         /// <summary>
-        /// 3.纭寲鏈哄懠鍙儦鑳庡嚭搴�+        /// 3.鐢宠缁堢偣
+        /// 鍦烘櫙锛�.鍫嗗灈鏈烘斁璐у紓甯哥敵璇锋柊缁堢偣锛�2.鍫嗗灈鏈哄叆搴撹緭閫佺嚎鍫靛鐢宠鏂扮粓鐐�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public ResponseResult applyDest(ApplyDestModel model) 
+        {
+            LogHelper.Info("銆�.鐢宠缁堢偣銆慳pplyDest 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
+            ResponseResult responseResult = new ResponseResult();
+            responseResult = ApiHelper.applyDest(model);
+            LogHelper.Info("銆�.鐢宠缁堢偣銆慳pplyDest 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 4.纭寲鏈哄懠鍙儦鑳庡嚭搴�         /// 閫昏緫锛�         /// 1.鏍规嵁鏈哄彴鍙锋煡璇€�纭寲鏈哄伐鍗曡〃銆戙�銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戠瓫閫夊綋鍓嶇彮娆$殑鐢熶骇璁″垝鏁伴噺鏄惁婊¤冻锛屽綋棰勮鐢熶骇鏁伴噺 = 瀹為檯鏁�鍦ㄩ�鏁伴噺 锛屽垯鍋滄鍙枡
         /// 2.鏌ヨ鏈哄彴鍙峰湪銆愮~鍖栨満宸ュ崟琛ㄣ�瀵瑰簲鐨勭墿鏂欑紪鐮侊紝
@@ -84,71 +100,71 @@
         /// <returns></returns>
         public ResponseResult callItemOutStock(CallItemModel model ) 
         {
-            LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
+            LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
             ResponseResult responseResult = new ResponseResult();
             responseResult = ApiHelper.callItemOutStock(model);
-            LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
+            LogHelper.Info("銆�.纭寲鏈哄懠鍙儦鑳庡嚭搴撱�callItemOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
             return responseResult;
         }
 
         /// <summary>
-        /// 4.绌烘墭鍥炵珛搴�+        /// 5.绌烘墭鍥炵珛搴�         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
         public ResponseResult emptyTrayInStock(EmptyTrayInStockModel model ) 
         {
-            LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
+            LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
             ResponseResult responseResult = new ResponseResult();
             responseResult = ApiHelper.emptyTrayInStock(model);
-            LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
+            LogHelper.Info("銆�.绌烘墭鍥炵珛搴撱�emptyTrayInStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
             return responseResult;
         }
 
         /// <summary>
-        /// 5.鎴愬瀷鏈哄懠鍙┖鎵�+        /// 6.鎴愬瀷鏈哄懠鍙┖鎵�         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
         public ResponseResult callEmptyTrayOutStock(CallEmptyTrayOutStockModel model)
         {
-            LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
+            LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
             ResponseResult responseResult = new ResponseResult();
             responseResult = ApiHelper.callEmptyTrayOutStock(model);
-            LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
+            LogHelper.Info("銆�.鎴愬瀷鏈哄懠鍙┖鎵樸�callEmptyTrayOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
             return responseResult;
         }
 
         /// <summary>
-        /// 6.鑳庤儦绔嬪簱鎶芥鍑哄簱銆佷汉宸ュ嚭搴撹儙鑳�+        /// 7.鑳庤儦绔嬪簱鎶芥鍑哄簱銆佷汉宸ュ嚭搴撹儙鑳�         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
         public ResponseResult embryoCheckOutStock(EmbryoCheckOutStockModel model)
         {
-            LogHelper.Info("銆�.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
+            LogHelper.Info("銆�.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
             ResponseResult responseResult = new ResponseResult();
             responseResult = ApiHelper.embryoCheckOutStock(model);
-            LogHelper.Info("銆�6.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
+            LogHelper.Info("銆�7.鑳庤儦绔嬪簱鎶芥鍑哄簱銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
             return responseResult;
         }
 
         /// <summary>
-        /// 7.寮傚父鍥炲簱娴佺▼
+        /// 8.寮傚父鍥炲簱娴佺▼
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
         public ResponseResult anomalyTrayInStock(AnomalyTrayInStockModel model) 
         {
-            LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
+            LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍏ュ弬锛� + JsonConvert.SerializeObject(model), "WMS");
             ResponseResult responseResult = new ResponseResult();
             responseResult = ApiHelper.anomalyTrayInStock(model);
-            LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
+            LogHelper.Info("銆�.寮傚父鍥炲簱娴佺▼銆慹mbryoCheckOutStock 鍑哄弬锛� + JsonConvert.SerializeObject(responseResult), "WMS");
             return responseResult;
         }
 
         /// <summary>
-        /// 8.WCS 浠诲姟鐘舵�鍙嶉
+        /// 9.WCS 浠诲姟鐘舵�鍙嶉
         /// 涓氬姟鍦烘櫙锛歐CS鍦ㄦ墽琛屼换鍔℃椂锛屽洖鎶ヤ换鍔$姸鎬�         /// </summary>
         /// <param name="model"></param>
@@ -157,14 +173,14 @@
         /*[Route("notifyTaskStatus")]*/
         public ReturnResult notifyTaskStatus(TaskStatusFeedbackModel model)
         {
-            LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆慠equest锛� + JsonConvert.SerializeObject(model), "WMS");
+            LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆慠equest锛� + JsonConvert.SerializeObject(model), "WMS");
             var result = ApiHelper.taskStatusFeedback(model);
-            LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆憆esponse锛� + JsonConvert.SerializeObject(result), "WMS");
+            LogHelper.Info("銆�.WCS浠诲姟鐘舵�鍙嶉銆憆esponse锛� + JsonConvert.SerializeObject(result), "WMS");
             return result;
         }
 
         /// <summary>
-        /// 9.绌烘墭鐩樿В缁�+        /// 10.绌烘墭鐩樿В缁�         /// 涓氬姟鍦烘櫙锛氱┖鎵樼洏鍥炰富绾�         /// </summary>
         /// <param name="model"></param>
@@ -172,9 +188,9 @@
         [HttpPost]
         public ReturnResult emptyTrayUnBind(EmptyTrayUnBindModel model)
         {
-            LogHelper.Info("銆�.绌烘墭鐩樿В缁戙�Request锛� + JsonConvert.SerializeObject(model), "WMS");
+            LogHelper.Info("銆�0.绌烘墭鐩樿В缁戙�Request锛� + JsonConvert.SerializeObject(model), "WMS");
             var result = ApiHelper.emptyTrayUnBind(model);
-            LogHelper.Info("銆�.绌烘墭鐩樿В缁戙�response锛� + JsonConvert.SerializeObject(result), "WMS");
+            LogHelper.Info("銆�0.绌烘墭鐩樿В缁戙�response锛� + JsonConvert.SerializeObject(result), "WMS");
             return result;
         }
 
@@ -226,6 +242,15 @@
             public string trayCode { get; set; } // 瀹瑰櫒缂栫爜
         }
 
+        public class ApplyDestModel
+        {
+            public string reqId { get; set; }
+            public string reqTime { get; set; }
+            public string taskNo { get; set; }  // 浠诲姟鍙�+            public int applyType { get; set; }  //鐢宠绫诲瀷 1.鍫嗗灈鏈烘斁璐у紓甯哥敵璇锋柊缁堢偣锛�2.鍫嗗灈鏈哄叆搴撹緭閫佺嚎鍫靛鐢宠鏂扮粓鐐�+            public string loc { get; set; }
+        }
+
         public class CallItemModel 
         {
             public string reqId { 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 1469950..495b2d3 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
@@ -1,25 +1,82 @@
 {
   "HostToAgvServerUrl": "http://192.168.1.146:9988/HostToAGV.cgi",
   "HASeverUrl": "http://172.16.10.41",
-  "SqlServer": "Data Source=192.168.1.188;Initial Catalog=OIMobox;User ID=sa;Password=Am123123",
+  "SqlServer": "server=192.168.1.204;uid=root;pwd=yn123456;database=oimobox",
   "SqlServer1": "Data Source=192.168.1.198\\sql2008;Initial Catalog=OIMobox;User ID=sa;Password=sa@2015",
   "ApiPort": 8901,
   "FacCode": "1122",
   "WHCode": "TSCK",
-  "StockArea": "area2",
-  "AbnormalArea": "area1", // 寮傚父鍖�+  "StockArea": "SSA",
 
-  // 鎺ラ┏浣�type 1.鎺掑嚭鍙�+  // 鎺ラ┏浣�type 1.绔嬪簱鍓嶆帓鍑哄彛 2.婊℃枡涓婄嚎浣�3.绌烘墭涓婄嚎浣�4.纭寲鏈哄墠鎺掗櫎鍙�   "ConnectLoc": [
     {
-      "locCode": "loc1",
-      "roadway": 1,
+      "locCode": "OA1-1-1-1",
+      "roadway": 1
+    },
+    {
+      "locCode": "OA1-1-2-1",
+      "roadway": 2
+    },
+    {
+      "locCode": "OA1-1-3-1",
+      "roadway": 3
+    },
+    {
+      "locCode": "OA1-1-4-1",
+      "roadway": 4
+    },
+    {
+      "locCode": "OA1-1-5-1",
+      "roadway": 5
+    },
+    {
+      "locCode": "OA1-1-6-1",
+      "roadway": 6
+    },
+    {
+      "locCode": "OA1-1-7-1",
+      "roadway": 7
+    },
+    {
+      "locCode": "OA1-1-8-1",
+      "roadway": 8
+    }
+  ],
+
+  // 涓�杈撻�)绾胯揣浣�type 1.婊℃枡涓婄嚎浣�2.绌烘墭涓婄嚎浣�+  "OnLineLoc": [
+    {
+      "locCode": "UCL1-1-1-1",
       "type": 1
     },
     {
-      "locCode": "loc1",
-      "roadway": 2,
+      "locCode": "UCL1-1-2-1",
       "type": 1
+    },
+    {
+      "locCode": "UCL1-1-3-1",
+      "type": 2
+    }
+  ],
+
+  // 鍙枡寮傚父鎺掗櫎浣�+  "CallOutLoc": [
+    {
+      "locCode": "OA1-2-1-1",
+      "row": 1
+    },
+    {
+      "locCode": "OA1-2-2-1",
+      "row": 2
+    },
+    {
+      "locCode": "OA1-2-3-1",
+      "row": 3
+    },
+    {
+      "locCode": "OA1-2-4-1",
+      "roadway": 4
     }
   ]
 }
\ No newline at end of file
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs
index e7363b5..f987756 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs
@@ -70,6 +70,16 @@
                             //瀹夊叏璇锋眰绛�                             TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
                         }
+
+                        if (model.State == 2) 
+                        {
+                            var mst = WMSHelper.GetWmsTask(TN_Task.S_OP_CODE);
+                            if (mst.S_END_LOC == TN_Task.S_END_LOC) 
+                            {
+                                mst.N_B_STATE = 2;
+                                WMSHelper.UpdateTaskState(mst);
+                            }
+                        }
                     }
                 }
             }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs
index 3790928..b781003 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WMSCore.cs
@@ -80,7 +80,6 @@
                                 S_START_LOC = a.S_START_LOC,
                                 S_END_LOC = a.S_END_LOC,
                                 S_SCHEDULE_TYPE = "鏉ゥ",
-                                N_CNTR_COUNT = 1,
                                 S_CNTR_CODE = a.S_CNTR_CODE,
 
                             };
@@ -123,7 +122,7 @@
                                     S_START_LOC = a.S_START_LOC,
                                     S_END_LOC = a.S_END_LOC,
                                     S_SCHEDULE_TYPE = "鏉ゥ",
-                                    N_CNTR_COUNT = 1,
+                        
                                     S_CNTR_CODE = a.S_CNTR_CODE,
 
                                 };
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs
index 210a4ba..8750729 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Container.cs
@@ -11,28 +11,10 @@
         public string S_CODE { get; set; }
         public string S_TYPE { get; set; }
         public string S_SPEC { get; set; }
-        public float F_WEIGHT { get; set; }
-        public float F_LOAD_WEIGHT { get; set; }
-        public float F_MAX_WEIGHT { get; set; }
-        public int N_LENGTH { get; set; }
-        public int N_WIDTH { get; set; }
-        public int N_HEIGHT { get; set; }
-        public string C_IS_VIRTUAL { get; set; } = "N";
-        public int N_TYPE { get; set; }
-        public string C_ENABLE { get; set; } = "Y";
-        public string S_STATE_PRE { get; set; }
-        public int N_REVIEW_RESULT { get; set; }
 
         public int N_DETAIL_COUNT { get; set; }
         public int N_B_STATE { get; set; }
-        public string S_LOCK_OP_CODE { get; set; }
-        public string S_LOCK_STATE { get; set; }
-        public int N_LOCK_STATE { get; set; }
-        /// <summary>
-        /// 码盘时候标记
-        /// </summary>
-        public string S_SRC { get; internal set; }
-        public string S_DEST { get; internal set; }
+
 
 
         [SugarColumn(IsIgnore = true)]
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs
index 16aa6c8..e6a8414 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/GreenTireInformation.cs
@@ -22,5 +22,12 @@
         public int QTY { get; set; } // 鏁伴噺
         public string TXNDATE { get; set; } // 鐢熶骇鏃堕棿
         public string DATE_SHIFT { get; set; } // 杞彮鏃ユ湡
+
+        [SugarColumn(IsIgnore = true)]
+        public string S_EFFECTIVE_TIME { get; set; } // 鐢熸晥鏃堕棿
+        [SugarColumn(IsIgnore = true)]
+        public string S_EXPIRATION_TIME { get; set; } // 澶辨晥鏃堕棿
+        [SugarColumn(IsIgnore = true)]
+        public int N_URGENT_FLAG { get; set; } = 0; // 鍔犳�鏍囪瘑
     }
 }
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 bb12b0f..8ba5b9e 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
@@ -15,7 +15,8 @@
     {
         public string S_RFID { get; set; } // 鎵樼洏鍙�         public string S_LOC { get; set; } // 涓嬬嚎璐т綅
-        public string S_DEVICE_NO { get; set; } // 涓嬬嚎璐т綅
+        public string S_ITEM_STATUS { get; set; } = "OK"; // 涓嬬嚎璐т綅
+        public string S_DEVICE_NO { get; set; } // 璁惧鍙�         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.鏄�diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs
index 200e750..e6b3ddc 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/Overage.cs
@@ -11,7 +11,7 @@
     [SugarTable("TN_standard_overage")]
     internal class Overage : BaseModel
     {
-        public string MCNGRP { get; set; } //鐢熶骇娴佺▼缁�+        public string MCNGRP { get; set; } //鐢熶骇娴佺▼缁�   0.纭寲鏈�1.鍗婂埗鍝�         public string ITEMPATT { get; set; } // 鐗╂枡鍓嶇紑
         public int OVERAGE { get; set; }  // 鏈�ぇ淇濆瓨鏃堕棿
         public float MINHOUR { get; set; } // 澶氫箙鍚庣敓鏁�diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs
index a0491c2..97f9349 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/models/WCSTask.cs
@@ -50,12 +50,7 @@
         public string S_OP_NAME { get; set; }
         public string S_WORKSHOP_NO { get; set; }
         public string S_WORKSHOP_NAME { get; set; }
-        // 璧风偣灞傛暟
-        public int N_START_LAYER { get; internal set; }
-        // 缁堢偣灞傛暟
-        public int N_END_LAYER { get; internal set; }
-        // 瀹瑰櫒鏁伴噺
-        public int N_CNTR_COUNT { get; internal set; }
+ 
 
         internal static string GetStateStr(int state) {
             //0绛夊緟	  1宸叉帹閫�    2鎵ц    3瀹屾垚    4閿欒
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config
index 8e27579..cb87077 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/packages.config
@@ -1,6 +1,10 @@
 锘�?xml version="1.0" encoding="utf-8"?>
 <packages>
   <package id="EasyModbusTCP" version="5.6.0" targetFramework="net461" />
+  <package id="Google.Protobuf" version="3.19.4" targetFramework="net461" />
+  <package id="K4os.Compression.LZ4" version="1.2.6" targetFramework="net461" />
+  <package id="K4os.Compression.LZ4.Streams" version="1.2.6" targetFramework="net461" />
+  <package id="K4os.Hash.xxHash" version="1.0.6" targetFramework="net461" />
   <package id="Microsoft.AspNet.WebApi.Client" version="5.2.9" targetFramework="net461" />
   <package id="Microsoft.AspNet.WebApi.Core" version="5.2.9" targetFramework="net461" />
   <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.9" targetFramework="net461" />
@@ -19,11 +23,13 @@
   <package id="Microsoft.Owin.Host.HttpListener" version="4.2.2" targetFramework="net461" />
   <package id="Microsoft.Owin.Hosting" version="4.2.2" targetFramework="net461" />
   <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" />
+  <package id="MySql.Data" version="8.0.30" targetFramework="net461" />
   <package id="Newtonsoft.Json" version="13.0.2" targetFramework="net461" />
   <package id="NLog" version="5.1.1" targetFramework="net452" requireReinstallation="true" />
   <package id="NModbus" version="3.0.81" targetFramework="net461" />
   <package id="NModbus4" version="2.1.0" targetFramework="net461" />
   <package id="Owin" version="1.0" targetFramework="net461" />
+  <package id="Portable.BouncyCastle" version="1.9.0" targetFramework="net461" />
   <package id="S7netplus" version="0.20.0" targetFramework="net461" />
   <package id="SqlSugar" version="5.1.3.47" targetFramework="net461" />
   <package id="Swashbuckle" version="5.6.0" targetFramework="net461" />
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 146d3d4..95fb466 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
@@ -20,7 +20,6 @@
         /// <param name="mst"></param>
         /// <param name="v"></param>
         internal static void CacheBitUpdate(WCSTask mst, bool load) {
-            var trayCarryCount = mst.N_CNTR_COUNT > 0 ? mst.N_CNTR_COUNT : 1;
             if (load) {
                 Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}");
                 LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}");
@@ -245,79 +244,7 @@
                 var endLoc = LocationHelper.GetLocation(mst.S_END_LOC);
 
                 if (mst.S_SCHEDULE_TYPE == "NDC") {
-                    Console.WriteLine($"SendTask {mst.S_CODE}");
-                    var dic = new Dictionary<string, string>();
-                    dic.Add("No", mst.S_CODE);
-                    dic.Add("Pri", mst.N_PRIORITY.ToString());
-                    dic.Add("From", startLoc.S_AGV_SITE);
-                    dic.Add("To", endLoc.S_AGV_SITE);
-                    if (mst.S_TYPE == "绉诲簱")
-                    {
-                        dic.Add("FUNC", "32");
-                    }
-                    else
-                    {
-                        dic.Add("FUNC", "0");
-                    }
-                   
-                    var data = mst.N_END_LAYER + 16 * mst.N_START_LAYER;
-                    // 鍙傛暟4
-                    dic.Add("DATA", data.ToString());
-                    //鐗╂枡淇℃伅涓幏鍙�-                    //鍏堣幏鍙栨墭鐩樹俊鎭�-                    var itemInfo = LocationHelper.GetCntrItem(mst.S_CNTR_CODE);
-                    if (itemInfo != null) {
-                        // 鍙傛暟5
-                        dic.Add("ItemHeight", itemInfo.N_TS_HEIGHT);
-                        //鍙傛暟6 榛樿鍊�-                        string[] parts = itemInfo.Item_Spec.Split('*');
-                        if (parts.Length > 1)
-                        {
-                            if (parts[1].Equals("1200"))
-                            {
-                                dic.Add("TrayType", "1");
-                            }
-                            else if (parts[1].Equals("1210"))
-                            {
-                                dic.Add("TrayType", "2");
-                            }
-                        }
-                    }
-
-                    //鑾峰彇鍙傛暟7鍜�
-                    dic.Add("FromCol", "0"); 
-                    dic.Add("ToCol", "0");
-
-                    //鏀硅捣鐐�-                    var flb1 = GetFreeLineBit(startLoc.S_AREA_CODE, startLoc.N_ROW, startLoc.N_COL);
-                    if (flb1 != null) {
-                        dic["FromCol"] = (startLoc.N_COL - flb1.minCol).ToString();
-                        if (mst.N_START_LAYER == 1) {
-                            dic["From"] = flb1.bit1.ToString();
-                        }
-                        else {
-                            dic["From"] = flb1.bit2.ToString();
-                        }
-                    }
-                    //鏀圭粓鐐�-                    var flb = GetFreeLineBit(endLoc.S_AREA_CODE, endLoc.N_ROW, endLoc.N_COL);
-                    if (flb != null) {
-                        dic["ToCol"] = (endLoc.N_COL - flb.minCol).ToString();
-                        if (mst.N_END_LAYER == 1) {
-                            dic["To"] = flb.bit1.ToString();
-                        }
-                        else {
-                            dic["To"] = flb.bit2.ToString();
-                        }
-                    }
-
-                    var res = NDC.AddNewOrderNew(5, mst.N_PRIORITY, mst.S_CODE, dic);
-                    if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009)) {
-                        //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇
-                        mst.N_B_STATE = 1;
-                        WCSHelper.UpdateStatus(mst);
-                        result = true;
-                    }
+                 
                 }
                 else if (mst.S_SCHEDULE_TYPE == "鏉ゥ") {
                     //璋冪涓夋柟鎺ュ彛
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 1926b76..282a25a 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
@@ -13,13 +13,14 @@
     {
         public static string HostToAgvServerUrl { get; set; }
         public static string HASeverUrl { get; set; }
-        public static string SqlServer { get; set; }
+        public static string SqlServer  { get; set; }
         public static string SqlServer1 { get; set; }
         public static List<ConnectLoc> connectLocList { get; set; }
+        public static List<OnLineLoc> onLineLocList { get; set; }
+        public static List<CallOutLoc> callOutLocList { get; set; }
         public static int port { get; set; }
         public static string WHCode { get; set; }
         public static string FacCode { get; set; }
-        public static string abnormalArea { get; set; }
         public static string stockArea { get; set; }
 
 
@@ -56,9 +57,13 @@
                             if (keyValue.Name == "ConnectLoc") {
                                 connectLocList = JsonConvert.DeserializeObject<List<ConnectLoc>>(keyValue.Value.ToString());
                             }
-                            if (keyValue.Name == "AbnormalArea")
+                            if (keyValue.Name == "OnLineLoc")
                             {
-                                abnormalArea = keyValue.Value.ToString();
+                                onLineLocList = JsonConvert.DeserializeObject<List<OnLineLoc>>(keyValue.Value.ToString());
+                            }
+                            if (keyValue.Name == "CallOutLoc")
+                            {
+                                callOutLocList = JsonConvert.DeserializeObject<List<CallOutLoc>>(keyValue.Value.ToString());
                             }
                             if (keyValue.Name == "StockArea")
                             {
@@ -81,8 +86,19 @@
         {
             public string locCode { get; set; }
             public int roadway { get; set; }
+        }
+
+        public class OnLineLoc 
+        {
+            public string locCode { get; set; }
             public int type { get; set; }
         }
-       
+
+        public class CallOutLoc 
+        {
+            public string locCode { get; set; }
+            public int row { get; set; }
+        }
+
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs
index 1fd3e11..0a0aba5 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/util/SqlHelper.cs
@@ -116,7 +116,7 @@
             {
                 ConnectionString = string.IsNullOrEmpty(url) ? Settings.SqlServer : url,
                 //ConnectionString = @"Data Source=192.168.1.198\sql2008;Initial Catalog=OIMobox;User ID=sa;Password=sa@2015",
-                DbType = DbType.SqlServer,
+                DbType = DbType.MySql,
                 IsAutoCloseConnection = true,
                 InitKeyType = InitKeyType.Attribute//浠庣壒鎬ц鍙栦富閿嚜澧炰俊鎭�             });
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs
index b9f2949..b3997b9 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/ContainerHelper.cs
@@ -1,4 +1,5 @@
-锘縰sing HH.WCS.Mobox3.YNJT_PT.models.other;
+锘縰sing HH.WCS.Mobox3.YNJT_PT.models;
+using HH.WCS.Mobox3.YNJT_PT.models.other;
 using HH.WCS.Mobox3.YNJT_PT.util;
 using System;
 using System.Collections.Generic;
@@ -17,20 +18,7 @@
             var date = DateTime.Now.ToString("yyMMdd");
             return $"TP{date}{id.ToString().PadLeft(4, '0')}";
         }
-        /// <summary>
-        /// 鏍规嵁瀹瑰櫒绫诲瀷銆佺洰鐨勫湴銆佺姸鎬佹煡璇㈠鍣�-        /// </summary>
-        /// <param name="dest"></param>
-        /// <param name="cntrType"></param>
-        /// <param name="state"></param>
-        /// <returns></returns>
-        internal static List<Container> GetCntrListByPurpose(string dest, string cntrType, int state) {
-            //1.0 鏌ヨ揣浣嶅鍣ㄨ〃
-            var db = new SqlHelper<object>().GetInstance();
-            var list = db.Queryable<Container>().Where(a => a.S_DEST == dest && a.S_TYPE == cntrType && a.N_B_STATE == state).ToList();
-            return list;
-
-        }
+        
         /// <summary>
         /// TN_ContainerHelper.test("4L澶╃劧姘寸瑁�鍏�, 50, "335ml涓滄柟鏍戝彾15鍏�, 30);
         /// </summary>
@@ -144,113 +132,54 @@
         }
 
         /// <summary>
-        /// 鏍规嵁瀹瑰櫒鏉ユ簮鍜岀姸鎬佽幏鍙栨墭鐩�+        /// 娣诲姞瀹瑰櫒鐗╂枡淇℃伅
         /// </summary>
-        /// <param name="src"></param>
-        /// <param name="state"></param>
         /// <returns></returns>
-        internal static List<Container> GetCntr(string dest, int state, string cntrType = "") {
+        public static bool addCntrItemRel( string cntrCode,GreenTireInformation info) 
+        {
+            bool res = false;
             var db = new SqlHelper<object>().GetInstance();
-            if (cntrType == "") {
-                return db.Queryable<Container>().Where(a => a.S_DEST == dest && a.N_B_STATE == state).ToList();
-            }
-            else {
-                return db.Queryable<Container>().Where(a => a.S_DEST == dest && a.N_B_STATE == state && a.S_TYPE == cntrType).ToList();
-            }
-        }
-        internal static bool UpdateCntr(List<string> cntrs, string dest, int state) {
-            var res = false;
-            var db = new SqlHelper<object>().GetInstance();
-            var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList();
-            if (models.Count > 0) {
-                models.ForEach(a => {
-                    a.S_DEST = dest; a.N_B_STATE = state;
-                    db.Updateable(a).UpdateColumns(it => new { it.S_DEST, it.N_B_STATE }).ExecuteCommand();
-                });
-                res = true;
-            }
-            return res;
-        }
-        internal static bool UpdateCntrDest(List<string> cntrs, string dest) {
-            var res = false;
-            var db = new SqlHelper<object>().GetInstance();
-            var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList();
-            if (models.Count > 0) {
-                models.ForEach(a => {
-                    a.S_DEST = dest;
-                    db.Updateable(a).UpdateColumns(it => new { it.S_DEST }).ExecuteCommand();
-                });
-                res = true;
-            }
-            return res;
-        }
-        /// <summary>
-        /// 鏇存柊鎵樼洏鏉ユ簮
-        /// </summary>
-        /// <param name="cntr"></param>
-        /// <param name="src"></param>
-        /// <returns></returns>
-        internal static bool UpdateCntrSrc(string cntr, string src) {
-            var res = false;
-            var db = new SqlHelper<object>().GetInstance();
-            var model = db.Queryable<Container>().Where(a => a.S_CODE == cntr).First();
-            if (model != null) {
-                model.S_SRC = src;
-                model.T_MODIFY = DateTime.Now;
-                res = db.Updateable(model).UpdateColumns(it => new { it.S_SRC, it.T_MODIFY }).ExecuteCommand() > 0;
-            }
-            return res;
-        }
-        internal static bool UpdateCntrState(List<string> cntrs, int state) {
-            var res = false;
-            var db = new SqlHelper<object>().GetInstance();
-            var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList();
-            if (models.Count > 0) {
-                models.ForEach(a => {
-                    a.N_B_STATE = state;
-                    db.Updateable(a).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
-                });
-                res = true;
-            }
-            return res;
-        }
+            var container = ContainerHelper.GetCntr(cntrCode);
+            if (container != null)
+            {
+                try
+                {
+                    db.BeginTran();
+                    db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrCode).ExecuteCommand();
 
-        internal static bool UpdateCntr(List<string> cntrs, string src, string dest, int state) {
-            var res = false;
-            var db = new SqlHelper<object>().GetInstance();
-            var models = db.Queryable<Container>().Where(a => cntrs.Contains(a.S_CODE)).ToList();
-            if (models.Count > 0) {
-                models.ForEach(a => {
-                    a.S_DEST = dest; a.N_B_STATE = state; a.S_SRC = src;
-                    db.Updateable(a).UpdateColumns(it => new { it.S_DEST, it.N_B_STATE, it.S_SRC }).ExecuteCommand();
-                });
-                res = true;
+                    CntrItemRel cntrItemRel = new CntrItemRel()
+                    {
+                        S_CG_ID = info.BARCODE,
+                        S_CNTR_CODE = cntrCode,
+                        S_ITEM_CODE = info.ITEMCODE,
+                        S_CELL_NO = info.TIRECODE,
+                        F_QTY = info.QTY,
+                        S_MCN = info.MCN,
+                        S_OPR = info.OPR,
+                        S_OPR02 = info.OPR02,
+                        S_OPR03 = info.OPR03,
+                        S_OPR04 = info.OPR04,
+                        S_WINDUP = info.WINDUP,
+                        S_TXNDATE = info.TXNDATE,
+                        S_DATE_SHIFT = info.DATE_SHIFT,
+                        S_EFFECTIVE_TIME = info.S_EFFECTIVE_TIME,
+                        S_EXPIRATION_TIME = info.S_EXPIRATION_TIME,
+                        N_URGENT_FLAG = info.N_URGENT_FLAG,
+                    };
+
+                    db.Insertable(cntrItemRel).ExecuteCommand();
+                    container.N_DETAIL_COUNT = 1;
+                    db.Updateable(container).ExecuteCommand();
+                    db.CommitTran();
+                    res = true;
+                }
+                catch (Exception ex)
+                {
+                    db.RollbackTran();
+                }
             }
             return res;
         }
-        public static bool ClearCntrInfo(string cntr) {
-
-            var db = new SqlHelper<object>().GetInstance();
-            var model = db.Queryable<Container>().Where(a => a.S_CODE == cntr).First();
-            if (model != null) {
-                model.S_SRC = "";
-                model.S_DEST = "";
-                model.N_B_STATE = 0;
-                model.T_MODIFY = DateTime.Now;
-
-            }
-            db.Updateable(model).UpdateColumns(it => new { it.S_SRC, it.S_DEST, it.N_B_STATE, it.T_MODIFY }).ExecuteCommand();
-            return db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE.Trim() == cntr.Trim()).ExecuteCommand() > 0;
-        }
-        internal static List<Container> GetCntrBySrc(string src, int state, string cntrType = "") {
-            var db = new SqlHelper<object>().GetInstance();
-            if (cntrType == "") {
-                return db.Queryable<Container>().Where(a => a.S_SRC == src && a.N_B_STATE == state).ToList();
-            }
-            else {
-                return db.Queryable<Container>().Where(a => a.S_SRC == src && a.N_B_STATE == state && a.S_TYPE == cntrType).ToList();
-            }
-        }
-       
+        
     }
 }
diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs
index 4408adc..45fca5b 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/SYSHelper.cs
@@ -32,7 +32,7 @@
             return result;
         }
 
-        [SugarTable("dbo.OI_SYS_MAXID")]
+        [SugarTable("OI_SYS_MAXID")]
         public class OI_SYS_MAXID
         {
             public string CN_S_TYPE { get; set; }
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 aa9cc21..d04f74e 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
@@ -109,9 +109,6 @@
                 N_SCHEDULE_TYPE=1,
                 S_B_STATE = "绛夊緟",
                 S_CNTR_CODE = cntrInfo,
-                N_START_LAYER = startLayer,
-                N_END_LAYER = endLayer,
-                N_CNTR_COUNT = cntrCount
 
             };
 
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 da0078c..a1736e8 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
@@ -507,15 +507,31 @@
         /// </summary>
         /// <param name="locNum"></param>
         /// <param name="itemCode"></param>
+        /// <param name="roadway"></param>
+        /// <param name="excludeRoadway"></param>
         /// <returns></returns>
-        public static EndLocGroup getInStockEndLoc(int locNum, string itemCode)
+        public static EndLocGroup getInStockEndLoc(int locNum, string itemCode , int roadway = 0 ,int excludeRoadway = 0)
         {
             var db = new SqlHelper<object>().GetInstance();
             EndLocGroup endLocGroup = new EndLocGroup { endLocList = new List<Location>() };
 
             // 1. 鑾峰彇鍊欓�宸烽亾鍒楄〃锛堢墿鏂欏潎琛℃垨宸烽亾鍧囪 锛�-            var candidateRoadways = GetCandidateRoadways(db, itemCode);
-            if (candidateRoadways.Count == 0) return endLocGroup;
+            List<int> candidateRoadways = new List<int>();
+            if (roadway == 0)
+            {
+                candidateRoadways = GetCandidateRoadways(db, itemCode);
+                if (candidateRoadways.Count == 0) return endLocGroup;
+
+                if (excludeRoadway != 0)
+                {
+                    candidateRoadways.Remove(excludeRoadway);
+                }
+            }
+            else 
+            {
+                candidateRoadways.Add(roadway);
+            }
+           
 
             // 2. 澶勭悊鍗曡揣浣嶅叆搴�             if (locNum == 1)
@@ -532,38 +548,62 @@
         /// </summary>
         private static List<int> GetCandidateRoadways(SqlSugarClient db, string itemCode)
         {
+            var list = new List<int>();
             // 绛栫暐1锛氬贩閬撳唴鍚岃鏍肩墿鏂�< 10 鐨勫贩閬擄紙鎸夋暟閲忓崌搴忥級
-            var materialRoadways = db.Queryable<Location>()
-                .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE)
-                .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE)
-                .Where((a, b, c) =>
-                    a.S_AREA_CODE == Settings.stockArea &&
-                    a.N_CURRENT_NUM == 1 &&
-                    a.N_LOCK_STATE == 0 &&
-                    a.C_ENABLE == "Y" &&
-                    b.S_CNTR_CODE != null &&
-                    c.S_ITEM_CODE == itemCode)
-                .GroupBy(a => a.N_ROADWAY)
-                .Having(a => SqlFunc.AggregateCount(a.S_CODE) < 10)
-                .Select(a => new { Roadway = a.N_ROADWAY, Count = SqlFunc.AggregateCount(a.S_CODE) })
-                .OrderBy(a => a.Count)
-                .Select(a => a.Roadway)
-                .ToList();
+            var materialRoadwayGroup = db.Queryable<Location>()
+                        // 琛ㄥ埆鍚嶏細a = Location, b = LocCntrRel, c = CntrItemRel
+                        .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE)
+                        .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE)
 
-            if (materialRoadways.Count > 0) return materialRoadways;
+                        // 鍩虹绛涢�鏉′欢锛堟墍鏈変綅缃級
+                        .Where((a, b, c) =>
+                            a.S_AREA_CODE == Settings.stockArea &&  // 鎸囧畾鍖哄煙
+                            a.N_LOCK_STATE == 0 &&                 // 鏈攣瀹�+                            a.C_ENABLE == "Y")                     // 鍚敤鐘舵�
 
-            // 绛栫暐2锛氭墍鏈夊贩閬撴寜绌鸿揣浣嶆暟闄嶅簭鎺掑簭
-            return db.Queryable<Location>()
-                .Where(a =>
-                    a.S_AREA_CODE == Settings.stockArea &&
-                    a.N_CURRENT_NUM == 0 &&
-                    a.N_LOCK_STATE == 0 &&
-                    a.C_ENABLE == "Y")
-                .GroupBy(a => a.N_ROADWAY)
-                .Select(a => new { Roadway = a.N_ROADWAY, Count = SqlFunc.AggregateCount(a.S_CODE) })
-                .OrderByDescending(a => a.Count)
-                .Select(a => a.Roadway)
-                .ToList();
+                        // 鎸夊贩閬撳垎缁勶紙浣跨敤鍘熷琛ㄥ瓧娈碉級
+                        .GroupBy((a, b, c) => a.N_ROADWAY)
+
+                        // 閫夋嫨鍒嗙粍缁撴灉锛堝寘鍚仛鍚堣绠楋級
+                        .Select((a, b, c) => new
+                        {
+                            Roadway = a.N_ROADWAY,  // 宸烽亾缂栧彿
+
+                            // 缁熻婊¤冻鐗瑰畾鏉′欢鐨勬暟閲忥細
+                            // 1. 褰撳墠鏁伴噺=1 (a.N_CURRENT_NUM == 1)
+                            // 2. 鐗╂枡鍖归厤 (c.S_ITEM_CODE == itemCode)
+                            // 3. 瀹瑰櫒鍏宠仈瀛樺湪 (b.S_CNTR_CODE != null)
+                            validCount = SqlFunc.AggregateSum(SqlFunc.IIF(
+                                a.N_CURRENT_NUM == 1 &&
+                                c.S_ITEM_CODE == itemCode &&
+                                b.S_CNTR_CODE != null,
+                                1, 0))
+                        })
+                       .ToList();
+
+            
+
+            if (materialRoadwayGroup.Count > 0)
+            {
+                list = materialRoadwayGroup.Where(a => a.validCount < 10).OrderBy(a => a.validCount).Select(a => a.Roadway).ToList();
+            }
+
+            if (list.Count == 0)
+            {
+                // 绛栫暐2锛氭墍鏈夊贩閬撴寜绌鸿揣浣嶆暟闄嶅簭鎺掑簭
+                materialRoadwayGroup = db.Queryable<Location>()
+                    .Where(a =>
+                        a.S_AREA_CODE == Settings.stockArea &&
+                        a.N_CURRENT_NUM == 0 &&
+                        a.N_LOCK_STATE == 0 &&
+                        a.C_ENABLE == "Y")
+                    .GroupBy(a => a.N_ROADWAY)
+                    .Select(a => new { Roadway = a.N_ROADWAY, validCount = SqlFunc.AggregateCount(a.S_CODE) })
+                    .ToList();
+
+                list = materialRoadwayGroup.OrderByDescending(a => a.validCount).Select(a => a.Roadway).ToList();
+            }
+            return list;
         }
 
         /// <summary>
@@ -657,6 +697,7 @@
             // 鎸夊眰->鍒楁帓搴忥紝渚夸簬鏌ユ壘鐩搁偦
             var sorted = locations
                 .OrderBy(l => l.N_LAYER)
+                .ThenBy(l => l.N_ROW)
                 .ThenBy(l => l.N_COL)
                 .ToList();
 
@@ -741,12 +782,13 @@
                 {
                     // 鏌ヨ宸烽亾鏄惁姝e父锛屽紓甯歌烦杩�                     var stackerStates = WCSDispatch.getStackerState(loc.N_ROADWAY);
-                    if (stackerStates.Count == 0 || stackerStates[0].roadway_state == "0" || stackerStates[0].roadway_state == "3") 
+                    if ( false  /*stackerStates.Count == 0 || stackerStates[0].roadway_state == "0" || stackerStates[0].roadway_state == "3"*/) 
                     {
                         continue;
                     }
 
                     startLoc = loc;
+                    break;
                 }
             }
             return startLoc;
@@ -775,25 +817,32 @@
         /// 鏌ヨ宸烽亾浠诲姟鏈�皯鐨勬帴椹充綅
         /// </summary>
         /// <returns></returns>
-        public static Location getMinTaskMiddleLoc(int type) 
+        public static Location getMinTaskMiddleLoc(int type , int roadway = 0 , int excludeRoadway = 0) 
         {
             Location location = new Location();
             var db = new SqlHelper<object>().GetInstance();
 
-            var roadwayGroup = db.Queryable<Location>()
+            var query = db.Queryable<Location>()
                     .LeftJoin<WCSTask>((a, b) => a.S_CODE == b.S_END_LOC && b.N_B_STATE < 3)
-                    .Where((a, b) => a.S_AREA_CODE == Settings.stockArea)
-                    .GroupBy((a, b) => a.N_ROADWAY)
+                    .Where((a, b) => a.S_AREA_CODE == Settings.stockArea);
+
+            if (roadway != 0) 
+            {
+                query = query.Where((a, b) => a.N_ROADWAY == roadway);
+            }
+            if (excludeRoadway != 0) 
+            {
+                query = query.Where((a, b) => a.N_ROADWAY != excludeRoadway);
+            }
+
+            var roadwayGroup = query.GroupBy((a, b) => a.N_ROADWAY)
                     .Select((a, b) => new { roadway = a.N_ROADWAY, num = SqlFunc.AggregateDistinctCount(b.S_CODE != null) })
                     .OrderBy(a => a.num)
                     .ToList();
 
             foreach (var item in roadwayGroup)
             {
-                // 1.鏌ヨ宸烽亾鍐呯殑鍫嗗灈鏈虹姸鎬佹槸鍚︽甯�-
-                // 2.鏌ヨ鎺ラ┏浣�-                var connectLoc = Settings.connectLocList.Where(a => a.type == type && a.roadway == item.roadway).FirstOrDefault();
+                var connectLoc = Settings.connectLocList.Where(a => a.roadway == item.roadway).FirstOrDefault();
                 if (connectLoc != null) 
                 {
                     location = LocationHelper.GetLoc(connectLoc.locCode);
@@ -804,6 +853,38 @@
         }
 
         /// <summary>
+        /// 鏌ヨ涓婄嚎璐т綅
+        /// </summary>
+        /// <param name="type"></param>
+        /// <returns></returns>
+        public static Location getOnlneLoc(int type)
+        {
+            Location location = null;
+            var connectLoc = Settings.onLineLocList.Where(a => a.type == type).FirstOrDefault();
+            if (connectLoc != null)
+            {
+                location = LocationHelper.GetLoc(connectLoc.locCode);
+            }
+            return location;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鍙枡寮傚父鎺掑嚭浣�+        /// </summary>
+        /// <param name="row"></param>
+        /// <returns></returns>
+        public static Location getCallOutLoc(int row)
+        {
+            Location location = null;
+            var connectLoc = Settings.callOutLocList.Where(a => a.row == row).FirstOrDefault();
+            if (connectLoc != null)
+            {
+                location = LocationHelper.GetLoc(connectLoc.locCode);
+            }
+            return location;
+        }
+
+        /// <summary>
         /// 鏌ヨ鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅
         /// </summary>
         /// <param name="bc_entried"></param>

--
Gitblit v1.9.1