From f8d23dcf8d6501482db1a5180325194232afe96c Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期五, 18 七月 2025 17:30:09 +0800
Subject: [PATCH] 封装部分业务代码,继续优化日志打印流程

---
 models/TN_Location.cs              |   12 
 device/S7Helper.cs                 |   54 
 swagger.js                         |   98 +-
 models/TN_CG_Detail.cs             |    6 
 Program.cs                         |   12 
 models/TN_Container.cs             |    4 
 core/Monitor.cs                    |  222 ++----
 device/ProductionLineDevice.cs     |   16 
 dispatch/HanAo.cs                  |    8 
 api/ApiModel.cs                    |   46 
 models/TN_Outbound_Plan.cs         |    2 
 wms/WCSHelper.cs                   |  121 +++
 models/TN_Relocation_List.cs       |    2 
 device/TcpClient.cs                |    4 
 device/TcpServer.cs                |   26 
 config/config.comment.json         |   28 
 device/OpcUaHelper.cs              |    8 
 api/AgvController.cs               |    6 
 models/BaseModel.cs                |    6 
 models/TN_Record_Table.cs          |    2 
 process/TaskProcess.cs             |   35 
 App_Start/Startup.cs               |    2 
 dispatch/NDCApi.cs                 |   36 
 models/TN_CAR_IN.cs                |    2 
 device/TcpClientHelper.cs          |   83 +-
 device/ModbusHelper.cs             |   36 
 process/DeviceProcess.cs           |    2 
 models/TN_RelocationList_Detail.cs |    2 
 Properties/AssemblyInfo.cs         |    6 
 wms/LocationHelper.cs              |   52 
 dispatch/HostToAGV.cs              |    4 
 util/LogHelper.cs                  |   15 
 models/TN_SpotCheck_Detail.cs      |    2 
 models/TN_Task.cs                  |    6 
 core/WCSCore.cs                    |  135 ++--
 util/SqlHelper.cs                  |    4 
 device/ModbusFactory.cs            |  154 ++--
 api/DebugController.cs             |   38 
 util/HttpHelper.cs                 |    4 
 models/TN_Spot_Check.cs            |    2 
 models/TN_Outbound_Detail.cs       |    8 
 dispatch/GZRobot.cs                |   18 
 api/ApiHelper.cs                   |  477 +++++++--------
 api/MoboxController.cs             |    4 
 models/TN_Outbound_Order.cs        |    8 
 45 files changed, 922 insertions(+), 896 deletions(-)

diff --git a/App_Start/Startup.cs b/App_Start/Startup.cs
index 16d4445..087146b 100644
--- a/App_Start/Startup.cs
+++ b/App_Start/Startup.cs
@@ -14,7 +14,7 @@
 namespace HH.WCS.Mobox3.DSZSH {
     public class Startup {
         public void Configuration(IAppBuilder app) {
-            // 鏈夊叧濡備綍閰嶇疆搴旂敤绋嬪簭鐨勮缁嗕俊鎭紝璇疯闂�https://go.microsoft.com/fwlink/?LinkID=316888
+            // 鏈夊叧濡備綍閰嶇疆搴旂敤绋嬪簭鐨勮缁嗕俊鎭�璇疯闂�https://go.microsoft.com/fwlink/?LinkID=316888
             HttpConfiguration config = new HttpConfiguration();
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
diff --git a/Program.cs b/Program.cs
index 4447e8b..29085fa 100644
--- a/Program.cs
+++ b/Program.cs
@@ -68,7 +68,7 @@
         }
         
         /// <summary>
-        /// 寮�惎TCP鍗忚閫氳锛屾湇鍔$
+        /// 寮�惎TCP鍗忚閫氳,鏈嶅姟绔�         /// </summary>
         private static void StartTcp()
         {
@@ -123,16 +123,16 @@
 
                 tasks.Add(GetTask(WCSCore.Dispatch));
 
-                // 娴嬭瘯锛氭墭鐩樹笅绾�+                // 娴嬭瘯:鎵樼洏涓嬬嚎
                 //tasks.Add(GetTask(Monitor.CheckInbound));
 
-                // 杞锛氬嚭搴撳崟鐘舵�
+                // 杞:鍑哄簱鍗曠姸鎬�                 tasks.Add(GetTask(Monitor.CheckOutboundOrder));
 
-                // 杞锛氭娊妫�崟鐘舵�
+                // 杞:鎶芥鍗曠姸鎬�                 tasks.Add(GetTask(Monitor.CheckCheckOrder));
 
-                // 杞锛氱Щ搴撳崟鐘舵�
+                // 杞:绉诲簱鍗曠姸鎬�                 tasks.Add(GetTask(Monitor.CheckShiftOrder));
 
                 Task.WaitAll(tasks.ToArray());
@@ -151,7 +151,7 @@
                         }
                         catch (Exception ex)
                         {
-                            LogHelper.Error(ex.Message, ex);
+                            LogHelper.InfoEx(ex);
                         }
                         Thread.Sleep(intervalMs);
                     }
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
index 71b07bb..6dc54f2 100644
--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -19,7 +19,7 @@
 //璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�璁剧疆涓�true銆� [assembly: ComVisible(false)]
 
-// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+// 濡傛灉姝ら」鐩悜 COM 鍏紑,鍒欎笅鍒�GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
 [assembly: Guid("8e589c0d-7d65-474d-8ced-e34e087126a1")]
 
 // 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�缁勬垚: 
@@ -29,8 +29,8 @@
 //      鐢熸垚鍙� //      淇鍙� //
-//鍙互鎸囧畾鎵�湁杩欎簺鍊硷紝涔熷彲浠ヤ娇鐢ㄢ�鐢熸垚鍙封�鍜屸�淇鍙封�鐨勯粯璁ゅ�
-//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�
+//鍙互鎸囧畾鎵�湁杩欎簺鍊�涔熷彲浠ヤ娇鐢ㄢ�鐢熸垚鍙封�鍜屸�淇鍙封�鐨勯粯璁ゅ�
+//閫氳繃浣跨敤 "*",濡備笅鎵�ず:
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("1.0.0.0")]
 [assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/api/AgvController.cs b/api/AgvController.cs
index f01ab17..744500e 100644
--- a/api/AgvController.cs
+++ b/api/AgvController.cs
@@ -16,7 +16,7 @@
 
 namespace HH.WCS.Mobox3.DSZSH.api {
     /// <summary>
-    /// 璁惧淇℃伅涓婃姤锛圚ostToAGV涓婃姤銆佹澀濂ュ爢鍨涙満銆佸浗鑷狝GV锛�+    /// 璁惧淇℃伅涓婃姤 (HostToAGV涓婃姤,鏉ゥ鍫嗗灈鏈�鍥借嚜AGV) 
     /// </summary>
     [RoutePrefix("agv")]
     public class AgvController : ApiController
@@ -29,7 +29,7 @@
         [HttpPost]
         [Route("AGVCallbackState")]
         public ReturnResult AGVCallbackState(AgvTaskState model){
-            LogHelper.InfoHostToAGV("AGVCallbackState锛歂DC浠诲姟鐘舵�鍥炴姤", model);
+            LogHelper.InfoHostToAGV("AGVCallbackState:NDC浠诲姟鐘舵�鍥炴姤", model);
             return WCSCore.OperateAgvTaskStatus(model);
         }
 
@@ -41,7 +41,7 @@
         [HttpPost]
         [Route("SafetyInteraction")]
         public ReturnResult SafetyInteraction(SafetyInteractionInfo model) {
-            LogHelper.InfoHostToAGV("SafetyInteraction锛欰GV涓庝骇绾胯繘琛屽畨鍏ㄤ氦浜�, model);
+            LogHelper.InfoHostToAGV("SafetyInteraction:AGV涓庝骇绾胯繘琛屽畨鍏ㄤ氦浜�, model);
             return WCSCore.SafetyInteraction(model);
         }
     }
diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 805fb09..f1adf15 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -25,83 +25,84 @@
         public static SimpleResult GoodpackOffline(GoodpackOfflineInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.M婊$涓嬬嚎鍏ュ簱.Info();
-            const string preLog = "API锛氭弧绠变笅绾垮叆搴擄細";
+            const string preLog = "API:婊$涓嬬嚎鍏ュ簱:";
             const string cntrType = "濂借繍绠�;
 
             try {
                 if (model.Num <= 0) {
-                    return NewSimpleResult(400, preLog + $"鐗╂枡鏁伴噺'{model.Num}'涓嶅悎娉曪紒瑕佹眰锛氱墿鏂欐暟閲忥紴0");
+                    return NewSimpleResult(400, preLog + $"鐗╂枡鏁伴噺'{model.Num}'涓嶅悎娉�瑕佹眰:鐗╂枡鏁伴噺锛�");
                 }
 
-                // 妫�煡璐у搧瀹瑰櫒琛細鏄惁宸茬粡瀛樺湪璐存爣鏈轰紶閫掔殑寰呭叆搴撶墿鏂欎俊鎭�-                // TODO锛氭暟閲忋�瑙勬牸鏄惁涔熷弬涓庢瘮瀵癸紵
+                // 妫�煡璐у搧瀹瑰櫒琛�鏄惁宸茬粡瀛樺湪璐存爣鏈轰紶閫掔殑寰呭叆搴撶墿鏂欎俊鎭�+                // TODO:鏁伴噺,瑙勬牸鏄惁涔熷弬涓庢瘮瀵癸紵
                 var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮").First();
                 if (cgDetail == null) {
-                    return NewSimpleResult(1, preLog + $"娌℃湁鍦╗璐у搧鏄庣粏琛╙涓壘鍒癧鐗╂枡缂栫爜='{model.ItemCode}',鎵规鍙�'{model.BatchNo}']鐨勭墿鏂欙紒璇锋鏌ワ細PDA鎵爜鐗╂枡淇℃伅涓庤创鏍囨満浼犻�鐨勪俊鎭槸鍚︿竴鑷达紒瑕佹眰锛氱墿鏂欑姸鎬�'寰呮'");
+                    return NewSimpleResult(1, preLog + $"娌℃湁鍦╗璐у搧鏄庣粏琛╙涓壘鍒癧鐗╂枡缂栫爜='{model.ItemCode}',鎵规鍙�'{model.BatchNo}']鐨勭墿鏂�璇锋鏌�PDA鎵爜鐗╂枡淇℃伅涓庤创鏍囨満浼犻�鐨勪俊鎭槸鍚︿竴鑷�瑕佹眰:鐗╂枡鐘舵�='寰呮'");
                 }
 
-                // 鏌ヨ璧风偣璐т綅锛氭暟閲�0
-                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
+                // 鏌ヨ璧风偣璐т綅:鏁伴噺=0
+                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(2, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'锛佽姹傦細閿佺姸鎬�'鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(2, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'!瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
                 }
 
-                // 鍜屾弧鎵樹笅绾垮叆搴撶殑閫昏緫涓�嚧锛岀敱浜庡鍣ㄧЩ鍔ㄤ笉浼氭洿鏀圭粦瀹氫俊鎭紝鎵�互蹇呴』鍒犻櫎鏃ф暟鎹�-                var locCntrRelOld = db.Queryable<TN_Loc_Container>()
-                    .Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First();
+                // 鍜屾弧鎵樹笅绾垮叆搴撶殑閫昏緫涓�嚧,鐢变簬瀹瑰櫒绉诲姩涓嶄細鏇存敼缁戝畾淇℃伅,鎵�互蹇呴』鍒犻櫎鏃ф暟鎹�+                var old = WCSHelper.GetLocCntrCg(cgDetail.S_CNTR_CODE, skipCgDetail: true);
 
-                // 缁戝畾璐т綅瀹瑰櫒锛岃捣鐐硅揣浣嶅綋鍓嶆暟閲�1
-                var locCntrRel = new TN_Loc_Container { S_LOC_CODE = startLoc.S_CODE, S_CNTR_CODE = cgDetail.S_CNTR_CODE, S_CNTR_TYPE = cntrType,};
-                startLoc.N_CURRENT_NUM = 1;
+                // 缁戝畾璐т綅瀹瑰櫒,璧风偣璐т綅褰撳墠鏁伴噺=1
+                var locCntrRel = WCSHelper.BindLocCntr(ref startLoc, cgDetail.S_CNTR_CODE);
+                locCntrRel.S_CNTR_TYPE = cntrType;
 
                 // 鏌ヨ缁堢偣璐т綅
-                // Order锛氭寜璐т綅灞傛暟锛屼粠灏忓埌澶ф帓鍒�-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y")
-                    .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER }).First();
+                // Order:鎸夎揣浣嶅眰鏁�浠庡皬鍒板ぇ鎺掑垪
+                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER }).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
                 }
 
-                // 璧风偣缁堢偣涓婇攣锛屽垱寤轰换鍔�+                // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
                 WCSHelper.LockStartLoc(ref startLoc);
                 WCSHelper.LockEndLoc(ref endLoc);
                 var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
 
                 using (var tran = db.Ado.UseTran()) {
-                    if (locCntrRelOld != null) {
-                        if (db.Deleteable(locCntrRelOld).ExecuteCommand() <= 0 &&
-                            db.Updateable<TN_Location>().SetColumns(l => l.N_CURRENT_NUM == 0).Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).ExecuteCommand() <= 0) {
-                            tran.RollbackTran();
-                            return NewSimpleResult(500, preLog + $"鍒犻櫎鏃ц揣浣嶅鍣ㄥ叧绯昏〃澶辫触锛佽揣浣嶇紪鐮�{locCntrRelOld.S_LOC_CODE}锛屽鍣ㄧ紪鐮�{locCntrRelOld.S_CNTR_CODE}");
-                        }
+                    // 鍒犻櫎/鏇存柊鏃璐т綅/瀹瑰櫒/鐗╂枡]淇℃伅
+                    if (old.LocCntrRel != null && db.Deleteable(old.LocCntrRel).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃ц揣浣嶅鍣ㄥ叧绯籡澶辫触!鏁版嵁:{LogObject(old.LocCntrRel)}");
+                    }
+                    if (old.Location != null && db.Updateable(old.Location).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return NewSimpleResult(500, preLog + $"鏇存柊[鏃ц揣浣峾褰撳墠瀹瑰櫒鏁伴噺]澶辫触!璐т綅='{old.Location.S_CODE}',鏁伴噺=>{old.Location.N_CURRENT_NUM}");
                     }
 
+                    // 鎻掑叆鏂扮粦瀹氱殑[璐т綅-瀹瑰櫒]琛�                     if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鎻掑叆[瀹瑰櫒璐т綅缁戝畾琛╙澶辫触锛佹暟鎹細{LogObject(locCntrRel)}");
+                        return NewSimpleResult(500, preLog + $"鎻掑叆[瀹瑰櫒璐т綅缁戝畾琛╙澶辫触!鏁版嵁:{LogObject(locCntrRel)}");
                     }
 
+                    // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
                     if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                     }
-
                     if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                     }
-
                     if (db.Insertable(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                     }
 
+                    // 鎻愪氦鏁版嵁搴撴洿鏀�                     tran.CommitTran();
-                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
@@ -113,95 +114,86 @@
         public static SimpleResult EmptyInboundPallet(EmptyInboundInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.K绌烘墭鍏ュ簱.Info();
-            const string preLog = "API锛氱┖鎵樺叆搴擄細";
+            const string preLog = "API:绌烘墭鍏ュ簱:";
             const string cntrType = "鎵樼洏";
 
             try {
-                // 鏌ヨ璧风偣璐т綅锛氭暟閲�0
-                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
+                // 鏌ヨ璧风偣璐т綅:鏁伴噺=0
+                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'锛佽姹傦細閿佺姸鎬�'鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'!瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
                 }
 
-                // 鏌ヨ瀹瑰櫒琛細瀹瑰櫒绫诲瀷瀛楁
+                // 鏌ヨ瀹瑰櫒琛�瀹瑰櫒绫诲瀷瀛楁
                 var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntrCode).First();
                 if (cntr == null) {
-                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�);
+                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
                 }
                 if (cntr.S_TYPE != cntrType) {
-                    return NewSimpleResult(3, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}'锛屼笌杈撳叆鐨勫鍣ㄧ被鍨�{cntrType}'涓嶅悓锛�);
+                    return NewSimpleResult(3, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}',涓庤緭鍏ョ殑瀹瑰櫒绫诲瀷'{cntrType}'涓嶅悓!");
                 }
+                
+                // 绌虹鍏ュ簱鏃�濡傛灉瀛樺湪鏃х殑缁戝畾鏁版嵁,鍒犻櫎
+                var old = WCSHelper.GetLocCntrCg(model.CntrCode);
 
-                // 绌虹鍏ュ簱鏃讹紝濡傛灉瀛樺湪鏃х殑缁戝畾鏁版嵁锛屽垹闄�-                var cgDetailOld = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == model.CntrCode).First();
-                var locCntrRelOld = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == model.CntrCode).First();
-                TN_Location locOld = null;
-                if (locCntrRelOld != null) {
-                    locOld = db.Queryable<TN_Location>().Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).First();
-                    if (locOld != null) {
-                        locOld.N_CURRENT_NUM = 0; // 濡傛灉鏃ц揣浣嶅瓨鍦紝灏嗘棫璐т綅鐨勬暟閲忚缃负 0
-                        locOld.T_MODIFY = DateTime.Now;
-                    }
-                }
-
-                // 缁戝畾璐т綅瀹瑰櫒锛岃捣鐐硅揣浣嶅綋鍓嶆暟閲�1
-                var locCntrRel = new TN_Loc_Container { S_LOC_CODE = startLoc.S_CODE, S_CNTR_CODE = cntr.S_CODE, S_CNTR_TYPE = cntrType };
-                startLoc.N_CURRENT_NUM = 1;
+                // 缁戝畾璐т綅瀹瑰櫒,璧风偣璐т綅褰撳墠鏁伴噺=1
+                var locCntrRel = WCSHelper.BindLocCntr(ref startLoc, cntr.S_CODE);
+                locCntrRel.S_CNTR_TYPE = cntrType;
 
                 // 鏌ヨ缁堢偣璐т綅
-                // Order锛氬眰鏁颁粠浣庡埌楂樸�琛屻�鍒�-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First();
+                // Order:灞傛暟浠庝綆鍒伴珮,琛�鍒�+                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
                 }
 
-                // 璧风偣缁堢偣涓婇攣锛屽垱寤轰换鍔�+                // 璧风偣缁堢偣涓婇攣,鍒涘缓浠诲姟
                 WCSHelper.LockStartLoc(ref startLoc);
                 WCSHelper.LockEndLoc(ref endLoc);
                 var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
 
                 using (var tran = db.Ado.UseTran()) {
-                    if (cgDetailOld != null && db.Deleteable(cgDetailOld).ExecuteCommand() <= 0) {
+                    if (old.CgDetail != null && db.Deleteable(old.CgDetail).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃х墿鏂欎俊鎭痌澶辫触锛佹暟鎹細{LogObject(cgDetailOld)}");
+                        return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃х墿鏂欎俊鎭痌澶辫触!鏁版嵁:{LogObject(old.CgDetail)}");
                     }
 
-                    if (locCntrRelOld != null && db.Deleteable(locCntrRelOld).ExecuteCommand() <= 0) {
+                    if (old.LocCntrRel != null && db.Deleteable(old.LocCntrRel).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃ц揣浣嶅鍣ㄥ叧绯籡澶辫触锛佹暟鎹細{LogObject(locCntrRelOld)}");
+                        return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃ц揣浣嶅鍣ㄥ叧绯籡澶辫触!鏁版嵁:{LogObject(old.LocCntrRel)}");
                     }
 
-                    if (locOld != null && db.Updateable(locOld).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) {
+                    if (old.Location != null && db.Updateable(old.Location).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[鏃ц揣浣峾褰撳墠瀹瑰櫒鏁伴噺]澶辫触锛佽揣浣�'{locOld.S_CODE}'锛屾暟閲�>{locOld.N_CURRENT_NUM}");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[鏃ц揣浣峾褰撳墠瀹瑰櫒鏁伴噺]澶辫触!璐т綅='{old.Location.S_CODE}',鏁伴噺=>{old.Location.N_CURRENT_NUM}");
                     }
 
                     if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鎻掑叆[璐т綅瀹瑰櫒缁戝畾琛╙澶辫触锛佹暟鎹細{LogObject(locCntrRel)}");
+                        return NewSimpleResult(500, preLog + $"鎻掑叆[璐т綅瀹瑰櫒缁戝畾琛╙澶辫触!鏁版嵁:{LogObject(locCntrRel)}");
                     }
 
+                    // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
                     if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                     }
-
                     if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                     }
-
                     if (db.Insertable(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                     }
 
+                    // 鎻愪氦鏁版嵁搴撴洿鏀�                     tran.CommitTran();
-                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
@@ -212,46 +204,37 @@
         public static SimpleResult EmptyInboundGoodpack(EmptyInboundInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.K绌虹鍏ュ簱.Info();
-            const string preLog = "API锛氱┖绠卞叆搴擄細";
+            const string preLog = "API:绌虹鍏ュ簱:";
             const string cntrType = "濂借繍绠�;
 
             try {
-                // 鏌ヨ璧风偣璐т綅锛氭暟閲�0
+                // 鏌ヨ璧风偣璐т綅:鏁伴噺=0
                 var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'锛佽姹傦細閿佺姸鎬�'鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'!瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
                 }
 
-                // 鏌ヨ瀹瑰櫒琛細瀹瑰櫒绫诲瀷瀛楁
+                // 鏌ヨ瀹瑰櫒琛�瀹瑰櫒绫诲瀷瀛楁
                 var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntrCode).First();
                 if (cntr == null) {
-                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�);
+                    return NewSimpleResult(1, $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
                 }
                 if (cntr.S_TYPE != cntrType) {
-                    return NewSimpleResult(3, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}'锛屼笌杈撳叆鐨勫鍣ㄧ被鍨�{cntrType}'涓嶅悓锛�);
+                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷鏄�{cntr.S_TYPE},涓嶆槸'{cntrType}'!");
                 }
 
-                // 绌虹鍏ュ簱鏃讹紝濡傛灉瀛樺湪鏃х殑缁戝畾鏁版嵁锛屽垹闄�-                var cgDetailOld = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == model.CntrCode).First();
-                var locCntrRelOld = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == model.CntrCode).First();
-                TN_Location locOld = null;
-                if (locCntrRelOld != null) {
-                    locOld = db.Queryable<TN_Location>().Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).First();
-                    if (locOld != null) {
-                        locOld.N_CURRENT_NUM = 0; // 濡傛灉鏃ц揣浣嶅瓨鍦紝灏嗘棫璐т綅鐨勬暟閲忚缃负 0
-                        locOld.T_MODIFY = DateTime.Now;
-                    }
-                }
+                // 绌虹鍏ュ簱鏃�濡傛灉瀛樺湪鏃х殑缁戝畾鏁版嵁,鍒犻櫎
+                var old = WCSHelper.GetLocCntrCg(model.CntrCode);
 
-                // 缁戝畾璐т綅瀹瑰櫒锛岃捣鐐硅揣浣嶅綋鍓嶆暟閲�1
-                var locCntrRel = new TN_Loc_Container { S_LOC_CODE = startLoc.S_CODE, S_CNTR_CODE = cntr.S_CODE, S_CNTR_TYPE = cntrType };
-                startLoc.N_CURRENT_NUM = 1;
+                // 缁戝畾璐т綅瀹瑰櫒,璧风偣璐т綅褰撳墠鏁伴噺=1
+                var locCntrRel = WCSHelper.BindLocCntr(ref startLoc, model.CntrCode);
+                locCntrRel.S_CNTR_TYPE = cntrType;
 
                 // 鏌ヨ缁堢偣璐т綅
-                // Order锛氬眰鏁颁粠浣庡埌楂樸�琛屻�鍒�+                // Order:灞傛暟浠庝綆鍒伴珮,琛�鍒�                 var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
                 }
 
                 WCSHelper.LockStartLoc(ref startLoc);
@@ -259,47 +242,45 @@
                 var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName);
 
                 using (var tran = db.Ado.UseTran()) {
-                    if (cgDetailOld != null && db.Deleteable(cgDetailOld).ExecuteCommand() <= 0) {
+                    if (old.CgDetail != null && db.Deleteable(old.CgDetail).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃х墿鏂欎俊鎭痌澶辫触锛佹暟鎹細{LogObject(cgDetailOld)}");
+                        return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃х墿鏂欎俊鎭痌澶辫触!鏁版嵁:{LogObject(old.CgDetail)}");
                     }
-
-                    if (locCntrRelOld != null && db.Deleteable(locCntrRelOld).ExecuteCommand() <= 0) {
+                    if (old.LocCntrRel != null && db.Deleteable(old.LocCntrRel).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃ц揣浣嶅鍣ㄥ叧绯籡澶辫触锛� + LogObject(locCntrRelOld));
+                        return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃ц揣浣嶅鍣ㄥ叧绯籡澶辫触!鏁版嵁:{LogObject(old.LocCntrRel)}");
                     }
-
-                    if (locOld != null && db.Updateable(locOld).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) {
+                    if (old.Location != null && db.Updateable(old.Location).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[鏃ц揣浣峾瀹瑰櫒鏁伴噺]澶辫触锛� + LogObject(locOld));
+                        return NewSimpleResult(500, preLog + $"鏇存柊[鏃ц揣浣峾褰撳墠瀹瑰櫒鏁伴噺]澶辫触!璐т綅='{old.Location.S_CODE}',鏁伴噺=>{old.Location.N_CURRENT_NUM}");
                     }
 
                     if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鎻掑叆[璐т綅瀹瑰櫒鍏崇郴]澶辫触锛� + LogObject(locCntrRel));
+                        return NewSimpleResult(500, preLog + $"鎻掑叆[璐т綅瀹瑰櫒鍏崇郴]澶辫触:" + LogObject(locCntrRel));
                     }
 
+                    // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
                     if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                     }
-
                     if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                     }
-
                     if (db.Insertable(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                     }
 
+                    // 鎻愪氦鏁版嵁搴撴洿鏀�                     tran.CommitTran();
-                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
@@ -311,41 +292,41 @@
         public static SimpleResult EmptyOnlinePallet(EmptyOnlinePalletInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.K绌烘墭涓婄嚎鍑哄簱.Info();
-            const string preLog = "API锛氱┖鎵樹笂绾垮嚭搴擄細";
+            const string preLog = "API:绌烘墭涓婄嚎鍑哄簱:";
             const string cntrType = "鎵樼洏";
 
             try {
-                // 鏌ヨ瀹瑰櫒琛細瀹瑰櫒绫诲瀷瀛楁
+                // 鏌ヨ瀹瑰櫒琛�瀹瑰櫒绫诲瀷瀛楁
                 var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntId).First();
                 if (cntr == null) {
-                    return NewSimpleResult(1, $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�);
+                    return NewSimpleResult(1, $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
                 }
                 if (cntr.S_TYPE != cntrType) {
-                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷鏄�{cntr.S_TYPE}锛屼笉鏄�{cntrType}'锛�);
+                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷鏄�{cntr.S_TYPE},涓嶆槸'{cntrType}'!");
                 }
 
                 var needUpdateContainer = false;
                 if (string.IsNullOrEmpty(cntr.S_SPEC)) {
-                    // TEMP 鐩墠娴佺▼锛氬鏋滃鍣ㄨ〃涓鏍硷紙鐗╂枡缂栫爜锛変负绌猴紝鏍规嵁娴佺▼鐨勭墿鏂欎俊鎭啓鍏�-                    // 寰呭畾锛氬悗闈㈠彲鑳戒細鏇存敼娴佺▼锛屾垨鑰呯敤鍏朵粬淇℃伅锛堝鐗╂枡绫诲瀷/瑙勬牸锛変綔涓哄鍣ㄧ殑瑙勬牸
+                    // TEMP 鐩墠娴佺▼:濡傛灉瀹瑰櫒琛ㄤ腑瑙勬牸 (鐗╂枡缂栫爜) 涓虹┖,鏍规嵁娴佺▼鐨勭墿鏂欎俊鎭啓鍏�+                    // 寰呭畾:鍚庨潰鍙兘浼氭洿鏀规祦绋�鎴栬�鐢ㄥ叾浠栦俊鎭�(濡傜墿鏂欑被鍨�瑙勬牸) 浣滀负瀹瑰櫒鐨勮鏍� 
                     needUpdateContainer = true;
                     cntr.S_SPEC = model.ItemCode;
-                    LogHelper.Info($"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓璠瑙勬牸(鐗╂枡缂栫爜)]涓虹┖锛屽皢鐗╂枡缂栫爜'{model.ItemCode}'鍐欏叆瀹瑰櫒鐨勮鏍�);
+                    LogHelper.Info($"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓璠瑙勬牸(鐗╂枡缂栫爜)]涓虹┖,灏嗙墿鏂欑紪鐮�{model.ItemCode}'鍐欏叆瀹瑰櫒鐨勮鏍�);
                 }
                 else if (cntr.S_SPEC != model.ItemCode) {
-                    return NewSimpleResult(3, $"瀹瑰櫒'{model.CntId}'宸茬粡涓庣墿鏂欑被鍨�{cntr.S_SPEC}'缁戝畾锛屾棤娉曠敤浜庤杞界墿鏂�{model.ItemCode}'锛�);
+                    return NewSimpleResult(3, $"瀹瑰櫒'{model.CntId}'宸茬粡涓庣墿鏂欑被鍨�{cntr.S_SPEC}'缁戝畾,鏃犳硶鐢ㄤ簬瑁呰浇鐗╂枡'{model.ItemCode}'!");
                 }
 
                 var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where((l, c) => taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛涘綋鍓嶅鍣ㄦ暟閲�1锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}锛岀粦瀹氬鍣ㄧ紪鐮�'{model.CntId}'锛岀粦瀹氬鍣ㄧ被鍨�'{cntrType}'");
+                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=1;鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)},缁戝畾瀹瑰櫒缂栫爜='{model.CntId}',缁戝畾瀹瑰櫒绫诲瀷='{cntrType}'");
                 }
 
                 // 鏌ヨ缁堢偣璐т綅
                 var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(5, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(5, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=0;鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
                 }
 
                 WCSHelper.LockStartLoc(ref startLoc);
@@ -357,30 +338,30 @@
 
                 using (var tran = db.Ado.UseTran()) {
                     if (needUpdateContainer && db.Updateable(cntr).UpdateColumns(c => new { c.S_SPEC, c.S_SOURCE, c.T_MODIFY }).ExecuteCommand() <= 0) {
-                        return NewSimpleResult(500, preLog + $"鏇存柊[瀹瑰櫒琛╙澶辫触锛佹暟鎹細{LogObject(cntr)}");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[瀹瑰櫒琛╙澶辫触!鏁版嵁:{LogObject(cntr)}");
                     }
 
+                    // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
                     if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                     }
-
                     if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                     }
-
                     if (db.Insertable(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                     }
 
+                    // 鎻愪氦鏁版嵁搴撴洿鏀�                     tran.CommitTran();
-                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
@@ -392,30 +373,27 @@
         public static SimpleResult EmptyOnlineGoodpack(EmptyOnlineGoodpackInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.K绌虹涓婄嚎鍑哄簱.Info();
-            const string preLog = "API锛氱┖绠变笂绾垮嚭搴擄細";
+            const string preLog = "API:绌虹涓婄嚎鍑哄簱:";
             const string cntrType = "濂借繍绠�;
 
             try {
-                var cntr = db.Queryable<TN_Container>()
-                    .Where(c => c.S_CODE == model.CntId)
-                    .First();
-
+                var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntId).First();
                 if (cntr == null) {
-                    return NewSimpleResult(1, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�);
+                    return NewSimpleResult(1, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
                 }
                 if (cntr.S_TYPE != cntrType) {
-                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷='{cntr.S_TYPE}'锛屼笉鏄�{cntrType}'锛�);
+                    return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷='{cntr.S_TYPE}',涓嶆槸'{cntrType}'!");
                 }
 
                 var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where((l, c) => taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(2, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�1锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}锛岀粦瀹氬鍣ㄧ紪鐮�'{model.CntId}'锛岀粦瀹氬鍣ㄧ被鍨�'{cntrType}'");
+                    return NewSimpleResult(2, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=1,鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)},缁戝畾瀹瑰櫒缂栫爜='{model.CntId}',缁戝畾瀹瑰櫒绫诲瀷='{cntrType}'");
                 }
 
                 var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y")
                     .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(taskInfo.EndAreas)}");
                 }
 
                 WCSHelper.LockStartLoc(ref startLoc);
@@ -423,27 +401,27 @@
                 var task = WCSHelper.BuildTask(startLoc, endLoc, model.CntId, taskInfo.TaskName);
                 
                 using (var tran = db.Ado.UseTran()) {
+                    // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
                     if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                     }
-
                     if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                     }
-
                     if (db.Insertable(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                     }
 
+                    // 鎻愪氦鏁版嵁搴撴洿鏀�                     tran.CommitTran();
-                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
@@ -455,32 +433,29 @@
         public static SimpleResult QualifiedBack(QualifiedBackInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.C鎶芥鍚堟牸鍥炲簱.Info();
-            const string preLog = "API锛氭娊妫�悎鏍煎洖搴�;
+            const string preLog = "API:鎶芥鍚堟牸鍥炲簱";
 
             try {
                 var cgDetail = db.Queryable<TN_CG_Detail>()
                     .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode).First();
                 if (cgDetail == null) {
-                    return NewSimpleResult(2, preLog + "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡锛� + LogObject(model));
+                    return NewSimpleResult(2, preLog + "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡:" + LogObject(model));
                 }
 
-                var locCntrRel = db.Queryable<TN_Loc_Container>()
-                    .Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First();
+                var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First();
                 if (locCntrRel == null) {
                     return NewSimpleResult(3, preLog + $"瀹瑰櫒{model.CntrCode}鍦ㄨ揣浣嶅鍣ㄥ叧绯昏〃涓笉瀛樺湪");
                 }
 
-                var startLoc = db.Queryable<TN_Location>()
-                    .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First();
+                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(4, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�1锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(4, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=1,鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
                 }
 
                 var endAreas = locCntrRel.S_CNTR_CODE == "鎵樼洏" ? taskInfo.EndAreas_Pallet : taskInfo.EndAreas_Goodpack;
-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y")
-                    .Where(l => endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
+                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(endAreas)}");
+                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(endAreas)}");
                 }
 
                 cgDetail.N_ITEM_STATE = 0;
@@ -496,30 +471,30 @@
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Updateable(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[鐗╂枡鏄庣粏琛╙澶辫触锛佺墿鏂欏彿='{cgDetail.S_ITEM_CODE}'锛岀墿鏂欑姸鎬�>'鍚堟牸'");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[鐗╂枡鏄庣粏琛╙澶辫触!鐗╂枡鍙�'{cgDetail.S_ITEM_CODE}',鐗╂枡鐘舵�=>'鍚堟牸'");
                     }
 
+                    // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
                     if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                     }
-
                     if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                     }
-
                     if (db.Insertable(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                     }
 
+                    // 鎻愪氦鏁版嵁搴撴洿鏀�                     tran.CommitTran();
-                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
@@ -531,34 +506,33 @@
         public static SimpleResult UnqualifiedShift(UnqualifiedShiftInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.C鎶芥涓嶅悎鏍肩Щ搴�Info();
-            const string preLog = "API锛氭娊妫�笉鍚堟牸绉诲簱锛�;
+            const string preLog = "API:鎶芥涓嶅悎鏍肩Щ搴�";
 
             try {
                 if (!taskInfo.EndAreas.Contains(model.EndArea)) {
-                    return NewSimpleResult(1, preLog + $"缁堢偣搴撳尯'{model.EndArea}'涓嶆弧瓒虫潯浠讹紒闇�锛氳揣鍖�{LogObject(taskInfo.EndAreas)}");
+                    return NewSimpleResult(1, preLog + $"缁堢偣搴撳尯'{model.EndArea}'涓嶆弧瓒虫潯浠�闇�:璐у尯={LogObject(taskInfo.EndAreas)}");
                 }
 
                 var cgDetail = db.Queryable<TN_CG_Detail>()
                     .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode).First();
                 if (cgDetail == null) {
-                    return NewSimpleResult(2, preLog + $"娌℃湁鍦╗鐗╂枡鏄庣粏琛╙涓壘鍒扮墿鏂欙紒瑕佹眰锛氱墿鏂欑紪鐮�'{model.ItemCode}'锛屽鍣ㄧ紪鐮�'{model.CntrCode}'");
+                    return NewSimpleResult(2, preLog + $"娌℃湁鍦╗鐗╂枡鏄庣粏琛╙涓壘鍒扮墿鏂�瑕佹眰:鐗╂枡缂栫爜='{model.ItemCode}',瀹瑰櫒缂栫爜='{model.CntrCode}'");
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First();
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, preLog + $"鍦╗璐т綅瀹瑰櫒鍏崇郴琛╙涓病鏈夋壘鍒板鍣�{model.CntrCode}'锛�);
+                    return NewSimpleResult(3, preLog + $"鍦╗璐т綅瀹瑰櫒鍏崇郴琛╙涓病鏈夋壘鍒板鍣�{model.CntrCode}'!");
                 }
 
-                // 鏌ヨ璧风偣璐т綅锛氭暟閲�1
-                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First();
+                // 鏌ヨ璧风偣璐т綅:鏁伴噺=1
+                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{locCntrRel.S_LOC_CODE}'锛佽姹傦細閿佺姸鎬�'鏃�锛涘綋鍓嶅鍣ㄦ暟閲�1锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}");
+                    return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{locCntrRel.S_LOC_CODE}'!瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=1;鎵�湪搴撳尯={LogObject(taskInfo.StartAreas)}");
                 }
 
-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y")
-                    .Where(l => l.S_AREA_CODE == model.EndArea && l.N_CURRENT_NUM == 0).First();
+                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_AREA_CODE == model.EndArea && l.N_CURRENT_NUM == 0).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�'{model.EndArea}'");
+                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯='{model.EndArea}'");
                 }
 
                 cgDetail.N_ITEM_STATE = 2;
@@ -571,30 +545,30 @@
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Updateable(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[璐у搧鏄庣粏琛╙澶辫触锛佺墿鏂欏彿='{cgDetail}'锛岀墿鏂欑姸鎬�>'{cgDetail.S_ITEM_STATE}'");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[璐у搧鏄庣粏琛╙澶辫触!鐗╂枡鍙�'{cgDetail}',鐗╂枡鐘舵�=>'{cgDetail.S_ITEM_STATE}'");
                     }
 
+                    // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
                     if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                     }
-
                     if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                     }
-
                     if (db.Insertable(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                     }
 
+                    // 鎻愪氦鏁版嵁搴撴洿鏀�                     tran.CommitTran();
-                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
@@ -606,13 +580,12 @@
         public static SimpleResult RestBack(RestBackInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.W灏炬枡鍥炲簱.Info();
-            const string preLog = "API锛氬熬鏂欏洖搴擄細";
+            const string preLog = "API:灏炬枡鍥炲簱:";
             
             try {
-                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y")
-                    .Where(l => l.S_CODE == model.StartLoc && l.N_CURRENT_NUM == 1).First();
+                var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == model.StartLoc && l.N_CURRENT_NUM == 1).First();
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'锛佽姹傦細閿佺姸鎬�'鏃�锛涘綋鍓嶅鍣ㄦ暟閲�1");
+                    return NewSimpleResult(2, $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'!瑕佹眰:閿佺姸鎬�'鏃�;褰撳墠瀹瑰櫒鏁伴噺=1");
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_LOC_CODE == model.StartLoc).First();
@@ -621,10 +594,9 @@
                 }
 
                 var endAreas = locCntrRel.S_CNTR_CODE == "鎵樼洏" ? taskInfo.EndAreas_Pallet : taskInfo.EndAreas_Goodpack;
-                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y")
-                    .Where(l => endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
+                var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First();
                 if (endLoc == null) {
-                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(endAreas)}");
+                    return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0,鎵�湪搴撳尯={LogObject(endAreas)}");
                 }
 
                 var cntId = locCntrRel.S_CNTR_CODE;
@@ -636,42 +608,42 @@
                 using (var tran = db.Ado.UseTran()) {
                     //if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) {
                     //    tran.RollbackTran();
-                    //    return NewSimpleResult(500, preLog + $"鎻掑叆[瀹瑰櫒璐т綅缁戝畾琛╙澶辫触锛佹暟鎹細{LogObject(locCntrRel)}");
+                    //    return NewSimpleResult(500, preLog + $"鎻掑叆[瀹瑰櫒璐т綅缁戝畾琛╙澶辫触!鏁版嵁:{LogObject(locCntrRel)}");
                     //}
 
+                    // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
                     if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                     }
-
                     if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�");
+                        return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                     }
-
                     if (db.Insertable(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                        return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                     }
 
+                    // 鎻愪氦鏁版嵁搴撴洿鏀�                     tran.CommitTran();
-                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}");
+                    return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
         /// <summary>
-        /// 鎴愬搧鑳跺嚭搴�PDA) 寰呭畾锛屾殏鏃朵笉闇�姝ゅ姛鑳�+        /// 鎴愬搧鑳跺嚭搴�PDA) 寰呭畾,鏆傛椂涓嶉渶瑕佹鍔熻兘
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
         public static SimpleResult FinishedOutbound(FinishedOutboundInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.C鎴愬搧鑳跺嚭搴�Info();
-            const string preLog = "API锛氭垚鍝佽兌鍑哄簱锛�;
+            const string preLog = "API:鎴愬搧鑳跺嚭搴�";
 
             try {
                 var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "CKD");
@@ -706,12 +678,12 @@
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Insertable(order).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(2, preLog + "鐢熸垚鍑哄簱鍗曞け璐ワ細" + LogObject(order));
+                        return NewSimpleResult(2, preLog + "鐢熸垚鍑哄簱鍗曞け璐�" + LogObject(order));
                     }
 
                     if (db.Insertable(detailList).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(4, preLog + "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + LogObject(detailList));
+                        return NewSimpleResult(4, preLog + "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐�" + LogObject(detailList));
                     }
 
                     tran.CommitTran();
@@ -720,7 +692,7 @@
                 return NewSimpleResult(0, preLog + "鐢熸垚鍑哄簱鍗曟垚鍔�);
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
@@ -731,7 +703,7 @@
         public static SimpleResult FinishedOutboundForce(FinishedOutboundInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var taskInfo = ETask.C鎴愬搧鑳跺嚭搴�Info();
-            const string preLog = "API锛氭垚鍝佽兌鍑哄簱锛�;
+            const string preLog = "API:鎴愬搧鑳跺嚭搴�";
 
             try {
                 var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "CKD");
@@ -766,12 +738,12 @@
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Insertable(order).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(2, preLog + "鐢熸垚鍑哄簱鍗曞け璐ワ細" + LogObject(order));
+                        return NewSimpleResult(2, preLog + "鐢熸垚鍑哄簱鍗曞け璐�" + LogObject(order));
                     }
 
                     if (db.Insertable(detailList).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(4, preLog + "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + LogObject(detailList));
+                        return NewSimpleResult(4, preLog + "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐�" + LogObject(detailList));
                     }
 
                     tran.CommitTran();
@@ -780,7 +752,7 @@
                 return NewSimpleResult(0, preLog + "鐢熸垚鍑哄簱鍗曟垚鍔�);
             }
             catch (Exception ex) {
-                return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewSimpleResult(ex, preLog);
             }
         }
 
@@ -799,13 +771,13 @@
                     return result;
                 }
 
-                // NOTE 鏍规嵁鎬婚噺閫塪etail鏃讹紝鏄惁闇�鑰冭檻璐т綅鐨勯珮浣庯紵
+                // NOTE 鏍规嵁鎬婚噺閫塪etail鏃�鏄惁闇�鑰冭檻璐т綅鐨勯珮浣庯紵
 
                 var sortedMaterials = new List<TN_CG_Detail>();
 
                 var cntrTypeList = new List<string>();
                 if (cntrType == "") {
-                    cntrTypeList = new List<string> { "鎵樼洏", "濂借繍绠� }; // 涓嶆寚瀹氭墭鐩樼被鍨嬶紝浜岃�鍧囧彲
+                    cntrTypeList = new List<string> { "鎵樼洏", "濂借繍绠� }; // 涓嶆寚瀹氭墭鐩樼被鍨�浜岃�鍧囧彲
                 }
                 else {
                     cntrTypeList.Add(cntrType);
@@ -863,94 +835,94 @@
         }
 
         /// <summary>
-        /// 鍗氬疄鐗╂枡淇℃伅涓嬪彂鍚屾锛堝彧閽堝濂借繍绠憋級
+        /// 鍗氬疄鐗╂枡淇℃伅涓嬪彂鍚屾 (鍙拡瀵瑰ソ杩愮) 
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
         public static MesResult CgInfoSync(CgInfoSyncInfo model) {
             var db = new SqlHelper<object>().GetInstance();
-            const string preLog = "API锛氬崥瀹炰笅鍙戠墿鏂欎俊鎭細";
+            const string preLog = "API:鍗氬疄涓嬪彂鐗╂枡淇℃伅:";
             const string cntrType = "濂借繍绠�;
 
             try {
                 if (string.IsNullOrEmpty(model.ItemCode)) {
-                    return NewMesResult(400, preLog + $"鐗╂枡缂栫爜'{model.ItemCode}'涓嶈兘涓虹┖锛�);
+                    return NewMesResult(400, preLog + $"鐗╂枡缂栫爜'{model.ItemCode}'涓嶈兘涓虹┖!");
                 }
                 if (string.IsNullOrEmpty(model.CntrCode)) {
-                    return NewMesResult(400, preLog + $"瀹瑰櫒缂栫爜'{model.CntrCode}'涓嶈兘涓虹┖锛�);
+                    return NewMesResult(400, preLog + $"瀹瑰櫒缂栫爜'{model.CntrCode}'涓嶈兘涓虹┖!");
                 }
                 if (string.IsNullOrEmpty(model.BatchNo)) {
-                    return NewMesResult(400, preLog + $"鎵规鍙�{model.BatchNo}'涓嶈兘涓虹┖锛�);
+                    return NewMesResult(400, preLog + $"鎵规鍙�{model.BatchNo}'涓嶈兘涓虹┖!");
                 }
                 if (model.ItemNum <= 0) {
-                    return NewMesResult(400, preLog + $"鐗╂枡鏁伴噺'{model.ItemNum}'涓嶅悎娉曪紒瑕佹眰锛氱墿鏂欐暟閲忥紴0");
+                    return NewMesResult(400, preLog + $"鐗╂枡鏁伴噺'{model.ItemNum}'涓嶅悎娉�瑕佹眰:鐗╂枡鏁伴噺锛�");
                 }
 
-                // TEMP 鐩墠娴佺▼锛氬鍗氬疄涓嬪彂鐨勪俊鎭篃杩涜妫�煡锛屾湭鎵惧埌灏辨姤閿欙紝鍚庨潰鏈夐渶姹傚啀鏇存敼
+                // TEMP 鐩墠娴佺▼:瀵瑰崥瀹炰笅鍙戠殑淇℃伅涔熻繘琛屾鏌�鏈壘鍒板氨鎶ラ敊,鍚庨潰鏈夐渶姹傚啀鏇存敼
                 var cntr = db.Queryable<TN_Container>()
-                    .Where(c => c.S_CODE == model.CntrCode) // 瀵逛簬鍓嶅彴绋嬪簭鑰岃█锛孲_CODE灏辨槸涓婚敭锛岀淮鎶ゆ椂蹇呭畾鍞竴
+                    .Where(c => c.S_CODE == model.CntrCode) // 瀵逛簬鍓嶅彴绋嬪簭鑰岃█,S_CODE灏辨槸涓婚敭,缁存姢鏃跺繀瀹氬敮涓�                     .First();
 
                 if (cntr == null) {
-                    return NewMesResult(1, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�);
+                    return NewMesResult(1, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�");
                 }
                 if (cntr.S_TYPE != cntrType) {
-                    return NewMesResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}'锛屼笌褰撳墠瀹瑰櫒绫诲瀷'{cntrType}'涓嶅悓锛�);
+                    return NewMesResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}',涓庡綋鍓嶅鍣ㄧ被鍨�{cntrType}'涓嶅悓!");
                 }
 
-                // 灏嗕笅鍙戠殑淇℃伅鍏堝瓨鍌ㄥ埌CG琛ㄤ腑锛堟鏃舵墭鐩樻病鏈変笌浜х嚎澶勭殑璐т綅缁戝畾锛�+                // 灏嗕笅鍙戠殑淇℃伅鍏堝瓨鍌ㄥ埌CG琛ㄤ腑 (姝ゆ椂鎵樼洏娌℃湁涓庝骇绾垮鐨勮揣浣嶇粦瀹� 
                 var detail = new TN_CG_Detail {
                     S_ITEM_CODE = model.ItemCode, // NOT NULL
                     S_ITEM_NAME = model.ItemName, 
-                    S_CNTR_CODE = model.CntrCode, // NOT NULL 鏂欑缂栧彿锛堝緟瀹氾紝鐜板湪鏆傛椂璁惧畾涓哄崥瀹炰笅鍙戯級
+                    S_CNTR_CODE = model.CntrCode, // NOT NULL 鏂欑缂栧彿 (寰呭畾,鐜板湪鏆傛椂璁惧畾涓哄崥瀹炰笅鍙� 
                     S_BATCH_NO = model.BatchNo,   // NOT NULL
                     S_STANDARD = model.Standard,
                     S_NET_WEIGHT = model.NetWeight,
                     S_QUALITY_GRADE = model.QualityGrade,
                 };
 
-                // 浜х嚎鍙风殑閫昏緫寰呭畾锛岀幇鍦ㄨ瀹氫负鍗氬疄涓嬪彂浜х嚎鍙凤紝鐪嬪悗缁渶姹傚彉鏇�-                // 濂借繍绠辫捣鐐逛负浜х嚎璐т綅锛屼汉宸ュ皢濂借繍绠变粠浜х嚎涓婂彇涓嬶紝鎼繍鍒版弧濂借繍绠辨搷浣滃尯
+                // 浜х嚎鍙风殑閫昏緫寰呭畾,鐜板湪璁惧畾涓哄崥瀹炰笅鍙戜骇绾垮彿,鐪嬪悗缁渶姹傚彉鏇�+                // 濂借繍绠辫捣鐐逛负浜х嚎璐т綅,浜哄伐灏嗗ソ杩愮浠庝骇绾夸笂鍙栦笅,鎼繍鍒版弧濂借繍绠辨搷浣滃尯
                 //var startLocCode = "";
                 //if (model.ProdLineId.Trim() == "3") {
                 //    startLocCode = "";
                 //}
 
                 //if (model.ProdLineId.Trim() != "3" || model.ProdLineId.Trim() != "4") {
-                //    info = $"涓嶅悎娉曠殑浜х嚎鍙穥model.ProdLineId}锛氬ソ杩愮浜х嚎鍙峰繀椤讳负 3 鎴�4";
+                //    info = $"涓嶅悎娉曠殑浜х嚎鍙穥model.ProdLineId}:濂借繍绠变骇绾垮彿蹇呴』涓�3 鎴�4";
                 //    LogHelper.Info(info);
                 //    return NewMesResult(2, info);
                 //}
 
                 if (db.Insertable(detail).ExecuteCommand() <= 0) {
-                    return NewMesResult(500, preLog + $"鎻掑叆[鐗╂枡鏄庣粏琛╙澶辫触锛佹暟鎹細{LogObject(detail)}");
+                    return NewMesResult(500, preLog + $"鎻掑叆[鐗╂枡鏄庣粏琛╙澶辫触!鏁版嵁:{LogObject(detail)}");
                 }
 
-                return NewMesResult(500, preLog + $"鎻掑叆[鐗╂枡鏄庣粏琛╙鎴愬姛锛佹暟鎹細{LogObject(detail)}");
+                return NewMesResult(500, preLog + $"鎻掑叆[鐗╂枡鏄庣粏琛╙鎴愬姛!鏁版嵁:{LogObject(detail)}");
             }
             catch (Exception ex) {
-                return NewMesResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewMesResult(-1, preLog + $"鍙戠敓浜嗗紓甯�{ex.Message}\n\n{ex.StackTrace}\n");
             }
         }
 
         public static ErpResult ErpSendOutboundPlan(ErpSendOutboundPlanInfo model) {
             var db = new SqlHelper<object>().GetInstance();
             var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "CKD");
-            const string preLog = "API锛欵RP涓嬪彂鍑哄簱璁″垝鍗曪細";
+            const string preLog = "API:ERP涓嬪彂鍑哄簱璁″垝鍗�";
             try {
                 if (model.pzjs <= 0) {
-                    return NewErpResult(400, preLog + $"鐗╂枡鏁伴噺(pzjs)'{model.pzjs}'涓嶅悎娉曪紒瑕佹眰锛氱墿鏂欐暟閲忥紴0");
+                    return NewErpResult(400, preLog + $"鐗╂枡鏁伴噺(pzjs)'{model.pzjs}'涓嶅悎娉�瑕佹眰:鐗╂枡鏁伴噺锛�");
                 }
 
                 var outboundPlan = db.Queryable<TN_Outbound_Plan>()
                     .Where(p => p.JHDH == model.jhdh).First();
                 if (outboundPlan != null) {
-                    return NewErpResult(1, preLog + $"璁″垝鍗曞彿'{model.jhdh}'宸插湪[鍑哄簱璁″垝鍗昡涓瓨鍦紒");
+                    return NewErpResult(1, preLog + $"璁″垝鍗曞彿'{model.jhdh}'宸插湪[鍑哄簱璁″垝鍗昡涓瓨鍦�");
                 }
 
                 outboundPlan = new TN_Outbound_Plan {
-                    JHDH = model.jhdh, // 璁″垝鍗曞彿锛堝敮涓�爣璇嗭級
-                    CKZT = model.ckzt, // 鍑哄簱鐘舵�锛堥渶瑕佽繑鍥烇級
+                    JHDH = model.jhdh, // 璁″垝鍗曞彿 (鍞竴鏍囪瘑) 
+                    CKZT = model.ckzt, // 鍑哄簱鐘舵� (闇�杩斿洖) 
                     JHLB = model.jhlb, // 璁″垝绫诲埆
                     CKDH = model.ckdh, // 鍙傝�鍗曞彿
                     CPH = model.cph, // 杞︾墝鍙�@@ -961,9 +933,9 @@
                     CPLB = model.cplb, // 浜у搧绫诲埆
                     CPLBMX = model.cplbmx, // 浜у搧绫诲埆鏄庣粏
                     PP = model.pp, // 鍝佺墝
-                    DJ = model.dj, // 绛夌骇锛堥渶瑕佽繑鍥烇級
+                    DJ = model.dj, // 绛夌骇 (闇�杩斿洖) 
                     GH = model.gh, // 缃愬彿
-                    PH = model.ph, // 鎵瑰彿锛堥渶瑕佽繑鍥烇級
+                    PH = model.ph, // 鎵瑰彿 (闇�杩斿洖) 
                     BZLX = model.bzlx, // 鍖呰绫诲瀷
                     PZDH = model.pzdh, // 娲捐鍗曞彿
                     PZD_DW = model.pzd_dw, // 娲捐鍗曞崟浣�@@ -976,15 +948,15 @@
                     PZ_ZFRQ = model.pz_zfrq, // 娲捐浣滃簾鏃ユ湡
                     PZ_BZ = model.pz_bz, // 娲捐澶囨敞
                     CKDBH = model.ckdbh, // 鍑哄簱鍗曠紪鍙�-                    SFJS = model.sfjs, // 瀹炲彂浠舵暟锛堥渶瑕佽繑鍥烇級
-                    SFSL = model.sfsl, // 瀹炲彂鏁伴噺锛堥渶瑕佽繑鍥烇級
-                    SFCS = model.sfcs, // 瀹炲彂杞︽暟锛堥渶瑕佽繑鍥烇級
-                    ZCSJ = model.zcsj, // 瑁呰溅鏃堕棿锛堥渶瑕佽繑鍥烇級
-                    JLDW = model.jldw, // 璁¢噺鍗曚綅锛堥渶瑕佽繑鍥烇級
-                    FHRQ = model.fhrq, // 鍙戣揣鏃ユ湡锛堥渶瑕佽繑鍥烇級
-                    CKDM = model.ckdm, // 浠撳簱浠g爜锛堥渶瑕佽繑鍥烇級
-                    FHR = model.fhr, // 鍙戣揣浜猴紙闇�杩斿洖锛�-                    CZYDM = model.czydm, // 鎿嶄綔鍛橈紙闇�杩斿洖锛�+                    SFJS = model.sfjs, // 瀹炲彂浠舵暟 (闇�杩斿洖) 
+                    SFSL = model.sfsl, // 瀹炲彂鏁伴噺 (闇�杩斿洖) 
+                    SFCS = model.sfcs, // 瀹炲彂杞︽暟 (闇�杩斿洖) 
+                    ZCSJ = model.zcsj, // 瑁呰溅鏃堕棿 (闇�杩斿洖) 
+                    JLDW = model.jldw, // 璁¢噺鍗曚綅 (闇�杩斿洖) 
+                    FHRQ = model.fhrq, // 鍙戣揣鏃ユ湡 (闇�杩斿洖) 
+                    CKDM = model.ckdm, // 浠撳簱浠g爜 (闇�杩斿洖) 
+                    FHR = model.fhr, // 鍙戣揣浜�(闇�杩斿洖) 
+                    CZYDM = model.czydm, // 鎿嶄綔鍛�(闇�杩斿洖) 
                     SHR_USERNAME = model.shr_username, // 瀹℃牳浜�                     SHRQ = model.shrq, // 瀹℃牳鏃ユ湡
                     ZFBJ = model.zfbj, // 浣滃簾鏍囪
@@ -993,14 +965,14 @@
                     SHDW = model.shdw, // 鏀惰揣鍗曚綅
                     YSDW = model.ysdw, // 杩愯緭鍗曚綅
                     LXR = model.lxr, // 鑱旂郴浜�-                    RY_ZXG = model.ry_zxg, // 瑁呭嵏宸ワ紙闇�杩斿洖锛�-                    RY_CCSJ = model.ry_ccsj, // 鍙夎溅鍙告満锛堥渶瑕佽繑鍥烇級
+                    RY_ZXG = model.ry_zxg, // 瑁呭嵏宸�(闇�杩斿洖) 
+                    RY_CCSJ = model.ry_ccsj, // 鍙夎溅鍙告満 (闇�杩斿洖) 
                     ERPHX_JHDH = model.erphx_jhdh, // erp浜よ揣鍗曞彿
                     ERPHX_WLBM = model.erphx_wlbm, // erp鐗╂枡缂栫爜
                     ERPHX_WLMC = model.erphx_wlmc, // erp鐗╂枡鍚嶇О
                     ERPHX_CJRQ = model.erphx_cjrq, // erp鍒涘缓鏃ユ湡
-                    HW = model.hw, // 璐т綅锛堥渶瑕佽繑鍥烇級
-                    HWZT = model.hwzt // 璐т綅鐘舵�锛堥渶瑕佽繑鍥烇級
+                    HW = model.hw, // 璐т綅 (闇�杩斿洖) 
+                    HWZT = model.hwzt // 璐т綅鐘舵� (闇�杩斿洖) 
                 };
 
                 //var cgDetailList = SelectCgByTotalQty(
@@ -1015,10 +987,9 @@
                 //    return NewErpResult(3, info);
                 //}
 
-                var cgDetail = db.Queryable<TN_CG_Detail>()
-                    .Where(d => d.S_ITEM_CODE == model.cpdm && d.N_ITEM_NUM >= model.pzjs).First();
+                var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_ITEM_CODE == model.cpdm && d.N_ITEM_NUM >= model.pzjs).First();
                 if (cgDetail == null ) {
-                    return NewErpResult(2, preLog + $"鍦╗璐у搧鏄庣粏琛╙涓病鏈夋壘鍒板悎閫傜殑鐗╂枡锛佽姹傦細鐗╂枡缂栫爜='{model.cpdm}'锛岀墿鏂欐暟閲�={model.pzjs}");
+                    return NewErpResult(2, preLog + $"鍦╗璐у搧鏄庣粏琛╙涓病鏈夋壘鍒板悎閫傜殑鐗╂枡!瑕佹眰:鐗╂枡缂栫爜='{model.cpdm}',鐗╂枡鏁伴噺>={model.pzjs}");
                 }
 
                 var order = new TN_Outbound_Order {
@@ -1063,25 +1034,25 @@
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Insertable(order).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewErpResult(500, preLog + $"鐢熸垚[鍑哄簱鍗昡澶辫触锛佹暟鎹細{LogObject(order)}");
+                        return NewErpResult(500, preLog + $"鐢熸垚[鍑哄簱鍗昡澶辫触!鏁版嵁:{LogObject(order)}");
                     }
 
                     if (db.Insertable(detailList).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewErpResult(500, preLog + $"鐢熸垚[鍑哄簱鍗曟槑缁哴澶辫触锛佹暟鎹細{LogObject(detailList)}");
+                        return NewErpResult(500, preLog + $"鐢熸垚[鍑哄簱鍗曟槑缁哴澶辫触!鏁版嵁:{LogObject(detailList)}");
                     }
 
                     if (db.Insertable(outboundPlan).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewErpResult(500, preLog + $"鐢熸垚[鍑哄簱鍗曡鍒掕褰曡〃]澶辫触锛佹暟鎹細{LogObject(outboundPlan)}");
+                        return NewErpResult(500, preLog + $"鐢熸垚[鍑哄簱鍗曡鍒掕褰曡〃]澶辫触!鏁版嵁:{LogObject(outboundPlan)}");
                     }
 
                     tran.CommitTran();
-                    return NewErpResult(0, preLog + $"鐢熸垚[鍑哄簱鍗昡鎴愬姛锛佸嚭搴撳崟锛歿LogObject(order)}\n鍑哄簱鍗曟槑缁嗭細{LogObject(detail)}");
+                    return NewErpResult(0, preLog + $"鐢熸垚[鍑哄簱鍗昡鎴愬姛!鍑哄簱鍗�{LogObject(order)}\n鍑哄簱鍗曟槑缁�{LogObject(detail)}");
                 }
             }
             catch (Exception ex) {
-                return NewErpResult(1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewErpResult(1, preLog + $"鍙戠敓浜嗗紓甯�{ex.Message}\n\n{ex.StackTrace}\n");
             }
         }
 
diff --git a/api/ApiModel.cs b/api/ApiModel.cs
index 4a0cb39..0a6667f 100644
--- a/api/ApiModel.cs
+++ b/api/ApiModel.cs
@@ -17,16 +17,14 @@
             public List<object> result { get; set; } = new List<object>();
         }
 
-        /// <summary>
-        /// 鏋勫缓 <see cref="SimpleResult"/> 杩斿洖鍊�-        /// </summary>
-        /// <param name="code"></param>
-        /// <param name="message"></param>
-        /// <param name="log"></param>
-        /// <returns></returns>
-        public static SimpleResult NewSimpleResult(int code, string message, bool log = true) {
-            if (log) { LogHelper.Info(message); }
+        public static SimpleResult NewSimpleResult(int code, string message, string name = "") {
+            LogHelper.Info(message, name);
             return new SimpleResult { resultCode = code, resultMsg = message };
+        }
+
+        public static SimpleResult NewSimpleResult(Exception ex, string preLog = "", int errCode = -1) {
+            LogHelper.InfoEx(ex, preLog);
+            return new SimpleResult { resultCode = errCode, resultMsg = $"鍙戠敓浜哰寮傚父]:{ex.Message}" };
         }
 
         /// <summary>
@@ -60,7 +58,7 @@
             //public int station_id { get; set; }
 
             /// <summary>
-            /// 璇锋眰涓婄嚎/涓嬬嚎鐨勭殑绔欏彴搴撲綅鍚嶇О锛屼緥濡倃ork6銆亀ork8
+            /// 璇锋眰涓婄嚎/涓嬬嚎鐨勭殑绔欏彴搴撲綅鍚嶇О,渚嬪work6,work8
             /// </summary>
             public string station_name { get; set; }
 
@@ -177,7 +175,7 @@
             [JsonProperty("n_num")]
             public int Num { get; set; }
             /// <summary>
-            /// 璧风偣璐т綅淇℃伅锛堣捣鐐硅揣浣嶈揣鍖鸿姹傦細MXCZQ 婊$鎿嶄綔鍖猴級
+            /// 璧风偣璐т綅淇℃伅 (璧风偣璐т綅璐у尯瑕佹眰:MXCZQ 婊$鎿嶄綔鍖� 
             /// </summary>
             [JsonProperty("s_start_loc")]
             public string StartLoc { get; set; }
@@ -193,17 +191,17 @@
             [JsonProperty("cntr_code")]
             public string CntrCode { get; set; }
             /// <summary>
-            /// 瀹瑰櫒绫诲瀷锛堝繀椤讳负 '绌烘墭鐩樷� 鎴�鈥樼┖濂借繍绠�锛�+            /// 瀹瑰櫒绫诲瀷 (蹇呴』涓�'绌烘墭鐩樷� 鎴�鈥樼┖濂借繍绠�) 
             /// </summary>
             [JsonProperty("cntr_type")]
             public string CntrType { get; set; }
             /// <summary>
-            /// 缁堢偣搴撳尯缂栫爜锛堟墭鐩樻槸 KTCFQ 绌烘墭瀛樻斁鍖猴紱濂借繍绠辨槸 CXHJQ 绌虹璐ф灦鍖猴級
+            /// 缁堢偣搴撳尯缂栫爜 (鎵樼洏鏄�KTCFQ 绌烘墭瀛樻斁鍖�濂借繍绠辨槸 CXHJQ 绌虹璐ф灦鍖� 
             /// </summary>
             [JsonProperty("end_area")]
             public string EndArea { get; set; }
             /// <summary>
-            /// 璧风偣璐т綅锛堟墭鐩樻槸 KTJBQ 绌烘墭鍏ュ簱鎺ラ┏鍖猴紱濂借繍绠辨槸 KXJBQ 绌虹鍏ュ簱鎺ラ┏鍖猴級
+            /// 璧风偣璐т綅 (鎵樼洏鏄�KTJBQ 绌烘墭鍏ュ簱鎺ラ┏鍖�濂借繍绠辨槸 KXJBQ 绌虹鍏ュ簱鎺ラ┏鍖� 
             /// </summary>
             [JsonProperty("start_loc")]
             public string StartLoc { get; set; }
@@ -275,7 +273,7 @@
             [JsonProperty("cntr_code")]
             public string CntrCode { get; set; }
             /// <summary>
-            /// 涓嶅悎鏍肩Щ搴撶粓鐐瑰簱鍖猴紙蹇呴』鏄�CJYCQ 鎶芥寮傚父鍖猴級
+            /// 涓嶅悎鏍肩Щ搴撶粓鐐瑰簱鍖�(蹇呴』鏄�CJYCQ 鎶芥寮傚父鍖� 
             /// </summary>
             [JsonProperty("end_area")]
             public string EndArea { get; set; }
@@ -368,17 +366,17 @@
             [JsonProperty("qualityGrade")]
             public string QualityGrade { get; set; }
             /// <summary>
-            /// 鏂欑缂栧彿锛堝緟瀹氾級
+            /// 鏂欑缂栧彿 (寰呭畾) 
             /// </summary>
             [JsonProperty("cntrCode")]
             public string CntrCode { get; set; }
             /// <summary>
-            /// 鐗╂枡鏁伴噺锛堝緟瀹氾級
+            /// 鐗╂枡鏁伴噺 (寰呭畾) 
             /// </summary>
             [JsonProperty("itemNum")]
             public int ItemNum { get; set; }
             ///// <summary>
-            ///// 浜х嚎鍙凤紙寰呭畾锛屽ソ杩愮鏈�鏉′骇绾匡紝瀵瑰簲2涓笅绾胯揣浣嶏紝杩欓噷鏆傚畾涓猴細3鍜�锛�+            ///// 浜х嚎鍙�(寰呭畾,濂借繍绠辨湁2鏉′骇绾�瀵瑰簲2涓笅绾胯揣浣�杩欓噷鏆傚畾涓�3鍜�) 
             ///// </summary>
             //[JsonProperty("prodLineId")]
             //public string ProdLineId { get; set; }
@@ -395,13 +393,13 @@
             public int Result { get; set; }
 
             /// <summary>
-            /// 鏄惁鎴愬姛 True-鎴愬姛锛孎alse锛氬け璐�+            /// 鏄惁鎴愬姛 True-鎴愬姛,False:澶辫触
             /// </summary>
             [JsonProperty("success")]
             public bool Success { get; set; }
 
             /// <summary>
-            /// 杩欓噷鏄痵tring绫诲瀷锛屽缁撴灉鐨勬弿杩�+            /// 杩欓噷鏄痵tring绫诲瀷,瀵圭粨鏋滅殑鎻忚堪
             /// </summary>
             [JsonProperty("data")]
             public string Data { get; set; }
@@ -418,7 +416,7 @@
             if (log) { LogHelper.Info(message); }
             return new MesResult {
                 Result = code,
-                Success = code == 0, // 浠呭綋code=0鏃讹紝success=true
+                Success = code == 0, // 浠呭綋code=0鏃�success=true
                 Data = message,
             };
         }
@@ -443,7 +441,7 @@
         /// </summary>
         public class ErpSendOutboundPlanInfo {
             /// <summary>
-            /// 璁″垝鍗曞彿锛堝敮涓�爣璇嗭級
+            /// 璁″垝鍗曞彿 (鍞竴鏍囪瘑) 
             /// </summary>
             public string jhdh { get; set; } = string.Empty;
 
@@ -705,7 +703,7 @@
 
         public class PickUpReturnErpInfo {
             /// <summary>
-            /// 璁″垝鍗曞彿锛堝敮涓�爣璇嗭級
+            /// 璁″垝鍗曞彿 (鍞竴鏍囪瘑) 
             /// </summary>
             public string jhdh { get; set; }
 
@@ -967,7 +965,7 @@
 
         public class CreateTaskReturnErpInfo {
             /// <summary>
-            /// 璁″垝鍗曞彿锛堝敮涓�爣璇嗭級
+            /// 璁″垝鍗曞彿 (鍞竴鏍囪瘑) 
             /// </summary>
             public string jhdh { get; set; }
 
diff --git a/api/DebugController.cs b/api/DebugController.cs
index d2f7485..57215cd 100644
--- a/api/DebugController.cs
+++ b/api/DebugController.cs
@@ -21,7 +21,7 @@
 
 namespace HH.WCS.Mobox3.DSZSH.api {
     /// <summary>
-    /// 娴嬭瘯鐢細濡傛灉椤圭洰涓鍜岃澶囧鎺ワ紝鍓嶆湡璁惧鏃犳硶娴嬭瘯锛岀敤鎺ュ彛妯℃嫙
+    /// 娴嬭瘯鐢�濡傛灉椤圭洰涓鍜岃澶囧鎺�鍓嶆湡璁惧鏃犳硶娴嬭瘯,鐢ㄦ帴鍙fā鎷�     /// </summary>
     [RoutePrefix("api")]
     public class DebugController : ApiController {
@@ -90,7 +90,7 @@
         }
 
         /// <summary>
-        /// DEBUG锛氭ā鎷熻緭閫佺嚎浜х嚎婊℃墭鐩樹笅绾挎祦绋�+        /// DEBUG:妯℃嫙杈撻�绾夸骇绾挎弧鎵樼洏涓嬬嚎娴佺▼
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
@@ -101,7 +101,7 @@
         }
 
         /// <summary>
-        /// DEBUG锛氭ā鎷熶汉宸ュ皢鏂欑鎼繍鍒颁骇绾夸笂绾垮彛锛堢洿鎺ヤ慨鏀规暟鎹簱锛�+        /// DEBUG:妯℃嫙浜哄伐灏嗘枡绠辨惉杩愬埌浜х嚎涓婄嚎鍙�(鐩存帴淇敼鏁版嵁搴� 
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
@@ -111,23 +111,23 @@
 
             var db = new SqlHelper<object>().GetInstance();
             try {
-                // 鏌ヨ璧风偣璐т綅锛氭暟閲�0
+                // 鏌ヨ璧风偣璐т綅:鏁伴噺=0
                 var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
                     .Where((l,c) => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.S_CODE == model.StartLoc && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == model.CntrCode).First();
                 if (startLoc == null) {
-                    return $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'锛佽姹傦細閿佺姸鎬�'鏃�锛屽綋鍓嶅鍣ㄦ暟閲�1";
+                    return $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'!瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=1";
                 }
 
                 // 鏌ヨ缁堢偣璐т綅
-                // Order锛氭寜璐т綅灞傛暟锛屼粠灏忓埌澶ф帓鍒�+                // Order:鎸夎揣浣嶅眰鏁�浠庡皬鍒板ぇ鎺掑垪
                 var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.N_CURRENT_NUM == 0).First();
                 if (endLoc == null) {
-                    return $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0";
+                    return $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�瑕佹眰:閿佺姸鎬�'鏃�,褰撳墠瀹瑰櫒鏁伴噺=0";
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == model.CntrCode).First() ;
                 if (locCntrRel == null) {
-                    return $"璇ュ鍣ㄤ笉瀛樺湪缁戝畾鐨勮揣浣嶏紒";
+                    return $"璇ュ鍣ㄤ笉瀛樺湪缁戝畾鐨勮揣浣�";
                 }
 
                 locCntrRel.S_LOC_CODE = model.StartLoc;
@@ -140,7 +140,7 @@
                         db.Updateable(locCntrRel).ExecuteCommand() <= 0) {
                         
                         tran.RollbackTran();
-                        return "鏁版嵁搴撴搷浣滃け璐ワ紒";
+                        return "鏁版嵁搴撴搷浣滃け璐�";
                     }
 
                     tran.CommitTran() ;
@@ -154,7 +154,7 @@
         }
 
         /// <summary>
-        /// DEBUG锛氭ā鎷烢rp涓嬪彂鍑哄簱璁″垝鍗�+        /// DEBUG:妯℃嫙Erp涓嬪彂鍑哄簱璁″垝鍗�         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
@@ -175,7 +175,7 @@
         }
 
         /// <summary>
-        /// 锛堝唴閮ㄦ柟娉曡鍕胯皟鐢級妯℃嫙鍙栬揣瀹屾垚鍙嶉Erp鍥炴姤缁撴灉锛堥粯璁や负success锛�+        ///  (鍐呴儴鏂规硶璇峰嬁璋冪敤) 妯℃嫙鍙栬揣瀹屾垚鍙嶉Erp鍥炴姤缁撴灉 (榛樿涓簊uccess) 
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
@@ -196,7 +196,7 @@
         }
 
         /// <summary>
-        /// 锛堝唴閮ㄦ柟娉曡鍕胯皟鐢級妯℃嫙浠诲姟鍒涘缓瀹屾垚鍙嶉Erp鍥炴姤缁撴灉锛堥粯璁や负success锛�+        ///  (鍐呴儴鏂规硶璇峰嬁璋冪敤) 妯℃嫙浠诲姟鍒涘缓瀹屾垚鍙嶉Erp鍥炴姤缁撴灉 (榛樿涓簊uccess) 
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
@@ -225,15 +225,15 @@
 
     public class TestErpSendOutboundPlanInfo {
         /// <summary>
-        /// 鍑哄簱璁″垝鍗曞彿锛堣鍒掑崟鍙�jhdh锛�+        /// 鍑哄簱璁″垝鍗曞彿 (璁″垝鍗曞彿 jhdh) 
         /// </summary>
         public string PlanNo { get; set; } = string.Empty;
         /// <summary>
-        /// 鐗╂枡缂栫爜锛堜骇鍝佷唬鐮�cpdm锛�+        /// 鐗╂枡缂栫爜 (浜у搧浠g爜 cpdm) 
         /// </summary>
         public string ItemCode { get; set; } = string.Empty;
         /// <summary>
-        /// 鐗╂枡鏁伴噺锛堟淳瑁呬欢鏁�pzjs锛�+        /// 鐗╂枡鏁伴噺 (娲捐浠舵暟 pzjs) 
         /// </summary>
         public float ItemNum { get; set; } = 0;
     }
@@ -245,11 +245,11 @@
 
     public class AddInboundTaskInfo {
         /// <summary>
-        /// 鐗╂枡缂栫爜锛堟殏鏃舵病鐢級
+        /// 鐗╂枡缂栫爜 (鏆傛椂娌$敤) 
         /// </summary>
         public string ItemCode { get; set; }
         /// <summary>
-        /// 鎵规鍙凤紙鏆傛椂娌$敤锛�+        /// 鎵规鍙�(鏆傛椂娌$敤) 
         /// </summary>
         public string BatchNo { get; set; }
         /// <summary>
@@ -263,7 +263,7 @@
     }
 
     /// <summary>
-    /// 妯℃嫙 AGV 浼犻�淇″彿锛岀敤浜庢洿鏀逛换鍔$姸鎬�+    /// 妯℃嫙 AGV 浼犻�淇″彿,鐢ㄤ簬鏇存敼浠诲姟鐘舵�
     /// </summary>
     public class UpdateTaskState {
         /// <summary>
@@ -286,7 +286,7 @@
         /// </summary>
         public string ForkliftNo { get; set; }
         /// <summary>
-        /// AGV 涓嬩竴鐘舵�锛堜换鍔″洖鎶ュ彿锛�+        /// AGV 涓嬩竴鐘舵� (浠诲姟鍥炴姤鍙� 
         /// </summary>
         public int NextState { set; get; } = 0;
     }
diff --git a/api/MoboxController.cs b/api/MoboxController.cs
index 2f09344..059da11 100644
--- a/api/MoboxController.cs
+++ b/api/MoboxController.cs
@@ -41,8 +41,8 @@
             else if (model.CntrType == "绌哄ソ杩愮") {
                 return ApiHelper.EmptyInboundGoodpack(model);
             }
-            else { // PDA鍓嶇涓嬫媺閫夊崟闄愬埗锛屾晠鐞嗚涓婁笉浼氳繘鍏ヨ繖涓祦绋�-                return NewSimpleResult(-1, $"瀹瑰櫒绫诲瀷'{model.CntrType}'涓嶅悎娉曪紒瑕佹眰锛氱被鍨�['绌烘墭鐩�,'绌哄ソ杩愮']");
+            else { // PDA鍓嶇涓嬫媺閫夊崟闄愬埗,鏁呯悊璁轰笂涓嶄細杩涘叆杩欎釜娴佺▼
+                return NewSimpleResult(-1, $"瀹瑰櫒绫诲瀷'{model.CntrType}'涓嶅悎娉�瑕佹眰:绫诲瀷=['绌烘墭鐩�,'绌哄ソ杩愮']");
             }
         }
         
diff --git a/config/config.comment.json b/config/config.comment.json
index cc18744..5bddc0f 100644
--- a/config/config.comment.json
+++ b/config/config.comment.json
@@ -3,15 +3,15 @@
     "NdcApiUrl": "http://127.0.0.1:5201/api/order/", // NDC AGV鎺ュ彛鍦板潃
     "ErpApiUrl": "http://127.0.0.1:8901/api/", // ERP鎺ュ彛鍦板潃
     "ErpRoute": {
-        "CreateTaskReturn": "CreateTaskReturn", // 鏍规嵁ERP涓嬪彂鍑哄簱璁″垝锛屽垱寤轰换鍔″悗鍙嶉ERP鐨勬帴鍙�-        "PickUpReturn": "PickUpReturn"          // 鏍规嵁ERP涓嬪彂鍑哄簱璁″垝锛孉GV鍙栬揣鍚庡弽棣圗RP鐨勬帴鍙�+        "CreateTaskReturn": "CreateTaskReturn", // 鏍规嵁ERP涓嬪彂鍑哄簱璁″垝,鍒涘缓浠诲姟鍚庡弽棣圗RP鐨勬帴鍙�+        "PickUpReturn": "PickUpReturn"          // 鏍规嵁ERP涓嬪彂鍑哄簱璁″垝,AGV鍙栬揣鍚庡弽棣圗RP鐨勬帴鍙�     },
     "SqlServer": "Data Source=192.168.1.87;Initial Catalog=AMS_OIMobox;User ID=sa;Password=123456;", // 鏁版嵁搴撻厤缃�-    "TaskInfos": [ // 浠诲姟淇℃伅锛堝悕绉般�璧风偣璐у尯銆佺粓鐐硅揣鍖猴級
+    "TaskInfos": [ // 浠诲姟淇℃伅 (鍚嶇О,璧风偣璐у尯,缁堢偣璐у尯) 
         {
-            "TaskName": "婊℃墭涓嬬嚎鍏ュ簱", // 浠诲姟鍚嶇О锛堝彲浠ユ洿鏀癸紝浣嗗悇浠诲姟鐩稿浣嶇疆涓嶈兘鏇存敼锛�-            "StartAreas": [ "BZQ" ], // 璧风偣璐у尯缂栧彿锛氬寘瑁呭尯
-            "EndAreas": [ "MTHJQ" ] // 缁堢偣璐у尯缂栧彿锛氭弧鎵樿揣鏋跺尯
+            "TaskName": "婊℃墭涓嬬嚎鍏ュ簱", // 浠诲姟鍚嶇О (鍙互鏇存敼,浣嗗悇浠诲姟鐩稿浣嶇疆涓嶈兘鏇存敼) 
+            "StartAreas": [ "BZQ" ], // 璧风偣璐у尯缂栧彿:鍖呰鍖�+            "EndAreas": [ "MTHJQ" ] // 缁堢偣璐у尯缂栧彿:婊℃墭璐ф灦鍖�         },
         {
             "TaskName": "婊$涓嬬嚎鍏ュ簱",
@@ -20,8 +20,8 @@
         },
         {
             "TaskName": "鎴愬搧鑳跺嚭搴�,
-            "StartAreas": [ "MTHJQ", "MXHJQ", "HCBHQ", "QCBHQ" ], // 婊℃墭璐ф灦鍖恒�婊$璐ф灦鍖恒�鐏溅澶囪揣鍖恒�姹借溅澶囪揣鍖�-            "EndAreas": [ "HCCKQ", "QCCKQ" ] // 鐏溅鍑哄簱鍖恒�姹借溅鍑哄簱鍖�+            "StartAreas": [ "MTHJQ", "MXHJQ", "HCBHQ", "QCBHQ" ], // 婊℃墭璐ф灦鍖�婊$璐ф灦鍖�鐏溅澶囪揣鍖�姹借溅澶囪揣鍖�+            "EndAreas": [ "HCCKQ", "QCCKQ" ] // 鐏溅鍑哄簱鍖�姹借溅鍑哄簱鍖�         },
         {
             "TaskName": "绌烘墭涓婄嚎鍑哄簱",
@@ -40,19 +40,19 @@
         },
         {
             "TaskName": "绌虹鍏ュ簱",
-            "StartAreas": [ "KXJBQ1", "KXJBQ2" ], // 绌虹鍏ュ簱鎺ラ┏鍖�銆�
+            "StartAreas": [ "KXJBQ1", "KXJBQ2" ], // 绌虹鍏ュ簱鎺ラ┏鍖�,2
             "EndAreas": [ "KXHJQ" ] // 绌虹璐ф灦鍖�         },
         {
             "TaskName": "鎶芥鍑哄簱",
-            "StartAreas": [ "MTHJQ", "MXHJQ" ], // 婊℃墭璐ф灦鍖恒�婊$璐ф灦鍖�+            "StartAreas": [ "MTHJQ", "MXHJQ" ], // 婊℃墭璐ф灦鍖�婊$璐ф灦鍖�             "EndAreas": [ "CJQ" ] // 鎶芥鍖�         },
         {
             "TaskName": "鎶芥鍚堟牸鍥炲簱",
             "StartAreas": [ "CJQ" ], // 鎶芥鍖�-            "EndAreas_Pallet": [ "MTHJQ" ], // 缁堢偣璐у尯锛堟墭鐩橈級锛氭弧鎵樿揣鏋跺尯
-            "EndAreas_Goodpack": [ "MXHJQ" ] // 缁堢偣璐у尯锛堝ソ杩愮锛夛細婊$璐ф灦鍖�+            "EndAreas_Pallet": [ "MTHJQ" ], // 缁堢偣璐у尯 (鎵樼洏) :婊℃墭璐ф灦鍖�+            "EndAreas_Goodpack": [ "MXHJQ" ] // 缁堢偣璐у尯 (濂借繍绠� :婊$璐ф灦鍖�         },
         {
             "TaskName": "鎶芥涓嶅悎鏍肩Щ搴�,
@@ -69,13 +69,13 @@
             "TaskName": "绉诲簱"
         }
     ],
-    "ProductionLines": [ // 浜х嚎淇℃伅锛堝緟瀹氾紝鏍规嵁鍚庨潰闇�眰鍐嶆洿鏀癸級
+    "ProductionLines": [ // 浜х嚎淇℃伅 (寰呭畾,鏍规嵁鍚庨潰闇�眰鍐嶆洿鏀� 
         {
             "Id": "1", // 浜х嚎缂栧彿
             "Name": "鎵樼洏浜х嚎1", // 浜х嚎鍚嶇О
             "PlcIp": "127.0.0.1", // 浜х嚎IP
             "PlcPort": 502, // 浜х嚎绔彛
-            "SlaveId": 1, // 浜х嚎modbus slave id锛堟牴鎹疄闄呮儏鍐碉級
+            "SlaveId": 1, // 浜х嚎modbus slave id (鏍规嵁瀹為檯鎯呭喌) 
             "OnLoc": [ "BZQ-1-1" ], // 涓婄嚎璐т綅
             "OffLoc": [ "BZQ-1-2" ] // 涓嬬嚎璐т綅
         },
diff --git a/core/Monitor.cs b/core/Monitor.cs
index 4165a59..65bcc53 100644
--- a/core/Monitor.cs
+++ b/core/Monitor.cs
@@ -33,10 +33,10 @@
                     //TcpClientHelper.Link("127.0.0.1", 8550); // 鐢ㄤ簬娴嬭瘯
                     TcpClientHelper.Link(prod.PlcIp, prod.PlcPort);
 
-                    // TCPClient浼犻�淇℃伅鐨勬椂鍊欙紝涓嶈鐢ㄦ柇鐐归樆濉炵▼搴�+                    // TCPClient浼犻�淇℃伅鐨勬椂鍊�涓嶈鐢ㄦ柇鐐归樆濉炵▼搴�                     // {"item_code":"CG1001","batch_no":"BN1001","cntr_code":"CN2505111"}
                     if (!TcpClientHelper.TryReadProductionLine(out byte[] read)) {
-                        info = $"娴嬭瘯{prod.Id}鍙蜂骇绾縶prod.PlcIp}:{prod.PlcPort}锛氳鍙栦骇绾夸俊鎭け璐�;
+                        info = $"娴嬭瘯{prod.Id}鍙蜂骇绾縶prod.PlcIp}:{prod.PlcPort}:璇诲彇浜х嚎淇℃伅澶辫触";
                         LogHelper.Info(info);
                         continue;
                     }
@@ -72,20 +72,14 @@
 
         public static void CheckOutboundOrder() {
             var db = new SqlHelper<object>().GetInstance();
-            var info = "";
-
             var taskInfo = Settings.GetTaskInfo(ETask.C鎴愬搧鑳跺嚭搴�;
-            var taskName = taskInfo.TaskName;
+            var taskName = "鍑哄簱";
+            const string preLog = "杞:鍑哄簱:";
 
             try {
-                var orderList = db.Queryable<TN_Outbound_Order>()
-                    .Where(c => c.N_B_STATE == 1)
-                    .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc)
-                    .ToList();
-
+                var orderList = db.Queryable<TN_Outbound_Order>().Where(c => c.N_B_STATE == 1).OrderBy(c => c.T_CREATE).ToList();
                 if (orderList.Count == 0) {
-                    info = $"杞锛歿taskName}锛氭殏鏃犲緟鎵ц鐨剓taskName}鍗�;
-                    LogHelper.Info(info);
+                    LogHelper.Debug(preLog + $"鏆傛棤寰呮墽琛岀殑{taskName}鍗�);
                     return;
                 }
 
@@ -93,12 +87,9 @@
 
                 var detailList = new List<TN_Outbound_Detail>();
                 foreach (var order in orderList) {
-                    var doingCount = db.Queryable<TN_Outbound_Detail>()
-                        .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�-                    var allCount = db.Queryable<TN_Outbound_Detail>()
-                        .Count(d => d.S_OO_NO == order.S_NO);
-                    info = $"杞锛歿taskName}锛氱粺璁taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}";
-                    LogHelper.Info(info);
+                    var doingCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2);
+                    var allCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == order.S_NO);
+                    LogHelper.Info(preLog + $"缁熻{taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙�{doingCount}/{allCount}");
 
                     if (doingCount == allCount) {
                         order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц
@@ -111,8 +102,7 @@
                         .First();
 
                     if (lastDetail != null) {
-                        info = $"杞锛歿taskName}锛歿taskName}鍗�{order.S_NO}'涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑锛� + JsonConvert.SerializeObject(lastDetail);
-                        LogHelper.Info(info);
+                        LogHelper.Info(preLog + $"{taskName}鍗�{order.S_NO}'涓婁竴涓换鍔′粛鍦ㄨ繘琛屼腑:" + JsonConvert.SerializeObject(lastDetail));
                         continue;
                     }
 
@@ -121,8 +111,7 @@
                         .First();
 
                     if (outboundDetail == null) {
-                        info = $"杞锛歿taskName}锛氫粛鏈変换鍔℃湭鎵ц瀹屾垚锛屼絾褰撳墠娌℃湁宸蹭笅鍙戠殑浠诲姟";
-                        LogHelper.Info(info);
+                        LogHelper.Info(preLog + $"浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�");
                         continue;
                     }
 
@@ -135,16 +124,10 @@
                 }
 
                 foreach (var detail in detailList) {
-                    var startLoc = db.Queryable<TN_Location>()
-                        .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
-                        .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE) // 鏍规嵁瀹瑰櫒鍙锋悳绱㈣捣鐐硅揣浣�-                        .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣
-                        .Where(l => l.N_CURRENT_NUM == 1)
-                        .First();
+                    var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where((l, c) => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y" && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == detail.S_CNTR_CODE).First();
 
                     if (startLoc == null) {
-                        info = $"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�;
-                        LogHelper.Info(info);
+                        LogHelper.Info(preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�");
                         continue;
                     }
 
@@ -154,8 +137,7 @@
                         .Where(a => a.N_CURRENT_NUM == 0).First();
 
                     if (endLoc == null) {
-                        info = $"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛佸崟鍙�{detail.S_OO_NO}'瑕佹眰缁堢偣搴撳尯涓�{detail.S_END_AREA}'";
-                        LogHelper.Info(info);
+                        LogHelper.Info(preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�鍗曞彿'{detail.S_OO_NO}'瑕佹眰缁堢偣搴撳尯涓�{detail.S_END_AREA}'");
                         continue;
                     }
                     
@@ -176,50 +158,30 @@
                     using (var tran = db.Ado.UseTran()) {
                         if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"杞锛歿taskName}锛氫慨鏀规槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�;
-                            LogHelper.Info(info);
+                            LogHelper.Info($"杞:{taskName}:淇敼鏄庣粏琛ㄧ姸鎬佷负瀹屾垚--澶辫触!");
                             continue;
                         }
 
-                        if (db.Updateable(startLoc).UpdateColumns(it => new {
-                            it.N_LOCK_STATE,
-                            it.S_LOCK_STATE,
-                            it.S_LOCK_OP,
-                            it.T_MODIFY,
-                            it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚庯紝灏嗚揣浣嶇姸鎬佹洿鏂�-                        }).ExecuteCommand() <= 0) {
+                        // 鏇存柊[璧风偣/缁堢偣]閿佺姸鎬�鍒涘缓浠诲姟
+                        if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�;
-                            LogHelper.Info(info);
-                            continue;
+                            LogHelper.Info(preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                         }
-
-                        if (db.Updateable(endLoc).UpdateColumns(it => new {
-                            it.N_LOCK_STATE,
-                            it.S_LOCK_STATE,
-                            it.S_LOCK_OP,
-                            it.T_MODIFY,
-                        }).ExecuteCommand() <= 0) {
+                        if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�;
-                            LogHelper.Info(info);
-                            continue;
+                            LogHelper.Info(preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                         }
-
                         if (db.Insertable(task).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}";
-                            LogHelper.Info(info);
-                            continue;
+                            LogHelper.Info(preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                         }
 
+                        // 鎻愪氦鏁版嵁搴撴洿鏀�                         tran.CommitTran();
-                        info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}";
-                        LogHelper.Info(info);
-                        //continue;
+                        LogHelper.Info(preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛!浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{task.S_CNTR_CODE},璧风偣={task.S_START_LOC},缁堢偣={task.S_END_LOC}");
                     }
 
-                    // 濡傛灉褰撳墠鍑哄簱鍗曟槑缁嗘槸ERP涓嬪彂鐨勶紝浠诲姟鍒涘缓瀹屾垚鍙嶉璐т綅淇℃伅
+                    // 濡傛灉褰撳墠鍑哄簱鍗曟槑缁嗘槸ERP涓嬪彂鐨�浠诲姟鍒涘缓瀹屾垚鍙嶉璐т綅淇℃伅
                     if (detail.S_BS_TYPE == "ERP") {
                         //var createTaskReturnErpTask = Task.Run(() => {
                         //    CreateTaskReturnErp(task);
@@ -231,8 +193,7 @@
 
             }
             catch (Exception ex) {
-                info = $"杞锛歿taskName}锛氬彂鐢熶簡寮傚父锛歿ex.Message}";
-                LogHelper.InfoEx(ex);
+                LogHelper.InfoEx(ex, preLog);
             }
         }
 
@@ -242,25 +203,20 @@
 
             var taskInfo = Settings.GetTaskInfo(ETask.C鎶芥鍑哄簱);
             var taskName = taskInfo.TaskName;
+            const string preLog = "杞:鎶芥:";
 
             try {
-                var orderList = db.Queryable<TN_Spot_Check>()
-                    .Where(c => c.N_B_STATE == 1)
-                    .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc)
-                    .ToList();
-
+                var orderList = db.Queryable<TN_Spot_Check>().Where(c => c.N_B_STATE == 1).OrderBy(c => c.T_CREATE).ToList();
                 if (orderList.Count == 0) {
-                    LogHelper.Info($"杞锛歿taskName}锛氭殏鏃犲緟鎵ц鐨剓taskName}鍗�);
+                    LogHelper.Debug($"杞:{taskName}:鏆傛棤寰呮墽琛岀殑{taskName}鍗�);
                     return;
                 }
 
                 var detailList = new List<TN_SpotCheck_Detail>();
                 foreach (var order in orderList) {
-                    var doingCount = db.Queryable<TN_SpotCheck_Detail>()
-                        .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�-                    var allCount = db.Queryable<TN_SpotCheck_Detail>()
-                        .Count(d => d.S_OO_NO == order.S_NO);
-                    LogHelper.Info($"杞锛歿taskName}锛氱粺璁taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}");
+                    var doingCount = db.Queryable<TN_SpotCheck_Detail>().Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2);
+                    var allCount = db.Queryable<TN_SpotCheck_Detail>().Count(d => d.S_OO_NO == order.S_NO);
+                    LogHelper.Info(preLog + $"缁熻{taskName}鍗�{order.S_NO}'浠诲姟宸蹭笅鍙�{doingCount}/{allCount}");
 
                     if (doingCount == allCount) {
                         order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц
@@ -273,7 +229,7 @@
                         .ToList();
 
                     if (checkDetailList.Count == 0) {
-                        LogHelper.Info($"杞锛歿taskName}锛氫粛鏈変换鍔℃湭鎵ц瀹屾垚锛屼絾褰撳墠娌℃湁宸蹭笅鍙戠殑浠诲姟");
+                        LogHelper.Info($"杞:{taskName}:浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�);
                         continue;
                     }
 
@@ -283,23 +239,21 @@
                 }
 
                 foreach (var detail in detailList) {
-                    var startLoc = db.Queryable<TN_Location>()
-                        .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
-                        .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE)
-                        .First();
+                    var startLoc = db.Queryable<TN_Location>() .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
+                        .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE).First();
 
                     if (startLoc == null) {
-                        LogHelper.Info($"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑璧风偣璐т綅锛�);
+                        LogHelper.Info($"杞:{taskName}:娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�");
                         continue;
                     }
 
                     var endLoc = db.Queryable<TN_Location>()
                         .Where(l => l.S_AREA_CODE == detail.S_END_AREA)
-                        .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣
+                        .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�:鏈笂閿�                         .Where(a => a.N_CURRENT_NUM == 0).First();
 
                     if (endLoc == null) {
-                        LogHelper.Info($"杞锛歿taskName}锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛�);
+                        LogHelper.Info($"杞:{taskName}:娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�");
                         continue;
                     }
 
@@ -309,57 +263,44 @@
                     var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName);
                     task.S_OP_CODE = detail.S_OO_NO;
 
-                    WCSHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�-                    WCSHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿�+                    WCSHelper.LockStartLoc(ref startLoc);
+                    WCSHelper.LockEndLoc(ref endLoc);
 
                     using (var tran = db.Ado.UseTran()) {
                         if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            LogHelper.Info($"杞锛歿taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�);
+                            LogHelper.Info($"杞:{taskName}:淇敼{taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触!");
                             continue;
                         }
 
-                        if (db.Updateable(startLoc).UpdateColumns(it => new {
-                            it.N_LOCK_STATE,
-                            it.S_LOCK_STATE,
-                            it.S_LOCK_OP,
-                            it.T_MODIFY,
-                            it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚庯紝灏嗚揣浣嶇姸鎬佹洿鏂�-                        }).ExecuteCommand() <= 0) {
+                        if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�;
-                            LogHelper.Info(info);
+                            LogHelper.Info(preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�");
                             continue;
                         }
 
-                        if (db.Updateable(endLoc).UpdateColumns(it => new {
-                            it.N_LOCK_STATE,
-                            it.S_LOCK_STATE,
-                            it.S_LOCK_OP,
-                            it.T_MODIFY,
-                        }).ExecuteCommand() <= 0) {
+                        if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�;
-                            LogHelper.Info(info);
+                            LogHelper.Info(preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�");
                             continue;
                         }
 
                         if (db.Insertable(task).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}";
+                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}";
                             LogHelper.Info(info);
                             continue;
                         }
 
                         tran.CommitTran();
-                        info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}";
+                        info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}";
                         LogHelper.Info(info);
                         continue;
                     }
                 }
             }
             catch (Exception ex) {
-                LogHelper.InfoEx(ex);
+                LogHelper.InfoEx(ex, preLog);
             }
         }
 
@@ -369,6 +310,7 @@
 
             var taskInfo = Settings.GetTaskInfo(ETask.Y绉诲簱);
             var taskName = taskInfo.TaskName;
+            const string preLog = "杞:绉诲簱:";
 
             try {
                 var orderList = db.Queryable<TN_Relocation_List>()
@@ -377,7 +319,7 @@
                     .ToList();
 
                 if (orderList.Count == 0) {
-                    LogHelper.Info($"杞锛歿taskName}锛氭殏鏃犲緟鎵ц鐨剓taskName}鍗�);
+                    LogHelper.Debug($"杞:{taskName}:鏆傛棤寰呮墽琛岀殑{taskName}鍗�);
                     return;
                 }
 
@@ -387,7 +329,7 @@
                         .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�                     var allCount = db.Queryable<TN_RelocationList_Detail>()
                         .Count(d => d.S_OO_NO == order.S_NO);
-                    LogHelper.Info($"杞锛歿taskName}锛氱粺璁taskName}鍗�{order.S_NO}浠诲姟宸蹭笅鍙戯細{doingCount}/{allCount}");
+                    LogHelper.Info($"杞:{taskName}:缁熻{taskName}鍗�{order.S_NO}浠诲姟宸蹭笅鍙�{doingCount}/{allCount}");
 
                     if (doingCount == allCount) {
                         order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц
@@ -400,7 +342,7 @@
                         .ToList();
 
                     if (checkDetailList.Count == 0) {
-                        LogHelper.Info($"杞锛歿taskName}锛氫粛鏈変换鍔℃湭鎵ц瀹屾垚锛屼絾褰撳墠娌℃湁宸蹭笅鍙戠殑浠诲姟");
+                        LogHelper.Info($"杞:{taskName}:浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�);
                         continue;
                     }
 
@@ -413,23 +355,23 @@
                     var startLoc = db.Queryable<TN_Location>()
                         .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE)
                         .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE)
-                        .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣
+                        .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�:鏈笂閿�                         .Where(l => l.N_CURRENT_NUM == 1)
                         .First();
 
                     if (startLoc == null) {
-                        info = $"杞锛歿taskName}锛氭病鏈夋壘鍒板鍣ㄥ彿={detail.S_CNTR_CODE}鐨勮捣鐐硅揣浣嶏紒闇�婊¤冻锛氭湭涓婇攣銆佸綋鍓嶅鍣ㄦ暟閲�1";
+                        info = $"杞:{taskName}:娌℃湁鎵惧埌瀹瑰櫒鍙�{detail.S_CNTR_CODE}鐨勮捣鐐硅揣浣�闇�婊¤冻:鏈笂閿�褰撳墠瀹瑰櫒鏁伴噺=1";
                         LogHelper.Info(info);
                         continue;
                     }
 
                     var endLoc = db.Queryable<TN_Location>()
                         .Where(l => l.S_AREA_CODE == detail.S_END_AREA)
-                        .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣
+                        .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�:鏈笂閿�                         .Where(a => a.N_CURRENT_NUM == 0).First();
 
                     if (endLoc == null) {
-                        info = $"杞锛歿taskName}锛氭病鏈夋壘鍒扮粓鐐硅揣浣�{detail.S_END_AREA}鐨勭粓鐐硅揣浣嶏紒闇�婊¤冻锛氭湭涓婇攣銆佸綋鍓嶅鍣ㄦ暟閲�0";
+                        info = $"杞:{taskName}:娌℃湁鎵惧埌缁堢偣璐т綅={detail.S_END_AREA}鐨勭粓鐐硅揣浣�闇�婊¤冻:鏈笂閿�褰撳墠瀹瑰櫒鏁伴噺=0";
                         LogHelper.Info(info);
                         continue;
                     }
@@ -446,7 +388,7 @@
                     using (var tran = db.Ado.UseTran()) {
                         if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            LogHelper.Info($"杞锛歿taskName}锛氫慨鏀箋taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触锛�);
+                            LogHelper.Info($"杞:{taskName}:淇敼{taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触!");
                             continue;
                         }
 
@@ -455,10 +397,10 @@
                             it.S_LOCK_STATE,
                             it.S_LOCK_OP,
                             it.T_MODIFY,
-                            it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚庯紝灏嗚揣浣嶇姸鎬佹洿鏂�+                            it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚�灏嗚揣浣嶇姸鎬佹洿鏂�                         }).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�;
+                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触:鏇存柊璧风偣璐т綅{startLoc.S_CODE}閿佺姸鎬佸け璐�;
                             LogHelper.Info(info);
                             continue;
                         }
@@ -470,27 +412,27 @@
                             it.T_MODIFY,
                         }).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�;
+                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触:鏇存柊缁堢偣璐т綅{endLoc.S_CODE}閿佺姸鎬佸け璐�;
                             LogHelper.Info(info);
                             continue;
                         }
 
                         if (db.Insertable(task).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}";
+                            info = $"鐢熸垚浠诲姟'{taskName}'澶辫触,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}";
                             LogHelper.Info(info);
                             continue;
                         }   
 
                         tran.CommitTran();
-                        info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}";
+                        info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}";
                         LogHelper.Info(info);
                         continue;
                     }
                 }
             }
             catch (Exception ex) {
-                LogHelper.InfoEx(ex);
+                LogHelper.InfoEx(ex, preLog);
             }
         }
 
@@ -505,7 +447,7 @@
                     .First();
 
                 if (plan == null) {
-                    info = $"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦紒";
+                    info = $"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦�";
                     LogHelper.Info(info);
                 }
 
@@ -514,13 +456,13 @@
                     .First();
 
                 if (cgDetail == null) {
-                    info = $"鐗╂枡缂栫爜涓嶅瓨鍦紒";
+                    info = $"鐗╂枡缂栫爜涓嶅瓨鍦�";
                     LogHelper.Info(info);
                 }
 
                 var model = new OtherModel.CreateTaskReturnErpInfo {
-                    jhdh = plan.JHDH , // 璁″垝鍗曞彿锛堝敮涓�爣璇嗭級
-                    ckzt = plan.CKZT , // 鍑哄簱鐘舵�锛堥渶瑕佽繑鍥烇級
+                    jhdh = plan.JHDH , // 璁″垝鍗曞彿 (鍞竴鏍囪瘑) 
+                    ckzt = plan.CKZT , // 鍑哄簱鐘舵� (闇�杩斿洖) 
                     jhlb = plan.JHLB , // 璁″垝绫诲埆
                     ckdh = plan.CKDH , // 鍙傝�鍗曞彿
                     cph = plan.CPH , // 杞︾墝鍙�@@ -531,9 +473,9 @@
                     cplb = plan.CPLB , // 浜у搧绫诲埆
                     cplbmx = plan.CPLBMX , // 浜у搧绫诲埆鏄庣粏
                     pp = plan.PP , // 鍝佺墝
-                    dj = plan.DJ , // 绛夌骇锛堥渶瑕佽繑鍥烇級
+                    dj = plan.DJ , // 绛夌骇 (闇�杩斿洖) 
                     gh = plan.GH , // 缃愬彿
-                    ph = plan.PH , // 鎵瑰彿锛堥渶瑕佽繑鍥烇級
+                    ph = plan.PH , // 鎵瑰彿 (闇�杩斿洖) 
                     bzlx = plan.BZLX , // 鍖呰绫诲瀷
                     pzdh = plan.PZDH , // 娲捐鍗曞彿
                     pzd_dw = plan.PZD_DW , // 娲捐鍗曞崟浣�@@ -546,15 +488,15 @@
                     pz_zfrq = plan.PZ_ZFRQ , // 娲捐浣滃簾鏃ユ湡
                     pz_bz = plan.PZ_BZ , // 娲捐澶囨敞
                     ckdbh = plan.CKDBH , // 鍑哄簱鍗曠紪鍙�-                    //sfjs = plan.SFJS , // 瀹炲彂浠舵暟锛堥渶瑕佽繑鍥烇級
-                    //sfsl = plan.SFSL , // 瀹炲彂鏁伴噺锛堥渶瑕佽繑鍥烇級
-                    //sfcs = plan.SFCS , // 瀹炲彂杞︽暟锛堥渶瑕佽繑鍥烇級
-                    //zcsj = plan.ZCSJ , // 瑁呰溅鏃堕棿锛堥渶瑕佽繑鍥烇級
-                    //jldw = plan.JLDW , // 璁¢噺鍗曚綅锛堥渶瑕佽繑鍥烇級
-                    //fhrq = plan.FHRQ , // 鍙戣揣鏃ユ湡锛堥渶瑕佽繑鍥烇級
-                    //ckdm = plan.CKDM , // 浠撳簱浠g爜锛堥渶瑕佽繑鍥烇級
-                    //fhr = plan.FHR , // 鍙戣揣浜猴紙闇�杩斿洖锛�-                    //czydm = plan.CZYDM , // 鎿嶄綔鍛橈紙闇�杩斿洖锛�+                    //sfjs = plan.SFJS , // 瀹炲彂浠舵暟 (闇�杩斿洖) 
+                    //sfsl = plan.SFSL , // 瀹炲彂鏁伴噺 (闇�杩斿洖) 
+                    //sfcs = plan.SFCS , // 瀹炲彂杞︽暟 (闇�杩斿洖) 
+                    //zcsj = plan.ZCSJ , // 瑁呰溅鏃堕棿 (闇�杩斿洖) 
+                    //jldw = plan.JLDW , // 璁¢噺鍗曚綅 (闇�杩斿洖) 
+                    //fhrq = plan.FHRQ , // 鍙戣揣鏃ユ湡 (闇�杩斿洖) 
+                    //ckdm = plan.CKDM , // 浠撳簱浠g爜 (闇�杩斿洖) 
+                    //fhr = plan.FHR , // 鍙戣揣浜�(闇�杩斿洖) 
+                    //czydm = plan.CZYDM , // 鎿嶄綔鍛�(闇�杩斿洖) 
                     shr_username = plan.SHR_USERNAME , // 瀹℃牳浜�                     shrq = plan.SHRQ , // 瀹℃牳鏃ユ湡
                     zfbj = plan.ZFBJ , // 浣滃簾鏍囪
@@ -563,14 +505,14 @@
                     shdw = plan.SHDW , // 鏀惰揣鍗曚綅
                     ysdw = plan.YSDW , // 杩愯緭鍗曚綅
                     lxr = plan.LXR , // 鑱旂郴浜�-                    //ry_zxg = plan.RY_ZXG , // 瑁呭嵏宸ワ紙闇�杩斿洖锛�-                    //ry_ccsj = plan.RY_CCSJ , // 鍙夎溅鍙告満锛堥渶瑕佽繑鍥烇級
+                    //ry_zxg = plan.RY_ZXG , // 瑁呭嵏宸�(闇�杩斿洖) 
+                    //ry_ccsj = plan.RY_CCSJ , // 鍙夎溅鍙告満 (闇�杩斿洖) 
                     erphx_jhdh = plan.ERPHX_JHDH , // erp浜よ揣鍗曞彿
                     erphx_wlbm = plan.ERPHX_WLBM , // erp鐗╂枡缂栫爜
                     erphx_wlmc = plan.ERPHX_WLMC , // erp鐗╂枡鍚嶇О
                     erphx_cjrq = plan.ERPHX_CJRQ , // erp鍒涘缓鏃ユ湡
-                    hw = plan.HW , // 璐т綅锛堥渶瑕佽繑鍥烇級
-                    hwzt  = plan.HWZT // 璐т綅鐘舵�锛堥渶瑕佽繑鍥烇級
+                    hw = plan.HW , // 璐т綅 (闇�杩斿洖) 
+                    hwzt  = plan.HWZT // 璐т綅鐘舵� (闇�杩斿洖) 
                 };
                 model.hw = task.S_START_LOC;
                 model.hwzt = "寰呭嚭搴�;
@@ -579,7 +521,7 @@
                 var jsonInfo = JsonConvert.SerializeObject(model);
                 var result = httpH.WebPost(Settings.ErpApiUrl + Settings.ErpRoute.CreateTaskReturn, jsonInfo);
 
-                LogHelper.InfoApi($"鍒涘缓浠诲姟瀹屾垚鍙嶉ERP鎺ュ彛锛岀粨鏋�{result}锛岃皟鐢ㄥ弬鏁帮細", model);
+                LogHelper.InfoApi($"鍒涘缓浠诲姟瀹屾垚鍙嶉ERP鎺ュ彛,缁撴灉={result},璋冪敤鍙傛暟:", model);
 
                 plan.HW = model.hw;
                 plan.HWZT = model.hwzt;
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index dd776f4..5f1e56a 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -22,26 +22,26 @@
 namespace HH.WCS.Mobox3.DSZSH.core {
     public class WCSCore {
         public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) {
-            const string preLog = "AGV锛氫换鍔$姸鎬佸洖鎶ワ細";
+            const string preLog = "AGV:浠诲姟鐘舵�鍥炴姤:";
             try {
                 if (model.state > 0) {
                     // AGV 鎵ц浠诲姟鐨勯�杈戝鐞�                     if (!AgvTaskProcessOk(model)) {
-                        // 鎵ц涓峅K锛岃鏄庢病鏈夋壘鍒颁换鍔�-                        return NewReturnResult(1, preLog + $"鏍规嵁浠诲姟鍙�{model.task_no}'鏈壘鍒板搴旂殑浠诲姟锛�);
+                        // 鎵ц涓峅K,璇存槑娌℃湁鎵惧埌浠诲姟
+                        return NewReturnResult(1, preLog + $"鏍规嵁浠诲姟鍙�{model.task_no}'鏈壘鍒板搴旂殑浠诲姟!");
                     }
                 }
 
-                return NewReturnResult(0, "success"); // 涓嶈繑鍥炶缁嗘垚鍔熸棩蹇楋紝閬垮厤NDC浠sg=success浣滀负鎴愬姛鍒ゅ畾锛堝弬鑰冨浗鑷級
+                return NewReturnResult(0, "success"); // 涓嶈繑鍥炶缁嗘垚鍔熸棩蹇�閬垮厤NDC浠sg=success浣滀负鎴愬姛鍒ゅ畾 (鍙傝�鍥借嚜) 
             }
             catch (Exception ex) {
-                return NewReturnResult(-1, $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewReturnResult(-1, $"鍙戠敓浜嗗紓甯�{ex.Message}\n\n{ex.StackTrace}\n");
             }
 
         }
 
         /// <summary>
-        /// 鎵ц AGV 浠诲姟锛屾煡璇笉鍒颁换鍔¤繑鍥�<see langword="false"/>
+        /// 鎵ц AGV 浠诲姟,鏌ヨ涓嶅埌浠诲姟杩斿洖 <see langword="false"/>
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
@@ -104,9 +104,9 @@
                     break;
             }
 
-            // 灏咥GV鎵ц鐘舵�锛屽姞鍏N_Task_Action琛ㄤ腑
+            // 灏咥GV鎵ц鐘舵�,鍔犲叆TN_Task_Action琛ㄤ腑
             WCSHelper.AddActionRecord(model.task_no, model.state, model.forklift_no, model.ext_data);
-            //璋冪敤绗笁鏂规帴鍙o紙濡傛灉鏈夛級TaskProcess.ReportStatus锛屾坊鍔犱换鍔″姩浣滃叧绯昏〃
+            //璋冪敤绗笁鏂规帴鍙�(濡傛灉鏈� TaskProcess.ReportStatus,娣诲姞浠诲姟鍔ㄤ綔鍏崇郴琛� 
             return true;
         }
@@ -116,19 +116,19 @@
             var info = "";
 
             try {
-                var cgDetail = new TN_CG_Detail(); // 濡傛灉娌℃湁淇℃伅锛岄粯璁ゅ氨鏄┖鍊硷紝鍙互鐩存帴濉叆锛屼笉闇�鍒ゆ柇
+                var cgDetail = new TN_CG_Detail(); // 濡傛灉娌℃湁淇℃伅,榛樿灏辨槸绌哄�,鍙互鐩存帴濉叆,涓嶉渶瑕佸垽鏂�                 
                 //var emptyTask = false; // 绌烘墭/绌虹浠诲姟
                 if (task.S_TYPE != ETask.K绌烘墭涓婄嚎鍑哄簱.Name() && task.S_TYPE != ETask.K绌烘墭鍏ュ簱.Name() &&
                     task.S_TYPE != ETask.K绌虹涓婄嚎鍑哄簱.Name() && task.S_TYPE != ETask.K绌虹鍏ュ簱.Name()) {
-                    // 闈炵┖鎵�绌虹浠诲姟锛堢┖鎵�绌虹浠诲姟鏃犳硶鍦–GDetail鏌ュ埌鐗╂枡淇℃伅锛�+                    // 闈炵┖鎵�绌虹浠诲姟 (绌烘墭/绌虹浠诲姟鏃犳硶鍦–GDetail鏌ュ埌鐗╂枡淇℃伅) 
                     //emptyTask= true;
                     cgDetail = db.Queryable<TN_CG_Detail>()
                         .Where(d => d.S_CNTR_CODE == task.S_CNTR_CODE)
                         .First();
 
                     if (cgDetail == null) {
-                        info = $"浠诲姟{task.S_CODE}瀹屾垚锛岃褰曞嚭鍏ュ簱瀛樺湪闂锛氭棤娉曞湪瀹瑰櫒璐у搧鏄庣粏琛ㄤ腑鎵惧埌鎵樼洏{task.S_CNTR_CODE}瀵瑰簲鐨勭墿鏂�;
+                        info = $"浠诲姟{task.S_CODE}瀹屾垚,璁板綍鍑哄叆搴撳瓨鍦ㄩ棶棰�鏃犳硶鍦ㄥ鍣ㄨ揣鍝佹槑缁嗚〃涓壘鍒版墭鐩榹task.S_CNTR_CODE}瀵瑰簲鐨勭墿鏂�;
                         LogHelper.Info(info);
                         //return;
                         cgDetail = new TN_CG_Detail() ;
@@ -136,7 +136,7 @@
                     }
                 }
 
-                var isInbound = false; // 鍏ュ簱绫诲瀷鐨勪换鍔★紙鍖呮嫭绉诲簱绫讳换鍔★級
+                var isInbound = false; // 鍏ュ簱绫诲瀷鐨勪换鍔�(鍖呮嫭绉诲簱绫讳换鍔� 
                 var inboundTasks = new List<string> {
                     ETask.M婊℃墭涓嬬嚎鍏ュ簱.Name(), ETask.M婊$涓嬬嚎鍏ュ簱.Name(), ETask.K绌烘墭鍏ュ簱.Name(), ETask.K绌虹鍏ュ簱.Name(),
                     ETask.C鎶芥鍚堟牸鍥炲簱.Name(), ETask.C鎶芥涓嶅悎鏍肩Щ搴�Name(), ETask.Y绉诲簱.Name()
@@ -159,7 +159,7 @@
                     S_ITEM_CODE = cgDetail.S_ITEM_CODE,
                     S_BATCH_NO = cgDetail.S_BATCH_NO,
                     S_ITEM_NAME = cgDetail.S_ITEM_NAME,
-                    S_LOC_CODE = isInbound ? task.S_END_LOC : task.S_START_LOC, // 鍏ュ簱璁板綍缁堢偣璐т綅锛屽嚭搴撹褰曡捣鐐硅揣浣�+                    S_LOC_CODE = isInbound ? task.S_END_LOC : task.S_START_LOC, // 鍏ュ簱璁板綍缁堢偣璐т綅,鍑哄簱璁板綍璧风偣璐т綅
                     S_CNTR_CODE = task.S_CNTR_CODE,
                     S_ITEM_SPEC = cgDetail.S_ITEM_SPEC,
                     S_NET_WEIGHT = cgDetail.S_NET_WEIGHT,
@@ -168,14 +168,14 @@
                     S_TASK_NO = task.S_CODE,
                     T_RECORD_TIME = DateTime.Now,
                     S_TYPE = task.S_TYPE,
-                    S_BS_CODE = task.S_BS_NO, // ERP鍗曞彿锛岄粯璁や负绌�+                    S_BS_CODE = task.S_BS_NO, // ERP鍗曞彿,榛樿涓虹┖
                     N_QTY = cgDetail.N_ITEM_NUM,
                     S_NO = task.S_OP_CODE, // 鍑哄簱/鎶芥/绉诲簱鍗�                 };
 
                 // 鏁版嵁搴撴搷浣�                 if (db.Insertable(record).ExecuteCommand() <= 0) {
-                    info = "鎻掑叆鍑哄叆搴撹褰曡〃澶辫触锛� + JsonConvert.SerializeObject(record);
+                    info = "鎻掑叆鍑哄叆搴撹褰曡〃澶辫触:" + JsonConvert.SerializeObject(record);
                     LogHelper.Info(info);
                     return;
                 }
@@ -195,7 +195,7 @@
         /// <returns></returns>
         public static ReturnResult SafetyInteraction(SafetyInteractionInfo model) {
             var db = new SqlHelper<object>().GetInstance();
-            const string preLog = "AGV锛氫骇绾垮畨鍏ㄤ氦浜掞細";
+            const string preLog = "AGV:浜х嚎瀹夊叏浜や簰:";
 
             try {
                 ModbusHelper.Relink();
@@ -233,13 +233,13 @@
                 //}
 
                 if (prodLineDevice.SystemState != 1) {
-                    return NewReturnResult(3, preLog + $"褰撳墠浜х嚎鏃犳硶涓嶢GV鑱斿姩锛氱姸鎬亄prodLineDevice.SystemState}");
+                    return NewReturnResult(3, preLog + $"褰撳墠浜х嚎鏃犳硶涓嶢GV鑱斿姩:鐘舵�{prodLineDevice.SystemState}");
                 }
 
                 // 璇锋眰鍙栬揣
                 if (model.apply_code == "5") {
                     if (prodLineDevice.FullOffline != 1) {
-                        return NewReturnResult(4, preLog + $"褰撳墠杈撻�绾挎弧鏂欎笅绾夸俊鍙蜂笉涓�锛屾棤娉曞彇璐�);
+                        return NewReturnResult(4, preLog + $"褰撳墠杈撻�绾挎弧鏂欎笅绾夸俊鍙蜂笉涓�,鏃犳硶鍙栬揣");
                     }
                     
                     if (!prodLineDevice.SetAgvPicking(1)) {
@@ -251,7 +251,7 @@
                 // 璇锋眰鍗歌揣
                 else if (model.apply_code == "1") {
                     if (prodLineDevice.AllowAgvPlacePallet != 1) {
-                        return NewReturnResult(6, preLog + $"褰撳墠杈撻�绾垮厑璁告斁鎵樼洏淇″彿涓嶄负1锛屾棤娉曟斁璐�);
+                        return NewReturnResult(6, preLog + $"褰撳墠杈撻�绾垮厑璁告斁鎵樼洏淇″彿涓嶄负1,鏃犳硶鏀捐揣");
                     }
 
                     if (!prodLineDevice.SetAgvPlacingPallet(1)) {
@@ -266,7 +266,7 @@
 
             }
             catch (Exception ex) {
-                return NewReturnResult(1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+                return NewReturnResult(1, preLog + $"鍙戠敓浜嗗紓甯�{ex.Message}\n\n{ex.StackTrace}\n");
             }
         }
 
@@ -278,7 +278,7 @@
                 .First(d => d.N_B_STATE == 2);
 
             if (detail == null) {
-                LogHelper.Info($"{taskName}锛欰GV鍙栬揣锛氭煡璇㈡槑缁嗗崟锛氬綋鍓嶆病鏈夋墽琛屼腑鐨勬槑缁嗗崟");
+                LogHelper.Info($"{taskName}:AGV鍙栬揣:鏌ヨ鏄庣粏鍗�褰撳墠娌℃湁鎵ц涓殑鏄庣粏鍗�);
                 return;
             }
 
@@ -286,23 +286,23 @@
                 detail.N_B_STATE = spotStateCode;
                 if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                     tran.RollbackTran();
-                    LogHelper.Info($"{taskName}锛欰GV鍙栬揣锛氫慨鏀规槑缁嗗崟鐘舵�涓恒�3浠诲姟鎵ц瀹屾垚銆戝け璐ワ紒");
+                    LogHelper.Info($"{taskName}:AGV鍙栬揣:淇敼鏄庣粏鍗曠姸鎬佷负銆�浠诲姟鎵ц瀹屾垚銆戝け璐�");
                     return;
                 }
 
                 var finishedCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO && d.N_B_STATE == 3);
                 var allCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO);
 
-                LogHelper.Info($"{taskName}锛欰GV鍙栬揣锛氱粺璁′换鍔″凡瀹屾垚锛歿finishedCount}/{allCount}");
+                LogHelper.Info($"{taskName}:AGV鍙栬揣:缁熻浠诲姟宸插畬鎴�{finishedCount}/{allCount}");
 
-                if (finishedCount == allCount) { // 褰撳墠鍑哄簱鍗曚笅鐨勬墍鏈夋槑缁嗗崟锛屼换鍔¢兘宸茬粡瀹屾垚
+                if (finishedCount == allCount) { // 褰撳墠鍑哄簱鍗曚笅鐨勬墍鏈夋槑缁嗗崟,浠诲姟閮藉凡缁忓畬鎴� 
                     if (db.Updateable<TN_Outbound_Order>().SetColumns(it => it.N_B_STATE == 3)
                         .Where(it => it.S_NO == detail.S_OO_NO)
                         .ExecuteCommand() <= 0) {
 
                         tran.RollbackTran();
-                        LogHelper.Info($"{taskName}锛欰GV鍙栬揣锛氭墍鏈変换鍔″畬鎴愭椂锛氫慨鏀瑰崟鎹姸鎬佷负3浠诲姟鎵ц瀹屾垚--澶辫触锛�);
+                        LogHelper.Info($"{taskName}:AGV鍙栬揣:鎵�湁浠诲姟瀹屾垚鏃�淇敼鍗曟嵁鐘舵�涓�浠诲姟鎵ц瀹屾垚--澶辫触!");
                         return;
                     }
                 }
@@ -322,7 +322,7 @@
                     .First();
 
                 if (plan == null) {
-                    info = $"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦紒";
+                    info = $"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦�";
                     LogHelper.Info(info);
                 }
 
@@ -331,13 +331,13 @@
                     .First();
 
                 if (cgDetail == null) {
-                    info = $"鐗╂枡缂栫爜涓嶅瓨鍦紒";
+                    info = $"鐗╂枡缂栫爜涓嶅瓨鍦�";
                     LogHelper.Info(info);
                 }
 
                 var model = new OtherModel.PickUpReturnErpInfo {
-                    jhdh = plan.JHDH, // 璁″垝鍗曞彿锛堝敮涓�爣璇嗭級
-                    ckzt = plan.CKZT, // 鍑哄簱鐘舵�锛堥渶瑕佽繑鍥烇級
+                    jhdh = plan.JHDH, // 璁″垝鍗曞彿 (鍞竴鏍囪瘑) 
+                    ckzt = plan.CKZT, // 鍑哄簱鐘舵� (闇�杩斿洖) 
                     jhlb = plan.JHLB, // 璁″垝绫诲埆
                     ckdh = plan.CKDH, // 鍙傝�鍗曞彿
                     cph = plan.CPH, // 杞︾墝鍙�@@ -348,9 +348,9 @@
                     cplb = plan.CPLB, // 浜у搧绫诲埆
                     cplbmx = plan.CPLBMX, // 浜у搧绫诲埆鏄庣粏
                     pp = plan.PP, // 鍝佺墝
-                    dj = plan.DJ, // 绛夌骇锛堥渶瑕佽繑鍥烇級
+                    dj = plan.DJ, // 绛夌骇 (闇�杩斿洖) 
                     gh = plan.GH, // 缃愬彿
-                    ph = plan.PH, // 鎵瑰彿锛堥渶瑕佽繑鍥烇級
+                    ph = plan.PH, // 鎵瑰彿 (闇�杩斿洖) 
                     bzlx = plan.BZLX, // 鍖呰绫诲瀷
                     pzdh = plan.PZDH, // 娲捐鍗曞彿
                     pzd_dw = plan.PZD_DW, // 娲捐鍗曞崟浣�@@ -363,15 +363,15 @@
                     pz_zfrq = plan.PZ_ZFRQ, // 娲捐浣滃簾鏃ユ湡
                     pz_bz = plan.PZ_BZ, // 娲捐澶囨敞
                     ckdbh = plan.CKDBH, // 鍑哄簱鍗曠紪鍙�-                    sfjs = plan.SFJS, // 瀹炲彂浠舵暟锛堥渶瑕佽繑鍥烇級--鏇存柊
-                    sfsl = plan.SFSL, // 瀹炲彂鏁伴噺锛堥渶瑕佽繑鍥烇級--鏇存柊
-                    //sfcs = plan.SFCS , // 瀹炲彂杞︽暟锛堥渶瑕佽繑鍥烇級
-                    //zcsj = plan.ZCSJ , // 瑁呰溅鏃堕棿锛堥渶瑕佽繑鍥烇級
-                    //jldw = plan.JLDW , // 璁¢噺鍗曚綅锛堥渶瑕佽繑鍥烇級
-                    //fhrq = plan.FHRQ , // 鍙戣揣鏃ユ湡锛堥渶瑕佽繑鍥烇級
-                    //ckdm = plan.CKDM , // 浠撳簱浠g爜锛堥渶瑕佽繑鍥烇級
-                    //fhr = plan.FHR , // 鍙戣揣浜猴紙闇�杩斿洖锛�-                    //czydm = plan.CZYDM , // 鎿嶄綔鍛橈紙闇�杩斿洖锛�+                    sfjs = plan.SFJS, // 瀹炲彂浠舵暟 (闇�杩斿洖) --鏇存柊
+                    sfsl = plan.SFSL, // 瀹炲彂鏁伴噺 (闇�杩斿洖) --鏇存柊
+                    //sfcs = plan.SFCS , // 瀹炲彂杞︽暟 (闇�杩斿洖) 
+                    //zcsj = plan.ZCSJ , // 瑁呰溅鏃堕棿 (闇�杩斿洖) 
+                    //jldw = plan.JLDW , // 璁¢噺鍗曚綅 (闇�杩斿洖) 
+                    //fhrq = plan.FHRQ , // 鍙戣揣鏃ユ湡 (闇�杩斿洖) 
+                    //ckdm = plan.CKDM , // 浠撳簱浠g爜 (闇�杩斿洖) 
+                    //fhr = plan.FHR , // 鍙戣揣浜�(闇�杩斿洖) 
+                    //czydm = plan.CZYDM , // 鎿嶄綔鍛�(闇�杩斿洖) 
                     shr_username = plan.SHR_USERNAME, // 瀹℃牳浜�                     shrq = plan.SHRQ, // 瀹℃牳鏃ユ湡
                     zfbj = plan.ZFBJ, // 浣滃簾鏍囪
@@ -380,14 +380,14 @@
                     shdw = plan.SHDW, // 鏀惰揣鍗曚綅
                     ysdw = plan.YSDW, // 杩愯緭鍗曚綅
                     lxr = plan.LXR, // 鑱旂郴浜�-                    //ry_zxg = plan.RY_ZXG , // 瑁呭嵏宸ワ紙闇�杩斿洖锛�-                    //ry_ccsj = plan.RY_CCSJ , // 鍙夎溅鍙告満锛堥渶瑕佽繑鍥烇級
+                    //ry_zxg = plan.RY_ZXG , // 瑁呭嵏宸�(闇�杩斿洖) 
+                    //ry_ccsj = plan.RY_CCSJ , // 鍙夎溅鍙告満 (闇�杩斿洖) 
                     erphx_jhdh = plan.ERPHX_JHDH, // erp浜よ揣鍗曞彿
                     erphx_wlbm = plan.ERPHX_WLBM, // erp鐗╂枡缂栫爜
                     erphx_wlmc = plan.ERPHX_WLMC, // erp鐗╂枡鍚嶇О
                     erphx_cjrq = plan.ERPHX_CJRQ, // erp鍒涘缓鏃ユ湡
-                    hw = plan.HW, // 璐т綅锛堥渶瑕佽繑鍥烇級
-                    hwzt = plan.HWZT // 璐т綅鐘舵�锛堥渶瑕佽繑鍥烇級
+                    hw = plan.HW, // 璐т綅 (闇�杩斿洖) 
+                    hwzt = plan.HWZT // 璐т綅鐘舵� (闇�杩斿洖) 
                 };
                 model.sfjs = cgDetail.N_ITEM_NUM;
                 model.sfsl = (decimal) cgDetail.F_QTY; // TEMP
@@ -396,7 +396,7 @@
                 var jsonInfo = JsonConvert.SerializeObject(model);
                 var result = httpH.WebPost(Settings.ErpApiUrl + Settings.ErpRoute.PickUpReturn, jsonInfo);
 
-                LogHelper.InfoApi($"鍙栬揣瀹屾垚鍙嶉ERP鎺ュ彛锛岀粨鏋�{result}锛岃皟鐢ㄥ弬鏁帮細", model);
+                LogHelper.InfoApi($"鍙栬揣瀹屾垚鍙嶉ERP鎺ュ彛,缁撴灉={result},璋冪敤鍙傛暟:", model);
 
                 plan.SFJS = model.sfjs;
                 plan.SFSL = model.sfsl;
@@ -411,14 +411,13 @@
         }
 
         /// <summary>
-        /// 浠诲姟鍒嗗彂锛屾牴鎹皟搴︾被鍨嬪彂缁欎笉鍚岀殑璋冨害绯荤粺
+        /// 浠诲姟鍒嗗彂,鏍规嵁璋冨害绫诲瀷鍙戠粰涓嶅悓鐨勮皟搴︾郴缁�         /// </summary>
         internal static void Dispatch() {
-            //鏌ヨ浠诲姟
             //鑾峰彇鎵�湁绛夊緟鐨勪换鍔�             var list = WCSHelper.GetWaitingTaskList();
-            LogHelper.Info("绛夊緟浠诲姟淇℃伅" + JsonConvert.SerializeObject(list), "API");
             if (list.Count > 0) {
+                LogHelper.Info($"杞:浠诲姟鍒嗗彂:绛夊緟浠诲姟淇℃伅\n\n{JsonConvert.SerializeObject(list)}\n");
                 list.ForEach(task => {
                     //浣跨敤鑷畾涔変换鍔℃帹閫�                     //TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧
@@ -426,7 +425,7 @@
                 });
             }
             else {
-                LogHelper.Info("鏆傛棤浠诲姟");
+                LogHelper.Debug("杞:浠诲姟鍒嗗彂:鏆傛棤浠诲姟");
             }
         }
 
@@ -436,7 +435,7 @@
             var ListenPort = Settings.TcpServerPort;
             TcpListener listener = new TcpListener(IPAddress.Any, ListenPort);
             listener.Start();
-            Console.WriteLine($"鍚庡彴鏈嶅姟宸插惎鍔紝鐩戝惉绔彛 {ListenPort}...");
+            Console.WriteLine($"鍚庡彴鏈嶅姟宸插惎鍔�鐩戝惉绔彛 {ListenPort}...");
 
             while (true) {
                 try {
@@ -444,7 +443,7 @@
                     System.Net.Sockets.TcpClient client = listener.AcceptTcpClient();
                     Console.WriteLine($"浜х嚎瀹㈡埛绔凡杩炴帴: {client.Client.RemoteEndPoint}");
 
-                    // 澶勭悊瀹㈡埛绔姹傦紙浣跨敤Task閬垮厤闃诲涓荤嚎绋嬶級
+                    // 澶勭悊瀹㈡埛绔姹�(浣跨敤Task閬垮厤闃诲涓荤嚎绋� 
                     Task.Run(() => HandleClientRequest(client));
                 }
                 catch (Exception ex) {
@@ -465,15 +464,15 @@
 
                     // 瑙f瀽娑堟伅
                     var message = JsonConvert.DeserializeObject<ProductCompletedMessage>(jsonMessage);
-                    //Console.WriteLine($"鏀跺埌浜у搧瀹屾垚閫氱煡 - 鐗╂枡锛歿message.ItemCode}锛涙壒娆″彿锛歿message.BatchNo}锛涘鍣ㄥ彿锛歿message.CntrCode}");
-                    LogHelper.Info($"鏀跺埌浜у搧涓嬬嚎閫氱煡锛�+message);
+                    //Console.WriteLine($"鏀跺埌浜у搧瀹屾垚閫氱煡 - 鐗╂枡:{message.ItemCode};鎵规鍙�{message.BatchNo};瀹瑰櫒鍙�{message.CntrCode}");
+                    LogHelper.Info($"鏀跺埌浜у搧涓嬬嚎閫氱煡:"+message);
 
                     string startLocCode = "";
 
-                    // A. 濡傛灉鏄崟涓骇绾縋LC锛岄�杩嘥CP浼犳挱锛岄渶瑕佷紶閫掍骇绾縄D锛屾牴鎹甀D璁$畻璧风偣璐т綅
-                    //startLocCode = Settings.ProductionLines[message.Id].OffLoc[0]; // 鐞嗚涓婂簲璇ュ彧鏈�涓狾ffLoc锛屽惁鍒欏簲璇ユ敞鏄庢槸鍝竴涓�+                    // A. 濡傛灉鏄崟涓骇绾縋LC,閫氳繃TCP浼犳挱,闇�浼犻�浜х嚎ID,鏍规嵁ID璁$畻璧风偣璐т綅
+                    //startLocCode = Settings.ProductionLines[message.Id].OffLoc[0]; // 鐞嗚涓婂簲璇ュ彧鏈�涓狾ffLoc,鍚﹀垯搴旇娉ㄦ槑鏄摢涓�釜
                     
-                    // B. 濡傛灉鏄瘡鏉′骇绾垮悇涓�釜瀹㈡埛绔紝鏇寸畝鍗曪紝鐩存帴鏍规嵁IP鍦板潃纭畾缁堢偣璐т綅
+                    // B. 濡傛灉鏄瘡鏉′骇绾垮悇涓�釜瀹㈡埛绔�鏇寸畝鍗�鐩存帴鏍规嵁IP鍦板潃纭畾缁堢偣璐т綅
                     // TODO 鍏蜂綋閫昏緫寰呭悗缁‘瀹氭椂琛ュ畬
 
                     var success = CreateInboundTask(startLocCode, message.CntrCode).Value;
@@ -490,7 +489,7 @@
         }
 
         /// <summary>
-        /// 鍏ュ簱浣滀笟鍒涘缓鍙帴鏀惰捣鐐硅揣浣嶅拰瀹瑰櫒鍙凤紙鐗╂枡淇℃伅寰呭畾銆侀�杩囦骇绾垮彿璁$畻璧风偣鐨勯�杈戞斁鍦ㄦ柟娉曞锛�+        /// 鍏ュ簱浣滀笟鍒涘缓鍙帴鏀惰捣鐐硅揣浣嶅拰瀹瑰櫒鍙�(鐗╂枡淇℃伅寰呭畾,閫氳繃浜х嚎鍙疯绠楄捣鐐圭殑閫昏緫鏀惧湪鏂规硶澶� 
         /// </summary>
         /// <param name="startLocCode"></param>
         /// <param name="cntrCode"></param>
@@ -514,7 +513,7 @@
                 .First();
 
                 if (startLoc == null) {
-                    info = $"娌℃湁鎵惧埌璧风偣璐т綅'{startLocCode}'锛屾垨涓嶆弧瓒宠姹傦細鏈笂閿併�褰撳墠瀹瑰櫒鏁伴噺=0";
+                    info = $"娌℃湁鎵惧埌璧风偣璐т綅'{startLocCode}',鎴栦笉婊¤冻瑕佹眰:鏈笂閿�褰撳墠瀹瑰櫒鏁伴噺=0";
                     LogHelper.Info(info);
                     return new Result<bool>(false, info);
                 }
@@ -533,13 +532,13 @@
 
                 var endLoc = db.Queryable<TN_Location>()
                     .Where(a => endAreas.Contains(a.S_AREA_CODE))
-                    .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣
-                    .Where(a => a.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅
+                    .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�:鏈笂閿�+                    .Where(a => a.N_CURRENT_NUM == 0) // 绛涢�:绌鸿揣浣�                     .OrderBy(l => l.N_LAYER)
                     .First();
 
                 if (endLoc == null) {
-                    info = $"娌℃湁鎵惧埌鍚堥�鐨勩�缁堢偣璐т綅銆戯紝闇�婊¤冻瑕佹眰锛氭湭涓婇攣銆佸綋鍓嶅鍣ㄦ暟閲�0";
+                    info = $"娌℃湁鎵惧埌鍚堥�鐨勩�缁堢偣璐т綅銆�闇�婊¤冻瑕佹眰:鏈笂閿�褰撳墠瀹瑰櫒鏁伴噺=0";
                     LogHelper.Info(info);
                     return new Result<bool>(false, info);
                 }
@@ -555,7 +554,7 @@
                         if (db.Deleteable(locCntrRelOld).ExecuteCommand() <= 0 &&
                             db.Updateable<TN_Location>().SetColumns(l => l.N_CURRENT_NUM == 0).Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
-                            info = $"鍒犻櫎鏃ц揣浣嶅鍣ㄥ叧绯昏〃澶辫触锛氳揣浣嶇紪鐮亄locCntrRelOld.S_LOC_CODE}锛屽鍣ㄧ紪鐮亄locCntrRelOld.S_CNTR_CODE}";
+                            info = $"鍒犻櫎鏃ц揣浣嶅鍣ㄥ叧绯昏〃澶辫触:璐т綅缂栫爜{locCntrRelOld.S_LOC_CODE},瀹瑰櫒缂栫爜{locCntrRelOld.S_CNTR_CODE}";
                             LogHelper.Info(info);
                             return new Result<bool>(false, info);
                         }
@@ -563,7 +562,7 @@
 
                     if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅缂栫爜{locCntrRel.S_LOC_CODE}锛屽鍣ㄧ紪鐮亄locCntrRel.S_CNTR_CODE}";
+                        info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐�璐т綅缂栫爜{locCntrRel.S_LOC_CODE},瀹瑰櫒缂栫爜{locCntrRel.S_CNTR_CODE}";
                         LogHelper.Info(info);
                         return new Result<bool>(false, info);
                     }
@@ -573,10 +572,10 @@
                         it.S_LOCK_STATE,
                         it.S_LOCK_OP,
                         it.T_MODIFY,
-                        it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚庯紝灏嗚揣浣嶇姸鎬佹洿鏂�+                        it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚�灏嗚揣浣嶇姸鎬佹洿鏂�                     }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�;
+                        info = $"鐢熸垚浠诲姟'{taskName}'澶辫触:鏇存柊璧风偣璐т綅{startLoc.S_CODE}閿佺姸鎬佸け璐�;
                         LogHelper.Info(info);
                         return new Result<bool>(false, info);
                     }
@@ -588,20 +587,20 @@
                         it.T_MODIFY,
                     }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�;
+                        info = $"鐢熸垚浠诲姟'{taskName}'澶辫触:鏇存柊缁堢偣璐т綅{endLoc.S_CODE}閿佺姸鎬佸け璐�;
                         LogHelper.Info(info);
                         return new Result<bool>(false, info);
                     }
 
                     if (db.Insertable(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}";
+                        info = $"鐢熸垚浠诲姟'{taskName}'澶辫触,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}";
                         LogHelper.Info(info);
                         return new Result<bool>(false, info);
                     }
 
                     tran.CommitTran();
-                    info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屼换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={cntId}锛岃捣鐐�{startLoc.S_CODE}锛岀粓鐐�{endLoc.S_CODE}";
+                    info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}";
                     LogHelper.Info(info);
                     return new Result<bool>(true, info);
                 }
diff --git a/device/ModbusFactory.cs b/device/ModbusFactory.cs
index 83a15ae..4c84a8a 100644
--- a/device/ModbusFactory.cs
+++ b/device/ModbusFactory.cs
@@ -21,28 +21,28 @@
 
         // 甯哥敤鐨凪odbus鍔熻兘鐮佹柟娉�         /// <summary>
-        /// 璇讳竴涓垨澶氫釜绾垮湀锛岃繑鍥炰竴涓猙it鐪熷亣鏁扮粍
+        /// 璇讳竴涓垨澶氫釜绾垮湀,杩斿洖涓�釜bit鐪熷亣鏁扮粍
         /// </summary>
         /// <param name="startingAddress"></param>
         /// <param name="quantity"></param>
         /// <returns></returns>
         bool[] ReadCoils(int startingAddress, int quantity);
         /// <summary>
-        /// 璇讳竴涓垨澶氫釜绂绘暎杈撳叆锛岃繑鍥炰竴涓猙it鐪熷亣鏁扮粍
+        /// 璇讳竴涓垨澶氫釜绂绘暎杈撳叆,杩斿洖涓�釜bit鐪熷亣鏁扮粍
         /// </summary>
         /// <param name="startingAddress"></param>
         /// <param name="quantity"></param>
         /// <returns></returns>
         bool[] ReadDiscreteInputs(int startingAddress, int quantity);
         /// <summary>
-        /// 鎵归噺璇诲彇鎴栧崟鐙鍙栦繚鎸佸瘎瀛樺櫒锛岃繑鍥炵殑鏄�2浣峣nt鏁扮粍
+        /// 鎵归噺璇诲彇鎴栧崟鐙鍙栦繚鎸佸瘎瀛樺櫒,杩斿洖鐨勬槸32浣峣nt鏁扮粍
         /// </summary>
         /// <param name="startingAddress"></param>
         /// <param name="quantity"></param>
         /// <returns></returns>
         int[] ReadHoldingRegisters(int startingAddress, int quantity);
         /// <summary>
-        /// 璇讳竴涓垨澶氫釜杈撳叆瀵勫瓨鍣紝杩斿洖涓�釜int32浣嶆暟缁�+        /// 璇讳竴涓垨澶氫釜杈撳叆瀵勫瓨鍣�杩斿洖涓�釜int32浣嶆暟缁�         /// </summary>
         /// <param name="startingAddress"></param>
         /// <param name="quantity"></param>
@@ -92,8 +92,8 @@
                 case ModbusCommunicationType.TcpSocket:
                     return new TcpSocketCommunicator();
                 default:
-                    //throw new ArgumentException("涓嶆敮鎸佺殑Modbus閫氫俊鏂瑰紡锛氳閫夋嫨EasyModbus鎴朤cpSocket");
-                    LogHelper.Info("涓嶆敮鎸佺殑Modbus閫氫俊鏂瑰紡锛氳閫夋嫨EasyModbus鎴朤cpSocket");
+                    //throw new ArgumentException("涓嶆敮鎸佺殑Modbus閫氫俊鏂瑰紡:璇烽�鎷〦asyModbus鎴朤cpSocket");
+                    LogHelper.Info("涓嶆敮鎸佺殑Modbus閫氫俊鏂瑰紡:璇烽�鎷〦asyModbus鎴朤cpSocket");
                     return null;
             }
         }
@@ -127,10 +127,10 @@
             _modbusClient.Connect();
             
             if (IsConnected) {
-                LogHelper.Info($"杩炴帴鎴愬姛锛歿ipAddress}:{port}");
+                LogHelper.Info($"杩炴帴鎴愬姛:{ipAddress}:{port}");
             }
             else {
-                LogHelper.Info($"杩炴帴澶辫触锛歿ipAddress}:{port}");
+                LogHelper.Info($"杩炴帴澶辫触:{ipAddress}:{port}");
             }
         }
 
@@ -143,10 +143,10 @@
             _modbusClient?.Disconnect();
 
             if (IsConnected) {
-                LogHelper.Info($"杩炴帴鎴愬姛锛歿_modbusClient.IPAddress}:{_modbusClient.Port}");
+                LogHelper.Info($"杩炴帴鎴愬姛:{_modbusClient.IPAddress}:{_modbusClient.Port}");
             }
             else {
-                LogHelper.Info($"杩炴帴澶辫触锛歿_modbusClient.IPAddress} : {_modbusClient.Port}");
+                LogHelper.Info($"杩炴帴澶辫触:{_modbusClient.IPAddress} : {_modbusClient.Port}");
             }
         }
 
@@ -169,11 +169,11 @@
                     res = _modbusClient.ReadCoils(startingAddress, quantity);
                     if (res.Length != 0) {
                         //璇诲彇鎴愬姛
-                        LogHelper.Info($"璇诲彇鎴愬姛锛歊eadCoils:IP:{ip},Port:{port}");
+                        LogHelper.Info($"璇诲彇鎴愬姛:ReadCoils:IP:{ip},Port:{port}");
                     }
                     else {
                         //璇诲彇澶辫触
-                        LogHelper.Info($"璇诲彇澶辫触锛歊eadCoils:IP:{ip},Port:{port}");
+                        LogHelper.Info($"璇诲彇澶辫触:ReadCoils:IP:{ip},Port:{port}");
                     }
                 }
                 catch (Exception ex) {
@@ -181,7 +181,7 @@
                 }
             }
             else {
-                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄锛屾垨瀵硅薄鏈垚鍔熻繛鎺�);
+                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄,鎴栧璞℃湭鎴愬姛杩炴帴");
             }
             return res;
         }
@@ -196,11 +196,11 @@
                     res = _modbusClient.ReadDiscreteInputs(startingAddress, quantity);
                     if (res.Length != 0) {
                         //璇诲彇鎴愬姛
-                        LogHelper.Info($"璇诲彇鎴愬姛锛歊eadDiscreteInputs:IP:{ip},Port:{port}");
+                        LogHelper.Info($"璇诲彇鎴愬姛:ReadDiscreteInputs:IP:{ip},Port:{port}");
                     }
                     else {
                         //璇诲彇澶辫触
-                        LogHelper.Info($"璇诲彇澶辫触锛歊eadDiscreteInputs:IP:{ip},Port:{port}");
+                        LogHelper.Info($"璇诲彇澶辫触:ReadDiscreteInputs:IP:{ip},Port:{port}");
                     }
                 }
                 catch (Exception ex) {
@@ -208,7 +208,7 @@
                 }
             }
             else {
-                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄锛屾垨瀵硅薄鏈垚鍔熻繛鎺�);
+                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄,鎴栧璞℃湭鎴愬姛杩炴帴");
             }
             return res;
         }
@@ -220,24 +220,24 @@
                 var ip = client.IPAddress;
                 var port = client.Port;
                 try {
-                    //涓�釜瀵勫瓨鍣ㄦ槸16浣嶏紝杩斿洖2涓猧nt绫诲瀷
+                    //涓�釜瀵勫瓨鍣ㄦ槸16浣�杩斿洖2涓猧nt绫诲瀷
                     res = client.ReadHoldingRegisters(startingAddress, quantity);
                     if (res.Length != 0) {
                         //璇诲彇鎴愬姛
-                        LogHelper.Info($"璇诲彇鎴愬姛锛歊eadHoldingRegisters:IP:{ip},Port:{port}");
+                        LogHelper.Info($"璇诲彇鎴愬姛:ReadHoldingRegisters:IP:{ip},Port:{port}");
                     }
                     else {
                         //璇诲彇澶辫触
-                        LogHelper.Info($"璇诲彇澶辫触锛歊eadHoldingRegisters:IP:{ip},Port:{port}");
+                        LogHelper.Info($"璇诲彇澶辫触:ReadHoldingRegisters:IP:{ip},Port:{port}");
                     }
                 }
                 catch (Exception ex) {
-                    //濡傛灉璇锋眰鏁伴噺瓒呭嚭淇濇寔瀵勫瓨鍣ㄧ殑鏈�ぇ鏁版嵁琛屾暟锛屼細鎶ラ敊
+                    //濡傛灉璇锋眰鏁伴噺瓒呭嚭淇濇寔瀵勫瓨鍣ㄧ殑鏈�ぇ鏁版嵁琛屾暟,浼氭姤閿�                     LogHelper.InfoEx(ex);
                 }
             }
             else {
-                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄锛屾垨瀵硅薄鏈垚鍔熻繛鎺�);
+                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄,鎴栧璞℃湭鎴愬姛杩炴帴");
             }
             return res;
         }
@@ -252,11 +252,11 @@
                     res = client.ReadInputRegisters(startingAddress, quantity);
                     if (res.Length != 0) {
                         //璇诲彇鎴愬姛
-                        LogHelper.Info($"璇诲彇鎴愬姛锛歊eadInputRegisters:IP:{ip},Port:{port}");
+                        LogHelper.Info($"璇诲彇鎴愬姛:ReadInputRegisters:IP:{ip},Port:{port}");
                     }
                     else {
                         //璇诲彇澶辫触
-                        LogHelper.Info($"璇诲彇澶辫触锛歊eadInputRegisters:IP:{ip},Port:{port}");
+                        LogHelper.Info($"璇诲彇澶辫触:ReadInputRegisters:IP:{ip},Port:{port}");
                     }
                 }
                 catch (Exception ex) {
@@ -264,7 +264,7 @@
                 }
             }
             else {
-                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄锛屾垨瀵硅薄鏈垚鍔熻繛鎺�);
+                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄,鎴栧璞℃湭鎴愬姛杩炴帴");
             }
             return res;
         }
@@ -280,11 +280,11 @@
                     res = value == client.ReadCoils(coilAddress, 1)[0];
                     if (res) {
                         //鍐欏叆鎴愬姛
-                        LogHelper.Info($"鍐欏叆鎴愬姛锛歐riteSingleCoil:IP:{ip},Port:{port}");
+                        LogHelper.Info($"鍐欏叆鎴愬姛:WriteSingleCoil:IP:{ip},Port:{port}");
                     }
                     else {
                         //鍐欏叆澶辫触
-                        LogHelper.Info($"鍐欏叆澶辫触锛歐riteSingleCoil:IP:{ip},Port:{port}");
+                        LogHelper.Info($"鍐欏叆澶辫触:WriteSingleCoil:IP:{ip},Port:{port}");
                     }
                 }
                 catch (Exception ex) {
@@ -292,7 +292,7 @@
                 }
             }
             else {
-                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄锛屾垨瀵硅薄鏈垚鍔熻繛鎺�);
+                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄,鎴栧璞℃湭鎴愬姛杩炴帴");
             }
             return res;
         }
@@ -308,11 +308,11 @@
                     res = value == client.ReadHoldingRegisters(registerAddress, 1)[0];
                     if (res) {
                         //鍐欏叆鎴愬姛
-                        LogHelper.Info($"鍐欏叆鎴愬姛锛歐riteSingleRegister:IP:{ip},Port:{port}");
+                        LogHelper.Info($"鍐欏叆鎴愬姛:WriteSingleRegister:IP:{ip},Port:{port}");
                     }
                     else {
                         //鍐欏叆澶辫触
-                        LogHelper.Info($"鍐欏叆澶辫触锛歐riteSingleRegister:IP:{ip},Port:{port}");
+                        LogHelper.Info($"鍐欏叆澶辫触:WriteSingleRegister:IP:{ip},Port:{port}");
                     }
                 }
                 catch (Exception ex) {
@@ -320,7 +320,7 @@
                 }
             }
             else {
-                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄锛屾垨瀵硅薄鏈垚鍔熻繛鎺�);
+                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄,鎴栧璞℃湭鎴愬姛杩炴帴");
             }
             return res;
         }
@@ -337,11 +337,11 @@
                     res = values.SequenceEqual(dataRead);
                     if (res) {
                         //鍐欏叆鎴愬姛
-                        LogHelper.Info($"鍐欏叆鎴愬姛锛歐riteMultipleCoils:IP:{ip},Port:{port}");
+                        LogHelper.Info($"鍐欏叆鎴愬姛:WriteMultipleCoils:IP:{ip},Port:{port}");
                     }
                     else {
                         //鍐欏叆澶辫触
-                        LogHelper.Info($"鍐欏叆澶辫触锛歐riteMultipleCoils:IP:{ip},Port:{port}");
+                        LogHelper.Info($"鍐欏叆澶辫触:WriteMultipleCoils:IP:{ip},Port:{port}");
                     }
                 }
                 catch (Exception ex) {
@@ -349,7 +349,7 @@
                 }
             }
             else {
-                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄锛屾垨瀵硅薄鏈垚鍔熻繛鎺�);
+                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄,鎴栧璞℃湭鎴愬姛杩炴帴");
             }
             return res;
         }
@@ -377,7 +377,7 @@
                 }
             }
             else {
-                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄锛屾垨瀵硅薄鏈垚鍔熻繛鎺�);
+                LogHelper.Info($"鏈壘鍒癕odbus璁惧瀹炰緥瀵硅薄,鎴栧璞℃湭鎴愬姛杩炴帴");
             }
             return res;
         }
@@ -421,16 +421,16 @@
             if (quantity < 1 || quantity > 2000)
                 throw new ArgumentException("Quantity must be between 1 and 2000");
 
-            // 鏋勫缓璇锋眰鎶ユ枃锛�2瀛楄妭锛�+            // 鏋勫缓璇锋眰鎶ユ枃 (12瀛楄妭) 
             byte[] request = new byte[12];
             request[0] = 0x00; // 浜嬪姟ID楂樺瓧鑺�-            request[1] = 0x01; // 浜嬪姟ID浣庡瓧鑺傦紙绀轰緥鍊硷級
-            request[2] = 0x00; // 鍗忚ID楂樺瓧鑺傦紙鍥哄畾0锛�-            request[3] = 0x00; // 鍗忚ID浣庡瓧鑺傦紙鍥哄畾0锛�-            request[4] = 0x00; // 闀垮害楂樺瓧鑺傦紙鍚庣画6瀛楄妭锛�+            request[1] = 0x01; // 浜嬪姟ID浣庡瓧鑺�(绀轰緥鍊� 
+            request[2] = 0x00; // 鍗忚ID楂樺瓧鑺�(鍥哄畾0) 
+            request[3] = 0x00; // 鍗忚ID浣庡瓧鑺�(鍥哄畾0) 
+            request[4] = 0x00; // 闀垮害楂樺瓧鑺�(鍚庣画6瀛楄妭) 
             request[5] = 0x06; // 闀垮害浣庡瓧鑺�             request[6] = unitIdentifier; // 鍗曞厓鏍囪瘑绗�-            request[7] = 0x01; // 鍔熻兘鐮侊紙璇荤嚎鍦堬級
+            request[7] = 0x01; // 鍔熻兘鐮�(璇荤嚎鍦� 
             request[8] = (byte)(startingAddress >> 8); // 璧峰鍦板潃楂樺瓧鑺�             request[9] = (byte)startingAddress; // 璧峰鍦板潃浣庡瓧鑺�             request[10] = (byte)(quantity >> 8); // 鏁伴噺楂樺瓧鑺�@@ -439,19 +439,19 @@
             // 鍙戦�璇锋眰
             _networkStream.Write(request, 0, request.Length);
 
-            // 璇诲彇鍝嶅簲澶达紙8瀛楄妭锛�+            // 璇诲彇鍝嶅簲澶�(8瀛楄妭) 
             byte[] responseHeader = new byte[8];
             int bytesRead = _networkStream.Read(responseHeader, 0, 8);
             if (bytesRead != 8)
                 throw new Exception("Invalid response header length");
 
-            // 鏍¢獙浜嬪姟ID銆佸崗璁甀D銆佸崟鍏冩爣璇嗙
+            // 鏍¢獙浜嬪姟ID,鍗忚ID,鍗曞厓鏍囪瘑绗�             if (responseHeader[0] != request[0] || responseHeader[1] != request[1] ||
                 responseHeader[2] != 0x00 || responseHeader[3] != 0x00 ||
                 responseHeader[6] != unitIdentifier)
                 throw new Exception("Invalid response header");
 
-            // 妫�煡寮傚父鍝嶅簲锛堝姛鑳界爜 + 0x80锛�+            // 妫�煡寮傚父鍝嶅簲 (鍔熻兘鐮�+ 0x80) 
             if (responseHeader[7] == 0x81) {
                 int errorCode = _networkStream.ReadByte();
                 throw new Exception($"Modbus error. Code: {errorCode}");
@@ -459,14 +459,14 @@
             else if (responseHeader[7] != 0x01)
                 throw new Exception("Invalid function code in response");
 
-            // 璇诲彇鏁版嵁閮ㄥ垎锛堝瓧鑺傛暟 + 瀹為檯鏁版嵁锛�+            // 璇诲彇鏁版嵁閮ㄥ垎 (瀛楄妭鏁�+ 瀹為檯鏁版嵁) 
             byte byteCount = responseHeader[8];
             byte[] responseData = new byte[byteCount];
             bytesRead = _networkStream.Read(responseData, 0, byteCount);
             if (bytesRead != byteCount)
                 throw new Exception("Invalid response data length");
 
-            // 瑙f瀽绾垮湀鐘舵�锛堟瘡涓綅琛ㄧず涓�釜绾垮湀锛�+            // 瑙f瀽绾垮湀鐘舵� (姣忎釜浣嶈〃绀轰竴涓嚎鍦� 
             bool[] coils = new bool[quantity];
             for (int i = 0; i < quantity; i++) {
                 int byteIndex = i / 8;
@@ -478,16 +478,16 @@
         }
 
         public bool[] ReadDiscreteInputs(int startingAddress, int quantity) {
-            // 鎶ユ枃缁撴瀯涓嶳eadCoils鍑犱箮鐩稿悓锛屼粎鍔熻兘鐮佹敼涓�x02
+            // 鎶ユ枃缁撴瀯涓嶳eadCoils鍑犱箮鐩稿悓,浠呭姛鑳界爜鏀逛负0x02
             byte[] request = new byte[12];
             request[0] = 0x00; // 浜嬪姟ID楂樺瓧鑺�-            request[1] = 0x01; // 浜嬪姟ID浣庡瓧鑺傦紙绀轰緥鍊硷級
-            request[2] = 0x00; // 鍗忚ID楂樺瓧鑺傦紙鍥哄畾0锛�-            request[3] = 0x00; // 鍗忚ID浣庡瓧鑺傦紙鍥哄畾0锛�-            request[4] = 0x00; // 闀垮害楂樺瓧鑺傦紙鍚庣画6瀛楄妭锛�+            request[1] = 0x01; // 浜嬪姟ID浣庡瓧鑺�(绀轰緥鍊� 
+            request[2] = 0x00; // 鍗忚ID楂樺瓧鑺�(鍥哄畾0) 
+            request[3] = 0x00; // 鍗忚ID浣庡瓧鑺�(鍥哄畾0) 
+            request[4] = 0x00; // 闀垮害楂樺瓧鑺�(鍚庣画6瀛楄妭) 
             request[5] = 0x06; // 闀垮害浣庡瓧鑺�             request[6] = unitIdentifier;
-            request[7] = 0x02; // 鍔熻兘鐮侊細璇荤鏁h緭鍏�+            request[7] = 0x02; // 鍔熻兘鐮�璇荤鏁h緭鍏�             request[8] = (byte)(startingAddress >> 8); // 璧峰鍦板潃楂樺瓧鑺�             request[9] = (byte)startingAddress; // 璧峰鍦板潃浣庡瓧鑺�             request[10] = (byte)(quantity >> 8); // 鏁伴噺楂樺瓧鑺�@@ -499,7 +499,7 @@
             byte[] responseHeader = new byte[8];
             _networkStream.Read(responseHeader, 0, 8);
 
-            // 鏍¢獙鍜屽紓甯稿鐞嗭紙鍙傝�ReadCoils锛�+            // 鏍¢獙鍜屽紓甯稿鐞�(鍙傝�ReadCoils) 
             if (responseHeader[7] == 0x82) // 寮傚父鍝嶅簲
             {
                 int errorCode = _networkStream.ReadByte();
@@ -525,16 +525,16 @@
             if (quantity < 1 || quantity > 125)
                 throw new ArgumentException("Quantity must be between 1 and 125");
 
-            // 鏋勫缓璇锋眰鎶ユ枃锛�2瀛楄妭锛�+            // 鏋勫缓璇锋眰鎶ユ枃 (12瀛楄妭) 
             byte[] request = new byte[12];
-            request[0] = 0x00; // 浜嬪姟ID楂樺瓧鑺傦紙绀轰緥鍊硷級
+            request[0] = 0x00; // 浜嬪姟ID楂樺瓧鑺�(绀轰緥鍊� 
             request[1] = 0x01; // 浜嬪姟ID浣庡瓧鑺�-            request[2] = 0x00; // 鍗忚ID楂樺瓧鑺傦紙鍥哄畾0锛�-            request[3] = 0x00; // 鍗忚ID浣庡瓧鑺傦紙鍥哄畾0锛�-            request[4] = 0x00; // 闀垮害楂樺瓧鑺傦紙鍚庣画6瀛楄妭锛�+            request[2] = 0x00; // 鍗忚ID楂樺瓧鑺�(鍥哄畾0) 
+            request[3] = 0x00; // 鍗忚ID浣庡瓧鑺�(鍥哄畾0) 
+            request[4] = 0x00; // 闀垮害楂樺瓧鑺�(鍚庣画6瀛楄妭) 
             request[5] = 0x06; // 闀垮害浣庡瓧鑺�             request[6] = unitIdentifier; // 鍗曞厓鏍囪瘑绗�-            request[7] = 0x03; // 鍔熻兘鐮侊紙璇讳繚鎸佸瘎瀛樺櫒锛�+            request[7] = 0x03; // 鍔熻兘鐮�(璇讳繚鎸佸瘎瀛樺櫒) 
             request[8] = (byte)(startingAddress >> 8); // 璧峰鍦板潃楂樺瓧鑺�             request[9] = (byte)startingAddress; // 璧峰鍦板潃浣庡瓧鑺�             request[10] = (byte)(quantity >> 8); // 鏁伴噺楂樺瓧鑺�@@ -543,19 +543,19 @@
             // 鍙戦�璇锋眰
             _networkStream.Write(request, 0, request.Length);
 
-            // 璇诲彇鍝嶅簲澶达紙8瀛楄妭锛�+            // 璇诲彇鍝嶅簲澶�(8瀛楄妭) 
             byte[] responseHeader = new byte[8];
             int bytesRead = _networkStream.Read(responseHeader, 0, 8);
             if (bytesRead != 8)
                 throw new Exception("Invalid response header length");
 
-            // 鏍¢獙浜嬪姟ID銆佸崗璁甀D銆佸崟鍏冩爣璇嗙
+            // 鏍¢獙浜嬪姟ID,鍗忚ID,鍗曞厓鏍囪瘑绗�             if (responseHeader[0] != request[0] || responseHeader[1] != request[1] ||
                 responseHeader[2] != 0x00 || responseHeader[3] != 0x00 ||
                 responseHeader[6] != unitIdentifier)
                 throw new Exception("Invalid response header");
 
-            // 妫�煡寮傚父鍝嶅簲锛堝姛鑳界爜 + 0x80锛�+            // 妫�煡寮傚父鍝嶅簲 (鍔熻兘鐮�+ 0x80) 
             if (responseHeader[7] == 0x83) {
                 int errorCode = _networkStream.ReadByte();
                 throw new Exception($"Modbus error. Code: {errorCode}");
@@ -563,14 +563,14 @@
             else if (responseHeader[7] != 0x03)
                 throw new Exception("Invalid function code in response");
 
-            // 璇诲彇鏁版嵁閮ㄥ垎锛堝瓧鑺傛暟 + 瀹為檯鏁版嵁锛�+            // 璇诲彇鏁版嵁閮ㄥ垎 (瀛楄妭鏁�+ 瀹為檯鏁版嵁) 
             byte byteCount = responseHeader[8];
             byte[] responseData = new byte[byteCount];
             bytesRead = _networkStream.Read(responseData, 0, byteCount);
             if (bytesRead != byteCount)
                 throw new Exception("Invalid response data length");
 
-            // 瑙f瀽瀵勫瓨鍣ㄥ�锛堝ぇ绔簭锛�+            // 瑙f瀽瀵勫瓨鍣ㄥ� (澶х搴� 
             int[] registers = new int[quantity];
             for (int i = 0; i < quantity; i++) {
                 int offset = i * 2;
@@ -587,22 +587,22 @@
             // 鏋勫缓Modbus TCP璇锋眰鎶ユ枃
             byte[] request = new byte[12];
 
-            // 浜嬪姟鏍囪瘑绗︼紙鍙互绠�崟閫掑锛�+            // 浜嬪姟鏍囪瘑绗�(鍙互绠�崟閫掑) 
             request[0] = 0x00;
             request[1] = 0x01;
 
-            // 鍗忚鏍囪瘑绗︼紙Modbus鍥哄畾涓�锛�+            // 鍗忚鏍囪瘑绗�(Modbus鍥哄畾涓�) 
             request[2] = 0x00;
             request[3] = 0x00;
 
-            // 闀垮害瀛楁锛堝悗闈㈣繕鏈�瀛楄妭锛�+            // 闀垮害瀛楁 (鍚庨潰杩樻湁6瀛楄妭) 
             request[4] = 0x00;
             request[5] = 0x06;
 
             // 鍗曞厓鏍囪瘑绗�             request[6] = unitIdentifier;
 
-            // 鍔熻兘鐮侊紙4琛ㄧず璇昏緭鍏ュ瘎瀛樺櫒锛�+            // 鍔熻兘鐮�(4琛ㄧず璇昏緭鍏ュ瘎瀛樺櫒) 
             request[7] = 0x04;
 
             // 璧峰鍦板潃
@@ -677,7 +677,7 @@
 
             _networkStream.Write(request, 0, request.Length);
 
-            // 鍝嶅簲搴斾笌璇锋眰瀹屽叏涓�嚧锛堝洖鏄撅級
+            // 鍝嶅簲搴斾笌璇锋眰瀹屽叏涓�嚧 (鍥炴樉) 
             byte[] response = new byte[12];
             int bytesRead = _networkStream.Read(response, 0, 12);
             if (bytesRead != 12)
@@ -708,7 +708,7 @@
 
             _networkStream.Write(request, 0, request.Length);
 
-            // 妫�煡鍥炴樉鍝嶅簲锛堝悓WriteSingleCoil锛�+            // 妫�煡鍥炴樉鍝嶅簲 (鍚學riteSingleCoil) 
             byte[] response = new byte[12];
             _networkStream.Read(response, 0, 12);
             if (!response.SequenceEqual(request))
@@ -722,7 +722,7 @@
             if (quantity < 1 || quantity > 1968)
                 throw new ArgumentException("Quantity must be between 1 and 1968");
 
-            // 璁$畻闇�鐨勫瓧鑺傛暟锛堟瘡涓瓧鑺傚瓨鍌�涓嚎鍦堢姸鎬侊級
+            // 璁$畻闇�鐨勫瓧鑺傛暟 (姣忎釜瀛楄妭瀛樺偍8涓嚎鍦堢姸鎬� 
             int byteCount = (quantity + 7) / 8;
             byte[] coilBytes = new byte[byteCount];
 
@@ -735,7 +735,7 @@
                 }
             }
 
-            // 鏋勫缓璇锋眰鎶ユ枃锛�3 + 绾垮湀瀛楄妭鏁帮級
+            // 鏋勫缓璇锋眰鎶ユ枃 (13 + 绾垮湀瀛楄妭鏁� 
             byte[] request = new byte[13 + coilBytes.Length];
             request[0] = 0x00; // 浜嬪姟ID楂樺瓧鑺�             request[1] = 0x01; // 浜嬪姟ID浣庡瓧鑺�@@ -744,7 +744,7 @@
             request[4] = (byte)((7 + coilBytes.Length) >> 8); // 闀垮害楂樺瓧鑺�             request[5] = (byte)(7 + coilBytes.Length); // 闀垮害浣庡瓧鑺�             request[6] = unitIdentifier;
-            request[7] = 0x0F; // 鍔熻兘鐮侊紙鍐欏涓嚎鍦堬級
+            request[7] = 0x0F; // 鍔熻兘鐮�(鍐欏涓嚎鍦� 
             request[8] = (byte)(startingAddress >> 8); // 璧峰鍦板潃楂樺瓧鑺�             request[9] = (byte)startingAddress; // 璧峰鍦板潃浣庡瓧鑺�             request[10] = (byte)(quantity >> 8); // 鏁伴噺楂樺瓧鑺�@@ -755,7 +755,7 @@
             // 鍙戦�璇锋眰
             _networkStream.Write(request, 0, request.Length);
 
-            // 璇诲彇鍝嶅簲锛堝浐瀹�2瀛楄妭锛�+            // 璇诲彇鍝嶅簲 (鍥哄畾12瀛楄妭) 
             byte[] response = new byte[12];
             int bytesRead = _networkStream.Read(response, 0, 12);
             if (bytesRead != 12)
@@ -774,14 +774,14 @@
             if (quantity < 1 || quantity > 123)
                 throw new ArgumentException("Quantity must be between 1 and 123");
 
-            // 灏唘short鏁扮粍杞崲涓哄瓧鑺傛暟缁勶紙澶х搴忥級
+            // 灏唘short鏁扮粍杞崲涓哄瓧鑺傛暟缁�(澶х搴� 
             byte[] valueBytes = new byte[quantity * 2];
             for (int i = 0; i < quantity; i++) {
                 valueBytes[i * 2] = (byte)(values[i] >> 8);
                 valueBytes[i * 2 + 1] = (byte)values[i];
             }
 
-            // 鏋勫缓璇锋眰鎶ユ枃锛�3 + 鍊煎瓧鑺傛暟锛�+            // 鏋勫缓璇锋眰鎶ユ枃 (13 + 鍊煎瓧鑺傛暟) 
             byte[] request = new byte[13 + valueBytes.Length];
             request[0] = 0x00; // 浜嬪姟ID楂樺瓧鑺�             request[1] = 0x01; // 浜嬪姟ID浣庡瓧鑺�@@ -790,7 +790,7 @@
             request[4] = (byte)((7 + valueBytes.Length) >> 8); // 闀垮害楂樺瓧鑺�             request[5] = (byte)(7 + valueBytes.Length); // 闀垮害浣庡瓧鑺�             request[6] = unitIdentifier;
-            request[7] = 0x10; // 鍔熻兘鐮侊紙鍐欏涓瘎瀛樺櫒锛�+            request[7] = 0x10; // 鍔熻兘鐮�(鍐欏涓瘎瀛樺櫒) 
             request[8] = (byte)(startingAddress >> 8); // 璧峰鍦板潃楂樺瓧鑺�             request[9] = (byte)startingAddress; // 璧峰鍦板潃浣庡瓧鑺�             request[10] = (byte)(quantity >> 8); // 鏁伴噺楂樺瓧鑺�@@ -801,7 +801,7 @@
             // 鍙戦�璇锋眰
             _networkStream.Write(request, 0, request.Length);
 
-            // 璇诲彇鍝嶅簲锛堝浐瀹�2瀛楄妭锛�+            // 璇诲彇鍝嶅簲 (鍥哄畾12瀛楄妭) 
             byte[] response = new byte[12];
             int bytesRead = _networkStream.Read(response, 0, 12);
             if (bytesRead != 12)
diff --git a/device/ModbusHelper.cs b/device/ModbusHelper.cs
index ff631e8..5c8dc79 100644
--- a/device/ModbusHelper.cs
+++ b/device/ModbusHelper.cs
@@ -10,7 +10,7 @@
     /// modbus tcp 鐢ㄧ涓夋柟鐨勫寘
     /// </summary>
     public class ModbusHelper {
-        // 鍐呭瓨锛岃繛鎺ヤ笂鐨�Modbus 閫氳瀵硅薄
+        // 鍐呭瓨,杩炴帴涓婄殑 Modbus 閫氳瀵硅薄
         private static Dictionary<string, ModbusClient> _ipPort_ModbusClient = new Dictionary<string, ModbusClient>();
 
         public ModbusHelper(string ip, int port = 502, byte slaveId = 1) {
@@ -25,7 +25,7 @@
             try {
                 if (ip == null || ip.Trim() == "") {
                     // 璇诲彇閰嶇疆淇℃伅澶辫触
-                    LogHelper.Info("Modbus锛氳鍙栭厤缃俊鎭け璐�);
+                    LogHelper.Info("Modbus:璇诲彇閰嶇疆淇℃伅澶辫触");
                     return;
                 }
 
@@ -59,7 +59,7 @@
         }
 
         /// <summary>
-        /// 杩炴帴 Modbus 涓嬩綅鏈猴紙绉佹湁锛屽唴閮ㄨ皟鐢級
+        /// 杩炴帴 Modbus 涓嬩綅鏈�(绉佹湁,鍐呴儴璋冪敤) 
         /// </summary>
         /// <param name="modbusClient"></param>
         private static void Link(ModbusClient modbusClient) {
@@ -79,7 +79,7 @@
         }
 
         /// <summary>
-        /// 璇讳竴涓垨澶氫釜绾垮湀锛岃繑鍥炰竴涓猙it鐪熷亣鏁扮粍
+        /// 璇讳竴涓垨澶氫釜绾垮湀,杩斿洖涓�釜bit鐪熷亣鏁扮粍
         /// </summary>
         /// <param name="address"></param>
         /// <param name="qty"></param>
@@ -131,7 +131,7 @@
                     }
                 }
                 catch (Exception ex) {
-
+                    LogHelper.InfoEx(ex);
                 }
             }
             else {
@@ -162,7 +162,7 @@
                     }
                 }
                 catch (Exception ex) {
-
+                    LogHelper.InfoEx(ex);
                 }
             }
             else {
@@ -173,7 +173,7 @@
         }
 
         /// <summary>
-        /// 鎵归噺璇诲彇鎴栧崟鐙鍙栦繚鎸佸瘎瀛樺櫒锛岃繑鍥炵殑鏄�2浣峣nt鏁扮粍
+        /// 鎵归噺璇诲彇鎴栧崟鐙鍙栦繚鎸佸瘎瀛樺櫒,杩斿洖鐨勬槸32浣峣nt鏁扮粍
         /// </summary>
         /// <param name="address">璇诲彇璧峰浣�/param>
         /// <param name="qty">璇诲彇鐨勬暟閲�/param>
@@ -185,7 +185,7 @@
             var client = GetModbusClient(ip, port);
             if (client != null && client.Connected) {
                 try {
-                    //涓�釜瀵勫瓨鍣ㄦ槸16浣嶏紝杩斿洖2涓猧nt绫诲瀷
+                    //涓�釜瀵勫瓨鍣ㄦ槸16浣�杩斿洖2涓猧nt绫诲瀷
                     res = client.ReadHoldingRegisters(address, qty);
                     if (res.Length != 0) {
                         //璇诲彇鎴愬姛
@@ -195,7 +195,7 @@
                     }
                 }
                 catch (Exception ex) {
-                    //濡傛灉璇锋眰鏁伴噺瓒呭嚭淇濇寔瀵勫瓨鍣ㄧ殑鏈�ぇ鏁版嵁琛屾暟锛屼細鎶ラ敊
+                    //濡傛灉璇锋眰鏁伴噺瓒呭嚭淇濇寔瀵勫瓨鍣ㄧ殑鏈�ぇ鏁版嵁琛屾暟,浼氭姤閿�                     LogHelper.Info($"鍙戠敓浜嗗紓甯�{ex.Message},IP:{ip},Port:{port}", "Error");
                 }
             }
@@ -227,7 +227,7 @@
                     }
                 }
                 catch (Exception ex) {
-
+                    LogHelper.InfoEx(ex);
                 }
             }
             else {
@@ -270,7 +270,7 @@
         }
 
         /// <summary>
-        /// 璇讳竴涓垨澶氫釜绂绘暎杈撳叆锛岃繑鍥炰竴涓猙it鐪熷亣鏁扮粍
+        /// 璇讳竴涓垨澶氫釜绂绘暎杈撳叆,杩斿洖涓�釜bit鐪熷亣鏁扮粍
         /// </summary>
         /// <param name="address"></param>
         /// <param name="qty"></param>
@@ -291,7 +291,7 @@
                     }
                 }
                 catch (Exception ex) {
-
+                    LogHelper.InfoEx(ex);
                 }
             }
             else {
@@ -302,7 +302,7 @@
         }
 
         /// <summary>
-        /// 璇讳竴涓垨澶氫釜杈撳叆瀵勫瓨鍣紝杩斿洖涓�釜int32浣嶆暟缁�+        /// 璇讳竴涓垨澶氫釜杈撳叆瀵勫瓨鍣�杩斿洖涓�釜int32浣嶆暟缁�         /// </summary>
         /// <param name="address"></param>
         /// <param name="qty"></param>
@@ -323,7 +323,7 @@
                     }
                 }
                 catch (Exception ex) {
-
+                    LogHelper.InfoEx(ex);
                 }
             }
             else {
@@ -338,7 +338,7 @@
         }
 
         #region Modbus 鍗忚璇诲啓瀛楃涓�-        // 灏嗗瓧绗︿覆杞崲涓�Modbus 瀵勫瓨鍣ㄦ暟缁勶紙int[] 褰㈠紡锛屾瘡涓猧nt瀛樹竴涓�6浣嶅�锛�+        // 灏嗗瓧绗︿覆杞崲涓�Modbus 瀵勫瓨鍣ㄦ暟缁�(int[] 褰㈠紡,姣忎釜int瀛樹竴涓�6浣嶅�) 
         private static int[] StringToRegisters(string text) {
             // 濉厖涓哄伓鏁伴暱搴�             if (text.Length % 2 != 0) {
@@ -349,7 +349,7 @@
             int[] registers = new int[bytes.Length / 2];
 
             for (int i = 0; i < registers.Length; i++) {
-                // 澶х搴忥細楂樹綅瀛楄妭鍦ㄥ墠
+                // 澶х搴�楂樹綅瀛楄妭鍦ㄥ墠
                 registers[i] = (bytes[i * 2] << 8) | bytes[i * 2 + 1];
             }
 
@@ -361,7 +361,7 @@
             byte[] bytes = new byte[registers.Length * 2];
 
             for (int i = 0; i < registers.Length; i++) {
-                // 鎻愬彇浣�6浣嶏紙蹇界暐楂�6浣嶏級
+                // 鎻愬彇浣�6浣�(蹇界暐楂�6浣� 
                 ushort registerValue = (ushort)(registers[i] & 0xFFFF);
 
                 // 瑙f瀽澶х搴�@@ -376,7 +376,7 @@
         #endregion
 
         /// <summary>
-        /// 鑾峰彇 Modbus 閫氳瀵硅薄锛堢鏈夛紝鍐呴儴璋冪敤锛�+        /// 鑾峰彇 Modbus 閫氳瀵硅薄 (绉佹湁,鍐呴儴璋冪敤) 
         /// </summary>
         /// <param name="ip"></param>
         /// <param name="port"></param>
diff --git a/device/OpcUaHelper.cs b/device/OpcUaHelper.cs
index 555fea1..106acb9 100644
--- a/device/OpcUaHelper.cs
+++ b/device/OpcUaHelper.cs
@@ -22,7 +22,7 @@
         {
             try
             {
-                // 鍒涘缓涓�釜搴旂敤閰嶇疆瀵硅薄锛岀敤浜庤缃簲鐢ㄥ悕绉般�鍞竴鏍囪瘑銆佺被鍨嬨�璇佷功鍜屽畨鍏ㄧ瓥鐣�+                // 鍒涘缓涓�釜搴旂敤閰嶇疆瀵硅薄,鐢ㄤ簬璁剧疆搴旂敤鍚嶇О,鍞竴鏍囪瘑,绫诲瀷,璇佷功鍜屽畨鍏ㄧ瓥鐣�                 var config = new ApplicationConfiguration()
                 {
                     ApplicationName = "MyClient",
@@ -48,18 +48,18 @@
                 // 楠岃瘉搴旂敤閰嶇疆瀵硅薄
                 await config.Validate(ApplicationType.Client);
 
-                // 璁剧疆璇佷功楠岃瘉浜嬩欢锛岀敤浜庤嚜鍔ㄦ帴鍙椾笉鍙椾俊浠荤殑璇佷功
+                // 璁剧疆璇佷功楠岃瘉浜嬩欢,鐢ㄤ簬鑷姩鎺ュ彈涓嶅彈淇′换鐨勮瘉涔�                 if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
                 {
                     config.CertificateValidator.CertificateValidation += (s, e) => { e.Accept = (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted); };
                 }
 
-                // 鍒涘缓涓�釜搴旂敤瀹炰緥瀵硅薄锛岀敤浜庢鏌ヨ瘉涔�+                // 鍒涘缓涓�釜搴旂敤瀹炰緥瀵硅薄,鐢ㄤ簬妫�煡璇佷功
                 var application = new ApplicationInstance(config);
 
                 // 妫�煡搴旂敤瀹炰緥瀵硅薄鐨勮瘉涔�                 bool check = await application.CheckApplicationInstanceCertificate(false, 2048);
-                // 鍒涘缓涓�釜浼氳瘽瀵硅薄锛岀敤浜庤繛鎺ュ埌 OPC UA 鏈嶅姟鍣�+                // 鍒涘缓涓�釜浼氳瘽瀵硅薄,鐢ㄤ簬杩炴帴鍒�OPC UA 鏈嶅姟鍣�                 EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint("opc.tcp://172.16.57.41:4840", true);
                 EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(config);
                 ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration);
diff --git a/device/ProductionLineDevice.cs b/device/ProductionLineDevice.cs
index 406c492..986d0f5 100644
--- a/device/ProductionLineDevice.cs
+++ b/device/ProductionLineDevice.cs
@@ -32,32 +32,32 @@
         public string Id { get; set; }
 
         /// <summary>
-        /// 绯荤粺鐘舵�锛�鏈湴 1鑱斿姩(AGV妯″紡) 2鏁呴殰
+        /// 绯荤粺鐘舵�:0鏈湴 1鑱斿姩(AGV妯″紡) 2鏁呴殰
         /// </summary>
         public int SystemState { get; set; }
 
         /// <summary>
-        /// 婊″灈涓嬬嚎锛�杈撻�绾挎湯绔湁鎴愬搧鏂欙紝闇�AGV鎼繍 0榛樿鍊�+        /// 婊″灈涓嬬嚎:1杈撻�绾挎湯绔湁鎴愬搧鏂�闇�AGV鎼繍 0榛樿鍊�         /// </summary>
         public int FullOffline { get; set; }
 
         /// <summary>
-        /// 鍛煎彨鎵樼洏鍨涳細1闇�绌烘墭锛屽懠鍙獳GV閰嶉� 0榛樿鍊�+        /// 鍛煎彨鎵樼洏鍨�1闇�绌烘墭,鍛煎彨AGV閰嶉� 0榛樿鍊�         /// </summary>
         public int CallPallet { get; set; }
 
         /// <summary>
-        /// 鍏佽 AGV 鏀炬墭鐩樺灈锛�鍏佽鏀惧灈 0榛樿鍊�+        /// 鍏佽 AGV 鏀炬墭鐩樺灈:1鍏佽鏀惧灈 0榛樿鍊�         /// </summary>
         public int AllowAgvPlacePallet { get; set; }
 
         /// <summary>
-        /// AGV 姝e湪鍙栬揣锛氫笅绾緼GV鍐欏叆1锛屽彇璐у畬鎴愬悗鎭㈠0
+        /// AGV 姝e湪鍙栬揣:涓嬬嚎AGV鍐欏叆1,鍙栬揣瀹屾垚鍚庢仮澶�
         /// </summary>
         public int AgvPicking { get; set; }
 
         /// <summary>
-        /// AGV 姝e湪鍙栬揣锛氫笅绾緼GV鍐欏叆1锛屽彇璐у畬鎴愬悗鎭㈠0
+        /// AGV 姝e湪鍙栬揣:涓嬬嚎AGV鍐欏叆1,鍙栬揣瀹屾垚鍚庢仮澶�
         /// </summary>
         /// <param name="value"></param>
         /// <returns></returns>
@@ -71,12 +71,12 @@
         }
 
         /// <summary>
-        /// AGV 姝e湪鏀炬墭鐩樺灈锛氫笂绾緼GV鍐欏叆1锛屾斁鎵樺畬鎴愬悗鎭㈠0
+        /// AGV 姝e湪鏀炬墭鐩樺灈:涓婄嚎AGV鍐欏叆1,鏀炬墭瀹屾垚鍚庢仮澶�
         /// </summary>
         public int AgvPlacingPallet { get; set; }
 
         /// <summary>
-        /// AGV 姝e湪鏀炬墭鐩樺灈锛氫笂绾緼GV鍐欏叆1锛屾斁鎵樺畬鎴愬悗鎭㈠0
+        /// AGV 姝e湪鏀炬墭鐩樺灈:涓婄嚎AGV鍐欏叆1,鏀炬墭瀹屾垚鍚庢仮澶�
         /// </summary>
         public bool SetAgvPlacingPallet(int value) {
             if (!ModbusHelper.WriteSingleRegister(11, value, Ip, Port)) {
diff --git a/device/S7Helper.cs b/device/S7Helper.cs
index 9d176d9..dfe1385 100644
--- a/device/S7Helper.cs
+++ b/device/S7Helper.cs
@@ -18,7 +18,7 @@
     /// </summary>
     public class S7Helper
     {
-        public static Dictionary<string, Plc> ip_Plc = new Dictionary<string, Plc>();//鍐呭瓨锛岃繛鎺ヤ笂鐨凱LC閫氳瀵硅薄
+        public static Dictionary<string, Plc> ip_Plc = new Dictionary<string, Plc>();//鍐呭瓨,杩炴帴涓婄殑PLC閫氳瀵硅薄
 
         public S7Helper(string ip, short rack, short slot)
         {
@@ -93,12 +93,12 @@
         }
 
         /// <summary>
-        /// 鎵归噺璇诲彇鎴栧崟鐙鍙朌B鍧楁暟鎹紙8浣峛yte锛夛紝骞惰浆鎹㈡垚瀛楃涓插舰寮�+        /// 鎵归噺璇诲彇鎴栧崟鐙鍙朌B鍧楁暟鎹�(8浣峛yte) ,骞惰浆鎹㈡垚瀛楃涓插舰寮�         /// </summary>
         /// <param name="deviceIp">plc璁惧閫氳鍦板潃</param>
         /// <param name="dbNo">DB鍧楀彿</param>
-        /// <param name="startByteAdr">璧峰byte鍦板潃锛屾渶灏忓�0锛�=8浣�1涓狟lock</param>
-        /// <param name="count">璇诲彇鐨勪釜鏁帮紝1涓�8浣嶅崄鍏繘鍒舵暟</param>
+        /// <param name="startByteAdr">璧峰byte鍦板潃,鏈�皬鍊�,1=8浣�1涓狟lock</param>
+        /// <param name="count">璇诲彇鐨勪釜鏁�1涓�8浣嶅崄鍏繘鍒舵暟</param>
         /// <returns></returns>
         public static string ReadString(string deviceIp, int dbNo, int startByteAdr, int count)
         {
@@ -111,15 +111,15 @@
                     if (plc.IsConnected)
                     {
                         var data = plc.ReadBytes(DataType.DataBlock, dbNo, startByteAdr, count);
-                        result = System.Text.Encoding.UTF8.GetString(data).TrimEnd('\0').TrimEnd('\n').TrimEnd('\r'); ;//姝ゆ柟娉曞彲浠ユ妸byte鏁扮粍杞崲鎴愬瓧绗︿覆锛屼絾鏄細閫犳垚\0\u缁撴潫绗︿笉鏄剧ず锛岄渶瑕佷笅浣嶆満姝g‘鐨勬暟鎹�+                        result = System.Text.Encoding.UTF8.GetString(data).TrimEnd('\0').TrimEnd('\n').TrimEnd('\r'); ;//姝ゆ柟娉曞彲浠ユ妸byte鏁扮粍杞崲鎴愬瓧绗︿覆,浣嗘槸浼氶�鎴怽0\u缁撴潫绗︿笉鏄剧ず,闇�涓嬩綅鏈烘纭殑鏁版嵁
                         if (result == string.Empty)
                         {
-                            Link(plc);//璁惧鍙戦�鐨勬暟鎹负绌猴紝閲嶈繛
+                            Link(plc);//璁惧鍙戦�鐨勬暟鎹负绌�閲嶈繛
                         }
                     }
                     else
                     {
-                        Link(plc);//璁惧鏈繛鎺ワ紝閲嶈繛
+                        Link(plc);//璁惧鏈繛鎺�閲嶈繛
                     }
                 }
                 else
@@ -136,11 +136,11 @@
         }
 
         /// <summary>
-        /// 鎵归噺鍐欏叆鎴栧崟鐙啓鍏B鍧楁暟鎹紙8浣峛yte锛夛紝浠ュ瓧绗︿覆杞崲byte褰㈠紡鍐欏叆
+        /// 鎵归噺鍐欏叆鎴栧崟鐙啓鍏B鍧楁暟鎹�(8浣峛yte) ,浠ュ瓧绗︿覆杞崲byte褰㈠紡鍐欏叆
         /// </summary>
         /// <param name="deviceIp">plc璁惧閫氳鍦板潃</param>
         /// <param name="dbNo">DB鍧楀彿</param>
-        /// <param name="startByteAdr">璧峰byte鍦板潃锛屾渶灏忓�0锛�=8浣�1涓狟lock</param>
+        /// <param name="startByteAdr">璧峰byte鍦板潃,鏈�皬鍊�,1=8浣�1涓狟lock</param>
         /// <param name="data">瑕佸啓鍏ョ殑鏁版嵁</param>
         /// <returns></returns>
         public static bool WriteString(string deviceIp, int dbNo, int startByteAdr, string data)
@@ -165,7 +165,7 @@
                     }
                     else
                     {
-                        Link(plc);//璁惧鏈繛鎺ワ紝閲嶈繛
+                        Link(plc);//璁惧鏈繛鎺�閲嶈繛
                     }
                 }
                 else
@@ -182,12 +182,12 @@
         }
 
         /// <summary>
-        /// 鎵归噺璇诲彇鎴栧崟鐙鍙朌B鍧楁暟鎹紙8浣峛yte锛�+        /// 鎵归噺璇诲彇鎴栧崟鐙鍙朌B鍧楁暟鎹�(8浣峛yte) 
         /// </summary>
         /// <param name="deviceIp">plc璁惧閫氳鍦板潃</param>
         /// <param name="dbNo">DB鍧楀彿</param>
-        /// <param name="startByteAdr">璧峰byte鍦板潃锛屾渶灏忓�0锛�=8浣�1涓狟lock</param>
-        /// <param name="count">璇诲彇鐨勪釜鏁帮紝1涓�8浣嶅崄鍏繘鍒舵暟</param>
+        /// <param name="startByteAdr">璧峰byte鍦板潃,鏈�皬鍊�,1=8浣�1涓狟lock</param>
+        /// <param name="count">璇诲彇鐨勪釜鏁�1涓�8浣嶅崄鍏繘鍒舵暟</param>
         /// <returns></returns>
         public static byte[] ReadBytes(string deviceIp, int dbNo, int startByteAdr, int count)
         {
@@ -203,12 +203,12 @@
 
                         if (result.Length == 0)
                         {
-                            Link(plc);//璁惧鍙戦�鐨勬暟鎹负绌猴紝閲嶈繛
+                            Link(plc);//璁惧鍙戦�鐨勬暟鎹负绌�閲嶈繛
                         }
                     }
                     else
                     {
-                        Link(plc);//璁惧鏈繛鎺ワ紝閲嶈繛
+                        Link(plc);//璁惧鏈繛鎺�閲嶈繛
                     }
                 }
                 else
@@ -225,11 +225,11 @@
         }
 
         /// <summary>
-        /// 鎵归噺鍐欏叆鎴栧崟鐙啓鍏B鍧楁暟鎹紙8浣峛yte锛�+        /// 鎵归噺鍐欏叆鎴栧崟鐙啓鍏B鍧楁暟鎹�(8浣峛yte) 
         /// </summary>
         /// <param name="deviceIp">plc璁惧閫氳鍦板潃</param>
         /// <param name="dbNo">DB鍧楀彿</param>
-        /// <param name="startByteAdr">璧峰byte鍦板潃锛屾渶灏忓�0锛�=8浣�1涓狟lock</param>
+        /// <param name="startByteAdr">璧峰byte鍦板潃,鏈�皬鍊�,1=8浣�1涓狟lock</param>
         /// <param name="data">瑕佸啓鍏ョ殑鏁版嵁</param>
         /// <returns></returns>
         public static bool WriteBytes(string deviceIp, int dbNo, int startByteAdr, byte[] data)
@@ -253,7 +253,7 @@
                     }
                     else
                     {
-                        Link(plc);//璁惧鏈繛鎺ワ紝閲嶈繛
+                        Link(plc);//璁惧鏈繛鎺�閲嶈繛
                     }
                 }
                 else
@@ -270,11 +270,11 @@
         }
 
         /// <summary>
-        /// 鎵归噺璇诲彇鎴栧崟鐙鍙朌B鍧楁暟鎹紙1浣峛it锛�+        /// 鎵归噺璇诲彇鎴栧崟鐙鍙朌B鍧楁暟鎹�(1浣峛it) 
         /// </summary>
         /// <param name="deviceIp">plc璁惧閫氳鍦板潃</param>
         /// <param name="dbNo">DB鍧楀彿</param>
-        /// <param name="startByteAdr">璧峰byte鍦板潃锛屾渶灏忓�0锛�=8浣�1涓狟lock</param>
+        /// <param name="startByteAdr">璧峰byte鍦板潃,鏈�皬鍊�,1=8浣�1涓狟lock</param>
         /// <param name="count">瑕佽鍙栧灏戜綅</param>
         /// <param name="bitAdr">浠庣鍑犱綅寮�璇诲彇</param>
         /// <returns></returns>
@@ -299,12 +299,12 @@
                         }
                         if (result.Length == 0)
                         {
-                            Link(plc);//璁惧鍙戦�鐨勬暟鎹负绌猴紝閲嶈繛
+                            Link(plc);//璁惧鍙戦�鐨勬暟鎹负绌�閲嶈繛
                         }
                     }
                     else
                     {
-                        Link(plc);//璁惧鏈繛鎺ワ紝閲嶈繛
+                        Link(plc);//璁惧鏈繛鎺�閲嶈繛
                     }
                 }
                 else
@@ -321,12 +321,12 @@
         }
 
         /// <summary>
-        /// 鎵归噺鍐欏叆鎴栧崟鐙啓鍏B鍧楁暟鎹紙1浣峛it锛�+        /// 鎵归噺鍐欏叆鎴栧崟鐙啓鍏B鍧楁暟鎹�(1浣峛it) 
         /// </summary>
         /// <param name="deviceIp">plc璁惧閫氳鍦板潃</param>
         /// <param name="dbNo">DB鍧楀彿</param>
-        /// <param name="startByteAdr">璧峰byte鍦板潃锛屾渶灏忓�0锛�=8浣�1涓狟lock</param>
-        /// <param name="biteAdr">璧峰bit鍦板潃锛屼粠绗嚑浣嶅紑濮嬪啓k</param>
+        /// <param name="startByteAdr">璧峰byte鍦板潃,鏈�皬鍊�,1=8浣�1涓狟lock</param>
+        /// <param name="biteAdr">璧峰bit鍦板潃,浠庣鍑犱綅寮�鍐檏</param>
         /// <param name="bitValue">瑕佸啓鍏ョ殑鏁版嵁</param>
         /// <returns></returns>
         public static bool WriteBits(string deviceIp, int dbNo, int startByteAdr, byte biteAdr, BitArray bitValue)
@@ -353,7 +353,7 @@
                     }
                     else
                     {
-                        Link(plc);//璁惧鏈繛鎺ワ紝閲嶈繛
+                        Link(plc);//璁惧鏈繛鎺�閲嶈繛
                     }
                 }
                 else
@@ -409,7 +409,7 @@
         }
 
         /// <summary>
-        /// 閫氳繃S7鍗忚杩炴帴涓嬩綅鏈烘椂闇�鐨刴odel锛屽簲璇ユ斁鍦╩odel灞傦紝杩欓噷鎴戞噿浜�+        /// 閫氳繃S7鍗忚杩炴帴涓嬩綅鏈烘椂闇�鐨刴odel,搴旇鏀惧湪model灞�杩欓噷鎴戞噿浜�         /// </summary>
         public class S7ConfigModel
         {
diff --git a/device/TcpClient.cs b/device/TcpClient.cs
index 54af524..44cb8b6 100644
--- a/device/TcpClient.cs
+++ b/device/TcpClient.cs
@@ -32,7 +32,7 @@
                     res = BitConverter.ToString(data).Replace("-", "");
                 }
                 catch (Exception ex) {
-                    LogHelper.Error(ex.Message, ex);
+                    LogHelper.InfoEx(ex);
                 }
                 client.Disconnect(true);
                 client.Dispose();
@@ -42,7 +42,7 @@
         }
 
         /// <summary>
-        /// 璇讳繚鎸佸瘎瀛樺櫒锛宮odbus rtu鐨勫皝瑁�+        /// 璇讳繚鎸佸瘎瀛樺櫒,modbus rtu鐨勫皝瑁�         /// </summary>
         /// <param name="address"></param>
         /// <param name="qty"></param>
diff --git a/device/TcpClientHelper.cs b/device/TcpClientHelper.cs
index bfdcc2c..2981a95 100644
--- a/device/TcpClientHelper.cs
+++ b/device/TcpClientHelper.cs
@@ -26,15 +26,15 @@
         public static bool Init(string ip, int port) {
             lock (_connectLock) {
                 try {
-                    // 鑻ユ鍦ㄨ繛鎺ヤ腑锛岀洿鎺ヨ繑鍥�+                    // 鑻ユ鍦ㄨ繛鎺ヤ腑,鐩存帴杩斿洖
                     if (_isConnecting) {
-                        LogHelper.Info("宸叉湁杩炴帴姝e湪灏濊瘯涓紝绂佹閲嶅鎿嶄綔");
+                        LogHelper.Info("宸叉湁杩炴帴姝e湪灏濊瘯涓�绂佹閲嶅鎿嶄綔");
                         return false;
                     }
 
                     _isConnecting = true; // 鏍囪涓鸿繛鎺ヤ腑
 
-                    // 閲婃斁鏃�Socket锛堜粎鍦ㄦ湭杩炴帴鏃讹級
+                    // 閲婃斁鏃�Socket (浠呭湪鏈繛鎺ユ椂) 
                     if (_clientSocket != null && !_clientSocket.Connected) {
                         SafeCloseSocket();
                     }
@@ -52,7 +52,7 @@
                 }
                 catch (SocketException ex) {
                     _isConnecting = false;
-                    LogHelper.Error($"鍒濆鍖栬繛鎺ュけ璐� {ex.Message}", ex);
+                    LogHelper.InfoEx(ex);
                     return false;
                 }
             }
@@ -64,7 +64,7 @@
             lock (_linkLock) {
                 try {
 
-                    // 鑻ocket瀛樺湪浣嗗疄闄呭凡鏂紑锛屽己鍒舵竻鐞�+                    // 鑻ocket瀛樺湪浣嗗疄闄呭凡鏂紑,寮哄埗娓呯悊
                     if (_clientSocket != null && (_clientSocket.Poll(0, SelectMode.SelectRead) && _clientSocket.Available == 0)) {
                         SafeCloseSocket();
                     }
@@ -72,7 +72,7 @@
                     // 鍘熸湁閫昏緫
                     if (_clientSocket != null && _clientSocket.Connected) {
                         //if (ip == _ip && port == _port) {
-                            LogHelper.Info($"浜х嚎宸茶繛鎺ワ紝鏃犻渶閲嶈繛锛孖P锛歿ip}锛岀鍙o細{port}");
+                            LogHelper.Info($"浜х嚎宸茶繛鎺�鏃犻渶閲嶈繛,IP:{ip},绔彛:{port}");
                             return false;
                         //}
 
@@ -82,7 +82,7 @@
                     return Init(ip, port);
                 }
                 catch (Exception ex) {
-                    LogHelper.Error($"浜х嚎閲嶈繛澶辫触锛孖P锛歿ip}锛岀鍙o細{port}锛屽紓甯革細{ex.Message}", ex);
+                    LogHelper.InfoEx(ex);
                     return false;
                 }
             }
@@ -134,11 +134,11 @@
 
                     // 浠呭湪杩炴帴鎴愬姛鏃跺惎鍔ㄦ帴鏀�                     if (_clientSocket.Connected) {
-                        LogHelper.Info($"鎴愬姛杩炴帴鍒版湇鍔$锛歿_ip}:{_port}");
+                        LogHelper.Info($"鎴愬姛杩炴帴鍒版湇鍔$:{_ip}:{_port}");
                         _clientSocket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, ReceiveCallback, null);
                     }
                     else {
-                        LogHelper.Info("杩炴帴鏈垚鍔燂紝鍏抽棴Socket");
+                        LogHelper.Info("杩炴帴鏈垚鍔�鍏抽棴Socket");
                         SafeCloseSocket();
                     }
                 }
@@ -147,7 +147,7 @@
                 LogHelper.Info("杩炴帴杩囩▼涓璖ocket琚噴鏀�);
             }
             catch (Exception ex) {
-                LogHelper.Error($"杩炴帴澶辫触锛歿ex.Message}", ex);
+                LogHelper.InfoEx(ex);
                 SafeCloseSocket();
             }
             finally {
@@ -166,16 +166,16 @@
                     _clientSocket.Close();
                     _clientSocket.Dispose();
 
-                    // 鏂紑鍚庯細娓呴櫎瀵瑰簲IP:Port鐨勬帴鏀舵暟鎹�+                    // 鏂紑鍚�娓呴櫎瀵瑰簲IP:Port鐨勬帴鏀舵暟鎹�                     string key = $"{_ip}:{_port}";
                     if (_receivedDataQueue.ContainsKey(key)) {
                         _receivedDataQueue.Remove(key);
-                        LogHelper.Info($"宸叉竻鐞嗛槦鍒楁暟鎹紝Key锛歿key}");
+                        LogHelper.Info($"宸叉竻鐞嗛槦鍒楁暟鎹�Key:{key}");
                     }
                 }
             }
             catch (Exception ex) {
-                LogHelper.Error($"閲婃斁Socket璧勬簮寮傚父锛歿ex.Message}", ex);
+                LogHelper.InfoEx(ex);
             }
             finally {
                 _clientSocket = null;
@@ -203,13 +203,13 @@
                     _clientSocket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, ReceiveCallback, null);
                 }
                 else {
-                    // 鏈嶅姟绔富鍔ㄥ叧闂繛鎺ワ紝瑙﹀彂娓呯悊
+                    // 鏈嶅姟绔富鍔ㄥ叧闂繛鎺�瑙﹀彂娓呯悊
                     LogHelper.Info("杩炴帴宸茶鏈嶅姟绔叧闂�);
                     SafeCloseSocket();
                 }
             }
             catch (Exception ex) {
-                LogHelper.Error($"鎺ユ敹鏁版嵁寮傚父锛歿ex.Message}", ex);
+                LogHelper.InfoEx(ex);
                 SafeCloseSocket(); // 寮傚父鏃朵富鍔ㄥ叧闂�             }
         }
@@ -229,19 +229,18 @@
                         //read = result;
                         return false;
                     }
-                    LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹垚鍔燂細{BitConverter.ToString(result)}");
+                    LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹垚鍔�{BitConverter.ToString(result)}");
                     read = result;
                     return true;
                 }
                 else {
                     //LogHelper.Info($"_clientSocket={_clientSocket} connected={_clientSocket?.Connected}");
                     Link(_ip, _port);
-                    LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹け璐ワ紙鏈繛鎺ワ級锛屽噯澶囬噸杩�);
+                    LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹け璐�(鏈繛鎺� ,鍑嗗閲嶈繛");
                     return false;
                 }
             }
             catch (Exception ex) {
-                //LogHelper.Error($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹け璐ワ紙鍙戠敓浜嗗紓甯革細{JsonConvert.SerializeObject(ex)}锛夛細{ex.Message}", ex);
                 LogHelper.InfoEx(ex);
                 return false;
                 /* 寮傚父澶勭悊 */
@@ -256,11 +255,11 @@
         /// <param name="registers">Modbus瀵勫瓨鍣ㄦ暟缁�/param>
         /// <returns>瀛楄妭鏁扮粍</returns>
         public static byte[] ConvertRegistersToBytes(ushort[] registers) {
-            // 姣忎釜瀵勫瓨鍣ㄦ槸16浣�2瀛楄妭)锛屾墍浠ユ�瀛楄妭鏁版槸瀵勫瓨鍣ㄦ暟閲忕殑2鍊�+            // 姣忎釜瀵勫瓨鍣ㄦ槸16浣�2瀛楄妭),鎵�互鎬诲瓧鑺傛暟鏄瘎瀛樺櫒鏁伴噺鐨�鍊�             byte[] bytes = new byte[registers.Length * 2];
 
             for (int i = 0; i < registers.Length; i++) {
-                // Modbus浣跨敤澶х搴忥紝楂樹綅瀛楄妭鍦ㄥ墠
+                // Modbus浣跨敤澶х搴�楂樹綅瀛楄妭鍦ㄥ墠
                 bytes[i * 2] = (byte)(registers[i] >> 8);     // 楂樹綅瀛楄妭
                 bytes[i * 2 + 1] = (byte)(registers[i] & 0xFF); // 浣庝綅瀛楄妭
             }
@@ -276,13 +275,13 @@
         public static string ConvertBytesToString(byte[] bytes) {
             // 鏌ユ壘绗竴涓�x00瀛楄妭(瀛楃涓茬粨鏉熺)鐨勪綅缃�             int length = Array.IndexOf(bytes, (byte)0);
-            if (length < 0) length = bytes.Length; // 濡傛灉娌℃湁缁撴潫绗︼紝浣跨敤鍏ㄩ儴瀛楄妭
+            if (length < 0) length = bytes.Length; // 濡傛灉娌℃湁缁撴潫绗�浣跨敤鍏ㄩ儴瀛楄妭
 
             // 鏍规嵁璁惧浣跨敤鐨勭紪鐮佽浆鎹�甯歌鐨勬湁ASCII鎴朥TF-8)
-            // 杩欓噷浣跨敤ASCII缂栫爜浣滀负绀轰緥锛屽疄闄呭簲鏍规嵁璁惧鏂囨。纭畾缂栫爜鏂瑰紡
+            // 杩欓噷浣跨敤ASCII缂栫爜浣滀负绀轰緥,瀹為檯搴旀牴鎹澶囨枃妗g‘瀹氱紪鐮佹柟寮�             return Encoding.ASCII.GetString(bytes, 0, length);
 
-            // 濡傛灉鏄疷TF-8缂栫爜锛屼娇鐢ㄤ笅闈㈣繖琛屼唬鏇夸笂闈㈤偅琛�+            // 濡傛灉鏄疷TF-8缂栫爜,浣跨敤涓嬮潰杩欒浠f浛涓婇潰閭h
             // return Encoding.UTF8.GetString(bytes, 0, length);
         }
 
@@ -294,12 +293,12 @@
                 }
                 else {
                     Link(_ip, _port);
-                    LogHelper.Info($"鍐欑數姊叆璐ф暟鎹け璐ワ紙鏈繛鎺ワ級锛歿Encoding.UTF8.GetString(sends)}");
+                    LogHelper.Info($"鍐欑數姊叆璐ф暟鎹け璐�(鏈繛鎺� :{Encoding.UTF8.GetString(sends)}");
                     return false;
                 }
             }
             catch (Exception ex) {
-                LogHelper.Error($"鍐欑數姊叆璐ф暟鎹け璐ワ紙鍙戦�浜嗗紓甯革級锛歿ex.Message}", ex);
+                LogHelper.InfoEx(ex);
                 return false;
             }
         }
@@ -308,17 +307,17 @@
             try {
                 if (_clientSocket != null && _clientSocket?.Connected == true) {
                     _receivedDataQueue.TryGetValue($"{_ip}:{_port}", out byte[] result);
-                    LogHelper.Info($"璇荤數姊嚭璐ф暟鎹垚鍔燂細{BitConverter.ToString(result)}");
+                    LogHelper.Info($"璇荤數姊嚭璐ф暟鎹垚鍔�{BitConverter.ToString(result)}");
                     return result;
                 }
                 else {
                     Link(_ip, _port);
-                    LogHelper.Info($"璇荤數姊嚭璐ф暟鎹け璐ワ紙鏈繛鎺ワ級锛屽噯澶囬噸杩�);
+                    LogHelper.Info($"璇荤數姊嚭璐ф暟鎹け璐�(鏈繛鎺� ,鍑嗗閲嶈繛");
                     return null;
                 }
             }
             catch (Exception ex) {
-                LogHelper.Error($"璇荤數姊嚭璐ф暟鎹け璐ワ紙鍙戠敓浜嗗紓甯革細{JsonConvert.SerializeObject(ex)}锛夛細{ex.Message}", ex);
+                LogHelper.InfoEx(ex);
                 return null;
                 /* 寮傚父澶勭悊 */
             }
@@ -326,20 +325,20 @@
 
         public static string ChekElevator() {
             try {
-                var res = "璇诲彇鐢垫鏁版嵁鐨刴odel锛岀储寮曚粠1寮�锛屾弧瓒充互涓嬫潯浠舵墠鑳藉彂浠诲姟 \r\n " +
-                   "瀛楁锛宨sNormal 锛屾槸鍚︽甯告ā寮忥紝1锛氭甯告ā寮忥紝绗�涓狟yte鍙充晶绗竴浣岯it \r\n" +
-                   "瀛楁锛宨sValid锛屽綋鍓嶄綅缃槸鍚︽湁鏁堬紝1锛氭湁鏁堬紝0锛氫笉鐢ㄧ锛岀9涓狟yte鍙充晶绗竴浣岯it \r\n" +
-                   "瀛楁锛宺unMode锛岀數姊繍琛屾ā寮忥紝9=绌洪棽娉婂仠锛�=鑷姩杩愯锛岀10涓狟yte\r\n" +
-                   "瀛楁锛宨sLock_1_Out,涓�眰鍑哄彛鏄惁鍗犵敤锛� = 鍗犵敤锛岀14涓狟yte鍙充晶绗竴浣岯it\r\n" +
-                   "瀛楁锛宨sLock_2_Out锛屼簩灞傚嚭鍙f槸鍚﹀崰鐢紝1 = 鍗犵敤锛岀14涓狟yte鍙充晶绗簩浣岯it\r\n" +
-                   "瀛楁锛宼askNO锛屼换鍔″彿\r\n" +
-                   "鍒ゆ柇鐢垫鏄惁绗﹀悎2妤煎埌1妤兼惉閫佹潯浠讹細isNormal  涓�(runMode == 9 鎴�runMode == 7) 涓�锛乮sLock_1_Out \r\n" +
-                   "鍒ゆ柇鐢垫鏄惁绗﹀悎1妤煎埌鎴愬搧搴撳尯鏉′欢锛歩sNormal  涓�(runMode == 9 鎴�runMode == 7) 涓�isLock_1_Out\r\n";
+                var res = "璇诲彇鐢垫鏁版嵁鐨刴odel,绱㈠紩浠�寮�,婊¤冻浠ヤ笅鏉′欢鎵嶈兘鍙戜换鍔�\r\n " +
+                   "瀛楁,isNormal ,鏄惁姝e父妯″紡,1:姝e父妯″紡,绗�涓狟yte鍙充晶绗竴浣岯it \r\n" +
+                   "瀛楁,isValid,褰撳墠浣嶇疆鏄惁鏈夋晥,1:鏈夋晥,0:涓嶇敤绠�绗�涓狟yte鍙充晶绗竴浣岯it \r\n" +
+                   "瀛楁,runMode,鐢垫杩愯妯″紡,9=绌洪棽娉婂仠,7=鑷姩杩愯,绗�0涓狟yte\r\n" +
+                   "瀛楁,isLock_1_Out,涓�眰鍑哄彛鏄惁鍗犵敤,1 = 鍗犵敤,绗�4涓狟yte鍙充晶绗竴浣岯it\r\n" +
+                   "瀛楁,isLock_2_Out,浜屽眰鍑哄彛鏄惁鍗犵敤,1 = 鍗犵敤,绗�4涓狟yte鍙充晶绗簩浣岯it\r\n" +
+                   "瀛楁,taskNO,浠诲姟鍙穃r\n" +
+                   "鍒ゆ柇鐢垫鏄惁绗﹀悎2妤煎埌1妤兼惉閫佹潯浠�isNormal  涓�(runMode == 9 鎴�runMode == 7) 涓�!isLock_1_Out \r\n" +
+                   "鍒ゆ柇鐢垫鏄惁绗﹀悎1妤煎埌鎴愬搧搴撳尯鏉′欢:isNormal  涓�(runMode == 9 鎴�runMode == 7) 涓�isLock_1_Out\r\n";
 
 
                 var isRead = ReadElevatorOutOk();
                 var log = BitConverter.ToString(isRead);
-                res += "璇诲彇鍒扮殑鐢垫byte鏁扮粍锛� + log + "\r\n";
+                res += "璇诲彇鍒扮殑鐢垫byte鏁扮粍:" + log + "\r\n";
                 //if (isRead != null && isRead.Length >= 14) {
                 //    var elevatorReadInfo = new ElevatorReadInfo() {
                 //        isNormal = (isRead[6] & 1) == 1,
@@ -353,14 +352,14 @@
 
                 //    var res1 = elevatorReadInfo.is2To1Ok();
 
-                //    res += "鍒ゆ柇鐢垫鏄惁绗﹀悎2妤煎埌1妤兼惉閫佹潯浠讹紝濡傛灉绗﹀悎鍒欒繑鍥瀟rue锛岀粨鏋� + res1 + "\r\n";
+                //    res += "鍒ゆ柇鐢垫鏄惁绗﹀悎2妤煎埌1妤兼惉閫佹潯浠�濡傛灉绗﹀悎鍒欒繑鍥瀟rue,缁撴灉" + res1 + "\r\n";
 
                 //    var res2 = elevatorReadInfo.is1ToOk();
 
-                //    res += "鍒ゆ柇鐢垫鏄惁绗﹀悎1妤煎埌鎴愬搧搴撳尯鏉′欢锛屽鏋滅鍚堝垯杩斿洖true锛岀粨鏋� + res2 + "\r\n";
+                //    res += "鍒ゆ柇鐢垫鏄惁绗﹀悎1妤煎埌鎴愬搧搴撳尯鏉′欢,濡傛灉绗﹀悎鍒欒繑鍥瀟rue,缁撴灉" + res2 + "\r\n";
                 //}
                 //else {
-                //    return "璇诲彇鐢垫鐘舵�澶辫触锛宐yte鏁扮粍瑕佹眰澶т簬绛変簬14涓笖涓嶄负绌�;
+                //    return "璇诲彇鐢垫鐘舵�澶辫触,byte鏁扮粍瑕佹眰澶т簬绛変簬14涓笖涓嶄负绌�;
                 //}
                 return res;
             }
@@ -390,7 +389,7 @@
                 return false;
             }
             catch (Exception ex) {
-                LogHelper.Error($"鍒ゆ柇鐢垫鏄惁鏂數锛堝彂鐢熶簡寮傚父锛歿JsonConvert.SerializeObject(ex)}锛夛細{ex.Message}", ex);
+                LogHelper.InfoEx(ex);
                 return false;
             }
         }
diff --git a/device/TcpServer.cs b/device/TcpServer.cs
index 5ee2f16..b85a167 100644
--- a/device/TcpServer.cs
+++ b/device/TcpServer.cs
@@ -17,14 +17,14 @@
         }
         private void Init(string ip, int port)
         {
-            //鍒涘缓涓�釜鏂扮殑Socket,杩欓噷鎴戜滑浣跨敤鏈�父鐢ㄧ殑鍩轰簬TCP鐨凷tream Socket锛堟祦寮忓鎺ュ瓧锛�+            //鍒涘缓涓�釜鏂扮殑Socket,杩欓噷鎴戜滑浣跨敤鏈�父鐢ㄧ殑鍩轰簬TCP鐨凷tream Socket (娴佸紡濂楁帴瀛� 
             var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             try
             {
-                //灏嗚socket缁戝畾鍒颁富鏈轰笂闈㈢殑鏌愪釜绔彛锛岀鍙e簲璇ユ斁鍒伴厤缃枃浠朵腑
+                //灏嗚socket缁戝畾鍒颁富鏈轰笂闈㈢殑鏌愪釜绔彛,绔彛搴旇鏀惧埌閰嶇疆鏂囦欢涓�                 socket.Bind(new IPEndPoint(IPAddress.Parse(ip), port));
                 Console.WriteLine(port);
-                //鍚姩鐩戝惉锛屽苟涓旇缃竴涓渶澶х殑闃熷垪闀垮害
+                //鍚姩鐩戝惉,骞朵笖璁剧疆涓�釜鏈�ぇ鐨勯槦鍒楅暱搴�                 socket.Listen(30);
                 //寮�鎺ュ彈瀹㈡埛绔繛鎺ヨ姹�                 socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);
@@ -80,7 +80,7 @@
             }
             catch (Exception ex)
             {
-                Console.WriteLine($"銆愭帴鏀跺鎴风鐨勬秷鎭紓甯搞�锛� + ex.Message);
+                Console.WriteLine($"銆愭帴鏀跺鎴风鐨勬秷鎭紓甯搞�:" + ex.Message);
             }
             //鍑嗗鎺ュ彈涓嬩竴涓鎴风璇锋眰
             socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);
@@ -128,7 +128,7 @@
                     }
                 }
 
-                    //LogHelper.Info($"鎺ユ敹鍒颁俊鎭紝IP锛歿remote_ip},MSG锛歿BitConverter.ToString(buffers[remote_ip])}");
+                    //LogHelper.Info($"鎺ユ敹鍒颁俊鎭�IP:{remote_ip},MSG:{BitConverter.ToString(buffers[remote_ip])}");
 
                     if (buffers.Keys.Contains(remote_ip))
                     {
@@ -156,7 +156,7 @@
 
                             string rfids16 = BitConverter.ToString(rfid);
                             string rfids = Encoding.ASCII.GetString(rfid);
-                            //LogHelper.Info($"璇诲崱鍣ㄦ牎楠屽搴斿鍣ㄥ彿锛歿rfids}锛屽叾16杩涘埗褰㈠紡锛歿rfids16}");
+                            //LogHelper.Info($"璇诲崱鍣ㄦ牎楠屽搴斿鍣ㄥ彿:{rfids},鍏�6杩涘埗褰㈠紡:{rfids16}");
                             //if (ScanCodeHelper.Analysis(remote_ip, rfids))//鏍¢獙RFID
                             //{
                             //    isCheck[remote_ip] = false;
@@ -170,12 +170,12 @@
                         }
                         else
                         {
-                            LogHelper.Info($"涓嶆弧瓒宠鍗″櫒鏍¢獙瑙勫畾锛欼P锛歿remote_ip},MSG锛歿message}");
+                            LogHelper.Info($"涓嶆弧瓒宠鍗″櫒鏍¢獙瑙勫畾:IP:{remote_ip},MSG:{message}");
                         }
                     }
                     catch(Exception ex)
                     {
-                        LogHelper.Info($"鎵爜鏍¢獙鍙戠敓浜嗗紓甯革細{ex.Message}");
+                        LogHelper.Info($"鎵爜鏍¢獙鍙戠敓浜嗗紓甯�{ex.Message}");
                         saoMa[remote_ip] = 4;//鎵爜寮傚父
                     }
 
@@ -185,7 +185,7 @@
                     }
                     catch(Exception ex)
                     {
-                        LogHelper.Info($"鍗峰笜闂ㄦ牎楠屽彂鐢熶簡寮傚父锛歿ex.Message}");
+                        LogHelper.Info($"鍗峰笜闂ㄦ牎楠屽彂鐢熶簡寮傚父:{ex.Message}");
                     }
                         //TcpServerSend(remote_ip, System.Text.Encoding.Default.GetBytes(msgSend));
                         Array.Clear(buffers[remote_ip], 0, buffers[remote_ip].Length);//娓呯┖褰撳墠IP Buffer
@@ -198,12 +198,12 @@
                         }
                     }
   
-                //鎺ユ敹涓嬩竴涓秷鎭�鍥犱负杩欐槸涓�釜閫掑綊鐨勮皟鐢紝鎵�互杩欐牱灏卞彲浠ヤ竴鐩存帴鏀舵秷鎭簡锛�+                //鎺ユ敹涓嬩竴涓秷鎭�鍥犱负杩欐槸涓�釜閫掑綊鐨勮皟鐢�鎵�互杩欐牱灏卞彲浠ヤ竴鐩存帴鏀舵秷鎭簡) 
                 socket.BeginReceive(buffers[remote_ip], 0, buffers[remote_ip].Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), socket);
             }
             catch (Exception ex)
             {
-               
+                LogHelper.InfoEx(ex);
             }
         }
 
@@ -222,7 +222,7 @@
                     try
                     {
                         client.Send(msg);
-                        LogHelper.Info($"宸插彂閫佺粰璇GV鍦板潃{ip}锛寋msg}");
+                        LogHelper.Info($"宸插彂閫佺粰璇GV鍦板潃{ip},{msg}");
                         return true;
                     }
                     catch (SocketException ex)
@@ -240,7 +240,7 @@
             }
             else
             {
-                LogHelper.Info("鏈壘鍒拌璁惧锛屾槸鍚﹀凡杩炴帴锛�);
+                LogHelper.Info("鏈壘鍒拌璁惧,鏄惁宸茶繛鎺ワ紵");
             }
             return false;
 
diff --git a/dispatch/GZRobot.cs b/dispatch/GZRobot.cs
index dbc6847..0e58b2a 100644
--- a/dispatch/GZRobot.cs
+++ b/dispatch/GZRobot.cs
@@ -38,7 +38,7 @@
         /// <param name="created_user"></param>
         /// <returns></returns>
         public static int CreateOrder(string taskNo, int priority, string param, string ts = "churuku", string created_user = "hanhe") {
-            LogHelper.Info($"CreateOrder鍙傛暟淇℃伅:taskNo:{taskNo},priority:{priority},param:{param},ts:{ts}锛宑reated_user锛歿created_user}", "API");
+            LogHelper.Info($"CreateOrder鍙傛暟淇℃伅:taskNo:{taskNo},priority:{priority},param:{param},ts:{ts},created_user:{created_user}", "API");
             var msg = "";
             var orderId = 0;
             var data = new OrderInfo() { order_name = taskNo, priority = priority, dead_line = DateTime.Now, ts_name = ts, parameters = param, created_user = created_user };
@@ -54,8 +54,8 @@
                     //    orderId = dataResult.data[0].in_order_id;
                     //}
 
-                    // 杩斿洖鍙傛暟涓紝code鐩墠涓嶅啀浣跨敤锛屽彲閫氳繃msg瀛楁鍒ゆ柇鏄惁鎴愬姛锛屽鏋渕sg涓衡�success鈥濆垯琛ㄧず鎴愬姛锛屽惁鍒欎负鎶ラ敊淇℃伅鎴栦笉瀛樺湪銆俬ttp code涓�22鏃跺�鐨勬姤閿欎负绯荤粺鎶ラ敊锛屽叾涓殑msg鏃犳硶鍏ㄩ儴鑾峰彇銆�-                    // SELFNOTE: 鐩存帴璋冪敤HttpHelper.Post鏂规硶锛屾棤娉曡幏鍙杊eader锛屾殏鏃朵笉鑰冭檻
+                    // 杩斿洖鍙傛暟涓�code鐩墠涓嶅啀浣跨敤,鍙�杩噈sg瀛楁鍒ゆ柇鏄惁鎴愬姛,濡傛灉msg涓衡�success鈥濆垯琛ㄧず鎴愬姛,鍚﹀垯涓烘姤閿欎俊鎭垨涓嶅瓨鍦ㄣ�http code涓�22鏃跺�鐨勬姤閿欎负绯荤粺鎶ラ敊,鍏朵腑鐨刴sg鏃犳硶鍏ㄩ儴鑾峰彇銆�+                    // SELFNOTE: 鐩存帴璋冪敤HttpHelper.Post鏂规硶,鏃犳硶鑾峰彇header,鏆傛椂涓嶈�铏�                     if (dataResult.msg == "success") {
                         orderId = dataResult.data[0].in_order_id;
                     }
@@ -94,10 +94,10 @@
                 //    return result;
                 //}
 
-                // 杩斿洖鍙傛暟涓紝code鐩墠涓嶅啀浣跨敤锛屽彲閫氳繃msg瀛楁鍒ゆ柇鏄惁鎴愬姛锛屽鏋渕sg涓衡�success鈥濆垯琛ㄧず鎴愬姛锛屽惁鍒欎负鎶ラ敊淇℃伅鎴栦笉瀛樺湪銆俬ttp code涓�22鏃跺�鐨勬姤閿欎负绯荤粺鎶ラ敊锛屽叾涓殑msg鏃犳硶鍏ㄩ儴鑾峰彇銆�-                // SELFNOTE: 鐩存帴璋冪敤HttpHelper.Post鏂规硶锛屾棤娉曡幏鍙杊eader锛屾殏鏃朵笉鑰冭檻
+                // 杩斿洖鍙傛暟涓�code鐩墠涓嶅啀浣跨敤,鍙�杩噈sg瀛楁鍒ゆ柇鏄惁鎴愬姛,濡傛灉msg涓衡�success鈥濆垯琛ㄧず鎴愬姛,鍚﹀垯涓烘姤閿欎俊鎭垨涓嶅瓨鍦ㄣ�http code涓�22鏃跺�鐨勬姤閿欎负绯荤粺鎶ラ敊,鍏朵腑鐨刴sg鏃犳硶鍏ㄩ儴鑾峰彇銆�+                // SELFNOTE: 鐩存帴璋冪敤HttpHelper.Post鏂规硶,鏃犳硶鑾峰彇header,鏆傛椂涓嶈�铏�                 // 灏婇噸鏂囨。鐨勭増鏈�-                if (dataResult.msg == "success") { // 鐩墠鍙彇娑堜竴涓换鍔★紝鎴愬姛鏃犻渶鍐嶆鏌uccess_list鍜宔rror_list
+                if (dataResult.msg == "success") { // 鐩墠鍙彇娑堜竴涓换鍔�鎴愬姛鏃犻渶鍐嶆鏌uccess_list鍜宔rror_list
                     Console.WriteLine("[guozi-CancelOrder]鍙栨秷璁㈠崟鎴愬姛");
                     result = true;
                     return result;
@@ -133,10 +133,10 @@
                 //    return result;
                 //}
 
-                // 杩斿洖鍙傛暟涓紝code鐩墠涓嶅啀浣跨敤锛屽彲閫氳繃msg瀛楁鍒ゆ柇鏄惁鎴愬姛锛屽鏋渕sg涓衡�success鈥濆垯琛ㄧず鎴愬姛锛屽惁鍒欎负鎶ラ敊淇℃伅鎴栦笉瀛樺湪銆俬ttp code涓�22鏃跺�鐨勬姤閿欎负绯荤粺鎶ラ敊锛屽叾涓殑msg鏃犳硶鍏ㄩ儴鑾峰彇銆�-                // SELFNOTE: 鐩存帴璋冪敤HttpHelper.Post鏂规硶锛屾棤娉曡幏鍙杊eader锛屾殏鏃朵笉鑰冭檻
+                // 杩斿洖鍙傛暟涓�code鐩墠涓嶅啀浣跨敤,鍙�杩噈sg瀛楁鍒ゆ柇鏄惁鎴愬姛,濡傛灉msg涓衡�success鈥濆垯琛ㄧず鎴愬姛,鍚﹀垯涓烘姤閿欎俊鎭垨涓嶅瓨鍦ㄣ�http code涓�22鏃跺�鐨勬姤閿欎负绯荤粺鎶ラ敊,鍏朵腑鐨刴sg鏃犳硶鍏ㄩ儴鑾峰彇銆�+                // SELFNOTE: 鐩存帴璋冪敤HttpHelper.Post鏂规硶,鏃犳硶鑾峰彇header,鏆傛椂涓嶈�铏�                 // 灏婇噸鏂囨。鐨勭増鏈�-                if (dataResult.msg == "success") { // 鐩墠鍙彇娑堜竴涓换鍔★紝鎴愬姛鏃犻渶鍐嶆鏌uccess_list鍜宔rror_list
+                if (dataResult.msg == "success") { // 鐩墠鍙彇娑堜竴涓换鍔�鎴愬姛鏃犻渶鍐嶆鏌uccess_list鍜宔rror_list
                     if (dataResult.success_list.Count == requests.Count && dataResult.error_list.Count == 0) {
                         Console.WriteLine("[guozi-CancelOrder]鍙栨秷璁㈠崟鎴愬姛");
                         result = true;
diff --git a/dispatch/HanAo.cs b/dispatch/HanAo.cs
index 848caa8..422f394 100644
--- a/dispatch/HanAo.cs
+++ b/dispatch/HanAo.cs
@@ -102,7 +102,7 @@
             /// </summary>
             public string trkType { get; set; }
             /// <summary>
-            /// 1-999锛堝�瓒婂ぇ浼樺厛绾ц秺楂橈級
+            /// 1-999 (鍊艰秺澶т紭鍏堢骇瓒婇珮) 
             /// </summary>
             public string trkPrty { get; set; } = "1";
             public string frmPos { get; set; }
@@ -115,7 +115,7 @@
             public string groupNo { get; set; } = "";
             public string clientCode { get; set; } = "WMS";
             /// <summary>
-            /// 鏍煎紡锛�022-11-11 11:32:08
+            /// 鏍煎紡:2022-11-11 11:32:08
             /// </summary>
             public string reqTime { get; set; } = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
 
@@ -144,13 +144,13 @@
             public string requestPk { get; set; }
             public string contNo { get; set; }
             /// <summary>
-            /// 鍙屾柟绯荤粺鍏卞悓瀹氫箟 1-鍏ュ簱 2-鍑哄簱 3-绉诲簱 锛堝悗缁鏈夊鍔犲啀鍗忓畾锛�+            /// 鍙屾柟绯荤粺鍏卞悓瀹氫箟 1-鍏ュ簱 2-鍑哄簱 3-绉诲簱  (鍚庣画濡傛湁澧炲姞鍐嶅崗瀹� 
             /// </summary>
             public string noticeType { get; set; }
             public string curPos { get; set; }
             public string noticeInfo { get; set; }
             /// <summary>
-            /// 0-鎴愬姛 锛堝叆搴撲笂鏋跺畬鎴�鍑哄簱涓嬫灦瀹屾垚/搴撳唴绉诲簱瀹屾垚锛氱Щ搴撳彧涓婃姤鏈�粓绉诲簱涓婃灦锛�鎴�鍏朵粬-寮傚父鐮�鍙嶉鐩稿叧缁撴灉鍘熷洜锛學MS鏍规嵁鎯呭喌澶勭悊 
+            /// 0-鎴愬姛  (鍏ュ簱涓婃灦瀹屾垚/鍑哄簱涓嬫灦瀹屾垚/搴撳唴绉诲簱瀹屾垚:绉诲簱鍙笂鎶ユ渶缁堢Щ搴撲笂鏋�  鎴�鍏朵粬-寮傚父鐮�鍙嶉鐩稿叧缁撴灉鍘熷洜,WMS鏍规嵁鎯呭喌澶勭悊 
             /// 1-鍏ュ簱鏈夎揣 2-鍏ヨ繙杩戞湁璐�3-鍑哄簱鏃犺揣 4-鍑鸿繙杩戞湁璐�
             /// </summary>
             public string code { get; set; }
diff --git a/dispatch/HostToAGV.cs b/dispatch/HostToAGV.cs
index 1583115..0b46643 100644
--- a/dispatch/HostToAGV.cs
+++ b/dispatch/HostToAGV.cs
@@ -3,8 +3,8 @@
 //     姝や唬鐮佺敱宸ュ叿鐢熸垚銆� //     杩愯鏃剁増鏈�4.0.30319.42000
 //
-//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�-//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便�
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负,骞朵笖濡傛灉
+//     閲嶆柊鐢熸垚浠g爜,杩欎簺鏇存敼灏嗕細涓㈠け銆� // </auto-generated>
 //------------------------------------------------------------------------------
 
diff --git a/dispatch/NDCApi.cs b/dispatch/NDCApi.cs
index 75cd6ad..559e4f5 100644
--- a/dispatch/NDCApi.cs
+++ b/dispatch/NDCApi.cs
@@ -10,7 +10,7 @@
 namespace HH.WCS.Mobox3.DSZSH.dispatch
 {
     /// <summary>
-    /// NDC鐨凙PI鎺ュ彛锛岀敤浜庢浛浠e師NDC銆丯DCHelper鍜孒ostToAGV妯″潡
+    /// NDC鐨凙PI鎺ュ彛,鐢ㄤ簬鏇夸唬鍘烴DC,NDCHelper鍜孒ostToAGV妯″潡
     /// </summary>
     public class NDCApi
     {
@@ -33,15 +33,15 @@
             try
             {
                 string jsonInfo = JsonConvert.SerializeObject(model);
-                LogHelper.Info($"浠诲姟{taskNo}涓嬪彂锛寋jsonInfo}", "NDC");
+                LogHelper.Info($"NDC浠诲姟涓嬪彂:{taskNo}\n\n{jsonInfo}\n", "NDC");
                 var result = httpH.WebPost(NDCApiUrl + "Add", jsonInfo);
-                LogHelper.Info($"浠诲姟涓嬪彂缁撴灉res={result}", "NDC");
+                LogHelper.Info($"NDC浠诲姟涓嬪彂缁撴灉:res='{result}'", "NDC");
                 agvApiResult = JsonConvert.DeserializeObject<AgvApiResult>(result);
                 return agvApiResult;
             }
             catch (Exception e)
             {
-                LogHelper.Info($"浠诲姟涓嬪彂澶辫触 res={e.Message}", "NDC");
+                LogHelper.Info($"浠诲姟涓嬪彂澶辫触:res='{e.Message}'", "NDC");
                 agvApiResult.err_code = -1;
                 agvApiResult.err_msg = e.Message;
                 return agvApiResult;
@@ -56,7 +56,7 @@
             try
             {
                 string jsonInfo = JsonConvert.SerializeObject(model);
-                LogHelper.Info($"浠诲姟{model.task_no}涓嬪彂锛寋jsonInfo}", "NDC");
+                LogHelper.Info($"浠诲姟{model.task_no}涓嬪彂,{jsonInfo}", "NDC");
 
                 var result = httpH.WebPost(NDCApiUrl + "Add", jsonInfo);
                 LogHelper.Info($"浠诲姟涓嬪彂缁撴灉res={result}", "NDC");
@@ -83,7 +83,7 @@
             try
             {
                 string jsonInfo = JsonConvert.SerializeObject(model);
-                LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷锛寋jsonInfo}", "NDC");
+                LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷,{jsonInfo}", "NDC");
 
                 var result = httpH.WebPost(NDCApiUrl + "Cancel", jsonInfo);
                 LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC");
@@ -107,7 +107,7 @@
             try
             {
                 string jsonInfo = JsonConvert.SerializeObject(model);
-                LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷锛寋jsonInfo}", "NDC");
+                LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷,{jsonInfo}", "NDC");
 
                 var result = httpH.WebPost(NDCApiUrl + "Cancel", jsonInfo);
                 LogHelper.Info($"浠诲姟{model.task_no}鍙栨秷缁撴灉={result}", "NDC");
@@ -135,7 +135,7 @@
             try
             {
                 string jsonInfo = JsonConvert.SerializeObject(model);
-                LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{jsonInfo}", "NDC");
+                LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀�{jsonInfo}", "NDC");
 
                 var result = httpH.WebPost(NDCApiUrl + "ChangePri", jsonInfo);
                 LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC");
@@ -159,7 +159,7 @@
             try
             {
                 string jsonInfo = JsonConvert.SerializeObject(model);
-                LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀癸紝{jsonInfo}", "NDC");
+                LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀�{jsonInfo}", "NDC");
 
                 var result = httpH.WebPost(NDCApiUrl + "ChangePri", jsonInfo);
                 LogHelper.Info($"浠诲姟{model.task_no}浼樺厛绾ф洿鏀圭粨鏋�{result}", "NDC");
@@ -187,7 +187,7 @@
             try
             {
                 string jsonInfo = JsonConvert.SerializeObject(model);
-                LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋jsonInfo}", "NDC");
+                LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼,{jsonInfo}", "NDC");
 
                 var result = httpH.WebPost(NDCApiUrl + "ChangeParam", jsonInfo);
                 LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC");
@@ -211,7 +211,7 @@
             try
             {
                 string jsonInfo = JsonConvert.SerializeObject(model);
-                LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼锛寋jsonInfo}", "NDC");
+                LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼,{jsonInfo}", "NDC");
 
                 var result = httpH.WebPost(NDCApiUrl + "ChangeParam", jsonInfo);
                 LogHelper.Info($"浠诲姟{model.task_no}鍙傛暟鏇存敼缁撴灉={result}", "NDC");
@@ -234,16 +234,16 @@
     /// </summary>
     public class AgvApiResult
     {
-        public int err_code { set; get; }//寮傚父鐮侊細0 - 姝e父锛屽叾瀹冨�涓哄紓甯搁敊璇爜
-        public string err_msg { set; get; }//杩斿洖鐨勯敊璇弿杩帮紝鍦�err_code <> 0 鏃惰繑鍥�-        public object result { set; get; }//姝g‘杩斿洖鐨勭粨鏋滃唴瀹癸紝鍦�err_code = 0 涓旀湁杩斿洖鍐呭鏃�+        public int err_code { set; get; }//寮傚父鐮�0 - 姝e父,鍏跺畠鍊间负寮傚父閿欒鐮�+        public string err_msg { set; get; }//杩斿洖鐨勯敊璇弿杩�鍦�err_code <> 0 鏃惰繑鍥�+        public object result { set; get; }//姝g‘杩斿洖鐨勭粨鏋滃唴瀹�鍦�err_code = 0 涓旀湁杩斿洖鍐呭鏃�     }
 
     public class AddOrderNewModel
     {
-        public int ts_no { set; get; }//TS 鍙凤紝蹇呴』鏈夊�	
+        public int ts_no { set; get; }//TS 鍙�蹇呴』鏈夊�	
         public int pri { set; get; }//浼樺厛绾�-        public string task_no { set; get; }//涓婃父浠诲姟缂栫爜锛屽鏋�no_feedback = 1 鏃讹紝鍙互涓虹┖
+        public string task_no { set; get; }//涓婃父浠诲姟缂栫爜,濡傛灉 no_feedback = 1 鏃�鍙互涓虹┖
         public List<param> param { set; get; } = new List<param>();//鍙傛暟鍒楄〃
     }
 
@@ -257,14 +257,14 @@
     public class CancelOrderModel
     {
         public string task_no { set; get; }//涓婃父浠诲姟缂栫爜
-        public bool is_force { set; get; } = true;//鏄惁寮哄埗鍙栨秷锛� 鈥�寮哄埗
+        public bool is_force { set; get; } = true;//鏄惁寮哄埗鍙栨秷,1 鈥�寮哄埗
     }
 
     public class ChangeParamModel
     {
         public string task_no { set; get; }//涓婃父浠诲姟缂栫爜
         public int param_no { set; get; }//鍙傛暟鍙�-        public string param { set; get; }//鍙傛暟鍐呭锛屽涓弬鏁颁互鑻辨枃鍒嗗彿(;)鍒嗛殧
+        public string param { set; get; }//鍙傛暟鍐呭,澶氫釜鍙傛暟浠ヨ嫳鏂囧垎鍙�;)鍒嗛殧
     }
 
     public class ChangePriModel
diff --git a/models/BaseModel.cs b/models/BaseModel.cs
index 0f17517..fe43192 100644
--- a/models/BaseModel.cs
+++ b/models/BaseModel.cs
@@ -4,12 +4,12 @@
 
 namespace HH.WCS.Mobox3.DSZSH.models {
     /// <summary>
-    /// 銆愭鏋躲�妯℃澘鎶借薄绫伙細鍩烘湰琛ㄦ暟鎹ā鍨�+    /// 銆愭鏋躲�妯℃澘鎶借薄绫�鍩烘湰琛ㄦ暟鎹ā鍨�     /// </summary>
     public abstract class BaseModel {
 
         /// <summary>
-        /// 鍞竴璇嗗埆鐮侊紙搴曞眰涓婚敭锛�+        /// 鍞竴璇嗗埆鐮�(搴曞眰涓婚敭) 
         /// </summary>
         [SugarColumn(IsPrimaryKey = true)]
         public string S_ID { get; set; } = Guid.NewGuid().ToString("D");
@@ -35,7 +35,7 @@
         public DateTime T_MODIFY { get; set; } = DateTime.Now;
 
         /// <summary>
-        /// 鏁版嵁鐘舵�锛氱紪杈戙�瀹氱増
+        /// 鏁版嵁鐘舵�:缂栬緫,瀹氱増
         /// </summary>
         public string S_STATE { get; set; } = "缂栬緫";
     }
diff --git a/models/TN_CAR_IN.cs b/models/TN_CAR_IN.cs
index f299631..6e0df27 100644
--- a/models/TN_CAR_IN.cs
+++ b/models/TN_CAR_IN.cs
@@ -13,7 +13,7 @@
         public string S_CNTR_CODE { set; get; }
 
         /// <summary>
-        /// 鐢熶骇杞︽暟锛岄�鍙峰垎鍓�+        /// 鐢熶骇杞︽暟,閫楀彿鍒嗗壊
         /// </summary>
         public string S_CAR_CODE { set; get; }
         public string S_B_STATE { set; get; }//鐘舵�
diff --git a/models/TN_CG_Detail.cs b/models/TN_CG_Detail.cs
index 959c3a6..9993e0f 100644
--- a/models/TN_CG_Detail.cs
+++ b/models/TN_CG_Detail.cs
@@ -28,12 +28,12 @@
         public string S_CNTR_CODE { get; set; } = string.Empty;
 
         /// <summary>
-        /// 璐у搧鐘舵�锛�鍚堟牸 1寰呮 2涓嶅悎鏍�3鎶芥涓紱涓嬬嚎鍗冲緟妫�+        /// 璐у搧鐘舵�:0鍚堟牸 1寰呮 2涓嶅悎鏍�3鎶芥涓�涓嬬嚎鍗冲緟妫�         /// </summary>
         public string S_ITEM_STATE { get; set; } = "寰呮";
 
         /// <summary>
-        /// 璐у搧鐘舵�锛�鍚堟牸 1寰呮 2涓嶅悎鏍�3姝e湪妫�獙锛涗笅绾垮嵆寰呮
+        /// 璐у搧鐘舵�:0鍚堟牸 1寰呮 2涓嶅悎鏍�3姝e湪妫�獙;涓嬬嚎鍗冲緟妫�         /// </summary>
         public int N_ITEM_STATE { get; set; } = 1;
 
@@ -74,7 +74,7 @@
         ///// <summary>
         ///// 浜х嚎鍙�         ///// </summary>
-        //public int N_PRODUCT_LINE { get; set; } = 0; // NOTE 鍚庣画MES鍙兘浼氭彁渚涳紝鍏堝垱寤�
+        //public int N_PRODUCT_LINE { get; set; } = 0; // NOTE 鍚庣画MES鍙兘浼氭彁渚�鍏堝垱寤�
 
         // ----------------
 
diff --git a/models/TN_Container.cs b/models/TN_Container.cs
index d39ed3d..2168a56 100644
--- a/models/TN_Container.cs
+++ b/models/TN_Container.cs
@@ -14,11 +14,11 @@
         /// </summary>
         public string S_TYPE { get; set; } = string.Empty;
         /// <summary>
-        /// 瑙勬牸锛堢敤浜庤褰曞鍣ㄩ�鐢ㄧ殑鐗╂枡缂栧彿锛�+        /// 瑙勬牸 (鐢ㄤ簬璁板綍瀹瑰櫒閫傜敤鐨勭墿鏂欑紪鍙� 
         /// </summary>
         public string S_SPEC { get; set; } = string.Empty;
         /// <summary>
-        /// 鏉ユ簮锛堣繖閲岃褰曚负鍒涘缓璇ュ鍣ㄧ殑涓讳綋锛歁obox鎴栧叿浣撶殑浠诲姟锛�+        /// 鏉ユ簮 (杩欓噷璁板綍涓哄垱寤鸿瀹瑰櫒鐨勪富浣�Mobox鎴栧叿浣撶殑浠诲姟) 
         /// </summary>
         public string S_SOURCE { get; set; } = string.Empty;
 
diff --git a/models/TN_Location.cs b/models/TN_Location.cs
index 9141ff1..e9c844d 100644
--- a/models/TN_Location.cs
+++ b/models/TN_Location.cs
@@ -27,7 +27,7 @@
         /// <summary>
         /// 鍥借嚜 AGV 瀵瑰簲鐨勫簱浣嶅悕绉�         /// </summary>
-        public string S_AGV_SITE { get; set; } = "";
+        public string S_AGV_SITE { get; set; } = "0";
 
         /// <summary>
         /// 璐т綅瀹瑰櫒瀹归噺
@@ -65,22 +65,22 @@
         // END
 
         /// <summary>
-        /// 涓婇攣鐘舵�鍙凤細0鏃�1鍏ュ簱閿�2鍑哄簱閿�3鍏跺畠閿�+        /// 涓婇攣鐘舵�鍙�0鏃�1鍏ュ簱閿�2鍑哄簱閿�3鍏跺畠閿�         /// </summary>
         public int N_LOCK_STATE { get; set; } = 0;
 
         /// <summary>
-        /// 涓婇攣鐘舵�鍚嶇О锛�鏃�1鍏ュ簱閿�2鍑哄簱閿�3鍏跺畠閿�+        /// 涓婇攣鐘舵�鍚嶇О:0鏃�1鍏ュ簱閿�2鍑哄簱閿�3鍏跺畠閿�         /// </summary>
         public string S_LOCK_STATE { get; set; } = "鏃�;
 
         /// <summary>
-        /// Lock Operator锛氫笂閿佺殑鎿嶄綔鏉ユ簮锛堥�甯告槸浠诲姟鍙凤級
+        /// Lock Operator:涓婇攣鐨勬搷浣滄潵婧�(閫氬父鏄换鍔″彿) 
         /// </summary>
         public string S_LOCK_OP { get; set; } = "";
 
         /// <summary>
-        /// 璐т綅鏄惁鍚敤锛歒鍚敤
+        /// 璐т綅鏄惁鍚敤:Y鍚敤
         /// </summary>
         public string C_ENABLE { get; set; } = "Y";
 
@@ -88,7 +88,7 @@
         /// 璐т綅-瀹瑰櫒 鍏崇郴鏄犲皠
         /// </summary>
         /// <remarks>
-        /// 榛樿鏄竴瀵瑰锛岄�甯告儏鍐垫槸涓�涓�+        /// 榛樿鏄竴瀵瑰,閫氬父鎯呭喌鏄竴瀵逛竴
         /// </remarks>
         [Navigate(NavigateType.OneToMany, nameof(TN_Loc_Container.S_LOC_CODE))]
         public List<TN_Loc_Container> LocCntrRels { get; set; }
diff --git a/models/TN_Outbound_Detail.cs b/models/TN_Outbound_Detail.cs
index aa1a7e1..90eff48 100644
--- a/models/TN_Outbound_Detail.cs
+++ b/models/TN_Outbound_Detail.cs
@@ -13,10 +13,10 @@
 
         public string S_BS_TYPE { get; set; } = string.Empty; // ERP
 
-        public string S_BS_NO { get; set; } = string.Empty; // ERP 鍗曞彿锛堟潵婧愬崟鍙凤級
+        public string S_BS_NO { get; set; } = string.Empty; // ERP 鍗曞彿 (鏉ユ簮鍗曞彿) 
 
         /// <summary>
-        /// 涓氬姟鐘舵�锛�寰呮墽琛�1宸蹭笅鍙�2鎵ц涓�3宸插畬鎴�+        /// 涓氬姟鐘舵�:0寰呮墽琛�1宸蹭笅鍙�2鎵ц涓�3宸插畬鎴�         /// </summary>
         public int N_B_STATE { get; set; } = 1; // 鍒涘缓鍗虫墽琛� 
@@ -33,12 +33,12 @@
         public string S_BATCH_NO { get; set; }
 
         /// <summary>
-        /// 鍑哄簱璐у搧鏁伴噺锛堟暣鏁帮紝鐢ㄤ簬鐢熸垚浠诲姟鏁帮級
+        /// 鍑哄簱璐у搧鏁伴噺 (鏁存暟,鐢ㄤ簬鐢熸垚浠诲姟鏁� 
         /// </summary>
         public int N_COUNT { get; set; }
 
         /// <summary>
-        /// 缁堢偣搴撳尯锛堢敱WMS涓嬪彂浠诲姟鏃舵寚瀹氾級
+        /// 缁堢偣搴撳尯 (鐢盬MS涓嬪彂浠诲姟鏃舵寚瀹� 
         /// </summary>
         public string S_END_AREA { get; set; }
 
diff --git a/models/TN_Outbound_Order.cs b/models/TN_Outbound_Order.cs
index e40fb0e..87084e5 100644
--- a/models/TN_Outbound_Order.cs
+++ b/models/TN_Outbound_Order.cs
@@ -15,10 +15,10 @@
 
         public string S_BS_TYPE { get; set; } = string.Empty; // ERP
 
-        public string S_BS_NO { get; set; } = string.Empty; // ERP 鍗曞彿锛堟潵婧愬崟鍙凤級
+        public string S_BS_NO { get; set; } = string.Empty; // ERP 鍗曞彿 (鏉ユ簮鍗曞彿) 
 
         /// <summary>
-        /// 涓氬姟鐘舵�锛�寰呮墽琛�1宸蹭笅鍙�2鎵ц涓�3宸插畬鎴�+        /// 涓氬姟鐘舵�:0寰呮墽琛�1宸蹭笅鍙�2鎵ц涓�3宸插畬鎴�         /// </summary>
         public int N_B_STATE { get; set; } = 1;
 
@@ -39,12 +39,12 @@
         //public float F_OUT_QTY { get; set; }
 
         /// <summary>
-        /// 缁堢偣搴撳尯锛堢敱WMS涓嬪彂浠诲姟鏃舵寚瀹氾級
+        /// 缁堢偣搴撳尯 (鐢盬MS涓嬪彂浠诲姟鏃舵寚瀹� 
         /// </summary>
         public string S_END_AREA { get; set; }
 
         /// <summary>
-        /// 鏄惁寮哄埗鍑哄簱锛�涓嶅己鍒�1寮哄埗
+        /// 鏄惁寮哄埗鍑哄簱:0涓嶅己鍒�1寮哄埗
         /// </summary>
         public bool B_FORCE_OUT { get; set; }
 
diff --git a/models/TN_Outbound_Plan.cs b/models/TN_Outbound_Plan.cs
index f1ba861..945546b 100644
--- a/models/TN_Outbound_Plan.cs
+++ b/models/TN_Outbound_Plan.cs
@@ -13,7 +13,7 @@
     [SugarTable("TN_Outbound_Plan")]
     public class TN_Outbound_Plan : BaseModel {
         /// <summary>
-        /// 璁″垝鍗曞彿锛堝敮涓�爣璇嗭級
+        /// 璁″垝鍗曞彿 (鍞竴鏍囪瘑) 
         /// </summary>
         public string JHDH { get; set; }
 
diff --git a/models/TN_Record_Table.cs b/models/TN_Record_Table.cs
index 2262000..32c4047 100644
--- a/models/TN_Record_Table.cs
+++ b/models/TN_Record_Table.cs
@@ -57,7 +57,7 @@
         public int N_QTY { get; set; } = 0;
 
         /// <summary>
-        /// 璐т綅缂栫爜锛堝簱鍐呰揣浣嶏紝鍏ュ簱灏辨槸缁堢偣锛屽嚭搴撳氨鏄捣鐐癸級
+        /// 璐т綅缂栫爜 (搴撳唴璐т綅,鍏ュ簱灏辨槸缁堢偣,鍑哄簱灏辨槸璧风偣) 
         /// </summary>
         public string S_LOC_CODE { get; set; }
 
diff --git a/models/TN_RelocationList_Detail.cs b/models/TN_RelocationList_Detail.cs
index 98d7d8d..7f365a4 100644
--- a/models/TN_RelocationList_Detail.cs
+++ b/models/TN_RelocationList_Detail.cs
@@ -23,7 +23,7 @@
         public string S_BATCH_NO { get; set; }
         public string S_END_AREA { get; set; }
         /// <summary>
-        /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
+        /// 涓氬姟鐘舵�:0绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
         /// </summary>
         public int N_B_STATE { get; set; } = 1; // 鍒涘缓鍗虫墽琛�     }
diff --git a/models/TN_Relocation_List.cs b/models/TN_Relocation_List.cs
index abd4c43..076e995 100644
--- a/models/TN_Relocation_List.cs
+++ b/models/TN_Relocation_List.cs
@@ -19,7 +19,7 @@
         //public int N_COUNT { get; set; }
         public string S_END_AREA { get; set; }
         /// <summary>
-        /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
+        /// 涓氬姟鐘舵�:0绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
         /// </summary>
         public int N_B_STATE { get; set; } = 0; // 鍒涘缓鍚庨渶瑕佺‘璁ゆ墽琛�     }
diff --git a/models/TN_SpotCheck_Detail.cs b/models/TN_SpotCheck_Detail.cs
index 0765fc1..6a77e85 100644
--- a/models/TN_SpotCheck_Detail.cs
+++ b/models/TN_SpotCheck_Detail.cs
@@ -23,7 +23,7 @@
         public string S_BATCH_NO { get; set; }
         public string S_END_AREA { get; set; }
         /// <summary>
-        /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
+        /// 涓氬姟鐘舵�:0绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
         /// </summary>
         public int N_B_STATE { get; set; } = 1; // 鍒涘缓鍗虫墽琛�     }
diff --git a/models/TN_Spot_Check.cs b/models/TN_Spot_Check.cs
index 9c3302e..9eb21e8 100644
--- a/models/TN_Spot_Check.cs
+++ b/models/TN_Spot_Check.cs
@@ -19,7 +19,7 @@
         //public int N_COUNT { get; set; }
         public string S_END_AREA { get; set; }
         /// <summary>
-        /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
+        /// 涓氬姟鐘舵�:0绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
         /// </summary>
         public int N_B_STATE { get; set; } = 0; // 鍒涘缓鍚庨渶瑕佺‘璁ゆ墽琛�     }
diff --git a/models/TN_Task.cs b/models/TN_Task.cs
index bb533c2..540fce1 100644
--- a/models/TN_Task.cs
+++ b/models/TN_Task.cs
@@ -55,12 +55,12 @@
         public string S_EQ_NO { get; set; }
 
         /// <summary>
-        /// 浠诲姟鐘舵�锛�绛夊緟 1宸叉帹閫�2鎵ц 3瀹屾垚 4閿欒
+        /// 浠诲姟鐘舵�:0绛夊緟 1宸叉帹閫�2鎵ц 3瀹屾垚 4閿欒
         /// </summary>
         public string S_B_STATE { get; set; } = "绛夊緟";
 
         /// <summary>
-        /// 浠诲姟鐘舵�锛�绛夊緟 1宸叉帹閫�2鎵ц 3瀹屾垚 4閿欒
+        /// 浠诲姟鐘舵�:0绛夊緟 1宸叉帹閫�2鎵ц 3瀹屾垚 4閿欒
         /// </summary>
         public int N_B_STATE { get; set; }
    
@@ -92,7 +92,7 @@
         public string S_BS_TYPE { get; set; } = string.Empty;
 
         ///// <summary>
-        ///// 鏄惁寮哄埗鍑哄簱锛�涓嶅己鍒�1寮哄埗
+        ///// 鏄惁寮哄埗鍑哄簱:0涓嶅己鍒�1寮哄埗
         ///// </summary>
         //public int N_FORCE { get; set; } = 0;
 
diff --git a/process/DeviceProcess.cs b/process/DeviceProcess.cs
index 0aac18c..dfce112 100644
--- a/process/DeviceProcess.cs
+++ b/process/DeviceProcess.cs
@@ -9,7 +9,7 @@
 namespace HH.WCS.Mobox3.DSZSH.process
 {
     /// <summary>
-    /// 璁惧淇″彿澶勭悊锛屼富瑕佹槸tcp淇″彿锛屾垜浠仛server琚姩鎺ユ敹淇″彿鏉ュ鐞嗭紝鏍规嵁椤圭洰瀹氬埗鐨�+    /// 璁惧淇″彿澶勭悊,涓昏鏄痶cp淇″彿,鎴戜滑鍋歴erver琚姩鎺ユ敹淇″彿鏉ュ鐞�鏍规嵁椤圭洰瀹氬埗鐨�     /// </summary>
     internal class DeviceProcess
     {
diff --git a/process/TaskProcess.cs b/process/TaskProcess.cs
index adca1cd..4151c3f 100644
--- a/process/TaskProcess.cs
+++ b/process/TaskProcess.cs
@@ -14,32 +14,32 @@
         #region 浠诲姟鐩稿叧
         //--------------------------------------------------浠诲姟鐩稿叧--------------------------------------------------
         /// <summary>
-        /// 鍙栬揣鍗歌揣瀹屾垚锛岀紦瀛樹綅鐘舵�鏇存柊
+        /// 鍙栬揣鍗歌揣瀹屾垚,缂撳瓨浣嶇姸鎬佹洿鏂�         /// </summary>
         /// <param name="mst"></param>
         /// <param name="load"></param>
         internal static void BufferLocUpdate(TN_Task mst, bool load) {
             //var trayCarryCount = mst.N_CNTR_COUNT > 0 ? mst.N_CNTR_COUNT : 1;
             if (load) {
-                Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}");
-                LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}");
+                Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚,璧风偣瑙g粦瀹瑰櫒{mst.S_CNTR_CODE}");
+                LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚,璧风偣瑙g粦瀹瑰櫒{mst.S_CNTR_CODE}");
                 LocationHelper.UnbindLocCntr(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList());
             }
             else {
-                Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}");
-                LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}");
+                Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚,缁堢偣缁戝畾瀹瑰櫒{mst.S_CNTR_CODE}");
+                LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚,缁堢偣缁戝畾瀹瑰櫒{mst.S_CNTR_CODE}");
                 LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList());
             }
         }
 
         /// <summary>
-        /// 浠诲姟鍙栨秷锛岀紦瀛樹綅鐘舵�鏇存柊
+        /// 浠诲姟鍙栨秷,缂撳瓨浣嶇姸鎬佹洿鏂�         /// </summary>
         /// <param name="mst"></param>
         internal static void BufferLocCancelUpdate(TN_Task mst) {
-            //浠诲姟鍙栨秷锛屽彇璐у畬鎴愬墠鐨勶紝璧风偣鐨刲oadingCount鍜岀粓鐐箄nLoadingCount閮芥竻闄わ紝鍙栬揣瀹屾垚鐨勫彧澶勭悊缁堢偣
+            //浠诲姟鍙栨秷,鍙栬揣瀹屾垚鍓嶇殑,璧风偣鐨刲oadingCount鍜岀粓鐐箄nLoadingCount閮芥竻闄�鍙栬揣瀹屾垚鐨勫彧澶勭悊缁堢偣
             if (WCSHelper.CheckActionRecordExist(mst.S_CODE, 4)) {
-                //鏍规嵁瀹㈡埛鐜板満瑕佹眰锛屽鏋滃彇璐у畬鎴愪换鍔″け璐ヤ汉宸ユ媺鍒扮粓鐐癸紝鎴戜滑灏卞綋鍗歌揣瀹屾垚澶勭悊锛涘鏋滄槸浜哄伐鎷夎蛋鍒板叾瀹冨尯鍩燂紝鎴戜滑灏辫В閿佺粓鐐癸紝鍒犻櫎鎵樼洏銆�+                //鏍规嵁瀹㈡埛鐜板満瑕佹眰,濡傛灉鍙栬揣瀹屾垚浠诲姟澶辫触浜哄伐鎷夊埌缁堢偣,鎴戜滑灏卞綋鍗歌揣瀹屾垚澶勭悊;濡傛灉鏄汉宸ユ媺璧板埌鍏跺畠鍖哄煙,鎴戜滑灏辫В閿佺粓鐐�鍒犻櫎鎵樼洏銆�                 //缁堢偣缁戝畾
                 BufferLocUpdate(mst, false);
                 LocationHelper.UnLockLoc(mst.S_END_LOC);
@@ -81,11 +81,11 @@
         /// <param name="extData"></param>
         internal static void OperateReq(string no, int state, string forkliftNo, string extData = "") {
             if (state == 1101) {
-                //璇锋眰鍙栬揣锛�+                //璇锋眰鍙栬揣,
             }
             if (state == 1102) {
-                //璇锋眰鍗歌揣锛�-                //鏍规嵁缁堢偣鍒ゆ柇锛屾槸cb02鐨勫叆鍙o紝鍒ゆ柇鍐呭瓨涓姸鎬侊紙瑕佺姸鎬佹椂闂达級锛屽厑璁稿嵏璐э紝閫氱煡agv鏀瑰弬鏁�+                //璇锋眰鍗歌揣,
+                //鏍规嵁缁堢偣鍒ゆ柇,鏄痗b02鐨勫叆鍙�鍒ゆ柇鍐呭瓨涓姸鎬�(瑕佺姸鎬佹椂闂� ,鍏佽鍗歌揣,閫氱煡agv鏀瑰弬鏁�                 var dic = new Dictionary<string, string>();
                 //< Req >< Order No = 'TN2302020002' ParamNo = '18' Param1 = '12' /></ Req >
                 dic.Add("No", no);
@@ -95,7 +95,7 @@
                 //鏀瑰畬鍙傛暟杞﹀瓙灏变細鑷繁鍗歌揣
             }
             if (state == 1103) {
-                //澶ч搧妗嗗弶璧颁互鍚庨�鐭ワ紝鎴戜滑瑕侀�鐭ヨ緭閫佺嚎
+                //澶ч搧妗嗗弶璧颁互鍚庨�鐭�鎴戜滑瑕侀�鐭ヨ緭閫佺嚎
             }
         }
 
@@ -109,7 +109,7 @@
         internal static bool SendTask(TN_Task mst) {
             var result = false;
             switch (mst.N_SCHEDULE_TYPE) {
-                case 1: //閫氳繃NDC锛宧osttoagv璋冨害璁惧
+                case 1: //閫氳繃NDC,hosttoagv璋冨害璁惧
                     return SendNDCTask(mst);
                 case 5: //閫氳繃鏉ゥ璋冨害璁惧 
                     return SendHanAoTask(mst);
@@ -127,8 +127,8 @@
             if (mst.N_B_STATE == 0) {
                 start = LocationHelper.GetAgvSite(mst.S_START_LOC);
                 end = LocationHelper.GetAgvSite(mst.S_END_LOC);
+                LogHelper.Info($"NDC鎺ㄩ�浠诲姟:{mst.S_CODE};start='{start}',end='{end}'");
 
-                LogHelper.Info($"NDC鎺ㄩ�浠诲姟 {mst.S_CODE};" + "start=" + start + "end= " + end);
                 var startLoc = LocationHelper.GetLoc(mst.S_START_LOC);
                 var endLoc = LocationHelper.GetLoc(mst.S_END_LOC);
                 var dic = new List<param>();
@@ -136,20 +136,19 @@
                 dic.Add(new param() { name = "From", value = start.ToString() });
                 dic.Add(new param() { name = "To", value = end.ToString() });
                 dic.Add(new param() { name = "FUNC", value = startLoc.N_LAYER.ToString() });
-
                 dic.Add(new param() { name = "Ctype", value = "0" });
 
                 var res = NDCApi.AddOrderNew(1, 1, mst.S_CODE, dic);//娣诲姞鏂板懡浠�                 if (res != null && (res.err_code == 0 || res.err_code == 50009)) {
-                    //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇
+                    //鎺ㄩ�鎴愬姛,淇敼浠诲姟浼樺厛绾�                     mst.N_B_STATE = 1;
                     mst.S_B_STATE = TN_Task.GetStateStr(1);
                     WCSHelper.UpdateStatus(mst);//鏇存柊浠诲姟鐘舵�
                     result = true;
-                    LogHelper.Info($"NDC鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE}start= {mst.S_START_LOC} + end = {mst.S_END_LOC}");
+                    LogHelper.Info($"NDC鎺ㄩ�浠诲姟鎴愬姛:{mst.S_CODE};start='{mst.S_START_LOC}',end='{mst.S_END_LOC}'");
                 }
                 else {
-                    LogHelper.Info($"NDC鎺ㄩ�浠诲姟澶辫触 {mst.S_CODE};Res:" + JsonConvert.SerializeObject(res));
+                    LogHelper.Info($"NDC鎺ㄩ�浠诲姟澶辫触:{mst.S_CODE};Res:" + JsonConvert.SerializeObject(res));
                 }
             }
             return result;
diff --git a/swagger.js b/swagger.js
index aec2e15..54ad61a 100644
--- a/swagger.js
+++ b/swagger.js
@@ -48,7 +48,7 @@
             dataType: "json",
             success: function(data) {
                 var modelDesc = data.ModelDesc;
-                // 在模型展示区域添加描述
+                // 鍦ㄦā鍨嬪睍绀哄尯鍩熸坊鍔犳弿杩�                 $(".model-box").each(function() {
                     var modelName = $(this).find(".model-title").text();
                     if (modelDesc[modelName]) {
@@ -75,54 +75,54 @@
 
 /* jshint quotmark: float */
 window.SwaggerTranslator.learn({
-    "Warning: Deprecated": "警告:已过时",
-    "Implementation Notes": "实现备注",
-    "Response Class": "响应类",
-    "Status": "状态",
-    "Parameters": "参数",
-    "Parameter": "参数",
-    "Value": "值",
-    "Description": "描述",
-    "Parameter Type": "参数类型",
-    "Data Type": "数据类型",
-    "Response Messages": "响应消息",
-    "HTTP Status Code": "HTTP 状态码",
-    "Reason": "原因",
-    "Response Model": "响应模型",
-    "Request URL": "请求 URL",
-    "Response Body": "响应体",
-    "Response Code": "响应码",
-    "Response Headers": "响应头",
-    "Hide Response": "隐藏响应",
-    "Headers": "头",
-    "Try it out!": "试一下!",
-    "Show/Hide": "显示/隐藏",
-    "List Operations": "显示操作",
-    "Expand Operations": "展开操作",
-    "Raw": "原始",
-    "can't parse JSON.  Raw result": "无法解析 JSON。原始结果",
-    "Model Schema": "模型架构",
-    "Model": "模型",
-    "apply": "应用",
-    "Username": "用户名",
-    "Password": "密码",
-    "Terms of service": "服务条款",
-    "Created by": "创建者",
-    "See more at": "查看更多:",
-    "Contact the developer": "联系开发者",
-    "api version": "api 版本",
-    "Response Content Type": "响应 Content Type",
-    "fetching resource": "正在获取资源",
-    "fetching resource list": "正在获取资源列表",
-    "Explore": "浏览",
-    "Show Swagger Petstore Example Apis": "显示 Swagger Petstore 示例 Apis",
-    "Can't read from server.  It may not have the appropriate access-control-origin settings.": "无法从服务器读取。可能没有正确设置 access-control-origin。",
-    "Please specify the protocol for": "请指定协议:",
-    "Can't read swagger JSON from": "无法读取 swagger JSON于",
-    "Finished Loading Resource Information. Rendering Swagger UI": "已加载资源信息。正在渲染 Swagger UI",
-    "Unable to read api": "无法读取 api",
-    "from path": "从路径",
-    "server returned": "服务器返回"
+    "Warning: Deprecated": "璀﹀憡:宸茶繃鏃�,
+    "Implementation Notes": "瀹炵幇澶囨敞",
+    "Response Class": "鍝嶅簲绫�,
+    "Status": "鐘舵�",
+    "Parameters": "鍙傛暟",
+    "Parameter": "鍙傛暟",
+    "Value": "鍊�,
+    "Description": "鎻忚堪",
+    "Parameter Type": "鍙傛暟绫诲瀷",
+    "Data Type": "鏁版嵁绫诲瀷",
+    "Response Messages": "鍝嶅簲娑堟伅",
+    "HTTP Status Code": "HTTP 鐘舵�鐮�,
+    "Reason": "鍘熷洜",
+    "Response Model": "鍝嶅簲妯″瀷",
+    "Request URL": "璇锋眰 URL",
+    "Response Body": "鍝嶅簲浣�,
+    "Response Code": "鍝嶅簲鐮�,
+    "Response Headers": "鍝嶅簲澶�,
+    "Hide Response": "闅愯棌鍝嶅簲",
+    "Headers": "澶�,
+    "Try it out!": "璇曚竴涓�",
+    "Show/Hide": "鏄剧ず/闅愯棌",
+    "List Operations": "鏄剧ず鎿嶄綔",
+    "Expand Operations": "灞曞紑鎿嶄綔",
+    "Raw": "鍘熷",
+    "can't parse JSON.  Raw result": "鏃犳硶瑙f瀽 JSON銆傚師濮嬬粨鏋�,
+    "Model Schema": "妯″瀷鏋舵瀯",
+    "Model": "妯″瀷",
+    "apply": "搴旂敤",
+    "Username": "鐢ㄦ埛鍚�,
+    "Password": "瀵嗙爜",
+    "Terms of service": "鏈嶅姟鏉℃",
+    "Created by": "鍒涘缓鑰�,
+    "See more at": "鏌ョ湅鏇村:",
+    "Contact the developer": "鑱旂郴寮�彂鑰�,
+    "api version": "api 鐗堟湰",
+    "Response Content Type": "鍝嶅簲 Content Type",
+    "fetching resource": "姝e湪鑾峰彇璧勬簮",
+    "fetching resource list": "姝e湪鑾峰彇璧勬簮鍒楄〃",
+    "Explore": "娴忚",
+    "Show Swagger Petstore Example Apis": "鏄剧ず Swagger Petstore 绀轰緥 Apis",
+    "Can't read from server.  It may not have the appropriate access-control-origin settings.": "鏃犳硶浠庢湇鍔″櫒璇诲彇銆傚彲鑳芥病鏈夋纭缃�access-control-origin銆�,
+    "Please specify the protocol for": "璇锋寚瀹氬崗璁�",
+    "Can't read swagger JSON from": "鏃犳硶璇诲彇 swagger JSON浜�,
+    "Finished Loading Resource Information. Rendering Swagger UI": "宸插姞杞借祫婧愪俊鎭�姝e湪娓叉煋 Swagger UI",
+    "Unable to read api": "鏃犳硶璇诲彇 api",
+    "from path": "浠庤矾寰�,
+    "server returned": "鏈嶅姟鍣ㄨ繑鍥�
 });
 $(function ()
 {
diff --git a/util/HttpHelper.cs b/util/HttpHelper.cs
index 44c3df4..6efe80a 100644
--- a/util/HttpHelper.cs
+++ b/util/HttpHelper.cs
@@ -9,7 +9,7 @@
     public class HttpHelper {
         public string WebPost(string url, string postData, string cotentType = "application/json")
         {
-            Console.WriteLine(url);
+            LogHelper.Info($"WebPost:璁块棶:{url}", "API");
             WebRequest request = WebRequest.Create(url);
             request.Method = "POST";
             //string postData = JsonConvert.SerializeObject(data); ;
@@ -35,7 +35,7 @@
             }
             catch (Exception e)
             {
-                LogHelper.Info($"WebPost res={e.Message}", "API");
+                LogHelper.Info($"WebPost:寮傚父:{e.Message}\n\n{e.StackTrace}\n", "API");
                 return "";
             }
             finally
diff --git a/util/LogHelper.cs b/util/LogHelper.cs
index 7621d26..b13aff4 100644
--- a/util/LogHelper.cs
+++ b/util/LogHelper.cs
@@ -1,6 +1,7 @@
 锘縰sing System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Xml.Linq;
 
 using Newtonsoft.Json;
 
@@ -71,16 +72,20 @@
         }
 
         #region 鑷畾涔夋柟娉�-        public static void InfoEx(Exception ex) {
-            Info($"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}");
+        public static void Warn(string msg, string preLog = "") {
+            Info(preLog + $"鍑虹幇浜哰璀﹀憡]:{msg}", "Warn");
+        }
+
+        public static void InfoEx(Exception ex, string preLog = "") {
+            Info(preLog + $"鍙戠敓浜哰寮傚父]:{ex.Message}\n\n{ex.StackTrace}\n", "Exception");
         }
 
         public static void InfoApi(string apiName, object model) {
-            Info($"瑙﹀彂API锛歿apiName} " + JsonConvert.SerializeObject(model), "API");
+            Info($"瑙﹀彂API:{apiName} " + JsonConvert.SerializeObject(model), "API");
         }
 
         public static void InfoHostToAGV(string taskName, object model) {
-            Info($"AGV浠诲姟锛歿taskName}" + JsonConvert.SerializeObject(model), "HosttoagvTask");
+            Info($"AGV浠诲姟:{taskName}" + JsonConvert.SerializeObject(model), "HosttoagvTask");
         }
         #endregion
     }
@@ -91,7 +96,7 @@
         /// 閫氳繃閰嶇疆鏂囦欢閰嶇疆鏃ュ織
         /// </summary>
         static LogFactory() {
-            var loggerNames = new List<string>() { "HosttoagvTask", "HosttoagvCar", "NDC", "鏉ゥ", "PLC", "API", "OPC" };
+            var loggerNames = new List<string>() { "HosttoagvTask", "HosttoagvCar", "NDC", "鏉ゥ", "PLC", "API", "OPC", "Warn", "Exception" };
             LogManager.Configuration = DefaultConfig(loggerNames);
         }
 
diff --git a/util/SqlHelper.cs b/util/SqlHelper.cs
index f8327ed..e59332d 100644
--- a/util/SqlHelper.cs
+++ b/util/SqlHelper.cs
@@ -6,7 +6,7 @@
 namespace HH.WCS.Mobox3.DSZSH.util {
     //https://www.donet5.com/Home/Doc
     public class SqlHelper<T> where T : class, new() {
-        // NOTE锛氬鏋滅敤Oracle鏁版嵁搴擄紝闇�鍖匫racle.ManagedDataAccess/21.15.0锛岀幆澧僴etframework 4.6.2锛堝お鏂颁簡4.8鏈夌殑鏈嶅姟鍣ㄥ畨瑁呬笉涓婂幓锛�+        // NOTE:濡傛灉鐢∣racle鏁版嵁搴�闇�鍖匫racle.ManagedDataAccess/21.15.0,鐜netframework 4.6.2 (澶柊浜�.8鏈夌殑鏈嶅姟鍣ㄥ畨瑁呬笉涓婂幓) 
 
         public SqlSugarClient GetInstance(string url = "") {
             //鍒涘缓鏁版嵁搴撳璞�@@ -54,7 +54,7 @@
                 });
             };
 
-            //鎹浆鎹�(ExecuteCommand鎵嶄細鎷︽埅锛屾煡璇笉琛�
+            //鎹浆鎹�(ExecuteCommand鎵嶄細鎷︽埅,鏌ヨ涓嶈)
             //db.Aop.DataExecuting = (value, entity) => {
             //    //var val=entity.EntityColumnInfo
             //    Console.WriteLine(entity.EntityName);
diff --git a/wms/LocationHelper.cs b/wms/LocationHelper.cs
index 3ab86d1..fc9bf9f 100644
--- a/wms/LocationHelper.cs
+++ b/wms/LocationHelper.cs
@@ -11,7 +11,7 @@
 
 namespace HH.WCS.Mobox3.DSZSH.wms {
     /// <summary>
-    /// 璐т綅甯姪绫伙紙鍖呭惈璐т綅-瀹瑰櫒鍏崇郴鐨勫鐞嗭級
+    /// 璐т綅甯姪绫�(鍖呭惈璐т綅-瀹瑰櫒鍏崇郴鐨勫鐞� 
     /// </summary>
     public class LocationHelper
     {
@@ -111,7 +111,7 @@
         }
 
         /// <summary>
-        /// 鍙栬揣瀹岃В閿佽捣鐐癸紝鍗歌揣瀹岃В閿佺粓鐐癸紝鍙楠岄攣鐨勬潵婧愶紝涔熷彲浠ヤ笉鏍¢獙
+        /// 鍙栬揣瀹岃В閿佽捣鐐�鍗歌揣瀹岃В閿佺粓鐐�鍙楠岄攣鐨勬潵婧�涔熷彲浠ヤ笉鏍¢獙
         /// </summary>
         /// <param name="loc"></param>
         /// <returns></returns>
@@ -146,12 +146,12 @@
         public static string UnbindLocCntr(string loc, List<string> cntrs)
         {
             var db = new SqlHelper<object>().GetInstance();
-            var logs = $"璐т綅锛歿loc}锛屽鍣細{JsonConvert.SerializeObject(cntrs)}";
+            var logs = $"璐т綅:{loc},瀹瑰櫒:{JsonConvert.SerializeObject(cntrs)}";
             try
             {
                 var lcrList = db.Queryable<TN_Loc_Container>().Where(a => cntrs.Contains(a.S_CNTR_CODE) && a.S_LOC_CODE == loc).ToList();
                 if (lcrList.Count == 0) {
-                    LogHelper.Info($"璐т綅鏃犻渶瑙g粦瀹瑰櫒锛屽湪鏁版嵁搴撲腑鏈壘鍒皗JsonConvert.SerializeObject(cntrs)}鐩稿叧鐨勮揣浣嶅鍣ㄥ叧绯昏〃淇℃伅");
+                    LogHelper.Info($"璐т綅鏃犻渶瑙g粦瀹瑰櫒,鍦ㄦ暟鎹簱涓湭鎵惧埌{JsonConvert.SerializeObject(cntrs)}鐩稿叧鐨勮揣浣嶅鍣ㄥ叧绯昏〃淇℃伅");
                 }
                 cntrs = lcrList.Select(a => a.S_CNTR_CODE).ToList();
 
@@ -167,42 +167,42 @@
                     {
                         if (db.Deleteable<TN_Loc_Container>().Where(it => cntrs.Contains(it.S_CNTR_CODE) && it.S_LOC_CODE == loc).ExecuteCommand() > 0)
                         {
-                            LogHelper.Info($"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄦ垚鍔燂紝{log}");
+                            LogHelper.Info($"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄦ垚鍔�{log}");
                         }
                         else
                         {
                             tran.RollbackTran();
 
-                            LogHelper.Info($"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ紝{log}");
+                            LogHelper.Info($"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐�{log}");
 
-                            return "璐т綅瑙g粦瀹瑰櫒澶辫触锛� + logs;
+                            return "璐т綅瑙g粦瀹瑰櫒澶辫触," + logs;
                         }
 
                         log = JsonConvert.SerializeObject(location);
                         if (db.Updateable(location).UpdateColumns(it => new { it.N_CURRENT_NUM, it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand() > 0) {
                             tran.CommitTran();
 
-                            LogHelper.Info($"鏇存柊璐т綅琛ㄦ垚鍔燂紝{log}");
+                            LogHelper.Info($"鏇存柊璐т綅琛ㄦ垚鍔�{log}");
                         }
                         else {
                             tran.RollbackTran();
 
-                            LogHelper.Info($"鏇存柊璐т綅琛ㄥけ璐ワ紝{log}");
+                            LogHelper.Info($"鏇存柊璐т綅琛ㄥけ璐�{log}");
 
-                            return "璐т綅瑙g粦瀹瑰櫒澶辫触锛� + logs;
+                            return "璐т綅瑙g粦瀹瑰櫒澶辫触," + logs;
                         }
                     }
                 }
                 else
                 {
-                    LogHelper.Info($"鍦ㄦ暟鎹簱涓湭鎵惧埌璇ヨ揣浣嶏紝鏃犻渶鏇存柊锛岃揣浣嶏細{loc}");
+                    LogHelper.Info($"鍦ㄦ暟鎹簱涓湭鎵惧埌璇ヨ揣浣�鏃犻渶鏇存柊,璐т綅:{loc}");
                 }
-                return "璐т綅瑙g粦瀹瑰櫒鎴愬姛锛� + logs;
+                return "璐т綅瑙g粦瀹瑰櫒鎴愬姛," + logs;
             }
             catch (Exception ex)
             {
-                LogHelper.Info($"鍙戠敓浜嗗紓甯革紝璐т綅瑙g粦瀹瑰櫒澶辫触锛寋ex.Message}");
-                return "璐т綅缁戝畾瀹瑰櫒澶辫触锛� + logs;
+                LogHelper.Info($"鍙戠敓浜嗗紓甯�璐т綅瑙g粦瀹瑰櫒澶辫触,{ex.Message}");
+                return "璐т綅缁戝畾瀹瑰櫒澶辫触," + logs;
             }
         }
 
@@ -215,7 +215,7 @@
         public static string BindingLoc(string loc, List<string> cntrs)
         {
             var db = new SqlHelper<object>().GetInstance();
-            var logs = $"璐т綅锛歿loc}锛屽鍣細{JsonConvert.SerializeObject(cntrs)}";
+            var logs = $"璐т綅:{loc},瀹瑰櫒:{JsonConvert.SerializeObject(cntrs)}";
             try
             {
                 // 鍒犻櫎宸茬粡缁戝畾杩囩殑瀹瑰櫒璁板綍
@@ -230,7 +230,7 @@
                     var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == item).First();
 
                     if (cntr == null) {
-                        LogHelper.Info($"璐т綅瑙g粦鏃讹紝瀹瑰櫒{item}娌℃湁鍦ㄥ鍣ㄤ俊鎭〃涓煡鍒帮紝涓嶈褰曞鍣ㄧ被鍨�);
+                        LogHelper.Info($"璐т綅瑙g粦鏃�瀹瑰櫒{item}娌℃湁鍦ㄥ鍣ㄤ俊鎭〃涓煡鍒�涓嶈褰曞鍣ㄧ被鍨�);
                         bindLocCntList.Add(new TN_Loc_Container() { S_LOC_CODE = loc, S_CNTR_CODE = item });
                     }
                     else {
@@ -244,10 +244,10 @@
                 {
                     if (db.Insertable(bindLocCntList).ExecuteCommand() <= 0) {
                         db.RollbackTran();
-                        LogHelper.Info($"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ紝{log}");
-                        return "璐т綅缁戝畾瀹瑰櫒澶辫触锛� + logs;
+                        LogHelper.Info($"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐�{log}");
+                        return "璐т綅缁戝畾瀹瑰櫒澶辫触," + logs;
                     }
-                    LogHelper.Info($"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄦ垚鍔燂紝{log}");
+                    LogHelper.Info($"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄦ垚鍔�{log}");
 
                     var location = db.Queryable<TN_Location>().First(a => a.S_CODE == loc);
                     if (location != null)
@@ -261,29 +261,29 @@
                         {
                             db.CommitTran();
 
-                            LogHelper.Info($"鏇存柊璐т綅琛ㄦ垚鍔燂紝{log}");
+                            LogHelper.Info($"鏇存柊璐т綅琛ㄦ垚鍔�{log}");
                         }
                         else
                         {
                             db.RollbackTran();
 
-                            LogHelper.Info($"鏇存柊璐т綅琛ㄥけ璐ワ紝{log}");
+                            LogHelper.Info($"鏇存柊璐т綅琛ㄥけ璐�{log}");
 
-                            return "璐т綅缁戝畾瀹瑰櫒澶辫触锛� + logs;
+                            return "璐т綅缁戝畾瀹瑰櫒澶辫触," + logs;
                         }
                     }
                     else
                     {
                         db.RollbackTran();
-                        LogHelper.Info($"鏈壘鍒拌璐т綅{loc}锛屾垨鑰呭凡閿佸畾锛寋log}");
+                        LogHelper.Info($"鏈壘鍒拌璐т綅{loc},鎴栬�宸查攣瀹�{log}");
                     }
                 }
-                return "璐т綅缁戝畾瀹瑰櫒鎴愬姛锛� + logs;
+                return "璐т綅缁戝畾瀹瑰櫒鎴愬姛," + logs;
             }
             catch (Exception ex)
             {
-                LogHelper.Info($"鍙戠敓浜嗗紓甯革紝璐т綅缁戝畾瀹瑰櫒澶辫触锛�);
-                return "璐т綅缁戝畾瀹瑰櫒澶辫触锛� + ex.Message;
+                LogHelper.Info($"鍙戠敓浜嗗紓甯�璐т綅缁戝畾瀹瑰櫒澶辫触,");
+                return "璐т綅缁戝畾瀹瑰櫒澶辫触," + ex.Message;
             }
         }
     }
diff --git a/wms/WCSHelper.cs b/wms/WCSHelper.cs
index 06549ea..d145c3a 100644
--- a/wms/WCSHelper.cs
+++ b/wms/WCSHelper.cs
@@ -53,11 +53,96 @@
         }
 
         /// <summary>
-        /// 璧风偣鍑哄簱閿侊紙寮哄埗璧嬪�锛屼笉浼氭鏌oc!=null锛岄攣鐘舵�=鏃狅紝闇�浼犲弬鍓嶇‘璁わ級
+        /// ![[寮冪敤|鐞嗙敱:涓嶇伒娲�娑夊強涓氬姟杩囦簬鍏蜂綋]]妫�煡瀹瑰櫒绫诲瀷鏄惁姝g‘
+        /// </summary>
+        /// <param name="cntrCode"></param>
+        /// <param name="cntrType"></param>
+        /// <param name="errMsg"></param>
+        /// <returns></returns>
+        private static bool CheckCntrType(string cntrCode, string cntrType, out string errMsg) {
+            var db = new SqlHelper<object>().GetInstance();
+            errMsg = string.Empty;
+
+            var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == cntrType).First();
+            if (cntr == null) {
+                errMsg = $"瀹瑰櫒'{cntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪,璇峰湪鍓嶅彴椤甸潰涓淮鎶�";
+                return false;
+            }
+            if (cntr.S_TYPE != cntrType) {
+                errMsg = $"瀹瑰櫒'{cntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷鏄�{cntr.S_TYPE},涓嶆槸'{cntrType}'!";
+                return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// 鏍规嵁瀹瑰櫒鍙�鏌ヨ褰撳墠瀹瑰櫒鍏宠仈鐨刐璐т綅/瀹瑰櫒/鐗╂枡]淇℃伅(鍙煡璇�鏉�
+        /// </summary>
+        /// <param name="cntrCode">瀹瑰櫒鍙�/param>
+        /// <param name="skipCgDetail">鏄惁璺宠繃[鐗╂枡琛╙鐨勬煡璇�褰撳鍣ㄥ彿鏉ヨ嚜[鐗╂枡琛╙鏃�</param>
+        /// <returns></returns>
+        public static LocCntrCg GetLocCntrCg(string cntrCode, bool skipCgDetail = false) {
+            var db = new SqlHelper<object>().GetInstance();
+
+            TN_CG_Detail cgDetail = null;
+            if (!skipCgDetail) {
+                cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == cntrCode).First();
+            }
+
+            var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == cntrCode).First();
+
+            TN_Location location = null;
+            if (locCntrRel != null) {
+                location = db.Queryable<TN_Location>().Where(l => l.S_CODE == locCntrRel.S_LOC_CODE).First();
+                if (location == null) {
+                    LogHelper.Warn($"");
+                }
+            }
+            if (location != null) {
+                location.N_CURRENT_NUM = 0;
+                location.T_MODIFY = DateTime.Now;
+            }
+
+            return new LocCntrCg {
+                CgDetail = cgDetail,
+                LocCntrRel = locCntrRel,
+                Location = location
+            };
+        }
+
+        /// <summary>
+        /// 缁戝畾[璐т綅-瀹瑰櫒]淇℃伅
+        /// </summary>
+        /// <param name="startLoc"></param>
+        /// <param name="cntrCode"></param>
+        /// <returns></returns>
+        public static TN_Loc_Container BindLocCntr(ref TN_Location startLoc, string cntrCode) {
+            var locCntrRel = new TN_Loc_Container {
+                S_LOC_CODE = startLoc.S_CODE,
+                S_CNTR_CODE = cntrCode,
+            };
+
+            startLoc.N_CURRENT_NUM = 1;
+            startLoc.T_MODIFY = DateTime.Now;
+
+            return locCntrRel;
+        }
+
+        /// <summary>
+        /// 璧风偣鍑哄簱閿�         /// </summary>
         /// <param name="loc"></param>
         /// <param name="lockSource"></param>
         public static void LockStartLoc(ref TN_Location loc, string lockSource = "") {
+            if (loc == null) {
+                throw new ArgumentNullException(); // 鎺ュ彈璐т綅loc涓虹┖鏃剁洿鎺ユ姏寮傚父(閫氬父涓嶄細鍙戠敓)
+            }
+
+            if (loc.N_LOCK_STATE != 0 || loc.S_LOCK_STATE != "鏃�) {
+                LogHelper.Warn($"璧风偣鍑哄簱閿�绋嬪簭姝e湪灏濊瘯缁欏綋鍓峓閿佺姸鎬乚涓嶆槸'鏃�鐨勮揣浣嶄笂閿�璐т綅='{loc.S_CODE}',閿佺姸鎬�({loc.N_LOCK_STATE},{loc.S_LOCK_STATE})");
+            }
+
             loc.N_LOCK_STATE = 2; // 璧风偣鍑哄簱閿�             loc.S_LOCK_STATE = TN_Location.GetLockStateStr(2); // 璧风偣鍑哄簱閿�             loc.S_LOCK_OP = lockSource;
@@ -65,17 +150,35 @@
         }
 
         /// <summary>
-        /// 缁堢偣鍏ュ簱閿侊紙寮哄埗璧嬪�锛屼笉浼氭鏌oc!=null锛岄攣鐘舵�=鏃狅紝闇�浼犲弬鍓嶇‘璁わ級
+        /// 缁堢偣鍏ュ簱閿�         /// </summary>
         /// <param name="loc"></param>
         /// <param name="lockSource"></param>
         public static void LockEndLoc(ref TN_Location loc, string lockSource = "") {
+            if (loc == null) {
+                throw new ArgumentNullException(); // 鎺ュ彈璐т綅loc涓虹┖鏃剁洿鎺ユ姏寮傚父(閫氬父涓嶄細鍙戠敓)
+            }
+
+            if (loc.N_LOCK_STATE != 0 || loc.S_LOCK_STATE != "鏃�) {
+                LogHelper.Warn($"璧风偣鍑哄簱閿�绋嬪簭姝e湪灏濊瘯缁欏綋鍓峓閿佺姸鎬乚涓嶆槸'鏃�鐨勮揣浣嶄笂閿�璐т綅='{loc.S_CODE}',閿佺姸鎬�({loc.N_LOCK_STATE},{loc.S_LOCK_STATE})");
+            }
+
             loc.N_LOCK_STATE = 1; // 缁堢偣鍑哄簱閿�             loc.S_LOCK_STATE = TN_Location.GetLockStateStr(1); // 缁堢偣鍑哄簱閿�             loc.S_LOCK_OP = lockSource;
             loc.T_MODIFY = System.DateTime.Now;
         }
 
+        /// <summary>
+        /// 鍒涘缓浠诲姟
+        /// </summary>
+        /// <param name="startLoc">璧风偣璐т綅:鑷冲皯鎻愪緵:S_CODE,S_AREA_CODE</param>
+        /// <param name="endLoc">缁堢偣璐т綅:鑷冲皯鎻愪緵:S_CODE,S_AREA_CODE</param>
+        /// <param name="cntId">瀹瑰櫒鍙�/param>
+        /// <param name="type">浠诲姟绫诲瀷(鍚嶇О)</param>
+        /// <param name="pri">浼樺厛绾�/param>
+        /// <param name="agvType">AGV绫诲瀷</param>
+        /// <returns></returns>
         public static TN_Task BuildTask(TN_Location startLoc, TN_Location endLoc, string cntId, string type, int pri = 3, int agvType = 1) {
             TN_Task TN_Task = new TN_Task() {
                 S_CODE = GenerateTaskNo(),
@@ -86,12 +189,13 @@
                 S_TYPE = type,
                 N_PRIORITY = pri,
                 N_SCHEDULE_TYPE = agvType,
-                N_B_STATE = 0, // 浠诲姟鍒涘缓鏃讹紝榛樿绛夊緟
+                N_B_STATE = 0, // 浠诲姟鍒涘缓鏃�榛樿绛夊緟
                 S_CNTR_CODE = cntId,
             };
 
             return TN_Task;
         }
+
 
         internal static bool CheckActionRecordExist(string no, int code) {
             var db = new SqlHelper<TN_Task_Action>().GetInstance();
@@ -122,7 +226,7 @@
         internal static void Fail(TN_Task task) {
             var db = new SqlHelper<TN_Task>().GetInstance();
             if (task != null) {
-                //鍒ゆ柇鏈夋病鏈夊彇璐у畬鎴愶紝娌℃湁灏卞彉鎴愬け璐ャ�鏈夊彇璐у畬鎴愰粯璁ゅ畬鎴愪簡锛堣窡鎹」鐩�瀹氾紝鏈変簺椤圭洰浜哄伐鎷夎蛋浜嗕篃娌℃湁鏀惧埌缁堢偣锛夈�
+                //鍒ゆ柇鏈夋病鏈夊彇璐у畬鎴�娌℃湁灏卞彉鎴愬け璐ャ�鏈夊彇璐у畬鎴愰粯璁ゅ畬鎴愪簡 (璺熸嵁椤圭洰鑰屽畾,鏈変簺椤圭洰浜哄伐鎷夎蛋浜嗕篃娌℃湁鏀惧埌缁堢偣) 銆�                 task.N_B_STATE = 4;
                 task.S_B_STATE = TN_Task.GetStateStr(task.N_B_STATE);
                 db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE }).ExecuteCommand();
@@ -146,4 +250,13 @@
             return db.Queryable<TN_Task>().Where(a => a.N_B_STATE == 0 && (a.S_B_STATE == "绛夊緟" || a.S_B_STATE == "寰呮帹閫�)).ToList();
         }
     }
+
+    /// <summary>
+    /// [璐т綅/瀹瑰櫒/鐗╂枡]淇℃伅
+    /// </summary>
+    public class LocCntrCg {
+        public TN_CG_Detail CgDetail { get; set; } = null;
+        public TN_Loc_Container LocCntrRel { get; set; } = null;
+        public TN_Location Location { get; set; } = null;
+    }
 }

--
Gitblit v1.9.1