using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.Log; using Aitex.Core.RT.OperationCenter; using Aitex.Core.Util; using CyberX8_Core; using DocumentFormat.OpenXml.Packaging; using MECF.Framework.Common.CommonData; using MECF.Framework.Common.DBCore; using MECF.Framework.Common.Equipment; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace MECF.Framework.Common.Alarm { public class AlarmListManager : Singleton { #region 内部变量 /// /// 模块报警字典 /// private ConcurrentDictionary _moduleAlarmDictionary = new ConcurrentDictionary(); /// /// 模块数据告警字典(key-模块数据项,value-warn对象) /// private ConcurrentDictionary _moduleDataItemWarnDictionary= new ConcurrentDictionary(); /// /// 模块报警数据 /// List _alarmLists = new List(); #endregion /// /// 初始化 /// public void Initialize() { _alarmLists = AlarmListRecorder.GetAllAlarmListDatas(); DATA.Subscribe("System.AlarmList", () => _alarmLists, SubscriptionAttribute.FLAG.IgnoreSaveDB); OP.Subscribe($"Alarm.Acknowledge", AcknowledgeAction); foreach (AlarmList item in _alarmLists) { if (item.AlarmType == (int)AlarmType.Error) { _moduleAlarmDictionary[item.ModuleName] = item; } else if (item.AlarmType == (int)AlarmType.Warning) { _moduleDataItemWarnDictionary[$"{item.ModuleName}.{item.DataItem}"] = item; } } } public bool AcknowledgeAction(string cmd, object[] args) { string moduleName = args[0].ToString(); string dataItem = args[1].ToString(); Acknowledge(moduleName, dataItem); return true; } /// /// 是否包含 /// /// /// public bool IsContained(string moduleName) { return _moduleAlarmDictionary.ContainsKey(moduleName); } /// /// 增加报警 /// /// public void AddAlarm(AlarmList alarm) { if (!_moduleAlarmDictionary.ContainsKey(alarm.ModuleName)) { _moduleAlarmDictionary[alarm.ModuleName] = alarm; AlarmListRecorder.AddAlarmList(alarm); _alarmLists.Add(alarm); } else { _moduleAlarmDictionary[alarm.ModuleName] = alarm; AlarmListRecorder.UpdateAlarmList(alarm); AlarmList alarmList=_alarmLists.Find(O=>O.ModuleName == alarm.ModuleName); if (alarmList != null) { alarmList.Clone(alarm); } } } /// /// 增加Warn /// /// /// /// public bool AddWarn(string moduleName,string dataItem,string warnMsg) { string str = $"{moduleName}.{dataItem}"; if(!_moduleDataItemWarnDictionary.ContainsKey(str)) { AlarmList alarm = new AlarmList(); alarm.ModuleName= moduleName; alarm.DataItem= dataItem; alarm.AlarmMsg= warnMsg; alarm.AlarmType = (int)AlarmType.Warning; alarm.CreateTime = DateTime.Now; _moduleDataItemWarnDictionary[str] = alarm; AlarmListRecorder.AddAlarmList(alarm); _alarmLists.Add(alarm); return true; } return false; } /// /// 确认 /// /// /// public void Acknowledge(string moduleName,string dataItem) { string str = $"{moduleName}.{dataItem}"; if (_moduleDataItemWarnDictionary.ContainsKey(str)) { _moduleDataItemWarnDictionary.TryRemove(str, out AlarmList alarmList); if(alarmList != null) { AlarmListRecorder.RemoveAlarmList(alarmList); AlarmList alarm = _alarmLists.Find(O => O.ModuleName == moduleName && O.AlarmType == (int)AlarmType.Warning && O.DataItem == alarmList.DataItem); if (alarm != null) { _alarmLists.Remove(alarm); } } } } /// /// 获取模块报警信息 /// /// /// public AlarmList GetAlarmListByModule(string moduleName) { return _moduleAlarmDictionary.ContainsKey(moduleName) ? _moduleAlarmDictionary[moduleName]:null; } /// /// 检验模块Alarm确认后移除 /// /// /// public void CheckModuleAlamAndRemove(string moduleName,string state) { if(IsContained(moduleName)) { AlarmList alarmList=GetAlarmListByModule(moduleName); if (alarmList != null ) { if (alarmList.ModuleState == state || string.IsNullOrEmpty(state)) { RemoveAlarm(moduleName); AlarmList alarm=_alarmLists.Find(O=>O.ModuleName==moduleName); if (alarm != null) { _alarmLists.Remove(alarm); } } } } } /// /// 移除报警 /// /// private void RemoveAlarm(string moduleName) { if (_moduleAlarmDictionary.ContainsKey(moduleName)) { _moduleAlarmDictionary.TryRemove(moduleName, out AlarmList alarmList); if (alarmList != null) { AlarmListRecorder.RemoveAlarmList(alarmList); } } } /// /// 清除所有报警 /// public void ClearAllAlarm() { _alarmLists.Clear(); _moduleAlarmDictionary.Clear(); AlarmListRecorder.RemoveAllAlarmList(); } } }