From 067c69928ce6d3d3ed5710fd9652af7b3380dcd5 Mon Sep 17 00:00:00 2001
From: cjs <2216046164@qq.com>
Date: 星期二, 20 五月 2025 14:10:38 +0800
Subject: [PATCH] cjs

---
 HH.WCS.Mobox3.NongFuLinZhi/HH.WCS.Mobox3.NFLZ.csproj    |    5 
 HH.WCS.Mobox3.NongFuLinZhi/models/TaskTypeConvTable.cs  |   16 
 HH.WCS.Mobox3.NongFuLinZhi/util/HttpHelper.cs           |   25 
 HH.WCS.Mobox3.NongFuLinZhi/util/Settings.cs             |   46 
 HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs              |   79 +
 HH.WCS.Mobox3.NongFuLinZhi/models/WMSTask.cs            |    6 
 HH.WCS.Mobox3.NongFuLinZhi/models/Container.cs          |   23 
 HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs       | 1380 +++++++++++++++++++++++++++--------
 HH.WCS.Mobox3.NongFuLinZhi/models/AGVDeviceDataTable.cs |   47 +
 HH.WCS.Mobox3.NongFuLinZhi/dispatch/NDC.cs              |    5 
 HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs             |   25 
 HH.WCS.Mobox3.NongFuLinZhi/api/ApiHelper.cs             |  149 ---
 HH.WCS.Mobox3.NongFuLinZhi/models/LinZhiWorkOrder.cs    |   59 +
 HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs     |   71 +
 HH.WCS.Mobox3.NongFuLinZhi/models/CntrItemRel.cs        |    5 
 HH.WCS.Mobox3.NongFuLinZhi/models/WCSTask.cs            |    4 
 HH.WCS.Mobox3.NongFuLinZhi/wms/WCSHelper.cs             |    2 
 HH.WCS.Mobox3.NongFuLinZhi/config/config.json           |   32 
 HH.WCS.Mobox3.NongFuLinZhi/models/HttpRepeatSend.cs     |   27 
 HH.WCS.Mobox3.NongFuLinZhi/api/AgvController.cs         |   19 
 HH.WCS.Mobox3.NongFuLinZhi/core/WCSCore.cs              |    5 
 HH.WCS.Mobox3.NongFuLinZhi/util/CryptoDecryptHelper.cs  |  214 +++++
 HH.WCS.Mobox3.NongFuLinZhi/core/WMSCore.cs              |   70 -
 23 files changed, 1,679 insertions(+), 635 deletions(-)

diff --git a/HH.WCS.Mobox3.NongFuLinZhi/HH.WCS.Mobox3.NFLZ.csproj b/HH.WCS.Mobox3.NongFuLinZhi/HH.WCS.Mobox3.NFLZ.csproj
index 990eb04..ed885e9 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/HH.WCS.Mobox3.NFLZ.csproj
+++ b/HH.WCS.Mobox3.NongFuLinZhi/HH.WCS.Mobox3.NFLZ.csproj
@@ -159,10 +159,14 @@
     <Compile Include="dispatch\HanAo.cs" />
     <Compile Include="dispatch\NDC.cs" />
     <Compile Include="core\Monitor.cs" />
+    <Compile Include="models\HttpRepeatSend.cs" />
     <Compile Include="models\BaseModel.cs" />
     <Compile Include="models\Area.cs" />
+    <Compile Include="models\AGVDeviceDataTable.cs" />
     <Compile Include="models\CGTTable.cs" />
+    <Compile Include="models\LinZhiWorkOrder.cs" />
     <Compile Include="models\LinZhiBCPWorkOrder.cs" />
+    <Compile Include="models\TaskTypeConvTable.cs" />
     <Compile Include="models\TN_PRICE.cs" />
     <Compile Include="models\TN_WeiLi_SerialNo.cs" />
     <Compile Include="models\TN_Distribution_CNTR.cs" />
@@ -232,6 +236,7 @@
     <Compile Include="api\ApiHelper.cs" />
     <Compile Include="dispatch\HostToAGV.cs" />
     <Compile Include="process\TaskProcess.cs" />
+    <Compile Include="util\CryptoDecryptHelper.cs" />
     <Compile Include="util\LogHelper.cs" />
     <Compile Include="util\StrHelper.cs" />
     <Compile Include="util\STAttribute.cs" />
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/api/AgvController.cs b/HH.WCS.Mobox3.NongFuLinZhi/api/AgvController.cs
index d308f60..1d57f31 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/api/AgvController.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/api/AgvController.cs
@@ -68,24 +68,5 @@
             WCSCore.OperateHATaskStatus(model);
             return new ReturnResult();
         }
-
-        /// <summary>
-        /// 宸ㄦ槦绔嬪簱鎵ц閫氱煡
-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("PlcCallbackState")]
-        public PlcSendTaskres PlcCallbackState(PlcState model)
-        {
-            LogHelper.Info("PlcCallbackState Request锛� + JsonConvert.SerializeObject(model), "HosttoagvTask");
-            var result = ApiHelper.PlcCallbackState(model);
-            LogHelper.Info("PlcCallbackState Return锛� + JsonConvert.SerializeObject(result), "HosttoagvTask");
-            return result;
-        }
-
-
-
-
     }
 }
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/api/ApiHelper.cs b/HH.WCS.Mobox3.NongFuLinZhi/api/ApiHelper.cs
index 33f1e27..fb94dfa 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/api/ApiHelper.cs
@@ -57,155 +57,6 @@
             return result;
         }
 
-
-    
-
-        internal static WeiLiResult AddTask(AddTaskModel model)
-        {
-            var result = new WeiLiResult();
-            var db = new SqlHelper<object>().GetInstance();
-            var cntrweight = model.cntrWeight == 1 ? 2 : model.cntrWeight == 2 ? 3 : model.cntrWeight == 3 ? 11 : model.cntrWeight == 4 ? 30 : model.cntrWeight == 5 ? 150 : 0;
-            if (!string.IsNullOrEmpty(model.startBit) && !string.IsNullOrEmpty(model.endBit))
-            {
-                if (!string.IsNullOrEmpty(model.TaskNo))
-                {
-                    var taskinfo = db.Queryable<WMSTask>().Where(a => a.S_CODE == model.TaskNo).First();
-                    if (taskinfo == null)
-                    {
-                        var startinfo = db.Queryable<Location>().Where(a => a.S_CODE == model.startBit).First();
-                        var endinfo = db.Queryable<Location>().Where(a => a.S_CODE == model.endBit).First();
-                        if (startinfo != null && endinfo != null)
-                        {
-                            if (startinfo.N_LOCK_STATE != 0 || endinfo.N_LOCK_STATE != 0)
-                            {
-                                result.code = 500;
-                                result.msg = "璧风偣鎴栫粓鐐硅揣浣嶉攣瀹氱姸鎬佸紓甯�涓嶄簣鍒涘缓浠诲姟";
-                                return result;
-                            }
-
-                            var startloccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startinfo.S_CODE).First();
-                            LogHelper.Info("鏌ヨ璧风偣鏄惁缁戝畾鎵樼洏");
-                            if (startloccntr == null)
-                            {
-                                LogHelper.Info("璧风偣鏈粦瀹氭墭鐩�鍑嗗缁戝畾鎵樼洏");
-                                //缁戝畾璧风偣鎵樼洏
-                                LocationHelper.BindingLoc(model.startBit, new List<string>() { model.cntrNo });
-                            }
-                            else if (startloccntr.S_CNTR_CODE != model.cntrNo)
-                            {
-                                result.code = 500;
-                                result.msg = $"璧风偣宸茬粦瀹氭墭鐩榹startloccntr.S_CNTR_CODE} 涓庝换鍔℃墭鐩榹model.cntrNo} 涓嶇";
-                                return result;
-                            }
-
-                            LogHelper.Info("杞繍浠诲姟 鍒涘缓浣滀笟");
-
-                            //鍒涘缓浣滀笟
-                            var optask = new WMSTask
-                            {
-                                S_CODE = model.TaskNo,
-                                S_START_LOC = startinfo.S_CODE,
-                                S_END_LOC = endinfo.S_CODE,
-                                S_END_AREA = endinfo.S_AREA_CODE,
-                                S_START_AREA = startinfo.S_AREA_CODE,
-                                S_START_WH = startinfo.S_WH_CODE,
-                                S_END_WH = endinfo.S_WH_CODE,
-                                S_TYPE = "杞繍",
-                                N_TYPE = 3,
-                                N_B_STATE = 0,
-                                S_CNTR_CODE = model.cntrNo,
-                                S_OP_DEF_NAME = "杞繍",
-                                S_BS_NO = model.workNo,
-                                N_PRIORITY = model.priority,
-                                N_TRAY_WEIGHT = cntrweight
-                            };
-
-                            var note = Settings.Tasktypes.Where(a => a.StartArea == optask.S_START_AREA && a.EndArea == optask.S_END_AREA).FirstOrDefault();
-                            if (note != null)
-                            {
-                                optask.S_NOTE = note.TaskType;
-                            }
-
-
-
-                            db.Insertable(optask).ExecuteCommand();
-                            LocationHelper.LockLoc(startinfo.S_CODE, 2);
-                            LocationHelper.LockLoc(endinfo.S_CODE, 1);
-                        }
-                        else
-                        {
-                            result.code = 500;
-                            result.msg = "璧风偣鎴栫粓鐐逛俊鎭湁璇�鏌ヨ涓嶅埌绔欑偣淇℃伅";
-                        }
-                    }
-                    else
-                    {
-                        result.code = 500;
-                        result.msg = "浠诲姟鍙烽噸澶�璇峰嬁閲嶅涓嬪彂浠诲姟";
-                    }
-                }
-                else
-                {
-                    result.code = 500;
-                    result.msg = "浠诲姟鍙蜂笉鑳戒负绌�;
-                }
-            }
-            else
-            {
-                result.code = 500;
-                result.msg = "璧风偣鎴栫粓鐐逛笉鑳戒负绌�;
-            }
-
-            return result;
-        }
-
-        internal static TaskStateresutl GetTaskState(GetTaskStateModel model)
-        {
-            var db = new SqlHelper<object>().GetInstance();
-            TaskStateresutl result = new TaskStateresutl { success = false, code = 0};
-            if (!string.IsNullOrEmpty(model.taskNo))
-            {
-                var info = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.taskNo).First();
-                if (info!=null)
-                {
-                    var TaskStates = db.Queryable<TaskAction>().Where(a => a.S_TASK_CODE == info.S_CODE).ToList();
-                    TaskStates=TaskStates.OrderBy(a => a.T_CREATE).ToList();
-                    for (int i = 0; i < TaskStates.Count; i++)
-                    {
-                        TaskState task = new TaskState
-                        {
-                            state = TaskStates[i].N_ACTION_CODE.ToString(),
-                            errMsg = "",
-                            taskNo = model.taskNo,
-                            transferTime = TaskStates[i].T_CREATE.ToString()
-                        };
-                        if (!string.IsNullOrEmpty(TaskStates[i].S_EQ_CODE)) 
-                        {
-                            task.agvNo = int.Parse(TaskStates[i].S_EQ_CODE);
-                        }
-                        result.data.Add(task);
-                    }
-                    result.success = true ;
-                }
-                else
-                {
-                    result.code = 1;
-                    result.msg = "璇ヤ换鍔″彿娌℃湁鐘舵�璁板綍!";
-                }
-            }
-            else
-            {
-                result.code = 1;
-                result.msg = "璇锋眰浠诲姟鍙蜂笉鑳戒负绌�";
-            }
-            return result;
-        }
-
-     
-       
-
-       
-       
         internal static PlcSendTaskres PlcCallbackState(PlcState model)
         {
             var db = new SqlHelper<object>().GetInstance();
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/config/config.json b/HH.WCS.Mobox3.NongFuLinZhi/config/config.json
index 6e295b0..eff5ffc 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/config/config.json
+++ b/HH.WCS.Mobox3.NongFuLinZhi/config/config.json
@@ -3,6 +3,10 @@
     "HASeverUrl": "http://172.16.10.41",
     "ZTSeverUrl": "",
     "ZTSeverUrl2": "",
+    "ProjectName": "",
+    "FactoryCode": "",
+    "FactoryName": "",
+    "OneSign": "",
     "AppKey": "",
     "AppSecret": "",
     "MoboxSeverUrl": "",
@@ -33,5 +37,33 @@
             "areaCode": "pgkq",
             "enable": 1
         }
+    ],
+    "PPZSJSite": [
+        {
+            "siteName": "鐡跺澂A",
+            "site": [],
+            "enable": 1
+        },
+        {
+            "siteName": "鐡跺澂B",
+            "site": [],
+            "enable": 1
+        }
+    ],
+    "ThirdPartyUrl": [
+        {
+            "UrlNo": "1",
+            "UrlName": "",
+            "Url": "",
+            "enable": 1
+        }
+    ],
+    "HttpApiVerify": [
+        {
+            "VerifyNo": "1",
+            "Project": "1",
+            "Extend": [ "", "" ],
+            "enable": 1
+        }
     ]
 }
\ No newline at end of file
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs b/HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs
index a6b6881..087b8ad 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs
@@ -52,16 +52,16 @@
         {
             var db = new SqlHelper<object>().GetInstance();
             var jbwInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊鍏ュ簱鎺ラ┏浣� && a.enable == 1).FirstOrDefault();
-            if(jbwInfo != null)
+            if (jbwInfo != null)
             {
                 var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == jbwInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First();
-                if(locInfo != null)
+                if (locInfo != null)
                 {
                     LogHelper.Info($"銆愮摱鐩栬浆杩愩�鐡跺澂鎺ラ┏浣嶆煡璇㈠埌闇�叆搴撶殑鐡跺澂锛岃揣浣嶇紪鐮侊細{locInfo.S_CODE}");
-                    if(locInfo.LocCntrRel != null)
+                    if (locInfo.LocCntrRel != null)
                     {
                         //鍒涘缓浣滀笟
-                        WMSHelper.CreateOpTask(locInfo.S_CODE, "", "鍏ュ簱", "鐡剁洊杞繍", locInfo.LocCntrRel.S_CNTR_CODE,"鐡剁洊");
+                        WMSHelper.CreateOpTask(locInfo.S_CODE, "", "鍏ュ簱", "鐡剁洊杞繍", locInfo.LocCntrRel.S_CNTR_CODE, "鐡剁洊");
                     }
                     else
                     {
@@ -81,48 +81,55 @@
         /// <exception cref="NotImplementedException"></exception>
         internal static void BCPWorkSurveillance()
         {
-            //鍒ゆ柇褰撳墠鍗婃垚鍝佸伐鍗曟槸鍚︽湁鎵ц涓殑浠诲姟锛屽鏋滄病鏈夛紝鍒欒绾胯竟搴撶殑鐗╂枡鍏ュ簱
+            //鐡剁洊缈绘枟鏈哄伐鍗�+            //寮�惎锛屾煡璇�鐡剁洊闈炴�浜ф�鐢�鐗╂枡鏄惁婊★紝涓嶆弧鍒欒ˉ鍏呯墿鏂�+            //鍏抽棴锛�1銆佹煡璇�鐡剁洊绌烘墭 鏄惁杩樻湁鎵樼洏锛屾湁鍒欏叆搴� 2銆佹煡璇㈢摱鐩栭潪鍗充骇鍗崇敤 鏄惁鏈夌墿鏂欙紝 鏈夊垯鍏ュ簱
+            //鐡跺澂缈绘枟鏈�+            //寮�惎锛屾煡璇㈡槸鍚︿负闈炲嵆浜у嵆鐢紝濡傛灉涓洪潪鍗充骇鍗崇敤锛屽垯鍒ゆ柇鐡跺澂闈炲嵆浜у嵆鐢ㄥ簱鍖烘槸鍚︽弧锛�涓嶆弧鍒欒ˉ绌虹墿鏂�+            //鍏抽棴锛屾煡璇�鐡跺澂闈炲嵆浜у嵆鐢�鐡跺澂鍗充骇鍗崇敤A 鐡跺澂鍗充骇鍗崇敤B 鏄惁鏈夌墿鏂欙紝鏈夊垯鍏ュ簱
+            //鐡跺澂娉ㄥ鏈�+            //寮�惎锛屾煡璇�鐡跺澂绌烘墭 鏄惁绌烘墭鏁伴噺澶т簬3鎵橈紝濡傛灉涓嶅ぇ浜庯紝鍒欒ˉ绌烘墭
+            //鍏抽棴锛屾煡璇�鐡跺澂绌烘墭 鏄惁鏈夌┖鎵橈紝鏈夊垯鍏ュ簱
+
+
+
+            //鍒ゆ柇褰撳墠鍗婃垚鍝佸伐鍗曟槸鍚︽湁鎵ц涓殑浠诲姟
+            //宸ュ崟绫诲瀷锛�1銆佸啘澶灄鑺�鐡跺澂鏈�2銆佸啘澶灄鑺�鐡剁洊缈绘枟鏈�3銆佸啘澶灄鑺�鐡跺澂缈绘枟鏈�+            bool PPZUUSE = false; //鐡跺澂鏈烘槸鍚︿娇鐢�+            bool PPFDUSE = false; //鐡跺澂缈绘枟鏈烘槸鍚︿娇鐢�+            bool PGFDUSE = false; //鐡剁洊缈绘枟鏈烘槸鍚︿娇鐢�+
             var db = new SqlHelper<object>().GetInstance();
             var workList = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkState == "鎵ц涓�).ToList();
-            if(workList.Count == 0)
+            if (workList.Count > 0)
             {
-                var taskInfo = db.Queryable<WCSTask>().Where(a => a.S_TYPE == "鎺ラ┏浣嶇Щ搴� && a.S_B_STATE != "瀹屾垚" && a.S_B_STATE != "鍙栨秷" && a.S_B_STATE != "鍗歌揣瀹屾垚" && a.S_B_STATE != "寮�鍗歌揣" && a.S_B_STATE != "鍙栬揣瀹屾垚").First();
-                if(taskInfo == null)
+                foreach (var a in workList)
                 {
-                    var areaInfo = Settings.areaInfos.Where(a => (a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� || a.areaName == "鐡跺澂鍗充骇鍗崇敤A") && a.enable == 1).ToList();
-                    if (areaInfo.Count > 0)
+                    if (a.S_PLineNo == "鍐滃か鏋楄姖-鐡跺澂鏈�)
                     {
-                        foreach (var a in areaInfo)
-                        {
-                            var locInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.areaCode && b.N_CURRENT_NUM > 0 && b.S_LOCK_STATE == "鏃�).Includes(b => b.LocCntrRel).First();
-                            if (locInfo != null)
-                            {
-                                //鍒涘缓浣滀笟
-                                WMSHelper.CreateOpTask(locInfo.S_CODE, "", "鍏ュ簱", "鎺ラ┏浣嶇Щ搴�, locInfo.LocCntrRel.S_CNTR_CODE);
-                            }
-
-                        }
+                        PPZUUSE = true;
                     }
-
-                    var areaInfoTwo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤B" && a.enable == 1).First();
-                    if (areaInfoTwo != null)
+                    else if (a.S_PLineNo == "鍐滃か鏋楄姖-鐡剁洊缈绘枟鏈�)
                     {
-                        var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfoTwo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
-                        if(locInfo.Count > 0)
-                        {
-                            foreach(var a in locInfo)
-                            {
-                                if(a.S_LOCK_STATE == "鏃�)
-                                {
-                                    //鍒涘缓浣滀笟
-                                    WMSHelper.CreateOpTask(a.S_CODE, "", "鍏ュ簱", "鎺ラ┏浣嶇Щ搴�, a.LocCntrRel.S_CNTR_CODE,"鐡跺澂");
-                                    break;
-                                }
-                            }
-                        }
+                        PGFDUSE = true;
+                    }
+                    else
+                    {
+                        PPFDUSE = true;
                     }
                 }
             }
+
+            //鐡跺澂鏈轰娇鐢紝鍒欎粠 鐡跺澂搴撳尯 琛ュ厖绌烘墭鍒�鐡跺澂绌烘墭 锛屾湭浣跨敤锛屽垯灏�鐡跺澂绌烘墭 鐨勭┖鎵�绉诲埌 鐡跺澂搴撳尯
+            //鐡跺澂缈绘枟鏈轰娇鐢紝鍒欎粠 鐡跺澂搴撳尯 琛ュ厖绌烘墭鍒�鐡跺澂鍗充骇鍗崇敤/鐡跺澂闈炲嵆浜у嵆鐢�锛屾湭浣跨敤锛屽垯灏�鐡跺澂鍗充骇鍗崇敤/鐡跺澂闈炲嵆浜у嵆鐢�鐨勭┖鎵�绉诲埌 鐡跺澂搴撳尯
+            //鐡剁洊缈绘枟鏈轰娇鐢紝鍒欎粠 鐡剁洊搴撳尯 琛ュ厖绌烘墭鍒�鐡跺澂闈炲嵆浜у嵆鐢�锛屾湭浣跨敤锛屽垯灏�鐡跺澂闈炲嵆浜у嵆鐢�鐨勭┖鎵�绉诲埌 鐡剁洊搴撳尯
+
+            TaskProcess.BCPYiKu(PPZUUSE, "鐡跺澂娉ㄥ鏈�);
+            TaskProcess.BCPYiKu(PPFDUSE, "鐡跺澂缈绘枟鏈�);
+            TaskProcess.BCPYiKu(PGFDUSE, "鐡剁洊缈绘枟鏈�);
+
         }
+
+
     }
 }
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/core/WCSCore.cs b/HH.WCS.Mobox3.NongFuLinZhi/core/WCSCore.cs
index c7254c7..9b4ddf4 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/core/WCSCore.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/core/WCSCore.cs
@@ -9,6 +9,8 @@
 
 namespace HH.WCS.Mobox3.NFLZ.core {
     internal class WCSCore {
+
+        public const string AlterControlSwitch01 = "1";//浠诲姟涓婃姤MES鍙樻洿寮�彂 1-寮�惎 0-鍏抽棴
         public static void OperateAgvTaskStatus(AgvTaskState model) {
             if (string.IsNullOrEmpty(model.No)) {
                 //鏃犱换鍔″彿璇锋眰(浜ょ)
@@ -55,10 +57,13 @@
                         //璋冪敤绗笁鏂规帴鍙o紙濡傛灉鏈夛級TaskProcess.ReportStatus
                         TaskProcess.ThirdReportStatus(TN_Task, model.State, model.ForkliftNo);
                         TaskProcess.UpdateAgvNo(TN_Task, model.ForkliftNo);
+                        if (AlterControlSwitch01 == "1") TaskProcess.GeneralInterFaceFunc(TN_Task, model.State.ToString(), model.ForkliftNo);
                     }
                     else {
+                        LogHelper.Info("瀹夊叏璇锋眰浜や簰");
                         //瀹夊叏璇锋眰绛�                         TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
+                        WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
                     }
                 }
             }
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/core/WMSCore.cs b/HH.WCS.Mobox3.NongFuLinZhi/core/WMSCore.cs
index 8977c7f..b74e88d 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/core/WMSCore.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/core/WMSCore.cs
@@ -35,74 +35,6 @@
         }
 
         /// <summary>
-        /// 閬嶅巻鍒嗘嫞鍗曟槑缁嗗垱寤哄嚭搴撲綔涓�-        /// </summary>
-        internal static void CheckSortingTask()
-        {
-            var db = new SqlHelper<object>().GetInstance();
-            //new SortingOrder().N_B_STATE
-            //閬嶅巻N_B_STATE = 3鐨勫垎鎷e崟鍒涘缓浣滀笟
-            //鎴�閬嶅巻鍒嗘嫞鍗曟槑缁嗗垱寤哄垎鎷d綔涓氾紝鍥犱负涓�釜鍒嗘嫞鍗曢噷闈㈢殑鏄庣粏閮芥槸鎵归噺鐢熸垚鐨�-            var list = WMSHelper.GetWaitingSortingOperationList();
-            LogHelper.Info($"鑾峰彇閰嶇洏鏁伴噺 {list.Count}");
-            if (list.Count > 0)
-            {
-                list.ForEach(a =>
-                {
-                    var startloc = db.Queryable<Location>().Where(it => it.S_CODE == a.S_LOC_CODE).First();
-                    if (startloc != null && startloc.S_LOCK_STATE == "鍏跺畠閿�)
-                    {
-
-                        Location endbit = null;
-                      
-                        //璁$畻鎵樼洏杩涜鍑哄簱
-
-                        if (endbit != null)
-                        {
-                            var optask = new WMSTask
-                            {
-                                S_CODE = WMSHelper.GenerateTaskNo(),
-                                S_START_LOC = a.S_LOC_CODE,
-                                S_START_AREA = startloc.S_AREA_CODE,
-                                S_START_WH = startloc.S_WH_CODE,
-                                S_END_LOC = endbit.S_CODE,
-                                S_END_AREA = endbit.S_AREA_CODE,
-                                S_END_WH = endbit.S_WH_CODE,
-                                S_STATION_LOC = a.S_OUT_TO,
-                                S_TYPE = "鍑哄簱",
-                                N_TYPE = 2,
-                                N_B_STATE = 0,
-                                S_CNTR_CODE = a.S_CNTR_CODE,
-                                S_OP_DEF_NAME = a.S_BS_TYPE
-                            };
-                            var note = Settings.Tasktypes.Where(it => it.StartArea == optask.S_START_AREA && it.EndArea == optask.S_END_AREA).FirstOrDefault();
-                            if (note != null)
-                            {
-                                optask.S_NOTE = note.TaskType;
-                            }
-                            var res = db.Insertable(optask).ExecuteCommand() > 0;
-                            if (res)
-                            {
-                                startloc.N_LOCK_STATE = 2;
-                                startloc.S_LOCK_STATE = "鍑哄簱閿�;
-                                db.Updateable(startloc).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
-                                LocationHelper.LockLoc(endbit.S_CODE, 1);
-                                a.N_B_STATE = 2;
-                                a.S_B_STATE = "浣滀笟鍚姩";
-                                db.Updateable(a).UpdateColumns(it => new { it.S_B_STATE, it.N_B_STATE }).ExecuteCommand();
-                            }
-                        }
-                        else LogHelper.Info($"閰嶇洏 鏈壘鍒板彲鐢ㄥ垎鎷h揣浣�);
-                    }
-                    else LogHelper.Info($"閰嶇洏 鏈壘鍒板嚭搴撳彛搴撳尯缂栫爜{a.S_EXIT_AREA_CODE} 瀵瑰簲鐨勯厤缃枃浠�);
-
-                });
-            }
-
-
-        }
-
-        /// <summary>
         /// 浣滀笟鍚姩锛屽垱寤哄瓙浠诲姟
         /// </summary>
         internal static void Start()
@@ -144,6 +76,7 @@
                                     S_END_AREA = endinfo.S_AREA_CODE,
                                     S_END_WH = endinfo.S_WH_CODE,
                                     S_SCHEDULE_TYPE = "NDC",
+                                    S_WORK_MODE = "agv",
                                     N_CNTR_COUNT = 1,
                                     S_CNTR_CODE = a.S_CNTR_CODE,
                                     N_START_LAYER = startinfo.N_CURRENT_NUM,
@@ -188,6 +121,7 @@
                                     S_END_AREA = endinfo.S_AREA_CODE,
                                     S_END_WH = endinfo.S_WH_CODE,
                                     S_SCHEDULE_TYPE = "NDC",
+                                    S_WORK_MODE = "agv",
                                     N_CNTR_COUNT = 1,
                                     S_CNTR_CODE = a.S_CNTR_CODE,
                                     N_START_LAYER = startinfo.N_CURRENT_NUM,
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/dispatch/NDC.cs b/HH.WCS.Mobox3.NongFuLinZhi/dispatch/NDC.cs
index fe9b0f9..b7c4caf 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/dispatch/NDC.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/dispatch/NDC.cs
@@ -29,7 +29,8 @@
               </Order>
             </Req>*/
             var sb = new StringBuilder();
-            sb.Append($"<Req><Order TS='{ts}' Pri='{pri}' No='{taskNo}'>");
+            //sb.Append($"<Req><Order TS='{ts}' Pri='{pri}' No='{taskNo}'>");
+            sb.Append($"<Req><Order ts_no='{ts}' Pri='{pri}' task_no='{taskNo}'>");
 
             foreach (var kv in param) {
                 sb.Append($"<Param Name='{kv.Key}' Value='{kv.Value}'/>");
@@ -37,7 +38,7 @@
             sb.Append("</Order></Req>");
             return sb.ToString();
         }
-        public AGVResult AddNewOrderNew(int ts, int pri, string taskNo, Dictionary<string, string> param) {
+        public static AGVResult AddNewOrderNew(int ts, int pri, string taskNo, Dictionary<string, string> param) {
             //< Req >< Order TS = '1' Pri = '1' No = 'TN2302020001' Ext1 = '' Ext2 = '' N_CNTR_COUNT = '' >< Param Name = 'From' Value = '2' />< Param Name = 'To' Value = '1' /></ Order ></ Req >
 
             var bufin = GetReqStrNew(ts, pri, taskNo, param);
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/models/AGVDeviceDataTable.cs b/HH.WCS.Mobox3.NongFuLinZhi/models/AGVDeviceDataTable.cs
new file mode 100644
index 0000000..d9a7282
--- /dev/null
+++ b/HH.WCS.Mobox3.NongFuLinZhi/models/AGVDeviceDataTable.cs
@@ -0,0 +1,47 @@
+锘縰sing HH.WCS.Mobox3.NFLZ.models;
+using SqlSugar;
+using System;
+
+namespace HH.WCS.Mobox3.NFLZ
+{
+    [SugarTable("TN_AGVDeviceDataTable")]
+    public class AGVDeviceDataTable : BaseModel
+    {
+        /// <summary>
+        /// 杞﹁締绫诲瀷
+        /// </summary>
+        public string equipmentType { get; set; }
+        /// <summary>
+        /// 杞﹁締鍨嬪彿
+        /// </summary>
+        public string equipmentMold { get; set; }
+        /// <summary>
+        /// 杞﹁締閾墝鍙�+        /// </summary>
+        public string equipmentCode { get; set; }
+        /// <summary>
+        /// 杞﹁締鍖哄煙
+        /// </summary>
+        public string equipmentArea { get; set; }
+        /// <summary>
+        /// 瀵瑰簲宸ュ巶缂栧彿
+        /// </summary>
+        public string orgCode { get; set; }
+        /// <summary>
+        /// 杞﹁締鎶曟斁鐘舵�
+        /// </summary>
+        public string equipmentStatus { get; set; }
+        /// <summary>
+        /// 鍞竴鏍囪瘑鐮�+        /// </summary>
+        public string proxyInterfaceCode { get; set; }
+        /// <summary>
+        /// 宸ュ巶鍚嶇О
+        /// </summary>
+        public string orgName { get; set; }
+        /// <summary>
+        /// 杞﹁締缂栫爜
+        /// </summary>
+        public string equipmentNo { get; set; }
+    }
+}
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/models/CntrItemRel.cs b/HH.WCS.Mobox3.NongFuLinZhi/models/CntrItemRel.cs
index 0315c86..d071502 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/models/CntrItemRel.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/models/CntrItemRel.cs
@@ -55,11 +55,6 @@
         /// 库存地点
         /// </summary>
         public string S_ERP_WH_CODE { get; set; }
-
-        /// <summary>
-        /// 生产日期
-        /// </summary>
-        public string D_PRD_DATE { get; set; }
         /// <summary>
         /// 是否暂存
         /// </summary>
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/models/Container.cs b/HH.WCS.Mobox3.NongFuLinZhi/models/Container.cs
index da25bae..ec1865d 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/models/Container.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/models/Container.cs
@@ -5,14 +5,28 @@
 
 namespace HH.WCS.Mobox3.NFLZ {
     [SugarTable("TN_Container")]
-    public class Container : BaseModel {
-
-
+    public class Container : BaseModel 
+    {
+        /// <summary>
+        /// 容器编码
+        /// </summary>
         public string S_CODE { get; set; }
+        /// <summary>
+        /// 类型
+        /// </summary>
         public string S_TYPE { get; set; }
+        /// <summary>
+        /// 规格
+        /// </summary>
         public string S_SPEC { get; set; }
+        /// <summary>
+        /// 自重
+        /// </summary>
         public float F_WEIGHT { get; set; }
         public float F_LOAD_WEIGHT { get; set; }
+        /// <summary>
+        /// 最大重量
+        /// </summary>
         public float F_MAX_WEIGHT { get; set; }
         public int N_LENGTH { get; set; }
         public int N_WIDTH { get; set; }
@@ -23,6 +37,9 @@
         public string S_STATE_PRE { get; set; }
         public int N_REVIEW_RESULT { get; set; }
 
+        /// <summary>
+        /// 明细条数
+        /// </summary>
         public int N_DETAIL_COUNT { get; set; }
         public int N_B_STATE { get; set; }
         public string S_LOCK_OP_CODE { get; set; }
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/models/HttpRepeatSend.cs b/HH.WCS.Mobox3.NongFuLinZhi/models/HttpRepeatSend.cs
new file mode 100644
index 0000000..ee47d0f
--- /dev/null
+++ b/HH.WCS.Mobox3.NongFuLinZhi/models/HttpRepeatSend.cs
@@ -0,0 +1,27 @@
+锘縰sing HH.WCS.Mobox3.NFLZ.models;
+using SqlSugar;
+using System;
+
+namespace HH.WCS.Mobox3.NFLZ
+{
+    [SugarTable("TN_HttpRepeatSend")]
+    public class HttpRepeatSend : BaseModel
+    {
+        /// <summary>
+        /// 鍙戦�URL
+        /// </summary>
+        public string Url { get; set; }
+        /// <summary>
+        /// 鎺ュ彛鍚�+        /// </summary>
+        public string UrlName { get; set; }
+        /// <summary>
+        /// 鍙戦�鍙傛暟
+        /// </summary>
+        public string SendMsg { get; set; }
+        /// <summary>
+        /// 鍙戦�娆℃暟
+        /// </summary>
+        public int SendNum { get; set; }
+    }
+}
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/models/LinZhiWorkOrder.cs b/HH.WCS.Mobox3.NongFuLinZhi/models/LinZhiWorkOrder.cs
new file mode 100644
index 0000000..a3629fa
--- /dev/null
+++ b/HH.WCS.Mobox3.NongFuLinZhi/models/LinZhiWorkOrder.cs
@@ -0,0 +1,59 @@
+锘縰sing HH.WCS.Mobox3.NFLZ.models;
+using SqlSugar;
+using System;
+
+namespace HH.WCS.Mobox3.NFLZ
+{
+    [SugarTable("TN_LinZhiorkOrder")]
+    public class LinZhiWorkOrder : BaseModel
+    {
+        /// <summary>
+        /// 宸ュ崟鍙�+        /// </summary>
+        public string S_WorkNo { get; set; }
+        /// <summary>
+        /// 浜х嚎鍙�+        /// </summary>
+        public string S_PLineNo { get; set; }
+        /// <summary>
+        /// 宸ュ崟绫诲瀷
+        /// </summary>
+        public string S_ORDER_TYPE { get; set; }
+        /// <summary>
+        /// 宸ュ崟鐘舵�
+        /// </summary>
+        public string S_WorkState { get; set; }
+        /// <summary>
+        /// 鎵规鍙�+        /// </summary>
+        public string S_BatchNo { get; set; }
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public string S_ItemCode { get; set; }
+        /// <summary>
+        /// 鐗╂枡灞傛暟
+        /// </summary>
+        public string S_ItemLayer { get; set; }
+        /// <summary>
+        /// 涓嬬嚎鎵樼洏绫诲瀷
+        /// </summary>
+        public string S_TrayType { get; set; }
+        /// <summary>
+        /// 鎵樼洏瑙勬牸
+        /// </summary>
+        public string S_TrayRules { get; set; }
+        /// <summary>
+        /// 璧风偣搴撲綅
+        /// </summary>
+        public string S_StartLoca { get; set; }
+        /// <summary>
+        /// 缁堢偣搴撲綅
+        /// </summary>
+        public string S_EndLoca { get; set; }
+        /// <summary>
+        /// 绉诲簱鏁伴噺
+        /// </summary>
+        public int S_YiKuNum { get; set; }
+    }
+}
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/models/TaskTypeConvTable.cs b/HH.WCS.Mobox3.NongFuLinZhi/models/TaskTypeConvTable.cs
new file mode 100644
index 0000000..6987d10
--- /dev/null
+++ b/HH.WCS.Mobox3.NongFuLinZhi/models/TaskTypeConvTable.cs
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+
+namespace HH.WCS.Mobox3.NFLZ.models
+{
+    [SugarTable("TN_TaskTypeConvTable")]
+    public class TaskTypeConvTable : BaseModel
+    {
+        public string taskTypeName { get; set; }
+        public string taskType { get; set; }
+    }
+}
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/models/WCSTask.cs b/HH.WCS.Mobox3.NongFuLinZhi/models/WCSTask.cs
index a81d60c..d9f0df4 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/models/WCSTask.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/models/WCSTask.cs
@@ -15,6 +15,9 @@
         public string S_NOTE { get; set; }
         public DateTime? T_START_TIME { get; set; }
         public DateTime? T_END_TIME { get; set; }
+        /// <summary>
+        /// 杞﹀彿
+        /// </summary>
         public string S_EQ_NO { get; set; }
         public string S_TYPE { get; set; }
         public string S_B_STATE { get; set; } = "绛夊緟";
@@ -51,6 +54,7 @@
         public int N_START_LAYER { get; internal set; }
         public int N_END_LAYER { get; internal set; }
         public int N_CNTR_COUNT { get; internal set; }
+        public string S_WORK_MODE { get; set; }
 
         internal static string GetStateStr(int state) {
             //0绛夊緟	  1宸叉帹閫�    2鎵ц    3瀹屾垚    4閿欒
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/models/WMSTask.cs b/HH.WCS.Mobox3.NongFuLinZhi/models/WMSTask.cs
index 9b416cb..5778f1b 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/models/WMSTask.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/models/WMSTask.cs
@@ -48,7 +48,7 @@
         /// <summary>
         /// 入库站台 1:西;2:东;
         /// </summary>
-        public string S_STATION_LOC { get; set; } = "1";
+        //public string S_STATION_LOC { get; set; } = "1";
         public int N_LASTE_B_STATE { get; set; }
         public string C_NEED_SORTING { get; set; } = "N";
         public int N_FAIL_COUNT { get; set; }
@@ -57,8 +57,8 @@
         /// <summary>
         /// 确认入库
         /// </summary>
-        public string S_STORE { get; set; } = "Y";
-        public int N_TRAY_WEIGHT { get; set; } = 0;
+        //public string S_STORE { get; set; } = "Y";
+        //public int N_TRAY_WEIGHT { get; set; } = 0;
 
         /// <summary>
         /// 0 等待/1 执行/2 完成/3 错误/4 启劢失败 /5 暂停启劢
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs
index 92b02a3..dba413b 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs
@@ -150,7 +150,7 @@
                                         if (startLoca == null)
                                         {
                                             LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏈壘鍒版弧鎵橈紝鍘荤摱鍧嵆浜у嵆鐢˙搴撳尯鏌ユ壘");
-                                            startLoca = TaskProcess.BCPInOrOut(db, false, "", "鐡跺澂鍗充骇鍗崇敤B", workInfo);
+                                            startLoca = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇鍗崇敤B", workInfo.S_ItemCode);
                                         }
                                     }
                                     else
@@ -248,10 +248,7 @@
                             }
                             if (flag)
                             {
-                                //鍒ゆ柇褰撳墠缈绘枟鏈烘槸鍚︽湁閫佽繃婊℃墭 S_NOTE 瀛楁榛樿绌哄瓧绗︿覆锛屾弧鎵樺嵏璐у畬鎴愪箣鍚庝細鏍囪涓烘弧鎵橈紝绌烘墭鍙栬揣瀹屾垚澶嶄綅涓虹┖瀛楃涓�-                                bool result = false;
                                 Location startLoca = null;
-                                Location endLoca = null;
 
                                 var locCode = plc.TN_Location[0];
                                 var plcLoca = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == locCode).ToList();
@@ -282,7 +279,7 @@
             else LogHelper.Info($"鐡剁洊缈绘枟鏈猴細{plc.deviceName} 鏈紑鍚伐鍗曪紝涓嶅彲瑙﹀彂婊℃墭涓嬬嚎", "鐡剁洊缈绘枟鏈�);
         }
 
-        private static Location getFDSXArea(SqlSugar.SqlSugarClient db, LinZhiBCPWorkOrder workInfo, string startArea)
+        public static Location getFDSXArea(SqlSugar.SqlSugarClient db, LinZhiBCPWorkOrder workInfo, string startArea)
         {
             Location result = null;
             var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == startArea && a.N_CURRENT_NUM > 0).Includes(a => a.LocCntrRel).ToList();
@@ -474,5 +471,69 @@
 
         internal static void Traffic(string forkliftNo, string lockNo, bool v) {
         }
+
+        internal static void quliao(WCSTask mst)
+        {
+            LogHelper.Info($"瀹夊叏浜や簰寮� 浠诲姟鍙�{mst.S_CODE}", "瀹夊叏浜や簰");
+            //NDCHelper.ChangeParam(mst.S_TASK_NO.Trim(), 1101, 18);
+            if (LineState.Keys.Contains(mst.S_START_LOC.Trim()))
+            {
+                LogHelper.Info($"浠诲姟绫诲瀷锛歿mst.S_TYPE}");
+                if (mst.S_TYPE.Contains("缈绘枟鏈�))
+                {
+                    LogHelper.Info($"鏌ヨ缈绘枟鏈哄厑璁稿彇绌轰俊鍙�鍏佽鍙栫┖淇″彿={LineState[mst.S_START_LOC.Trim()].status} 鏃堕棿闂撮殧={DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds}", "瀹夊叏浜や簰");
+                    if (LineState[mst.S_START_LOC.Trim()].status == "112100" && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
+                    {
+                        NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
+                        TaskProcess.sendSing(mst, 1101);
+                    }
+                }
+                else
+                {
+                    LogHelper.Info($"鏌ヨ杈撻�绾垮厑璁稿彇婊′俊鍙�鍏佽鍙栨弧淇″彿={LineState[mst.S_START_LOC.Trim()].status} 鏃堕棿闂撮殧={DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds}", "瀹夊叏浜や簰");
+                    if (LineState[mst.S_START_LOC.Trim()].status == "1220" && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
+                    {
+                        NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
+                        TaskProcess.sendSing(mst, 1101);
+                    }
+                }
+            }
+            else LogHelper.Info($"瀛楀吀涓湭鎵惧埌璇ey鐨勬暟鎹紝key锛歿mst.S_START_LOC}");
+        }
+
+        internal static void Xieliao(WCSTask mst)
+        {
+            try
+            {
+                LogHelper.Info($"瀹夊叏浜や簰寮� 浠诲姟鍙�{mst.S_CODE},浠诲姟缁堢偣锛歿mst.S_END_LOC}", "瀹夊叏浜や簰");
+                if (LineState.Keys.Contains(mst.S_END_LOC.Trim()))
+                {
+                    LogHelper.Info($"鏌ヨ鍒板瓧鍏镐腑鍖呭惈缁堢偣鐨勫叧閿瓧锛屼换鍔$被鍨嬶細{mst.S_TYPE}");
+                    if (mst.S_TYPE.Contains("缈绘枟鏈�))
+                    {
+                        LogHelper.Info($"鏌ヨ缈绘枟鏈哄厑璁镐笂婊′俊鍙�鍏佽涓婃弧淇″彿={LineState[mst.S_END_LOC.Trim()].status} 鏃堕棿闂撮殧={DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds}", "瀹夊叏浜や簰");
+                        if (LineState[mst.S_END_LOC.Trim()].status == "112100" && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
+                        {
+                            NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
+                            TaskProcess.sendSing(mst, 1103);
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info($"鏌ヨ杈撻�绾垮厑璁歌ˉ绌轰俊鍙�鍏佽琛ョ┖淇″彿={LineState[mst.S_END_LOC.Trim()].status} 鏃堕棿闂撮殧={DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds}", "瀹夊叏浜や簰");
+                        if (LineState[mst.S_END_LOC.Trim()].status == "1021" && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
+                        {
+                            NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
+                            TaskProcess.sendSing(mst, 1103);
+                        }
+                    }
+                }
+                else LogHelper.Info($"瀛楀吀涓湭鍖呭惈缁堢偣鐨勫叧閿瓧锛岀粓鐐硅揣浣嶏細{mst.S_END_LOC}");
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info("Xieliao err :" + ex.Message);
+            }
+        }
     }
 }
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
index 231f3a1..af9ada7 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -1,5 +1,7 @@
 锘縰sing HH.WCS.Mobox3.NFLZ.core;
+using HH.WCS.Mobox3.NFLZ.device;
 using HH.WCS.Mobox3.NFLZ.dispatch;
+using HH.WCS.Mobox3.NFLZ.models;
 using HH.WCS.Mobox3.NFLZ.util;
 using HH.WCS.Mobox3.NFLZ.wms;
 using Newtonsoft.Json;
@@ -9,11 +11,14 @@
 using System.Linq;
 using System.Security.Cryptography;
 using static HH.WCS.Mobox3.NFLZ.api.OtherModel;
+using static HH.WCS.Mobox3.NFLZ.dispatch.NDC;
+using static HH.WCS.Mobox3.NFLZ.wms.WMSHelper.AddChangeModel;
 
 namespace HH.WCS.Mobox3.NFLZ.process
 {
     internal class TaskProcess
     {
+        private static HttpHelper httpHelper = new HttpHelper();
         #region 浠诲姟鐩稿叧
         //--------------------------------------------------浠诲姟鐩稿叧--------------------------------------------------
         /// <summary>
@@ -72,25 +77,115 @@
         /// <param name="extData"></param>
         internal static void OperateReq(string no, int state, string forkliftNo, string extData)
         {
-            if (state == 1101)
+            LogHelper.Info($"鏀跺埌瀹夊叏璇锋眰淇″彿锛歿state},浠诲姟鍙凤細{no}");
+            var mst = WCSHelper.GetTask(no);
+            if (mst != null)
             {
-                //璇锋眰鍙栬揣锛�+                if (state == 1101)
+                {
+                    //鍙栬揣璇锋眰锛屽厑璁歌繘鍏ュ彇璐э紝淇敼鍙傛暟18涓�101
+                    DeviceProcess.quliao(mst);
+                }
+                if (state == 1103)
+                {
+                    DeviceProcess.Xieliao(mst);
+                }
+                if (state == 1102 || state == 1104)
+                {
+                    sendSing(mst, state);
+                }
             }
-            if (state == 1102)
+        }
+
+        internal static void sendSing(WCSTask wmsTask, int state = 0)
+        {
+            LogHelper.Info($"鏀跺埌浠诲姟{wmsTask.S_CODE}淇″彿{state},绫诲瀷{wmsTask.S_TYPE}");
+            int devType = wmsTask.S_TYPE == "鎴愬搧涓嬬嚎" ? 14 : 19;
+            var plc = Settings.deviceInfos.Where(a => a.deviceType == devType).FirstOrDefault();
+            if (plc != null)
             {
-                //璇锋眰鍗歌揣锛�-                //鏍规嵁缁堢偣鍒ゆ柇锛屾槸cb02鐨勫叆鍙o紝鍒ゆ柇鍐呭瓨涓姸鎬侊紙瑕佺姸鎬佹椂闂达級锛屽厑璁稿嵏璐э紝閫氱煡agv鏀瑰弬鏁�-                var dic = new Dictionary<string, string>();
-                //< Req >< Order No = 'TN2302020002' ParamNo = '18' Param1 = '12' /></ Req >
-                dic.Add("No", no);
-                dic.Add("ParamNo", "8");
-                dic.Add("Param1", "1");
-                NDC.ChangeOrder(dic);
-                //鏀瑰畬鍙傛暟杞﹀瓙灏变細鑷繁鍗歌揣
+                if (wmsTask.S_TYPE == "鎴愬搧涓嬬嚎")
+                {
+                    if (state == 1101)
+                    {
+                        PlcHelper.SendHex(plc.address, "3F00110D0A");
+                    }
+                    if (state == 1102)
+                    {
+                        PlcHelper.SendHex(plc.address, "3F00100d0a");
+                    }
+                }
+                if (wmsTask.S_TYPE == "鏍堟澘涓婄嚎")
+                {
+                    if (state == 1103)
+                    {
+                        PlcHelper.SendHex(plc.address, "3F00210d0a");
+                    }
+                    if (state == 1104 || state == -1)
+                    {
+                        PlcHelper.SendHex(plc.address, "3F00200d0a");
+                    }
+                }
+                if (wmsTask.S_TYPE.Contains("绌烘墭涓婄嚎") || wmsTask.S_TYPE.Contains("婊℃墭涓婄嚎") || wmsTask.S_TYPE.Contains("绌烘墭涓嬬嚎") || wmsTask.S_TYPE.Contains("婊℃墭涓嬬嚎"))
+                {
+                    LogHelper.Info($"{wmsTask.S_TYPE}鍙栨秷鍐欏叆澶嶄綅淇″彿");
+                    writeSignal(wmsTask);
+                }
             }
-            if (state == 1103)
+            else LogHelper.Info("鍐滃か涓存睙-L6杈撻�绾�鏈厤缃�);
+        }
+
+        public static void writeSignal(WCSTask mst, int state = 0)
+        {
+            if (mst.S_TYPE.Contains("绌烘墭涓婄嚎"))
             {
-                //澶ч搧妗嗗弶璧颁互鍚庨�鐭ワ紝鎴戜滑瑕侀�鐭ヨ緭閫佺嚎
+                LogHelper.Info($"{mst.S_TYPE}鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙�);
+                //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙h繕鏄疊鍙�+                var locCode = mst.S_END_LOC;
+                var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
+                if (devInfo != null)
+                {
+                    var signal = devInfo.TN_Location[0] == mst.S_END_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
+                    if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}");
+                }
+                else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_END_LOC}");
+            }
+            if (mst.S_TYPE.Contains("婊℃墭涓婄嚎"))
+            {
+                LogHelper.Info($"{mst.S_TYPE}鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙�);
+                var locCode = mst.S_END_LOC;
+                var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
+                if (devInfo != null)
+                {
+                    var signal = "3F 00 10 0D 0A";
+                    if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}");
+                }
+                else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_END_LOC}");
+            }
+            if (mst.S_TYPE.Contains("绌烘墭涓嬬嚎"))
+            {
+                LogHelper.Info($"{mst.S_TYPE}鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙�);
+                var locCode = mst.S_START_LOC;
+                var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
+                if (devInfo != null)
+                {
+                    var signal = "3F 00 12 22 00 0D 0A";
+                    if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}");
+                }
+                else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_END_LOC}");
+            }
+            if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎"))
+            {
+                LogHelper.Info($"{mst.S_TYPE}鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙�);
+                //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙h繕鏄疊鍙�+                var locCode = mst.S_START_LOC;
+                var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
+                if (devInfo != null)
+                {
+                    var signal = devInfo.TN_Location[0] == mst.S_START_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
+                    if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}");
+                }
+                else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_START_LOC}");
             }
         }
 
@@ -156,168 +251,95 @@
         /// <exception cref="NotImplementedException"></exception>
         public static void EmptyTask(WCSTask mst)
         {
-            ////鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ユ�浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鎬ヤ骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭
-            //var db = new SqlHelper<object>().GetInstance();
-            //Location startLoca = null;
-            //bool result = false;
-            //
-            //if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎"))
-            //{
-            //    LogHelper.Info($"绌烘墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}");
-            //    startLoca = getMStartLoc1(db, startLoca, "鐡跺澂");
-            //    #region
-            //
-            //    if (startLoca != null)
-            //    {
-            //        LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca));
-            //        var startArea = startLoca.S_AREA_CODE;
-            //        string taskType = "";
-            //        if (mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級") taskType = "娉ㄥ鍗充骇绌烘墭涓婄嚎锛堢摱鍧級";
-            //        if (mst.S_TYPE == "娉ㄥ搴撳瓨婊℃墭涓嬬嚎锛堢摱鍧級") taskType = "娉ㄥ搴撳瓨绌烘墭涓婄嚎锛堢摱鍧級";
-            //        int startLayer = startLoca.N_CURRENT_NUM;
-            //        var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_LOC_CODE).First();
-            //        if (cntrInfo != null)
-            //        {
-            //            string cntr = cntrInfo.S_CNTR_CODE;
-            //            result = IntensiveArea.LinJiangCreateTransport(startArea, startLoca.S_LOC_CODE, mst.S_START_LOC, taskType, cntr, 1, 1, mst.S_SRC_SYS, startLoca.N_ROW, 1, 1);
-            //            if (result) LogHelper.Info($"{taskType}锛歿mst.S_SRC_SYS} 褰撳墠浣嶇疆{mst.S_START_LOC} 浠诲姟鍒涘缓鎴愬姛", "娉ㄥ鏈虹┖鎵樹笂绾�);
-            //        }
-            //        else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_LOC_CODE}");
-            //    }
-            //}
-            //
-            //if (mst.S_TYPE.Contains("绌烘墭涓嬬嚎"))
-            //{
-            //    LogHelper.Info($"婊℃墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}");
-            //    string startArea = "";
-            //    bool flage = false;
-            //    string jbw = "";
-            //    string mk = "";
-            //    string machine = "";
-            //    LinjiangBCPWorkOrder bcpW = null;
-            //    if (mst.S_TYPE.Contains("鐡跺澂"))
-            //    {
-            //        jbw = "鐡跺澂鎺ラ┏浣�;
-            //        mk = "鐡跺澂婊℃墭鍑哄簱鎺ラ┏浣�;
-            //        machine = "鐡跺澂缈绘枟鏈�;
-            //        bcpW = db.Queryable<LinjiangBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か涓存睙-鐡跺澂缈绘枟鏈�)).First();
-            //    }
-            //    else
-            //    {
-            //        jbw = "鐡剁洊鎺ラ┏浣�;
-            //        mk = "鐡剁洊婊℃墭";
-            //        bcpW = db.Queryable<LinjiangBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か涓存睙-鐡剁洊缈绘枟鏈�)).First();
-            //    }
-            //
-            //    if (bcpW.S_UsingNow == "Y")
-            //    {
-            //        LogHelper.Info("鍗充骇鍗崇敤宸ュ崟");
-            //        //鍗充骇鍗崇敤鍦ㄨ捣鐐逛负绾胯竟
-            //        var bcpInfo = Settings.GetLinJiangBCPAreaList().Where(a => a.AreaName == jbw && a.Enable == "1").FirstOrDefault();
-            //        if (bcpInfo != null)
-            //        {
-            //            startArea = bcpInfo.AreaNo;
-            //        }
-            //    }
-            //    else
-            //    {
-            //        LogHelper.Info("闈炲嵆浜у嵆鐢ㄥ伐鍗�);
-            //        //闈炲嵆浜у嵆鐢ㄨ捣鐐逛负搴撳尯
-            //        var bcpInfo = Settings.GetLinJiangBCPAreaList().Where(a => a.AreaName == mk && a.Enable == "1").FirstOrDefault();
-            //        if (bcpInfo != null)
-            //        {
-            //            startArea = bcpInfo.AreaNo;
-            //        }
-            //    }
-            //
-            //    if (bcpW.S_UsingNow == "Y")
-            //    {
-            //        bool action = false;
-            //        if (jbw == "鐡跺澂鎺ラ┏浣�)
-            //        {
-            //            flage = true;
-            //            action = DeviceProcess.queryBCPFDJRow(db, ref startLoca);
-            //        }
-            //        LogHelper.Info($"鍗充骇鍗崇敤搴撳尯鏌ユ壘");
-            //        if (startLoca == null)
-            //        {
-            //            startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea, machine);
-            //            //startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == startArea && a.N_CURRENT_NUM != 0 && a.S_LOCK_STATE == "鏃�).First();
-            //            //startLoca = TempleteOverExtendService.GetLocation(startArea, workInfo.S_ItemCode, "", false); 
-            //            if (startLoca == null)
-            //            {
-            //                flage = false;
-            //                if (jbw == "鐡跺澂鎺ラ┏浣�)
-            //                {
-            //                    LogHelper.Info($"鍗充骇鍗崇敤搴撳尯鏈壘鍒版弧鎵橈紝鍘绘弧鎵樺簱鍖烘煡鎵�);
-            //
-            //                    //鍗充骇鍗崇敤搴撳尯鏃犳弧鎵橈紝鍘婚潪鍗充骇鍗崇敤搴撳尯鏌ヨ
-            //                    LogHelper.Info($"mk:{mk}");
-            //                    startArea = Settings.GetLinJiangBCPAreaList().Where(a => a.AreaName == mk && a.Enable == "1").FirstOrDefault().AreaNo;
-            //                    LogHelper.Info($"startArea:{startArea}");
-            //                    //startLoca = TempleteOverExtendService.GetLocation(startArea, workInfo.S_ItemCode, "", false, true, true);
-            //                    startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
-            //                }
-            //            }
-            //            else
-            //            {
-            //                if (action)
-            //                {
-            //                    CPXXTable table = new CPXXTable
-            //                    {
-            //                        S_AREA_CODE = startArea,
-            //                        S_ROW = startLoca.N_ROW,
-            //                        S_TASK_TYPE = "鐡跺澂娉ㄥ鏈�
-            //                    };
-            //                    db.Insertable(table).ExecuteCommand();
-            //                }
-            //            }
-            //        }
-            //    }
-            //    else
-            //    {
-            //        startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
-            //    }
-            //
-            //    if (startLoca != null)
-            //    {
-            //        LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca));
-            //        string taskType = "";
-            //        if (mst.S_TYPE == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄嵆浜ф弧鎵樹笂绾匡紙鐡跺澂锛�;
-            //        if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡跺澂锛�;
-            //        if (mst.S_TYPE == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡剁洊锛�) taskType = "缈绘枟鏈哄嵆浜ф弧鎵樹笂绾匡紙鐡剁洊锛�;
-            //        if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡剁洊锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡剁洊锛�;
-            //        int startLayer = startLoca.N_CURRENT_NUM;
-            //        var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_LOC_CODE).First();
-            //        if (cntrInfo != null)
-            //        {
-            //            string cntr = cntrInfo.S_CNTR_CODE;
-            //            if (flage)
-            //            {
-            //                result = TaskHelper.LinJiangCreateTask("", startLoca.S_LOC_CODE, mst.S_START_LOC, taskType, 1, cntr, mst.S_SRC_SYS);
-            //                if (result)
-            //                {
-            //                    LocationHelper.LockLoc(startLoca.S_LOC_CODE, "鍑哄簱閿�);
-            //                    LocationHelper.LockLoc(mst.S_START_LOC, "鍏ュ簱閿�);
-            //                    var rowInfo = db.Queryable<RowLock>().Where(a => a.S_AREA_CODE == startArea && a.N_ROW == startLoca.N_ROW).First();
-            //                    if (rowInfo != null)
-            //                    {
-            //                        rowInfo.S_LOCK_STATE = "鍗充骇鍑哄簱閿�;
-            //                        db.Updateable(rowInfo).UpdateColumns(a => new { a.S_LOCK_STATE }).ExecuteCommand();
-            //                    }
-            //                }
-            //            }
-            //            else
-            //            {
-            //                int pri = 1;
-            //                if (taskType.Contains("鐡剁洊")) pri = 10;
-            //                result = IntensiveArea.LinJiangCreateTransport(startArea, startLoca.S_LOC_CODE, mst.S_START_LOC, taskType, cntr, 1, 1, mst.S_SRC_SYS, startLoca.N_ROW, 1, pri);
-            //            }
-            //            if (result) LogHelper.Info($"{taskType}锛歿mst.S_SRC_SYS} 褰撳墠浣嶇疆{mst.S_START_LOC} 浠诲姟鍒涘缓鎴愬姛", "缈绘枟鏈烘弧鎵樹笂绾�);
-            //        }
-            //        else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_LOC_CODE}");
-            //    }
-            //}
+            //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ユ�浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鎬ヤ骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭
+            var db = new SqlHelper<object>().GetInstance();
+            Location startLoca = null;
+
+            if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎"))
+            {
+                LogHelper.Info($"绌烘墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}");
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂绌烘墭" && a.enable == 1).First();
+                if(areaInfo != null)
+                {
+                    startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First();
+                    if (startLoca != null)
+                    {
+                        LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca));
+                        string taskType = "";
+                        if (mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級") taskType = "娉ㄥ鍗充骇绌烘墭涓婄嚎锛堢摱鍧級";
+                        if (mst.S_TYPE == "娉ㄥ搴撳瓨婊℃墭涓嬬嚎锛堢摱鍧級") taskType = "娉ㄥ搴撳瓨绌烘墭涓婄嚎锛堢摱鍧級";
+                        var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_CODE).First();
+                        if (cntrInfo != null)
+                        {
+                            WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "鍑哄簱", taskType, cntrInfo.S_CNTR_CODE);
+                        }
+                        else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_CODE}");
+                    }
+                }
+                else
+                {
+                    LogHelper.Info($"鐡跺澂绌烘墭鏈厤缃�);
+                }
+            }
+
+            if (mst.S_TYPE.Contains("绌烘墭涓嬬嚎"))
+            {
+                LogHelper.Info($"婊℃墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}");
+                string startArea = "";
+                LinZhiBCPWorkOrder bcpW = null;
+                if (mst.S_TYPE.Contains("鐡跺澂"))
+                {
+                    bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か鏋楄姖-鐡跺澂缈绘枟鏈�) && a.S_WorkState == "鎵ц涓�).First();
+                }
+                else
+                {
+                    bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か鏋楄姖-鐡剁洊缈绘枟鏈�) && a.S_WorkState == "鎵ц涓�).First();
+                }
+
+                if (mst.S_TYPE.Contains("鐡剁洊"))
+                {
+                    //鐡剁洊鏃犲嵆浜у嵆鐢ㄥ拰闈炲嵆浜у嵆鐢�+                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault();
+                    if (bcpInfo != null)
+                    {
+                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode);
+                    }
+                }
+                else
+                {
+                    if (bcpW.S_UsingNow == "Y")
+                    {
+                        LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏌ユ壘");
+                        startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤A" && a.enable == 1).FirstOrDefault().areaCode;
+                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
+                        if (startLoca == null)
+                        {
+                            LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏈壘鍒版弧鎵橈紝鍘荤摱鍧嵆浜у嵆鐢˙搴撳尯鏌ユ壘");
+                            startLoca = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇鍗崇敤B", bcpW.S_ItemCode);
+                        }
+                    }
+                    else
+                    {
+                        startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault().areaCode;
+                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
+                    }
+                }
+
+                if (startLoca != null)
+                {
+                    LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca));
+                    string taskType = "";
+                    if (mst.S_TYPE == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄嵆浜ф弧鎵樹笂绾匡紙鐡跺澂锛�;
+                    if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡跺澂锛�;
+                    if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡剁洊锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡剁洊锛�;
+                    var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_CODE).First();
+                    if (cntrInfo != null)
+                    {
+                        WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "鍑哄簱", taskType, cntrInfo.S_CNTR_CODE);
+                    }
+                    else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_CODE}");
+                }
+            }
         }
 
         private static void claimGoodsTime(WCSTask mst, int state)
@@ -513,47 +535,239 @@
         internal static bool SendTask(WCSTask mst)
         {
             var result = false;
-            var start = "0"; var end = "0";
-            var taskType = mst.S_TYPE.Trim();
+            var db = new SqlHelper<object>().GetInstance();
             if (mst.N_B_STATE == 0)
             {
-                //if (mst.S_SCHEDULE_TYPE == "NDC") {
-                //    start = LocationHelper.GetAgvSite(mst.S_START_LOC);
-                //    end = LocationHelper.GetAgvSite(mst.S_END_LOC);
-                //
-                //
-                //    Console.WriteLine($"SendTask {mst.S_CODE}");
-                //    Console.WriteLine("start=" + start);
-                //    Console.WriteLine("end= " + end);
-                //    var dic = new Dictionary<string, string>();
-                //    dic.Add("Pri", mst.N_PRIORITY.ToString());
-                //    dic.Add("From", start.ToString());
-                //    dic.Add("To", end.ToString());
-                //    dic.Add("No", mst.S_CODE.Trim());// dic.Add("Ext1", "1"); dic.Add("Ext2", "CALLADDAGV"); dic.Add("N_CNTR_COUNT", "");
-                //    var res = NDC.AddNewOrder(1, 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 == "WCS") {
-                //     //璋冪涓夋柟鎺ュ彛
-                //     var model = new HanAo.TaskInfoModel
-                //     {
-                //         requestPk = mst.S_CODE,
-                //         frmPos = mst.S_START_LOC,
-                //         toPos = mst.S_END_LOC,
-                //         trkType = mst.S_OP_NAME == "鍏ュ簱" ? "1" : "2",
-                //         contNo = mst.S_CNTR_CODE
-                //     };
-                //     //if (HanAo.CreateOrder(model)) {
-                //         mst.N_B_STATE = 1;
-                //         WCSHelper.UpdateStatus(mst);
-                //     //}
-                // }
+                try
+                {
+                    int TsNo = 1;//涓嬪彂浠诲姟绫诲瀷锛氶粯璁�1 鍧洊-6 鎴愬搧浠诲姟-5
+                    var Extend1 = "0";//鍙栬揣绔欑偣
+                    var Extend2 = "0";//鍗歌揣绔欑偣
+                    string Extend3 = "";//鍔熻兘鐮�     16杩涘埗杞�0杩涘埗
+                    string Extend4 = "";//鍧洊锛氭墭鐩樼被鍨�鍗充骇鍗崇敤1锛岄潪鍗充骇鍗崇敤2 涓嶅尯鍒嗕负1 鎴愬搧锛氬彇鍗歌揣灞傛暟(鍏堝崟鐙浆鎹负16杩涘埗锛屽啀鎷兼帴杞崲涓�0杩涘埗)
+                    string Extend5 = "";//鐗╂枡楂樺害(鍝佺浉)                                   鏍规嵁宸ュ崟鐗╂枡鍒扮墿鏂欒〃鑾峰彇涓嬪彂TS鐨勭墿鏂欓珮搴�+                    string Extend6 = "";//鎵樼洏鐗堝瀷 澶囨敞锛氬皬鏉�1锛岄泦鍖栨澘 2锛屽皬鏉胯秴鎵�3锛岄泦鍖栨澘瓒呮墭 4      鏍规嵁宸ュ崟鐗堝瀷杞崲涓哄搴旂殑鍊�+                    string Extend7 = "";//璧风偣鍒�+                    string Extend8 = "";//缁堢偣鍒�+                    int startLayer = mst.N_START_LAYER;// 璧风偣鍙栬揣灞傛暟
+                    int endLayer = mst.N_END_LAYER;// 缁堢偣鍗歌揣灞傛暟
+                    string workNo = mst.S_EQ_TASK_CODE;// 宸ュ崟鍙�+                    string trayType = mst.S_NOTE;//鎵樼洏绫诲瀷-鏍规嵁鍚勮嚜鐜板満鎯呭喌鑾峰彇
+                    var taskType = mst.S_TYPE;// 浠诲姟绫诲瀷
 
+                    // 鑾峰彇璧风粓鐐圭殑AGV绔欑偣 鏌ヨ 鎵╁睍璐т綅琛�S_PICKUP_POINT-鐐逛綅灞傛暟 S_LOC_CODE-璐т綅缂栫爜 GetAgvSite-鏍囧噯鑾峰彇鎵╁睍璐т綅琛ㄦ暟鎹殑鏂规硶
+                    //Extend1 = LocationHelper.GetAgvSite(mst.S_START_LOC, startLayer.ToString());
+                    //Extend2 = LocationHelper.GetAgvSite(mst.S_END_LOC, endLayer.ToString());
+                    //浜屾湡鎴愬搧浠诲姟绫诲瀷(灏�鎴愬搧杞﹂棿 浠诲姟绫诲瀷鍔犲叆鍒版鏁扮粍涓紝鍗冲彲鏍规嵁 浠诲姟绫诲瀷 鍖哄垎杞﹂棿锛屽苟鑾峰彇瀵瑰簲鐨凾S鍙傛暟)
+                    string[] ConveryTaskList = new string[] { "鎴愬搧涓嬬嚎", "鏍堟澘涓婄嚎", "闆跺ご涓嬬嚎" };
+                    if (ConveryTaskList.Contains(taskType) || taskType.Contains("绉诲簱"))
+                    {
+                        //TsNo = 5;
+                        //
+                        //if (taskType.Contains("鏍堟澘涓婄嚎"))
+                        //{
+                        //    Extend1 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE;
+                        //    Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE;
+                        //
+                        //    var startLoc = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC).First();
+                        //    var endLoc = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First();
+                        //    int startCol = int.Parse(startLoc.N_COL.ToString());
+                        //    int endCol = int.Parse(endLoc.N_COL.ToString());
+                        //    Extend7 = (startCol - 1).ToString();
+                        //    Extend8 = (endCol - 1).ToString();
+                        //}
+                        //else
+                        //{
+                        //    // 鎴愬搧浠诲姟涓嬪彂鍙傛暟鑾峰彇
+                        //
+                        //    var startLoc = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC).First();
+                        //    var endLoc = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First();
+                        //    int startCol = int.Parse(startLoc.N_COL.ToString());
+                        //    int endCol = int.Parse(endLoc.N_COL.ToString());
+                        //    var startLocInfo = db.Queryable<SegmentTable>().Where(a => a.S_AREA_CODE == startLoc.S_AREA_CODE && a.N_ROW == startLoc.N_ROW && a.S_START_COL <= startCol && a.S_END_COL >= startCol).First();
+                        //    var endLocInfo = db.Queryable<SegmentTable>().Where(a => a.S_AREA_CODE == endLoc.S_AREA_CODE && a.N_ROW == endLoc.N_ROW && a.S_START_COL <= endCol && a.S_END_COL >= endCol).First();
+                        //
+                        //    if (startLocInfo != null)
+                        //    {
+                        //        Extend1 = mst.N_START_LAYER == 1 ? int.Parse(startLocInfo.S_First_Bit) : int.Parse(startLocInfo.S_Second_Bit);
+                        //        if (trayType.Contains("闆嗗寲鏉�)) Extend1 = Extend1 + 2;
+                        //
+                        //        Extend7 = (startCol - startLocInfo.S_START_COL).ToString();
+                        //    }
+                        //    else LogHelper.Info($"浠诲姟寮傚父锛歿mst.S_CODE},鑷敱绾挎琛ㄦ棤鍙敤璧风偣璐т綅鏁版嵁銆傝捣鐐硅揣浣嶇紪鐮侊細{mst.S_START_LOC}");
+                        //    if (endLocInfo != null)
+                        //    {
+                        //        Extend2 = mst.N_END_LAYER == 1 ? int.Parse(endLocInfo.S_First_Bit) : int.Parse(endLocInfo.S_Second_Bit);
+                        //        Extend8 = (endCol - endLocInfo.S_START_COL).ToString();
+                        //    }
+                        //    else LogHelper.Info($"浠诲姟寮傚父锛歿mst.S_CODE},鑷敱绾挎琛ㄦ棤鍙敤缁堢偣璐т綅鏁版嵁銆傜粓鐐硅揣浣嶇紪鐮侊細{mst.S_END_LOC}");
+                        //
+                        //    // 鍏朵粬鍔熻兘鐮佸彲浠ユ牴鎹换鍔$被鍨嬭嚜琛屾坊鍔�姝ゅ浠呯ず渚�绉诲簱 鍔熻兘鐮佽幏鍙栨柟寮忥紝濡傛灉鏈夋洿濂界殑鏂瑰紡锛屽彲浠ヨ嚜琛屼慨鏀�
+                        //    if (taskType.Contains("绉诲簱")) Extend3 = Convert.ToInt32("20", 16).ToString();
+                        //
+                        //}
+                        //
+                        ////// 鑾峰彇鎴愬搧宸ュ崟鏁版嵁(鏌ヨ 鎴愬搧宸ュ崟琛�f
+                        //if (taskType.Contains("绉诲簱"))
+                        //{
+                        //    var workInfo = db.Queryable<YiKuWorkOrder>().Where(a => a.S_WorkNo == workNo).First();
+                        //    if (workInfo != null)
+                        //    {
+                        //        LogHelper.Info($"{workInfo.S_ORDER_TYPE}");
+                        //        // 鑾峰彇涓嬪彂TS鐗╂枡灞傛暟鏁版嵁(鏌ヨ 鐗╂枡琛�
+                        //        if (workInfo.S_ORDER_TYPE.Contains("绉诲簱"))
+                        //        {
+                        //            LogHelper.Info($"鐗╂枡缂栫爜锛歿mst.S_ITEM_CODE},鏍堟澘绫诲瀷锛歿trayType},鐗╂枡瑙勬牸锛歿workInfo.S_ItemLayer}");
+                        //            var itemInfo1 = db.Queryable<ItemRel>().Where(a => a.S_ITEM_CODE == mst.S_ITEM_CODE && a.S_TRAY_TYPE == trayType && a.S_ITEM_MODEL == workInfo.S_ItemLayer).First();
+                        //            if (itemInfo1 != null)
+                        //            {
+                        //                Extend5 = itemInfo1.S_ITEM_LAYER;
+                        //            }
+                        //            else
+                        //            {
+                        //                LogHelper.Info($"鐗╂枡琛ㄦ湭缁存姢淇℃伅锛岀墿鏂欑紪鐮侊細{mst.S_ITEM_CODE},鏍堟澘绫诲瀷锛歿trayType},鐗╂枡瑙勬牸锛歿workInfo.S_ItemLayer}");
+                        //            }
+                        //            //if (workInfo.S_ORDER_TYPE == "鏃犵爜鍏ュ簱" && endLayer == 1) Extend5 = "";
+                        //        }
+                        //
+                        //        // 鏍规嵁宸ュ崟涓墭鐩樼被鍨嬭浆鎹负瀵瑰簲鐨勪笅鍙慣S鍙傛暟鏁版嵁
+                        //        LogHelper.Info($"S_TRAY_TYPE:{trayType}");
+                        //        LogHelper.Info($"Extend5:{Extend5}");
+                        //        int x = 0;
+                        //        if (trayType == "灏忔澘") x = 1;
+                        //        if (trayType == "闆嗗寲鏉�) x = 2;
+                        //        if (trayType == "灏忔澘瓒呮墭") x = 3;
+                        //        if (trayType == "闆嗗寲鏉胯秴鎵�) x = 4;
+                        //
+                        //        Extend6 = x.ToString();
+                        //
+                        //    }
+                        //}
+                        //else
+                        //{
+                        //    var workInfo = db.Queryable<LinJiangWorkOrder>().Where(a => a.S_WorkNo == workNo).First();
+                        //    if (workInfo != null)
+                        //    {
+                        //        LogHelper.Info($"{workInfo.S_ORDER_TYPE}");
+                        //        // 鑾峰彇涓嬪彂TS鐗╂枡灞傛暟鏁版嵁(鏌ヨ 鐗╂枡琛�
+                        //        if (workInfo.S_ORDER_TYPE.Contains("涓嬬嚎") || workInfo.S_ORDER_TYPE == "鏃犵爜鍏ュ簱")
+                        //        {
+                        //            var itemInfo1 = db.Queryable<ItemRel>().Where(a => a.S_ITEM_CODE == workInfo.S_ItemCode && a.S_TRAY_TYPE == trayType && a.S_ITEM_MODEL == workInfo.S_ItemLayer).First();
+                        //            if (itemInfo1 != null)
+                        //            {
+                        //                Extend5 = itemInfo1.S_ITEM_LAYER;
+                        //            }
+                        //            //if (workInfo.S_ORDER_TYPE == "鏃犵爜鍏ュ簱" && endLayer == 1) Extend5 = "";
+                        //        }
+                        //
+                        //        // 鏍规嵁宸ュ崟涓墭鐩樼被鍨嬭浆鎹负瀵瑰簲鐨勪笅鍙慣S鍙傛暟鏁版嵁
+                        //        LogHelper.Info($"S_TRAY_TYPE:{trayType}");
+                        //        int x = 0;
+                        //        if (trayType == "灏忔澘") x = 1;
+                        //        if (trayType == "闆嗗寲鏉�) x = 2;
+                        //        if (trayType == "灏忔澘瓒呮墭") x = 3;
+                        //        if (trayType == "闆嗗寲鏉胯秴鎵�) x = 4;
+                        //
+                        //        Extend6 = x.ToString();
+                        //
+                        //    }
+                        //}
+                        //
+                        //// 鑾峰彇 浠诲姟鍙傛暟4 DATA 鏁版嵁
+                        //string startLayerValue = Convert.ToString(startLayer, 16).ToUpper();
+                        //string endLayerValue = Convert.ToString(endLayer, 16).ToUpper();
+                        ////Extend4 = Convert.ToInt32(startLayerValue + endLayerValue, 16).ToString();
+                        //Extend4 = ((startLayer * 16) + endLayer).ToString();
+                    }
+                    else
+                    {
+                        TsNo = 1;
+                        // 鍧洊浠诲姟涓嬪彂鍙傛暟鑾峰彇
+                        // 鑾峰彇璧风粓鐐圭殑AGV绔欑偣
+                        Extend1 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE;
+                        Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE;
+                        Extend3 = "0";
+                        // 鑾峰彇 浠诲姟鍙傛暟4 DATA 鏁版嵁
+                        string startLayerValue = Convert.ToString(startLayer, 16).ToUpper();
+                        string endLayerValue = Convert.ToString(endLayer, 16).ToUpper();
+                        //Extend4 = Convert.ToInt32(startLayerValue + endLayerValue, 16).ToString();
+                        Extend4 = ((startLayer * 16) + endLayer).ToString();
+                        //Extend4 = db.Queryable<LinjiangBCPWorkOrder>().Where(a => a.S_WorkNo == workNo).First().S_UsingNow == "N" ? "2" : "1";
+
+                        //鐡跺澂娉ㄥ鏈虹珯鐐规牴鎹厤缃枃浠惰幏鍙�+                        if (taskType.Contains("娉ㄥ") && taskType.Contains("鐡跺澂"))
+                        {
+                            var devInfo = Settings.deviceInfos.Where(a => (a.TN_Location.Contains(mst.S_START_LOC) || a.TN_Location.Contains(mst.S_END_LOC)) && a.enable == 1).FirstOrDefault();
+                            string machine = (devInfo.TN_Location[0] == mst.S_START_LOC || devInfo.TN_Location[0] == mst.S_END_LOC) ? "A" : "B";
+                            string machineTwo = devInfo.deviceName.Split('-')[1] + machine;
+                            LogHelper.Info($"鏈哄彴锛歿machineTwo}");
+                            var siteInfo = Settings.pPZSJSites.Where(a => a.siteName == machineTwo && a.enable == 1).FirstOrDefault();
+                            if (siteInfo != null)
+                            {
+                                if (taskType.Contains("绌烘墭涓婄嚎"))
+                                {
+                                    //鏀瑰彉缁堢偣绔欑偣
+                                    Extend2 = siteInfo.site[1];
+                                }
+                                else
+                                {
+                                    //鏀瑰彉璧风偣绔欑偣
+                                    Extend1 = siteInfo.site[0];
+                                }
+                            }
+                            else LogHelper.Info("閰嶇疆鏂囦欢鏈厤缃摱鍧敞濉戞満绔欑偣");
+                        }
+                    }
+
+                    Console.WriteLine($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}");
+                    LogHelper.Info($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}");
+                    bool action = true;
+                    var dic = new Dictionary<string, string>();
+                    //var dic1 = new Dictionary<string, string>();
+                    //dic.Add("Pri", mst.N_PRIORITY.ToString());
+                    //dic.Add("No", mst.S_CODE.Trim());
+                    dic.Add("From", Extend1);
+                    dic.Add("To", Extend2);
+                    dic.Add("Func", Extend3);
+                    dic.Add("Data", Extend4);
+
+                    if (ConveryTaskList.Contains(taskType) || taskType.Contains("绉诲簱"))
+                    {
+                        dic.Add("ItemHeight", Extend5);
+                        dic.Add("CntrType", Extend6);
+                        dic.Add("FromCol", Extend7);
+                        dic.Add("ToCol", Extend8);
+                        if (taskType.Contains("绉诲簱") || taskType.Contains("鎴愬搧涓嬬嚎") || taskType.Contains("闆跺ご涓嬬嚎"))
+                        {
+                            LogHelper.Info($"绉诲簱锛欵xtend5:{Extend5},Extend6:{Extend6},Extend7:{Extend7},Extend8:{Extend8},");
+                            if (Extend5 == "" || Extend6 == "" || Extend7 == "" || Extend8 == "")
+                            {
+                                action = false;
+                            }
+                        }
+                    }
+
+                    if (action)
+                    {
+                        var res = new AGVResult();
+                        res = NDC.AddNewOrderNew(TsNo,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;
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    LogHelper.Error($"SendTaskStandard Error:{ex.Message}", ex);
+                }
+
+                //mst.N_B_STATE = 1;
+                //WCSHelper.UpdateStatus(mst, "宸叉帹閫�);
+                //result = true;
             }
             return result;
         }
@@ -614,48 +828,43 @@
         /// 鍗婃垚鍝佸嚭鍏ュ簱
         /// </summary>
         /// <param name="db"></param>
-        /// <param name="action">true:鍏ュ簱 false:鍑哄簱</param>
-        /// <param name="startCode"></param>
+        /// <param name="action"></param>
+        /// <param name="areaName"></param>
+        /// <param name="itemCode"></param>
         /// <returns></returns>
-        public static Location BCPInOrOut(SqlSugarClient db, bool action, string startCode = "", string areaName = "", LinZhiBCPWorkOrder workInfo = null)
+        public static Location BCPInOrOut(SqlSugarClient db, bool action, string areaName,string itemCode)
         {
             Location result = null;
             if (action)
             {
-                var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startCode).First();
-                var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
-                if (itemInfo != null)
+                //鐡剁洊搴撳尯锛屼袱灞傚瘑闆嗗瀷搴撳尯  绌烘弧鍦ㄥ悓涓�釜搴撳尯锛岄渶瑕佸尯鍒嗕笉鍚屾帓
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First();
+                if (areaInfo != null)
                 {
-                    //鐡剁洊搴撳尯锛屼袱灞傚瘑闆嗗瀷搴撳尯  绌烘弧鍦ㄥ悓涓�釜搴撳尯锛岄渶瑕佸尯鍒嗕笉鍚屾帓
-                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First();
-                    if (areaInfo != null)
+                    //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷
+                    LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿areaInfo.areaCode},itemCode:{itemCode}", "WMSAlgoRithm");
+                    try
                     {
-                        //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷
-                        LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿areaInfo.areaCode},itemCode:{itemInfo.S_ITEM_CODE},itemBatch:{itemInfo.S_BATCH_NO}", "WMSAlgoRithm");
-                        try
+                        if (result == null)
                         {
-                            if (result == null)
+                            var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL)
+                                .PartitionBy(a => a.N_ROW).Take(1)
+                                .ToList();
+                            if (locInfo.Count > 0)
                             {
-                                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL)
-                                    .PartitionBy(a => a.N_ROW).Take(1)
-                                    .ToList();
-                                if (locInfo.Count > 0)
+                                foreach (var a in locInfo)
                                 {
-                                    foreach (var a in locInfo)
+                                    //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�+                                    if (a.S_LOCK_STATE == "鏃�)
                                     {
-                                        string itemCode = "";
+                                        string endItemCode = "";
                                         var endCntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
                                         if (endCntrInfo != null)
                                         {
                                             var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First();
                                             if (endItemInfo != null)
                                             {
-                                                itemCode = endItemInfo.S_ITEM_CODE;
-                                            }
-                                            else
-                                            {
-                                                LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氱墿鏂欎俊鎭�);
-                                                continue;
+                                                endItemCode = endItemInfo.S_ITEM_CODE;
                                             }
                                         }
                                         else
@@ -663,89 +872,80 @@
                                             LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氭墭鐩樹俊鎭�);
                                             continue;
                                         }
-
-                                        //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�-                                        if (a.S_LOCK_STATE == "鏃�)
+                                        //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓
+                                        if (itemCode == endItemCode)
                                         {
-                                            //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓
-                                            if (itemCode == itemInfo.S_ITEM_CODE)
+                                            //鏌ヨ褰撳墠鎺掓槸鍚﹀彲鍏ワ紙鍒ゆ柇鏄槸鍚︽湁鍏ュ簱閿佸拰鍑哄簱閿侊級
+                                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
+                                            if (lockInfo == null)
                                             {
-                                                //鏌ヨ褰撳墠鎺掓槸鍚﹀彲鍏ワ紙鍒ゆ柇鏄槸鍚︽湁鍏ュ簱閿佸拰鍑哄簱閿侊級
-                                                var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
-                                                if (lockInfo == null)
+                                                //褰撳墠鎺掓棤浠诲姟
+                                                if (a.N_CURRENT_NUM < a.N_CAPACITY) result = a;
+                                                else
                                                 {
-                                                    //褰撳墠鎺掓棤浠诲姟
-                                                    if (a.N_CURRENT_NUM < a.N_CAPACITY) result = a;
-                                                    else
+                                                    //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�+                                                    result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW > a.N_ROW && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First();
+                                                }
+                                                if (result != null)
+                                                {
+                                                    break;
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            if (result == null)
+                            {
+                                //todo 杩橀渶瑕佸垽鏂攣
+                                #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓
+                                LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm");
+                                //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪
+                                var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
+                                //2.1 閫変竴涓┖鎺�+                                if (list.Count > 0)
+                                {
+                                    LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅鏁伴噺涓猴細{list.Count}銆�, "WMSAlgoRithm");
+                                    for (int i = 0; i < list.Count; i++)
+                                    {
+                                        LogHelper.Info($"鍏ュ簱绠楁硶07:鑾峰彇绌烘帓璐т綅锛氳揣浣嶇紪鐮侊細{list[i].S_CODE.Trim()},褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM},鎺掑彿锛歿list[i].N_ROW},搴撳尯缂栫爜锛歿list[i].S_AREA_CODE.Trim()}", "WMSAlgoRithm");
+                                        if (list[i].S_LOCK_STATE.Trim().Contains("鏃�))
+                                        {
+                                            //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡
+                                            int row = list[i].N_ROW;
+                                            string areaCode = list[i].S_AREA_CODE.Trim();
+                                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaCode && b.N_ROW == row && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
+                                            if (lockInfo == null)
+                                            {
+                                                var locInfo1 = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First();
+                                                if (locInfo1 != null)
+                                                {
+                                                    LogHelper.Info($"{locInfo1.sum},row:{row}");
+                                                    if (locInfo1.sum == 0)
                                                     {
-                                                        //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�-                                                        result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW > a.N_ROW && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First();
-                                                    }
-                                                    if (result != null)
-                                                    {
+                                                        //绌烘帓
+                                                        result = list[i];
                                                         break;
                                                     }
                                                 }
+                                                else LogHelper.Info("鏈壘鍒拌鎺�);
                                             }
-                                        }
-                                    }
-                                }
-                                if (result == null)
-                                {
-                                    //todo 杩橀渶瑕佸垽鏂攣
-                                    #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓
-                                    LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm");
-                                    //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪
-                                    var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
-                                    //2.1 閫変竴涓┖鎺�-                                    if (list.Count > 0)
-                                    {
-                                        LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅鏁伴噺涓猴細{list.Count}銆�, "WMSAlgoRithm");
-                                        for (int i = 0; i < list.Count; i++)
-                                        {
-                                            LogHelper.Info($"鍏ュ簱绠楁硶07:鑾峰彇绌烘帓璐т綅锛氳揣浣嶇紪鐮侊細{list[i].S_CODE.Trim()},褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM},鎺掑彿锛歿list[i].N_ROW},搴撳尯缂栫爜锛歿list[i].S_AREA_CODE.Trim()}", "WMSAlgoRithm");
-                                            if (list[i].S_LOCK_STATE.Trim().Contains("鏃�))
+                                            else
                                             {
-                                                //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡
-                                                int row = list[i].N_ROW;
-                                                string areaCode = list[i].S_AREA_CODE.Trim();
-                                                var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaCode && b.N_ROW == row && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
-                                                if (lockInfo == null)
-                                                {
-                                                    var locInfo1 = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First();
-                                                    if (locInfo1 != null)
-                                                    {
-                                                        LogHelper.Info($"{locInfo1.sum},row:{row}");
-                                                        if (locInfo1.sum == 0)
-                                                        {
-                                                            //绌烘帓
-                                                            result = list[i];
-                                                            break;
-                                                        }
-                                                    }
-                                                    else LogHelper.Info("鏈壘鍒拌鎺�);
-                                                }
-                                                else
-                                                {
-                                                    LogHelper.Info("璇ユ帓鏈夐攣");
-                                                }
+                                                LogHelper.Info("璇ユ帓鏈夐攣");
                                             }
                                         }
                                     }
-                                    else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{areaInfo.areaCode}");
-                                    #endregion
                                 }
+                                else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{areaInfo.areaCode}");
+                                #endregion
                             }
                         }
-                        catch (Exception ex)
-                        {
-                            Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace);
-                            LogHelper.Error("GetLocationIn:" + ex.Message, ex);
-                        }
                     }
-                    else
+                    catch (Exception ex)
                     {
-                        LogHelper.Info($"鍏ュ簱浠诲姟 鐡剁洊搴撳尯鏈厤缃�);
+                        Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace);
+                        LogHelper.Error("GetLocationIn:" + ex.Message, ex);
                     }
                 }
                 else
@@ -755,20 +955,6 @@
             }
             else
             {
-                string itemCode = "";
-                if (string.IsNullOrEmpty(startCode))
-                {
-                    var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startCode).First();
-                    var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
-                    if(itemInfo != null)
-                    {
-                        itemCode = itemInfo.S_ITEM_CODE;
-                    }
-                }
-                if (workInfo != null)
-                {
-                    itemCode = workInfo.S_ItemCode;
-                }
                 var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault();
                 if(areaInfo != null)
                 {
@@ -782,12 +968,17 @@
                                 var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
                                 if(cntrInfo != null)
                                 {
+                                    string endItemCode = "";
                                     var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
                                     if(itemInfo != null && itemInfo.S_ITEM_CODE == itemCode)
                                     {
+                                        endItemCode = itemInfo.S_ITEM_CODE;
+                                    }
+                                    if(endItemCode == itemCode)
+                                    {
                                         //鍒ゆ柇褰撳墠鎺掓湁鏃犻攣
                                         var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
-                                        if(lockInfo == null)
+                                        if (lockInfo == null)
                                         {
                                             result = a;
                                             break;
@@ -832,7 +1023,7 @@
         /// <param name="taskName"></param>
         /// <returns></returns>
         /// <exception cref="NotImplementedException"></exception>
-        internal static Location BCPFullOut(SqlSugarClient db, string taskName, string S_START_LOC)
+        internal static Location BCPFullOut(SqlSugarClient db, string taskName, string itemCode)
         {
             Location result = null;
 
@@ -852,11 +1043,11 @@
                 }
                 if (result == null)
                 {
-                    result = TaskProcess.BCPInOrOut(db, true, S_START_LOC, "鐡跺澂鍗充骇鍗崇敤B");
+                    result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇鍗崇敤B", itemCode);
                 }
                 if(result == null)
                 {
-                    result = TaskProcess.BCPInOrOut(db, true, S_START_LOC,"鐡跺澂搴撳尯");
+                    result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", itemCode);
                 }
 
             }
@@ -876,7 +1067,7 @@
                 }
                 if (result == null)
                 {
-                    result = TaskProcess.BCPInOrOut(db, true, S_START_LOC, "鐡跺澂搴撳尯");
+                    result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", itemCode);
                 }
             }
             return result;
@@ -909,5 +1100,546 @@
             }
             return result;
         }
+
+        /// <summary>
+        /// 鍗婃垚鍝佺Щ搴�+        /// </summary>
+        /// <param name="action">true - 宸ュ崟寮�惎 false - 宸ュ崟鍏抽棴</param>
+        /// <param name="machine">璁惧</param>
+        internal static void BCPYiKu(bool action, string machine)
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            Location startLoc = null;
+            Location endLoc = null;
+            if (action)
+            {
+                if(machine == "鐡跺澂缈绘枟鏈�)
+                {
+                    //鐡跺澂缈绘枟鏈�+                    //寮�惎锛屽垽鏂伐鍗曠被鍨嬶紝鏍规嵁宸ュ崟绫诲瀷琛ュ厖瀵瑰簲鐨勫簱鍖�鍗充骇鍗崇敤涓嶈ˉ鍏�+                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault();
+                    if (areaInfo != null)
+                    {
+                        var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "鍐滃か鏋楄姖-鐡舵壒缈绘枟鏈� && a.S_WorkState == "鎵ц涓�).First();
+                        if (workInfo.S_UsingNow == "N")
+                        {
+                            startLoc = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯", workInfo.S_ItemCode);
+                            endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First();
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info("鐡跺澂闈炲嵆浜у嵆鐢ㄦ湭閰嶇疆");
+                    }
+                        
+                }
+                if (machine == "鐡跺澂娉ㄥ鏈�)
+                {
+                    //寮�惎锛屾煡璇�鐡跺澂绌烘墭 鏄惁绌烘墭鏁伴噺澶т簬3鎵橈紝濡傛灉涓嶅ぇ浜庯紝鍒欒ˉ绌烘墭
+                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂绌烘墭" && a.enable == 1).FirstOrDefault();
+                    if(areaInfo != null)
+                    {
+                        var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).ToList();
+                        if(locList.Count > 2)
+                        {
+                            LogHelper.Info("鐡跺澂绌烘墭 琛ョ┖鎵�);
+                            startLoc = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯","");
+                            endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First();
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info("鐡跺澂绌烘墭鏈厤缃�);
+                    }
+
+                }
+                if (machine == "鐡剁洊缈绘枟鏈�)
+                {
+                    //寮�惎锛屾煡璇�鐡剁洊闈炴�浜ф�鐢�鐗╂枡鏄惁婊★紝涓嶆弧鍒欒ˉ鍏呯墿鏂�+                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault();
+                    if (areaInfo != null)
+                    {
+                        var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).First();
+                        if(locInfo != null)
+                        {
+                            LogHelper.Info("鐡剁洊闈炲嵆浜у嵆鐢�琛ユ弧鎵�);
+                            var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "鍐滃か鏋楄姖-鐡剁洊缈绘枟鏈� && a.S_WorkState == "鎵ц涓�).First();
+                            startLoc = TaskProcess.BCPInOrOut(db, false, "鐡剁洊搴撳尯", workInfo.S_ItemCode);
+                            endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First();
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info("鐡剁洊闈炲嵆浜у嵆鐢ㄦ湭閰嶇疆");
+                    }
+                }
+            }
+            else
+            {
+                if (machine == "鐡跺澂缈绘枟鏈�)
+                {
+                    //鍏抽棴锛屾煡璇�鐡跺澂闈炲嵆浜у嵆鐢�鐡跺澂鍗充骇鍗崇敤A 鐡跺澂鍗充骇鍗崇敤B 鏄惁鏈夌墿鏂欙紝鏈夊垯鍏ュ簱
+                    var areaList = Settings.areaInfos.Where(a => (a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� || a.areaName == "鐡跺澂鍗充骇鍗崇敤A") && a.enable == 1).ToList();
+                    if (areaList.Count > 0)
+                    {
+                        foreach(var a in areaList)
+                        {
+                            startLoc = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.areaCode && b.N_CURRENT_NUM > 0 && b.S_LOCK_STATE == "鏃�).Includes(b => b.LocCntrRel).First();
+                            if (startLoc != null) break;
+                        }
+                    }
+                    if (startLoc == null)
+                    {
+                        var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤B" && a.enable == 1).FirstOrDefault();
+                        if(areaInfo != null)
+                        {
+                            var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
+                            if(locInfo.Count > 0)
+                            {
+                                foreach(var a in locInfo)
+                                {
+                                    int row = a.N_ROW;
+                                    var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
+                                    if(lockInfo == null)
+                                    {
+                                        startLoc = a;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    if(startLoc != null)
+                    {
+                        if (startLoc.LocCntrRel != null)
+                        {
+                            var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First();
+                            if (itemInfo != null)
+                            {
+                                endLoc = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", itemInfo.S_ITEM_CODE);
+                            }
+                        }
+                    }
+                }
+                if (machine == "鐡跺澂娉ㄥ鏈�)
+                {
+                    //鍏抽棴锛屾煡璇�鐡跺澂绌烘墭 鏄惁鏈夌┖鎵橈紝鏈夊垯鍏ュ簱
+                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂绌烘墭" && a.enable == 1).FirstOrDefault();
+                    if (areaInfo != null)
+                    {
+                        startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First();
+                        if(startLoc != null)
+                        {
+                            endLoc = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", "");
+                        }
+                    }
+                }
+                if (machine == "鐡剁洊缈绘枟鏈�)
+                {
+                    //鍏抽棴锛�1銆佹煡璇�鐡剁洊绌烘墭 鏄惁杩樻湁鎵樼洏锛屾湁鍒欏叆搴� 2銆佹煡璇㈢摱鐩栭潪鍗充骇鍗崇敤 鏄惁鏈夌墿鏂欙紝 鏈夊垯鍏ュ簱
+                    //鍏抽棴锛屾煡璇�鐡跺澂绌烘墭 鏄惁鏈夌┖鎵橈紝鏈夊垯鍏ュ簱
+
+                    //鏌ヨ绌烘墭搴撳尯
+                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊绌烘墭" && a.enable == 1).FirstOrDefault();
+                    if (areaInfo != null)
+                    {
+                        startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First();
+                        if (startLoc != null)
+                        {
+                            endLoc = TaskProcess.BCPInOrOut(db, true, "鐡剁洊搴撳尯", "");
+                        }
+                    }
+
+                    //鏌ヨ婊℃墭搴撳尯
+                    if(startLoc == null)
+                    {
+                        areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault();
+                        if (areaInfo != null)
+                        {
+                            startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First();
+                            if (startLoc != null)
+                            {
+                                if(startLoc.LocCntrRel != null)
+                                {
+                                    var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First();
+                                    if(itemInfo != null)
+                                    {
+                                        endLoc = TaskProcess.BCPInOrOut(db, true, "鐡剁洊搴撳尯", itemInfo.S_ITEM_CODE);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (startLoc != null && endLoc != null)
+            {
+                WMSHelper.CreateOpTask(startLoc.S_CODE, endLoc.S_CODE, "鍏ュ簱", "鍗婃垚鍝佺Щ搴�, startLoc.LocCntrRel.S_CNTR_CODE);
+            }
+        }
+
+        /// <summary>
+        /// 浠诲姟淇℃伅鎺ュ彛--姹夊拰浠诲姟姣忎釜鐘舵�杩涜瀹炴椂涓婁紶(鍖呮嫭浠诲姟鍒涘缓鏃讹紝涓婃姤 8)
+        /// </summary>
+        /// <param name="wmsTask"></param>
+        internal static void GeneralInterFaceFunc(WCSTask wmsTask, string taskStatus, string forkliftNo = "")
+        {
+            string msg = "";
+            var req = new SimpleResult();
+            var db = new SqlHelper<object>().GetInstance();
+            ///鍚屼竴鏉′换鍔″悓绉嶇姸鎬佸彧涓婃姤涓�
+            ///鏌ヨ浠诲姟鍔ㄤ綔琛紝鏈変换鍔$浉鍚屽苟涓斾换鍔$姸鎬佺浉鍚岀殑锛屽氨涓嶄笂鎶ワ紙浠诲姟鐘舵�涓�杩樿鏌ヨ杞﹀彿鏄惁瀛樺湪锛�+            bool flage = false;
+            var no = wmsTask.S_CODE;
+            var code = int.Parse(taskStatus);
+            if (taskStatus == "1")
+            {
+                if (forkliftNo != "0")
+                {
+                    if (db.Queryable<TaskAction>().Count(a => a.S_TASK_CODE.Trim() == no.Trim() && a.N_ACTION_CODE == code) == 2)
+                    {
+                        wmsTask.S_EQ_NO = forkliftNo;
+                        flage = true;
+                    }
+                }
+            }
+            else
+            {
+                flage = true;
+            }
+
+            if (flage)
+            {
+                if (WCSHelper.CheckActionRecordExist(wmsTask.S_CODE, 4) && taskStatus == "7") taskStatus = "2";
+                try
+                {
+                    //鑾峰彇涓婃姤鎺ュ彛鐨刄RL
+                    var url = Settings.thirdPartyUrls.Where(a => a.UrlNo == "1" && a.enable == 1).FirstOrDefault();
+                    LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},鑾峰彇URL锛歿url}", "ThirdSystemLog");
+                    //浠诲姟绫诲瀷鏁版嵁澶勭悊
+                    string taskType = ""; 
+                    var taskTypeInfo = db.Queryable<TaskTypeConvTable>().Where(a => a.taskTypeName == wmsTask.S_TYPE).First();
+                    if (taskTypeInfo != null) taskType = taskTypeInfo.taskType;
+                    LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},浠诲姟绫诲瀷鏁版嵁澶勭悊锛歿taskType}", "ThirdSystemLog");
+
+                    //鎵樼洏鐗╂枡鏁版嵁澶勭悊
+                    List<string> cntrList = new List<string>(wmsTask.S_CNTR_CODE.Split(','));//鑾峰彇鎵樼洏鏁版嵁
+                    string itemCode = "";//鐗╂枡缂栫爜
+                    itemCode = GeneralInterFaceGetItemCodeFunc(wmsTask, db, cntrList, itemCode);
+                    LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},鐗╂枡缂栫爜锛歿itemCode}", "ThirdSystemLog");
+                    List<asnReferenceDModel> asnReferenceList = new List<asnReferenceDModel> { };//鎵樼爜鏁扮粍
+                    GeneralInterFaceGetTrayCodeFunc(wmsTask, db, asnReferenceList, cntrList);
+                    LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},鑾峰彇鎵樼洏鏁版嵁锛歿JsonConvert.SerializeObject(asnReferenceList)}", "ThirdSystemLog");
+
+                    //AGV璁惧淇℃伅澶勭悊
+                    string equipmentCode = "";
+                    string orgCode = "";
+                    string orgName = "";
+                    string proxyInterfaceCode = "0050";
+                    GeneralInterFaceGetAgvDeviceInfoFunc(wmsTask, db, ref equipmentCode, ref orgCode, ref orgName, ref proxyInterfaceCode);
+                    LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},equipmentCode锛歿equipmentCode},orgCode锛歿orgCode},orgName:{orgName},proxyInterfaceCode:{proxyInterfaceCode}", "ThirdSystemLog");
+
+                    LogHelper.Info($"wmstask.t_start_time锛歿wmsTask.T_START_TIME}");
+                    if (DateTime.MinValue == wmsTask.T_START_TIME)
+                    {
+                        wmsTask.T_START_TIME = null;
+                    }
+
+                    DateTime dateTime = taskStatus == "1" ? Convert.ToDateTime(wmsTask.T_START_TIME).AddHours(-8) : taskStatus == "2" || taskStatus == "7" ? Convert.ToDateTime(wmsTask.T_END_TIME).AddHours(-8) : taskStatus == "8" ? Convert.ToDateTime(wmsTask.T_CREATE).AddHours(-8) : DateTime.UtcNow;
+                    string createTime = GetTimeStamp(wmsTask.T_CREATE.AddHours(-8), 1, 2);
+                    string startTime = "";
+                    //鍦–#涓紝浣跨敤DateTimeOffset.UtcNow.ToUnixTimeSeconds()鏂规硶鑾峰彇Unix鏃堕棿鎴虫椂锛屽彲鑳戒細澶氬嚭涓�釜姣銆傝繖鏄洜涓篣nix鏃堕棿鎴虫槸浠ョ涓哄崟浣嶇殑锛岃�DateTimeOffset.UtcNow杩斿洖鐨勬槸UTC鏃堕棿锛屽叾绮惧害涓�00绾崇銆�+                    if (wmsTask.S_WORK_MODE != "agv" && !string.IsNullOrEmpty(wmsTask.S_WORK_MODE)) startTime = wmsTask.S_WORK_MODE;
+                    else
+                    {
+                        startTime = wmsTask.T_START_TIME == null ? null : GetTimeStamp(Convert.ToDateTime(wmsTask.T_START_TIME).AddHours(-8), 1, 2);
+                        if (startTime != null)
+                        {
+                            wmsTask.S_WORK_MODE = startTime;
+                            db.Updateable(wmsTask).UpdateColumns(a => new { a.S_WORK_MODE }).ExecuteCommand();
+                        }
+                    }
+
+                    string endTime = wmsTask.T_END_TIME == null ? null : GetTimeStamp(Convert.ToDateTime(wmsTask.T_END_TIME).AddHours(-8), 1, 2);
+                    string businessTime = taskStatus == "1" ? startTime : taskStatus == "2" || taskStatus == "7" ? endTime : taskStatus == "8" ? createTime : GetTimeStamp(dateTime, 1, 2);
+                    string dt = wmsTask.T_START_TIME == null ? null : Convert.ToDateTime(wmsTask.T_START_TIME).AddHours(-8).ToString();
+                    string mill = wmsTask.T_START_TIME == null ? null : Convert.ToDateTime(wmsTask.T_START_TIME).AddHours(-8).Millisecond.ToString();
+                    LogHelper.Info($"GeneralInterFaceFunc锛氫换鍔″彿锛歿wmsTask.S_CODE},浠诲姟鐘舵�锛歿taskStatus},浠诲姟寮�鏃堕棿锛歿wmsTask.T_START_TIME}锛屼换鍔¤浆鎹㈠悗鏃堕棿锛歿dt}锛屼换鍔″彿姣鏃堕棿锛歿mill}锛岃浆鎹㈠悗鏃堕棿锛歿startTime}", "ThirdSystemLog");
+
+                    string sendMsg = JsonConvert.SerializeObject(new
+                    {
+                        taskCode = wmsTask.S_CODE,//浠诲姟缂栫爜
+                        taskStatus = taskStatus,//浠诲姟鐘舵�-浠诲姟鍒涘缓鎴愬姛浼犺緭 8
+                        taskType = taskType,//浠诲姟绫诲瀷-闇�鏍规嵁 閰嶇疆琛ㄦ暟鎹繘琛岃浆鎹紝杞崲涓篗ES鐨勪换鍔$被鍨�+                        createTime = createTime,//闇�浆鎹负 鏃堕棿鎴�   wmsTask.T_CREATE
+                        startTime = startTime,//闇�浆鎹负 鏃堕棿鎴�wmsTask.T_START_TIME
+                        endTime = endTime,//闇�浆鎹负 鏃堕棿鎴�wmsTask.T_END_TIME
+                        businessTime = businessTime,//褰撳墠浠诲姟鏃堕棿-闇�浆鎹负 鏃堕棿鎴�  DateTime.Now
+                        startAddress = wmsTask.S_START_LOC,//璧风偣
+                        endAddress = wmsTask.S_END_LOC,//缁堢偣
+                        equipmentNo = wmsTask.S_EQ_NO,//杞﹁締缂栧彿
+                        equipmentCode = equipmentCode,//杞﹁締閾墝-闇�鏍规嵁 閰嶇疆琛ㄦ暟鎹紝閫氳繃 杞﹁締缂栧彿浠ュ強宸ュ巶缂栫爜 鏌ヨ瀵瑰簲杞﹁締閾墝
+                        orgCode = Settings.FactoryCode,//宸ュ巶缂栫爜
+                        orgName = Settings.FactoryName,//宸ュ巶鍚嶇О
+                        sku = itemCode,//鐗╂枡缂栫爜
+                        asnReferenceDList = asnReferenceList,//鎵樼爜鏁扮粍 姝ゆ鍙夎溅鍙夌殑鎵樼洏鍠风爜锛�涓�鍙夎締杞︼紝鏈変袱涓紪鐮�  浜х嚎涓嬬嚎涓旈潪鏃犵爜妯″紡鏃朵紶杈�+                        appliactionId = "MOBOX"
+                        //proxyInterfaceCode = proxyInterfaceCode //鎺ュ彛鍞竴鏍囪瘑鐮�鍥哄畾鍊硷細0050
+                    });
+                    //http://yst-open-zuul-qa.idc.yst.com.cn/proxy/v1/
+                    req = FuLeWebPost(sendMsg, "generalInterface", url.Url, true);//YKRWSD AreaRowLockState
+
+                    if (req != null && req.success) msg = $"GeneralInterFaceFunc:杩斿洖浠诲姟鐘舵�鎴愬姛:{JsonConvert.SerializeObject(req)}锛�;
+                    else msg = $"GeneralInterFaceFunc:杩斿洖浠诲姟鐘舵�澶辫触:{JsonConvert.SerializeObject(req)}锛�;
+                }
+                catch (Exception ex)
+                {
+                    msg = $"GeneralInterFaceFunc Error:TaskInfo:{JsonConvert.SerializeObject(wmsTask)},TaskState:{taskStatus},ErrorMsg:{ex.Message}";
+                }
+            }
+
+            LogHelper.Info(msg, "ThirdSystemLog");
+        }
+
+        /// <summary>
+        /// FuLeWebPost
+        /// </summary>
+        /// <param name="param">鍙戦�鍐呭</param>
+        /// <param name="postName">鎺ュ彛鍚嶇О</param>
+        /// <param name="Par1">鎵╁睍鍙傛暟</param>
+        /// <returns></returns>
+        public static SimpleResult FuLeWebPost(string param, string postName, string Par1 = "", bool extend = false)
+        {
+            string msg = ""; string feedback = "";
+            SimpleResult result = new SimpleResult();
+            try
+            {
+                string webAPIUrl = "";
+                var httpVerify = new Settings.httpApiVerify();
+                if (extend) httpVerify = Settings.httpApiVerifys.Where(a => a.VerifyNo == "2" && a.Project == Settings.ProjectName && a.enable == 1).FirstOrDefault();
+                else httpVerify = Settings.httpApiVerifys.Where(a => a.VerifyNo == "1" && a.Project == Settings.ProjectName && a.enable == 1).FirstOrDefault();
+                if (httpVerify != null)
+                {
+                    //閲囩敤鎺ュ彛鍔犲瘑鏂瑰紡杩涜浼犺緭
+                    webAPIUrl = $"{Par1}{postName}";
+                    string TokenMsg = "";
+                    string timestamp = DateTime.Now.ToString("s").Replace("T", " ");
+                    TokenMsg = httpVerify.Extend[0] + "from" + httpVerify.Extend[1] + "timestamp" + timestamp;
+                    LogHelper.Info($"銆怓uLe Post {postName}銆戯細鍔犲瘑鍓嶆槑鏂囷細{TokenMsg}", "ThirdSystemLog");
+                    string TokenMsgEncrypt = CryptoDecryptHelper.GetMd5FromString(TokenMsg);
+                    LogHelper.Info($"銆怓uLe Post {postName}銆戯細鍔犲瘑鍚庡瘑鏂囷細{TokenMsgEncrypt}", "ThirdSystemLog");
+                    feedback = httpHelper.WebPost(webAPIUrl, param, "application/json", TokenMsgEncrypt, timestamp,"", extend);
+                }
+                else
+                {
+                    //鏍囧噯浼犺緭鏂瑰紡浼犺緭
+                    webAPIUrl = $"{Par1}{postName}" + "&warehouseId=FLUXWMSDB";
+                    feedback = httpHelper.WebPost(webAPIUrl, param);
+                }
+
+                if (!string.IsNullOrEmpty(feedback))
+                {
+                    LogHelper.Info(JsonConvert.SerializeObject(feedback));
+                    msg = $"銆怓uLe Post {postName}銆慦ebUrl={webAPIUrl};param={param} ;return={feedback}";
+                    var req = JsonConvert.DeserializeObject<SimpleResult>(feedback);
+                    if (req.success)
+                    {
+                        result.success = true;
+                        msg = $"銆怓uLe Post {postName}銆憇uccess锛�WebUrl={webAPIUrl};param={param};return={feedback}";
+                    }
+                    else
+                    {
+                        if (!string.IsNullOrEmpty(req.errMsg)) msg = $"銆怓uLe Post {postName}銆慺ail锛乪rr={req.errMsg};WebUrl={webAPIUrl} ;param={param};return={feedback}";
+                        else msg = $"銆怓uLe Post {postName}銆慺ail锛乪rr={req.message};WebUrl={webAPIUrl} ;param={param};return={feedback}";
+                    }
+                }
+                else
+                {
+                    string errMsg = "can't find the address";
+                    msg = $"銆怓uLe Post {postName}銆慺ail锛乪rr={errMsg};WebUrl={webAPIUrl} ;param={param}";
+                }
+                var db = new SqlHelper<object>().GetInstance();
+                var RepeatUrl = db.Queryable<HttpRepeatSend>().Where(a => a.SendMsg == param && a.UrlName == postName && a.Url == Par1).First();
+                if (result.success)
+                {
+                    if (RepeatUrl != null) db.Deleteable<HttpRepeatSend>().Where(a => a.SendMsg == param && a.UrlName == postName && a.Url == Par1).ExecuteCommand();
+                }
+                else
+                {
+                    if (RepeatUrl == null)
+                    {
+                        var RepeatInfo = new HttpRepeatSend()
+                        {
+                            SendMsg = param,
+                            UrlName = postName,
+                            Url = Par1,
+                            SendNum = 5
+                        };
+                        db.Insertable(RepeatInfo).ExecuteCommand();
+                    }
+                    else
+                    {
+                        if (RepeatUrl.SendNum == 1) db.Deleteable<HttpRepeatSend>().Where(a => a.SendMsg == param && a.UrlName == postName && a.Url == Par1).ExecuteCommand();
+                        else
+                        {
+                            RepeatUrl.SendNum = RepeatUrl.SendNum - 1;
+                            db.Updateable(RepeatUrl).UpdateColumns(a => new { a.SendNum }).ExecuteCommand();
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                msg = $"銆怓uLe Post {postName}銆慺ail锛乪rr={ex.Message}";
+            }
+            LogHelper.Info(msg, "ThirdSystemLog");
+            return result;
+        }
+        /// <summary>
+        /// 鎺ュ彛鐘舵�鍥炴姤澶勭悊
+        /// </summary>
+        public class SimpleResult
+        {
+            public bool success { get; set; }
+            public int errCode { get; set; }
+            public string errMsg { get; set; } = "";
+
+            /// <summary>
+            /// 娣冲畨浜屾湡-鍝嶅簲鏁版嵁
+            /// </summary>
+            public Object data { get; set; }
+            /// <summary>
+            /// 娣冲畨浜屾湡-鍝嶅簲缂栫爜
+            /// </summary>
+            public string code { get; set; }
+            /// <summary>
+            /// 娣冲畨浜屾湡-鍝嶅簲淇℃伅
+            /// </summary>
+            public string message { get; set; }
+            /// <summary>
+            /// 娣冲畨浜屾湡-鍝嶅簲淇℃伅绫诲瀷
+            /// </summary>
+            public string messageType { get; set; }
+            /// <summary>
+            /// 娣冲畨浜屾湡-寮傚父
+            /// </summary>
+            public Exception exception { get; set; }
+        }
+
+        /// <summary>
+        /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇鏃堕棿鎴�+        /// </summary>
+        /// <param name="DataBitType">鏁版嵁浣嶆暟锛氬�锛�2|64  鍚箟锛�2浣峾64浣�/param>
+        /// <param name="TimeType">鑾峰彇鏃堕棿绫诲瀷锛氬�锛�|2   鍚箟锛�-绉掔骇   2-姣绾�/param>
+        /// <param name="TimeUtcType">鑾峰彇鏃堕棿Utc绫诲瀷锛氬�锛�|2   鍚箟锛�-鏈湴鏃堕棿   2-Utc鏃堕棿</param>
+        /// <returns></returns>
+        public static string GetTimeStamp(DateTime dateTime, int DataBitType, int TimeType)
+        {
+            string timeStamp = "";
+
+            //鏃堕棿鎴虫墦鍗�+            TimeSpan ts = dateTime - new DateTime(1970, 1, 1, 0, 0, 0, 0);//鏃堕棿鎴宠幏鍙�+            double tsTime = TimeType == 1 ? ts.TotalSeconds : ts.TotalMilliseconds;//绉掔骇|姣绾ф椂闂磋幏鍙�+
+            string TimeTypeInfo = TimeType == 1 ? "绉掔骇" : "姣绾�;
+            timeStamp = DataBitType == 32 ? Convert.ToInt32(tsTime).ToString() : Convert.ToInt64(tsTime).ToString();
+
+            //double result = 0;
+            //result = DataBitType == 32 ? Convert.ToInt32(tsTime) : Convert.ToInt64(tsTime);
+
+            return timeStamp;
+        }
+
+        /// <summary>
+        /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇AGV璁惧淇℃伅鏁版嵁
+        /// </summary>
+        /// <param name="wmsTask"></param>
+        /// <param name="db"></param>
+        /// <param name="equipmentCode"></param>
+        /// <param name="orgCode"></param>
+        /// <param name="orgName"></param>
+        /// <param name="proxyInterfaceCode"></param>
+        private static void GeneralInterFaceGetAgvDeviceInfoFunc(WCSTask wmsTask, SqlSugarClient db, ref string equipmentCode, ref string orgCode, ref string orgName, ref string proxyInterfaceCode)
+        {
+            if (!string.IsNullOrEmpty(wmsTask.S_EQ_NO))
+            {
+                var agvDeviceInfo = db.Queryable<AGVDeviceDataTable>().Where(a => a.equipmentNo == wmsTask.S_EQ_NO && a.orgCode == Settings.FactoryCode).First();
+                if (agvDeviceInfo != null)
+                {
+                    equipmentCode = agvDeviceInfo.equipmentCode;
+                    orgCode = agvDeviceInfo.orgCode;
+                    orgName = agvDeviceInfo.orgName;
+                    proxyInterfaceCode = agvDeviceInfo.proxyInterfaceCode;
+                }
+            }
+        }
+
+        /// <summary>
+        /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇鎵樼洏鏁版嵁
+        /// </summary>
+        /// <param name="wmsTask"></param>
+        private static void GeneralInterFaceGetTrayCodeFunc(WCSTask wmsTask, SqlSugarClient db, List<asnReferenceDModel> asnReferenceList, List<string> cntrList)
+        {
+            //string SrcNo = wmsTask.S_SRC_NO?.Trim();
+            //
+            ////鏍规嵁浠诲姟涓瓨鏀剧殑宸ュ崟鍙凤紝鑾峰彇宸ュ崟绫诲瀷--鍥犱负娣冲畨 婊℃墭涓嬬嚎浠诲姟鍖呭惈 涓嬬嚎 鍊硷紝鍥犳澶氬垽鏂竴姝ワ紝鍑忓皯宸ュ崟琛ㄧ殑鏌ヨ
+            //if (!string.IsNullOrEmpty(SrcNo) && wmsTask.S_TYPE.Contains("涓嬬嚎"))
+            //{
+            //    var workInfo = db.Queryable<LinZhiWorkOrder>().Where(a => a.S_WorkNo == SrcNo).First();
+            //    if (workInfo != null)
+            //    {
+            //        if (workInfo.S_ORDER_TYPE.Trim() != "鏃犵爜鍏ュ簱")
+            //        {
+            //
+            //            if (cntrList.Count > 0)
+            //            {
+            //                cntrList.ForEach(a =>
+            //                {
+            //                    if (!string.IsNullOrEmpty(a))
+            //                        asnReferenceList.Add(new asnReferenceDModel { asnReferenceD = a });
+            //                });
+            //            }
+            //        }
+            //    }
+            //}
+        }
+
+        public class asnReferenceDModel
+        {
+            public string asnReferenceD { get; set; }
+        }
+
+        /// <summary>
+        /// 浠诲姟淇℃伅鎺ュ彛--鑾峰彇鐗╂枡缂栫爜
+        /// </summary>
+        /// <param name="wmsTask"></param>
+        private static string GeneralInterFaceGetItemCodeFunc(WCSTask wmsTask, SqlSugarClient db, List<string> cntrList, string itemCode)
+        {
+            if (cntrList.Count > 0)
+            {
+                //string SrcNo = wmsTask.S_SRC_NO?.Trim();
+                //// 鍐滃か缃戠涓嬪彂鐨勫伐鍗曪紝鐗╂枡鑾峰彇鏂瑰紡
+                //if (!string.IsNullOrEmpty(SrcNo) && wmsTask.S_TYPE.Contains("涓嬬嚎"))
+                //{
+                //    var workInfo = db.Queryable<LinZhiWorkOrder>().Where(a => a.S_WorkNo == SrcNo).First();
+                //    if (workInfo != null) itemCode = workInfo.S_ItemCode;
+                //}
+                //// 鍏朵粬鐨勪汉宸ュ缓绔嬬殑宸ュ崟锛岀墿鏂欒幏鍙栨柟寮�+                //else
+                //{
+                //    var cntrItemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrList[0]).First();
+                //    if (cntrItemInfo != null)
+                //    {
+                //        //姝ゅ鏌ヨ 鐗╂枡琛紝浠呴檺娣冲畨鑾峰彇MES鐗╂枡浣跨敤锛屽叾浠栧伐鍘傚彲鑷娉ㄩ噴锛涘洜娣冲畨鍏ュ簱鐗╂枡鏄娇鐢�鐗╂枡鍚嶇О+鐗╂枡灞傛暟 鎷兼帴鑰屾垚锛屽洜姝ら渶瑕�閫氳繃鐗╂枡琛ㄨ浆鎹负 MES 鐨勭墿鏂欑紪鐮�+                //        //var itemInfo = db.Queryable<ItemRel>().Where(a => a.S_ITEM_NAME == cntrItemInfo.S_ITEM_CODE).First();
+                //        //if (itemInfo != null) itemCode = itemInfo.S_ITEM_CODE;
+                //        itemCode = cntrItemInfo.S_ITEM_CODE;
+                //    }
+                //}
+            }
+
+            return itemCode;
+        }
+
     }
 }
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/util/CryptoDecryptHelper.cs b/HH.WCS.Mobox3.NongFuLinZhi/util/CryptoDecryptHelper.cs
new file mode 100644
index 0000000..6143f42
--- /dev/null
+++ b/HH.WCS.Mobox3.NongFuLinZhi/util/CryptoDecryptHelper.cs
@@ -0,0 +1,214 @@
+锘縰sing Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.WCS.Mobox3.NFLZ.util
+{
+    class CryptoDecryptHelper
+    {
+        public static void Test()
+        {
+            #region   鍚庡彴璋冪敤 浼佷笟寰俊鑷缓搴旂敤绋嬪簭 瀹炵幇 瀹炴椂鎶ヨ鍔熻兘
+            //App:tUI9CvF7d3b7_j8njXEQOdp4TGn_aPuALtNYuh9SGb8  閫氳褰�BIrQFYaP6E5ZBYkRHUjeFU2IkzCqsokIM5Bct74U9ec
+            //bool result = WeiXin.Init(1000002, "ww0b0c7633edccae9c", "tUI9CvF7d3b7_j8njXEQOdp4TGn_aPuALtNYuh9SGb8");
+            //if (result)
+            //{
+            //    WeiXin.SendMessageToUser("閮戝宥�,"111111111");
+            //}
+            #endregion
+
+            #region   AES+MD5 鍔犲瘑瑙e瘑鍔熻兘
+            //var str = JsonConvert.SerializeObject(new { platform = "111", actionType = 1, taskNo = "111111", reqTime = "2022-08-03 14:12:00" });
+            //var res = AESEncrypt(str, "de987awms8nfsspt22731o2ts0j833to");
+            //res = AESEncrypt(str, "de987awms8nfsspt22731o2ts0j833to",enmKeyBit.KeyBit128);
+            //res = AESEncrypt(str, "de987awms8nfsspt22731o2ts0j833to", enmKeyBit.KeyBit192);
+            //var req = AESDecrypt(res, "de987awms8nfsspt22731o2ts0j833to");
+            //string TokenMsg = "";
+            //var httpVerify = Settings.GetHttpApiVerifyList().Where(a => a.VerifyNo == "1" && a.Project == Settings.ProjectName && a.Enable == "1").FirstOrDefault();
+            //if (httpVerify != null) TokenMsg = httpVerify.Extend[0] + "from" + httpVerify.Extend[1] + "timestamp" + DateTime.Now.ToString().Replace("/","-");
+            //Console.WriteLine($"鍔犲瘑鍓嶆槑鏂囷細{TokenMsg}");
+            //string TokenMsgEncrypt = GetMd5FromString(TokenMsg);
+            //Console.WriteLine($"鍔犲瘑鍚庡瘑鏂�锛歿TokenMsgEncrypt}");
+            //TokenMsgEncrypt = GetMd5Hash(TokenMsg);
+            //Console.WriteLine($"鍔犲瘑鍚庡瘑鏂�锛歿TokenMsgEncrypt}");
+            //TokenMsgEncrypt = MD5Encrypt16(TokenMsg);
+            //Console.WriteLine($"鍔犲瘑鍚庡瘑鏂�6锛歿TokenMsgEncrypt}");
+            //TokenMsgEncrypt = MD5Encrypt32(TokenMsg);
+            //Console.WriteLine($"鍔犲瘑鍚庡瘑鏂�2锛歿TokenMsgEncrypt}");
+            //TokenMsgEncrypt = MD5Encrypt64(TokenMsg);
+            //Console.WriteLine($"鍔犲瘑鍚庡瘑鏂�4锛歿TokenMsgEncrypt}");
+            #endregion
+        }
+
+        public enum enmKeyBit
+        {
+            KeyBit128 = 128,
+            KeyBit192 = 192,
+            KeyBit256 = 256,
+        }
+        /// <summary>
+        /// AES ECB妯″紡 鍔犲瘑
+        /// </summary>
+        /// <param name="data">鏄庢枃</param>
+        /// <param name="key">瀵嗛挜</param>
+        /// <param name="keyBit">瀵嗛挜浣嶆暟</param>
+        /// <returns></returns>
+        public static string AESEncrypt(String data, String key, enmKeyBit keyBit = enmKeyBit.KeyBit256)
+        {
+            if (string.IsNullOrEmpty(data))
+            {
+                return string.Empty;
+            }
+
+            try
+            {
+                int intKeyBit = (int)keyBit;
+                RijndaelManaged aes = new RijndaelManaged();
+                byte[] bytsData = Encoding.UTF8.GetBytes(data);
+                byte[] bytsKey = new Byte[intKeyBit / 8];
+                Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bytsKey.Length)), bytsKey, bytsKey.Length);
+
+                aes.Mode = CipherMode.ECB;
+                aes.Padding = PaddingMode.PKCS7;
+                aes.KeySize = intKeyBit;
+                aes.Key = bytsKey;
+                //aes.IV = iv;
+                ICryptoTransform ctf = aes.CreateEncryptor();
+                byte[] bytsResult = ctf.TransformFinalBlock(bytsData, 0, bytsData.Length);
+
+                return Convert.ToBase64String(bytsResult);
+            }
+            catch
+            {
+                return string.Empty;
+            }
+        }
+        /// <summary>
+        /// AES ECB妯″紡 瑙e瘑
+        /// </summary>
+        /// <param name="data">瀵嗘枃</param>
+        /// <param name="key">瀵嗛挜</param>
+        /// <param name="keyBit">瀵嗛挜浣嶆暟</param>
+        /// <returns></returns>
+        public static string AESDecrypt(String data, String key, enmKeyBit keyBit = enmKeyBit.KeyBit256)
+        {
+            if (string.IsNullOrEmpty(data))
+            {
+                return string.Empty;
+            }
+            try
+            {
+                int intKeyBit = (int)keyBit;
+                RijndaelManaged aes = new RijndaelManaged();
+                byte[] bytsData = Convert.FromBase64String(data);
+                byte[] bytsKey = new Byte[intKeyBit / 8];
+                Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bytsKey.Length)), bytsKey, bytsKey.Length);
+
+                aes.Mode = CipherMode.ECB;
+                aes.Padding = PaddingMode.PKCS7;
+                aes.KeySize = intKeyBit;
+                aes.Key = bytsKey;
+                //aes.IV = iv;
+
+                ICryptoTransform ctf = aes.CreateDecryptor();
+                byte[] bytsResult = ctf.TransformFinalBlock(bytsData, 0, bytsData.Length);
+
+                return UTF8Encoding.UTF8.GetString(bytsResult);
+            }
+            catch
+            {
+                return string.Empty;
+            }
+        }
+
+        /// <summary>
+        /// MD5鍔犲瘑
+        /// </summary>
+        /// <param name="sInput"></param>
+        /// <returns></returns>
+        public static string GetMd5FromString(string sInput)
+        {
+            var lstData = Encoding.GetEncoding("utf-8").GetBytes(sInput);
+            var lstHash = new MD5CryptoServiceProvider().ComputeHash(lstData);
+            var result = new StringBuilder(32);
+            for (int i = 0; i < lstHash.Length; i++)
+            {
+                result.Append(lstHash[i].ToString("x2").ToUpper());
+            }
+            return result.ToString();
+        }
+        /// <summary>
+        /// MD5鍔犲瘑鏂瑰紡浜�+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        static string GetMd5Hash(string input)
+        {
+            using (MD5 md5 = MD5.Create())
+            {
+                byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
+                StringBuilder sb = new StringBuilder();
+                for (int i = 0; i < data.Length; i++)
+                {
+                    sb.Append(data[i].ToString("x2"));
+                }
+                return sb.ToString();
+            }
+        }
+
+        /// <summary>
+        /// 16浣峂D5鍔犲瘑
+        /// </summary>
+        /// <param name="password"></param>
+        /// <returns></returns>
+        public static string MD5Encrypt16(string password)
+        {
+            var md5 = new MD5CryptoServiceProvider();
+            string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(password)), 4, 8);
+            t2 = t2.Replace("-", "");
+            return t2;
+        }
+
+        /// <summary>
+        /// 32浣峂D5鍔犲瘑
+        /// </summary>
+        /// <param name="password"></param>
+        /// <returns></returns>
+        public static string MD5Encrypt32(string password)
+        {
+            string cl = password;
+            string pwd = "";
+            MD5 md5 = MD5.Create(); //瀹炰緥鍖栦竴涓猰d5瀵瑰儚
+                                    // 鍔犲瘑鍚庢槸涓�釜瀛楄妭绫诲瀷鐨勬暟缁勶紝杩欓噷瑕佹敞鎰忕紪鐮乁TF8/Unicode绛夌殑閫夋嫨銆�+            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
+            // 閫氳繃浣跨敤寰幆锛屽皢瀛楄妭绫诲瀷鐨勬暟缁勮浆鎹负瀛楃涓诧紝姝ゅ瓧绗︿覆鏄父瑙勫瓧绗︽牸寮忓寲鎵�緱
+            for (int i = 0; i < s.Length; i++)
+            {
+                // 灏嗗緱鍒扮殑瀛楃涓蹭娇鐢ㄥ崄鍏繘鍒剁被鍨嬫牸寮忋�鏍煎紡鍚庣殑瀛楃鏄皬鍐欑殑瀛楁瘝锛屽鏋滀娇鐢ㄥぇ鍐欙紙X锛夊垯鏍煎紡鍚庣殑瀛楃鏄ぇ鍐欏瓧绗�
+                pwd = pwd + s[i].ToString("X");
+            }
+            return pwd;
+        }
+
+        /// <summary>
+        /// 64浣峂D5鍔犲瘑
+        /// </summary>
+        /// <param name="password"></param>
+        /// <returns></returns>
+        public static string MD5Encrypt64(string password)
+        {
+            string cl = password;
+            //string pwd = "";
+            MD5 md5 = MD5.Create(); //瀹炰緥鍖栦竴涓猰d5瀵瑰儚
+                                    // 鍔犲瘑鍚庢槸涓�釜瀛楄妭绫诲瀷鐨勬暟缁勶紝杩欓噷瑕佹敞鎰忕紪鐮乁TF8/Unicode绛夌殑閫夋嫨銆�+            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
+            return Convert.ToBase64String(s);
+        }
+    }
+}
+
+
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/util/HttpHelper.cs b/HH.WCS.Mobox3.NongFuLinZhi/util/HttpHelper.cs
index f36eebf..2d011a0 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/util/HttpHelper.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/util/HttpHelper.cs
@@ -4,20 +4,35 @@
 using System.Linq;
 using System.Net;
 using System.Text;
+using Newtonsoft.Json.Linq;
 
 namespace HH.WCS.Mobox3.NFLZ.util {
     public class HttpHelper {
-        public string WebPost(string url, string postData, string cotentType = "application/json",string AppKey="",string ReqTime="",string ReqVerify="") {
+        public string WebPost(string url, string postData, string cotentType = "application/json",string AppKey="",string ReqTime="",string ReqVerify="", bool Extend = false) {
             Console.WriteLine(url);
             WebRequest request = WebRequest.Create(url);
             request.Method = "POST";
 
-            if (!string.IsNullOrEmpty(AppKey) && !string.IsNullOrEmpty(ReqTime) && !string.IsNullOrEmpty(ReqVerify)) 
+            if (Settings.ProjectName == "鍐滃か鏋楄姖")
             {
-                request.Headers.Set("AppKey", AppKey);
-                request.Headers.Set("ReqTime", ReqTime);
-                request.Headers.Set("ReqVerify", ReqVerify);
+                if (!string.IsNullOrEmpty(AppKey) && (!string.IsNullOrEmpty(ReqTime)))
+                {
+                    request.Headers.Set("token", AppKey);//MD5鍔犲瘑鍚嶵oken鍊�+                    request.Headers.Set("from", "MOBOX");//鏉ユ簮绯荤粺鍙�+                    request.Headers.Set("timestamp", ReqTime);//鏃堕棿鎴�+                    if (Extend) request.Headers.Set("proxyInterfaceCode", Settings.OneSign);//MES浠诲姟鍥炴姤鎺ュ彛娣诲姞 鍞竴鏍囪瘑
+                }
             }
+            else
+            {
+                if (!string.IsNullOrEmpty(AppKey) && !string.IsNullOrEmpty(ReqTime) && !string.IsNullOrEmpty(ReqVerify))
+                {
+                    request.Headers.Set("AppKey", AppKey);
+                    request.Headers.Set("ReqTime", ReqTime);
+                    request.Headers.Set("ReqVerify", ReqVerify);
+                }
+            }
+            
             //string postData = JsonConvert.SerializeObject(data); ;
             byte[] byteArray = Encoding.UTF8.GetBytes(postData);
             request.ContentType = cotentType;
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/util/Settings.cs b/HH.WCS.Mobox3.NongFuLinZhi/util/Settings.cs
index d45f719..7ddc9dc 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/util/Settings.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/util/Settings.cs
@@ -2,6 +2,7 @@
 using Newtonsoft.Json.Linq;
 using System;
 using System.Collections.Generic;
+using static HH.WCS.Mobox3.NFLZ.util.Settings;
 
 namespace HH.WCS.Mobox3.NFLZ.util
 {
@@ -9,6 +10,10 @@
     {
         public static string HostToAgvServerUrl { get; set; }
         public static string HASeverUrl { get; set; }
+        public static string ProjectName { get; set; }
+        public static string FactoryCode { get; set; }
+        public static string FactoryName { get; set; }
+        public static string OneSign { get; set; }
         public static string AppKey { get; set; }
         public static string AppSecret { get; set; }
         public static string MoboxSeverUrl { get; set; }
@@ -16,7 +21,9 @@
         public static string SqlServer1 { get; set; }
         public static List<deviceInfo> deviceInfos { get; set; } = new List<deviceInfo>();
         public static List<areaInfo> areaInfos { get; set; } = new List<areaInfo>();
-        public static List<Tasktype> Tasktypes { get; set; } = new List<Tasktype>();
+        public static List<pPZSJSite> pPZSJSites { get; set; } = new List<pPZSJSite>();
+        public static List<thirdPartyUrl> thirdPartyUrls { get; set; } = new List<thirdPartyUrl>();
+        public static List<httpApiVerify> httpApiVerifys { get; set; } = new List<httpApiVerify>();
 
         public static int port { get; set; }
         public static string WHCode { get; set; }
@@ -40,9 +47,9 @@
                             {
                                 HostToAgvServerUrl = keyValue.Value.ToString();
                             }
-                            if (keyValue.Name == "Tasktype")
+                            if (keyValue.Name == "PPZSJSite")
                             {
-                                Tasktypes = JsonConvert.DeserializeObject<List<Tasktype>>(keyValue.Value.ToString());
+                                pPZSJSites = JsonConvert.DeserializeObject<List<pPZSJSite>>(keyValue.Value.ToString());
                             }
                             if (keyValue.Name == "HASeverUrl")
                             {
@@ -88,6 +95,14 @@
                             {
                                 areaInfos = JsonConvert.DeserializeObject<List<areaInfo>>(keyValue.Value.ToString());
                             }
+                            if (keyValue.Name == "ThirdPartyUrl")
+                            {
+                                thirdPartyUrls = JsonConvert.DeserializeObject<List<thirdPartyUrl>>(keyValue.Value.ToString());
+                            }
+                            if (keyValue.Name == "HttpApiVerify")
+                            {
+                                httpApiVerifys = JsonConvert.DeserializeObject<List<httpApiVerify>>(keyValue.Value.ToString());
+                            }
                         }
                     }
                 }
@@ -100,15 +115,26 @@
 
         }
 
-        public class Tasktype
+        public class httpApiVerify
         {
-            public string StartArea { get; set; }
-            public string EndArea { get; set; }
-            public string TaskType { get; set; }
+            public string VerifyNo { get; set; }
+            public string Project { get; set; }
+            public string[] Extend { get; set; }
+            public int enable { get; set; }
+        }           
+        public class thirdPartyUrl
+        {
+            public string UrlNo { get; set; }
+            public string UrlName { get; set; }
+            public string Url { get; set; }
+            public int enable { get; set; }
+        }        
+        public class pPZSJSite
+        {
+            public string siteName { get; set; }
+            public string[] site { get; set; }
+            public int enable { get; set; }
         }
-       
-
-       
         public class deviceInfo
         {
             public string address { get; set; }
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/wms/WCSHelper.cs b/HH.WCS.Mobox3.NongFuLinZhi/wms/WCSHelper.cs
index 7d03a42..668cb09 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/wms/WCSHelper.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/wms/WCSHelper.cs
@@ -204,7 +204,7 @@
 
         internal static void CreateMiddleTable()
         {
-            var order1 = new SqlHelper<OI_SYS_MAXID>().CreateTable();
+            //var order1 = new SqlHelper<OI_SYS_MAXID>().CreateTable();
         }
     }
 }
diff --git a/HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs b/HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs
index bbd72ea..66ed6d2 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs
@@ -323,7 +323,6 @@
                             S_CNTR_CODE = task.S_CNTR_CODE,
                             S_BATCH_NO = item.S_BATCH_NO,
                             S_SERIAL_NO = item.S_SERIAL_NO,
-                            D_PRD_DATE = item.D_PRD_DATE,
                             F_QTY = item.F_QTY
                         };
                         db.Insertable(info).ExecuteCommand();
@@ -696,7 +695,6 @@
                 {
                     LogHelper.Info($"浣滀笟缁堢偣涓嶄负鎺ラ┏浣�鏌ユ壘搴撳尯{a.S_END_AREA} 鍙敤璐т綅");
 
-
                     //鍏朵粬搴撳尯
                     var endlist = db.Queryable<Location>()
                     .Where(it => it.S_AREA_CODE == a.S_END_AREA && it.N_CURRENT_NUM < it.N_CAPACITY)
@@ -720,13 +718,30 @@
                 else
                 {
                     LogHelper.Info($"鍏ュ簱浠诲姟 璁$畻缁堢偣锛屼换鍔$被鍨嬶細{a.S_OP_DEF_NAME}");
-                    if (a.S_OP_DEF_NAME == "鐡剁洊杞繍" || a.S_OP_DEF_NAME == "鎺ラ┏浣嶇Щ搴�)
+                    if (a.S_OP_DEF_NAME == "鐡剁洊杞繍")
                     {
-                        result = TaskProcess.BCPInOrOut(db, true, a.S_START_LOC,a.S_NOTE + "搴撳尯");
+                        var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_START_LOC).First();
+                        if(cntrInfo != null)
+                        {
+                            var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
+                            if(itemInfo != null)
+                            {
+                                result = TaskProcess.BCPInOrOut(db, true, a.S_NOTE + "搴撳尯",itemInfo.S_ITEM_CODE );
+                            }
+                        }
                     }
                     if (a.S_OP_DEF_NAME.Contains("娉ㄥ") && a.S_OP_DEF_NAME.Contains("婊℃墭涓嬬嚎锛堢摱鍧級"))
                     {
-                        result = TaskProcess.BCPFullOut(db,a.S_OP_DEF_NAME,a.S_START_LOC);
+                        var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_START_LOC).First();
+                        if (cntrInfo != null)
+                        {
+                            var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
+                            if (itemInfo != null)
+                            {
+                                result = TaskProcess.BCPFullOut(db, a.S_OP_DEF_NAME, itemInfo.S_ITEM_CODE);
+                            }
+                        }
+                        
                     }
                     if (a.S_OP_DEF_NAME.Contains("绌烘墭涓嬬嚎"))
                     {

--
Gitblit v1.9.1