using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using HslCommunication.WebSocket; using Quartz; using WIDESEAWCS_Common; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class CommonConveyorLightJob : JobBase, IJob { private readonly ITaskRepository _taskRepository; private readonly WebSocketServer _webSocketServer; public CommonConveyorLightJob(ITaskRepository taskRepository, WebSocketServer webSocketServer) { _taskRepository = taskRepository; _webSocketServer = webSocketServer; } public Task Execute(IJobExecutionContext context) { bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); if (flag && value != null && value is OtherDevice) { OtherDevice otherDevice = (OtherDevice)value; try { string? dbAddress = otherDevice.DeviceProDTOs.OrderBy(x => x.DeviceProOffset).Select(x => x.DeviceProAddress).FirstOrDefault(); if (!string.IsNullOrEmpty(dbAddress)) { List deviceChildCodes = otherDevice.DeviceProDTOs.GroupBy(x => x.DeviceChildCode).Select(x => x.Key).ToList(); for (int i = 0; i < deviceChildCodes.Count; i++) { if (!LightStatusStorage.LightStatusDic.ContainsKey(deviceChildCodes[i])) { LightStatusStorage.LightStatusDic.Add(deviceChildCodes[i], LightStatusEnum.None); } else { if (LightStatusStorage.LightStatusDic[deviceChildCodes[i]] == LightStatusEnum.LightCompleted) { if (!otherDevice.GetValue(LightStatusEnum.LightCompleted, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightCompleted, true, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightError, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightError, false, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightWorking, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightWorking, false, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightVoice, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightVoice, false, deviceChildCodes[i]); } else if (LightStatusStorage.LightStatusDic[deviceChildCodes[i]] == LightStatusEnum.LightError) { if (otherDevice.GetValue(LightStatusEnum.LightCompleted, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightCompleted, false, deviceChildCodes[i]); if (!otherDevice.GetValue(LightStatusEnum.LightError, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightError, true, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightWorking, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightWorking, false, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightVoice, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightVoice, false, deviceChildCodes[i]); } else if (LightStatusStorage.LightStatusDic[deviceChildCodes[i]] == LightStatusEnum.LightWorking) { if (otherDevice.GetValue(LightStatusEnum.LightCompleted, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightCompleted, false, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightError, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightError, false, deviceChildCodes[i]); if (!otherDevice.GetValue(LightStatusEnum.LightWorking, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightWorking, true, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightVoice, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightVoice, false, deviceChildCodes[i]); } else if (LightStatusStorage.LightStatusDic[deviceChildCodes[i]] == LightStatusEnum.ReadyRelease) { Dt_Task task = _taskRepository.QueryFirst(x => x.NextAddress.Contains(deviceChildCodes[i])); if (task == null) { if (!otherDevice.GetValue(LightStatusEnum.LightCompleted, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightCompleted, true, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightError, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightError, false, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightWorking, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightWorking, false, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightVoice, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightVoice, false, deviceChildCodes[i]); //_webSocketServer发送数据 } } else if (LightStatusStorage.LightStatusDic[deviceChildCodes[i]] == LightStatusEnum.Ready) { if (otherDevice.GetValue(LightStatusEnum.LightCompleted, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightCompleted, false, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightError, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightError, false, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightWorking, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightWorking, false, deviceChildCodes[i]); if (otherDevice.GetValue(LightStatusEnum.LightVoice, deviceChildCodes[i])) otherDevice.SetValue(LightStatusEnum.LightVoice, false, deviceChildCodes[i]); } } } } } catch (Exception ex) { WriteError($"{otherDevice.DeviceCode}-{otherDevice.DeviceName}", ex.Message, ex); } } else { WriteError(nameof(CommonConveyorLightJob), "参数错误,未传递设备参数或设备类型错误"); } return Task.CompletedTask; } } }