wanshenmean
5 天以前 b0327633d7d0c19693a4e577d1e17b3b22e8274e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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");
            }
        }
    }
}