#region << 版 本 注 释 >> /*---------------------------------------------------------------- * 命名空间:WIDESEAWCS_Tasks.ConveyorLineJob * 创建者:胡童庆 * 创建时间:2024/8/2 16:13:36 * 版本:V1.0.0 * 描述: * * ---------------------------------------------------------------- * 修改人: * 修改时间: * 版本:V1.0.1 * 修改说明: * *----------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core.Helper; 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 IStationManagerService _stationManagerService; public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IStationManagerService stationManagerService) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _stationManagerService = stationManagerService; } public Task Execute(IJobExecutionContext context) { try { CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams"); List stationManagers = _stationManagerService.GetStationManagers(); foreach (var item in stationManagers) { try { ushort value = conveyorLine.GetValue(ConveyorLineDBName.InteractiveSignal, item.StationCode); DeviceProtocolDetailDTO? deviceProtocolDetail = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.ProtocalDetailValue == value.ToString()); if (deviceProtocolDetail != null) { ConveyorLineTaskCommand? command = new ConveyorLineTaskCommand() { InteractiveSignal = 0, Barcode = "", TargetAddress = Convert.ToInt32(item.DeviceCode), TaskNum = 9988, TrayType = 3 }; SignalType signalType = Enum.Parse(deviceProtocolDetail.ProtocolDetailType); switch (signalType) { case SignalType.InEntranceRequest: command.Barcode = "InEntranceRequest"; break; case SignalType.InEntranceResponse: command.Barcode = "InEntranceResponse"; break; case SignalType.InEntranceRequestReset: command.Barcode = "InEntranceRequestReset"; break; case SignalType.OutEntranceRequest: command.Barcode = "OutEntranceRequest"; break; case SignalType.OutEntranceResponse: command.Barcode = "OutEntranceResponse"; break; case SignalType.OutEntranceRequestReset: command.Barcode = "OutEntranceRequestReset"; break; case SignalType.InStationRequest: command.Barcode = "InStationRequest"; break; case SignalType.InStationResponse: command.Barcode = "InStationResponse"; break; case SignalType.InStationRequestReset: command.Barcode = "InStationRequestReset"; break; case SignalType.OutStationRequest: command.Barcode = "OutStationRequest"; break; case SignalType.OutStationResponse: command.Barcode = "OutStationResponse"; break; case SignalType.OutStationRequestReset: command.Barcode = "OutStationRequestReset"; break; default: command = null; break; } if (command != null) { conveyorLine.SendCommand(command, item.StationCode); Console.Out.WriteLine(command.Serialize()); } } } catch (Exception ex) { Console.Out.WriteLine(item.StationCode + ":" + ex.ToString()); } } } catch (Exception ex) { Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); } return Task.CompletedTask; } } }