using Quartz;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using IStation.Calculation;
|
|
namespace IStation.Server
|
{
|
/// <summary>
|
/// 报警中断分析任务
|
/// </summary>
|
[DisallowConcurrentExecution]//此特性标识 必须等待这次任务执行完成后,才能执行下次任务
|
public class AlarmInterruptAnalyJob : IJob
|
{
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="context"></param>
|
/// <returns></returns>
|
public Task Execute(IJobExecutionContext context)
|
{
|
|
return Task.Run(() =>
|
{
|
try
|
{
|
|
#region 加载目标客户
|
|
var corpIds = CorpHelper.GetCorpIds();
|
if (corpIds == null || corpIds.Count < 1)
|
{
|
LogHelper.Info("报警中断分析任务中,未检索到目标客户信息");
|
return;
|
}
|
|
#endregion
|
|
#region 加载所有数据中断报警配置
|
|
var configureList = new Service.MonitorAlarmConfigure().GetByCorpIds(corpIds);
|
if (configureList == null || configureList.Count < 1)
|
{
|
LogHelper.Info("报警中断分析任务中,未检索到监测报警配置!");
|
return;
|
}
|
configureList = configureList.Where(x => x.AlarmType == Alarm.Type_Interrupted).ToList();
|
if (configureList.Count < 1)
|
{
|
LogHelper.Info("报警中断分析任务中,未检索到数据中断监测报警配置!");
|
return;
|
}
|
configureList = configureList.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList();
|
if (configureList.Count < 1)
|
{
|
LogHelper.Info("报警中断分析任务中,未检索到有效数据中断监测报警配置!");
|
return;
|
}
|
|
#endregion
|
|
#region 遍历分析
|
|
var service_record = new Service.MonitorRecord();
|
var service_monitor = new Service.MonitorPoint();
|
var service_signal = new Service.Signal();
|
var service_alarm = new Service.MonitorAlarmRecord();
|
foreach (var configure in configureList)
|
{
|
if (!configure.MonitorPointID.HasValue)
|
continue;
|
if (double.TryParse(configure.ThresholdValue, out double thresholdValue))
|
{
|
var monitor = service_monitor.GetByID(configure.CorpID,configure.MonitorPointID.Value);
|
if (monitor == null)
|
continue;
|
if (monitor.UseStatus != Model.eUseStatus.Enable)
|
continue;
|
Model.Signal signal = null;
|
DateTime? lastTime = null;
|
if (!configure.SignalID.HasValue)
|
{
|
var lastRecordList = service_record.GetLastRecord(configure.CorpID, configure.MonitorPointID.Value);
|
if (lastRecordList != null && lastRecordList.Count > 0)
|
{
|
lastTime = lastRecordList.Max(t => t.DataTime);
|
}
|
}
|
else
|
{
|
signal = service_signal.GetByID(configure.CorpID,configure.SignalID.Value);
|
if (signal == null)
|
continue;
|
var lastRecord = service_record.GetLastRecord(configure.CorpID, configure.MonitorPointID.Value, configure.SignalID.Value);
|
if (lastRecord != null)
|
{
|
lastTime = lastRecord.DataTime;
|
}
|
}
|
|
if (AlarmInterruptAnalyHelper.IsAlarm(configure.CorpID, configure.MonitorPointID.Value, configure.SignalID, lastTime, thresholdValue))
|
{
|
var alarm = MonitorAlarmCalcuHelper.Create(monitor,signal,configure,null);
|
var bol = service_alarm.InsertLastRecord(alarm);
|
if (!bol)
|
{
|
LogHelper.Error($"报警中断分析任务中,客户标识:{configure.CorpID},配置标识:{configure.ID},报警记录保存失败!");
|
}
|
}
|
}
|
}
|
|
#endregion
|
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error("报警中断分析任务出错", ex);
|
var e = new JobExecutionException(ex);
|
throw e;
|
}
|
|
});
|
|
|
}
|
|
|
|
|
|
|
}
|
}
|