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");
}
}
}
}