| | |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_Tasks.Workflow.Abstractions; |
| | | |
| | | namespace WIDESEAWCS_Tasks.Workflow |
| | |
| | | private readonly RobotTaskProcessor _taskProcessor; |
| | | |
| | | /// <summary> |
| | | /// Socket 网关 |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// 用于向客户端发送响应消息。 |
| | | /// </remarks> |
| | | private readonly ISocketClientGateway _socketClientGateway; |
| | | |
| | | /// <summary> |
| | | /// 构造函数 |
| | | /// </summary> |
| | | /// <param name="taskProcessor">任务处理器实例</param> |
| | | public RobotSimpleCommandHandler(RobotTaskProcessor taskProcessor) |
| | | public RobotSimpleCommandHandler(RobotTaskProcessor taskProcessor, ISocketClientGateway socketClientGateway) |
| | | { |
| | | _taskProcessor = taskProcessor; |
| | | _socketClientGateway = socketClientGateway; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | |
| | | // 机器人正在回零 |
| | | case "homing": |
| | | state.OperStatus = "Homing"; |
| | | state.Homed = "Homing"; |
| | | return true; |
| | | |
| | | // 机器人已完成回零 |
| | | case "homed": |
| | | state.OperStatus = "Homed"; |
| | | state.Homed = "Homed"; |
| | | return true; |
| | | |
| | | // 机器人正在运行 |
| | |
| | | |
| | | // 全部取货完成 |
| | | case "allpickfinished": |
| | | { |
| | | // 更新当前动作为"全部取货完成" |
| | | state.CurrentAction = "AllPickFinished"; |
| | | |
| | | // 获取当前关联的任务 |
| | | var currentTask = state.CurrentTask; |
| | | if (currentTask == null) |
| | | { |
| | | // 没有任务关联,返回 false |
| | | // 更新当前动作为"全部取货完成" |
| | | state.CurrentAction = "AllPickFinished"; |
| | | |
| | | // 获取当前关联的任务 |
| | | var currentTask = state.CurrentTask; |
| | | if (currentTask == null) |
| | | { |
| | | // 没有任务关联,返回 false |
| | | return false; |
| | | } |
| | | |
| | | // 判断任务类型 |
| | | var robotTaskType = (RobotTaskTypeEnum)currentTask.RobotTaskType; |
| | | |
| | | // 只有拆盘或换盘任务需要处理入库 |
| | | if (robotTaskType == RobotTaskTypeEnum.SplitPallet || robotTaskType == RobotTaskTypeEnum.ChangePallet) |
| | | { |
| | | // 处理入库任务回传 |
| | | // useSourceAddress: true 表示使用源地址(拆盘/换盘场景) |
| | | if (await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true)) |
| | | { |
| | | // 入库成功,删除任务记录 |
| | | _taskProcessor.DeleteTask(currentTask.RobotTaskId); |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Swap,diskFinished"); |
| | | QuartzLogger.Info($"发送消息:【Swap,diskFinished】", state.RobotCrane.DeviceName); |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | // 判断任务类型 |
| | | var robotTaskType = (RobotTaskTypeEnum)currentTask.RobotTaskType; |
| | | |
| | | // 只有拆盘或换盘任务需要处理入库 |
| | | if (robotTaskType == RobotTaskTypeEnum.SplitPallet || robotTaskType == RobotTaskTypeEnum.ChangePallet) |
| | | { |
| | | // 处理入库任务回传 |
| | | // useSourceAddress: true 表示使用源地址(拆盘/换盘场景) |
| | | if (await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true)) |
| | | { |
| | | // 入库成功,删除任务记录 |
| | | _taskProcessor.DeleteTask(currentTask.RobotTaskId); |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | // 全部放货完成 |
| | | case "allputfinished": |
| | | { |
| | | // 更新当前动作为"全部放货完成" |
| | | state.CurrentAction = "AllPutFinished"; |
| | | |
| | | // 获取当前关联的任务 |
| | | var currentTask = state.CurrentTask; |
| | | if (currentTask == null) |
| | | { |
| | | // 更新当前动作为"全部放货完成" |
| | | state.CurrentAction = "AllPutFinished"; |
| | | |
| | | // 获取当前关联的任务 |
| | | var currentTask = state.CurrentTask; |
| | | if (currentTask == null) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | // 判断任务类型 |
| | | var robotTaskType = (RobotTaskTypeEnum)currentTask.RobotTaskType; |
| | | |
| | | // 只有组盘或换盘任务需要处理入库 |
| | | if (robotTaskType == RobotTaskTypeEnum.GroupPallet || robotTaskType == RobotTaskTypeEnum.ChangePallet) |
| | | { |
| | | // 处理入库任务回传 |
| | | // useSourceAddress: false 表示使用目标地址(组盘/换盘场景) |
| | | if (await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false)) |
| | | { |
| | | // 入库成功,删除任务记录 |
| | | _taskProcessor.DeleteTask(currentTask.RobotTaskId); |
| | | |
| | | // 清理状态,为下一个任务做准备 |
| | | state.CurrentTask = null; // 清除当前任务 |
| | | state.RobotTaskTotalNum = 0; // 重置任务计数 |
| | | state.CellBarcode = new List<string>(); // 清空条码列表 |
| | | |
| | | await _socketClientGateway.SendToClientAsync(state.IPAddress, $"Group,diskFinished"); |
| | | QuartzLogger.Info($"发送消息:【Group,diskFinished】", state.RobotCrane.DeviceName); |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | // 判断任务类型 |
| | | var robotTaskType = (RobotTaskTypeEnum)currentTask.RobotTaskType; |
| | | |
| | | // 只有组盘或换盘任务需要处理入库 |
| | | if (robotTaskType == RobotTaskTypeEnum.GroupPallet || robotTaskType == RobotTaskTypeEnum.ChangePallet) |
| | | { |
| | | // 处理入库任务回传 |
| | | // useSourceAddress: false 表示使用目标地址(组盘/换盘场景) |
| | | if (await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false)) |
| | | { |
| | | // 入库成功,删除任务记录 |
| | | _taskProcessor.DeleteTask(currentTask.RobotTaskId); |
| | | |
| | | // 清理状态,为下一个任务做准备 |
| | | state.CurrentTask = null; // 清除当前任务 |
| | | state.RobotTaskTotalNum = 0; // 重置任务计数 |
| | | state.CellBarcode = new List<string>(); // 清空条码列表 |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | // ==================== 模式切换命令 ==================== |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |