| | |
| | | using Microsoft.Extensions.Logging; |
| | | using Quartz; |
| | | using Serilog; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Common; |
| | | using WIDESEAWCS_Core.Caches; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_RedisService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Tasks.SocketServer; |
| | | using WIDESEAWCS_Tasks.Workflow; |
| | | using WIDESEAWCS_Tasks.Workflow.Abstractions; |
| | |
| | | /// <summary> |
| | | /// 日志记录器 |
| | | /// </summary> |
| | | private readonly ILogger<RobotJob> _logger; |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// 构造函数 |
| | |
| | | ITaskService taskService, |
| | | IRobotStateRepository robotStateRepository, |
| | | HttpClientHelper httpClientHelper, |
| | | ILogger<RobotJob> logger, |
| | | ILogger logger, |
| | | IFakeBatteryPositionService fakeBatteryPositionService) |
| | | { |
| | | // 初始化状态管理器,传入仓储服务 |
| | |
| | | |
| | | // 初始化命令处理器 |
| | | // 简单命令处理器:处理状态更新等简单命令 |
| | | var simpleCommandHandler = new RobotSimpleCommandHandler(_taskProcessor, socketGateway); |
| | | var simpleCommandHandler = new RobotSimpleCommandHandler(_taskProcessor, socketGateway, _logger); |
| | | // 前缀命令处理器:处理 pickfinished、putfinished 等带参数的命令 |
| | | var prefixCommandHandler = new RobotPrefixCommandHandler(robotTaskService, _taskProcessor, _stateManager, socketGateway, fakeBatteryPositionService); |
| | | var prefixCommandHandler = new RobotPrefixCommandHandler(robotTaskService, _taskProcessor, _stateManager, socketGateway, fakeBatteryPositionService, _logger); |
| | | |
| | | // 初始化消息路由器 |
| | | _messageRouter = new RobotMessageHandler(socketGateway, _stateManager, cache, simpleCommandHandler, prefixCommandHandler, logger); |
| | | _messageRouter = new RobotMessageHandler(socketGateway, _stateManager, simpleCommandHandler, prefixCommandHandler, logger); |
| | | |
| | | // 初始化工作流编排器 |
| | | _workflowOrchestrator = new RobotWorkflowOrchestrator(_stateManager, _clientManager, _taskProcessor, robotTaskService, _logger); |
| | |
| | | { |
| | | // 将消息路由器的处理方法绑定到 TCP 服务器的消息接收事件 |
| | | tcpSocket.MessageReceived += _messageRouter.HandleMessageReceivedAsync; |
| | | _logger.LogError("机器手TCP消息事件已订阅"); |
| | | QuartzLogger.Error($"机器手TCP消息事件已订阅"); |
| | | QuartzLogHelper.LogError(_logger, $"机器手TCP消息事件已订阅", "Unknown"); |
| | | } |
| | | } |
| | | |
| | |
| | | /// <param name="state">断开连接的机械手状态</param> |
| | | private void OnClientDisconnected(object? sender, RobotSocketState state) |
| | | { |
| | | _logger.LogError("客户端已断开连接"); |
| | | QuartzLogger.Error($"客户端已断开连接", state.RobotCrane.DeviceName); |
| | | QuartzLogHelper.LogError(_logger, $"客户端已断开连接", state.RobotCrane.DeviceName); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | // 异常处理已在组件内部进行,Job 层保持兜底语义 |
| | | // 记录异常而不是静默吞掉,便于排查问题 |
| | | _logger?.LogError(ex, "RobotJob执行异常,IP: {IpAddress}", ipAddress); |
| | | QuartzLogger.Error($"RobotJob执行异常,IP: {ipAddress}", state.RobotCrane.DeviceName, ex); |
| | | QuartzLogHelper.LogError(_logger, ex, $"RobotJob执行异常,IP: {ipAddress}", $"RobotJob执行异常,IP: {ipAddress}", state.RobotCrane.DeviceName); |
| | | } |
| | | } |
| | | } |