From 1515ffa15c11e106f35e1447bc990b7867c449bb Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期四, 16 四月 2026 16:07:14 +0800
Subject: [PATCH] feat(Robot): 机械手换盘任务特殊处理
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs | 126 ++++++++++++++++++++++++++++++-----------
1 files changed, 91 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 f277c39..9eb7830 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotPrefixCommandHandler.cs
@@ -58,22 +58,33 @@
private readonly ISocketClientGateway _socketClientGateway;
/// <summary>
+ /// 鍋囩數鑺綅缃湇鍔�
+ /// </summary>
+ /// <remarks>
+ /// 鐢ㄤ簬閲婃斁鍋囩數鑺偣浣嶃��
+ /// </remarks>
+ private readonly IFakeBatteryPositionService _fakeBatteryPositionService;
+
+ /// <summary>
/// 鏋勯�犲嚱鏁�
/// </summary>
/// <param name="robotTaskService">浠诲姟鏈嶅姟</param>
/// <param name="taskProcessor">浠诲姟澶勭悊鍣�</param>
/// <param name="stateManager">鐘舵�佺鐞嗗櫒</param>
/// <param name="socketClientGateway">Socket 缃戝叧</param>
+ /// <param name="fakeBatteryPositionService">鍋囩數鑺綅缃湇鍔�</param>
public RobotPrefixCommandHandler(
IRobotTaskService robotTaskService,
RobotTaskProcessor taskProcessor,
RobotStateManager stateManager,
- ISocketClientGateway socketClientGateway)
+ ISocketClientGateway socketClientGateway,
+ IFakeBatteryPositionService fakeBatteryPositionService)
{
_robotTaskService = robotTaskService;
_taskProcessor = taskProcessor;
_stateManager = stateManager;
_socketClientGateway = socketClientGateway;
+ _fakeBatteryPositionService = fakeBatteryPositionService;
}
/// <summary>
@@ -162,24 +173,31 @@
/// <remarks>
/// 澶勭悊閫昏緫锛�
/// 1. 濡傛灉鏄媶鐩樹换鍔★紝鏋勫缓搴撳瓨 DTO 骞惰皟鐢ㄦ媶鐩� API
- /// 2. 鏇存柊褰撳墠鍔ㄤ綔涓�"鍙栬揣瀹屾垚"
- /// 3. 璁板綍鍙栬揣瀹屾垚鐨勪綅缃�
- /// 4. 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜哄彇璐у畬鎴�"
- /// 5. 瀹夊叏鏇存柊鐘舵�佸埌 Redis
+ /// 2. 鎹㈢洏浠诲姟 Phase3 鍙栧亣鐢佃姱鏃朵笉璋冪敤鎷嗙洏 API
+ /// 3. 鏇存柊褰撳墠鍔ㄤ綔涓�"鍙栬揣瀹屾垚"
+ /// 4. 璁板綍鍙栬揣瀹屾垚鐨勪綅缃�
+ /// 5. 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜哄彇璐у畬鎴�"
+ /// 6. 瀹夊叏鏇存柊鐘舵�佸埌 Redis
/// </remarks>
/// <param name="state">鏈哄櫒浜哄綋鍓嶇姸鎬�</param>
/// <param name="positions">鍙栬揣瀹屾垚鐨勪綅缃紪鍙锋暟缁�</param>
/// <param name="task">鏈哄櫒浜轰换鍔¤褰�</param>
private async Task HandlePickFinishedAsync(RobotSocketState state, int[] positions, Dt_RobotTask? task)
{
- // 濡傛灉鏄媶鐩樹换鍔�
- if (state.IsSplitPallet)
+ // 璁板綍鍙栬揣瀹屾垚鐨勪綅缃�
+ state.LastPickPositions = positions;
+
+ // 鎹㈢洏浠诲姟 Phase3 鍙栧亣鐢佃姱锛氫笉璋冪敤鎷嗙洏 API
+ if (state.CurrentTask?.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode()
+ && state.ChangePalletPhase == 3)
+ {
+ state.CurrentAction = "PickFinished";
+ }
+ // 鎷嗙洏浠诲姟
+ else if (state.IsSplitPallet)
{
// 鏋勫缓搴撳瓨 DTO锛屽寘鍚綅缃俊鎭拰鎵樼洏鏉$爜
var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
-
- // 璁板綍鍙栬揣瀹屾垚鐨勪綅缃�
- state.LastPickPositions = positions;
// 璋冪敤鎷嗙洏 API
var result = _taskProcessor.PostSplitPalletAsync(stockDTO);
@@ -187,7 +205,6 @@
// 濡傛灉 API 璋冪敤鎴愬姛
if (result.Data.Status && result.IsSuccess)
{
- // 鏇存柊褰撳墠鍔ㄤ綔涓�"鍙栬揣瀹屾垚"
state.CurrentAction = "PickFinished";
}
}
@@ -196,9 +213,6 @@
// 闈炴媶鐩樹换鍔★紝鐩存帴鏇存柊鍔ㄤ綔
state.CurrentAction = "PickFinished";
}
-
- // 璁板綍鍙栬揣瀹屾垚鐨勪綅缃紙鏃犺鏄惁鎷嗙洏閮借褰曪級
- state.LastPickPositions = positions;
// 濡傛灉浠诲姟瀛樺湪
if (task != null)
@@ -220,10 +234,11 @@
/// <remarks>
/// 澶勭悊閫昏緫锛�
/// 1. 濡傛灉鏄粍鐩樹换鍔★紝鏋勫缓搴撳瓨 DTO 骞惰皟鐢ㄧ粍鐩�/鎹㈢洏 API
- /// 2. 濡傛灉缁勭洏鎴愬姛锛屽鍔犱换鍔¤鏁�
- /// 3. 鏇存柊褰撳墠鍔ㄤ綔涓�"鏀捐揣瀹屾垚"
- /// 4. 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘斁璐у畬鎴�"
- /// 5. 瀹夊叏鏇存柊鐘舵�佸埌 Redis
+ /// 2. 鎹㈢洏浠诲姟鏍规嵁闃舵鍖哄垎澶勭悊锛氭祦鍚慉 Phase2 涓嶈皟鐢� API锛涙祦鍚態 Phase2 姝e父璋冪敤锛汸hase4 璋冪敤 MarkAsAvailable
+ /// 3. 濡傛灉缁勭洏鎴愬姛锛屽鍔犱换鍔¤鏁�
+ /// 4. 鏇存柊褰撳墠鍔ㄤ綔涓�"鏀捐揣瀹屾垚"
+ /// 5. 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘斁璐у畬鎴�"
+ /// 6. 瀹夊叏鏇存柊鐘舵�佸埌 Redis
/// </remarks>
/// <param name="state">鏈哄櫒浜哄綋鍓嶇姸鎬�</param>
/// <param name="positions">鏀捐揣瀹屾垚鐨勪綅缃紪鍙锋暟缁�</param>
@@ -239,20 +254,62 @@
// 璁板綍鏀捐揣瀹屾垚鐨勪綅缃�
state.LastPutPositions = positions;
- // 鏋勫缓搴撳瓨 DTO
- var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
+ // 鍒ゆ柇鏄惁涓烘崲鐩樹换鍔�
+ var isChangePallet = state.CurrentTask?.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode();
+ var isFlowA = state.CurrentTask?.RobotSourceAddressLineCode is "11001" or "11010";
- // 鏍规嵁浠诲姟绫诲瀷鍐冲畾璋冪敤鍝釜 API
- // 鎹㈢洏浠诲姟璋冪敤 ChangePalletAsync锛岀粍鐩樹换鍔¤皟鐢� GroupPalletAsync
- var configKey = state.CurrentTask?.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode()
- ? nameof(ConfigKey.ChangePalletAsync)
- : nameof(ConfigKey.GroupPalletAsync);
+ if (isChangePallet)
+ {
+ // 鎹㈢洏浠诲姟锛氭牴鎹樁娈靛尯鍒嗗鐞�
+ if (state.ChangePalletPhase == 2)
+ {
+ if (isFlowA)
+ {
+ // 娴佸悜A Phase2锛氭斁鍋囩數鑺埌鐩爣鎵樼洏锛屼笉璋冪敤 API锛屼笉閫掑璁℃暟
+ // 浠呮洿鏂扮姸鎬�
+ }
+ else
+ {
+ // 娴佸悜B Phase2锛氭斁姝e父鐢佃姱锛岄�掑璁℃暟
+ state.RobotTaskTotalNum += positions.Length;
+ if (task != null)
+ task.RobotTaskTotalNum -= positions.Length;
- // 璋冪敤缁勭洏/鎹㈢洏 API
- var result = _taskProcessor.PostGroupPalletAsync(configKey, stockDTO);
+ // 鏋勫缓搴撳瓨 DTO 骞惰皟鐢� ChangePalletAsync API
+ var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
+ var result = _taskProcessor.PostGroupPalletAsync(nameof(ConfigKey.ChangePalletAsync), stockDTO);
+ putSuccess = result.Data.Status && result.IsSuccess;
+ }
+ }
+ else if (state.ChangePalletPhase == 4)
+ {
+ // 娴佸悜B Phase4锛氭斁鍋囩數鑺埌5鍙蜂綅锛屼笉璋冪敤 API锛屼笉閫掑璁℃暟锛岄噴鏀剧偣浣�
+ _fakeBatteryPositionService.MarkAsAvailable(positions.ToList());
+ }
+ else
+ {
+ // 闈炴壒娆℃ā寮忥細姝e父閫掑璁℃暟骞惰皟鐢� API
+ state.RobotTaskTotalNum += positions.Length;
+ if (task != null)
+ task.RobotTaskTotalNum -= positions.Length;
- // 妫�鏌� API 杩斿洖鐘舵��
- putSuccess = result.Data.Status && result.IsSuccess;
+ var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
+ var result = _taskProcessor.PostGroupPalletAsync(nameof(ConfigKey.GroupPalletAsync), stockDTO);
+ putSuccess = result.Data.Status && result.IsSuccess;
+ }
+ }
+ else
+ {
+ // 缁勭洏浠诲姟锛氬師鏈夐�昏緫
+ var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
+ var result = _taskProcessor.PostGroupPalletAsync(nameof(ConfigKey.GroupPalletAsync), stockDTO);
+ putSuccess = result.Data.Status && result.IsSuccess;
+
+ // 澧炲姞浠诲姟璁℃暟
+ state.RobotTaskTotalNum += positions.Length;
+ if (task != null)
+ task.RobotTaskTotalNum -= positions.Length;
+ }
}
// 濡傛灉鏀捐揣鎴愬姛
@@ -261,13 +318,12 @@
// 鏇存柊褰撳墠鍔ㄤ綔涓�"鏀捐揣瀹屾垚"
state.CurrentAction = "PutFinished";
- // 澧炲姞浠诲姟璁℃暟锛堢疮鍔犳湰娆″畬鎴愮殑鏁伴噺锛�
- state.RobotTaskTotalNum += positions.Length;
-
- // 濡傛灉浠诲姟瀛樺湪锛屽悓姝ユ洿鏂颁换鍔$殑璁℃暟
- if (task != null)
+ // 闈炵粍鐩樹换鍔℃椂澧炲姞璁℃暟锛堢粍鐩樹换鍔″凡鍦ㄤ笂闈㈤�掑锛�
+ if (!state.IsGroupPallet)
{
- task.RobotTaskTotalNum -= positions.Length;
+ state.RobotTaskTotalNum += positions.Length;
+ if (task != null)
+ task.RobotTaskTotalNum -= positions.Length;
}
}
--
Gitblit v1.9.3