From 34ad8ad8e238d54d9695da9e8d101579c42516bb Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期六, 18 四月 2026 22:40:02 +0800
Subject: [PATCH] fix(RobotJob): 修正机器人任务处理逻辑和注释错误
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs | 335 +++++++++++++++++++++++--------------------------------
1 files changed, 143 insertions(+), 192 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 2ddad09..978f7ee 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotWorkflowOrchestrator.cs
@@ -112,7 +112,7 @@
// 1. 杩愯妯″紡涓鸿嚜鍔紙2锛�
// 2. 鎺у埗妯″紡涓哄鎴风鎺у埗锛�1锛�
// 3. 杩愯鐘舵�佹槸 Running
- if (latestState.RobotRunMode == 2 /*&& latestState.RobotControlMode == 1*/ && latestState.OperStatus == "Running" && latestState.Homed == "Homed")
+ if (latestState.RobotRunMode == 2 /*&& latestState.RobotControlMode == 1*/ && latestState.OperStatus == "Running" && (latestState.Homed == "Homed" || latestState.Homed.IsNullOrEmpty()))
{
// ========== 鍙栬揣瀹屾垚鍚庣殑鏀捐揣澶勭悊 ==========
// 鏉′欢锛�
@@ -120,11 +120,11 @@
// - 鎵嬭噦涓婃湁鐗╂枡锛圧obotArmObject == 1锛�
// - 浠诲姟鐘舵�佷负 RobotPickFinish锛堝凡璁板綍鍙栬揣瀹屾垚锛�
if ((latestState.CurrentAction == "PickFinished" || latestState.CurrentAction == "AllPickFinished")
- && latestState.RobotArmObject == 1
+ && (latestState.RobotArmObject.IsNullOrEmpty() || latestState.RobotArmObject == 1)
&& task.RobotTaskState == TaskRobotStatusEnum.RobotPickFinish.GetHashCode())
{
- _logger.LogInformation("ExecuteAsync锛氭弧瓒虫斁璐ф潯浠讹紝寮�濮嬪鐞嗗彇璐у畬鎴愶紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
- QuartzLogger.Info($"ExecuteAsync锛氭弧瓒虫斁璐ф潯浠讹紝寮�濮嬪鐞嗗彇璐у畬鎴�", latestState.RobotCrane?.DeviceName ?? ipAddress);
+ _logger.LogInformation("ExecuteAsync锛氭弧瓒虫斁璐ф潯浠讹紝寮�濮嬩笅鍙戞斁璐т换鍔★紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ QuartzLogger.Info($"ExecuteAsync锛氭弧瓒虫斁璐ф潯浠讹紝寮�濮嬩笅鍙戞斁璐т换鍔�", latestState.RobotCrane?.DeviceName ?? ipAddress);
// 鍙戦�佹斁璐ф寚浠�
await HandlePickFinishedStateAsync(task, ipAddress);
}
@@ -136,12 +136,12 @@
// - 鎵嬭噦涓婃棤鐗╂枡锛圧obotArmObject == 0锛�
// - 浠诲姟鐘舵�佷负 RobotPutFinish 鎴栦笉鏄� RobotExecuting
else if ((latestState.CurrentAction == "PutFinished" || latestState.CurrentAction == "AllPutFinished" || latestState.CurrentAction.IsNullOrEmpty())
- && latestState.RobotArmObject == 0
+ && (latestState.RobotArmObject.IsNullOrEmpty() || latestState.RobotArmObject == 0)
&& (task.RobotTaskState == TaskRobotStatusEnum.RobotPutFinish.GetHashCode()
|| task.RobotTaskState != TaskRobotStatusEnum.RobotExecuting.GetHashCode()))
{
- _logger.LogInformation("ExecuteAsync锛氭弧瓒冲彇璐ф潯浠讹紝寮�濮嬪鐞嗘斁璐у畬鎴愶紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
- QuartzLogger.Info($"ExecuteAsync锛氭弧瓒冲彇璐ф潯浠讹紝寮�濮嬪鐞嗘斁璐у畬鎴�", latestState.RobotCrane?.DeviceName ?? ipAddress);
+ _logger.LogInformation("ExecuteAsync锛氭弧瓒冲彇璐ф潯浠讹紝寮�濮嬩笅鍙戝彇璐т换鍔★紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ QuartzLogger.Info($"ExecuteAsync锛氭弧瓒冲彇璐ф潯浠讹紝寮�濮嬩笅鍙戝彇璐т换鍔�", latestState.RobotCrane?.DeviceName ?? ipAddress);
// 鍙戦�佸彇璐ф寚浠�
await HandlePutFinishedStateAsync(task, ipAddress);
}
@@ -166,7 +166,7 @@
var state = _stateManager.GetState(ipAddress);
- // 鎹㈢洏浠诲姟浣跨敤鎵规鏍煎紡
+ // 鎹㈢洏浠诲姟鎵规妯″紡
if (task.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode())
{
int targetNormalCount = task.RobotTaskTotalNum;
@@ -174,78 +174,94 @@
bool isFlowA = task.RobotSourceAddressLineCode is "11001" or "11010";
- // 娴佸悜A Phase 2锛氭斁鍋囩數鑺埌鐩爣鎵樼洏
- if (isFlowA && state?.ChangePalletPhase == 2)
+ // ==================== Phase 2: 鏀炬甯哥數鑺埌鐩爣鎵樼洏锛堜袱娴佸悜鐩稿悓锛�====================
+ // PickFinished 鍒拌揪锛歅hase 1 鐨� Pick 鍛戒护瀹屾垚锛岀幇鍦ㄤ笅鍙� Put 鍛戒护鏀炬甯哥數鑺�
+ if (state?.ChangePalletPhase == 2)
{
- int remaining = 48 - currentCompletedCount;
- if (remaining <= 0) return;
+ int remainingNormal = targetNormalCount - currentCompletedCount;
+ if (remainingNormal <= 0)
+ {
+ // 姝e父鐢佃姱鍏ㄩ儴鏀惧畬锛岀瓑寰� HandlePutFinishedAsync 鍒囨崲鍒� Phase 3
+ return;
+ }
- int batchStart = targetNormalCount + 1 + (state.CurrentBatchIndex - 1);
- int putCount = Math.Min(4, remaining);
+ int batchStart = (currentCompletedCount / 4) * 4 + 1;
+ int putCount = Math.Min(4, remainingNormal);
var (start, end) = _taskProcessor.BuildBatchRange(batchStart, putCount);
await _taskProcessor.SendPutWithBatchAsync(task, state, task.RobotTargetAddress, start, end);
+
+ // Phase 淇濇寔涓� 2锛岀瓑 HandlePutFinishedAsync 澶勭悊瀹屾斁璐ц鏁板悗鍐嶅垏鍥� Phase 1
+ _stateManager.TryUpdateStateSafely(ipAddress, state);
return;
}
- // 娴佸悜B Phase 4锛氭斁鍋囩數鑺埌5鍙蜂綅
- if (!isFlowA && state?.ChangePalletPhase == 4)
+ // ==================== Phase 4: 鏀惧亣鐢佃姱锛堜袱娴佸悜鍒嗗弶锛�====================
+ // PickFinished 鍒拌揪锛歅hase 3 鐨� Pick 鍛戒护瀹屾垚锛岀幇鍦ㄤ笅鍙� Put 鍛戒护鏀惧亣鐢佃姱
+ if (state?.ChangePalletPhase == 4)
{
int fakeCount = 48 - targetNormalCount;
int completedFake = Math.Max(0, currentCompletedCount - targetNormalCount);
int remainingFake = fakeCount - completedFake;
- if (remainingFake <= 0) return;
-
- var positions = _taskProcessor.GetNextAvailableFakeBatteryPositions(Math.Min(4, remainingFake));
- if (positions.Count == 0)
+ if (remainingFake <= 0)
{
- _logger.LogError("HandlePickFinishedStateAsync锛氭棤鍙敤鍋囩數鑺偣浣嶏紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ // 鍋囩數鑺叏閮ㄦ斁瀹岋紝绛夊緟 allputfinished 瑙﹀彂 Phase 5 鍏ュ簱
return;
}
- int start = positions.Min();
- int end = positions.Max();
-
- await _taskProcessor.SendPutWithBatchAsync(task, state, "5", start, end);
- return;
- }
-
- // 娴佸悜B Phase 2锛氭斁姝e父鐢佃姱鍒扮洰鏍囨墭鐩�
- if (!isFlowA && state?.ChangePalletPhase == 2)
- {
- int remainingNormal = targetNormalCount - currentCompletedCount;
- if (remainingNormal <= 0) return;
-
- int batchStart = ((currentCompletedCount - 1) / 4) * 4 + 1;
- int putCount = Math.Min(4, remainingNormal);
- var (start, end) = _taskProcessor.BuildBatchRange(batchStart, putCount);
-
- await _taskProcessor.SendPutWithBatchAsync(task, state, task.RobotTargetAddress, start, end);
- return;
- }
-
- // 榛樿锛氫娇鐢ㄥ師鏈夋牸寮�
- taskString = $"Putbattery,{task.RobotTargetAddress}";
- }
- else
- {
- // 闈炴崲鐩樹换鍔★細浣跨敤鍘熸湁鏍煎紡
- if (state != null && state.IsGroupPallet && task.RobotTaskType == RobotTaskTypeEnum.GroupPallet.GetHashCode())
- {
- // 缁勭洏浠诲姟锛氭斁璐ч渶鍒ゆ柇鏄惁NG锛屽鏋淣G鍒欐斁鍒癗G鍙�
- if (state.IsScanNG)
+ if (isFlowA)
{
- taskString = $"Putbattery,NG";
+ // 娴佸悜A锛氭斁鍋囩數鑺埌鐩爣鎵樼洏
+ int batchStart = targetNormalCount + 1 + (state.CurrentBatchIndex - 1);
+ int putCount = Math.Min(4, remainingFake);
+ var (start, end) = _taskProcessor.BuildBatchRange(batchStart, putCount);
+
+ await _taskProcessor.SendPutWithBatchAsync(task, state, task.RobotTargetAddress, start, end);
+
+ state.CurrentBatchIndex += putCount;
+ // Phase 淇濇寔涓� 4锛岀瓑 HandlePutFinishedAsync 澶勭悊瀹屽悗鍐嶅垏鍥� Phase 3
+ _stateManager.TryUpdateStateSafely(ipAddress, state);
}
else
{
- taskString = $"Putbattery,{task.RobotTargetAddress}";
+ // 娴佸悜B锛氭斁鍋囩數鑺埌5鍙蜂綅
+ var positions = _taskProcessor.GetNextAvailableFakeBatteryPositions(Math.Min(4, remainingFake));
+ if (positions.Count == 0)
+ {
+ _logger.LogError("HandlePickFinishedStateAsync锛氭棤鍙敤鍋囩數鑺偣浣嶏紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ return;
+ }
+
+ int start = positions.Min();
+ int end = positions.Max();
+
+ await _taskProcessor.SendPutWithBatchAsync(task, state, "5", start, end);
+
+ // Phase 淇濇寔涓� 4锛岀瓑 HandlePutFinishedAsync 澶勭悊瀹屽悗鍐嶅垏鍥� Phase 3
+ _stateManager.TryUpdateStateSafely(ipAddress, state);
}
+ return;
+ }
+
+ // 闈炴壒娆℃ā寮忔垨鍏朵粬闃舵涓嶄笅鍙戞寚浠�
+ return;
+ }
+
+ // 闈炴崲鐩樹换鍔★細浣跨敤鍘熸湁鏍煎紡
+ if (state != null && state.IsGroupPallet && task.RobotTaskType == RobotTaskTypeEnum.GroupPallet.GetHashCode())
+ {
+ if (state.IsScanNG)
+ {
+ taskString = $"Putbattery,1";
}
else
+ {
taskString = $"Putbattery,{task.RobotTargetAddress}";
+ }
}
+ else
+ taskString = $"Putbattery,{task.RobotTargetAddress}";
bool result = await _clientManager.SendToClientAsync(ipAddress, taskString);
@@ -316,6 +332,11 @@
// 濡傛灉鏄粍鐩樹换鍔�
if (task.RobotTaskType == RobotTaskTypeEnum.GroupPallet.GetHashCode())
{
+ // 妫�鏌ョ數姹犳槸鍚﹀凡鍒颁綅
+ if (!stateForUpdate.BatteryArrived)
+ {
+ return;
+ }
// 璇诲彇绾夸綋鐢佃姱鏉$爜
string trayBarcode1 = RobotBarcodeGenerator.GenerateTrayBarcode("DB40.990");
string trayBarcode2 = RobotBarcodeGenerator.GenerateTrayBarcode("DB40.1020");
@@ -332,14 +353,18 @@
// 鍙戦�佸彇璐ф寚浠� 鏍囪鎵爜NG锛屾斁璐ф椂涓嶄娇鐢ㄨ繖浜涙潯鐮侊紝骞舵斁鍏G鍙�
await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, true);
+ return;
}
else
{
_logger.LogInformation("HandlePutFinishedStateAsync锛氳鍙栫殑鎵樼洏鏉$爜鍞竴锛岀户缁墽琛岋紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
QuartzLogger.Info($"璇诲彇鐨勬墭鐩樻潯鐮佸敮涓�锛岀户缁墽琛�", stateForUpdate.RobotCrane.DeviceName);
+
// 灏嗘潯鐮佹坊鍔犲埌鐘舵�佷腑锛屼緵鍚庣画鏀捐揣鏃朵娇鐢�
- stateForUpdate.CellBarcode.Add(trayBarcode1);
- stateForUpdate.CellBarcode.Add(trayBarcode2);
+ stateForUpdate.CellBarcode = new List<string>()
+ {
+ trayBarcode1,trayBarcode2
+ };
}
@@ -348,7 +373,7 @@
QuartzLogger.Info($"璇诲彇鎵樼洏鏉$爜鎴愬姛: {trayBarcode1}+{trayBarcode2}", stateForUpdate.RobotCrane.DeviceName);
// 鍙戦�佸彇璐ф寚浠�
- await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, false);
+ await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate);
}
else
{
@@ -359,12 +384,15 @@
// 鍙戦�佸彇璐ф寚浠� 鏍囪鎵爜NG锛屾斁璐ф椂涓嶄娇鐢ㄨ繖浜涙潯鐮侊紝骞舵斁鍏G鍙�
await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, true);
+ return;
}
}
else if (task.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode())
{
const int targetTotal = 48;
+ // 鎹㈢洏浠诲姟杩涘叆鎵规妯″紡锛屽垎闃舵澶勭悊姝e父鐢佃姱鍜屽亣鐢佃姱 锛堟満鍣ㄤ汉浠诲姟鎬绘暟锛�
int targetNormalCount = task.RobotTaskTotalNum;
+ // 褰撳墠宸插畬鎴愭暟閲忥紙鍙栬揣瀹屾垚鐨勬暟閲忥級锛屽垵濮嬩负鐘舵�佷腑鐨� RobotTaskTotalNum锛屽悗缁牴鎹彇璐у畬鎴愮殑鏁伴噺鍔ㄦ�佹洿鏂�
int currentCompletedCount = stateForUpdate.RobotTaskTotalNum;
// 鍒ゆ柇娴佸悜锛坣ull-safe锛�
@@ -373,7 +401,7 @@
// 鐩爣鏁伴噺涓�48锛氱洿鎺ヨ蛋鍘熸湁閫昏緫锛屼笉杩涘叆鎵规妯″紡
if (targetNormalCount == targetTotal)
{
- await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, false);
+ await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate);
return;
}
@@ -384,165 +412,88 @@
stateForUpdate.CurrentBatchIndex = 1;
_logger.LogInformation("HandlePutFinishedStateAsync锛氭崲鐩樹换鍔¤繘鍏ユ壒娆℃ā寮忥紝浠诲姟鍙�: {TaskNum}锛屾祦鍚�: {Flow}",
task.RobotTaskNum, isFlowA ? "A" : "B");
+ _stateManager.TryUpdateStateSafely(ipAddress, stateForUpdate);
}
- // ==================== 娴佸悜A锛氳ˉ鍋囩數鑺埌鐩爣鎵樼洏 ====================
- if (isFlowA)
+ // ==================== Phase 1: 鍙栨甯哥數鑺紙涓ゆ祦鍚戠浉鍚岋級====================
+ if (stateForUpdate.ChangePalletPhase == 1)
{
- // Phase 1: 鍙栧亣鐢佃姱锛堜粠5鍙蜂綅锛屼娇鐢� PositionIndex锛�
- if (stateForUpdate.ChangePalletPhase == 1)
+ int remainingNormal = targetNormalCount - currentCompletedCount;
+ if (remainingNormal <= 0)
{
- int remaining = targetTotal - currentCompletedCount;
- if (remaining <= 0)
- {
- stateForUpdate.ChangePalletPhase = 0;
- stateForUpdate.CurrentBatchIndex = 1;
- stateForUpdate.IsInFakeBatteryMode = false;
- _logger.LogInformation("HandlePutFinishedStateAsync锛氭祦鍚慉瀹屾垚锛屼换鍔″彿: {TaskNum}", task.RobotTaskNum);
- return;
- }
-
- int pickCount = Math.Min(4, remaining);
- var positions = _taskProcessor.GetNextAvailableFakeBatteryPositions(pickCount);
- if (positions.Count == 0)
- {
- _logger.LogError("HandlePutFinishedStateAsync锛氭棤鍙敤鍋囩數鑺偣浣嶏紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
- return;
- }
-
- await _taskProcessor.SendSocketRobotFakeBatteryPickAsync(task, stateForUpdate, positions);
- stateForUpdate.ChangePalletPhase = 2;
+ // 姝e父鐢佃姱鍙栧畬锛屽垏鎹㈠埌 Phase 3 鍙栧亣鐢佃姱
+ stateForUpdate.ChangePalletPhase = 3;
+ stateForUpdate.CurrentBatchIndex = 1; // 鍋囩數鑺壒娆′粠澶村紑濮�
+ _logger.LogInformation("HandlePutFinishedStateAsync锛氭甯哥數鑺彇瀹岋紝鍒囨崲鍒癙hase 3鍙栧亣鐢佃姱锛屼换鍔″彿: {TaskNum}", task.RobotTaskNum);
+ _stateManager.TryUpdateStateSafely(ipAddress, stateForUpdate);
+ return;
}
- // Phase 2: 鏀惧亣鐢佃姱鍒扮洰鏍囨墭鐩橈紙浠� targetNormalCount+1 寮�濮嬮�掑锛�
- else if (stateForUpdate.ChangePalletPhase == 2)
- {
- int remaining = targetTotal - currentCompletedCount;
- if (remaining <= 0)
- {
- stateForUpdate.ChangePalletPhase = 0;
- stateForUpdate.CurrentBatchIndex = 1;
- stateForUpdate.IsInFakeBatteryMode = false;
- _logger.LogInformation("HandlePutFinishedStateAsync锛氭祦鍚慉瀹屾垚锛屼换鍔″彿: {TaskNum}", task.RobotTaskNum);
- return;
- }
- // 璁$畻鏀捐揣鎵规缂栧彿锛氫粠 targetNormalCount + 1 寮�濮�
- int batchStart = targetNormalCount + 1 + (stateForUpdate.CurrentBatchIndex - 1);
- int putCount = Math.Min(4, remaining);
- var (start, end) = _taskProcessor.BuildBatchRange(batchStart, putCount);
+ int pickCount = Math.Min(4, remainingNormal);
+ var (start, end) = _taskProcessor.BuildBatchRange(stateForUpdate.CurrentBatchIndex, pickCount);
- await _taskProcessor.SendPutWithBatchAsync(task, stateForUpdate, task.RobotTargetAddress, start, end);
+ await _taskProcessor.SendPickWithBatchAsync(task, stateForUpdate, task.RobotSourceAddress, start, end);
- stateForUpdate.CurrentBatchIndex += putCount;
- stateForUpdate.ChangePalletPhase = 1;
- }
+ stateForUpdate.CurrentBatchIndex += pickCount;
+ // 鍙戝畬 Pick 鍚庡垏鎹㈠埌 Phase=2锛岀瓑 PickFinished 瑙﹀彂 HandlePickFinishedStateAsync 涓嬪彂鏀捐揣鎸囦护
+ stateForUpdate.ChangePalletPhase = 2;
+ _stateManager.TryUpdateStateSafely(ipAddress, stateForUpdate);
+ return;
}
- // ==================== 娴佸悜B锛氬彇姝e父鐢佃姱 + 鍥炴敹鍋囩數鑺� ====================
- else
+
+ // ==================== Phase 3: 澶勭悊鍋囩數鑺紙娴佸悜A/B 鍒嗗弶锛夛紝鑷繁寰幆 ====================
+ if (stateForUpdate.ChangePalletPhase == 3)
{
- // Phase 1: 鍙栨甯哥數鑺紙浠庢簮鍦板潃锛屼粠1寮�濮嬮�掑锛�
- if (stateForUpdate.ChangePalletPhase == 1)
+ int fakeCount = targetTotal - targetNormalCount;
+ int completedFake = Math.Max(0, currentCompletedCount - targetNormalCount);
+ int remainingFake = fakeCount - completedFake;
+
+ if (remainingFake <= 0)
{
- int remainingNormal = targetNormalCount - currentCompletedCount;
- if (remainingNormal <= 0)
- {
- // 姝e父鐢佃姱鍙栧畬锛屽垏鎹㈠埌 Phase 3
- stateForUpdate.ChangePalletPhase = 3;
- stateForUpdate.CurrentBatchIndex = targetNormalCount + 1;
- _logger.LogInformation("HandlePutFinishedStateAsync锛氭甯哥數鑺叏閮ㄥ彇瀹岋紝杩涘叆Phase 3鍥炴敹鍋囩數鑺紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
- return;
- }
-
- int pickCount = Math.Min(4, remainingNormal);
- var (start, end) = _taskProcessor.BuildBatchRange(stateForUpdate.CurrentBatchIndex, pickCount);
-
- await _taskProcessor.SendPickWithBatchAsync(task, stateForUpdate, task.RobotSourceAddress, start, end);
-
- stateForUpdate.CurrentBatchIndex += pickCount;
- stateForUpdate.ChangePalletPhase = 2;
+ // 鍋囩數鑺叏閮ㄥ鐞嗗畬锛屽垏鎹㈠埌 Phase 5 绛夊緟鍏ュ簱
+ stateForUpdate.ChangePalletPhase = 5;
+ _logger.LogInformation("HandlePutFinishedStateAsync锛氬亣鐢佃姱澶勭悊瀹屾瘯锛屽垏鎹㈠埌Phase 5绛夊緟鍏ュ簱锛屼换鍔″彿: {TaskNum}", task.RobotTaskNum);
+ _stateManager.TryUpdateStateSafely(ipAddress, stateForUpdate);
+ return;
}
- // Phase 2: 鏀炬甯哥數鑺埌鐩爣鎵樼洏锛堟斁璐х紪鍙蜂笌鍙栬揣缂栧彿涓�鑷达級
- else if (stateForUpdate.ChangePalletPhase == 2)
+
+ if (isFlowA)
{
- int remainingNormal = targetNormalCount - currentCompletedCount;
- if (remainingNormal <= 0)
- {
- // 姝e父鐢佃姱鏀惧畬锛屽垏鎹㈠埌 Phase 3
- stateForUpdate.ChangePalletPhase = 3;
- stateForUpdate.CurrentBatchIndex = targetNormalCount + 1;
- _logger.LogInformation("HandlePutFinishedStateAsync锛氭甯哥數鑺叏閮ㄦ斁瀹岋紝杩涘叆Phase 3鍥炴敹鍋囩數鑺紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
- return;
- }
-
- // 璁$畻鏈壒鏀捐揣缂栧彿锛氬熀浜� currentCompletedCount 鎺ㄥ鎵规璧峰
- int batchStart = ((currentCompletedCount - 1) / 4) * 4 + 1;
- int putCount = Math.Min(4, remainingNormal);
- var (start, end) = _taskProcessor.BuildBatchRange(batchStart, putCount);
-
- await _taskProcessor.SendPutWithBatchAsync(task, stateForUpdate, task.RobotTargetAddress, start, end);
-
- stateForUpdate.ChangePalletPhase = 1;
- }
- // Phase 3: 鍙栧亣鐢佃姱锛堜粠婧愬湴鍧�锛屼粠 targetNormalCount+1 寮�濮嬮�掑锛�
- else if (stateForUpdate.ChangePalletPhase == 3)
- {
- int fakeCount = targetTotal - targetNormalCount;
- int completedFake = Math.Max(0, currentCompletedCount - targetNormalCount);
- int remainingFake = fakeCount - completedFake;
-
- if (remainingFake <= 0)
- {
- stateForUpdate.ChangePalletPhase = 0;
- stateForUpdate.CurrentBatchIndex = 1;
- stateForUpdate.IsInFakeBatteryMode = false;
- _logger.LogInformation("HandlePutFinishedStateAsync锛氭祦鍚態瀹屾垚锛屼换鍔″彿: {TaskNum}", task.RobotTaskNum);
- return;
- }
-
- int pickCount = Math.Min(4, remainingFake);
- var (start, end) = _taskProcessor.BuildBatchRange(stateForUpdate.CurrentBatchIndex, pickCount);
-
- await _taskProcessor.SendPickWithBatchAsync(task, stateForUpdate, task.RobotSourceAddress, start, end);
-
- stateForUpdate.CurrentBatchIndex += pickCount;
- stateForUpdate.ChangePalletPhase = 4;
- }
- // Phase 4: 鏀惧亣鐢佃姱鍒�5鍙蜂綅锛堜娇鐢� PositionIndex锛�
- else if (stateForUpdate.ChangePalletPhase == 4)
- {
- int fakeCount = targetTotal - targetNormalCount;
- int completedFake = Math.Max(0, currentCompletedCount - targetNormalCount);
- int remainingFake = fakeCount - completedFake;
-
- if (remainingFake <= 0)
- {
- stateForUpdate.ChangePalletPhase = 0;
- stateForUpdate.CurrentBatchIndex = 1;
- stateForUpdate.IsInFakeBatteryMode = false;
- _logger.LogInformation("HandlePutFinishedStateAsync锛氭祦鍚態瀹屾垚锛屼换鍔″彿: {TaskNum}", task.RobotTaskNum);
- return;
- }
-
+ // 娴佸悜A锛氫粠5鍙蜂綅鍙栧亣鐢佃姱
var positions = _taskProcessor.GetNextAvailableFakeBatteryPositions(Math.Min(4, remainingFake));
if (positions.Count == 0)
{
_logger.LogError("HandlePutFinishedStateAsync锛氭棤鍙敤鍋囩數鑺偣浣嶏紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
return;
}
-
- int start = positions.Min();
- int end = positions.Max();
-
- await _taskProcessor.SendPutWithBatchAsync(task, stateForUpdate, "5", start, end);
-
- stateForUpdate.ChangePalletPhase = 3;
+ await _taskProcessor.SendSocketRobotFakeBatteryPickAsync(task, stateForUpdate, positions);
}
+ else
+ {
+ // 娴佸悜B锛氫粠婧愬湴鍧�鍙栧亣鐢佃姱
+ int pickCount = Math.Min(4, remainingFake);
+ var (start, end) = _taskProcessor.BuildBatchRange(stateForUpdate.CurrentBatchIndex, pickCount);
+ await _taskProcessor.SendPickWithBatchAsync(task, stateForUpdate, task.RobotSourceAddress, start, end);
+ stateForUpdate.CurrentBatchIndex += pickCount;
+ }
+
+ // 鍙戝畬 Pick 鍚庡垏鎹㈠埌 Phase=4锛岀瓑 PickFinished 瑙﹀彂 HandlePickFinishedStateAsync 涓嬪彂鏀捐揣鎸囦护
+ stateForUpdate.ChangePalletPhase = 4;
+ _stateManager.TryUpdateStateSafely(ipAddress, stateForUpdate);
+ return;
+ }
+
+ // ==================== Phase 5: 瀹屾垚鍏ュ簱锛坅llputfinished / allpickfinished 瑙﹀彂锛�====================
+ if (stateForUpdate.ChangePalletPhase == 5)
+ {
+ // Phase 5 鐢� allpickfinished/allputfinished 瑙﹀彂鍏ュ簱锛屾湰鏂规硶涓嶅啀涓嬪彂鎸囦护
+ return;
}
}
else
{
// 闈炵粍鐩樹换鍔★紝鐩存帴鍙戦�佸彇璐ф寚浠�
- await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate, false);
+ await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate);
}
}
}
--
Gitblit v1.9.3