using ImTools; using OrpaonEMS.Core.EventHandMsg; using OrpaonEMS.Model.MasterSlave; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; namespace OrpaonEMS.App.Models { /// /// Bms报警模型 /// public class BmsAlarmModel : BindableBase { /// /// 声明委托对象-报警消失时BMS报警复位的触发事件 /// public event EventHandler BmsAlarmResetEventHandler; /// /// 实例化函数 /// /// public BmsAlarmModel(List alarmCells) { ListBmsAlarm = alarmCells; //RtListViewItems = new ObservableCollection() //{ // new RtAlarm() {Content="SDFA",Level=2,CreatTime=DateTime.Now}, // new RtAlarm() {Content="DFGSDF",Level=2,CreatTime=DateTime.Now}, // new RtAlarm() {Content="FGHSFD",Level=3,CreatTime=DateTime.Now}, //}; //报警发布和统计 foreach (var itemAlarm in ListBmsAlarm) { itemAlarm.PubBmsAlarmEventHandler += ItemAlarm_PubBmsAlarmEventHandler; } } private ObservableCollection _RtListViewItems = new ObservableCollection(); /// /// 实时报警 数据集合 /// public ObservableCollection RtListViewItems { get { return _RtListViewItems; } set { _RtListViewItems = value; RaisePropertyChanged(); } } /// /// 报警发布方法 /// /// /// /// private void ItemAlarm_PubBmsAlarmEventHandler(object sender, BmsAlarmCellEventHandMsg data) { if (data.AlarmState)//报警开始 { //报警开始 AlarmCount++;//报警加1 //当前没有的话,则新增 CurAlarmContent = data.AlarmContent; if (RtListViewItems.Where(a => a.Content == data.AlarmContent).Count() == 0) { RtListViewItems.Add(new RtAlarm() { Content = data.AlarmContent, Level = data.AlarmLevel, CreatTime = data.AlarmTime, }); } return; } //报警消失 AlarmCount--;//报警减1 //找到之前的报警 if (RtListViewItems.Where(a => a.Content == data.AlarmContent).Count() > 0) { //找到并删除 var FindOne = RtListViewItems.FindFirst(a => a.Content == data.AlarmContent); RtListViewItems.Remove(FindOne); } if (data.AlarmContent== CurAlarmContent) { CurAlarmContent = ""; } //报警消失 if (AlarmCount==0) { //报警消失后复位一下 BmsAlarmResetEventHandler(this,"No Alarm"); } } /// /// Bms报警集合数据 /// public List ListBmsAlarm { get; set; } /// /// 获取当前报警信息 /// /// public List GetCurAlarm() { if (AlarmCount > 0) { var ListInfo = new List(); var ListAlarm = ListBmsAlarm.Where(a => a.State == true).ToList(); foreach (var itemAlarm in ListAlarm) { ListInfo.Add($"时间:{itemAlarm.CurTimeInfo.StartTime}-{itemAlarm.Content}"); } return ListInfo; } return new List(); } /// /// 报警个数 /// public int AlarmCount { get; set; } private string _CurAlarmContent; /// /// 当前关注报警内容 /// public string CurAlarmContent { get { return _CurAlarmContent; } set { _CurAlarmContent = value; RaisePropertyChanged(); } } /// /// 当前报警等级 /// public int CurAlarmLevel { get; set; } /// /// 当前报警激活时间 /// public DateTime CurAlarmActiveTime { get; set; } ///// ///// 显示报警数据 ///// ///// //public int TopAlarmCount() //{ //} } }