using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IStation.Calculation;
namespace IStation.Server
{
///
/// 监测波动分析计划任务
///
[DisallowConcurrentExecution]//此特性标识 必须等待这次任务执行完成后,才能执行下次任务
public class MonitorFluctAnalyCronJob : IJob
{
///
///
///
public Task Execute(IJobExecutionContext context)
{
return Task.Run(() =>
{
try
{
#region 加载目标客户
var corpIds = CorpHelper.GetCorpIds();
if (corpIds == null || corpIds.Count < 1)
{
LogHelper.Error("监测波动分析计划任务中,未检索到目标客户信息");
return;
}
#endregion
#region 加载监测波动分析配置
var configure_list = new Service.MonitorFluctConfigure().GetByCorpIds(corpIds);
if (configure_list == null || configure_list.Count < 1)
{
LogHelper.Info($"监测波动分析计划任务中,未检索到监测波动分析配置信息!");
return;
}
configure_list = configure_list.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList();
if (configure_list.Count < 1)
{
LogHelper.Info($"监测波动分析计划任务中,未检索到有效监测波动分析配置信息");
return;
}
#endregion
#region 遍历分析
//服务
var service_monitor_fluct = new Service.MonitorFluctRecord();
var service_monitor_record = new Service.MonitorRealRecord();
foreach (var configure in configure_list)
{
var model = new Model.MonitorFluctRecord();
model.CorpID = configure.CorpID;
model.MonitorPointID = configure.MonitorPointID;
model.SignalID = configure.SignalID;
for (int i = 0; i < configure.ContinueDays; i++)
{
var day = DateTime.Now.Date.AddDays(-(i + 1));
var record_list = service_monitor_record.GetContentBySignalIDOfDay(configure.CorpID, configure.MonitorPointID, configure.SignalID, day);
model.Analy(record_list);
}
var bol = service_monitor_fluct.InsertOrUpdate(model);
if (!bol)
{
LogHelper.Info($"监测波动分析计划任务中,客户标识:{configure.CorpID},测点标识:{configure.MonitorPointID},信号标识:{configure.SignalID},监测波形分析数据保存失败!");
}
}
#endregion
}
catch (Exception ex)
{
LogHelper.Error("监测波动分析计划任务中,出错", ex);
var e = new JobExecutionException(ex);
throw e;
}
});
}
}
}