From c5c3e4e538a11f2a6391e6b2613375b1f92eb20a Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期三, 15 四月 2026 14:39:18 +0800
Subject: [PATCH] feat: 添加Quartz日志助手类并重构任务服务日志记录

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs                                |   24 
 Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue                      |   11 
 .gitignore                                                                                          |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs              |   40 +-
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskFlowService.cs                     |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IInboundTaskFlowService.cs                   |    2 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs                                  |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs            |    9 
 Code/测试工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-1003/config.json       |    2 
 Code/测试工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-HCSC1/config.json      |    7 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRelocationTaskFlowService.cs                |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/InboundTaskFlowService.cs               |    7 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs          |   22 -
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs       |   37 -
 Code/.omc/state/idle-notif-cooldown.json                                                            |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs                |   21 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs           |   48 --
 Code/.omc/state/subagent-tracking.json                                                              |   15 
 Code/测试工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-CWSC1/config.json      |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IOutboundTaskFlowService.cs                  |    2 
 Code/.omc/state/mission-state.json                                                                  |   50 +++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs                                      |   85 +++++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs             |   33 -
 Code/测试工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/protocol-templates.json         |  316 +++++++++----------
 Code/测试工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-PM/config.json         |    2 
 Code/.omc/state/agent-replay-cf22b2af-f777-4b1d-beca-2152d6beebbb.jsonl                             |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RobotTaskFlowService.cs                 |    3 
 Code/WCS/WIDESEAWCS_Client/.omc/project-memory.json                                                 |  182 +++++++++++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs |   13 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs            |    3 
 30 files changed, 601 insertions(+), 347 deletions(-)

diff --git a/.gitignore b/.gitignore
index 29b8537..00b02f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -439,3 +439,5 @@
 **/.claude/settings.local.json
 **/.vs/**/DocumentLayout.json
 **/.vs/**/DocumentLayout.backup.json
+/Code/娴嬭瘯宸ュ叿/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data
+/Code/娴嬭瘯宸ュ叿/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data
diff --git a/Code/.omc/state/agent-replay-cf22b2af-f777-4b1d-beca-2152d6beebbb.jsonl b/Code/.omc/state/agent-replay-cf22b2af-f777-4b1d-beca-2152d6beebbb.jsonl
new file mode 100644
index 0000000..f7dfa90
--- /dev/null
+++ b/Code/.omc/state/agent-replay-cf22b2af-f777-4b1d-beca-2152d6beebbb.jsonl
@@ -0,0 +1,2 @@
+{"t":0,"agent":"a48e41d","agent_type":"Explore","event":"agent_start","parent_mode":"none"}
+{"t":0,"agent":"a48e41d","agent_type":"Explore","event":"agent_stop","success":true,"duration_ms":51400}
diff --git a/Code/.omc/state/idle-notif-cooldown.json b/Code/.omc/state/idle-notif-cooldown.json
index d913e16..05ceef1 100644
--- a/Code/.omc/state/idle-notif-cooldown.json
+++ b/Code/.omc/state/idle-notif-cooldown.json
@@ -1,3 +1,3 @@
 {
-  "lastSentAt": "2026-04-14T08:08:15.956Z"
+  "lastSentAt": "2026-04-15T06:28:49.381Z"
 }
\ No newline at end of file
diff --git a/Code/.omc/state/mission-state.json b/Code/.omc/state/mission-state.json
index c9d6d38..5cd366a 100644
--- a/Code/.omc/state/mission-state.json
+++ b/Code/.omc/state/mission-state.json
@@ -1,5 +1,5 @@
 {
-  "updatedAt": "2026-04-13T02:47:35.467Z",
+  "updatedAt": "2026-04-15T06:10:46.493Z",
   "missions": [
     {
       "id": "session:9007b9ea-1eb6-4d24-8fe7-2c3a949eac88:none",
@@ -428,6 +428,54 @@
           "sourceKey": "session-stop:adb1029c24100db60"
         }
       ]
+    },
+    {
+      "id": "session:cf22b2af-f777-4b1d-beca-2152d6beebbb:none",
+      "source": "session",
+      "name": "none",
+      "objective": "Session mission",
+      "createdAt": "2026-04-15T06:09:55.093Z",
+      "updatedAt": "2026-04-15T06:10:46.493Z",
+      "status": "done",
+      "workerCount": 1,
+      "taskCounts": {
+        "total": 1,
+        "pending": 0,
+        "blocked": 0,
+        "inProgress": 0,
+        "completed": 1,
+        "failed": 0
+      },
+      "agents": [
+        {
+          "name": "Explore:a48e41d",
+          "role": "Explore",
+          "ownership": "a48e41df38204e6dc",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-15T06:10:46.493Z"
+        }
+      ],
+      "timeline": [
+        {
+          "id": "session-start:a48e41df38204e6dc:2026-04-15T06:09:55.093Z",
+          "at": "2026-04-15T06:09:55.093Z",
+          "kind": "update",
+          "agent": "Explore:a48e41d",
+          "detail": "started Explore:a48e41d",
+          "sourceKey": "session-start:a48e41df38204e6dc"
+        },
+        {
+          "id": "session-stop:a48e41df38204e6dc:2026-04-15T06:10:46.493Z",
+          "at": "2026-04-15T06:10:46.493Z",
+          "kind": "completion",
+          "agent": "Explore:a48e41d",
+          "detail": "completed",
+          "sourceKey": "session-stop:a48e41df38204e6dc"
+        }
+      ]
     }
   ]
 }
\ No newline at end of file
diff --git a/Code/.omc/state/subagent-tracking.json b/Code/.omc/state/subagent-tracking.json
index 17d460d..c935479 100644
--- a/Code/.omc/state/subagent-tracking.json
+++ b/Code/.omc/state/subagent-tracking.json
@@ -287,10 +287,19 @@
       "status": "completed",
       "completed_at": "2026-04-13T02:47:35.467Z",
       "duration_ms": 9005
+    },
+    {
+      "agent_id": "a48e41df38204e6dc",
+      "agent_type": "Explore",
+      "started_at": "2026-04-15T06:09:55.093Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-15T06:10:46.493Z",
+      "duration_ms": 51400
     }
   ],
-  "total_spawned": 32,
-  "total_completed": 32,
+  "total_spawned": 33,
+  "total_completed": 33,
   "total_failed": 0,
-  "last_updated": "2026-04-13T02:47:35.573Z"
+  "last_updated": "2026-04-15T06:10:46.596Z"
 }
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Client/.omc/project-memory.json b/Code/WCS/WIDESEAWCS_Client/.omc/project-memory.json
new file mode 100644
index 0000000..bebd8f4
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Client/.omc/project-memory.json
@@ -0,0 +1,182 @@
+{
+  "version": "1.0.0",
+  "lastScanned": 1776214627595,
+  "projectRoot": "d:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Client",
+  "techStack": {
+    "languages": [
+      {
+        "name": "JavaScript/TypeScript",
+        "version": null,
+        "confidence": "high",
+        "markers": [
+          "package.json"
+        ]
+      }
+    ],
+    "frameworks": [
+      {
+        "name": "vue",
+        "version": "3.2.37",
+        "category": "frontend"
+      },
+      {
+        "name": "vite",
+        "version": "5.0.0",
+        "category": "build"
+      }
+    ],
+    "packageManager": "pnpm",
+    "runtime": null
+  },
+  "build": {
+    "buildCommand": "pnpm build",
+    "testCommand": null,
+    "lintCommand": "pnpm lint",
+    "devCommand": null,
+    "scripts": {
+      "serve": "vite",
+      "build": "vite build",
+      "preview": "vite preview",
+      "lint": "eslint --ext .js,.vue src"
+    }
+  },
+  "conventions": {
+    "namingStyle": null,
+    "importStyle": null,
+    "testPattern": null,
+    "fileOrganization": "type-based"
+  },
+  "structure": {
+    "isMonorepo": false,
+    "workspaces": [],
+    "mainDirectories": [
+      "public",
+      "src",
+      "tests"
+    ],
+    "gitBranches": {
+      "defaultBranch": "master",
+      "branchingStrategy": null
+    }
+  },
+  "customNotes": [],
+  "directoryMap": {
+    "config": {
+      "path": "config",
+      "purpose": "Configuration files",
+      "fileCount": 1,
+      "lastAccessed": 1776214627557,
+      "keyFiles": [
+        "buttons.js"
+      ]
+    },
+    "dist": {
+      "path": "dist",
+      "purpose": "Distribution/build output",
+      "fileCount": 3,
+      "lastAccessed": 1776214627558,
+      "keyFiles": [
+        "index.html",
+        "wcslogo.png",
+        "wms_d.png"
+      ]
+    },
+    "public": {
+      "path": "public",
+      "purpose": "Public files",
+      "fileCount": 3,
+      "lastAccessed": 1776214627572,
+      "keyFiles": [
+        "index.html",
+        "wcslogo.png",
+        "wms_d.png"
+      ]
+    },
+    "src": {
+      "path": "src",
+      "purpose": "Source code",
+      "fileCount": 2,
+      "lastAccessed": 1776214627573,
+      "keyFiles": [
+        "App.vue",
+        "main.js"
+      ]
+    },
+    "tests": {
+      "path": "tests",
+      "purpose": "Test files",
+      "fileCount": 0,
+      "lastAccessed": 1776214627573,
+      "keyFiles": []
+    },
+    "dist\\assets": {
+      "path": "dist\\assets",
+      "purpose": "Static assets",
+      "fileCount": 87,
+      "lastAccessed": 1776214627574,
+      "keyFiles": [
+        "401-BfTrT_7C.js",
+        "404-CUk7f22q.js",
+        "Audit-C52MvHzW.css"
+      ]
+    },
+    "dist\\static": {
+      "path": "dist\\static",
+      "purpose": "Static files",
+      "fileCount": 1,
+      "lastAccessed": 1776214627575,
+      "keyFiles": [
+        "login_bg.png"
+      ]
+    },
+    "public\\static": {
+      "path": "public\\static",
+      "purpose": "Static files",
+      "fileCount": 1,
+      "lastAccessed": 1776214627575,
+      "keyFiles": [
+        "login_bg.png"
+      ]
+    },
+    "src\\api": {
+      "path": "src\\api",
+      "purpose": "API routes",
+      "fileCount": 3,
+      "lastAccessed": 1776214627576,
+      "keyFiles": [
+        "http.js",
+        "permission.js",
+        "useTest.js"
+      ]
+    },
+    "src\\assets": {
+      "path": "src\\assets",
+      "purpose": "Static assets",
+      "fileCount": 1,
+      "lastAccessed": 1776214627577,
+      "keyFiles": [
+        "logo.png"
+      ]
+    },
+    "src\\components": {
+      "path": "src\\components",
+      "purpose": "UI components",
+      "fileCount": 0,
+      "lastAccessed": 1776214627577,
+      "keyFiles": []
+    },
+    "src\\views": {
+      "path": "src\\views",
+      "purpose": "View templates",
+      "fileCount": 4,
+      "lastAccessed": 1776214627577,
+      "keyFiles": [
+        "fix.js",
+        "Home.vue",
+        "Index.vue"
+      ]
+    }
+  },
+  "hotPaths": [],
+  "userDirectives": []
+}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IInboundTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IInboundTaskFlowService.cs
index 839aca8..6b23014 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IInboundTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IInboundTaskFlowService.cs
@@ -15,7 +15,7 @@
         /// </summary>
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <param name="source">WMS浠诲姟鍘熷鏁版嵁銆�</param>
-        void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source);
+        WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source);
 
         /// <summary>
         /// 鎺ㄨ繘鍏ュ簱浠诲姟鍒颁笅涓�鐘舵�併��
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IOutboundTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IOutboundTaskFlowService.cs
index ad69786..41553e6 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IOutboundTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IOutboundTaskFlowService.cs
@@ -15,7 +15,7 @@
         /// </summary>
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <param name="source">WMS浠诲姟鍘熷鏁版嵁銆�</param>
-        void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source);
+        WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source);
 
         /// <summary>
         /// 鎺ㄨ繘鍑哄簱浠诲姟鍒颁笅涓�鐘舵�併��
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRelocationTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRelocationTaskFlowService.cs
index 0e7c2e4..825c51c 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRelocationTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRelocationTaskFlowService.cs
@@ -15,7 +15,7 @@
         /// </summary>
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <param name="source">WMS浠诲姟鍘熷鏁版嵁銆�</param>
-        void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source);
+        WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source);
 
         /// <summary>
         /// 鎺ㄨ繘绉诲簱浠诲姟鍒颁笅涓�鐘舵�併��
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskFlowService.cs
index ca99444..015d92f 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskFlowService.cs
@@ -15,7 +15,7 @@
         /// </summary>
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <param name="source">WMS浠诲姟鍘熷鏁版嵁銆�</param>
-        void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source);
+        WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source);
 
         /// <summary>
         /// 鎺ㄨ繘鏈烘鎵嬩换鍔″埌涓嬩竴鐘舵�併��
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/InboundTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/InboundTaskFlowService.cs
index a6b90c8..69c8796 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/InboundTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/InboundTaskFlowService.cs
@@ -38,17 +38,20 @@
         /// </summary>
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <param name="source">WMS浠诲姟鍘熷鏁版嵁銆�</param>
-        public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source)
+        public WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source)
         {
+            WebResponseContent content = new WebResponseContent();
             Dt_Router routers = _routerService.QueryNextRoute(source.SourceAddress);
             if (routers.IsNullOrEmpty())
             {
-                return;
+                return content.Error("鏈壘鍒拌矾鐢变俊鎭�");
             }
 
             task.TaskStatus = (int)TaskInStatusEnum.InNew;
             task.CurrentAddress = source.SourceAddress;
             task.NextAddress = routers.ChildPosi;
+
+            return content.OK();
         }
 
         /// <summary>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
index 6082140..5e1e70b 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
@@ -56,18 +56,20 @@
         /// </summary>
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <param name="source">WMS浠诲姟鍘熷鏁版嵁銆�</param>
-        public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source)
+        public WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source)
         {
+            WebResponseContent content = new WebResponseContent();
             int taskType = task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty ? 100 : task.TaskType;
             Dt_Router router = _routerService.QueryNextRoute(source.Roadway, source.TargetAddress, taskType);
             if (router == null)
             {
-                return;
+                return content.Error("鏈壘鍒拌澶囪矾鐢变俊鎭�");
             }
 
             task.TaskStatus = (int)TaskOutStatusEnum.OutNew;
             task.CurrentAddress = source.SourceAddress;
             task.NextAddress = router.ChildPosi;
+            return content.OK();
         }
 
         /// <summary>
@@ -135,15 +137,25 @@
             task.Modifier = "System";
 
             // 閫氱煡WMS鍑哄簱瀹屾垚骞惰幏鍙栬繑鍥炵粨鏋�
+            return  NotifyWMSOutboundFinish(task);
+        }
+
+        /// <summary>
+        /// 閫氱煡WMS鍑哄簱瀹屾垚銆�
+        /// </summary>
+        /// <param name="task">浠诲姟瀹炰綋銆�</param>
+        /// <returns>閫氱煡缁撴灉銆�</returns>
+        private WebResponseContent NotifyWMSOutboundFinish(Dt_Task task)
+        {
+            WebResponseContent content = new WebResponseContent();
+
+            // 閫氱煡WMS鍑哄簱瀹屾垚骞惰幏鍙栬繑鍥炵粨鏋�
             var result = _httpClientHelper.Post<WebResponseContent>(
                 nameof(ConfigKey.OutboundFinishTaskAsync),
                 new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson());
 
             if (!result.IsSuccess || !result.Data.Status)
-            {
                 return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
-            }
-
             // 澶勭悊WMS杩斿洖鐨勫叆搴撲换鍔★紙濡傛灉鏈夛級
             if (result.Data?.Data != null)
             {
@@ -171,25 +183,7 @@
                     });
                 }
             }
-
             return content.OK($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
-        }
-
-        /// <summary>
-        /// 閫氱煡WMS鍑哄簱瀹屾垚銆�
-        /// </summary>
-        /// <param name="task">浠诲姟瀹炰綋銆�</param>
-        /// <returns>閫氱煡缁撴灉銆�</returns>
-        private WebResponseContent NotifyWMSOutboundFinish(Dt_Task task)
-        {
-            var result = _httpClientHelper.Post<WebResponseContent>(
-                nameof(ConfigKey.OutboundFinishTaskAsync),
-                new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson());
-
-            if (!result.IsSuccess || !result.Data.Status)
-                return WebResponseContent.Instance.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
-
-            return WebResponseContent.Instance.OK();
         }
 
         /// <summary>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs
index c94804e..0556392 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs
@@ -34,9 +34,10 @@
         /// </summary>
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <param name="source">WMS浠诲姟鍘熷鏁版嵁銆�</param>
-        public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source)
+        public WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source)
         {
             // 褰撳墠鐗堟湰绉诲簱浠诲姟鎺ユ敹鏃朵笉闇�瑕侀澶栬缃矾鐢辨垨鐘舵�併��
+            return WebResponseContent.Instance.OK();
         }
 
         /// <summary>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RobotTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RobotTaskFlowService.cs
index 271cd9b..68dfd39 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RobotTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RobotTaskFlowService.cs
@@ -19,9 +19,10 @@
         /// </summary>
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <param name="source">WMS浠诲姟鍘熷鏁版嵁銆�</param>
-        public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source)
+        public WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source)
         {
             // 褰撳墠鐗堟湰鏈烘鎵嬩换鍔℃帴鏀舵椂涓嶉渶瑕侀澶栬缃矾鐢辨垨鐘舵�併��
+            return WebResponseContent.Instance.OK();
         }
 
         /// <summary>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
index 1032614..478ba06 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -112,7 +112,9 @@
                     }
                     Dt_Task task = _mapper.Map<Dt_Task>(item);
                     task.Creater = "WMS";
-                    InitializeTaskOnReceive(task, item);
+                    content = InitializeTaskOnReceive(task, item);
+                    if (!content.Status)
+                        return content;
                     tasks.Add(task);
                 }
                 // TOOD: 杩欓噷娉ㄦ剰娣诲姞閿欒瑕佽繑鍥為敊璇�
@@ -170,24 +172,20 @@
         /// </summary>
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <param name="source">WMS鍘熷浠诲姟瀵硅薄銆�</param>
-        private void InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source)
+        private WebResponseContent InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source)
         {
             switch (task.TaskType.GetTaskTypeGroup())
             {
                 case TaskTypeGroup.OutbondGroup:
-                    _outboundTaskFlowService.InitializeOnReceive(task, source);
-                    break;
+                    return _outboundTaskFlowService.InitializeOnReceive(task, source);
                 case TaskTypeGroup.InboundGroup:
-                    _inboundTaskFlowService.InitializeOnReceive(task, source);
-                    break;
+                    return _inboundTaskFlowService.InitializeOnReceive(task, source);
                 case TaskTypeGroup.RelocationGroup:
-                    _relocationTaskFlowService.InitializeOnReceive(task, source);
-                    break;
+                    return _relocationTaskFlowService.InitializeOnReceive(task, source);
                 case TaskTypeGroup.OtherGroup:
-                    _robotTaskFlowService.InitializeOnReceive(task, source);
-                    break;
+                    return _robotTaskFlowService.InitializeOnReceive(task, source);
                 default:
-                    break;
+                    return WebResponseContent.Instance.Error("WCS涓嶅瓨鍦ㄥ綋鍓嶄换鍔$殑浠诲姟绫诲瀷");
             }
         }
 
@@ -398,7 +396,9 @@
                 && result.Data is List<WMSTaskDTO> wmsTasks
                 && wmsTasks.Count > 0)
             {
-                return ReceiveWMSTask(wmsTasks);
+                WebResponseContent content = ReceiveWMSTask(wmsTasks);
+                if (!content.Status)
+                    return content;
             }
 
             // 鏇存柊浠诲姟鏁版嵁
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
index e9c6ad5..edbdda4 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
@@ -133,8 +133,7 @@
                     if (childDeviceCodes == null || childDeviceCodes.Count == 0)
                     {
                         // 娌℃湁瀛愯澶囷紝鐩存帴杩斿洖
-                        _logger.LogInformation("杈撻�佺嚎 {DeviceCode} 娌℃湁瀛愯澶�", conveyorLine.DeviceCode);
-                        QuartzLogger.Info($"杈撻�佺嚎 {conveyorLine.DeviceCode} 娌℃湁瀛愯澶�", conveyorLine.DeviceCode);
+                        QuartzLogHelper.LogInfo(_logger, "杈撻�佺嚎 {DeviceCode} 娌℃湁瀛愯澶�", $"杈撻�佺嚎 {conveyorLine.DeviceCode} 娌℃湁瀛愯澶�", conveyorLine.DeviceCode, conveyorLine.DeviceCode);
                         return Task.CompletedTask;
                     }
 
@@ -162,8 +161,6 @@
                             // 濡傛灉鍛戒护涓虹┖锛岃烦杩�
                             if (command == null)
                             {
-                                _logger.LogDebug("Execute锛氬瓙璁惧 {ChildDeviceCode} 鍛戒护涓虹┖锛岃烦杩�", childDeviceCode);
-                                QuartzLogger.Debug($"瀛愯澶� {childDeviceCode} 鍛戒护涓虹┖锛岃烦杩�", conveyorLine.DeviceCode);
                                 continue;
                             }
 
@@ -186,8 +183,7 @@
                                     {
                                         // 娌℃湁浠诲姟锛屽悜 WMS 璇锋眰鍑哄簱鎵樼洏浠诲姟
                                         var position = checkPalletPositions.FirstOrDefault(x => x.Code == childDeviceCode);
-                                        _logger.LogInformation("Execute锛氭鏌ユ墭鐩樹綅缃� {ChildDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", childDeviceCode);
-                                        QuartzLogger.Info($"妫�鏌ユ墭鐩樹綅缃� {childDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", conveyorLine.DeviceCode);
+                                        QuartzLogHelper.LogInfo(_logger, "Execute锛氭鏌ユ墭鐩樹綅缃� {ChildDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", $"妫�鏌ユ墭鐩樹綅缃� {childDeviceCode}锛岃姹俉MS鍑哄簱鎵樼洏浠诲姟", conveyorLine.DeviceCode, childDeviceCode);
 
                                         var responseResult = _httpClientHelper.Post<WebResponseContent>("GetOutBoundTrayTaskAsync", new CreateTaskDto()
                                         {
@@ -229,8 +225,7 @@
                                 }
                                 catch (Exception ex)
                                 {
-                                    _logger.LogError(ex, "澶勭悊鎵嬪姩鍏ュ簱浠诲姟寮傚父");
-                                    QuartzLogger.Error($"澶勭悊鎵嬪姩鍏ュ簱浠诲姟寮傚父: {ex.Message}", "CommonConveyorLineNewJob", ex);
+                                    QuartzLogHelper.LogError(_logger, ex, "澶勭悊鎵嬪姩鍏ュ簱浠诲姟寮傚父", $"澶勭悊鎵嬪姩鍏ュ簱浠诲姟寮傚父: {ex.Message}", "CommonConveyorLineNewJob");
                                 }
                                 continue;
                             }
@@ -239,8 +234,6 @@
                             // 鏃犳墭鐩樻潯鐮佹椂锛岃姹傚嚭搴撲换鍔�
                             if (command.Barcode.IsNullOrEmpty() || command.Barcode.Replace("\0", "") == "")
                             {
-                                _logger.LogDebug("Execute锛氬瓙璁惧 {ChildDeviceCode} 鏃犳墭鐩樻潯鐮侊紝璇锋眰鍑哄簱浠诲姟", childDeviceCode);
-                                QuartzLogger.Debug($"瀛愯澶� {childDeviceCode} 鏃犳墭鐩樻潯鐮侊紝璇锋眰鍑哄簱浠诲姟", conveyorLine.DeviceCode);
                                 _conveyorLineDispatch.RequestOutbound(conveyorLine, command, childDeviceCode);
                                 continue;
                             }
@@ -252,8 +245,7 @@
                                 Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNo, childDeviceCode);
                                 if (!task.IsNullOrEmpty())
                                 {
-                                    _logger.LogInformation("Execute锛氬瓙璁惧 {ChildDeviceCode} 澶勭悊浠诲姟 {TaskNum}锛岀姸鎬�: {Status}", childDeviceCode, task.TaskNum, task.TaskStatus);
-                                    QuartzLogger.Info($"澶勭悊浠诲姟 {task.TaskNum}锛岀姸鎬�: {task.TaskStatus}", conveyorLine.DeviceCode);
+                                    QuartzLogHelper.LogInfo(_logger, "Execute锛氬瓙璁惧 {ChildDeviceCode} 澶勭悊浠诲姟 {TaskNum}锛岀姸鎬�: {Status}", $"澶勭悊浠诲姟 {task.TaskNum}锛岀姸鎬�: {task.TaskStatus}", conveyorLine.DeviceCode, childDeviceCode, task.TaskNum, task.TaskStatus);
                                     // 澶勭悊浠诲姟鐘舵�侊紙鏍规嵁鐘舵�佸垎鍙戝埌涓嶅悓鏂规硶锛�
                                     ProcessTaskState(conveyorLine, command, task, childDeviceCode);
                                     return Task.CompletedTask;
@@ -263,8 +255,7 @@
                         catch (Exception innerEx)
                         {
                             // 璁板綍寮傚父锛屼絾涓嶅奖鍝嶅叾浠栧瓙璁惧鐨勫鐞�
-                            _logger.LogError(innerEx, "Execute锛氬瓙璁惧 {ChildDeviceCode} 澶勭悊寮傚父锛孋orrelationId: {CorrelationId}", childDeviceCode, correlationId);
-                            QuartzLogger.Error($"瀛愯澶囧鐞嗗紓甯�: {innerEx.Message}", conveyorLine.DeviceCode, innerEx);
+                            QuartzLogHelper.LogError(_logger, innerEx, "Execute锛氬瓙璁惧 {ChildDeviceCode} 澶勭悊寮傚父锛孋orrelationId: {CorrelationId}", $"瀛愯澶囧鐞嗗紓甯�: {innerEx.Message}", conveyorLine.DeviceCode, childDeviceCode, correlationId);
                         }
                     }
                 }
@@ -272,8 +263,7 @@
             catch (Exception ex)
             {
                 // 璁板綍鏁翠綋寮傚父
-                _logger.LogError(ex, "Execute锛氳緭閫佺嚎 {DeviceCode} 鎵ц寮傚父", ex.Message);
-                QuartzLogger.Error($"杈撻�佺嚎鎵ц寮傚父: {ex.Message}", "CommonConveyorLineNewJob", ex);
+                QuartzLogHelper.LogError(_logger, ex, "Execute锛氳緭閫佺嚎 {DeviceCode} 鎵ц寮傚父", $"杈撻�佺嚎鎵ц寮傚父: {ex.Message}", "CommonConveyorLineNewJob", ex.Message);
             }
             return Task.CompletedTask;
         }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs
index 144ba00..614a8bd 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineDispatchHandler.cs
@@ -105,8 +105,7 @@
         {
             // 娓呴櫎浠诲姟鍙凤紝琛ㄧず褰撳墠绌洪棽
             conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, 0, childDeviceCode);
-            _logger.LogDebug("HeartBeat锛氬瓙璁惧 {ChildDeviceCode} 蹇冭烦", childDeviceCode);
-            QuartzLogger.Debug($"HeartBeat锛氬瓙璁惧 {childDeviceCode} 蹇冭烦", conveyorLine.DeviceCode);
+            QuartzLogHelper.LogDebug(_logger, "HeartBeat锛氬瓙璁惧 {ChildDeviceCode} 蹇冭烦", $"HeartBeat锛氬瓙璁惧 {childDeviceCode} 蹇冭烦", conveyorLine.DeviceCode, childDeviceCode);
         }
 
         /// <summary>
@@ -125,8 +124,7 @@
         /// <param name="childDeviceCode">瀛愯澶囩紪鐮�</param>
         public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandNew command, string childDeviceCode)
         {
-            _logger.LogInformation("RequestInbound锛氬瓙璁惧 {ChildDeviceCode} 璇锋眰鍏ュ簱", childDeviceCode);
-            QuartzLogger.Info($"璇锋眰鍏ュ簱锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode);
+            QuartzLogHelper.LogInfo(_logger, "RequestInbound锛氬瓙璁惧 {ChildDeviceCode} 璇锋眰鍏ュ簱", $"璇锋眰鍏ュ簱锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode, childDeviceCode);
 
             // 鍚� WMS 璇锋眰鏂颁换鍔★紙鍩轰簬鏉$爜锛�
             if (_taskFilter.RequestWmsTask(command.Barcode, childDeviceCode))
@@ -147,8 +145,7 @@
                     // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴闃舵
                     _taskService.UpdateTaskStatusToNext(task);
 
-                    _logger.LogInformation("RequestInbound锛氬叆搴撲换鍔″凡涓嬪彂锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
-                    QuartzLogger.Info($"鍏ュ簱浠诲姟宸蹭笅鍙戯紝浠诲姟鍙�: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode);
+                    QuartzLogHelper.LogInfo(_logger, "RequestInbound锛氬叆搴撲换鍔″凡涓嬪彂锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", $"鍏ュ簱浠诲姟宸蹭笅鍙戯紝浠诲姟鍙�: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode);
                 }
             }
         }
@@ -169,13 +166,11 @@
             Dt_Task? task = _taskFilter.QueryExecutingTask(command.TaskNo, childDeviceCode);
             if (task == null)
             {
-                _logger.LogDebug("RequestInNextAddress锛氫换鍔� {TaskNo} 涓嶅瓨鍦�", command.TaskNo);
-                QuartzLogger.Debug($"RequestInNextAddress锛氫换鍔� {command.TaskNo} 涓嶅瓨鍦�", conveyorLine.DeviceCode);
+                QuartzLogHelper.LogDebug(_logger, "RequestInNextAddress锛氫换鍔� {TaskNo} 涓嶅瓨鍦�", $"RequestInNextAddress锛氫换鍔� {command.TaskNo} 涓嶅瓨鍦�", conveyorLine.DeviceCode, command.TaskNo);
                 return;
             }
 
-            _logger.LogInformation("RequestInNextAddress锛氬叆搴撲笅涓�鍦板潃锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
-            QuartzLogger.Info($"RequestInNextAddress锛氬叆搴撲笅涓�鍦板潃锛屼换鍔″彿: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode);
+            QuartzLogHelper.LogInfo(_logger, "RequestInNextAddress锛氬叆搴撲笅涓�鍦板潃锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", $"RequestInNextAddress锛氬叆搴撲笅涓�鍦板潃锛屼换鍔″彿: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode);
 
             // 濡傛灉涓嶆槸绌烘墭鐩樹换鍔★紝澶勭悊鐩爣鍦板潃锛堜笌鎷樻潫鏈�/鎻掓嫈閽夋満浜や簰锛�
             if (task.TaskType != (int)TaskOutboundTypeEnum.OutEmpty)
@@ -212,8 +207,7 @@
                 {
                     // 鍥炲 ACK 纭
                     conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode);
-                    _logger.LogInformation("ConveyorLineInFinish锛氬叆搴撳畬鎴愶紝浠诲姟鍙�: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
-                    QuartzLogger.Info($"鍏ュ簱瀹屾垚锛屼换鍔″彿: {task.TaskNum}", conveyorLine.DeviceCode);
+                    QuartzLogHelper.LogInfo(_logger, "ConveyorLineInFinish锛氬叆搴撳畬鎴愶紝浠诲姟鍙�: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", $"鍏ュ簱瀹屾垚锛屼换鍔″彿: {task.TaskNum}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode);
                 }
 
 
@@ -254,8 +248,7 @@
                 // 鏇存柊浠诲姟鐘舵��
                 _taskService.UpdateTaskStatusToNext(task);
 
-                _logger.LogInformation("RequestOutbound锛氬嚭搴撲换鍔″凡涓嬪彂锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
-                QuartzLogger.Info($"鍑哄簱浠诲姟宸蹭笅鍙戯紝浠诲姟鍙�: {task.TaskNum}", conveyorLine.DeviceCode);
+                QuartzLogHelper.LogInfo(_logger, "RequestOutbound锛氬嚭搴撲换鍔″凡涓嬪彂锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", $"鍑哄簱浠诲姟宸蹭笅鍙戯紝浠诲姟鍙�: {task.TaskNum}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode);
             }
         }
 
@@ -275,13 +268,11 @@
             Dt_Task? task = _taskFilter.QueryExecutingTask(command.TaskNo, childDeviceCode);
             if (task == null)
             {
-                _logger.LogDebug("RequestOutNextAddress锛氫换鍔� {TaskNo} 涓嶅瓨鍦�", command.TaskNo);
-                QuartzLogger.Debug($"RequestOutNextAddress锛氫换鍔� {command.TaskNo} 涓嶅瓨鍦�", conveyorLine.DeviceCode);
+                QuartzLogHelper.LogDebug(_logger, "RequestOutNextAddress锛氫换鍔� {TaskNo} 涓嶅瓨鍦�", $"RequestOutNextAddress锛氫换鍔� {command.TaskNo} 涓嶅瓨鍦�", conveyorLine.DeviceCode, command.TaskNo);
                 return;
             }
 
-            _logger.LogInformation("RequestOutNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
-            QuartzLogger.Info($"RequestOutNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屼换鍔″彿: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode);
+            QuartzLogHelper.LogInfo(_logger, "RequestOutNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", $"RequestOutNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屼换鍔″彿: {task.TaskNum}锛屽瓙璁惧: {childDeviceCode}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode);
 
             // 濡傛灉涓嶆槸绌烘墭鐩樹换鍔★紝澶勭悊鐩爣鍦板潃
             if (task.TaskType != (int)TaskOutboundTypeEnum.OutEmpty)
@@ -315,11 +306,13 @@
                 // 鏇存柊浠诲姟鐘舵�佸埌涓嬩竴闃舵锛堥�氬父鏄畬鎴愶級
                 WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
 
-                // 鍥炲 ACK 纭
-                conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode);
+                if (content.Status)
+                {
+                    // 鍥炲 ACK 纭
+                    conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode);
+                }
 
-                _logger.LogInformation("ConveyorLineOutFinish锛氬嚭搴撳畬鎴愶紝浠诲姟鍙�: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}", task.TaskNum, childDeviceCode);
-                QuartzLogger.Info($"鍑哄簱瀹屾垚锛屼换鍔″彿: {task.TaskNum}", conveyorLine.DeviceCode);
+                QuartzLogHelper.LogInfo(_logger, "ConveyorLineOutFinish锛氬嚭搴撳畬鎴愶紝瀹屾垚缁撴灉锛歿Status}锛屼换鍔″彿: {TaskNum}锛屽瓙璁惧: {ChildDeviceCode}锛岄敊璇秷鎭�: {Message}", $"鍑哄簱瀹屾垚锛屽畬鎴愮粨鏋滐細{content.Status}锛屼换鍔″彿: {task.TaskNum}锛岄敊璇秷鎭細{content.Message}", conveyorLine.DeviceCode, content.Status, task.TaskNum, childDeviceCode, content.Message);
             }
         }
     }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs
index c4ecdf4..24c16e3 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs
@@ -418,10 +418,7 @@
             string deviceType)
         {
             // 璁板綍褰撳墠璇锋眰鐘舵�佺殑璋冭瘯鏃ュ織锛屼緵鎺掓煡闂浣跨敤
-            _logger.LogDebug("ProcessDeviceRequest锛歿DeviceType}锛屽瓙璁惧: {ChildDeviceCode}锛岀墿鏂欒姹�: {MaterialReq}锛屽嚭鏂欒姹�: {OutputReq}",
-                deviceType, childDeviceCode, materialRequest, outputRequest);
-            // 鍚屾鍐欏叆 Quartz 鏃ュ織鏂囦欢锛堝弻鍐欏彲杩芥函锛岃繖閲屼繚鐣欎笌鍘熼�昏緫涓�鑷寸殑琛屼负锛�
-            QuartzLogger.Debug($"ProcessDeviceRequest锛歿deviceType}锛屽瓙璁惧: {childDeviceCode}锛岀墿鏂欒姹�: {materialRequest}锛屽嚭鏂欒姹�: {outputRequest}", conveyorLine.DeviceCode);
+            QuartzLogHelper.LogDebug(_logger, "ProcessDeviceRequest锛歿DeviceType}锛屽瓙璁惧: {ChildDeviceCode}锛岀墿鏂欒姹�: {MaterialReq}锛屽嚭鏂欒姹�: {OutputReq}", $"ProcessDeviceRequest锛歿deviceType}锛屽瓙璁惧: {childDeviceCode}锛岀墿鏂欒姹�: {materialRequest}锛屽嚭鏂欒姹�: {outputRequest}", conveyorLine.DeviceCode, deviceType, childDeviceCode, materialRequest, outputRequest);
 
             // 鍒嗘敮鍒ゆ柇锛氳澶囨槸闇�瑕佺墿鏂欒繕鏄渶瑕佸嚭鏂�
             if (materialRequest)
@@ -432,8 +429,7 @@
                 // 2. 鍥炲 ACK 纭淇″彿锛屽憡鐭ヨ澶囧凡鏀跺埌璇锋眰
                 conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 1, childDeviceCode);
                 // 3. 璁板綍淇℃伅鏃ュ織锛岃〃鏄庡凡瀹屾垚鐩爣鍦板潃璁剧疆鍜� ACK 鍥炲
-                _logger.LogInformation("ProcessDeviceRequest锛歿DeviceType} 闇�瑕佺墿鏂欙紝宸茶缃洰鏍囧湴鍧�鍜孉CK", deviceType);
-                QuartzLogger.Info($"ProcessDeviceRequest锛歿deviceType} 闇�瑕佺墿鏂欙紝宸茶缃洰鏍囧湴鍧�鍜孉CK", conveyorLine.DeviceCode);
+                QuartzLogHelper.LogInfo(_logger, "ProcessDeviceRequest锛歿DeviceType} 闇�瑕佺墿鏂欙紝宸茶缃洰鏍囧湴鍧�鍜孉CK", $"ProcessDeviceRequest锛歿deviceType} 闇�瑕佺墿鏂欙紝宸茶缃洰鏍囧湴鍧�鍜孉CK", conveyorLine.DeviceCode, deviceType);
             }
             else
             {
@@ -457,10 +453,7 @@
         private void WriteDebug(CommonConveyorLine conveyorLine, string scenario, string childDeviceCode, string nextAddress)
         {
             // 鍐欏叆缁撴瀯鍖栨棩蹇楋紙鍙 Serilog 绛夋棩蹇楁鏋舵崟鑾凤級
-            _logger.LogDebug("Handle{Scenario}锛氬瓙璁惧: {ChildDeviceCode}锛岀洰鏍囧湴鍧�: {NextAddress}",
-                scenario, childDeviceCode, nextAddress);
-            // 鍐欏叆 Quartz 涓撶敤鏃ュ織鏂囦欢锛堜緵瀹氭椂浠诲姟杞ㄨ抗杩借釜锛�
-            QuartzLogger.Debug($"Handle{scenario}锛氬瓙璁惧: {childDeviceCode}锛岀洰鏍囧湴鍧�: {nextAddress}", conveyorLine.DeviceCode);
+            QuartzLogHelper.LogDebug(_logger, "Handle{Scenario}锛氬瓙璁惧: {ChildDeviceCode}锛岀洰鏍囧湴鍧�: {NextAddress}", $"Handle{scenario}锛氬瓙璁惧: {childDeviceCode}锛岀洰鏍囧湴鍧�: {nextAddress}", conveyorLine.DeviceCode, scenario, childDeviceCode, nextAddress);
         }
     }
 }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs
index 429b7a9..1d3b938 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs
@@ -56,8 +56,7 @@
         public Dt_Task? QueryPendingTask(string deviceCode, string childDeviceCode)
         {
             var task = _taskService.QueryConveyorLineTask(deviceCode, childDeviceCode);
-            _logger.LogDebug("QueryPendingTask锛氳澶� {DeviceCode}锛屽瓙璁惧 {ChildDeviceCode}锛屾煡璇㈢粨鏋�: {TaskNum}", deviceCode, childDeviceCode, task?.TaskNum);
-            QuartzLogger.Debug($"QueryPendingTask锛氳澶� {deviceCode}锛屽瓙璁惧 {childDeviceCode}锛屾煡璇㈢粨鏋�: {task?.TaskNum}", deviceCode);
+            QuartzLogHelper.LogDebug(_logger, "QueryPendingTask锛氳澶� {DeviceCode}锛屽瓙璁惧 {ChildDeviceCode}锛屾煡璇㈢粨鏋�: {TaskNum}", $"QueryPendingTask锛氳澶� {deviceCode}锛屽瓙璁惧 {childDeviceCode}锛屾煡璇㈢粨鏋�: {task?.TaskNum}", deviceCode, deviceCode, childDeviceCode, task?.TaskNum);
             return task;
         }
 
@@ -74,8 +73,7 @@
         public Dt_Task? QueryExecutingTask(int taskNo, string childDeviceCode)
         {
             var task = _taskService.QueryExecutingConveyorLineTask(taskNo, childDeviceCode);
-            _logger.LogDebug("QueryExecutingTask锛氫换鍔″彿 {TaskNo}锛屽瓙璁惧 {ChildDeviceCode}锛屾煡璇㈢粨鏋�: {Found}", taskNo, childDeviceCode, task != null);
-            QuartzLogger.Debug($"QueryExecutingTask锛氫换鍔″彿 {taskNo}锛屽瓙璁惧 {childDeviceCode}锛屾煡璇㈢粨鏋�: {(task != null)}", childDeviceCode);
+            QuartzLogHelper.LogDebug(_logger, "QueryExecutingTask锛氫换鍔″彿 {TaskNo}锛屽瓙璁惧 {ChildDeviceCode}锛屾煡璇㈢粨鏋�: {Found}", $"QueryExecutingTask锛氫换鍔″彿 {taskNo}锛屽瓙璁惧 {childDeviceCode}锛屾煡璇㈢粨鏋�: {(task != null)}", childDeviceCode, taskNo, childDeviceCode, task != null);
             return task;
         }
 
@@ -91,8 +89,7 @@
         /// <returns>璇锋眰鏄惁鎴愬姛</returns>
         public bool RequestWmsTask(string barcode, string childDeviceCode)
         {
-            _logger.LogInformation("RequestWmsTask锛氬悜WMS璇锋眰浠诲姟锛屾潯鐮�: {Barcode}锛屽瓙璁惧: {ChildDeviceCode}", barcode, childDeviceCode);
-            QuartzLogger.Info($"鍚慦MS璇锋眰浠诲姟锛屾潯鐮�: {barcode}", childDeviceCode);
+            QuartzLogHelper.LogInfo(_logger, "RequestWmsTask锛氬悜WMS璇锋眰浠诲姟锛屾潯鐮�: {Barcode}锛屽瓙璁惧: {ChildDeviceCode}", $"鍚慦MS璇锋眰浠诲姟锛屾潯鐮�: {barcode}", childDeviceCode, barcode, childDeviceCode);
             var result = _taskService.RequestWMSTask(barcode, childDeviceCode);
             return result.Status;
         }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs
new file mode 100644
index 0000000..20d43ff
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs
@@ -0,0 +1,85 @@
+using Microsoft.Extensions.Logging;
+using WIDESEAWCS_Core.LogHelper;
+
+namespace WIDESEAWCS_Tasks;
+
+/// <summary>
+/// Quartz 浣滀笟鏃ュ織甯姪绫� - 缁熶竴灏佽 ILogger 鍜� QuartzLogger 鐨勫弻閫氶亾鏃ュ織璁板綍
+/// </summary>
+/// <remarks>
+/// 鎵�鏈� Quartz Job 涓渶瑕佸悓鏃跺啓鍏� ILogger锛圫erilog锛夊拰 QuartzLogger锛堟枃浠舵棩蹇楋級鐨勫満鏅紝
+/// 缁熶竴璋冪敤姝ゅ府鍔╃被鐨勬柟娉曪紝閬垮厤閲嶅缂栧啓涓よ鏃ュ織浠g爜銆�
+/// </remarks>
+public static class QuartzLogHelper
+{
+    /// <summary>
+    /// 璁板綍閿欒鏃ュ織锛堝甫寮傚父瀵硅薄锛�
+    /// </summary>
+    /// <param name="logger">ILogger 瀹炰緥</param>
+    /// <param name="ex">寮傚父瀵硅薄</param>
+    /// <param name="loggerMessage">ILogger 鐨勭粨鏋勫寲鏃ュ織妯℃澘锛堟敮鎸佸崰浣嶇锛�</param>
+    /// <param name="quartzMessage">QuartzLogger 鐨勬棩蹇楁秷鎭�</param>
+    /// <param name="deviceCode">璁惧缂栫爜</param>
+    /// <param name="args">ILogger 缁撴瀯鍖栨棩蹇楃殑鍙傛暟</param>
+    public static void LogError(ILogger logger, Exception ex, string loggerMessage, string quartzMessage, string deviceCode, params object[] args)
+    {
+        logger.LogError(ex, loggerMessage, args);
+        QuartzLogger.Error(quartzMessage, deviceCode, ex);
+    }
+
+    /// <summary>
+    /// 璁板綍閿欒鏃ュ織锛堜笉甯﹀紓甯稿璞★級
+    /// </summary>
+    /// <param name="logger">ILogger 瀹炰緥</param>
+    /// <param name="loggerMessage">ILogger 鐨勭粨鏋勫寲鏃ュ織妯℃澘锛堟敮鎸佸崰浣嶇锛�</param>
+    /// <param name="quartzMessage">QuartzLogger 鐨勬棩蹇楁秷鎭�</param>
+    /// <param name="deviceCode">璁惧缂栫爜</param>
+    /// <param name="args">ILogger 缁撴瀯鍖栨棩蹇楃殑鍙傛暟</param>
+    public static void LogError(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args)
+    {
+        logger.LogError(loggerMessage, args);
+        QuartzLogger.Error(quartzMessage, deviceCode);
+    }
+
+    /// <summary>
+    /// 璁板綍淇℃伅鏃ュ織
+    /// </summary>
+    /// <param name="logger">ILogger 瀹炰緥</param>
+    /// <param name="loggerMessage">ILogger 鐨勭粨鏋勫寲鏃ュ織妯℃澘锛堟敮鎸佸崰浣嶇锛�</param>
+    /// <param name="quartzMessage">QuartzLogger 鐨勬棩蹇楁秷鎭�</param>
+    /// <param name="deviceCode">璁惧缂栫爜</param>
+    /// <param name="args">ILogger 缁撴瀯鍖栨棩蹇楃殑鍙傛暟</param>
+    public static void LogInfo(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args)
+    {
+        logger.LogInformation(loggerMessage, args);
+        QuartzLogger.Info(quartzMessage, deviceCode);
+    }
+
+    /// <summary>
+    /// 璁板綍璀﹀憡鏃ュ織
+    /// </summary>
+    /// <param name="logger">ILogger 瀹炰緥</param>
+    /// <param name="loggerMessage">ILogger 鐨勭粨鏋勫寲鏃ュ織妯℃澘锛堟敮鎸佸崰浣嶇锛�</param>
+    /// <param name="quartzMessage">QuartzLogger 鐨勬棩蹇楁秷鎭�</param>
+    /// <param name="deviceCode">璁惧缂栫爜</param>
+    /// <param name="args">ILogger 缁撴瀯鍖栨棩蹇楃殑鍙傛暟</param>
+    public static void LogWarn(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args)
+    {
+        logger.LogWarning(loggerMessage, args);
+        QuartzLogger.Warn(quartzMessage, deviceCode);
+    }
+
+    /// <summary>
+    /// 璁板綍璋冭瘯鏃ュ織
+    /// </summary>
+    /// <param name="logger">ILogger 瀹炰緥</param>
+    /// <param name="loggerMessage">ILogger 鐨勭粨鏋勫寲鏃ュ織妯℃澘锛堟敮鎸佸崰浣嶇锛�</param>
+    /// <param name="quartzMessage">QuartzLogger 鐨勬棩蹇楁秷鎭�</param>
+    /// <param name="deviceCode">璁惧缂栫爜</param>
+    /// <param name="args">ILogger 缁撴瀯鍖栨棩蹇楃殑鍙傛暟</param>
+    public static void LogDebug(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args)
+    {
+        logger.LogDebug(loggerMessage, args);
+        QuartzLogger.Debug(quartzMessage, deviceCode);
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
index 8060907..e444092 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -174,8 +174,7 @@
                 if (!flag || value is not CommonStackerCrane commonStackerCrane)
                 {
                     // 鍙傛暟鏃犳晥锛岀洿鎺ヨ繑鍥�
-                    _logger.LogWarning("Execute锛氬弬鏁版棤鏁�");
-                    QuartzLogger.Warn("Execute锛氬弬鏁版棤鏁�", "CommonStackerCraneJob");
+                    QuartzLogHelper.LogWarn(_logger, "Execute锛氬弬鏁版棤鏁�", "Execute锛氬弬鏁版棤鏁�", "CommonStackerCraneJob");
                     return Task.CompletedTask;
                 }
 
@@ -186,8 +185,7 @@
                 {
                     // 缁戝畾浠诲姟瀹屾垚浜嬩欢澶勭悊鏂规硶
                     commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
-                    _logger.LogInformation("Execute锛氳闃呬换鍔″畬鎴愪簨浠讹紝璁惧: {DeviceCode}", _deviceCode);
-                    QuartzLogger.Info($"璁㈤槄浠诲姟瀹屾垚浜嬩欢", _deviceCode);
+                    QuartzLogHelper.LogInfo(_logger, "Execute锛氳闃呬换鍔″畬鎴愪簨浠讹紝璁惧: {DeviceCode}", "璁㈤槄浠诲姟瀹屾垚浜嬩欢", _deviceCode, _deviceCode);
                 }
 
                 // ========== 妫�鏌ュ爢鍨涙満浠诲姟瀹屾垚鐘舵�� ==========
@@ -225,8 +223,7 @@
                 if (stackerCraneTaskCommand == null)
                 {
                     // 鍛戒护鏋勫缓澶辫触
-                    _logger.LogWarning("Execute锛氬懡浠ゆ瀯寤哄け璐ワ紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", _deviceCode, task.TaskNum);
-                    QuartzLogger.Warn($"鍛戒护鏋勫缓澶辫触锛屼换鍔″彿: {task.TaskNum}", _deviceCode);
+                    QuartzLogHelper.LogWarn(_logger, "Execute锛氬懡浠ゆ瀯寤哄け璐ワ紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", $"鍛戒护鏋勫缓澶辫触锛屼换鍔″彿: {task.TaskNum}", _deviceCode, _deviceCode, task.TaskNum);
                     return Task.CompletedTask;
                 }
 
@@ -240,20 +237,17 @@
                     commonStackerCrane.LastTaskType = task.TaskType;
                     _taskService.UpdateTaskStatusToNext(task.TaskNum);
 
-                    _logger.LogInformation("Execute锛氬懡浠ゅ彂閫佹垚鍔燂紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", _deviceCode, task.TaskNum);
-                    QuartzLogger.Info($"鍛戒护鍙戦�佹垚鍔燂紝浠诲姟鍙�: {task.TaskNum}", _deviceCode);
+                    QuartzLogHelper.LogInfo(_logger, "Execute锛氬懡浠ゅ彂閫佹垚鍔燂紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", $"鍛戒护鍙戦�佹垚鍔燂紝浠诲姟鍙�: {task.TaskNum}", _deviceCode, _deviceCode, task.TaskNum);
                 }
                 else
                 {
-                    _logger.LogError("Execute锛氬懡浠ゅ彂閫佸け璐ワ紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", _deviceCode, task.TaskNum);
-                    QuartzLogger.Error($"鍛戒护鍙戦�佸け璐�", _deviceCode);
+                    QuartzLogHelper.LogError(_logger, "Execute锛氬懡浠ゅ彂閫佸け璐ワ紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", $"鍛戒护鍙戦�佸け璐�", _deviceCode, _deviceCode, task.TaskNum);
                 }
             }
             catch (Exception ex)
             {
                 // 璁板綍寮傚父
-                _logger.LogError(ex, "Execute锛氭墽琛屽紓甯革紝璁惧: {DeviceCode}", _deviceCode);
-                QuartzLogger.Error($"鎵ц寮傚父: {ex.Message}", _deviceCode, ex);
+                QuartzLogHelper.LogError(_logger, ex, "Execute锛氭墽琛屽紓甯革紝璁惧: {DeviceCode}", $"鎵ц寮傚父: {ex.Message}", _deviceCode, _deviceCode);
             }
 
             return Task.CompletedTask;
@@ -277,8 +271,7 @@
             if (stackerCrane != null)
             {
                 // 璁板綍鏃ュ織
-                _logger.LogInformation("CommonStackerCrane_StackerCraneTaskCompletedEventHandler锛氫换鍔″畬鎴愶紝浠诲姟鍙�: {TaskNum}", e.TaskNum);
-                QuartzLogger.Info($"浠诲姟瀹屾垚锛屼换鍔″彿: {e.TaskNum}", stackerCrane.DeviceCode);
+                QuartzLogHelper.LogInfo(_logger, "CommonStackerCrane_StackerCraneTaskCompletedEventHandler锛氫换鍔″畬鎴愶紝浠诲姟鍙�: {TaskNum}", $"浠诲姟瀹屾垚锛屼换鍔″彿: {e.TaskNum}", stackerCrane.DeviceCode, e.TaskNum);
 
                 // 鏇存柊浠诲姟鐘舵�佷负瀹屾垚
                 if (_taskService.StackCraneTaskCompleted(e.TaskNum).Status)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
index a8637cb..b3a4cff 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneCommandBuilder.cs
@@ -105,14 +105,12 @@
             {
                 if (roadway.Contains(mapping.Key))
                 {
-                    _logger.LogDebug("GetCommandType锛氬尮閰嶅贩閬� {Roadway}锛屽懡浠ょ被鍨�: {CommandType}", roadway, mapping.Value);
-                    QuartzLogger.Debug($"GetCommandType锛氬尮閰嶅贩閬� {roadway}锛屽懡浠ょ被鍨�: {mapping.Value}", roadway);
+                    QuartzLogHelper.LogDebug(_logger, "GetCommandType锛氬尮閰嶅贩閬� {Roadway}锛屽懡浠ょ被鍨�: {CommandType}", $"GetCommandType锛氬尮閰嶅贩閬� {roadway}锛屽懡浠ょ被鍨�: {mapping.Value}", roadway, roadway, mapping.Value);
                     return mapping.Value;
                 }
             }
 
-            _logger.LogDebug("GetCommandType锛氬贩閬� {Roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {DefaultType}", roadway, _config.DefaultCommandType);
-            QuartzLogger.Debug($"GetCommandType锛氬贩閬� {roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {_config.DefaultCommandType}", roadway);
+            QuartzLogHelper.LogDebug(_logger, "GetCommandType锛氬贩閬� {Roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {DefaultType}", $"GetCommandType锛氬贩閬� {roadway} 鏈尮閰嶏紝浣跨敤榛樿鍛戒护绫诲瀷: {_config.DefaultCommandType}", roadway, roadway, _config.DefaultCommandType);
             return _config.DefaultCommandType;
         }
 
@@ -172,8 +170,7 @@
             // 鑾峰彇浠诲姟绫诲瀷鍒嗙粍
             TaskTypeGroup taskTypeGroup = task.TaskType.GetTaskTypeGroup();
 
-            _logger.LogDebug("BuildCommand锛氫换鍔″彿: {TaskNum}锛屼换鍔$被鍨嬪垎缁�: {TaskTypeGroup}", task.TaskNum, taskTypeGroup);
-            QuartzLogger.Debug($"BuildCommand锛氫换鍔″彿: {task.TaskNum}锛屼换鍔$被鍨嬪垎缁�: {taskTypeGroup}", task.Roadway);
+            QuartzLogHelper.LogDebug(_logger, "BuildCommand锛氫换鍔″彿: {TaskNum}锛屼换鍔$被鍨嬪垎缁�: {TaskTypeGroup}", $"BuildCommand锛氫换鍔″彿: {task.TaskNum}锛屼换鍔$被鍨嬪垎缁�: {taskTypeGroup}", task.Roadway, task.TaskNum, taskTypeGroup);
 
             // 鏍规嵁浠诲姟绫诲瀷鍒嗗彂鏋勫缓
             return taskTypeGroup switch
@@ -200,8 +197,7 @@
         /// <returns>濉厖濂界殑鍛戒护瀵硅薄</returns>
         private T? BuildInboundCommand<T>(Dt_Task task, T command) where T : class
         {
-            _logger.LogInformation("BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", task.TaskNum);
-            QuartzLogger.Info($"BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", $"BuildInboundCommand锛氭瀯寤哄叆搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway, task.TaskNum);
 
             // 纭畾浠诲姟绫诲瀷锛堢┖鎵樼洏鐢ㄧ壒娈婄被鍨嬶級
             int taskType = 0;
@@ -217,8 +213,7 @@
             if (router == null)
             {
                 // 鏈壘鍒扮珯鍙帮紝鏇存柊寮傚父淇℃伅
-                _logger.LogError("BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵CurrentAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", task.CurrentAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.CurrentAddress}銆戜俊鎭�", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵CurrentAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", $"BuildInboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.CurrentAddress}銆戜俊鎭�", task.Roadway, task.CurrentAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.CurrentAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
                 return null;
             }
@@ -231,8 +226,7 @@
             // 瑙f瀽鐩爣鍦板潃锛堝簱浣嶅湴鍧�锛�
             if (!TryParseAddress(task.NextAddress, out short endRow, out short endColumn, out short endLayer))
             {
-                _logger.LogError("BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", task.NextAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", $"BuildInboundCommand锛氬叆搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway, task.NextAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岀粓鐐癸細銆恵task.NextAddress}銆�");
                 return null;
             }
@@ -242,9 +236,7 @@
             SetCommandProperty(command, "EndColumn", endColumn);
             SetCommandProperty(command, "EndLayer", endLayer);
 
-            _logger.LogInformation("BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}",
-                router.SrmRow, router.SrmColumn, router.SrmLayer, endRow, endColumn, endLayer, task.TaskNum);
-            QuartzLogger.Info($"BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}", $"BuildInboundCommand锛氬叆搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway, router.SrmRow, router.SrmColumn, router.SrmLayer, endRow, endColumn, endLayer, task.TaskNum);
 
             return command;
         }
@@ -264,8 +256,7 @@
         /// <returns>濉厖濂界殑鍛戒护瀵硅薄</returns>
         private T? BuildOutboundCommand<T>(Dt_Task task, T command) where T : class
         {
-            _logger.LogInformation("BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", task.TaskNum);
-            QuartzLogger.Info($"BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", $"BuildOutboundCommand锛氭瀯寤哄嚭搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway, task.TaskNum);
 
             // 纭畾浠诲姟绫诲瀷
             int taskType = 0;
@@ -280,8 +271,7 @@
             Dt_Router? router = _routerService.QueryNextRoute(task.Roadway, task.TargetAddress, taskType);
             if (router == null)
             {
-                _logger.LogError("BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵TargetAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", task.TargetAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.TargetAddress}銆戜俊鎭�", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵TargetAddress}銆戜俊鎭紝浠诲姟鍙�: {TaskNum}", $"BuildOutboundCommand锛氭湭鎵惧埌绔欏彴銆恵task.TargetAddress}銆戜俊鎭�", task.Roadway, task.TargetAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.TargetAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鏀捐揣绔欏彴淇℃伅");
                 return null;
             }
@@ -294,8 +284,7 @@
             // 瑙f瀽璧峰鍦板潃锛堝簱浣嶅湴鍧�锛�
             if (!TryParseAddress(task.CurrentAddress, out short startRow, out short startColumn, out short startLayer))
             {
-                _logger.LogError("BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", task.CurrentAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", $"BuildOutboundCommand锛氬嚭搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway, task.CurrentAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
                 return null;
             }
@@ -305,9 +294,7 @@
             SetCommandProperty(command, "StartColumn", startColumn);
             SetCommandProperty(command, "StartLayer", startLayer);
 
-            _logger.LogInformation("BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}",
-                startRow, startColumn, startLayer, router.SrmRow, router.SrmColumn, router.SrmLayer, task.TaskNum);
-            QuartzLogger.Info($"BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}", $"BuildOutboundCommand锛氬嚭搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}", task.Roadway, startRow, startColumn, startLayer, router.SrmRow, router.SrmColumn, router.SrmLayer, task.TaskNum);
 
             return command;
         }
@@ -327,14 +314,12 @@
         /// <returns>濉厖濂界殑鍛戒护瀵硅薄</returns>
         private T? BuildRelocationCommand<T>(Dt_Task task, T command) where T : class
         {
-            _logger.LogInformation("BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", task.TaskNum);
-            QuartzLogger.Info($"BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {TaskNum}", $"BuildRelocationCommand锛氭瀯寤虹Щ搴撳懡浠わ紝浠诲姟鍙�: {task.TaskNum}", task.Roadway, task.TaskNum);
 
             // 瑙f瀽鐩爣鍦板潃
             if (!TryParseAddress(task.NextAddress, out short endRow, out short endColumn, out short endLayer))
             {
-                _logger.LogError("BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", task.NextAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {NextAddress}锛屼换鍔″彿: {TaskNum}", $"BuildRelocationCommand锛氱Щ搴撲换鍔$粓鐐瑰湴鍧�瑙f瀽澶辫触锛岀粓鐐�: {task.NextAddress}", task.Roadway, task.NextAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岀粓鐐癸細銆恵task.NextAddress}銆�");
                 return null;
             }
@@ -347,8 +332,7 @@
             // 瑙f瀽璧峰鍦板潃
             if (!TryParseAddress(task.CurrentAddress, out short startRow, out short startColumn, out short startLayer))
             {
-                _logger.LogError("BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", task.CurrentAddress, task.TaskNum);
-                QuartzLogger.Error($"BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway);
+                QuartzLogHelper.LogError(_logger, "BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {CurrentAddress}锛屼换鍔″彿: {TaskNum}", $"BuildRelocationCommand锛氱Щ搴撲换鍔¤捣鐐瑰湴鍧�瑙f瀽澶辫触锛岃捣鐐�: {task.CurrentAddress}", task.Roadway, task.CurrentAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
                 return null;
             }
@@ -358,9 +342,7 @@
             SetCommandProperty(command, "StartColumn", startColumn);
             SetCommandProperty(command, "StartLayer", startLayer);
 
-            _logger.LogInformation("BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}",
-                startRow, startColumn, startLayer, endRow, endColumn, endLayer, task.TaskNum);
-            QuartzLogger.Info($"BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {StartRow}-{StartColumn}-{StartLayer}锛岀粓鐐�: {EndRow}-{EndColumn}-{EndLayer}锛屼换鍔″彿: {TaskNum}", $"BuildRelocationCommand锛氱Щ搴撳懡浠ゆ瀯寤烘垚鍔燂紝璧风偣: {startRow}-{startColumn}-{startLayer}锛岀粓鐐�: {endRow}-{endColumn}-{endLayer}", task.Roadway, startRow, startColumn, startLayer, endRow, endColumn, endLayer, task.TaskNum);
 
             return command;
         }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
index b92261d..3e48c96 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
@@ -109,8 +109,7 @@
             {
                 // 娌℃湁涓婁竴浠诲姟绫诲瀷锛屾煡璇㈡櫘閫氫换鍔�
                 candidateTask = _taskService.QueryStackerCraneTask(deviceCode);
-                _logger.LogDebug("SelectTask锛氭煡璇㈡櫘閫氫换鍔★紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", deviceCode, candidateTask?.TaskNum);
-                QuartzLogger.Debug($"鏌ヨ鏅�氫换鍔★紝璁惧: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode);
+                QuartzLogHelper.LogDebug(_logger, "SelectTask锛氭煡璇㈡櫘閫氫换鍔★紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鏌ヨ鏅�氫换鍔★紝璁惧: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
             }
             else if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
             {
@@ -118,30 +117,26 @@
                 candidateTask = _taskService.QueryStackerCraneInTask(deviceCode);
                 // 濡傛灉娌℃湁鍏ュ簱浠诲姟锛屽啀鏌ヤ竴涓嬪嚭搴撲换鍔�
                 candidateTask ??= _taskService.QueryStackerCraneOutTask(deviceCode);
-                _logger.LogDebug("SelectTask锛氬嚭搴撳悗浼樺厛鏌ュ叆搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", deviceCode, candidateTask?.TaskNum);
-                QuartzLogger.Debug($"鍑哄簱鍚庝紭鍏堟煡鍏ュ簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode);
+                QuartzLogHelper.LogDebug(_logger, "SelectTask锛氬嚭搴撳悗浼樺厛鏌ュ叆搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鍑哄簱鍚庝紭鍏堟煡鍏ュ簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
             }
             else
             {
                 // 涓婁竴浠诲姟鏄叆搴擄紙闈炲嚭搴擄級锛屼紭鍏堟煡鍑哄簱浠诲姟
                 candidateTask = _taskService.QueryStackerCraneOutTask(deviceCode);
-                _logger.LogDebug("SelectTask锛氬叆搴撳悗浼樺厛鏌ュ嚭搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", deviceCode, candidateTask?.TaskNum);
-                QuartzLogger.Debug($"鍏ュ簱鍚庝紭鍏堟煡鍑哄簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode);
+                QuartzLogHelper.LogDebug(_logger, "SelectTask锛氬叆搴撳悗浼樺厛鏌ュ嚭搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鍏ュ簱鍚庝紭鍏堟煡鍑哄簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
             }
 
             // 濡傛灉娌℃湁鍊欓�変换鍔★紝杩斿洖 null
             if (candidateTask == null)
             {
-                _logger.LogDebug("SelectTask锛氭病鏈夊�欓�変换鍔★紝璁惧: {DeviceCode}", deviceCode);
-                QuartzLogger.Debug($"娌℃湁鍊欓�変换鍔★紝璁惧: {deviceCode}", deviceCode);
+                QuartzLogHelper.LogDebug(_logger, "SelectTask锛氭病鏈夊�欓�変换鍔★紝璁惧: {DeviceCode}", $"娌℃湁鍊欓�変换鍔★紝璁惧: {deviceCode}", deviceCode, deviceCode);
                 return null;
             }
 
             // 濡傛灉涓嶆槸鍑哄簱浠诲姟锛岀洿鎺ヨ繑鍥�
             if (candidateTask.TaskType.GetTaskTypeGroup() != TaskTypeGroup.OutbondGroup)
             {
-                _logger.LogInformation("SelectTask锛氶�変腑闈炲嚭搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}锛屼换鍔$被鍨�: {TaskType}", deviceCode, candidateTask.TaskNum, candidateTask.TaskType);
-                QuartzLogger.Info($"閫変腑闈炲嚭搴撲换鍔★紝浠诲姟鍙�: {candidateTask.TaskNum}锛屼换鍔$被鍨�: {candidateTask.TaskType}", deviceCode);
+                QuartzLogHelper.LogInfo(_logger, "SelectTask锛氶�変腑闈炲嚭搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}锛屼换鍔$被鍨�: {TaskType}", $"閫変腑闈炲嚭搴撲换鍔★紝浠诲姟鍙�: {candidateTask.TaskNum}锛屼换鍔$被鍨�: {candidateTask.TaskType}", deviceCode, deviceCode, candidateTask.TaskNum, candidateTask.TaskType);
                 return candidateTask;
             }
 
@@ -149,8 +144,7 @@
             Dt_Task? selectedTask = TrySelectOutboundTask(candidateTask);
             if (selectedTask != null)
             {
-                _logger.LogInformation("SelectTask锛氶�変腑鍑哄簱浠诲姟锛岃澶�: {DeviceCode}锛屼换鍔″彿: {TaskNum}", deviceCode, selectedTask.TaskNum);
-                QuartzLogger.Info($"閫変腑鍑哄簱浠诲姟锛屼换鍔″彿: {selectedTask.TaskNum}", deviceCode);
+                QuartzLogHelper.LogInfo(_logger, "SelectTask锛氶�変腑鍑哄簱浠诲姟锛岃澶�: {DeviceCode}锛屼换鍔″彿: {TaskNum}", $"閫変腑鍑哄簱浠诲姟锛屼换鍔″彿: {selectedTask.TaskNum}", deviceCode, deviceCode, selectedTask.TaskNum);
                 return selectedTask;
             }
 
@@ -167,16 +161,14 @@
                 selectedTask = TrySelectOutboundTask(alternativeTask);
                 if (selectedTask != null)
                 {
-                    _logger.LogInformation("SelectTask锛氶�変腑澶囬�夊嚭搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", deviceCode, selectedTask.TaskNum);
-                    QuartzLogger.Info($"閫変腑澶囬�夊嚭搴撲换鍔★紝浠诲姟鍙�: {selectedTask.TaskNum}", deviceCode);
+                    QuartzLogHelper.LogInfo(_logger, "SelectTask锛氶�変腑澶囬�夊嚭搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", $"閫変腑澶囬�夊嚭搴撲换鍔★紝浠诲姟鍙�: {selectedTask.TaskNum}", deviceCode, deviceCode, selectedTask.TaskNum);
                     return selectedTask;
                 }
             }
 
             // 娌℃湁鍙敤鍑哄簱浠诲姟锛屽皾璇曡繑鍥炲叆搴撲换鍔�
             var inboundTask = _taskService.QueryStackerCraneInTask(deviceCode);
-            _logger.LogInformation("SelectTask锛氳繑鍥炲叆搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", deviceCode, inboundTask?.TaskNum);
-            QuartzLogger.Info($"杩斿洖鍏ュ簱浠诲姟锛屼换鍔″彿: {inboundTask?.TaskNum}", deviceCode);
+            QuartzLogHelper.LogInfo(_logger, "SelectTask锛氳繑鍥炲叆搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", $"杩斿洖鍏ュ簱浠诲姟锛屼换鍔″彿: {inboundTask?.TaskNum}", deviceCode, deviceCode, inboundTask?.TaskNum);
             return inboundTask;
         }
 
@@ -299,8 +291,7 @@
             if (router == null)
             {
                 // 鏈壘鍒扮珯鍙拌矾鐢变俊鎭�
-                _logger.LogWarning("IsOutTaskStationAvailable锛氭湭鎵惧埌绔欏彴璺敱淇℃伅锛岀珯鍙�: {NextAddress}锛屼换鍔″彿: {TaskNum}", task.NextAddress, task.TaskNum);
-                QuartzLogger.Warn($"IsOutTaskStationAvailable锛氭湭鎵惧埌绔欏彴璺敱淇℃伅锛岀珯鍙�: {task.NextAddress}", task.Roadway);
+                QuartzLogHelper.LogWarn(_logger, "IsOutTaskStationAvailable锛氭湭鎵惧埌绔欏彴璺敱淇℃伅锛岀珯鍙�: {NextAddress}锛屼换鍔″彿: {TaskNum}", $"IsOutTaskStationAvailable锛氭湭鎵惧埌绔欏彴璺敱淇℃伅锛岀珯鍙�: {task.NextAddress}", task.Roadway, task.NextAddress, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鏍¢獙绔欏彴");
                 return false;
             }
@@ -310,8 +301,7 @@
             if (device == null)
             {
                 // 鏈壘鍒拌澶�
-                _logger.LogWarning("IsOutTaskStationAvailable锛氭湭鎵惧埌鍑哄簱绔欏彴瀵瑰簲鐨勯�氳瀵硅薄锛岀珯鍙�: {ChildPosiDeviceCode}锛屼换鍔″彿: {TaskNum}", router.ChildPosiDeviceCode, task.TaskNum);
-                QuartzLogger.Warn($"IsOutTaskStationAvailable锛氭湭鎵惧埌鍑哄簱绔欏彴瀵瑰簲鐨勯�氳瀵硅薄锛岀珯鍙�: {router.ChildPosiDeviceCode}", task.Roadway);
+                QuartzLogHelper.LogWarn(_logger, "IsOutTaskStationAvailable锛氭湭鎵惧埌鍑哄簱绔欏彴瀵瑰簲鐨勯�氳瀵硅薄锛岀珯鍙�: {ChildPosiDeviceCode}锛屼换鍔″彿: {TaskNum}", $"IsOutTaskStationAvailable锛氭湭鎵惧埌鍑哄簱绔欏彴瀵瑰簲鐨勯�氳瀵硅薄锛岀珯鍙�: {router.ChildPosiDeviceCode}", task.Roadway, router.ChildPosiDeviceCode, task.TaskNum);
                 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒板嚭搴撶珯鍙般�恵router.ChildPosiDeviceCode}銆戝搴旂殑閫氳瀵硅薄锛屾棤娉曞垽鏂嚭搴撶珯鍙版槸鍚﹁鍗犵敤");
                 return false;
             }
@@ -321,8 +311,7 @@
 
             // 妫�鏌ョ珯鍙版槸鍚﹁鍗犵敤
             bool isOccupied = conveyorLine.IsOccupied(router.ChildPosi);
-            _logger.LogInformation("IsOutTaskStationAvailable锛氱珯鍙� {ChildPosi}锛屾槸鍚﹁鍗犵敤: {IsOccupied}锛屼换鍔″彿: {TaskNum}", router.ChildPosi, !isOccupied, task.TaskNum);
-            QuartzLogger.Info($"IsOutTaskStationAvailable锛氱珯鍙� {router.ChildPosi}锛屾槸鍚﹁鍗犵敤: {!isOccupied}", task.Roadway);
+            QuartzLogHelper.LogInfo(_logger, "IsOutTaskStationAvailable锛氱珯鍙� {ChildPosi}锛屾槸鍚﹁鍗犵敤: {IsOccupied}锛屼换鍔″彿: {TaskNum}", $"IsOutTaskStationAvailable锛氱珯鍙� {router.ChildPosi}锛屾槸鍚﹁鍗犵敤: {!isOccupied}", task.Roadway, router.ChildPosi, !isOccupied, task.TaskNum);
 
             return isOccupied;
         }
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue b/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue
index cf4fe98..61a1d1c 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/gridBodyExtension.vue
@@ -60,7 +60,8 @@
         </el-table-column>
         <el-table-column prop="grade" label="浼樺厛绾�" width="100">
           <template v-slot="{ row }">
-            <el-input-number v-if="row && row.editable" v-model="row.grade" :min="1" :max="99" size="small" style="width: 80px"></el-input-number>
+            <el-input-number v-if="row && row.editable" v-model="row.grade" :min="1" :max="99" size="small"
+              style="width: 80px"></el-input-number>
             <span v-else>{{ row ? row.grade : '' }}</span>
           </template>
         </el-table-column>
@@ -242,7 +243,9 @@
     },
     getStatusKey(taskType, taskStatus) {
       if (taskType === 200) return `inbound_${taskStatus}`;
+      if (taskType === 204) return `inbound_${taskStatus}`;
       if (taskType === 100) return `outbound_${taskStatus}`;
+      if (taskType === 140) return `outbound_${taskStatus}`;
       if (taskType === 300) return `relocation_${taskStatus}`;
       return `other_${taskStatus}`;
     },
@@ -250,6 +253,8 @@
       if (taskType === 200 && taskStatus === 200) return true;
       if (taskType === 100 && taskStatus === 100) return true;
       if (taskType === 300 && taskStatus === 300) return true;
+      if (taskType === 140 && taskStatus === 100) return true;
+      if (taskType === 204 && taskStatus === 200) return true;
       return false;
     },
     submitDispatch() {
@@ -308,19 +313,23 @@
   color: #606266;
   margin-bottom: 10px;
 }
+
 .dispatch-info .count {
   color: #409eff;
   font-weight: bold;
 }
+
 .status-error {
   color: #f56c6c;
 }
+
 .fail-results {
   margin-top: 15px;
   padding: 10px;
   background: #fef0f0;
   border-radius: 4px;
 }
+
 .fail-title {
   font-size: 14px;
   color: #f56c6c;
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
index 26da00e..65b1321 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -128,7 +128,7 @@
         /// 绌虹鍏ュ簱
         /// </summary>
         [Description("绌虹鍏ュ簱")]
-        InEmpty = 600,
+        InEmpty = 204,
     }
 
     public enum TaskOutboundTypeEnum
diff --git "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-1003/config.json" "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-1003/config.json"
index 2f32265..21b7761 100644
--- "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-1003/config.json"
+++ "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-1003/config.json"
@@ -2,7 +2,7 @@
   "id": "1003",
   "name": "A\u533A_\u5E38\u6E29\u8F93\u9001\u7EBF",
   "plcType": "S71500",
-  "port": 109,
+  "port": 102,
   "activationKey": "",
   "autoStart": false,
   "protocolTemplateId": "protocol-1003",
diff --git "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-CWSC1/config.json" "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-CWSC1/config.json"
index 4a71574..fe6fa6a 100644
--- "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-CWSC1/config.json"
+++ "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-CWSC1/config.json"
@@ -2,7 +2,7 @@
   "id": "CWSC1",
   "name": "\u5E38\u6E29\u5806\u579B\u673A",
   "plcType": "S71500",
-  "port": 103,
+  "port": 102,
   "activationKey": "",
   "autoStart": false,
   "protocolTemplateId": "protocol-CWSC1",
diff --git "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-HCSC1/config.json" "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-HCSC1/config.json"
index 2094de9..e916dec 100644
--- "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-HCSC1/config.json"
+++ "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-HCSC1/config.json"
@@ -2,16 +2,15 @@
   "id": "HCSC1",
   "name": "\u5316\u6210\u5806\u579B\u673A",
   "plcType": "S71500",
-  "port": 104,
+  "port": 102,
   "activationKey": "",
   "autoStart": false,
   "protocolTemplateId": "protocol-HCSC1",
   "memoryConfig": {
     "mRegionSize": 1024,
-    "dbBlockCount": 2,
+    "dbBlockCount": 1,
     "dbBlockNumbers": [
-      910,
-      900
+      510
     ],
     "dbBlockSize": 65536,
     "iRegionSize": 256,
diff --git "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-PM/config.json" "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-PM/config.json"
index 3a7f9df..b7a503f 100644
--- "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-PM/config.json"
+++ "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-PM/config.json"
@@ -2,7 +2,7 @@
   "id": "PM",
   "name": "\u63D2\u62D4\u9489\u673A",
   "plcType": "S71500",
-  "port": 107,
+  "port": 102,
   "activationKey": "",
   "autoStart": false,
   "protocolTemplateId": "protocol-PM",
diff --git "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/protocol-templates.json" "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/protocol-templates.json"
index 43c14cf..b695037 100644
--- "a/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/protocol-templates.json"
+++ "b/Code/\346\265\213\350\257\225\345\267\245\345\205\267/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/protocol-templates.json"
@@ -5,7 +5,7 @@
     "version": "1.0",
     "fields": [
       {
-        "fieldKey": "GWSC01_InputTaskNum",
+        "fieldKey": "GWSC1_InputTaskNum",
         "dbNumber": 100,
         "offset": 194,
         "bit": 1,
@@ -14,7 +14,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_WorkAction",
+        "fieldKey": "GWSC1_WorkAction",
         "dbNumber": 100,
         "offset": 192,
         "bit": 1,
@@ -23,7 +23,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_InputWorkType",
+        "fieldKey": "GWSC1_InputWorkType",
         "dbNumber": 100,
         "offset": 198,
         "bit": 1,
@@ -32,7 +32,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_InputPickRow",
+        "fieldKey": "GWSC1_InputPickRow",
         "dbNumber": 100,
         "offset": 208,
         "bit": 1,
@@ -41,7 +41,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_InputPickColumn",
+        "fieldKey": "GWSC1_InputPickColumn",
         "dbNumber": 100,
         "offset": 210,
         "bit": 1,
@@ -50,7 +50,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_InputPickLayer",
+        "fieldKey": "GWSC1_InputPickLayer",
         "dbNumber": 100,
         "offset": 212,
         "bit": 1,
@@ -59,7 +59,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_InputPlaceRow",
+        "fieldKey": "GWSC1_InputPlaceRow",
         "dbNumber": 100,
         "offset": 214,
         "bit": 1,
@@ -68,7 +68,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_InputPlaceColumn",
+        "fieldKey": "GWSC1_InputPlaceColumn",
         "dbNumber": 100,
         "offset": 216,
         "bit": 1,
@@ -77,7 +77,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_InputPlaceLayer",
+        "fieldKey": "GWSC1_InputPlaceLayer",
         "dbNumber": 100,
         "offset": 218,
         "bit": 1,
@@ -86,7 +86,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_StackerCraneAutoStatus",
+        "fieldKey": "GWSC1_StackerCraneAutoStatus",
         "dbNumber": 100,
         "offset": 2,
         "bit": 1,
@@ -95,7 +95,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_StackerCraneWorkStatus",
+        "fieldKey": "GWSC1_StackerCraneWorkStatus",
         "dbNumber": 100,
         "offset": 4,
         "bit": 1,
@@ -104,7 +104,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_OutputFaultHigh",
+        "fieldKey": "GWSC1_OutputFaultHigh",
         "dbNumber": 100,
         "offset": 12,
         "bit": 1,
@@ -113,7 +113,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_OutputFaultMid",
+        "fieldKey": "GWSC1_OutputFaultMid",
         "dbNumber": 100,
         "offset": 16,
         "bit": 1,
@@ -122,7 +122,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_OutputFaultLow",
+        "fieldKey": "GWSC1_OutputFaultLow",
         "dbNumber": 100,
         "offset": 20,
         "bit": 1,
@@ -131,7 +131,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_CurrentTaskNum",
+        "fieldKey": "GWSC1_CurrentTaskNum",
         "dbNumber": 100,
         "offset": 24,
         "bit": 1,
@@ -140,7 +140,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_StackerCraneCompleted",
+        "fieldKey": "GWSC1_StackerCraneCompleted",
         "dbNumber": 100,
         "offset": 28,
         "bit": 1,
@@ -149,7 +149,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_OutputCurrentColumn",
+        "fieldKey": "GWSC1_OutputCurrentColumn",
         "dbNumber": 100,
         "offset": 46,
         "bit": 1,
@@ -158,7 +158,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_OutputCurrentLayer",
+        "fieldKey": "GWSC1_OutputCurrentLayer",
         "dbNumber": 100,
         "offset": 48,
         "bit": 1,
@@ -167,7 +167,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "GWSC01_StackerCraneStatus",
+        "fieldKey": "GWSC1_StackerCraneStatus",
         "dbNumber": 100,
         "offset": 96,
         "bit": 1,
@@ -183,62 +183,17 @@
     "version": "1.0",
     "fields": [
       {
-        "fieldKey": "HCSC01_StackerCraneHeartBeat",
-        "dbNumber": 910,
+        "fieldKey": "HCSC1_InputTaskNum",
+        "dbNumber": 510,
         "offset": 0,
         "bit": 1,
-        "dataType": 1,
+        "dataType": 2,
         "length": 1,
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_StackerCraneStatus",
-        "dbNumber": 910,
-        "offset": 6,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_StackerCraneFaultCode",
-        "dbNumber": 910,
-        "offset": 8,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_StackerCraneWorkStatus",
-        "dbNumber": 910,
-        "offset": 20,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_StackerCraneRow",
-        "dbNumber": 910,
-        "offset": 22,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_StackerCraneColumn",
-        "dbNumber": 910,
-        "offset": 24,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_StackerCraneLayer",
-        "dbNumber": 910,
+        "fieldKey": "HCSC1_WorkAction",
+        "dbNumber": 510,
         "offset": 26,
         "bit": 1,
         "dataType": 1,
@@ -246,107 +201,125 @@
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_CurrentTaskNum",
-        "dbNumber": 910,
+        "fieldKey": "HCSC1_InputWorkType",
+        "dbNumber": 510,
+        "offset": 4,
+        "bit": 1,
+        "dataType": 1,
+        "length": 1,
+        "direction": 2
+      },
+      {
+        "fieldKey": "HCSC1_InputPickRow",
+        "dbNumber": 510,
+        "offset": 14,
+        "bit": 1,
+        "dataType": 1,
+        "length": 1,
+        "direction": 2
+      },
+      {
+        "fieldKey": "HCSC1_InputPickColumn",
+        "dbNumber": 510,
+        "offset": 16,
+        "bit": 1,
+        "dataType": 1,
+        "length": 1,
+        "direction": 2
+      },
+      {
+        "fieldKey": "HCSC1_InputPickLayer",
+        "dbNumber": 510,
+        "offset": 18,
+        "bit": 1,
+        "dataType": 1,
+        "length": 1,
+        "direction": 2
+      },
+      {
+        "fieldKey": "HCSC1_InputPlaceRow",
+        "dbNumber": 510,
+        "offset": 20,
+        "bit": 1,
+        "dataType": 1,
+        "length": 1,
+        "direction": 2
+      },
+      {
+        "fieldKey": "HCSC1_InputPlaceColumn",
+        "dbNumber": 510,
+        "offset": 22,
+        "bit": 1,
+        "dataType": 1,
+        "length": 1,
+        "direction": 2
+      },
+      {
+        "fieldKey": "HCSC1_InputPlaceLayer",
+        "dbNumber": 510,
+        "offset": 24,
+        "bit": 1,
+        "dataType": 1,
+        "length": 1,
+        "direction": 2
+      },
+      {
+        "fieldKey": "HCSC1_StackerCraneAutoStatus",
+        "dbNumber": 510,
         "offset": 28,
         "bit": 1,
-        "dataType": 2,
+        "dataType": 1,
         "length": 1,
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_StackerCraneWorkAction",
-        "dbNumber": 910,
-        "offset": 40,
+        "fieldKey": "HCSC1_StackerCraneWorkStatus",
+        "dbNumber": 510,
+        "offset": 30,
         "bit": 1,
         "dataType": 1,
         "length": 1,
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_StackerCraneCompleted",
-        "dbNumber": 910,
-        "offset": 42,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_HeartBeat",
-        "dbNumber": 900,
-        "offset": 0,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_TaskNum",
-        "dbNumber": 900,
-        "offset": 2,
+        "fieldKey": "HCSC1_OutputFaultHigh",
+        "dbNumber": 510,
+        "offset": 32,
         "bit": 1,
         "dataType": 2,
         "length": 1,
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_WorkAction",
-        "dbNumber": 900,
+        "fieldKey": "HCSC1_OutputFaultMid",
+        "dbNumber": 510,
+        "offset": 36,
+        "bit": 1,
+        "dataType": 2,
+        "length": 1,
+        "direction": 2
+      },
+      {
+        "fieldKey": "HCSC1_OutputFaultLow",
+        "dbNumber": 510,
         "offset": 40,
         "bit": 1,
-        "dataType": 1,
+        "dataType": 2,
         "length": 1,
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_FireAlarm",
-        "dbNumber": 900,
-        "offset": 42,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_WorkType",
-        "dbNumber": 900,
-        "offset": 44,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_StartRow",
-        "dbNumber": 900,
-        "offset": 46,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_StartColumn",
-        "dbNumber": 900,
+        "fieldKey": "HCSC1_CurrentTaskNum",
+        "dbNumber": 510,
         "offset": 48,
         "bit": 1,
-        "dataType": 1,
+        "dataType": 2,
         "length": 1,
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_StartLayer",
-        "dbNumber": 900,
-        "offset": 50,
-        "bit": 1,
-        "dataType": 1,
-        "length": 1,
-        "direction": 2
-      },
-      {
-        "fieldKey": "HCSC01_EndRow",
-        "dbNumber": 900,
+        "fieldKey": "HCSC1_StackerCraneCompleted",
+        "dbNumber": 510,
         "offset": 52,
         "bit": 1,
         "dataType": 1,
@@ -354,8 +327,8 @@
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_EndColumn",
-        "dbNumber": 900,
+        "fieldKey": "HCSC1_OutputCurrentColumn",
+        "dbNumber": 510,
         "offset": 54,
         "bit": 1,
         "dataType": 1,
@@ -363,8 +336,8 @@
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_EndLayer",
-        "dbNumber": 900,
+        "fieldKey": "HCSC1_OutputCurrentLayer",
+        "dbNumber": 510,
         "offset": 56,
         "bit": 1,
         "dataType": 1,
@@ -372,12 +345,21 @@
         "direction": 2
       },
       {
-        "fieldKey": "HCSC01_Barcode",
-        "dbNumber": 900,
+        "fieldKey": "HCSC1_StackerCraneStatus",
+        "dbNumber": 510,
         "offset": 58,
         "bit": 1,
-        "dataType": 3,
-        "length": 26,
+        "dataType": 1,
+        "length": 1,
+        "direction": 2
+      },
+      {
+        "fieldKey": "HCSC1_OutputFaultLow1",
+        "dbNumber": 510,
+        "offset": 44,
+        "bit": 1,
+        "dataType": 2,
+        "length": 1,
         "direction": 2
       }
     ]
@@ -388,7 +370,7 @@
     "version": "1.0",
     "fields": [
       {
-        "fieldKey": "CWSC01_InputTaskNum",
+        "fieldKey": "CWSC1_InputTaskNum",
         "dbNumber": 100,
         "offset": 194,
         "bit": 1,
@@ -397,7 +379,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_WorkAction",
+        "fieldKey": "CWSC1_WorkAction",
         "dbNumber": 100,
         "offset": 192,
         "bit": 1,
@@ -406,7 +388,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_InputWorkType",
+        "fieldKey": "CWSC1_InputWorkType",
         "dbNumber": 100,
         "offset": 198,
         "bit": 1,
@@ -415,7 +397,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_InputPickRow",
+        "fieldKey": "CWSC1_InputPickRow",
         "dbNumber": 100,
         "offset": 208,
         "bit": 1,
@@ -424,7 +406,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_InputPickColumn",
+        "fieldKey": "CWSC1_InputPickColumn",
         "dbNumber": 100,
         "offset": 210,
         "bit": 1,
@@ -433,7 +415,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_InputPickLayer",
+        "fieldKey": "CWSC1_InputPickLayer",
         "dbNumber": 100,
         "offset": 212,
         "bit": 1,
@@ -442,7 +424,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_InputPlaceRow",
+        "fieldKey": "CWSC1_InputPlaceRow",
         "dbNumber": 100,
         "offset": 214,
         "bit": 1,
@@ -451,7 +433,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_InputPlaceColumn",
+        "fieldKey": "CWSC1_InputPlaceColumn",
         "dbNumber": 100,
         "offset": 216,
         "bit": 1,
@@ -460,7 +442,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_InputPlaceLayer",
+        "fieldKey": "CWSC1_InputPlaceLayer",
         "dbNumber": 100,
         "offset": 218,
         "bit": 1,
@@ -469,7 +451,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_StackerCraneAutoStatus",
+        "fieldKey": "CWSC1_StackerCraneAutoStatus",
         "dbNumber": 100,
         "offset": 2,
         "bit": 1,
@@ -478,7 +460,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_StackerCraneWorkStatus",
+        "fieldKey": "CWSC1_StackerCraneWorkStatus",
         "dbNumber": 100,
         "offset": 4,
         "bit": 1,
@@ -487,7 +469,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_OutputFaultHigh",
+        "fieldKey": "CWSC1_OutputFaultHigh",
         "dbNumber": 100,
         "offset": 12,
         "bit": 1,
@@ -496,7 +478,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_OutputFaultMid",
+        "fieldKey": "CWSC1_OutputFaultMid",
         "dbNumber": 100,
         "offset": 16,
         "bit": 1,
@@ -505,7 +487,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_OutputFaultLow",
+        "fieldKey": "CWSC1_OutputFaultLow",
         "dbNumber": 100,
         "offset": 20,
         "bit": 1,
@@ -514,7 +496,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_CurrentTaskNum",
+        "fieldKey": "CWSC1_CurrentTaskNum",
         "dbNumber": 100,
         "offset": 24,
         "bit": 1,
@@ -523,7 +505,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_StackerCraneCompleted",
+        "fieldKey": "CWSC1_StackerCraneCompleted",
         "dbNumber": 100,
         "offset": 28,
         "bit": 1,
@@ -532,7 +514,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_OutputCurrentColumn",
+        "fieldKey": "CWSC1_OutputCurrentColumn",
         "dbNumber": 100,
         "offset": 46,
         "bit": 1,
@@ -541,7 +523,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_OutputCurrentLayer",
+        "fieldKey": "CWSC1_OutputCurrentLayer",
         "dbNumber": 100,
         "offset": 48,
         "bit": 1,
@@ -550,7 +532,7 @@
         "direction": 2
       },
       {
-        "fieldKey": "CWSC01_StackerCraneStatus",
+        "fieldKey": "CWSC1_StackerCraneStatus",
         "dbNumber": 100,
         "offset": 96,
         "bit": 1,

--
Gitblit v1.9.3