using Quartz; using System; using System.Collections.Generic; using System.Threading.Tasks; using ToolLibrary.LogHelper; using Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection; using Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelecommandPlanDto.TelecommandPlanItemDto; using YunDa.ISAS.Entities.DataMonitoring; namespace Yunda.ISAS.DataMonitoringServer.TimeWorkers { /// /// 遥控计划控制定时任务 /// [DisallowConcurrentExecution] public class TelecommandPlanJob : IJob { public async Task Execute(IJobExecutionContext context) { try { var telecomandPlanDatas = TimeWorkService._webApiRequest .GetTelecommandPlanDatas(TimeWorkService._configurationHepler.SubstationId); if (telecomandPlanDatas == null) { return; } Action> sendTelecommandMsg = items => { foreach (var item in items) { TimeWorkService._teleCommandDataSendTask.TelecommandTActionBlock.Post(new TelcommandDataModel() { Telecommand = new TelecommandModel() { Id = (Guid)item.TelecommandConfigurationId, CommandValue = item.TeleCommandValue, CPUSector = item.TelecommandConfiguration.CPUSector, DeviceAddress = item.TelecommandConfiguration.DeviceAddress, DispatcherAddress = item.TelecommandConfiguration.DispatcherAddress, InfoAddress = item.TelecommandConfiguration.InfoAddress, Sender = "遥控计划后台", Source = "Web后台" } }); } }; bool isSameMinTime(DateTime dateTime1, DateTime dateTime2) { return dateTime1.Year == dateTime2.Year && dateTime1.Month == dateTime2.Month && dateTime1.Day == dateTime2.Day && dateTime1.Hour == dateTime2.Hour && dateTime1.Minute == dateTime2.Minute; } foreach (var telecomandPlanData in telecomandPlanDatas) { if (telecomandPlanData.Freq == FreqEnum.DAILY) { if (!isSameMinTime(DateTime.Now, telecomandPlanData.SendTelecommandTime)) { if (DateTime.Now.Hour == telecomandPlanData.StartTime.Hour && DateTime.Now.Minute == telecomandPlanData.StartTime.Minute) { sendTelecommandMsg(telecomandPlanData.TeleCommandPlanSetting.TeleCommandSettingItems); TimeWorkService._webApiRequest .UpdateTelecommandSendTime(telecomandPlanData.Id, DateTime.Now); } } } else if (telecomandPlanData.Freq == FreqEnum.WEEKLY) { if (!isSameMinTime(DateTime.Now, telecomandPlanData.SendTelecommandTime)) { if (DateTime.Now.DayOfWeek == telecomandPlanData.StartTime.DayOfWeek && DateTime.Now.Hour == telecomandPlanData.StartTime.Hour && DateTime.Now.Minute == telecomandPlanData.StartTime.Minute ) { sendTelecommandMsg(telecomandPlanData.TeleCommandPlanSetting.TeleCommandSettingItems); TimeWorkService._webApiRequest .UpdateTelecommandSendTime(telecomandPlanData.Id, DateTime.Now); } } } else if (telecomandPlanData.Freq == FreqEnum.MONTHLY) { if (!isSameMinTime(DateTime.Now, telecomandPlanData.SendTelecommandTime)) { if (DateTime.Now.Day == telecomandPlanData.StartTime.Day && DateTime.Now.Hour == telecomandPlanData.StartTime.Hour && DateTime.Now.Minute == telecomandPlanData.StartTime.Minute) { sendTelecommandMsg(telecomandPlanData.TeleCommandPlanSetting.TeleCommandSettingItems); TimeWorkService._webApiRequest .UpdateTelecommandSendTime(telecomandPlanData.Id, DateTime.Now); } } } else if (telecomandPlanData.Freq == FreqEnum.YEARLY) { if (!isSameMinTime(DateTime.Now, telecomandPlanData.SendTelecommandTime)) { if (DateTime.Now.Day == telecomandPlanData.StartTime.Day && DateTime.Now.Month == telecomandPlanData.StartTime.Month && DateTime.Now.Hour == telecomandPlanData.StartTime.Hour && DateTime.Now.Minute == telecomandPlanData.StartTime.Minute ) { sendTelecommandMsg(telecomandPlanData.TeleCommandPlanSetting.TeleCommandSettingItems); TimeWorkService._webApiRequest .UpdateTelecommandSendTime(telecomandPlanData.Id, DateTime.Now); } } } } } catch (Exception ex) { Log4Helper.Error(this.GetType(), "遥控计划控制定时任务", ex); } } } }