using NEIntelligentControl2.Models; using NEIntelligentControl2.Models.Messages; using NEIntelligentControl2.Models.Windturbine; using NEIntelligentControl2.Service.User; using NEIntelligentControl2.Service.WebSocket; using NEIntelligentControl2.Service.Windturbine; using NEIntelligentControl2.Views.Matrix; 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.Controls.Primitives; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace NEIntelligentControl2.Windows { /// /// 确认窗口 /// public partial class ConfirmWindow : Window { private OperateStyle _OperateStyle; private List _WindturbineInfos; private WindturbineInfoBridge _WindturbineInfoBridge;// 风机信息数据桥 private MessageBridge _MessageBridge; private List _AllowSendWindturbines; private ControlManager _ControlManager; private HungType _HungType; private bool _IsLockOrUnLock; private string _CustomLock;// 自定义挂牌信息 public ConfirmWindow(MessageBridge bridge, ControlManager cm) { InitializeComponent(); _MessageBridge = bridge; _ControlManager = cm; _WindturbineInfoBridge = new WindturbineInfoBridge() { Messaged = OnMessage }; _MessageBridge.Register(_WindturbineInfoBridge); } private void OnMessage(Dictionary obj) { if (obj == null) return; Dispatcher.Invoke(() => { Update(_UGAllow, obj); Update(_UGNotAllow, obj); }); } private void Update(UniformGrid ug, Dictionary obj) { foreach (var v in ug.Children) { var w = v as WindBlock; if (w == null || !obj.ContainsKey(w.WindturbineId)) continue; w.Update(obj[w.WindturbineId]); } } internal bool Show(OperateStyle os, List bks) { _TBTitle.Text = $"发送{os.GetStringValue()}指令"; this.Owner = Application.Current.MainWindow; _OperateStyle = os; _WindturbineInfos = bks; InitView(); var b = ShowDialog(); return b != null && b == true; } internal bool Show(HungType hungType, List ls, string customLock = null) { _TBTitle.Text = $"发送挂牌指令"; this.Owner = Application.Current.MainWindow; _HungType = hungType; _IsLockOrUnLock = true; _WindturbineInfos = ls; _CustomLock = customLock; InitView(); var b = ShowDialog(); return b != null && b == true; } private void InitView() { _AllowSendWindturbines = new List(); foreach (var v in _WindturbineInfos) { WindBlock wb = new WindBlock(v) { WindturbineId = v.WindturbineId }; wb.Update(v); if (GetIsAllowSend(v)) { _UGAllow.Children.Add(wb); _AllowSendWindturbines.Add(v); } else { _UGNotAllow.Children.Add(wb); } } } private bool GetIsAllowSend(WindturbineInfo v) { if (v.IsLocked) { return _IsLockOrUnLock && _HungType == HungType.UnLock; } else if(_IsLockOrUnLock) { return v.LockType == HungType.UnLock; } switch (_OperateStyle) { case OperateStyle.Start: return v.State == WindturbineState.Standby; case OperateStyle.Stop: return v.State == WindturbineState.GridConnected; case OperateStyle.Reset: return v.State == WindturbineState.Malfunction; case OperateStyle.Maintain: return v.State == WindturbineState.Standby && v.ModelId != "UP105-2000-S"; case OperateStyle.UnMaintain: return v.State == WindturbineState.Maintain && v.ModelId != "UP105-2000-S"; default: return false; } } private void Button_Click(object sender, RoutedEventArgs e) { switch (((Control)sender).Tag) { case "send": Send(); break; case "cancel": this.DialogResult = false; break; default: return; } } /// /// 发送控制指令 /// private void Send() { var um = App.ServiceProvider.GetService(typeof(UserManager)) as UserManager; if (!um.IsLogined) { bool b1 = um.TempLogin(); if (!b1) return; } if (_IsLockOrUnLock) { Task.Run(SendLock); } else { Task.Run(SendCmd); } try { this.DialogResult = true; } catch { } } private void SendLock() { var cis = GetControlInstructions(); var v = _ControlManager.SendLock(cis); if (v == null) { return; } Dispatcher.Invoke(() => { if (v.Length > 0) { MessageWindowBig.ShowMessage(v); } }); } void SendCmd() { var cis = GetControlInstructions(); var v = _ControlManager.SendCmd(cis); if (v == null) { return; } Dispatcher.Invoke(() => { if (v.Length > 0) { MessageWindowBig.ShowMessage(v); } }); } private Dictionary GetControlInstructions() { Dictionary ll = new Dictionary(); foreach (var v in _AllowSendWindturbines) { ControlInstruction ci = new ControlInstruction(); ci.WindturbineId = v.WindturbineId; ci.StationId = v.StationId; ci.ProjectId = v.ProjectId; ci.ModelId = v.ModelId; ci.LockType = _HungType; ci.LockValue = _CustomLock; ci.ControlType = _OperateStyle; ll.Add(ci.WindturbineId, ci); } return ll; } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { _MessageBridge.Unregister(_WindturbineInfoBridge); } } }