using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using IStation.Calculation;
|
|
namespace IStation.Server
|
{
|
/// <summary>
|
/// 当前报警分析任务辅助类
|
/// </summary>
|
public class AlarmCurrentAnalyJobHelper : IJobHelper
|
{
|
private readonly RabbitMqExChangeHelper _queueHelper = new RabbitMqExChangeHelper();
|
|
/// <summary>
|
/// 开始任务
|
/// </summary>
|
public Task StartJob()
|
{
|
return Task.Run(() =>
|
{
|
_queueHelper.Receive<List<Model.MonitorBasicRecord>>(ConfigHelper.RunExchangeName, (list) =>
|
{
|
try
|
{
|
if (list == null || list.Count < 1)
|
{
|
LogHelper.Info("当前报警分析任务中,数据序列化失败");
|
return true;
|
}
|
var service_monitor = new Service.MonitorPoint();
|
var service_signal = new Service.Signal();
|
var service_alarm_configure = new Service.MonitorAlarmConfigure();
|
var service_alarm_record = new Service.MonitorAlarmRecord();
|
var group_list = list.GroupBy(x => new { x.CorpID, x.MonitorPointID }).ToList();
|
//循环遍历
|
foreach (var group in group_list)
|
{
|
var monitor = service_monitor.GetByID(group.Key.CorpID, group.Key.MonitorPointID);
|
if (monitor == null)
|
continue;
|
if (monitor.UseStatus != Model.eUseStatus.Enable)
|
continue;
|
var configure_only_list = service_alarm_configure.GetOnlyByMonitorPointID(group.Key.CorpID, group.Key.MonitorPointID);
|
configure_only_list = configure_only_list?.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList();
|
if (configure_only_list != null&&configure_only_list.Count>0)
|
{
|
foreach (var configure_only in configure_only_list)
|
{
|
if (MonitorAlarmCalcuHelper.Verify(configure_only, null,
|
() => MonitorRecord4AlarmCacheHelper.GetFirstByMonitorPointID(monitor.CorpID, monitor.ID),
|
() => MonitorRecord4AlarmCacheHelper.GetFirstUnChangedByMonitorPointID(monitor.CorpID, monitor.ID)))
|
{
|
var alarm = MonitorAlarmCalcuHelper.Create(monitor, null, configure_only, null);
|
service_alarm_record.InsertLastRecord(alarm);
|
}
|
}
|
}
|
foreach (var record in group)
|
{
|
var signal = service_signal.GetByID(record.CorpID, record.SignalID);
|
if (signal == null)
|
continue;
|
var configure_list = service_alarm_configure.GetBySignalID(signal.CorpID, signal.MonitorPointID, signal.ID);
|
if (configure_list == null || configure_list.Count < 1)
|
{
|
configure_list = service_alarm_configure.GetCommonBySignalType(signal.CorpID, signal.SignalType);
|
if (configure_list == null || configure_list.Count < 1)
|
continue;
|
}
|
configure_list = configure_list.Where(x => x.UseStatus == Model.eUseStatus.Enable).ToList();
|
if (configure_list != null && configure_list.Count > 0)
|
{
|
foreach (var configure in configure_list)
|
{
|
if (MonitorAlarmCalcuHelper.Verify(configure, record,
|
() => MonitorRecord4AlarmCacheHelper.GetBySignalID(signal.CorpID, signal.MonitorPointID, signal.ID),
|
() => MonitorRecord4AlarmCacheHelper.GetUnChangedBySignalID(signal.CorpID, signal.MonitorPointID, signal.ID)))
|
{
|
var alarm = MonitorAlarmCalcuHelper.Create(monitor, signal, configure, record);
|
service_alarm_record.InsertLastRecord(alarm);
|
}
|
}
|
}
|
}
|
}
|
|
//设置缓存
|
MonitorRecord4AlarmCacheHelper.Set(list);
|
|
return true;
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Error("当前报警分析任务中,数据消息队列出错,自动跳过", ex);
|
return true;
|
}
|
});
|
});
|
|
}
|
|
/// <summary>
|
/// 取消任务
|
/// </summary>
|
public Task CancelJob()
|
{
|
return Task.Run(() =>
|
{
|
if (_queueHelper == null)
|
return;
|
_queueHelper.Close();
|
});
|
}
|
|
|
}
|
}
|