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; } /// /// 遥信报警分析 /// /// /// /// 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, "异常信息"); } }); } /// /// 遥测报警信息处理 设计思路 当报警等级没有发生变化时,不重复报警 /// /// /// /// 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, "异常信息"); } }); } } }