using WIDESEAWCS_Core.LogHelper; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.ConveyorLine; namespace WIDESEAWCS_Tasks.ConveyorLineNewJob.ManualInbound { /// /// 手动入库任务处理器 /// /// /// 负责处理手动创建的入库任务,当PLC请求入库时,根据childDeviceCode查找任务并写入PLC。 /// public class ManualInboundTaskHandler { /// /// 任务服务 /// private readonly ITaskService _taskService; /// /// 构造函数 /// /// 任务服务 public ManualInboundTaskHandler(ITaskService taskService) { _taskService = taskService; } /// /// 写入手动入库任务到PLC /// /// 输送线设备对象 /// 子设备编码 /// 任务实体 public void WriteTaskToPlc(CommonConveyorLine conveyorLine, string childDeviceCode, Dt_Task task) { if (conveyorLine == null || string.IsNullOrEmpty(childDeviceCode) || task == null) { QuartzLogger.Error("ManualInboundTaskHandler.WriteTaskToPlc: 参数为空", "ManualInbound"); return; } try { // 写入任务号 conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, (short)task.TaskNum, childDeviceCode); // 写入起始地址 conveyorLine.SetValue(ConveyorLineDBNameNew.Source, short.Parse(task.SourceAddress ?? "0"), childDeviceCode); // 写入目标地址 conveyorLine.SetValue(ConveyorLineDBNameNew.Target, short.Parse(task.NextAddress ?? "0"), childDeviceCode); // 更新任务状态到下一阶段 var updateResult = _taskService.UpdateTaskStatusToNext(task); if (!updateResult.Status) { QuartzLogger.Error($"ManualInboundTaskHandler: 更新任务状态失败,任务号【{task.TaskNum}】,错误信息:{updateResult.Message}", conveyorLine.DeviceCode); return; } // 写入ACK标志 conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); QuartzLogger.Info($"ManualInboundTaskHandler: 手动任务写入PLC成功,任务号【{task.TaskNum}】,源地址【{task.SourceAddress}】", conveyorLine.DeviceCode); } catch (Exception ex) { QuartzLogger.Error($"ManualInboundTaskHandler: 写入输送线任务异常,错误信息:{ex.Message}", "ManualInbound"); } } } }