| | |
| | | using System.Net.Sockets; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Tasks.Workflow.Abstractions; |
| | |
| | | var parts = message.Split(','); |
| | | |
| | | // 检查消息格式是否有效:至少要有命令前缀,且状态中有当前任务 |
| | | if (parts.Length < 1 || state.CurrentTask == null) |
| | | if (parts.Length < 1) |
| | | { |
| | | return; |
| | | } |
| | |
| | | .ToArray(); |
| | | |
| | | // 从数据库重新查询当前任务(确保获取最新状态) |
| | | var task = await _robotTaskService.Repository.QueryFirstAsync(x => x.RobotTaskId == state.CurrentTask.RobotTaskId); |
| | | var task = await _robotTaskService.Repository.QueryFirstAsync(x => x.RobotTaskState == TaskRobotStatusEnum.RobotExecuting.GetHashCode() && x.RobotRoadway == state.RobotCrane.DeviceName); |
| | | |
| | | if (task != null) |
| | | { |
| | |
| | | // 换盘任务:根据阶段区分处理 |
| | | if (state.ChangePalletPhase == 2) |
| | | { |
| | | if (isFlowA) |
| | | { |
| | | // 流向A Phase2:放假电芯到目标托盘,不调用 API,不递增计数 |
| | | // 仅更新状态 |
| | | } |
| | | else |
| | | { |
| | | // 流向B Phase2:放正常电芯,递增计数 |
| | | state.RobotTaskTotalNum += positions.Length; |
| | | if (task != null) |
| | | task.RobotTaskTotalNum -= positions.Length; |
| | | // Phase 2:放正常电芯到目标托盘完成,递增计数 |
| | | state.RobotTaskTotalNum += positions.Length; |
| | | if (task != null) |
| | | task.RobotTaskTotalNum -= positions.Length; |
| | | |
| | | // 构建库存 DTO 并调用 ChangePalletAsync API |
| | | var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions); |
| | | var result = _taskProcessor.PostGroupPalletAsync(nameof(ConfigKey.ChangePalletAsync), stockDTO); |
| | | putSuccess = result.Data.Status && result.IsSuccess; |
| | | } |
| | | // 两流向均调用换盘 API |
| | | var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions); |
| | | var result = _taskProcessor.PostGroupPalletAsync(nameof(ConfigKey.ChangePalletAsync), stockDTO); |
| | | putSuccess = result.Data.Status && result.IsSuccess; |
| | | |
| | | // 切回 Phase 1,继续取正常电芯 |
| | | 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; |
| | | } |
| | | else |
| | | { |
| | | // 流向B:放假电芯到5号位,释放点位 |
| | | _fakeBatteryPositionService.MarkAsAvailable(positions.ToList()); |
| | | } |
| | | |
| | | // 切回 Phase 3,继续取假电芯 |
| | | state.ChangePalletPhase = 3; |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |