146 lines
6.5 KiB
C#
Raw Normal View History

2024-08-21 16:50:14 +08:00
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, "异常信息");
}
});
}
}
}