#region << 版 本 注 释 >>
|
/*----------------------------------------------------------------
|
* 命名空间:WIDESEAWCS_Tasks.ConveyorLineJob
|
* 创建者:胡童庆
|
* 创建时间:2024/8/2 16:13:36
|
* 版本:V1.0.0
|
* 描述:
|
*
|
* ----------------------------------------------------------------
|
* 修改人:
|
* 修改时间:
|
* 版本:V1.0.1
|
* 修改说明:
|
*
|
*----------------------------------------------------------------*/
|
#endregion << 版 本 注 释 >>
|
|
using AutoMapper;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
|
using Quartz;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_IBasicInfoService;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.DTO;
|
using WIDESEAWCS_Tasks.ConveyorLineJob;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
public class CommonConveyorLineJob : IJob
|
{
|
private readonly ITaskService _taskService;
|
private readonly ITaskExecuteDetailService _taskExecuteDetailService;
|
private readonly IRouterService _routerService;
|
private readonly IMapper _mapper;
|
|
public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper)
|
{
|
_taskService = taskService;
|
_taskExecuteDetailService = taskExecuteDetailService;
|
_routerService = routerService;
|
_mapper = mapper;
|
}
|
|
public Task Execute(IJobExecutionContext context)
|
{
|
try
|
{
|
CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
|
if (conveyorLine != null)
|
{
|
List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
|
|
foreach (string childDeviceCode in childDeviceCodes)
|
{
|
ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode);
|
if (command != null)
|
{
|
List<int> signalTypes = Enum.GetValues(typeof(PLCSignalType)).Cast<int>().ToList();
|
if (!signalTypes.Contains(command.InteractiveSignal))
|
{
|
continue;
|
}
|
|
DeviceProtocolDetailDTO? deviceProtocolDetail = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.ProtocalDetailValue == command.InteractiveSignal.ToString() && x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal));
|
if (deviceProtocolDetail != null)
|
{
|
PLCSignalType signalType = Enum.Parse<PLCSignalType>(deviceProtocolDetail.ProtocolDetailType);
|
switch (signalType)
|
{
|
case PLCSignalType.RequestInbound:
|
{
|
if (_taskService.RequestWMsTask(command.Barcode, childDeviceCode).Status)
|
{
|
Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
|
if (task != null)
|
{
|
ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task);
|
taskCommand.InteractiveSignal = command.InteractiveSignal;
|
bool t = conveyorLine.SendCommand(taskCommand, childDeviceCode);
|
|
_taskService.UpdateTaskStatusToNext(task.TaskNum);
|
}
|
}
|
}
|
break;
|
case PLCSignalType.RequestInNextAddress:
|
{
|
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
|
if (task != null)
|
{
|
Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
|
if (newTask != null)
|
{
|
ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask);
|
taskCommand.InteractiveSignal = command.InteractiveSignal;
|
bool t = conveyorLine.SendCommand(taskCommand, childDeviceCode);
|
}
|
}
|
}
|
break;
|
case PLCSignalType.ConveyorLineInFinish:
|
{
|
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
|
if (task != null)
|
{
|
bool t = conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
|
WebResponseContent content = _taskService.UpdateTaskStatusToNext(task.TaskNum);
|
Console.Out.WriteLine(content.Serialize());
|
}
|
}
|
break;
|
case PLCSignalType.RequestOutbound:
|
{
|
Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
|
if (task != null)
|
{
|
ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task);
|
taskCommand.InteractiveSignal = command.InteractiveSignal;
|
bool t = conveyorLine.SendCommand(taskCommand, childDeviceCode);
|
|
_taskService.UpdateTaskStatusToNext(task.TaskNum);
|
}
|
}
|
break;
|
case PLCSignalType.RequestOutNextAddress:
|
{
|
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
|
if (task != null)
|
{
|
Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
|
if (newTask != null)
|
{
|
ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask);
|
taskCommand.InteractiveSignal = command.InteractiveSignal;
|
bool t = conveyorLine.SendCommand(taskCommand, childDeviceCode);
|
}
|
}
|
}
|
break;
|
case PLCSignalType.ConveyorLineOutFinish:
|
{
|
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
|
if (task != null)
|
{
|
bool t = conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
|
WebResponseContent content = _taskService.UpdateTaskStatusToNext(task.TaskNum);
|
Console.Out.WriteLine(content.Serialize());
|
}
|
}
|
break;
|
}
|
}
|
}
|
}
|
}
|
|
}
|
catch (Exception ex)
|
{
|
Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
|
}
|
|
return Task.CompletedTask;
|
}
|
}
|
}
|