167 lines
5.0 KiB
C#
167 lines
5.0 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Bms报警模型
|
|
/// </summary>
|
|
public class BmsAlarmModel : BindableBase
|
|
{
|
|
/// <summary>
|
|
/// 声明委托对象-报警消失时BMS报警复位的触发事件
|
|
/// </summary>
|
|
public event EventHandler<string> BmsAlarmResetEventHandler;
|
|
|
|
/// <summary>
|
|
/// 实例化函数
|
|
/// </summary>
|
|
/// <param name="alarmCells"></param>
|
|
public BmsAlarmModel(List<AlarmCell> alarmCells)
|
|
{
|
|
ListBmsAlarm = alarmCells;
|
|
//RtListViewItems = new ObservableCollection<RtAlarm>()
|
|
//{
|
|
// 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<RtAlarm> _RtListViewItems = new ObservableCollection<RtAlarm>();
|
|
/// <summary>
|
|
/// 实时报警 数据集合
|
|
/// </summary>
|
|
public ObservableCollection<RtAlarm> RtListViewItems
|
|
{
|
|
get { return _RtListViewItems; }
|
|
set { _RtListViewItems = value; RaisePropertyChanged(); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 报警发布方法
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
/// <exception cref="NotImplementedException"></exception>
|
|
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");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Bms报警集合数据
|
|
/// </summary>
|
|
public List<AlarmCell> ListBmsAlarm { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
/// 获取当前报警信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public List<string> GetCurAlarm()
|
|
{
|
|
if (AlarmCount > 0)
|
|
{
|
|
var ListInfo = new List<string>();
|
|
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<string>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 报警个数
|
|
/// </summary>
|
|
public int AlarmCount { get; set; }
|
|
|
|
|
|
private string _CurAlarmContent;
|
|
/// <summary>
|
|
/// 当前关注报警内容
|
|
/// </summary>
|
|
public string CurAlarmContent
|
|
{
|
|
get { return _CurAlarmContent; }
|
|
set { _CurAlarmContent = value; RaisePropertyChanged(); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 当前报警等级
|
|
/// </summary>
|
|
public int CurAlarmLevel { get; set; }
|
|
|
|
/// <summary>
|
|
/// 当前报警激活时间
|
|
/// </summary>
|
|
public DateTime CurAlarmActiveTime { get; set; }
|
|
|
|
///// <summary>
|
|
///// 显示报警数据
|
|
///// </summary>
|
|
///// <returns></returns>
|
|
//public int TopAlarmCount()
|
|
//{
|
|
|
|
//}
|
|
}
|
|
}
|