wanshenmean
3 天以前 7278264f027d62664a0209699d0f66a22fd06a8e
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using Quartz;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_QuartzJob.StackerCrane;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_Tasks.StackerCraneJob;
 
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class FormationCommonStackerCraneJob : IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
 
        private readonly FormationStackerCraneTaskSelector _taskSelector;
        private readonly FormationStackerCraneCommandBuilder _commandBuilder;
 
        public FormationCommonStackerCraneJob(
            ITaskService taskService,
            ITaskExecuteDetailService taskExecuteDetailService,
            ITaskRepository taskRepository,
            IRouterService routerService)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
 
            _taskSelector = new FormationStackerCraneTaskSelector(taskService, routerService);
            _commandBuilder = new FormationStackerCraneCommandBuilder(taskService, routerService);
        }
 
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " FormationCommonStackerCraneJob Start");
 
                bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
                if (!flag || value is not SpeFormationStackerCrane commonStackerCrane)
                {
                    return Task.CompletedTask;
                }
 
                if (!commonStackerCrane.IsEventSubscribed)
                {
                    commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
                }
 
                if (commonStackerCrane.StackerCraneStatusValue != FormationStackerCraneRunStatus.Standby)
                {
                    return Task.CompletedTask;
                }
 
                commonStackerCrane.CheckStackerCraneTaskCompleted();
 
                if (commonStackerCrane.StackerCraneWorkStatusValue != FormationStackerCraneOperationStatus.Idle)
                {
                    return Task.CompletedTask;
                }
 
                Dt_Task? task = _taskSelector.SelectTask(commonStackerCrane);
                if (task == null)
                {
                    return Task.CompletedTask;
                }
 
                var stackerCraneTaskCommand = _commandBuilder.ConvertToStackerCraneTaskCommand(task);
                if (stackerCraneTaskCommand == null)
                {
                    return Task.CompletedTask;
                }
 
                bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
                if (sendFlag)
                {
                    commonStackerCrane.LastTaskType = task.TaskType;
                    _taskService.UpdateTaskStatusToNext(task.TaskNum);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"FormationCommonStackerCraneJob Error: {ex.Message}");
            }
 
            return Task.CompletedTask;
        }
 
        /// <summary>
        /// 任务完成事件订阅的方法
        /// </summary>
        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e)
        {
            SpeFormationStackerCrane? commonStackerCrane = sender as SpeFormationStackerCrane;
            if (commonStackerCrane != null)
            {
                if (commonStackerCrane.GetValue<FormationStackerCraneDBName, short>(FormationStackerCraneDBName.WorkType) != 7)
                {
                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                    _taskService.StackCraneTaskCompleted(e.TaskNum);
                    commonStackerCrane.SetValue(FormationStackerCraneDBName.WorkType, 4);
                }
            }
        }
    }
}