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()
//{
//}
}
}