using WIDESEAWCS_Core.LogHelper;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.ConveyorLine;
|
|
namespace WIDESEAWCS_Tasks.ConveyorLineNewJob.ManualInbound
|
{
|
/// <summary>
|
/// 手动入库任务处理器
|
/// </summary>
|
/// <remarks>
|
/// 负责处理手动创建的入库任务,当PLC请求入库时,根据childDeviceCode查找任务并写入PLC。
|
/// </remarks>
|
public class ManualInboundTaskHandler
|
{
|
/// <summary>
|
/// 任务服务
|
/// </summary>
|
private readonly ITaskService _taskService;
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
/// <param name="taskService">任务服务</param>
|
public ManualInboundTaskHandler(ITaskService taskService)
|
{
|
_taskService = taskService;
|
}
|
|
/// <summary>
|
/// 写入手动入库任务到PLC
|
/// </summary>
|
/// <param name="conveyorLine">输送线设备对象</param>
|
/// <param name="childDeviceCode">子设备编码</param>
|
/// <param name="task">任务实体</param>
|
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.TargetAddress ?? "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");
|
}
|
}
|
}
|
}
|