using NEIntelligentControl2.Models.Alarm; using NEIntelligentControl2.Models.Messages; using NEIntelligentControl2.Models.Pages; using NEIntelligentControl2.Models.Windturbine; using NEIntelligentControl2.Service.WebSocket; using NEIntelligentControl2.Views.AGC; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace NEIntelligentControl2.Pages.Home { /// /// 主页页面 /// public partial class HomePage : Page, IMessage { private readonly string FaultType = ConfigurationManager.AppSettings["SubscribeRuntimeFault"]; // 故障列表类型 private readonly string AlarmType = ConfigurationManager.AppSettings["SubscribeRuntimeAlarm"]; // 报警类型 private MessageBridge _MessageBridge; private WEBHelper _WEBHelper; private string _Url; public List MessageTypes { get; set; } private WindturbineInfoBridge _WindturbineInfoBridge; private TagManager _TagManager; public HomePage(MessageBridge mb,WEBHelper web, TagManager tm) { InitializeComponent(); _MessageBridge = mb; _WEBHelper = web; _TagManager = tm; MessageTypes = new List() { FaultType, AlarmType }; _WindturbineInfoBridge = new WindturbineInfoBridge() { Messaged = OnWindturbineInfoMessage }; try { #if (DEBUG) _Url = ConfigurationManager.AppSettings["AlarmPathDebug"]; #else _Url = ConfigurationManager.AppSettings["AlarmPath"]; #endif } catch (Exception ex) { Console.WriteLine(ex.Message); } } private void OnWindturbineInfoMessage(Dictionary vs) { _SCMCard.UpdateData(vs); _MMCard.UpdateData(vs); } private void Page_Loaded(object sender, RoutedEventArgs e) { _TagManager.TagChanged?.Invoke(new List()); _MessageBridge.Register(this); // 订阅消息 _MessageBridge.Register(_WindturbineInfoBridge); // 订阅消息 Task.Run(LoadAlarmHistory); // 加载报警历史值 } /// /// 加载报警历史值 /// private void LoadAlarmHistory() { DateTime dt = DateTime.Now.AddDays(-1); AlarmPage ap = _WEBHelper.HttpGetJSON($"{_Url}/alarm/history/page?pagenum=1&pagesize=1000&category1=SYZ&starttime={dt.ToString("yyyy-MM-dd HH:mm:ss")}&endtime={DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); _SACard.UpdateAlarmData(ap); } private void Page_Unloaded(object sender, RoutedEventArgs e) { _MessageBridge.Unregister(this);// 取消订阅消息 _MessageBridge.Unregister(_WindturbineInfoBridge); } public async Task OnMessage(object message) { await Task.Run(() => { var stomp = message as StompMessage; if (stomp == null || !stomp.Headers.ContainsKey("destination")) return; var type = stomp.Headers["destination"]; if (type == FaultType)// 故障列表 { UpdateRuntimeFault(stomp); } else if (type == AlarmType)// 报警列表 { UpdateRuntimeAlert(stomp); } }); } private void UpdateRuntimeAlert(StompMessage stomp) { List fis = _WEBHelper.Deserialize>(stomp.Body); foreach (var v in fis) { if (v.Category1 != "FJ") { _SACard.UpdateAlarmData(v); } else { _WTACard.UpdateAlarmData(v); } } } /// /// 更新故障列表 /// private void UpdateRuntimeFault(StompMessage stomp) { List faultInfoModel = _WEBHelper.Deserialize>(stomp.Body); if (faultInfoModel == null) return; foreach (var v in faultInfoModel) { if (v.FaultInfo.Category1 != "FJ") { _SACard.UpdateAlarmData(v.FaultInfo); } else { _WTACard.UpdateAlarmData(v.FaultInfo); } } } /// /// AGC场站选择改变事件,勿删 /// private void AAGCCard_SelectionChanged(object sender, RoutedEventArgs e) { SimpleAGCCard sc = e.OriginalSource as SimpleAGCCard; if (sc == null) return; int index = (int)sc.Tag; _DAGCCard.ChangeCard(index); } } }