using Autofac.Core; using HslCommunication; using HslCommunication.Core; using Microsoft.VisualBasic.FileIO; using Quartz; using SixLabors.ImageSharp.PixelFormats; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Communicator; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_IBasicInfoService; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.StackerCrane.Enum; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class TestJob : JobBase, IJob { private readonly ITaskService _taskService; private readonly IStationMangerService _stationMangerService; public TestJob(ITaskService taskService, IStationMangerService stationMangerService) { _taskService = taskService;//注入 _stationMangerService = stationMangerService; } public Task Execute(IJobExecutionContext context) { bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); if (flag && value != null) { OtherDevice device = (OtherDevice)value; //Example //device.GetValue 读取 //device.SetValue 写入 // _taskService.Repository 仓储层,进行数据库访问- try { var taskList = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.CPInbound.ObjToInt() && x.TaskState == TaskStatusEnum.CheckShapeing.ObjToInt()); //任务的目标地址对于站台号; foreach (var task in taskList) { ////找到对于站台的管理信息,看看这个站台有没有货,如果有货的话,就进行质检,如果没有货的话,就不进行质检 //var stationMangers = _stationMangerService.Repository.QueryFirst(x => x.StationCode == task.SourceAddress); //device.SetValue(QualityInspectionCommandEnum.StartqualityInspection,true,task.SourceAddress); //如果有货的话,才进行质检,把站台状态该为占用 var R_StockAvailableSymbol = device.GetValue(QualityInspectionCommandEnum.R_StockAvailableSymbol, task.SourceAddress); if (R_StockAvailableSymbol == true) { //stationMangers.IsOccupied=1;//改为占用 //开启质检 device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress); //如果读到质检执行中为true的话,就关闭质检 if (device.GetValue(QualityInspectionCommandEnum.R_QualityInspection, task.SourceAddress)) { device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, false, task.SourceAddress); } //再读取质检结果 var qualityResult = device.GetValue(QualityInspectionCommandEnum.R_QualityInspectionInProgress, task.SourceAddress); //左超宽警告 var R_LeftOverWidthWarning = device.GetValue(QualityInspectionCommandEnum.R_LeftOverWidthWarning, task.SourceAddress); //右超宽警告 var R_RightWideWarning = device.GetValue(QualityInspectionCommandEnum.R_RightWideWarning, task.SourceAddress); //超高警告 var R_ExtremeWarning = device.GetValue(QualityInspectionCommandEnum.R_ExtremeWarning, task.SourceAddress); if (qualityResult) { //如果质检通过了,就把任务状态改为质检完成 task.TaskState = TaskStatusEnum.CheckShapeingOk.ObjToInt(); } else if (R_LeftOverWidthWarning) { task.ExceptionMessage += "质检失败,左超宽"; task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt(); } else if (R_RightWideWarning) { task.ExceptionMessage += "质检失败,右超宽"; } else if (R_ExtremeWarning) { task.ExceptionMessage += "质检失败,超高"; } else if (qualityResult == false) //如果质检失败,就复位 { //写入复位信号 device.SetValue(QualityInspectionCommandEnum.FaultReset, true, task.SourceAddress); } //写入停止质检信号 device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, true, task.SourceAddress); } } WriteInfo(device.DeviceName, "infoLog"); WriteDebug(device.DeviceName, "debugLog"); } catch (Exception ex) { WriteError(device.DeviceName, "错误", ex); } } else { WriteError(nameof(TestJob), "参数错误,未传递设备参数或设备类型错误"); } return Task.CompletedTask; } } }