#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 childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); foreach (string childDeviceCode in childDeviceCodes) { ConveyorLineTaskCommand command = conveyorLine.ReadCustomer(childDeviceCode); if (command != null) { List signalTypes = Enum.GetValues(typeof(PLCSignalType)).Cast().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(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(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(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(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(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; } } }