using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Windows.Controls; using System.Windows.Media; using Aitex.Core.RT.Event; using Aitex.Core.UI.View.Common; using Aitex.Core.Utilities; using MECF.Framework.Common.Alarms; using MECF.Framework.UI.Client.ClientBase; using System.Linq; using MECF.Framework.Common.OperationCenter; using Aitex.Core.Util; using MECF.Framework.UI.Client.CenterViews.Alarms; namespace FurnaceUI.Views.Alarms { public class AlarmViewModel : UiViewModelBase { [Subscription("System.AlarmTableID")] public string CurrentAlarmTable { get; set; } [IgnorePropertyChange] public List AlarmEvents { get; set; } public int SelectedIndex { get; set; } = -1; private AlarmProvider _alarmProvider = new AlarmProvider(); public Dictionary> AllGroupAlarmDic = new Dictionary>(); //public List AlarmParameterList { get; set; } = new List(); private string _txtAnalysisText; private long _currentEventID; private int _currentEventCount; private string _currentEventName; private bool _clearAllIsEnabled; public bool ClearAllIsEnabled { get => _clearAllIsEnabled; set { _clearAllIsEnabled = value; NotifyOfPropertyChange("ClearAllIsEnabled"); } } public string TxtAnalysisText { get { return _txtAnalysisText; } set { _txtAnalysisText = value; NotifyOfPropertyChange("TxtAnalysisText"); } } private bool _clearIsEnabled; public bool ClearIsEnabled { get => _clearIsEnabled; set { _clearIsEnabled = value; NotifyOfPropertyChange("ClearIsEnabled"); } } private bool _abortIsEnabled; public bool AbortIsEnabled { get => _abortIsEnabled; set { _abortIsEnabled = value; NotifyOfPropertyChange("AbortIsEnabled"); } } private bool _retryIsEnabled; public bool RetryIsEnabled { get => _retryIsEnabled; set { _retryIsEnabled = value; NotifyOfPropertyChange("RetryIsEnabled"); } } private bool _continueIsEnabled; public bool ContinueIsEnabled { get => _continueIsEnabled; set { _continueIsEnabled = value; NotifyOfPropertyChange("ContinueIsEnabled"); } } private bool _aGVRetryIsEnabled; public bool AGVRetryIsEnabled { get => _aGVRetryIsEnabled; set { _aGVRetryIsEnabled = value; NotifyOfPropertyChange("AGVRetryIsEnabled"); } } private string _targetModule; public string TargetModule { get { return _targetModule; } set { _targetModule = value; NotifyOfPropertyChange("TargetModule"); } } public void SetActionIsEnabled(string action) { if (action == null || action == "") { ClearIsEnabled = false; AbortIsEnabled = false; RetryIsEnabled = false; ContinueIsEnabled = false; AGVRetryIsEnabled = false; } else { string[] actions = action.Split('|'); ClearIsEnabled = Array.IndexOf(actions, "Clear") != -1 ? true : false; AbortIsEnabled = Array.IndexOf(actions, "Abort") != -1 ? true : false; RetryIsEnabled = Array.IndexOf(actions, "Retry") != -1 ? true : false; ContinueIsEnabled = Array.IndexOf(actions, "Continue") != -1 ? true : false; AGVRetryIsEnabled = Array.IndexOf(actions, "AGV RETRY") != -1 ? true : false; } } public void DGOnSelectionChanged() { //var e = (SelectionChangedEventArgs)obj; if (SelectedIndex > -1) { AlarmItem item = AlarmEvents[SelectedIndex]; //var item = e.AddedItems[0] as AlarmItem; //var findAlarm = AllGroupAlarmDic[CurrentAlarmTable].Values.Where(x => x.EventEnum == item.EventEnum).FirstOrDefault(); if (item != null) { SetActionIsEnabled(item.Action.ToString()); TxtAnalysisText = string.Format("Event Type:{0}\r\n\r\nEvent ID:{1}\r\n\r\nTime:{2}\r\n\r\nDescription:{3}\r\n\r\nCause:{4}\r\n\r\nRecovery:{5}", item.Type, item.EventId, item.OccuringTime, item.Description, item.Explaination, item.Solution ); } else { SetActionIsEnabled(""); TxtAnalysisText = string.Format("Event Type:{0}\r\n\r\nEvent ID:{1}\r\n\r\nTime:{2}\r\n\r\nDescription:{3}", item.Type, item.EventId, item.OccuringTime, item.Description ); } TargetModule = item.Source; _currentEventID = item.EventId; _currentEventCount = item.Count; _currentEventName = item.EventEnum; } } public AlarmViewModel() { Subscribe("System.LiveAlarmEvent"); } protected override void OnViewLoaded(object view) { //var alarmDict = _alarmProvider.GetXmlAlarmList(); //AllGroupAlarmDic = alarmDict; //foreach (var item in AllGroupAlarmList.Keys) //{ // foreach (var subitem in AllGroupAlarmList[item].Keys) // { // AlarmParameterList.Add(AllGroupAlarmList[item][subitem]); // } //} base.OnViewLoaded(view); } protected override void InvokeBeforeUpdateProperty(Dictionary data) { if (data.ContainsKey("System.LiveAlarmEvent")) UpdateAlarmEvent((List)data["System.LiveAlarmEvent"]); } public void UpdateAlarmEvent(List evItems) { var alarmEvents = new List(); foreach (EventItem item in evItems.OrderByDescending(p=>p.OccuringTime)) { var it = new AlarmItem() { Type = item.Level == EventLevel.Alarm ? "Alarm" : (item.Level == EventLevel.Information ? "Info" : "Warning"), OccuringTime = item.OccuringTime.ToString("yyyy/MM/dd HH:mm:ss"), Description = item.Description, EventEnum = item.EventEnum, EventId = item.Id, Explaination = item.Explaination, Solution = item.Solution, Source = item.Source, Count = item.Count, Action = item.Action, }; switch (item.Level) { case EventLevel.Alarm: it.TextColor = Brushes.Red; break; case EventLevel.Warning: it.TextColor = Brushes.Yellow; break; default: it.TextColor = Brushes.White; break; } alarmEvents.Add(it); } if (AlarmEvents == null || (alarmEvents.Count != AlarmEvents.Count)) { AlarmEvents = alarmEvents; } else { bool isEqual = true; if (alarmEvents.Count == AlarmEvents.Count) { for (int i = 0; i < alarmEvents.Count; i++) { if (!alarmEvents[i].IsEqualTo(AlarmEvents[i])) { isEqual = false; break; } } } if (!isEqual) AlarmEvents = alarmEvents; } if (AlarmEvents.Count > 0) ClearAllIsEnabled = true; else ClearAllIsEnabled = false; NotifyOfPropertyChange("AlarmEvents"); } public void AlarmAction(string target, string action) { InvokeClient.Instance.Service.DoOperation($"{target}.AlarmAction", action, _currentEventName); TxtAnalysisText = ""; SetActionIsEnabled(""); } } }