using log4net; using NEIntelligentControl2.Models.Datas; using NEIntelligentControl2.Models.Messages; using NEIntelligentControl2.Models.Pages; using NEIntelligentControl2.Models.Windturbine; using NEIntelligentControl2.Service.WebSocket; using NEIntelligentControl2.Views.Matrix; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Security.Policy; 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 { /// /// 风机AGC融合页面 /// public partial class PageWindturbineAGC : Page { private static readonly ILog log = LogManager.GetLogger("File"); private readonly IPageAction _IPageAction; private readonly WEBHelper _WEBHelper; private MessageBridge _MessageBridge;// websocket private WindturbineInfoBridge _WindturbineInfoBridge;// 风机信息数据桥 /// /// 矩阵块 /// private List _WindBlocks; private bool _IsLoaded; private string RFDLTag = ""; private string MBGLTag = ""; private string SSGLTag = ""; private string YFDLTag = ""; private string NFDLTag = ""; private string LLGLTag = ""; private string _Url = ""; public PageWindturbineAGC(IPageAction action, MessageBridge mb, WEBHelper web) { InitializeComponent(); _IPageAction = action; _MessageBridge = mb; _WEBHelper = web; _WindturbineInfoBridge = new WindturbineInfoBridge() { Messaged = OnWindturbineMessage }; _tbtitle1.Text = "信\n友\n一\n线"; _tbtitle2.Text = "信\n友\n二\n线"; _tbtitle3.Text = "信\n友\n三\n线"; _Url = ConfigurationManager.AppSettings["DataServicePathDebug"]; RFDLTag = ConfigurationManager.AppSettings["RFDLTag"]; MBGLTag = ConfigurationManager.AppSettings["MBGLTag"]; SSGLTag = ConfigurationManager.AppSettings["SSGLTag"]; YFDLTag = ConfigurationManager.AppSettings["YFDLTag"]; NFDLTag = ConfigurationManager.AppSettings["NFDLTag"]; LLGLTag = ConfigurationManager.AppSettings["LLGLTag"]; log.Warn($"日月年发"); } private void OnWindturbineMessage(Dictionary obj) { if (!_IsLoaded) { InitWindturbine(obj); return; } Dispatcher.Invoke(() => { foreach (var v in _WindBlocks) { if (!obj.ContainsKey(v.WindturbineId)) continue; v.Update(obj[v.WindturbineId]); } }); } private void InitWindturbine(Dictionary obj) { if (obj == null || obj.Count == 0) return; _IsLoaded = true; _WindBlocks = new List(); var ls = obj.Values.ToList(); ls.Sort((x, y) => x.ID - y.ID); Dispatcher.Invoke(() => { foreach (var v in ls) { WindBlock bs = new WindBlock(v) { WindturbineId = v.WindturbineId }; bs.Update(v); _WindBlocks.Add(bs); if ((v.ID >= 1 && v.ID <= 5) || (v.ID >= 11 && v.ID <= 13)) { pb1.AddWindturbine(bs); } else if ((v.ID >= 6 && v.ID <= 10) || (v.ID >= 16 && v.ID <= 19)) { pb2.AddWindturbine(bs); } else { pb3.AddWindturbine(bs); } } }); } private void Page_Loaded(object sender, RoutedEventArgs e) { //var page = _IPageAction["Matrix.PageMatrix"]; //_FrameMatrix.Navigate(page); var page2 = _IPageAction["AGC.PageAGC"]; _FrameAGC.Navigate(page2); _MessageBridge.Register(_WindturbineInfoBridge); Task.Run(RefresData); } private async void RefresData() { string url = $"{_Url}/ts/latest?keys={RFDLTag},{YFDLTag},{NFDLTag}"; while (true) { try { // var vs = GetValues(url); foreach (var v in vs) { log.Warn($"日月年发:{v.Value.Value}"); } if (vs == null || vs.Count == 0) continue; var ss = GetValuesSingle(SSGLTag); log.Warn($"实时:{ss.Value}"); var mb = GetValuesSingle(MBGLTag); log.Warn($"目标:{mb.Value}"); var ll = GetValuesSingle(LLGLTag); log.Warn($"理论:{ll.Value}"); Dispatcher.Invoke(() => { try { tbps.Text = Math.Round(ss.Value, 2).ToString("0.00"); tbpc.Text = Math.Round(mb.Value, 2).ToString("0.00"); tbllgl.Text = Math.Round(ll.Value, 2).ToString("0.00"); } catch (Exception e) { log.Error($"实时{e.Message}"); } try { foreach (var v in vs) { if (v.Key == RFDLTag) { tbrf.Text = Math.Round(v.Value.Value, 2).ToString("0.00"); } if (v.Key == YFDLTag) { tbyf.Text = Math.Round(v.Value.Value, 2).ToString("0.00"); } if (v.Key == NFDLTag) { var nval = v.Value.Value; tbly.Text = Math.Round(nval / 50, 2).ToString("0.00"); tbnf.Text = Math.Round(nval, 2).ToString("0.00"); } } var date = DateTime.Parse("2023-2-18"); var time = (int)(DateTime.Now - date).TotalDays; aqts.Text = $"{619 + time} 天"; } catch (Exception e) { log.Error($"日月年发{e.Message}"); } }); } catch (Exception e) { log.Error($"右下{e.Message}"); } await Task.Delay(1000); } } private Dictionary GetValues(string url) { Dictionary datas = new Dictionary(); try { datas = _WEBHelper.HttpGetJSON>(url); } catch { } return datas; } private TsData GetValuesSingle(string key) { var data = new TsData(); var url = $"{_Url}/ts/latest?keys={key}"; try { var datas = _WEBHelper.HttpGetJSON>(url); if (datas != null && datas.ContainsKey(key)) { return datas[key]; } return data; } catch { } return data; } } }