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/RobotTaskProcessor.cs | 80 +++++++++++++++++++++++++++++++++++++++
1 files changed, 79 insertions(+), 1 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
index cd89884..fb5ef53 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
@@ -69,6 +69,14 @@
private readonly HttpClientHelper _httpClientHelper;
/// <summary>
+ /// 鍋囩數鑺钩闈㈢偣浣嶆湇鍔�
+ /// </summary>
+ /// <remarks>
+ /// 鐢ㄤ簬绠$悊鍋囩數鑺钩闈㈢偣浣嶇殑鍒嗛厤鍜岀姸鎬併��
+ /// </remarks>
+ private readonly IFakeBatteryPositionService _fakeBatteryPositionService;
+
+ /// <summary>
/// 鏃ュ織璁板綍鍣�
/// </summary>
private readonly ILogger _logger;
@@ -88,7 +96,8 @@
IRobotTaskService robotTaskService,
ITaskService taskService,
HttpClientHelper httpClientHelper,
- ILogger logger)
+ ILogger logger,
+ IFakeBatteryPositionService fakeBatteryPositionService)
{
_socketClientGateway = socketClientGateway;
_stateManager = stateManager;
@@ -96,6 +105,7 @@
_taskService = taskService;
_httpClientHelper = httpClientHelper;
_logger = logger;
+ _fakeBatteryPositionService = fakeBatteryPositionService;
}
/// <summary>
@@ -190,6 +200,74 @@
}
/// <summary>
+ /// 涓嬪彂鍋囩數鑺彇璐ф寚浠ゅ埌鏈哄櫒浜哄鎴风
+ /// </summary>
+ /// <remarks>
+ /// 鍙戦�佹牸寮忥細Pickbattery,5,{startPosition}-{endPosition}
+ /// 渚嬪锛歅ickbattery,5,1-3 琛ㄧず浠庡亣鐢佃姱浣嶇疆5鎶撳彇锛屽钩闈㈢偣浣�1鍒�3
+ ///
+ /// 涓嬪彂鎴愬姛鍚庯細
+ /// 1. 鏍囪鐐逛綅涓哄凡浣跨敤
+ /// 2. 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
+ /// 3. 瀹夊叏鏇存柊鐘舵�佸埌 Redis
+ /// </remarks>
+ /// <param name="task">瑕佷笅鍙戠殑浠诲姟瀵硅薄</param>
+ /// <param name="state">鏈哄櫒浜哄綋鍓嶇姸鎬�</param>
+ /// <param name="positions">瑕佹姄鍙栫殑骞抽潰鐐逛綅鍒楄〃</param>
+ public async Task SendSocketRobotFakeBatteryPickAsync(Dt_RobotTask task, RobotSocketState state, List<int> positions)
+ {
+ if (positions == null || positions.Count == 0)
+ {
+ _logger.LogWarning("SendSocketRobotFakeBatteryPickAsync锛氬钩闈㈢偣浣嶅垪琛ㄤ负绌猴紝浠诲姟鍙�: {TaskNum}", task.RobotTaskNum);
+ return;
+ }
+
+ // 璁$畻鐐逛綅鑼冨洿锛屾牸寮忥細1-3
+ int startPos = positions.Min();
+ int endPos = positions.Max();
+ string taskString = $"Pickbattery,5,{startPos}-{endPos}";
+
+ // 鏍囪鐐逛綅涓哄凡浣跨敤
+ _fakeBatteryPositionService.MarkAsUsed(positions);
+
+ // 閫氳繃 Socket 缃戝叧鍙戦�佹寚浠ゅ埌鏈哄櫒浜哄鎴风
+ bool result = await _socketClientGateway.SendToClientAsync(state.IPAddress, taskString);
+
+ if (result)
+ {
+ _logger.LogInformation("涓嬪彂鍋囩數鑺彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {TaskString}锛岀偣浣�: {Positions}锛岃澶�: {DeviceName}",
+ taskString, string.Join(",", positions), state.RobotCrane?.DeviceName);
+ QuartzLogger.Info($"涓嬪彂鍋囩數鑺彇璐ф寚浠ゆ垚鍔燂紝鎸囦护: {taskString}", state.RobotCrane?.DeviceName);
+
+ // 鏇存柊浠诲姟鐘舵�佷负"鏈哄櫒浜烘墽琛屼腑"
+ task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
+
+ // 灏嗕换鍔″叧鑱斿埌鐘舵�佸璞�
+ state.CurrentTask = task;
+
+ if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+ {
+ await _robotTaskService.UpdateRobotTaskAsync(task);
+ }
+ }
+ else
+ {
+ _logger.LogError("涓嬪彂鍋囩數鑺彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {TaskString}锛岃澶�: {DeviceName}", taskString, state.RobotCrane?.DeviceName);
+ QuartzLogger.Error($"涓嬪彂鍋囩數鑺彇璐ф寚浠ゅけ璐ワ紝鎸囦护: {taskString}", state.RobotCrane?.DeviceName);
+ }
+ }
+
+ /// <summary>
+ /// 鑾峰彇涓婲涓彲鐢ㄧ殑鍋囩數鑺钩闈㈢偣浣�
+ /// </summary>
+ /// <param name="count">闇�瑕佽幏鍙栫殑鐐逛綅鏁伴噺</param>
+ /// <returns>鍙敤鐐逛綅鍒楄〃</returns>
+ public List<int> GetNextAvailableFakeBatteryPositions(int count)
+ {
+ return _fakeBatteryPositionService.GetNextAvailable(count);
+ }
+
+ /// <summary>
/// 澶勭悊鍏ュ簱浠诲姟鍥炰紶锛堟媶鐩�/缁勭洏/鎹㈢洏鍦烘櫙锛�
/// </summary>
/// <remarks>
--
Gitblit v1.9.3