From 2db17e312a9bf0cff60917104447260b86178ca2 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期四, 23 四月 2026 08:40:38 +0800
Subject: [PATCH] Merge branch 'xiaoyang' into dev

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs     |    4 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/Constants/OutboundTimeConstants.cs               |    4 
 Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue                               |   46 ++--
 Code/docs/superpowers/plans/2026-04-22-stacker-crane-executing-task-check.md               |  145 +++++++++++++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs |    5 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs     |   15 +
 Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx                               |   23 -
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json                              |   18 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs |    2 
 Code/.omc/state/subagent-tracking.json                                                     |   42 +++
 Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotState.jsx                           |   40 ++-
 Code/.omc/state/mission-state.json                                                         |  110 +++++----
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs                |   12 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs    |    8 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json                              |    2 
 Code/WCS/WIDESEAWCS_Client/src/api/http.js                                                 |    2 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs              |    2 
 Code/docs/superpowers/specs/2026-04-22-stacker-crane-executing-task-check-design.md        |   55 +++++
 Code/.omc/state/last-tool-error.json                                                       |    8 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs                     |    8 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs |    4 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Tray.cs                 |   17 
 Code/WMS/WIDESEA_WMSClient/src/views/stock/groupPalle.vue                                  |    9 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs   |    2 
 Code/WMS/WIDESEA_WMSClient/src/extension/stock/groupPalle.jsx                              |   69 +-----
 25 files changed, 448 insertions(+), 204 deletions(-)

diff --git a/Code/.omc/state/last-tool-error.json b/Code/.omc/state/last-tool-error.json
index 5f72dd0..5bb5278 100644
--- a/Code/.omc/state/last-tool-error.json
+++ b/Code/.omc/state/last-tool-error.json
@@ -1,7 +1,7 @@
 {
   "tool_name": "Bash",
-  "tool_input_preview": "{\"command\":\"cd \\\"D:/Git/ShanMeiXinNengYuan/Code\\\" && dotnet build WCS/WIDESEAWCS_Server/WIDESEAWCS_Server.sln 2>&1\",\"timeout\":120000,\"description\":\"Build WCS solution to verify compilation\"}",
-  "error": "Exit code 1\n  姝e湪纭畾瑕佽繕鍘熺殑椤圭洰鈥r\n  鎵�鏈夐」鐩潎鏄渶鏂扮殑锛屾棤娉曡繕鍘熴�俓r\n  WIDESEAWCS_Common -> D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\bin\\Debug\\net8.0\\WIDESEAWCS_Common.dll\r\n  WIDESEAWCS_Communicator -> D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\bin\\Debug\\net8.0\\WIDESEAWCS_Communicator.dll\r\n  WIDESEAWCS_Core -> D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\bin\\Debug\\net8.0\\WIDESEAWCS_Core.dll\r\n  WIDESEAWCS_Model -> D:\\Git\\ShanMeiXinN...",
-  "timestamp": "2026-04-21T09:39:52.122Z",
-  "retry_count": 1
+  "tool_input_preview": "{\"command\":\"cd \\\"D:/Git/ShanMeiXinNengYuan/Code\\\" && git show 556ce5b --no-stat -p\",\"description\":\"Show full diff for commit 556ce5b (StackerCraneTaskSelector call)\"}",
+  "error": "Exit code 128\nfatal: unrecognized argument: --no-stat",
+  "timestamp": "2026-04-22T07:58:02.431Z",
+  "retry_count": 3
 }
\ No newline at end of file
diff --git a/Code/.omc/state/mission-state.json b/Code/.omc/state/mission-state.json
index 1228a50..0740a61 100644
--- a/Code/.omc/state/mission-state.json
+++ b/Code/.omc/state/mission-state.json
@@ -1,5 +1,5 @@
 {
-  "updatedAt": "2026-04-21T11:39:09.598Z",
+  "updatedAt": "2026-04-22T08:00:38.578Z",
   "missions": [
     {
       "id": "session:9007b9ea-1eb6-4d24-8fe7-2c3a949eac88:none",
@@ -2357,15 +2357,15 @@
       "name": "none",
       "objective": "Session mission",
       "createdAt": "2026-04-21T08:05:57.739Z",
-      "updatedAt": "2026-04-21T11:39:09.598Z",
+      "updatedAt": "2026-04-22T08:00:38.578Z",
       "status": "done",
-      "workerCount": 9,
+      "workerCount": 13,
       "taskCounts": {
-        "total": 9,
+        "total": 13,
         "pending": 0,
         "blocked": 0,
         "inProgress": 0,
-        "completed": 9,
+        "completed": 13,
         "failed": 0
       },
       "agents": [
@@ -2458,64 +2458,80 @@
           "latestUpdate": "completed",
           "completedSummary": null,
           "updatedAt": "2026-04-21T09:39:25.226Z"
+        },
+        {
+          "name": "general-purpose:a40e637",
+          "role": "general-purpose",
+          "ownership": "a40e637b5ac0356a8",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-22T07:54:17.803Z"
+        },
+        {
+          "name": "general-purpose:adcf684",
+          "role": "general-purpose",
+          "ownership": "adcf684708494b341",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-22T07:54:49.075Z"
+        },
+        {
+          "name": "general-purpose:a4a7781",
+          "role": "general-purpose",
+          "ownership": "a4a778186b3c312c8",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-22T07:57:05.481Z"
+        },
+        {
+          "name": "general-purpose:a70a5d0",
+          "role": "general-purpose",
+          "ownership": "a70a5d0efcc81d263",
+          "status": "done",
+          "currentStep": null,
+          "latestUpdate": "completed",
+          "completedSummary": null,
+          "updatedAt": "2026-04-22T08:00:38.578Z"
         }
       ],
       "timeline": [
         {
-          "id": "session-start:afb9663c306b7ffb2:2026-04-21T09:36:45.991Z",
-          "at": "2026-04-21T09:36:45.991Z",
+          "id": "session-start:a4a778186b3c312c8:2026-04-22T07:55:43.614Z",
+          "at": "2026-04-22T07:55:43.614Z",
           "kind": "update",
-          "agent": "general-purpose:afb9663",
-          "detail": "started general-purpose:afb9663",
-          "sourceKey": "session-start:afb9663c306b7ffb2"
+          "agent": "general-purpose:a4a7781",
+          "detail": "started general-purpose:a4a7781",
+          "sourceKey": "session-start:a4a778186b3c312c8"
         },
         {
-          "id": "session-stop:afb9663c306b7ffb2:2026-04-21T09:37:29.377Z",
-          "at": "2026-04-21T09:37:29.377Z",
+          "id": "session-stop:a4a778186b3c312c8:2026-04-22T07:57:05.481Z",
+          "at": "2026-04-22T07:57:05.481Z",
           "kind": "completion",
-          "agent": "general-purpose:afb9663",
+          "agent": "general-purpose:a4a7781",
           "detail": "completed",
-          "sourceKey": "session-stop:afb9663c306b7ffb2"
+          "sourceKey": "session-stop:a4a778186b3c312c8"
         },
         {
-          "id": "session-start:a5387bf0397247d5c:2026-04-21T09:37:41.613Z",
-          "at": "2026-04-21T09:37:41.613Z",
+          "id": "session-start:a70a5d0efcc81d263:2026-04-22T07:57:26.976Z",
+          "at": "2026-04-22T07:57:26.976Z",
           "kind": "update",
-          "agent": "code-reviewer:a5387bf",
-          "detail": "started code-reviewer:a5387bf",
-          "sourceKey": "session-start:a5387bf0397247d5c"
+          "agent": "general-purpose:a70a5d0",
+          "detail": "started general-purpose:a70a5d0",
+          "sourceKey": "session-start:a70a5d0efcc81d263"
         },
         {
-          "id": "session-stop:a5387bf0397247d5c:2026-04-21T09:39:25.226Z",
-          "at": "2026-04-21T09:39:25.226Z",
+          "id": "session-stop:a70a5d0efcc81d263:2026-04-22T08:00:38.578Z",
+          "at": "2026-04-22T08:00:38.578Z",
           "kind": "completion",
-          "agent": "code-reviewer:a5387bf",
+          "agent": "general-purpose:a70a5d0",
           "detail": "completed",
-          "sourceKey": "session-stop:a5387bf0397247d5c"
-        },
-        {
-          "id": "session-stop:a93c9aa6de8251ecb:2026-04-21T09:43:18.886Z",
-          "at": "2026-04-21T09:43:18.886Z",
-          "kind": "completion",
-          "agent": "general-purpose:adfd244",
-          "detail": "completed",
-          "sourceKey": "session-stop:a93c9aa6de8251ecb"
-        },
-        {
-          "id": "session-stop:a34767c74aa84d9d8:2026-04-21T11:30:52.701Z",
-          "at": "2026-04-21T11:30:52.701Z",
-          "kind": "completion",
-          "agent": "general-purpose:adfd244",
-          "detail": "completed",
-          "sourceKey": "session-stop:a34767c74aa84d9d8"
-        },
-        {
-          "id": "session-stop:aecf873500f38d936:2026-04-21T11:39:09.598Z",
-          "at": "2026-04-21T11:39:09.598Z",
-          "kind": "completion",
-          "agent": "general-purpose:adfd244",
-          "detail": "completed",
-          "sourceKey": "session-stop:aecf873500f38d936"
+          "sourceKey": "session-stop:a70a5d0efcc81d263"
         }
       ]
     }
diff --git a/Code/.omc/state/subagent-tracking.json b/Code/.omc/state/subagent-tracking.json
index bf72009..ed732a5 100644
--- a/Code/.omc/state/subagent-tracking.json
+++ b/Code/.omc/state/subagent-tracking.json
@@ -1535,10 +1535,46 @@
       "status": "completed",
       "completed_at": "2026-04-21T09:39:25.224Z",
       "duration_ms": 103611
+    },
+    {
+      "agent_id": "a40e637b5ac0356a8",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-22T07:53:22.787Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-22T07:54:17.801Z",
+      "duration_ms": 55014
+    },
+    {
+      "agent_id": "adcf684708494b341",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-22T07:53:22.841Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-22T07:54:49.074Z",
+      "duration_ms": 86233
+    },
+    {
+      "agent_id": "a4a778186b3c312c8",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-22T07:55:43.614Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-22T07:57:05.479Z",
+      "duration_ms": 81865
+    },
+    {
+      "agent_id": "a70a5d0efcc81d263",
+      "agent_type": "general-purpose",
+      "started_at": "2026-04-22T07:57:26.976Z",
+      "parent_mode": "none",
+      "status": "completed",
+      "completed_at": "2026-04-22T08:00:38.576Z",
+      "duration_ms": 191600
     }
   ],
-  "total_spawned": 144,
-  "total_completed": 166,
+  "total_spawned": 147,
+  "total_completed": 170,
   "total_failed": 0,
-  "last_updated": "2026-04-21T13:08:04.028Z"
+  "last_updated": "2026-04-22T08:00:38.695Z"
 }
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Client/src/api/http.js b/Code/WCS/WIDESEAWCS_Client/src/api/http.js
index 0d7cc1f..57f0d9f 100644
--- a/Code/WCS/WIDESEAWCS_Client/src/api/http.js
+++ b/Code/WCS/WIDESEAWCS_Client/src/api/http.js
@@ -12,7 +12,7 @@
 let loadingInstance;
 let loadingStatus = false;
 if (process.env.NODE_ENV == 'development') {
-    axios.defaults.baseURL = window.webConfig.webApiBaseUrl;
+    axios.defaults.baseURL = window.webConfig.webApiProduction;
 }
 else if (process.env.NODE_ENV == 'debug') {
     axios.defaults.baseURL = window.webConfig.webApiBaseUrl;
diff --git a/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotState.jsx b/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotState.jsx
index 0dfb0c9..3f7431e 100644
--- a/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotState.jsx
+++ b/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotState.jsx
@@ -12,42 +12,52 @@
   tableAction: "",
   buttons: { view: [], box: [], detail: [] },
   methods: {
+    // 鏂规硶鐩殑锛氶〉闈㈠垵濮嬪寲鏃舵墽琛岃嚜瀹氫箟閫昏緫銆�
+    // 鍙傛暟锛氭棤銆�
+    // 杩斿洖鍊硷細鏃犮��
     onInit() {},
 
+    // 鏂规硶鐩殑锛氶〉闈㈠垵濮嬪寲瀹屾垚鍚庢墽琛岃嚜瀹氫箟閫昏緫銆�
+    // 鍙傛暟锛氭棤銆�
+    // 杩斿洖鍊硷細鏃犮��
     onInited() {},
 
+    // 鏂规硶鐩殑锛氭煡璇㈠墠澶勭悊鏌ヨ鏉′欢銆�
+    // 鍙傛暟锛歱aram 鏌ヨ鍙傛暟瀵硅薄銆�
+    // 杩斿洖鍊硷細true 缁х画鏌ヨ锛宖alse 缁堟鏌ヨ銆�
     searchBefore(param) {
       return true;
     },
 
+    // 鏂规硶鐩殑锛氭煡璇㈠悗澶勭悊杩斿洖缁撴灉銆�
+    // 鍙傛暟锛歳esult 鍚庣杩斿洖鏁版嵁銆�
+    // 杩斿洖鍊硷細true 缁х画娓叉煋锛宖alse 缁堟鍚庣画澶勭悊銆�
     searchAfter(result) {
       return true;
     },
 
+    // 鏂规硶鐩殑锛氭柊澧炲墠鏍¢獙鎴栬ˉ鍏呮彁浜ゅ瓧娈点��
+    // 鍙傛暟锛歠ormData 琛ㄥ崟鎻愪氦瀵硅薄銆�
+    // 杩斿洖鍊硷細true 缁х画鎻愪氦锛宖alse 缁堟鎻愪氦銆�
     addBefore(formData) {
       return true;
     },
 
-    addAfter(result) {
-      return true;
-    },
-
+    // 鏂规硶鐩殑锛氱紪杈戝墠鏍¢獙鎴栬ˉ鍏呮彁浜ゅ瓧娈点��
+    // 鍙傛暟锛歠ormData 琛ㄥ崟鎻愪氦瀵硅薄銆�
+    // 杩斿洖鍊硷細true 缁х画鎻愪氦锛宖alse 缁堟鎻愪氦銆�
     updateBefore(formData) {
       return true;
     },
 
-    updateAfter(result) {
-      return true;
-    },
+    // 鏂规硶鐩殑锛氱偣鍑昏鏃舵墿灞曞鐞嗐��
+    // 鍙傛暟锛歳ow 琛屾暟鎹紝column 鍒楅厤缃紝event 鍘熷浜嬩欢銆�
+    // 杩斿洖鍊硷細鏃犮��
+    rowClick({ row, column, event }) {},
 
-    deleteBefore(ids) {
-      return true;
-    },
-
-    deleteAfter(ids) {
-      return true;
-    },
-
+    // 鏂规硶鐩殑锛氱紪杈戝脊绐楁墦寮�鍚庢墽琛屾墿灞曢�昏緫銆�
+    // 鍙傛暟锛歳ow 褰撳墠琛屾暟鎹��
+    // 杩斿洖鍊硷細鏃犮��
     modelOpenAfter(row) {},
   },
 };
diff --git a/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue b/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue
index 3547526..c90456f 100644
--- a/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue
+++ b/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/robotState.vue
@@ -1,15 +1,7 @@
 <template>
-  <view-grid
-    ref="grid"
-    :columns="columns"
-    :detail="detail"
-    :editFormFields="editFormFields"
-    :editFormOptions="editFormOptions"
-    :searchFormFields="searchFormFields"
-    :searchFormOptions="searchFormOptions"
-    :table="table"
-    :extend="extend"
-  >
+  <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+    :table="table" :extend="extend">
   </view-grid>
 </template>
 
@@ -150,24 +142,30 @@
     const columns = ref([
       { field: "ipAddress", title: "IP鍦板潃", type: "string", width: 140, align: "left" },
       { field: "version", title: "鐗堟湰", type: "int", width: 80, align: "left" },
-      { field: "robotRunMode", title: "杩愯妯″紡", type: "int", width: 100, bind: { key: "robotRunMode", data: [{ key: 1, value: "鎵嬪姩妯″紡" },{ key: 2, value: "鑷姩妯″紡" }] }, align: "center" },
-      { field: "robotControlMode", title: "鎺у埗妯″紡", type: "int", width: 100, bind: { key: "robotControlMode", data: [{ key: 1, value: "瀹㈡埛绔帶鍒�" },{ key: 2, value: "鍏朵粬" }] }, align: "center" },
-      { field: "robotArmObject", title: "鎵嬭噦鐘舵��", type: "int", width: 90, bind: { key: "robotArmObject", data: [{ key: 0, value: "绌洪棽"}, { key: 1, value: "鏈夌墿鏂�" }] }, align: "center" },
-      { field: "homed", title: "鍥為浂鐘舵��", type: "string", width: 100, align: "center" },
-      { field: "currentAction", title: "褰撳墠鍔ㄤ綔", type: "string", width: 100, align: "center" },
-      { field: "operStatus", title: "杩愯鐘舵��", type: "string", width: 100, align: "center" },
+      { field: "robotRunMode", title: "杩愯妯″紡", type: "int", width: 100, bind: { key: "robotRunMode", data: [{ key: 1, value: "鎵嬪姩妯″紡" }, { key: 2, value: "鑷姩妯″紡" }] }, align: "center" },
+      { field: "robotControlMode", title: "鎺у埗妯″紡", type: "int", width: 100, bind: { key: "robotControlMode", data: [{ key: 1, value: "瀹㈡埛绔帶鍒�" }, { key: 2, value: "鍏朵粬" }] }, align: "center" },
+      { field: "robotArmObject", title: "鎵嬭噦鐘舵��", type: "int", width: 90, bind: { key: "robotArmObject", data: [{ key: 0, value: "绌洪棽" }, { key: 1, value: "鏈夌墿鏂�" }] }, align: "center" },
+      { field: "homed", title: "鍥為浂鐘舵��", type: "string", width: 100, align: "center", bind: { key: "homed", data: [{ key: "Homed", value: "鍥為浂" }, { key: "Homing", value: "鍥為浂涓�" }] }, },
+      { field: "currentAction", title: "褰撳墠鍔ㄤ綔", type: "string", width: 100, align: "center", bind: { key: "currentAction", data: [{ key: "Picking", value: "姝e湪鍙栬揣" }, { key: "Putting", value: "姝e湪鏀捐揣" }, { key: "AllPickFinished", value: "鍏ㄩ儴鍙栬揣瀹屾垚" }, { key: "AllPutFinished", value: "鍏ㄩ儴鏀捐揣瀹屾垚" }, { key: "PickFinished", value: "鍙栬揣瀹屾垚" }, { key: "PutFinished", value: "鏀捐揣瀹屾垚" }] }, },
+      { field: "operStatus", title: "杩愯鐘舵��", type: "string", width: 100, align: "center", hidden: true },
       { field: "robotTaskTotalNum", title: "浠诲姟鎬绘暟", type: "int", width: 90, align: "center" },
-      { field: "isSplitPallet", title: "鎷嗙洏", type: "byte", width: 60, align: "center" },
-      { field: "isGroupPallet", title: "缁勭洏", type: "byte", width: 60, align: "center" },
-      { field: "isInFakeBatteryMode", title: "鍋囩數鑺�", type: "byte", width: 70, align: "center" },
+      { field: "isSplitPallet", title: "鎷嗙洏", type: "byte", width: 60, align: "center", bind: { key: "isTrue", data: [] }, },
+      { field: "isGroupPallet", title: "缁勭洏", type: "byte", width: 60, align: "center" , bind: { key: "isTrue", data: [] }, },
+      { field: "isInFakeBatteryMode", title: "鍋囩數鑺�", type: "byte", width: 70, align: "center" , bind: { key: "isTrue", data: [] }, },
       { field: "currentBatchIndex", title: "鎵规", type: "int", width: 60, align: "center" },
       { field: "changePalletPhase", title: "鎹㈢洏闃舵", type: "int", width: 80, align: "center" },
-      { field: "isScanNG", title: "鎵爜NG", type: "byte", width: 80, align: "center" },
-      { field: "batteryArrived", title: "鐢佃姱鍒颁綅", type: "byte", width: 80, align: "center" },
-      { field: "isEventSubscribed", title: "宸茶闃�", type: "byte", width: 70, align: "center" },
+      { field: "isScanNG", title: "鎵爜NG", type: "byte", width: 80, align: "center" , bind: { key: "isTrue", data: [] }, },
+      { field: "batteryArrived", title: "鐢佃姱鍒颁綅", type: "byte", width: 80, align: "center" , bind: { key: "isTrue", data: [] }, },
+      { field: "isEventSubscribed", title: "宸茶闃�", type: "byte", width: 70, align: "center", bind: { key: "isTrue", data: [] },  },
     ]);
 
-    const detail = ref({});
+    const detail = ref({
+      cnName: "",
+      table: "",
+      columns: [],
+      sortName: "",
+      key: "",
+    });
 
     return {
       table,
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
index 7da55c0..6696d46 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -218,5 +218,13 @@
         /// <param name="taskNum">瑕佽幏鍙栫殑浠诲姟鐨勫敮涓�鏍囪瘑绗︺��</param>
         /// <returns>琛ㄧず鎸囧畾缂栧彿浠诲姟鐨�<see cref="Dt_Task"/>瀵硅薄锛屽鏋滀笉瀛樺湪璇ヤ换鍔″垯杩斿洖<c>null</c>銆�</returns>
         public Dt_Task QueryByTaskNum(int taskNum);
+
+        /// <summary>
+        /// 鏌ヨ鏄惁鏈夋鍦ㄦ墽琛岀殑鍘诲線鎸囧畾 TargetAddress 鐨勮緭閫佺嚎浠诲姟
+        /// </summary>
+        /// <param name="roadway">宸烽亾鍙�</param>
+        /// <param name="targetAddress">鐩爣鍦板潃</param>
+        /// <returns>瀛樺湪杩斿洖 true</returns>
+        bool HasExecutingTaskToTarget(string roadway, string targetAddress);
     }
 }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
index 6468d80..acebc6b 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -4,15 +4,15 @@
     "MinimumLevel": {
       "Default": "Information",
       "Override": {
-        "Microsoft": "Information",
-        "Microsoft.AspNetCore": "Information",
-        "Microsoft.AspNetCore.Routing": "Information",
-        "Microsoft.AspNetCore.Mvc": "Information",
-        "Microsoft.AspNetCore.Mvc.Infrastructure": "Information",
-        "Microsoft.AspNetCore.Mvc.Filters": "Information",
-        "Microsoft.AspNetCore.Mvc.ModelBinding": "Information",
-        "Microsoft.EntityFrameworkCore": "Information",
-        "Quartz": "Debug"
+        "Microsoft": "Warning",
+        "Microsoft.AspNetCore": "Warning",
+        "Microsoft.AspNetCore.Routing": "Warning",
+        "Microsoft.AspNetCore.Mvc": "Warning",
+        "Microsoft.AspNetCore.Mvc.Infrastructure": "Warning",
+        "Microsoft.AspNetCore.Mvc.Filters": "Warning",
+        "Microsoft.AspNetCore.Mvc.ModelBinding": "Warning",
+        "Microsoft.EntityFrameworkCore": "Warning",
+        "Quartz": "Warning"
       }
     }
   },
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
index dbe7256..2db6032 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
@@ -83,6 +83,7 @@
         /// <returns>鎺ㄨ繘缁撴灉銆�</returns>
         public WebResponseContent MoveToNextStatus([NotNull] Dt_Task task)
         {
+            WebResponseContent content = new WebResponseContent();
             if (task.TaskStatus >= (int)TaskOutStatusEnum.OutFinish)
                 return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
 
@@ -92,12 +93,13 @@
 
             if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
             {
+                return WebResponseContent.Instance.OK();
                 return GetWMSOutboundTrayTask(task);
             }
 
             if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
             {
-                return _robotTaskService.GetWMSRobotTask(task);
+                 _robotTaskService.GetWMSRobotTask(task);
                 //if (!content.Status)
                 //{
                 //    return content;
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs
index 3f74943..321df15 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs
@@ -95,7 +95,7 @@
                 return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈虹Щ搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Message}銆�");
             }
 
-            return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈虹Щ搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
+            return content.OK($"閫氱煡WMS绯荤粺鍫嗗灈鏈虹Щ搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
         }
 
         /// <summary>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs
index 9eb512b..a633f79 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs
@@ -34,6 +34,21 @@
     }
 
     /// <summary>
+    /// 鏌ヨ鏄惁鏈夋鍦ㄦ墽琛岀殑鍘诲線鎸囧畾 TargetAddress 鐨勮緭閫佺嚎浠诲姟
+    /// </summary>
+    /// <param name="roadway">宸烽亾鍙�</param>
+    /// <param name="targetAddress">鐩爣鍦板潃</param>
+    /// <returns>瀛樺湪杩斿洖 true</returns>
+    public bool HasExecutingTaskToTarget(string roadway, string targetAddress)
+    {
+        return BaseDal.QueryFirst(x =>
+            x.Roadway == roadway &&
+            x.TargetAddress == targetAddress &&
+            x.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting,
+            TaskOrderBy) != null;
+    }
+
+    /// <summary>
     /// 鏍规嵁浠诲姟鍙枫�佸綋鍓嶅湴鍧�鏌ヨ杈撻�佺嚎瀹屾垚鐨勪换鍔�
     /// </summary>
     /// <param name="taskNum">浠诲姟鍙�</param>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
index 9381bfd..ac18766 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/CommonConveyorLineNewJob.cs
@@ -275,7 +275,7 @@
                                     ProcessTaskState(conveyorLine, command, task, childDeviceCode);
                                     return Task.CompletedTask;
                                 }
-                                else if (command.TaskNo == 1 && !command.Barcode.IsNullOrEmpty() && childDeviceCode == "11068")
+                                else if (!command.Barcode.IsNullOrEmpty() && childDeviceCode == "11068")
                                 {
                                     if (_robotTaskService.Db.Queryable<Dt_RobotTask>().Any(x => x.RobotTargetAddressPalletCode == command.Barcode))
                                     {
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs
index 62ea8ee..90a5b70 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs
@@ -112,12 +112,12 @@
             // 绠�鍗曞懡浠ゅ寘鎷細homing銆乭omed銆乺unning銆乸ausing銆乺unmode銆乧ontrolmode 绛�
             if (await _simpleCommandHandler.HandleAsync(messageLower, state))
             {
-                if (messageLower != "batteryarrived")
-                {
-                    // 澶勭悊鎴愬姛鍚庯紝灏嗗師娑堟伅鍥炲啓鍒板鎴风锛堜繚鎸佸師鏈夎涓猴級
-                    await _socketClientGateway.SendMessageAsync(client, message);
-                    QuartzLogHelper.LogInfo(_logger, $"鍙戦�佹秷鎭細銆恵message}銆�", state.RobotCrane?.DeviceName);
-                }
+                //if (messageLower != "batteryarrived")
+                //{
+                // 澶勭悊鎴愬姛鍚庯紝灏嗗師娑堟伅鍥炲啓鍒板鎴风锛堜繚鎸佸師鏈夎涓猴級
+                //await _socketClientGateway.SendMessageAsync(client, message);
+                QuartzLogHelper.LogInfo(_logger, $"鎺ユ敹鍒版秷鎭秷鎭�恵message}銆戯紝绾﹀畾涓嶈繑鍥炲彂閫佹秷鎭細銆恵message}銆�", state.RobotCrane?.DeviceName);
+                //}
 
                 // 瀹夊叏鏇存柊鐘舵�佸埌鏁版嵁搴�
                 _stateManager.TryUpdateStateSafely(state.IPAddress, state);
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
index 9f8efa0..b0c1d9d 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
@@ -96,6 +96,8 @@
                 // 鏈哄櫒浜哄凡瀹屾垚鍥為浂
                 case "homed":
                     state.Homed = "Homed";
+
+                    await _socketClientGateway.SendToClientAsync(state.IPAddress, "Homed");
                     return true;
 
                 // 鏈哄櫒浜烘鍦ㄨ繍琛�
@@ -136,6 +138,8 @@
                 // 鏄惁鐢佃姱鍒颁綅
                 case "batteryarrivedno":
                     state.BatteryArrived = false;
+
+                    await _socketClientGateway.SendToClientAsync(state.IPAddress, "batteryarrivedno");
                     return true;
 
                 // ==================== 鍏ㄩ儴瀹屾垚鍛戒护 ====================
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
index 158d35c..c78fc4f 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
@@ -327,11 +327,12 @@
                 // 妫�鏌ョ數姹犳槸鍚﹀凡鍒颁綅
                 if (!stateForUpdate.BatteryArrived)
                 {
+                    QuartzLogHelper.LogError(_logger, $"HandlePutFinishedStateAsync锛氱數鑺湭鍒颁綅锛屼换鍔″彿: {task.RobotTaskNum}", stateForUpdate?.RobotCrane?.DeviceName ?? ipAddress);
                     return;
                 }
                 // 璇诲彇绾夸綋鐢佃姱鏉$爜
-                string trayBarcode1 = RobotBarcodeGenerator.GenerateTrayBarcode("DB40.990");
-                string trayBarcode2 = RobotBarcodeGenerator.GenerateTrayBarcode("DB40.1020");
+                string trayBarcode2 = RobotBarcodeGenerator.GenerateTrayBarcode("DB40.990");
+                string trayBarcode1 = RobotBarcodeGenerator.GenerateTrayBarcode("DB40.1020");
 
                 // 濡傛灉鏉$爜鐢熸垚鎴愬姛
                 if (!string.IsNullOrEmpty(trayBarcode1) && !string.IsNullOrEmpty(trayBarcode2))
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
index 96be485..87e03ab 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
@@ -216,6 +216,14 @@
                 return null;
             }
 
+            // 妫�鏌ユ槸鍚︽湁姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟鍘诲線鍚屼竴 TargetAddress
+            if (_taskService.HasExecutingTaskToTarget(outboundTask.Roadway, outboundTask.TargetAddress))
+            {
+                QuartzLogHelper.LogInfo(_logger, "TrySelectOutboundTask锛歍argetAddress: {TargetAddress} 宸叉湁姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟锛屼换鍔″彿: {TaskNum}",
+                    $"TrySelectOutboundTask锛歍argetAddress: {outboundTask.TargetAddress} 宸叉湁姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟", outboundTask.Roadway, outboundTask.TargetAddress, outboundTask.TaskNum);
+                return null;
+            }
+
             // 绔欏彴妫�鏌ラ�氳繃鍚庯紝璋冪敤 WMS 鍒ゆ柇鏄惁闇�瑕佺Щ搴�
             var taskAfterTransferCheck = _transferCheck(outboundTask.TaskNum) ?? outboundTask;
             var taskGroup = taskAfterTransferCheck.TaskType.GetTaskTypeGroup();
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/stock/groupPalle.jsx b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/groupPalle.jsx
index 3adeaf6..ae0d543 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/extension/stock/groupPalle.jsx
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/groupPalle.jsx
@@ -1,10 +1,11 @@
 //姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import RobotSelect from './extend/RobotSelect.vue';
 
 let extension = {
   components: {
     //鏌ヨ鐣岄潰鎵╁睍缁勪欢
     gridHeader: '',
-    gridBody: '',
+    gridBody: RobotSelect,
     gridFooter: '',
     //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
     modelHeader: '',
@@ -28,72 +29,28 @@
               <el-button
                 type="primary"
                 size="small"
-                onClick={($e) => { this.handleInbound(row); }}
-              >杩涚珯</el-button>
+                onClick={($e) => { this.handleBind(row); }}
+              >缁戝畾</el-button>
               <el-button
                 type="success"
                 size="small"
                 style="margin-left: 8px"
-                onClick={($e) => { this.handleOutbound(row); }}
-              >鍑虹珯</el-button>
+                onClick={($e) => { this.handleUnbind(row); }}
+              >瑙g粦</el-button>
             </div>
           );
         }
       });
     },
 
-    // 鎵樼洏杩涚珯鎿嶄綔
-    async handleInbound(row) {
-      try {
-        await this.$confirm(`纭鎵ц鎵樼洏杩涚珯鎿嶄綔锛焅n鎵樼洏缂栧彿锛�${row.palletCode}`, "杩涚珯纭", {
-          confirmButtonText: "纭",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        });
-
-        const result = await this.http.post("/api/StockInfo/inboundInContainer", {
-          palletCode: row.palletCode,
-          stockId: row.id
-        }, "姝e湪璋冪敤MES鎺ュ彛...");
-
-        if (result.status) {
-          this.$Message.success(result.message || "鎵樼洏杩涚珯鎴愬姛");
-          this.$refs.table.load();
-        } else {
-          this.$error(result.message || "鎵樼洏杩涚珯澶辫触");
-        }
-      } catch (error) {
-        if (error !== "cancel") {
-          this.$error(error.message || "缃戠粶閿欒锛岃绋嶅悗閲嶈瘯");
-        }
-      }
+    // 鎵樼洏缁勭洏鎿嶄綔
+    handleBind(row) {
+      this.$refs.gridBody.open('bind', row);
     },
-
-    // 鎵樼洏鍑虹珯鎿嶄綔
-    async handleOutbound(row) {
-      try {
-        await this.$confirm(`纭鎵ц鎵樼洏鍑虹珯鎿嶄綔锛焅n鎵樼洏缂栧彿锛�${row.palletCode}`, "鍑虹珯纭", {
-          confirmButtonText: "纭",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        });
-
-        const result = await this.http.post("/api/StockInfo/outboundInContainer", {
-          palletCode: row.palletCode,
-          stockId: row.id
-        }, "姝e湪璋冪敤MES鎺ュ彛...");
-
-        if (result.status) {
-          this.$Message.success(result.message || "鎵樼洏鍑虹珯鎴愬姛");
-          this.$refs.table.load();
-        } else {
-          this.$error(result.message || "鎵樼洏鍑虹珯澶辫触");
-        }
-      } catch (error) {
-        if (error !== "cancel") {
-          this.$error(error.message || "缃戠粶閿欒锛岃绋嶅悗閲嶈瘯");
-        }
-      }
+    
+    // 鎵樼洏鎷嗙洏鎿嶄綔
+    handleUnbind(row) {
+      this.$refs.gridBody.open('unbind', row);
     },
 
     onInited() {
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx
index 0204d4e..d76739f 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx
@@ -1,11 +1,10 @@
 //姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
-import RobotSelect from './extend/RobotSelect.vue';
 
 let extension = {
   components: {
     //鏌ヨ鐣岄潰鎵╁睍缁勪欢
     gridHeader: '',
-    gridBody: RobotSelect,
+    gridBody: '',
     gridFooter: '',
     //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
     modelHeader: "",
@@ -26,11 +25,7 @@
         render: (h, { row, column, index }) => {
           return (
             <div>
-              <el-button
-                type="primary"
-                size="small"
-                onClick={($e) => { this.handleBind(row); }}
-              >缁戝畾</el-button>
+              
               <el-button
                 type="primary"
                 size="small"
@@ -42,22 +37,12 @@
                 style="margin-left: 8px"
                 onClick={($e) => { this.handleOutbound(row); }}
               >鍑虹珯</el-button>
-              <el-button
-                type="success"
-                size="small"
-                style="margin-left: 8px"
-                onClick={($e) => { this.handleUnbind(row); }}
-              >瑙g粦</el-button>
             </div>
           );
         },
       });
     },
 
-    // 鎵樼洏缁勭洏鎿嶄綔
-    handleBind(row) {
-      this.$refs.gridBody.open('bind', row);
-    },
 
     // 鎵樼洏杩涚珯鎿嶄綔
     async handleInbound(row) {
@@ -129,10 +114,6 @@
       }
     },
 
-    // 鎵樼洏鎷嗙洏鎿嶄綔
-    handleUnbind(row) {
-      this.$refs.gridBody.open('unbind', row);
-    },
 
     onInited() {
       // 妗嗘灦鍒濆鍖栭厤缃悗
diff --git a/Code/WMS/WIDESEA_WMSClient/src/views/stock/groupPalle.vue b/Code/WMS/WIDESEA_WMSClient/src/views/stock/groupPalle.vue
index 17b5580..e2c7501 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/views/stock/groupPalle.vue
+++ b/Code/WMS/WIDESEA_WMSClient/src/views/stock/groupPalle.vue
@@ -123,6 +123,15 @@
         align: "left",
         bind: { key: "stockStatusEmun", data: [] },
       },
+      
+      {
+        field: "mesUploadStatus",
+        title: "MES鐘舵��",
+        type: "int",
+        width: 120,
+        align: "left",
+        bind: { key: "mesUploadStatusEnum", data: [] },
+      },
     //   {
     //     field: "locationCode",
     //     title: TEXT.locationCode,
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/Constants/OutboundTimeConstants.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/Constants/OutboundTimeConstants.cs
index 625e140..b1e0174 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/Constants/OutboundTimeConstants.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/Constants/OutboundTimeConstants.cs
@@ -27,9 +27,9 @@
     public static class OutboundTimeConstants
     {
         /// <summary>
-        /// GW_1棣栨斁鍏ュ簱鏃舵晥锛�16灏忔椂锛�
+        /// GW_1棣栨斁鍏ュ簱鏃舵晥锛�24灏忔椂锛�
         /// </summary>
-        public const int OUTBOUND_HOURS_GW1_FIRST = 16;
+        public const int OUTBOUND_HOURS_GW1_FIRST = 24;
 
         /// <summary>
         /// GW_1浜屾斁鍏ュ簱鏃舵晥锛�24灏忔椂锛�
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
index 4cbd519..f501dba 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
@@ -188,7 +188,7 @@
                             EquipmentCode = equipmentCode,
                             ResourceCode = resourceCode,
                             LocalTime = DateTime.Now,
-                            ContainerCode = taskDto.PalletCode
+                            ContainerCode = taskDto.PalletCode,
                         };
                         string requestJson = inboundRequest.ToJson();
                         var palletCode = taskDto.PalletCode;
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Tray.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Tray.cs
index 0a64c28..83d8cbc 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Tray.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Tray.cs
@@ -151,10 +151,10 @@
         {
             try
             {
-                var task = await BaseDal.QueryFirstAsync(s => s.PalletCode == taskDto.PalletCode);
-                if (task == null) return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟");
+                //var task = await BaseDal.QueryFirstAsync(s => s.PalletCode == taskDto.PalletCode);
+                //if (task == null) return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟");
 
-                var location = await _locationInfoService.GetLocationInfo(task.Roadway, task.SourceAddress);
+                var location = await _locationInfoService.GetLocationInfo(taskDto.Roadway, taskDto.SourceAddress);
                 if (location == null) return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑璐т綅");
 
                 var stockInfo = await _stockInfoService.GetStockInfoAsync(taskDto.PalletCode);
@@ -168,23 +168,22 @@
 
                     location.LocationStatus = LocationStatusEnum.Free.GetHashCode();
 
-                    task.TaskStatus = TaskOutStatusEnum.OutFinish.GetHashCode();
 
                     var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(location);
                     var updateStockResult = await _stockInfoService.UpdateStockAsync(stockInfo);
                     if (!updateLocationResult || !updateStockResult)
                         return WebResponseContent.Instance.Error("浠诲姟瀹屾垚澶辫触");
 
-                    var saveTaskHistoryResult = await SaveTaskHistoryAsync(task, "绌烘墭鐩樺嚭搴撳畬鎴�");
-                    if (!saveTaskHistoryResult.Status)
-                        return saveTaskHistoryResult;
+                    //var saveTaskHistoryResult = await SaveTaskHistoryAsync(task, "绌烘墭鐩樺嚭搴撳畬鎴�");
+                    //if (!saveTaskHistoryResult.Status)
+                    //    return saveTaskHistoryResult;
 
                     var saveStockHistoryResult = await SaveStockHistoryAsync(stockInfo, "绌烘墭鐩樺嚭搴撳畬鎴�");
                     if (!saveStockHistoryResult.Status)
                         return saveStockHistoryResult;
 
-                    var deleteResult = await BaseDal.DeleteDataAsync(task);
-                    if (!deleteResult) return WebResponseContent.Instance.Error("浠诲姟瀹屾垚澶辫触");
+                    //var deleteResult = await BaseDal.DeleteDataAsync(task);
+                    //if (!deleteResult) return WebResponseContent.Instance.Error("浠诲姟瀹屾垚澶辫触");
 
                     return WebResponseContent.Instance.OK("浠诲姟瀹屾垚");
                 });
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
index 38551e1..76114fd 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -34,7 +34,7 @@
   "MainDB": "DB_WIDESEA", //褰撳墠椤圭洰鐨勪富搴擄紝鎵�瀵瑰簲鐨勮繛鎺ュ瓧绗︿覆鐨凟nabled蹇呴』涓簍rue
   //杩炴帴瀛楃涓�
   //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
-  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_ShanMei;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+  "ConnectionString": "Data Source=192.168.60.30;Initial Catalog=WIDESEAWMS_ShanMei;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
   //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_ShanMei;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
   //"ConnectionString": "Data Source=10.30.4.92;Initial Catalog=WMS_TC;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
   //鏃MS鏁版嵁搴撹繛鎺�
diff --git a/Code/docs/superpowers/plans/2026-04-22-stacker-crane-executing-task-check.md b/Code/docs/superpowers/plans/2026-04-22-stacker-crane-executing-task-check.md
new file mode 100644
index 0000000..d20dd84
--- /dev/null
+++ b/Code/docs/superpowers/plans/2026-04-22-stacker-crane-executing-task-check.md
@@ -0,0 +1,145 @@
+# 鍑哄簱浠诲姟 TargetAddress 杈撻�佺嚎浠诲姟鍐茬獊妫�鏌� 瀹炴柦璁″垝
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** 鍦ㄥ嚭搴撲换鍔¢�夋嫨鏃讹紝妫�鏌ユ槸鍚︽湁姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟鍘诲線鍚屼竴 TargetAddress锛岄伩鍏嶅啿绐併��
+
+**Architecture:** 鍦� `ITaskService` 鏂板 `HasExecutingTaskToTarget` 鏂规硶锛屽湪 `TaskService` 涓疄鐜版暟鎹簱鏌ヨ锛屽湪 `StackerCraneTaskSelector.TrySelectOutboundTask` 涓皟鐢ㄣ��
+
+**Tech Stack:** C# / .NET 8锛孲qlSugar ORM锛孲erilog
+
+---
+
+## 娑夊強鏂囦欢
+
+- 淇敼: `WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs`
+- 淇敼: `WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs`
+- 淇敼: `WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs`
+
+---
+
+## Task 1: 鏂板 ITaskService 鎺ュ彛鏂规硶
+
+**Files:**
+- Modify: `WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs`
+
+- [ ] **Step 1: 鍦ㄦ帴鍙f湯灏撅紙`public Dt_Task QueryByTaskNum(int taskNum);` 涔嬪悗锛宍}` 涔嬪墠锛夋坊鍔犳柟娉曞0鏄�**
+
+```csharp
+/// <summary>
+/// 鏌ヨ鏄惁鏈夋鍦ㄦ墽琛岀殑鍘诲線鎸囧畾 TargetAddress 鐨勮緭閫佺嚎浠诲姟
+/// </summary>
+/// <param name="roadway">宸烽亾鍙�</param>
+/// <param name="targetAddress">鐩爣鍦板潃</param>
+/// <returns>瀛樺湪杩斿洖 true</returns>
+bool HasExecutingTaskToTarget(string roadway, string targetAddress);
+```
+
+- [ ] **Step 2: Commit**
+
+```bash
+git add WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
+git commit -m "feat(ITaskService): 鏂板 HasExecutingTaskToTarget 鎺ュ彛鏂规硶
+
+鏌ヨ鏄惁鏈夋鍦ㄦ墽琛岀殑鍘诲線鎸囧畾 TargetAddress 鐨勮緭閫佺嚎浠诲姟
+
+Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
+```
+
+---
+
+## Task 2: 瀹炵幇 TaskService 鏂规硶
+
+**Files:**
+- Modify: `WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs`
+
+- [ ] **Step 1: 鍦� `QueryExecutingConveyorLineTask` 鏂规硶涔嬪悗娣诲姞瀹炵幇**
+
+鍦� `TaskService.Query.cs` 鏂囦欢涓紝鎵惧埌 `QueryExecutingConveyorLineTask` 鏂规硶锛堢害 line 28-34锛夛紝鍦ㄥ叾涔嬪悗锛坄QueryCompletedConveyorLineTask` 涔嬪墠锛夋彃鍏ワ細
+
+```csharp
+/// <summary>
+/// 鏌ヨ鏄惁鏈夋鍦ㄦ墽琛岀殑鍘诲線鎸囧畾 TargetAddress 鐨勮緭閫佺嚎浠诲姟
+/// </summary>
+/// <param name="roadway">宸烽亾鍙�</param>
+/// <param name="targetAddress">鐩爣鍦板潃</param>
+/// <returns>瀛樺湪杩斿洖 true</returns>
+public bool HasExecutingTaskToTarget(string roadway, string targetAddress)
+{
+    return BaseDal.QueryFirst(x =>
+        x.Roadway == roadway &&
+        x.TargetAddress == targetAddress &&
+        x.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting,
+        TaskOrderBy) != null;
+}
+```
+
+- [ ] **Step 2: Commit**
+
+```bash
+git add WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs
+git commit -m "feat(TaskService): 瀹炵幇 HasExecutingTaskToTarget 鏂规硶
+
+鏌ヨ TaskStatus == Line_OutExecuting 涓� Roadway 鍜� TargetAddress 鍖归厤鐨勪换鍔�
+
+Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
+```
+
+---
+
+## Task 3: 鍦� TrySelectOutboundTask 涓皟鐢ㄦ柊鏂规硶
+
+**Files:**
+- Modify: `WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs`
+
+- [ ] **Step 1: 鍦� `TrySelectOutboundTask` 鏂规硶涓紝NextAddress 妫�鏌ラ�氳繃涔嬪悗銆乄MS 绉诲簱妫�鏌ヤ箣鍓嶆彃鍏�**
+
+褰撳墠浠g爜锛堢害 line 203-235锛夛細
+
+```csharp
+// 鍒ゆ柇 NextAddress 鍑哄簱绔欏彴鏄惁鍙敤
+if (!IsOutTaskStationAvailable(outboundTask))
+{
+    return null;
+}
+
+// 绔欏彴妫�鏌ラ�氳繃鍚庯紝璋冪敤 WMS 鍒ゆ柇鏄惁闇�瑕佺Щ搴�
+```
+
+鍦� `// 绔欏彴妫�鏌ラ�氳繃鍚巂 娉ㄩ噴涔嬪墠鎻掑叆锛�
+
+```csharp
+// 妫�鏌ユ槸鍚︽湁姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟鍘诲線鍚屼竴 TargetAddress
+if (_taskService.HasExecutingTaskToTarget(outboundTask.Roadway, outboundTask.TargetAddress))
+{
+    QuartzLogHelper.LogInfo(_logger, "TrySelectOutboundTask锛歍argetAddress: {TargetAddress} 宸叉湁姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟锛屼换鍔″彿: {TaskNum}",
+        $"TrySelectOutboundTask锛歍argetAddress: {outboundTask.TargetAddress} 宸叉湁姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟", outboundTask.Roadway, outboundTask.TargetAddress, outboundTask.TaskNum);
+    return null;
+}
+```
+
+- [ ] **Step 2: Commit**
+
+```bash
+git add WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
+git commit -m "feat(StackerCraneTaskSelector): 鍑哄簱浠诲姟閫夋嫨鏃舵鏌� TargetAddress 杈撻�佺嚎浠诲姟鍐茬獊
+
+绔欏彴鍙敤鍚庛�乄MS 绉诲簱妫�鏌ュ墠锛屾煡璇㈡槸鍚︽湁 Line_OutExecuting 鐘舵�佺殑浠诲姟鍘诲悓涓� TargetAddress
+
+Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
+```
+
+---
+
+## Task 4: 楠岃瘉鏋勫缓
+
+- [ ] **Step 1: 鎵ц鏋勫缓楠岃瘉**
+
+```bash
+cd D:/Git/ShanMeiXinNengYuan/Code
+dotnet build WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
+```
+
+棰勬湡锛�0 涓敊璇�
+
+- [ ] **Step 2: 濡傛湁閿欒锛屽垎鏋愬苟淇**
diff --git a/Code/docs/superpowers/specs/2026-04-22-stacker-crane-executing-task-check-design.md b/Code/docs/superpowers/specs/2026-04-22-stacker-crane-executing-task-check-design.md
new file mode 100644
index 0000000..d54d5ec
--- /dev/null
+++ b/Code/docs/superpowers/specs/2026-04-22-stacker-crane-executing-task-check-design.md
@@ -0,0 +1,55 @@
+# 鍑哄簱浠诲姟 TargetAddress 杈撻�佺嚎浠诲姟鍐茬獊妫�鏌� 璁捐鏂囨。
+
+## 1. 鑳屾櫙涓庣洰鏍�
+
+鍦� `TrySelectOutboundTask` 鏂规硶涓紝褰� TargetAddress 杈撻�佺嚎绔欏彴绌洪棽涓� NextAddress 鍑哄簱绔欏彴鍙敤鏃讹紝闇�瑕侀澶栨鏌ユ槸鍚﹀瓨鍦ㄦ鍦ㄦ墽琛岀殑杈撻�佺嚎浠诲姟鍘诲線鍚屼竴 TargetAddress銆傚鏋滃瓨鍦紝璇存槑 TargetAddress 鍗冲皢琚崰鐢紝涓嶅簲閫夋嫨璇ュ嚭搴撲换鍔°��
+
+## 2. 璁捐鏂规
+
+### 2.1 鏂板 ITaskService 鏂规硶
+
+鍦� `ITaskService` 鎺ュ彛涓柊澧炴柟娉曪細
+
+```csharp
+/// <summary>
+/// 鏌ヨ鏄惁鏈夋鍦ㄦ墽琛岀殑鍘诲線鎸囧畾 TargetAddress 鐨勮緭閫佺嚎浠诲姟
+/// </summary>
+/// <param name="roadway">宸烽亾鍙�</param>
+/// <param name="targetAddress">鐩爣鍦板潃</param>
+/// <returns>瀛樺湪杩斿洖 true</returns>
+bool HasExecutingTaskToTarget(string roadway, string targetAddress);
+```
+
+### 2.2 TaskService 瀹炵幇
+
+鏌ヨ鏉′欢锛�
+- `TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting`锛堢姸鎬� = 120锛�
+- `Roadway == roadway`
+- `TargetAddress == targetAddress`
+
+### 2.3 StackerCraneTaskSelector 璋冪敤
+
+鍦� `TrySelectOutboundTask` 鏂规硶涓紝涓や釜绔欏彴妫�鏌ラ�氳繃鍚庛�乄MS 绉诲簱妫�鏌ュ墠鎻掑叆锛�
+
+```csharp
+// 妫�鏌ユ槸鍚︽湁姝e湪鎵ц鐨勮緭閫佺嚎浠诲姟鍘诲線鍚屼竴 TargetAddress
+if (_taskService.HasExecutingTaskToTarget(outboundTask.Roadway, outboundTask.TargetAddress))
+{
+    return null;
+}
+```
+
+### 2.4 鏇存柊鍚庣殑妫�鏌ラ『搴�
+
+```
+1. TargetAddress 杈撻�佺嚎绔欏彴绌洪棽锛圥LC 璇诲彇锛�
+2. NextAddress 鍑哄簱绔欏彴鍙敤锛圥LC 璇诲彇锛�
+3. 鏃犳鍦ㄦ墽琛岀殑杈撻�佺嚎浠诲姟鍘诲悓涓� TargetAddress锛堟暟鎹簱鏌ヨ锛�  鈫� 鏂板
+4. WMS 绉诲簱妫�鏌ワ紙HTTP 璋冪敤锛�
+```
+
+## 3. 娑夊強鏂囦欢
+
+- 淇敼: `WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs`锛堟柊澧炴帴鍙f柟娉曪級
+- 淇敼: `WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService/TaskService.Query.cs`锛堟柊澧炲疄鐜帮級
+- 淇敼: `WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs`锛堟柊澧炶皟鐢ㄧ偣锛�

--
Gitblit v1.9.3