From 5ac33ef565ff0730aede7f39a0459d53c214cc18 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期三, 29 四月 2026 14:07:11 +0800
Subject: [PATCH] docs: 添加 OutboundTaskFlowService TODO 实现计划

---
 Code/docs/superpowers/plans/2026-04-29-outbound-task-flow-todo-implementation.md |  170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 170 insertions(+), 0 deletions(-)

diff --git a/Code/docs/superpowers/plans/2026-04-29-outbound-task-flow-todo-implementation.md b/Code/docs/superpowers/plans/2026-04-29-outbound-task-flow-todo-implementation.md
new file mode 100644
index 0000000..d3bf360
--- /dev/null
+++ b/Code/docs/superpowers/plans/2026-04-29-outbound-task-flow-todo-implementation.md
@@ -0,0 +1,170 @@
+# OutboundTaskFlowService.MoveToNextStatus TODO 瀹炵幇璁″垝
+
+> **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:** 琛ュ叏 `OutboundTaskFlowService.MoveToNextStatus` 鏂规硶涓殑 TODO锛屽疄鐜板湪鍑哄簱浠诲姟鍒拌揪 `Line_OutFinish` 鐘舵�佹椂妫�鏌ュ鍚戠嚎浣撴墭鐩樺彿锛屾湁鎵樼洏鍙峰垯鏈湴鍒涘缓鏈烘鎵嬩换鍔★紝鏃犳墭鐩樺彿鍒欎粠 WMS 鑾峰彇浠诲姟銆�
+
+**Architecture:** 鍦� `RobotTaskService` 涓柊澧� `CheckSourceLineAndCreateRobotTask` 鏂规硶锛屽鐢ㄥ凡鏈夌殑 `BuildRobotTaskStock` 鑾峰彇婧愮嚎浣撶紪鍙凤紝閫氳繃璁惧閫氫俊璇诲彇绾夸綋鎵樼洏鍙凤紝鏍规嵁缁撴灉鍐冲畾璋冪敤 `CreateLocalRobotTask` 鎴� `GetWMSOutboundTrayTask`銆�
+
+**Tech Stack:** C# / .NET 6, ASP.NET Core, SqlSugar ORM
+
+---
+
+## 娑夊強鏂囦欢
+
+| 鏂囦欢 | 鏀瑰姩 |
+|------|------|
+| `WIDESEAWCS_TaskInfoService/RobotTaskService.cs` | 鏂板 `CheckSourceLineAndCreateRobotTask` 鏂规硶 |
+| `WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs` | 鏇挎崲 TODO 浠g爜娈典负濮旀墭璋冪敤 |
+
+---
+
+## Task 1: 鍦� RobotTaskService 鏂板 CheckSourceLineAndCreateRobotTask 鏂规硶
+
+**Files:**
+- Modify: `WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs:241`锛堝湪 `CreateLocalRobotTask` 鏂规硶涔嬪悗锛�
+
+- [ ] **Step 1: 鍦� `CreateLocalRobotTask` 鏂规硶鍚庢坊鍔犳柊鏂规硶**
+
+鍦� `RobotTaskService.cs` 绗� 240 琛岋紙`CreateLocalRobotTask` 鏂规硶缁撴潫鍚庣殑浣嶇疆锛夋坊鍔犱互涓嬫柟娉曪細
+
+```csharp
+/// <summary>
+/// 妫�鏌ユ簮绾夸綋鏄惁鏈夋墭鐩樺彿锛屽苟鏍规嵁缁撴灉鍒涘缓鏈烘鎵嬩换鍔°��
+/// </summary>
+/// <param name="task">鍑哄簱浠诲姟瀹炰綋</param>
+/// <returns>
+/// 鏈夋墭鐩樺彿鏃惰繑鍥� CreateLocalRobotTask 缁撴灉锛�
+/// 鏃犳墭鐩樺彿鏃惰繑鍥� GetWMSOutboundTrayTask 缁撴灉銆�
+/// </returns>
+public WebResponseContent CheckSourceLineAndCreateRobotTask(Dt_Task task)
+{
+    // 1. 鑾峰彇婧愮嚎浣撶紪鍙凤紙澶嶇敤宸叉湁閫昏緫锛�
+    string configKey = ResolveRobotTaskConfigKey(task.TargetAddress);
+    StockDTO stock = BuildRobotTaskStock(task, configKey);
+    string sourceLineNo = stock.SourceLineNo;
+
+    if (string.IsNullOrWhiteSpace(sourceLineNo))
+    {
+        return GetWMSOutboundTrayTask(task);
+    }
+
+    // 2. 閫氳繃璁惧閫氫俊璇诲彇绾夸綋鎵樼洏鍙�
+    string? palletCode = ReadLineBarcode(sourceLineNo);
+
+    if (!string.IsNullOrWhiteSpace(palletCode))
+    {
+        // 鏈夋墭鐩樺彿锛屾湰鍦板垱寤烘満姊版墜浠诲姟
+        return CreateLocalRobotTask(task);
+    }
+
+    // 鏃犳墭鐩樺彿锛屼粠 WMS 鑾峰彇浠诲姟
+    return GetWMSOutboundTrayTask(task);
+}
+
+/// <summary>
+/// 璇诲彇鎸囧畾绾夸綋鐨勬墭鐩樺彿銆�
+/// </summary>
+/// <param name="sourceLineNo">婧愮嚎浣撶紪鍙�</param>
+/// <returns>鎵樼洏鍙凤紝濡傛湁寮傚父杩斿洖 null</returns>
+private string? ReadLineBarcode(string sourceLineNo)
+{
+    try
+    {
+        IDevice? device = Storage.Devices.FirstOrDefault(x =>
+            x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceLineNo));
+
+        if (device == null)
+            return null;
+
+        CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+        return conveyorLine.GetValue<ConveyorLineDBNameNew, string>(
+            ConveyorLineDBNameNew.Barcode, sourceLineNo);
+    }
+    catch (Exception ex)
+    {
+        _logger.Error(ex, $"璇诲彇绾夸綋[{sourceLineNo}]鎵樼洏鍙峰紓甯�");
+        return null;
+    }
+}
+```
+
+- [ ] **Step 2: 楠岃瘉缂栬瘧**
+
+Run: `dotnet build WIDESEAWCS_Server/WIDESEAWCS_Server.sln --no-restore`
+Expected: BUILD SUCCEEDED锛堟棤缂栬瘧閿欒锛�
+
+- [ ] **Step 3: 鎻愪氦**
+
+```bash
+git add WIDESEAWCS_TaskInfoService/RobotTaskService.cs
+git commit -m "feat(鏈烘鎵嬩换鍔�): 鏂板CheckSourceLineAndCreateRobotTask鏂规硶鏀寔妫�鏌ョ嚎浣撴墭鐩樺彿鍐崇瓥
+
+- 鏂板CheckSourceLineAndCreateRobotTask鏂规硶锛屾牴鎹簮绾夸綋鎵樼洏鍙峰喅瀹氬垱寤烘満姊版墜浠诲姟鏂瑰紡
+- 鏂板ReadLineBarcode绉佹湁鏂规硶锛岃鍙栨寚瀹氱嚎浣撶殑鎵樼洏鍙�
+- 鏈夋墭鐩樺彿鏃惰皟鐢–reateLocalRobotTask锛屾棤鎵樼洏鍙锋椂璋冪敤GetWMSOutboundTrayTask
+- 寮傚父鏃堕檷绾т负浠嶹MS鑾峰彇浠诲姟"
+```
+
+---
+
+## Task 2: 淇敼 OutboundTaskFlowService.MoveToNextStatus 璋冪敤鏂版柟娉�
+
+**Files:**
+- Modify: `WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs:107-114`
+
+- [ ] **Step 1: 鏇挎崲 TODO 浠g爜娈�**
+
+灏� `OutboundTaskFlowService.cs` 绗� 107-114 琛岋細
+
+```csharp
+if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
+{
+    return WebResponseContent.Instance.OK();
+
+    // Todo:鑾峰彇瀵瑰悜绾夸綋鏄惁鏈夋墭鐩樺彿锛屽鏋滄湁鎵樼洏鍙风洿鎺ョ敓鎴愭満姊版墜浠诲姟
+
+    return GetWMSOutboundTrayTask(task);
+}
+```
+
+鏇挎崲涓猴細
+
+```csharp
+if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
+{
+    // 鑾峰彇瀵瑰悜绾夸綋鏄惁鏈夋墭鐩樺彿锛屽鏋滄湁鎵樼洏鍙风洿鎺ョ敓鎴愭満姊版墜浠诲姟
+    return _robotTaskService.CheckSourceLineAndCreateRobotTask(task);
+}
+```
+
+- [ ] **Step 2: 楠岃瘉缂栬瘧**
+
+Run: `dotnet build WIDESEAWCS_Server/WIDESEAWCS_Server.sln --no-restore`
+Expected: BUILD SUCCEEDED锛堟棤缂栬瘧閿欒锛�
+
+- [ ] **Step 3: 鎻愪氦**
+
+```bash
+git add WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
+git commit -m "feat(鍑哄簱浠诲姟): MoveToNextStatus璋冪敤CheckSourceLineAndCreateRobotTask鍐崇瓥鏈烘鎵嬩换鍔″垱寤烘柟寮�
+
+- 鏇挎崲TODO浠g爜娈典负_robotTaskService.CheckSourceLineAndCreateRobotTask璋冪敤
+- 鏈夋墭鐩樺彿鏃舵湰鍦板垱寤烘満姊版墜浠诲姟锛屾棤鎵樼洏鍙锋椂浠嶹MS鑾峰彇"
+```
+
+---
+
+## 楠岃瘉瑕佺偣
+
+1. 褰撹緭閫佺嚎鏈夋枡鏃讹紙瀵瑰悜绾夸綋 Barcode 鏈夊�硷級锛屾満姊版墜浠诲姟鐩存帴鏈湴鍒涘缓锛屼笉璋冪敤 WMS 鎺ュ彛
+2. 褰撹緭閫佺嚎鏃犳枡鏃讹紙瀵瑰悜绾夸綋 Barcode 涓虹┖锛夛紝闄嶇骇璋冪敤 WMS 鑾峰彇绌烘墭鐩樹换鍔�
+3. 寮傚父鍦烘櫙涓嶉樆濉炰富娴佺▼锛岄檷绾у埌 WMS 鑾峰彇
+
+---
+
+## 娉ㄦ剰浜嬮」
+
+- `ReadLineBarcode` 鏂规硶澶嶇敤浜� `BuildRobotTaskStock` 涓鍙� Barcode 鐨勮澶囨煡璇㈤�昏緫锛堣 `RobotTaskService.cs:365-374`锛�
+- 寮傚父澶勭悊杩斿洖 null锛岃Е鍙戦檷绾ч�昏緫璋冪敤 `GetWMSOutboundTrayTask`
+- 璁捐鏂囨。浣嶇疆锛歚docs/superpowers/specs/2026-04-29-outbound-task-flow-todo-design.md`

--
Gitblit v1.9.3