#region MyRegion #region << 版 本 注 释 >> /*---------------------------------------------------------------- * 命名空间:WIDESEAWCS_Tasks.ConveyorLineJob * 创建者:胡童庆 * 创建时间:2024/8/2 16:13:36 * 版本:V1.0.0 * 描述: * * ---------------------------------------------------------------- * 修改人: * 修改时间: * 版本:V1.0.1 * 修改说明: * *----------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using AutoMapper; using HslCommunication; using Microsoft.AspNetCore.Server.HttpSys; using Newtonsoft.Json; using Quartz; using SqlSugar; using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Threading.Tasks; using WIDESEAWCS_BasicInfoRepository; using WIDESEAWCS_BasicInfoService; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Service; using WIDESEAWCS_Tasks.ConveyorLineJob; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class CommonConveyorLine_AfterJob : JobBase, IJob { private readonly ITaskService _taskService; private readonly ITaskRepository _taskRepository; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly IRouterService _routerService; private readonly IMapper _mapper; private readonly IDt_StationManagerService _stationManagerService; public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IDt_StationManagerService stationManagerService) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _routerService = routerService; _mapper = mapper; _taskRepository = taskRepository; _stationManagerService = stationManagerService; } public Task Execute(IJobExecutionContext context) { try { CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams"); if (conveyorLine != null) { List stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode); foreach (var station in stationManagers) { ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer(station.stationChildCode); DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString()); if (deviceProtocolDetails != null) { MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType); if (method != null) { method.Invoke(this, new object[] { conveyorLine, command, station }); } } } #region 路由方式 //List childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); //foreach (string childDeviceCode in childDeviceCodes) //{ // ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer(childDeviceCode); // if (command.ConveyorLineBarcode.Trim().Contains("\0")) command.ConveyorLineBarcode = ""; // DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString()); // if (deviceProtocolDetails != null) // { // MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType); // if (method != null) // { // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode }); // } // } //} #endregion } } catch (Exception ex) { Console.Out.WriteLine(nameof(CommonConveyorLine_AfterJob) + ":" + ex.ToString()); } finally { //WriteDebug("CommonConveyorLineJob", "test"); //Console.Out.WriteLine(DateTime.Now); } return Task.CompletedTask; } /// /// 输送线请求入库 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, Dt_StationManager stationInfo) { var taskNew = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway); if (taskNew == null) { if (_taskService.RequestTask(command.ConveyorLineBarcode, stationInfo).Result.Status) { Dt_Task task = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway); if (task != null) { //ConveyorLineTaskCommand_After taskCommand = _mapper.Map(task); //taskCommand.InteractiveSignal = command.InteractiveSignal; //taskCommand.ResponState = 1; //taskCommand.ConveyorLineTaskNum = task.TaskNum; //taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress); conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, stationInfo.stationChildCode); //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, 1, task.NextAddress); //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); } } } } /// /// 输送线请求空框 /// /// /// /// public void RequestEmptyOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, Dt_StationManager stationInfo) { if (stationInfo.stationType != 7) return; var taskNew = _taskRepository.QueryFirst(x => x.Roadway == stationInfo.Roadway && x.TaskType == (int)TaskOutboundTypeEnum.OutTray); if (taskNew == null) //不存在空框出库任务 则请求WMS出空库 { if (_taskService.RequestTask(command.ConveyorLineBarcode, stationInfo).Result.Status) { Dt_Task task = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway); if (task != null) { //ConveyorLineTaskCommand_After taskCommand = _mapper.Map(task); //taskCommand.InteractiveSignal = command.InteractiveSignal; //taskCommand.ResponState = 1; //taskCommand.ConveyorLineTaskNum = task.TaskNum; //taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress); //conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, stationInfo.stationChildCode); //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, 1, task.NextAddress); //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); } } } } /// /// 输送线请求入库 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 //public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) //{ // var stationInfo = _stationManagerService.GetStationInfoByChildCode(childDeviceCode); // if (stationInfo != null) // { // //_taskService.r // } // var taskNew = _taskService.QueryCraneConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode); // if (taskNew == null) // { // string barcode = command.ConveyorLineBarcode.TrimEnd(); // if (_taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode).Result.Status) // { // Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); // if (task != null) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map(task); // //taskCommand.InteractiveSignal = command.InteractiveSignal; // taskCommand.ResponState = 1; // taskCommand.ConveyorLineTaskNum = task.TaskNum; // taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress); // conveyorLine.SendCommand(taskCommand, childDeviceCode); // //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(task); // } // } // } //} } } #endregion