using FLY.OBJComponents.Common; using FLY.OBJComponents.IService; using FObjBase; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FLY.OBJComponents.Server { /// <summary> /// 报警管理系统 /// </summary> public class WarningSystem2 : IWarningSystem2Service { public event PropertyChangedEventHandler PropertyChanged; #region IWarningSystem2Service /// <summary> /// 使能 /// </summary> public bool Enable { get; set; } /// <summary> /// 正在响铃 /// </summary> public bool IsRinging { get; private set; } /// <summary> /// 当前正在报警的!!!!!! /// </summary> public FlyData_WarningHistory[] ReasonList { get; private set; } /// <summary> /// 最后一条数据Id /// </summary> public long LastId { get; set; } #endregion /// <summary> /// ReasonList 的原始数据, errors 与 ReasonList 需要同步 /// </summary> private List<FlyData_WarningHistory> errors = new List<FlyData_WarningHistory>(); /// <summary> /// 保存到SQL数据库的集成工具 /// </summary> BufferError errorBuffer; public WarningSystem2() { Enable = true; } public void Init(BufferError errorBuffer) { this.errorBuffer = errorBuffer; Misc.BindingOperations.SetBinding(this.errorBuffer, nameof(this.errorBuffer.LastId), this, nameof(LastId)); } public void Reset() { errors.Clear(); updateReasonList(); } public void Silence() { IsRinging = false; } #region IWarningServiceSimple public void Add(int errcode, string description) { Add(errcode, description, ERR_STATE.ON); } public void Add(int errcode, string description, string accessory) { Add(errcode, description, ERR_STATE.ON, accessory, false); } public void Add(int errcode, string description, ERR_STATE state) { Add(errcode, description, state, "", false ); } public void Update(int errcode, string description) { Update(errcode, description, ""); } public void Update(int errcode, string description, string accessory) { Add(errcode, description, ERR_STATE.ON, accessory, true); } /// <summary> /// /// </summary> /// <param name="errcode">报警码</param> /// <param name="description">描述</param> /// <param name="state">状态,ON or OFF</param> /// <param name="accessory">附加信息</param> /// <param name="isUpdate">就算已经存在,也有刷新</param> public void Add(int errcode, string description, ERR_STATE state, string accessory, bool isUpdate) { if (!Enable) return; if (state == ERR_STATE.OFF) { Remove(errcode); return; } if (errors.Count > 0) { //查找是否已经存在 var error = errors.Find(err => err.ErrCode == errcode); if (error != null) { //已经有了 if (!isUpdate) { //不需要刷新 return; } else { //需要刷新 //先把它删除 errors.Remove(error); } } } { //这是新的记录 FlyData_WarningHistory error = new FlyData_WarningHistory { Time = DateTime.Now, ErrCode = errcode, Description = description, State = state, Accessory = accessory }; errors.Add(error); updateReasonList(); errorBuffer.Add(error); } } void updateReasonList() { if (errors.Count() > 0) ReasonList = errors.ToArray(); else ReasonList = null; IsRinging = errors.Count > 0; } public void Remove(int errcode) { FlyData_WarningHistory error = null; if (errors.Count()==0) return; //删除!!!!! error = errors.Find(err => err.ErrCode == errcode); if (error == null) return; errors.Remove(error); updateReasonList(); errorBuffer.Add(new FlyData_WarningHistory { Time = DateTime.Now, ErrCode = errcode, Description = error.Description, State = ERR_STATE.OFF }); } #endregion /// <summary> /// 获取纵向趋势图 /// </summary> /// <param name="request"></param> /// <param name="asyncDelegate"></param> /// <param name="asyncContext"></param> public void GetTrend( Pack_GetTrendRequest request, AsyncCBHandler asyncDelegate, object asyncContext) { errorBuffer.GetTrend(request, asyncDelegate, asyncContext); } } }