146 lines
6.5 KiB
C#
146 lines
6.5 KiB
C#
![]() |
using Abp.Dependency;
|
|||
|
using Yunda.ISAS.DataMonitoringServer.DataAnalysis.AlarmQueue;
|
|||
|
using Yunda.ISAS.DataMonitoringServer.DataAnalysis.Helper;
|
|||
|
using Yunda.ISAS.DataMonitoringServer.DataCenter;
|
|||
|
using Yunda.ISAS.DataMonitoringServer.WebSocket;
|
|||
|
using Yunda.ISAS.DataMonitoringServer.WebSocket.Model;
|
|||
|
using Yunda.ISAS.MongoDB.Entities.DataMonitoring;
|
|||
|
using YunDa.ISAS.DataTransferObject.EquipmentLiveData;
|
|||
|
|
|||
|
namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis
|
|||
|
{
|
|||
|
public class AlarmAnalysis : ISingletonDependency
|
|||
|
{
|
|||
|
private readonly ConfigurationHepler _configurationHepler;
|
|||
|
private readonly DataRepository _dataRepository;
|
|||
|
private readonly WebSocketServer _webSocketServer;
|
|||
|
private readonly AlarmQueueDataPublish _alarmQueueDataPublish;
|
|||
|
public AlarmAnalysis(ConfigurationHepler configurationHepler,
|
|||
|
DataRepository dataRepository,
|
|||
|
WebSocketServer webSocketController,
|
|||
|
AlarmQueueDataPublish alarmQueueDataPublish
|
|||
|
)
|
|||
|
{
|
|||
|
_alarmQueueDataPublish = alarmQueueDataPublish;
|
|||
|
_configurationHepler = configurationHepler;
|
|||
|
_webSocketServer = webSocketController;
|
|||
|
_dataRepository = dataRepository;
|
|||
|
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 遥信报警分析
|
|||
|
/// </summary>
|
|||
|
/// <param name="e"></param>
|
|||
|
/// <param name="selesignal"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public Task HandleTelesignalAlarmAsync(EquipmentDataModel e, TelesignalisationModel selesignal)
|
|||
|
{
|
|||
|
return Task.Run(() =>
|
|||
|
{
|
|||
|
if (!selesignal.IsAlarm)
|
|||
|
return;
|
|||
|
//如果解除报警,则跳过报警推送与记录
|
|||
|
if (_alarmQueueDataPublish.IsClearAlarm((Guid)selesignal.Id))
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
try
|
|||
|
{
|
|||
|
TeleAlarmResult selesignalAlarmResult = new TeleAlarmResult
|
|||
|
{
|
|||
|
AlarmLevel = selesignal.DMAlarmCategory.Level,
|
|||
|
AlarmName = selesignal.DMAlarmCategory.Name,
|
|||
|
DMAlarmCategoryId = selesignal.DMAlarmCategory.Id,
|
|||
|
AlarmTime = selesignal.ResultTime,
|
|||
|
EquipmentTypeId = e.EquipmentTypeId,
|
|||
|
EquipmentTypeName = e.EquipmentTypeName,
|
|||
|
EquipmentInfoName = e.EquipmentInfoName,//EquipmentInfoId
|
|||
|
EquipmentInfoId = e.EquipmentInfoId,//EquipmentInfoId
|
|||
|
ResultValue = selesignal.ResultValue,
|
|||
|
ConfigurationId = selesignal.Id,
|
|||
|
ConfigurationName = selesignal.Name,
|
|||
|
TransformerSubstationId = _configurationHepler.SubstationId,
|
|||
|
SubstationName = _configurationHepler.SubstationName,
|
|||
|
ConfigurationType = ConfigurationTypeEnum.Telesignalisation
|
|||
|
};
|
|||
|
_dataRepository.TeleAlarmResultRepository.InsertOne(selesignalAlarmResult);
|
|||
|
//发送报警至客户端
|
|||
|
DataMonitorMessageModel messageModel = new DataMonitorMessageModel()
|
|||
|
{
|
|||
|
Content = selesignalAlarmResult,
|
|||
|
GroupType = GroupTypeEnum.All,
|
|||
|
MessageType = MessgeTypeEnum.Alarm,
|
|||
|
};
|
|||
|
//#warning Send
|
|||
|
_webSocketServer.SendMsg(messageModel);
|
|||
|
_alarmQueueDataPublish.TelesignalAlarmAsync(e, selesignal);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MonitoringEventBus.LogHandler(ex.Message, "异常信息");
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 遥测报警信息处理 设计思路 当报警等级没有发生变化时,不重复报警
|
|||
|
/// </summary>
|
|||
|
/// <param name="e"></param>
|
|||
|
/// <param name="telemetering"></param>
|
|||
|
/// <param name="alarm"></param>
|
|||
|
public Task HandleTelemeteringAlarmAsync(EquipmentDataModel e, TelemeteringModel telemetering)
|
|||
|
{
|
|||
|
return Task.Run(() =>
|
|||
|
{
|
|||
|
var alarm = telemetering.AnalysisAlarm();
|
|||
|
if (alarm == null)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
if (_alarmQueueDataPublish.IsClearAlarm((Guid)alarm.Id))
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
try
|
|||
|
{
|
|||
|
//保存报警至MongoDB
|
|||
|
if (alarm == null) return;
|
|||
|
TeleAlarmResult telemeteringAlarmResult = new TeleAlarmResult()
|
|||
|
{
|
|||
|
AlarmLevel = alarm.DMAlarmCategory.Level,
|
|||
|
AlarmName = alarm.DMAlarmCategory.Name,
|
|||
|
DMAlarmCategoryId = alarm.DMAlarmCategory.Id,
|
|||
|
AlarmTime = telemetering.ResultTime,
|
|||
|
EquipmentTypeId = e.EquipmentTypeId,
|
|||
|
EquipmentTypeName = e.EquipmentTypeName,
|
|||
|
EquipmentInfoName = e.EquipmentInfoName,
|
|||
|
EquipmentInfoId = e.EquipmentInfoId,
|
|||
|
ResultValue = telemetering.ResultValue,
|
|||
|
ConfigurationId = telemetering.Id,
|
|||
|
ConfigurationName = telemetering.Name,
|
|||
|
TransformerSubstationId = _configurationHepler.SubstationId,
|
|||
|
SubstationName = _configurationHepler.SubstationName,
|
|||
|
ConfigurationType = ConfigurationTypeEnum.Telemetering
|
|||
|
};
|
|||
|
_dataRepository.TeleAlarmResultRepository.InsertOne(telemeteringAlarmResult);
|
|||
|
//发送报警至客户端
|
|||
|
DataMonitorMessageModel messageModel = new DataMonitorMessageModel()
|
|||
|
{
|
|||
|
Content = telemeteringAlarmResult,
|
|||
|
GroupType = GroupTypeEnum.All,
|
|||
|
MessageType = MessgeTypeEnum.Alarm,
|
|||
|
};
|
|||
|
//#warning Send
|
|||
|
_webSocketServer.SendMsg(messageModel);
|
|||
|
_alarmQueueDataPublish.TelemeteringAlarmAsync(e, telemetering, alarm);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MonitoringEventBus.LogHandler(ex.Message, "异常信息");
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
}
|