| | |
| | | using System.Net.Sockets; |
| | | using Serilog; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Tasks.Workflow.Abstractions; |
| | |
| | | private readonly IFakeBatteryPositionService _fakeBatteryPositionService; |
| | | |
| | | /// <summary> |
| | | /// 日志记录器 |
| | | /// </summary> |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// 构造函数 |
| | | /// </summary> |
| | | /// <param name="robotTaskService">任务服务</param> |
| | |
| | | /// <param name="stateManager">状态管理器</param> |
| | | /// <param name="socketClientGateway">Socket 网关</param> |
| | | /// <param name="fakeBatteryPositionService">假电芯位置服务</param> |
| | | /// <param name="logger">日志记录器</param> |
| | | public RobotPrefixCommandHandler( |
| | | IRobotTaskService robotTaskService, |
| | | RobotTaskProcessor taskProcessor, |
| | | RobotStateManager stateManager, |
| | | ISocketClientGateway socketClientGateway, |
| | | IFakeBatteryPositionService fakeBatteryPositionService) |
| | | IFakeBatteryPositionService fakeBatteryPositionService, |
| | | ILogger logger) |
| | | { |
| | | _robotTaskService = robotTaskService; |
| | | _taskProcessor = taskProcessor; |
| | | _stateManager = stateManager; |
| | | _socketClientGateway = socketClientGateway; |
| | | _fakeBatteryPositionService = fakeBatteryPositionService; |
| | | _logger = logger; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | 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) |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | Console.WriteLine($"RobotJob HandleAsync Warning: Current task not found for RobotTaskId {state.CurrentTask.RobotTaskId}"); |
| | | QuartzLogHelper.LogWarn(_logger, $"RobotJob HandleAsync Warning: Current task not found for RobotTaskId {state.CurrentTask.RobotTaskId}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // 捕获并记录异常,防止异常向上传播导致消息处理中断 |
| | | Console.WriteLine($"RobotJob MessageReceived Error: {ex.Message}"); |
| | | QuartzLogHelper.LogError(_logger, ex, $"RobotJob MessageReceived Error: {ex.Message}", $"RobotJob MessageReceived Error: {ex.Message}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | } |
| | | } |
| | | |