Files
YuPu-OrpaonEMS/OrpaonEMS.App/Models/BmsAlarmModel.cs
2025-02-28 22:23:13 +08:00

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