From 2f7c7a0621ee2e84c47ccd054889a71e8ce4fdd0 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期六, 18 四月 2026 22:08:14 +0800
Subject: [PATCH] feat(机械手任务): 实现换盘任务多阶段处理逻辑

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs |  100 ++++++++++++++++++++++++++++++++-----------------
 1 files changed, 65 insertions(+), 35 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs
index 9eb7830..e365ffb 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs
@@ -145,20 +145,27 @@
                 // 浠庢暟鎹簱閲嶆柊鏌ヨ褰撳墠浠诲姟锛堢‘淇濊幏鍙栨渶鏂扮姸鎬侊級
                 var task = await _robotTaskService.Repository.QueryFirstAsync(x => x.RobotTaskId == state.CurrentTask.RobotTaskId);
 
-                // 鏍规嵁鍛戒护鍓嶇紑鍒嗗彂澶勭悊
-                if (cmd.StartsWith("pickfinished"))
+                if (task != null)
                 {
-                    // 澶勭悊鍙栬揣瀹屾垚
-                    await HandlePickFinishedAsync(state, positions, task);
-                }
-                else if (cmd.StartsWith("putfinished"))
-                {
-                    // 澶勭悊鏀捐揣瀹屾垚
-                    await HandlePutFinishedAsync(state, positions, task);
-                }
+                    // 鏍规嵁鍛戒护鍓嶇紑鍒嗗彂澶勭悊
+                    if (cmd.StartsWith("pickfinished"))
+                    {
+                        // 澶勭悊鍙栬揣瀹屾垚
+                        await HandlePickFinishedAsync(state, positions, task);
+                    }
+                    else if (cmd.StartsWith("putfinished"))
+                    {
+                        // 澶勭悊鏀捐揣瀹屾垚
+                        await HandlePutFinishedAsync(state, positions, task);
+                    }
 
-                // 鍥炲啓鍘熸秷鎭埌瀹㈡埛绔紙淇濇寔鍘熸湁琛屼负锛�
-                await _socketClientGateway.SendMessageAsync(client, message);
+                    // 鍥炲啓鍘熸秷鎭埌瀹㈡埛绔紙淇濇寔鍘熸湁琛屼负锛�
+                    await _socketClientGateway.SendMessageAsync(client, message);
+                }
+                else
+                {
+                    Console.WriteLine($"RobotJob HandleAsync Warning: Current task not found for RobotTaskId {state.CurrentTask.RobotTaskId}");
+                }
             }
             catch (Exception ex)
             {
@@ -263,28 +270,47 @@
                     // 鎹㈢洏浠诲姟锛氭牴鎹樁娈靛尯鍒嗗鐞�
                     if (state.ChangePalletPhase == 2)
                     {
+                        // Phase 2锛氭斁姝e父鐢佃姱鍒扮洰鏍囨墭鐩樺畬鎴愶紝閫掑璁℃暟
+                        state.RobotTaskTotalNum += positions.Length;
+                        if (task != null)
+                            task.RobotTaskTotalNum -= positions.Length;
+
                         if (isFlowA)
                         {
-                            // 娴佸悜A Phase2锛氭斁鍋囩數鑺埌鐩爣鎵樼洏锛屼笉璋冪敤 API锛屼笉閫掑璁℃暟
-                            // 浠呮洿鏂扮姸鎬�
+                            // 娴佸悜A锛氫笉璋冪敤 API锛屼粎閫掑璁℃暟
                         }
                         else
                         {
-                            // 娴佸悜B Phase2锛氭斁姝e父鐢佃姱锛岄�掑璁℃暟
-                            state.RobotTaskTotalNum += positions.Length;
-                            if (task != null)
-                                task.RobotTaskTotalNum -= positions.Length;
-
-                            // 鏋勫缓搴撳瓨 DTO 骞惰皟鐢� ChangePalletAsync API
+                            // 娴佸悜B锛氳皟鐢ㄦ崲鐩� API
                             var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
                             var result = _taskProcessor.PostGroupPalletAsync(nameof(ConfigKey.ChangePalletAsync), stockDTO);
                             putSuccess = result.Data.Status && result.IsSuccess;
                         }
+
+                        // 鍒囧洖 Phase 1锛岀户缁彇姝e父鐢佃姱
+                        state.ChangePalletPhase = 1;
                     }
                     else if (state.ChangePalletPhase == 4)
                     {
-                        // 娴佸悜B Phase4锛氭斁鍋囩數鑺埌5鍙蜂綅锛屼笉璋冪敤 API锛屼笉閫掑璁℃暟锛岄噴鏀剧偣浣�
-                        _fakeBatteryPositionService.MarkAsAvailable(positions.ToList());
+                        if (isFlowA)
+                        {
+                            // 娴佸悜A锛氭斁鍋囩數鑺埌鐩爣鎵樼洏锛岄�掑璁℃暟锛岃皟鐢ㄦ崲鐩� API
+                            state.RobotTaskTotalNum += positions.Length;
+                            if (task != null)
+                                task.RobotTaskTotalNum -= positions.Length;
+
+                            var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
+                            var result = _taskProcessor.PostGroupPalletAsync(nameof(ConfigKey.ChangePalletAsync), stockDTO);
+                            putSuccess = result.Data.Status && result.IsSuccess;
+                        }
+                        else
+                        {
+                            // 娴佸悜B锛氭斁鍋囩數鑺埌5鍙蜂綅锛岄噴鏀剧偣浣�
+                            _fakeBatteryPositionService.MarkAsAvailable(positions.ToList());
+                        }
+
+                        // 鍒囧洖 Phase 3锛岀户缁彇鍋囩數鑺�
+                        state.ChangePalletPhase = 3;
                     }
                     else
                     {
@@ -306,9 +332,12 @@
                     putSuccess = result.Data.Status && result.IsSuccess;
 
                     // 澧炲姞浠诲姟璁℃暟
-                    state.RobotTaskTotalNum += positions.Length;
-                    if (task != null)
-                        task.RobotTaskTotalNum -= positions.Length;
+                    if (!state.IsScanNG)
+                    {
+                        state.RobotTaskTotalNum += positions.Length;
+                        if (task != null)
+                            task.RobotTaskTotalNum -= positions.Length;
+                    }
                 }
             }
 
@@ -317,6 +346,7 @@
             {
                 // 鏇存柊褰撳墠鍔ㄤ綔涓�"鏀捐揣瀹屾垚"
                 state.CurrentAction = "PutFinished";
+                state.IsScanNG = false;
 
                 // 闈炵粍鐩樹换鍔℃椂澧炲姞璁℃暟锛堢粍鐩樹换鍔″凡鍦ㄤ笂闈㈤�掑锛�
                 if (!state.IsGroupPallet)
@@ -325,18 +355,18 @@
                     if (task != null)
                         task.RobotTaskTotalNum -= positions.Length;
                 }
-            }
 
-            // 濡傛灉浠诲姟瀛樺湪
-            if (task != null)
-            {
-                // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘斁璐у畬鎴�"
-                task.RobotTaskState = TaskRobotStatusEnum.RobotPutFinish.GetHashCode();
-
-                // 瀹夊叏鏇存柊鐘舵�佸埌 Redis
-                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                // 濡傛灉浠诲姟瀛樺湪
+                if (task != null)
                 {
-                    await _robotTaskService.Repository.UpdateDataAsync(task);
+                    // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘斁璐у畬鎴�"
+                    task.RobotTaskState = TaskRobotStatusEnum.RobotPutFinish.GetHashCode();
+
+                    // 瀹夊叏鏇存柊鐘舵�佸埌 Redis
+                    if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                    {
+                        await _robotTaskService.Repository.UpdateDataAsync(task);
+                    }
                 }
             }
         }

--
Gitblit v1.9.3