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);
}
}
}
}