From ad64840cc04dac2278ca02f22ddc02b1a218e9cf Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期三, 15 四月 2026 22:44:18 +0800
Subject: [PATCH] feat(机器人任务): 实现换盘任务假电芯补充逻辑
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs | 64 +++++++++++++++++++++++++++++++-
1 files changed, 62 insertions(+), 2 deletions(-)
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 f5c193d..e0211a5 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
@@ -237,13 +237,13 @@
|| task.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode();
}
- // 濡傛灉鏄粍鐩樹换鍔★紙鍖呮嫭鎹㈢洏锛�
+ // 濡傛灉鏄粍鐩樹换鍔�
if (task.RobotTaskType == RobotTaskTypeEnum.GroupPallet.GetHashCode())
{
// 鐢熸垚鎵樼洏鏉$爜鍓嶇紑
const string prefix = "TRAY";
- // 鐢熸垚涓や釜鎵樼洏鏉$爜锛堢敤浜庣粍鐩樻搷浣滐級
+ // 鐢熸垚涓や釜鎵樼洏鏉$爜锛堢敤浜庣粍鐩樻搷浣滐級锛堟祴璇曠敤锛屽悗缁鍙栫嚎浣撴潯鐮侊級
string trayBarcode1 = RobotBarcodeGenerator.GenerateTrayBarcode(prefix);
string trayBarcode2 = RobotBarcodeGenerator.GenerateTrayBarcode(prefix);
@@ -282,6 +282,66 @@
QuartzLogger.Error($"鐢熸垚鎵樼洏鏉$爜澶辫触", stateForUpdate.RobotCrane.DeviceName);
}
}
+ else if (task.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode())
+ {
+ // 鎹㈢洏浠诲姟
+ // 鐩爣锛氭甯哥數鑺姄鍙栧畬鎴愬悗锛岃ˉ鍏呭亣鐢佃姱鑷�48涓�
+ const int targetTotal = 48;
+ const int fakeBatteryPickPosition = 5; // 鍋囩數鑺姄鍙栦綅缃�
+ const int pickCountPerExecution = 4; // 姣忔鎶撳彇鏁伴噺
+
+ int targetNormalCount = task.RobotTaskTotalNum; // 姝e父鐢佃姱鐩爣鏁伴噺
+ int currentCompletedCount = stateForUpdate.RobotTaskTotalNum; // 宸插畬鎴愭暟閲�
+
+ // 濡傛灉鐩爣鏁伴噺涓�48锛岀洿鎺ヤ笅鍙戞甯镐换鍔�
+ if (targetNormalCount == targetTotal)
+ {
+ await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate);
+ }
+ // 濡傛灉宸插畬鎴愭暟閲忓皬浜庣洰鏍囨暟閲忥紝缁х画鎶撳彇姝e父鐢佃姱
+ else if (currentCompletedCount < targetNormalCount)
+ {
+ await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate);
+ }
+ // 姝e父鐢佃姱宸插畬鎴愶紝杩涘叆鍋囩數鑺ˉ鍏呮ā寮�
+ else if (currentCompletedCount == targetNormalCount && !stateForUpdate.IsInFakeBatteryMode)
+ {
+ // 棣栨杩涘叆鍋囩數鑺ā寮忥紝璁剧疆鏍囧織
+ stateForUpdate.IsInFakeBatteryMode = true;
+ _logger.LogInformation("HandlePutFinishedStateAsync锛氭甯哥數鑺姄鍙栧畬鎴愶紝杩涘叆鍋囩數鑺ˉ鍏呮ā寮忥紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ QuartzLogger.Info($"姝e父鐢佃姱鎶撳彇瀹屾垚锛岃繘鍏ュ亣鐢佃姱琛ュ厖妯″紡", stateForUpdate.RobotCrane?.DeviceName);
+ }
+
+ // 濡傛灉澶勪簬鍋囩數鑺ˉ鍏呮ā寮忥紝璁$畻骞朵笅鍙戣ˉ鏁颁换鍔�
+ if (stateForUpdate.IsInFakeBatteryMode)
+ {
+ int remaining = targetTotal - currentCompletedCount;
+ if (remaining > 0)
+ {
+ // 璁$畻姣忔鎶撳彇鐨勬暟閲忥紙鏈�澶�4涓級
+ int pickCount = Math.Min(pickCountPerExecution, remaining);
+
+ // 鑾峰彇鍙敤鐨勫亣鐢佃姱骞抽潰鐐逛綅
+ var positions = _taskProcessor.GetNextAvailableFakeBatteryPositions(pickCount);
+ if (positions.Count == 0)
+ {
+ _logger.LogError("HandlePutFinishedStateAsync锛氭棤鍙敤鍋囩數鑺偣浣嶏紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ QuartzLogger.Error($"鏃犲彲鐢ㄥ亣鐢佃姱鐐逛綅", stateForUpdate.RobotCrane?.DeviceName);
+ return;
+ }
+
+ // 涓嬪彂鍋囩數鑺彇璐ф寚浠�
+ await _taskProcessor.SendSocketRobotFakeBatteryPickAsync(task, stateForUpdate, positions);
+ }
+ else
+ {
+ // 鍋囩數鑺ˉ鍏呭畬鎴愶紝閲嶇疆鏍囧織
+ stateForUpdate.IsInFakeBatteryMode = false;
+ _logger.LogInformation("HandlePutFinishedStateAsync锛氭崲鐩樹换鍔″畬鎴愶紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ QuartzLogger.Info($"鎹㈢洏浠诲姟瀹屾垚", stateForUpdate.RobotCrane?.DeviceName);
+ }
+ }
+ }
else
{
// 闈炵粍鐩樹换鍔★紝鐩存帴鍙戦�佸彇璐ф寚浠�
--
Gitblit v1.9.3