using NEIntelligentControl2.Models.Matrix; using NEIntelligentControl2.Models.PV; using NEIntelligentControl2.Models.Station; using NEIntelligentControl2.Models.Windturbine; using NEIntelligentControl2.Service.Windturbine; using NEIntelligentControl2.Views.Matrix; using NEIntelligentControl2.Windows; using System; using System.Collections.Generic; 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.Matrix { /// /// 场站矩阵页面 /// public partial class PageMatrixStation : Page, IStationInfo { public StationInfo StationInfo { get; set; } /// /// 矩阵块 /// private List _WindBlocks; /// /// 光伏矩阵块 /// private List _PVBlocks; /// /// 缓存 /// private CacheManager _CacheManager; public PageMatrixStation(CacheManager cm) { InitializeComponent(); _CacheManager = cm; } public void UpdateData(object obj) { if (StationInfo.Type == StationType.Wind || StationInfo.Id == "WIND_ALL") { UpdateWindturbine(obj); } else { Dispatcher.Invoke(() => _GDMain.ContextMenu = null); UpdatePV(obj); } } private void UpdatePV(object obj) { var datas = obj as Dictionary; if (datas == null) return; var ls = datas.Values.Where(wi => wi.Station == StationInfo.Id).ToList(); if (_PVBlocks == null) { InitPVInfo(ls); return; } Dispatcher.Invoke(() => { foreach (var v in _PVBlocks) { if (!datas.ContainsKey(v.Id)) continue; v.Update(datas[v.Id]); } }); } private void InitPVInfo(List ls) { if (ls == null) return; _PVBlocks = new List(); ls.Sort((x, y) => x.Index - y.Index); Dispatcher.Invoke(() => { foreach (var v in ls) { PVBlock pb = new PVBlock() { Id = v.Id }; pb.Update(v); _PVBlocks.Add(pb); _OPUGMain.Add(pb); } }); } /// /// 更新风机数据 /// /// private void UpdateWindturbine(object obj) { var datas = obj as Dictionary; if (datas == null) return; var ls = datas.Values.Where(wi => wi.StationId == StationInfo.Id).ToList(); if (_WindBlocks == null) { InitWindturbineBlocks(ls); return; } var lockInfo = _CacheManager.CustomLockInfos; Dispatcher.Invoke(() => { foreach (var v in _WindBlocks) { if (!datas.ContainsKey(v.WindturbineId)) continue; if (lockInfo.ContainsKey(v.WindturbineId)) { v.CustomLockInfo = lockInfo[v.WindturbineId]; } else { v.CustomLockInfo = null; } v.Update(datas[v.WindturbineId]); } }); } /// /// 初始化风机矩阵块 /// private void InitWindturbineBlocks(List ls) { if (ls == null) return; _WindBlocks = new List(); 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); _OPUGMain.Add(bs); } }); } private void MenuItem_Click(object sender, RoutedEventArgs e) { string tag = ((Control)sender).Tag as string; switch (tag) { case "Start": // 启动 case "Stop": // 停机 case "Reset": // 复位 case "Maintain": // 维护 case "UnMaintain": // 取消维护 SendControl(tag); break; case "compar": // 参数对比 Compar(); break; default: return; } } private void MenuItem_Click_Lock(object sender, RoutedEventArgs e) { // lockValue var type = ((Control)sender).Tag as string; if (type == null) return; bool b1 = Enum.TryParse(type, out HungType hungType); if (!b1) return; var bks = GetSelectedItems(); if (bks.Count <= 0) return; string customValue = null; if (hungType == HungType.CustomerLock) { customValue = CustomValueWindow.ShowWindow(); if (customValue == null) return; } var w = App.ServiceProvider.GetService(typeof(Windows.ConfirmWindow)) as Windows.ConfirmWindow; var ls = bks.Select(item => item.Value.WindturbineInfo).ToList(); bool b = w.Show(hungType, ls, customValue); if (!b) return; //确认操作后,将所有选中的风机修改为非选中状态 foreach (var item in bks) { item.Value.IsSelected = false; } } /// /// 参数对比 /// private void Compar() { var vs = GetSelectedItems(); foreach (var item in vs) { item.Value.IsSelected = false; } var ws = vs.Select(x => x.Value.WindturbineInfo).ToList(); Windows.ParameterComparisonWindow.ShowWindow(ws); } /// /// 发送控制命令 /// public void SendControl(string tag) { OperateStyle os = (OperateStyle)Enum.Parse(typeof(OperateStyle), tag); //List dataList = new List(); var bks = GetSelectedItems(); if (bks.Count <= 0) return; foreach (var item in bks) { WindBlockInfo data = GetSendData(item.Value); //dataList.Add(data); } //if (dataList.Count <= 0) return; var w = App.ServiceProvider.GetService(typeof(Windows.ConfirmWindow)) as Windows.ConfirmWindow; var ls = bks.Select(item => item.Value.WindturbineInfo).ToList(); bool b = w.Show(os, ls); if (!b) return; //确认操作后,将所有选中的风机修改为非选中状态 foreach (var item in bks) { item.Value.IsSelected = false; } } private Dictionary GetSelectedItems() { Dictionary bsw = new Dictionary(); foreach (var v in _WindBlocks) { if (v.IsSelected && v.WindturbineInfo != null && !bsw.ContainsKey(v.WindturbineInfo.WindturbineId)) { bsw.Add(v.WindturbineInfo.WindturbineId, v); } } return bsw; } /// /// 获取控制数据 /// private WindBlockInfo GetSendData(WindBlock item) { WindBlockInfo data = new WindBlockInfo(); //data.OperatedTime = item.OperatedTime; data.ID = item.WindturbineInfo.WindturbineId; data.WindturbineId = item.WindturbineInfo.WindturbineId; data.Status = item.WindturbineInfo.Status; data.ModelId = item.WindturbineInfo.ModelId; data.StationId = item.WindturbineInfo.StationId; data.ProjectId = item.WindturbineInfo.ProjectId; return data; } private void Page_Loaded(object sender, RoutedEventArgs e) { if (StationInfo.Type == StationType.Wind || StationInfo.Id == "WIND_ALL") { var ls = _CacheManager.Windturbineinfos?.Values.Where(wi => wi.StationId == StationInfo.Id).ToList(); if (_WindBlocks == null) { InitWindturbineBlocks(ls); } } else { var ls = _CacheManager.PVInfos?.Values.Where(wi => wi.Station == StationInfo.Id).ToList(); if (ls == null) return; if (_PVBlocks == null) { InitPVInfo(ls); } } } } }