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