From c09478fe73685a87de0c48f9b300008f06408dd8 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期三, 20 十一月 2024 15:15:51 +0800
Subject: [PATCH] 核心界面

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs |  653 +++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 387 insertions(+), 266 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
index 1037523..f1d7d30 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -1,13 +1,16 @@
 锘縢lobal using Yw.EPAnet;
 using DevExpress.CodeParser;
+using DevExpress.Diagram.Core.Native;
 using DevExpress.Mvvm.Native;
 using DevExpress.Office.Utils;
+using DevExpress.PivotGrid.QueryMode.TuplesTree;
 using DevExpress.Utils.Extensions;
 using DevExpress.Xpo.Helpers;
 using DevExpress.XtraBars.Ribbon;
 using DevExpress.XtraRichEdit.Layout;
 using DevExpress.XtraSpreadsheet.Commands;
 using HStation.WinFrmUI.PhartRelation;
+using NetTaste;
 using NPOI.SS.Formula.Functions;
 using System.Diagnostics;
 using System.Windows.Media;
@@ -81,11 +84,15 @@
             ShowBimfaceCtrl();
             ShowQ3dCtrl();
             ShowPropertyCtrl();
+        }
 
+        private void InitialUI()
+        {
+            InitialCurrentWorking();
         }
 
 
-        #region Bimface
+        #region BIM鎺т欢
 
         //bimface鎺т欢
         private XhsProjectSimulationBimfaceCtrl _bimfaceCtrl = null;
@@ -97,13 +104,14 @@
             {
                 _bimfaceCtrl = new XhsProjectSimulationBimfaceCtrl();
                 _bimfaceCtrl.Dock = DockStyle.Fill;
-                await _bimfaceCtrl.InitialData(_project, _projectSite, () => _hydroInfo);
+                await _bimfaceCtrl.InitialData(_project, _projectSite);
                 _bimfaceCtrl.LoadCompletedEvent += () =>
                 {//view鍔犺浇瀹屾垚浜嬩欢
                     if (_hydroInfo == null)
                     {
                         return;
                     }
+                    InitialUI();
                 };
                 _bimfaceCtrl.HydroMouseLeftClickEvent += (obj) =>
                 {//榧犳爣宸﹂敭鐐瑰嚮浜嬩欢
@@ -111,7 +119,7 @@
                     {
                         return;
                     }
-                    _selectedVisual = obj;
+                    //_selectedVisual = obj;
                     ShowSelectedProperty();
                 };
             }
@@ -133,7 +141,7 @@
 
         #endregion
 
-        #region Q3d
+        #region Q3d鎺т欢
 
         //Q3d 鎺т欢
         private XhsProjectSimulationQ3dCtrl _q3dCtrl = null;
@@ -350,7 +358,7 @@
 
         #endregion
 
-        #region 鍙瑙嗗浘鍒楄〃
+        #region 瑙嗗浘鍒楄〃
 
         //鎵�鏈夊彲瑙佽鍥惧瓧鍏�
         private Dictionary<string, HydroVisualViewModel> _allVisualViewModelDict = null;
@@ -720,7 +728,7 @@
 
         #endregion
 
-        #region 鏈尮閰嶅垪琛�
+        #region 鏈尮鍒楄〃
 
         //鑾峰彇鏈尮閰嶅垪琛ㄦ帶浠�
         private XhsProjectSimulationUnMatchingListCtrl GetUnMatchingListCtrl()
@@ -1236,99 +1244,6 @@
                 this.barBtnSetValveList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
             }
 
-        }
-
-        #endregion
-
-        #region 骞惰仈鍒嗘瀽
-
-        //骞惰仈鍒嗘瀽
-        private void barBtnAnaly_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
-        {
-            if (_hydroInfo == null)
-            {
-                return;
-            }
-            if (_hydroInfo.Pumps == null || _hydroInfo.Pumps.Count < 1)
-            {
-                return;
-            }
-            var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false);
-            var vmList = new List<XhsSinglePumpViewModel>();
-            foreach (var pump in _hydroInfo.Pumps)
-            {
-                if (!pump.RatedN.HasValue)
-                {
-                    continue;
-                }
-                var qh = _hydroInfo.Curves?.Find(t => t.Code == pump.CurveQH)?.CurveData;
-                var qe = _hydroInfo.Curves?.Find(t => t.Code == pump.CurveQE)?.CurveData;
-                var qp = _hydroInfo.Curves?.Find(t => t.Code == pump.CurveQP)?.CurveData;
-                if (qh == null)
-                {
-                    continue;
-                }
-
-                var qhPtList = qh.Select(x => new XhsSplinePointViewModel(x.X, x.Y)).ToList();
-                var qePtList = qe?.Select(x => new XhsSplinePointViewModel(x.X, x.Y)).ToList();
-                var qpPtList = qp?.Select(x => new XhsSplinePointViewModel(x.X, x.Y)).ToList();
-
-                var vm = new XhsSinglePumpViewModel();
-                vmList.Add(vm);
-                vm.ID = pump.ID;
-                vm.Name = pump.Name;
-                vm.Code = pump.Code;
-                vm.IsBp = true;
-                vm.RunStatus = pump.LinkStatus == Yw.Hydro.LinkStatus.Open;
-                vm.RatedHz = pump.RatedHz;
-                vm.CurrentHz = Math.Round(pump.RatedHz * pump.SpeedRatio, 1);
-                vm.RatedSpeed = pump.RatedN.Value;
-                vm.CurrentSpeed = Math.Round(pump.RatedN.Value * pump.SpeedRatio);
-                vm.CurveQH = qhPtList;
-                vm.CurveQE = qePtList;
-                vm.CurveQP = qpPtList;
-
-                if (allCalcuResultList != null && allCalcuResultList.Count > 0)
-                {
-                    var calcuResult = allCalcuResultList.Find(x => x.Code == pump.Code) as HydroCalcuLinkResult;
-                    if (calcuResult != null)
-                    {
-                        if (calcuResult.CalcuFlow.HasValue)
-                        {
-                            vm.CalcuQ = Math.Abs(calcuResult.CalcuFlow.Value);
-                        }
-
-                        var calcuResultStart = allCalcuResultList.Find(x => x.Code == pump.StartCode) as HydroCalcuNodeResult;
-                        var calcuResultEnd = allCalcuResultList.Find(x => x.Code == pump.EndCode) as HydroCalcuNodeResult;
-                        if (calcuResultStart != null && calcuResultEnd != null)
-                        {
-                            if (calcuResultStart.CalcuHead.HasValue && calcuResultEnd.CalcuHead.HasValue)
-                            {
-                                vm.CalcuH = Math.Round(Math.Abs(calcuResultStart.CalcuHead.Value - calcuResultEnd.CalcuHead.Value), 4);
-                            }
-                        }
-                    }
-                }
-
-            }
-
-            var dlg = new PumpParallelAnalyDlg();
-            dlg.SetBindingData(vmList);
-            dlg.ReloadDataEvent += (list) =>
-            {
-                list?.ForEach(x =>
-                {
-                    var pump = _hydroInfo.Pumps?.Find(t => t.Code == x.Code);
-                    if (pump != null)
-                    {
-                        pump.LinkStatus = x.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed;
-                        pump.SpeedRatio = Math.Round(x.CurrentHz / pump.RatedHz, 1);
-                    }
-                });
-                ShowSelectedProperty();
-                return true;
-            };
-            dlg.ShowDialog();
         }
 
         #endregion
@@ -2000,7 +1915,7 @@
 
         #endregion
 
-        #region 鏋勪欢鏄庣粏鎺т欢
+        #region 鏋勪欢鎺т欢
 
         //鏋勪欢鏄庣粏鎺т欢
         private Yw.WinFrmUI.HydroVisualListCtrl _visualListCtrl = null;
@@ -2097,12 +2012,10 @@
 
         #region 鐩戞祴鍒楄〃
 
-        #region 娴嬬偣鍒楄〃
-
-        //鎵�鏈夌洃娴嬬偣鍒楄〃
+        //鎵�鏈夌洃娴嬪垪琛�
         private List<HydroMonitorVmo> _allMonitorList = null;
 
-        //鑾峰彇鐩戞祴鐐瑰垪琛�
+        //鑾峰彇鐩戞祴鍒楄〃
         private async Task<List<HydroMonitorVmo>> GetMonitorList()
         {
             if (_hydroInfo == null)
@@ -2120,14 +2033,10 @@
             return _allMonitorList;
         }
 
-        //鏇存柊鐩戞祴鐐瑰垪琛�
+        //鏇存柊鐩戞祴鍒楄〃
         private async void UpdateMonitorList(string code)
         {
             if (_hydroInfo == null)
-            {
-                return;
-            }
-            if (string.IsNullOrEmpty(code))
             {
                 return;
             }
@@ -2185,6 +2094,10 @@
         }
 
         #endregion
+
+        #region 鐩戞祴鍒楄〃
+
+
 
         #region 鐩戞祴鍊煎垪琛�
 
@@ -2545,7 +2458,7 @@
 
         #endregion
 
-        #region 瀵煎嚭INP鏂囦欢
+        #region 瀵煎嚭INP
 
         //瀵煎嚭INP鏂囦欢
         private void barBtnExportInp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
@@ -2650,8 +2563,70 @@
 
         #region 宸ュ喌璁$畻
 
+        //鎵�鏈夊伐鍐靛垪琛�
+        private List<HydroWorkingVmo> _allWorkingList = null;
+
+        //鑾峰彇宸ュ喌鍒楄〃
+        private async Task<List<HydroWorkingVmo>> GetWorkingList()
+        {
+            if (_allWorkingList == null)
+            {
+                _allWorkingList = await BLLFactory<Yw.BLL.HydroWorking>.Instance.GetByModelID(_hydroInfo.ID);
+                if (_allWorkingList == null)
+                {
+                    _allWorkingList = new List<HydroWorkingVmo>();
+                }
+            }
+            return _allWorkingList;
+        }
+
         //鎵�鏈夊伐鍐靛厓缁勫垪琛�
-        private List<Tuple<HydroWorkingVmo, HydroCheckResult, HydroCalcuResult>> _allWorkingTupleList = new List<Tuple<HydroWorkingVmo, HydroCheckResult, HydroCalcuResult>>();
+        private List<Tuple<HydroWorkingVmo, HydroCheckResult, HydroCalcuResult>> _allWorkingTupleList = null;
+
+        //鑾峰彇宸ュ喌鍏冪粍鍒楄〃
+        private async Task<List<Tuple<HydroWorkingVmo, HydroCheckResult, HydroCalcuResult>>> GetWorkingTupleList()
+        {
+            if (_hydroInfo == null)
+            {
+                return default;
+            }
+            if (_allWorkingTupleList == null)
+            {
+                _allWorkingTupleList = new List<Tuple<HydroWorkingVmo, HydroCheckResult, HydroCalcuResult>>();
+                var allWorkingList = await GetWorkingList();
+                if (allWorkingList.Count > 0)
+                {
+                    allWorkingList.ForEach(x =>
+                    {
+                        var checkResult = _hydroInfo.Check();
+                        HydroCalcuResult calcuResult = null;
+                        if (checkResult != null && checkResult.Succeed)
+                        {
+                            calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
+                        }
+                        _allWorkingTupleList.Add(new Tuple<HydroWorkingVmo, HydroCheckResult, HydroCalcuResult>(x, checkResult, calcuResult));
+                    });
+                }
+            }
+            return _allWorkingTupleList;
+        }
+
+        //娣诲姞宸ュ喌鍏冪粍
+        private async void AppendWorkingTuple(HydroWorkingVmo working, HydroCheckResult check, HydroCalcuResult calcu)
+        {
+            var allWorkingTupleList = await GetWorkingTupleList();
+            allWorkingTupleList.Add(new Tuple<HydroWorkingVmo, HydroCheckResult, HydroCalcuResult>(working, check, calcu));
+        }
+
+        //绉婚櫎宸ュ喌鍏冪粍
+        private async void RemoveWorkingTuple(HydroWorkingVmo working)
+        {
+            var allWorkingTupleList = await GetWorkingTupleList();
+            if (allWorkingTupleList.Count > 0)
+            {
+                allWorkingTupleList.RemoveAll(x => x.Item1.ID == working.ID);
+            }
+        }
 
         //鏄剧ず宸ュ喌璁$畻绐椾綋
         private void ShowWorkingCalcuDlg()
@@ -2672,12 +2647,13 @@
                 {
                     return;
                 }
+                var allWorkingList = await GetWorkingList();
                 var vmo = new HydroWorkingVmo();
                 vmo.ModelID = _hydroInfo.ID;
                 vmo.Name = working.Name;
                 vmo.WorkingInfo = JsonHelper.Object2Json(working.WorkingInfo);
                 vmo.MonitorInfo = JsonHelper.Object2Json(working.MonitorInfo);
-                vmo.SortCode = _allWorkingList.Count < 1 ? 1 : _allWorkingList.Max(x => x.SortCode) + 1;
+                vmo.SortCode = allWorkingList.Count < 1 ? 1 : allWorkingList.Max(x => x.SortCode) + 1;
                 vmo.Description = working.Description;
                 vmo.ID = await BLLFactory<Yw.BLL.HydroWorking>.Instance.Insert(vmo);
                 if (vmo.ID < 1)
@@ -2685,7 +2661,7 @@
                     TipFormHelper.ShowError("鍒涘缓宸ュ喌澶辫触锛岃绠楀彇娑堬紒");
                     return;
                 }
-                _allWorkingList.Add(vmo);
+                allWorkingList.Add(vmo);
 
                 _hydroInfo.UpdateWorkingInfo(working.WorkingInfo);
                 //鏍¢獙
@@ -2713,7 +2689,7 @@
                     UpdateVisualViewModelCalcuProperty();
                     UpdateVisualListCtrl();
                     UpdateSelectedProperty();
-                    await _bimfaceCtrl?.SetLogicCalcuCustomLabelsCalcuResult(_calcuResult);
+                    //await _bimfaceCtrl?.SetLogicCalcuCustomLabelsCalcuResult(_calcuResult);
                     TipFormHelper.ShowSucceed("璁$畻鎴愬姛锛�");
                     var codes = _hydroInfo.Pumps.Select(x => x.Code).ToList();
                     await _bimfaceCtrl?.ZoomAndSelectComponents(codes);
@@ -2739,14 +2715,98 @@
 
         #endregion
 
+        #region 璁$畻鏍囩
+
+        //璁$畻鏍囩鏄惁鏄剧ず
+        private bool _isCalcuLabelsVisible = false;
+
+        //鎵�鏈夎绠楁爣绛�
+        private List<LogicCalcuCustomLabel> _allCalcuLabels = null;
+
+        //鑾峰彇璁$畻鏍囩
+        private List<LogicCalcuCustomLabel> GetCalcuLabels()
+        {
+            if (_hydroInfo == null)
+            {
+                return default;
+            }
+            var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false);
+            if (allCalcuResultList == null || allCalcuResultList.Count < 1)
+            {
+                return default;
+            }
+            var list = new List<LogicCalcuCustomLabel>();
+
+            _hydroInfo.Pumps?.ForEach(x =>
+            {
+                var hz = Math.Round(x.RatedHz * x.SpeedRatio);
+                var calcuPumpResult = GetCalcuVisualResult(x.Code) as HydroCalcuLinkResult;
+                if (calcuPumpResult != null)
+                {
+                    var calcuPumpStartResult = GetCalcuVisualResult(x.StartCode) as HydroCalcuNodeResult;
+                    var calcuPumpEndResult = GetCalcuVisualResult(x.EndCode) as HydroCalcuNodeResult;
+                    var pumpCustomLabel = new LogicCalcuCustomLabel();
+                    pumpCustomLabel.Id = x.Code;
+                    pumpCustomLabel.Distance = 20000;
+                    pumpCustomLabel.Data = new List<LogicCalcuCustomLabelItem>()
+                    {
+                        new LogicCalcuCustomLabelItem(){ Name="鐘舵��",Value=HydroLinkStatusHelper.GetStatusName(x.LinkStatus),Unit=string.Empty},
+                        new LogicCalcuCustomLabelItem(){ Name="棰戠巼",Value=hz.ToString(),Unit=string.Empty},
+                        new LogicCalcuCustomLabelItem(){ Name="娴侀噺",Value=Math.Round(calcuPumpResult.CalcuFlow.Value,1).ToString(),Unit="m鲁/h"},
+                        new LogicCalcuCustomLabelItem(){ Name="杩涘彛鍘嬪姏",Value=Math.Round(calcuPumpStartResult.CalcuHead.Value,4).ToString(),Unit="m"},
+                        new LogicCalcuCustomLabelItem(){ Name="鍑哄彛鍘嬪姏",Value=Math.Round(calcuPumpEndResult.CalcuHead.Value,4).ToString(),Unit="m"},
+                    };
+                    list.Add(pumpCustomLabel);
+                }
+            });
+
+            _hydroInfo.GetAllEmitters()?.ForEach(x =>
+            {
+                var calcuEmitter = GetCalcuVisualResult(x.Code) as HydroCalcuNodeResult;
+                var emitterCustomLabel = new LogicCalcuCustomLabel();
+                emitterCustomLabel.Id = x.Code;
+                emitterCustomLabel.Distance = 30000;
+                emitterCustomLabel.Data = new List<LogicCalcuCustomLabelItem>()
+                    {
+                        new LogicCalcuCustomLabelItem(){ Name="娴侀噺",Value=Math.Round(calcuEmitter.CalcuDemand.Value,1).ToString(),Unit="m鲁/h"},
+                        new LogicCalcuCustomLabelItem(){ Name="鍘嬪姏",Value=Math.Round(calcuEmitter.CalcuDemand.Value,4).ToString(),Unit="m"}
+                    };
+                list.Add(emitterCustomLabel);
+            });
+            return list;
+        }
+
+        //璁剧疆璁$畻鏍囩
+        private void SetCalcuLabels()
+        {
+            if (_isCalcuLabelsVisible)
+            {
+                var allCalcuLabels = GetCalcuLabels();
+                _bimfaceCtrl?.SetLogicCalcuCustomLabels(allCalcuLabels);
+            }
+            else
+            {
+                _bimfaceCtrl?.ClearLogicCalcuCustomLabels();
+            }
+        }
+
+        //璁剧疆璁$畻鏍囩鏄惁鏄剧ず
+        private void barCkCalcuLabels_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            _isCalcuLabelsVisible = this.barCkCalcuLabels.Checked;
+        }
+
+        #endregion
+
         #region 褰撳墠宸ュ喌
 
         //褰撳墠宸ュ喌
         private Yw.Vmo.HydroWorkingVmo _currentWorking = null;
 
         //鍒濆鍖栧綋鍓嶅伐鍐�
-        private void InitialCurrentWorking(List<HydroWorkingVmo> allWorkingList)
+        private async void InitialCurrentWorking()
         {
+            var allWorkingList = await GetWorkingList();
             this.repositoryItemImageComboBox1.Items.BeginUpdate();
             this.repositoryItemImageComboBox1.Items.Clear();
             if (allWorkingList != null && allWorkingList.Count > 0)
@@ -2767,9 +2827,22 @@
         }
 
         //璁剧疆褰撳墠宸ュ喌
-        private void SetCurrentWorking(HydroWorkingVmo working)
+        private async void SetCurrentWorking(HydroWorkingVmo working)
         {
+            if (working == null)
+            {
+                return;
+            }
+            this.barEditCurrentWorking.EditValue = working;
             _currentWorking = working;
+            var allWorkingTupleList = await GetWorkingTupleList();
+            var tuple = allWorkingTupleList?.Find(x => x.Item1.ID == working.ID);
+            if (tuple == null)
+            {
+                return;
+            }
+            _checkResult = tuple.Item2;
+            _calcuResult = tuple.Item3;
         }
 
         //褰撳墠宸ュ喌鍙戠敓鏀瑰彉
@@ -2777,155 +2850,6 @@
         {
             var working = this.barEditCurrentWorking.EditValue as HydroWorkingVmo;
             SetCurrentWorking(working);
-        }
-
-
-        #endregion
-
-        #region 宸ュ喌鍒楄〃
-
-        //鎵�鏈夊伐鍐靛垪琛�
-        private List<HydroWorkingVmo> _allWorkingList = null;
-
-        //鍒濆鍖栧伐鍐靛垪琛�
-        private async void InitialWorkingList()
-        {
-            _allWorkingList = await BLLFactory<Yw.BLL.HydroWorking>.Instance.GetByModelID(_hydroInfo.ID);
-            if (_allWorkingList == null)
-            {
-                _allWorkingList = new List<HydroWorkingVmo>();
-            }
-        }
-
-
-
-        ////鑾峰彇灞炴�ф帶浠�
-        //private XhsProjectSimulationPropertyCtrl GetPropertyCtrl()
-        //{
-        //    if (_propertyCtrl == null)
-        //    {
-        //        _propertyCtrl = new XhsProjectSimulationPropertyCtrl();
-        //        _propertyCtrl.Dock = DockStyle.Fill;
-        //        _propertyCtrl.HydroViewEvent += (visual) =>
-        //        {
-        //            if (visual == null)
-        //            {
-        //                return;
-        //            }
-        //            _bimfaceCtrl?.ZoomToComponent(visual.Code);
-        //        };
-        //        _propertyCtrl.BlinkLinkNodeEvent += async (link, linkNodeCode) =>
-        //        { //寮鸿皟杩炴帴鑺傜偣
-        //            if (_hydroInfo == null)
-        //            {
-        //                return;
-        //            }
-        //            if (link == null)
-        //            {
-        //                return;
-        //            }
-        //            if (string.IsNullOrEmpty(linkNodeCode))
-        //            {
-        //                return;
-        //            }
-        //            var linkNode = GetVisual(linkNodeCode);
-        //            if (linkNode == null)
-        //            {
-        //                return;
-        //            }
-        //            var blinkCodes = new List<string>();
-        //            if (linkNode.GetType() == typeof(HydroJunctionInfo))
-        //            {
-        //                var allLinkList = GetLinkList();
-        //                if (allLinkList == null || allLinkList.Count < 1)
-        //                {
-        //                    return;
-        //                }
-        //                var linkList = allLinkList.Where(x => (x.StartCode == linkNodeCode || x.EndCode == linkNodeCode) && x.Code != linkNodeCode).ToList();
-        //                if (linkList == null || linkList.Count < 1)
-        //                {
-        //                    return;
-        //                }
-        //                blinkCodes.AddRange(linkList.Select(x => x.Code));
-        //            }
-        //            else
-        //            {
-        //                blinkCodes.Add(linkNodeCode);
-        //            }
-
-        //            await _bimfaceCtrl?.ClearBlinkComponents();
-        //            await _bimfaceCtrl?.SetBlinkComponents(blinkCodes);
-        //            await Task.Delay(5000);
-        //            await _bimfaceCtrl?.ClearBlinkComponents();
-        //        };
-        //        _propertyCtrl.PropertyValueChangedEvent += (visual) =>
-        //        {
-        //            if (visual == null)
-        //            {
-        //                return;
-        //            }
-        //            UpdateVisualListCtrl();
-        //            //ApplyGradingResultList(visual);
-        //        };
-        //        _propertyCtrl.MarkPropertyValueChangedEvent += (visual) =>
-        //        {
-        //            //鏍囨敞灞炴�у彂鐢熸敼鍙�
-        //            //鍒ゆ柇褰撳墠鏄惁鏈夋爣娉ㄥ睍绀猴紝鑻ユ湁鍒欐洿鏂版爣娉紝鏈�濂芥槸鏇存柊鍗曚釜鏍囨敞
-        //            //UpdateMark(visual);
-        //        };
-        //        _propertyCtrl.GradingPropertyValueChangedEvent += (parter) =>
-        //        {
-        //            //鍒嗙骇灞炴�у彂鐢熸敼鍙�
-        //            //鍒ゆ柇褰撳墠鏄惁鏈夊垎绾у睍绀猴紝鑻ユ湁鍒欐洿鏂板垎绾э紝鏈�濂芥槸鏇存柊鍗曚釜鍒嗙骇
-        //        };
-        //        _propertyCtrl.FlowEffectPropertyValueChangedEvent += (visual) =>
-        //        {
-        //            //娴佸悜灞炴�у彂鐢熸敼鍙�
-        //            //鍒ゆ柇娴佸悜鏄惁鍔犺浇锛屽鏋滃姞杞藉垯鏇存柊娴佸悜锛屾渶濂芥槸鏇存柊鍗曚釜娴佸悜
-        //            //UpdateFlowEffect(visual);
-        //        };
-
-        //    }
-        //    return _propertyCtrl;
-        //}
-
-        ////灞炴�ф帶浠舵槸鍚﹀彲瑙�
-        //private bool IsPropertyCtrlVisible
-        //{
-        //    get
-        //    {
-        //        if (this.docPnlRight.Visibility == DevExpress.XtraBars.Docking.DockVisibility.Visible)
-        //        {
-        //            if (this.controlContainerRight.Controls.Count > 0)
-        //            {
-        //                if (this.controlContainerRight.Controls[0] is XhsProjectSimulationPropertyCtrl)
-        //                {
-        //                    return true;
-        //                }
-        //            }
-        //        }
-        //        return false;
-        //    }
-        //}
-
-        ////鏄剧ず灞炴�ф帶浠�
-        //private void ShowPropertyCtrl()
-        //{
-        //    if (IsPropertyCtrlVisible)
-        //    {
-        //        return;
-        //    }
-        //    var propertyCtrl = GetPropertyCtrl();
-        //    this.controlContainerRight.Controls.Clear();
-        //    this.controlContainerRight.Controls.Add(propertyCtrl);
-        //    this.docPnlRight.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible;
-        //    this.docPnlRight.Text = "灞炴��";
-        //    this.docPnlRight.Width = 300;
-        //}
-
-        private void barBtnWorkingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
-        {
-
         }
 
         #endregion
@@ -2936,20 +2860,217 @@
         private HydroWorkingTreeCtrl _workingCtrl = null;
 
         //鑾峰彇宸ュ喌鎺т欢
-        private HydroWorkingTreeCtrl GetWorkingCtrl()
+        private async Task<HydroWorkingTreeCtrl> GetWorkingCtrl()
         {
             if (_workingCtrl == null)
             {
                 _workingCtrl = new HydroWorkingTreeCtrl();
                 _workingCtrl.Dock = DockStyle.Fill;
+                var allWorkingList = await GetWorkingList();
+                _workingCtrl.SetBindingData(allWorkingList);
+                _workingCtrl.FocusedChangedEvent += (vmo) =>
+                {
+
+                };
             }
             return _workingCtrl;
         }
 
+        //宸ュ喌鎺т欢鏄惁鍙
+        private bool IsWorkingCtrlVisible
+        {
+            get
+            {
+                if (this.docPnlRight.Visibility == DevExpress.XtraBars.Docking.DockVisibility.Visible)
+                {
+                    if (this.controlContainerRight.Controls.Count > 0)
+                    {
+                        if (this.controlContainerRight.Controls[0] is HydroWorkingTreeCtrl)
+                        {
+                            return true;
+                        }
+                    }
+                }
+                return false;
+            }
+        }
+
+        //鏄剧ず宸ュ喌鎺т欢
+        private async void ShowWorkingCtrl()
+        {
+            if (IsWorkingCtrlVisible)
+            {
+                return;
+            }
+            var workingCtrl = await GetWorkingCtrl();
+            this.controlContainerRight.Controls.Clear();
+            this.controlContainerRight.Controls.Add(workingCtrl);
+            this.docPnlRight.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible;
+            this.docPnlRight.Text = "宸ュ喌";
+            this.docPnlRight.Width = 300;
+        }
+
+        //闅愯棌宸ュ喌鎺т欢
+        private void HideWorkingCtrl()
+        {
+            if (IsWorkingCtrlVisible)
+            {
+                this.docPnlRight.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden;
+            }
+        }
+
+        //鏇存柊宸ュ喌鎺т欢
+        private async void UpdateWorkingCtrl()
+        {
+            var workingCtrl = await GetWorkingCtrl();
+            var allWorkingList = await GetWorkingList();
+            workingCtrl.SetBindingData(allWorkingList);
+        }
+
+        //宸ュ喌鍒楄〃鐐瑰嚮
+        private void barBtnWorkingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            ShowWorkingCtrl();
+        }
+
         #endregion
 
+        #region 宸ュ喌璇勪及
 
 
+        private void barBtnWorkingEvaluation_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            XtraMessageBox.Show("姝e湪寮�鍙戜腑锛屾暚璇锋湡寰咃紒");
+        }
+
+        #endregion
+
+        #region 宸ュ喌骞惰仈
+
+        //骞惰仈鍒嗘瀽
+        private void barBtnAnaly_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            if (_hydroInfo == null)
+            {
+                return;
+            }
+            if (_hydroInfo.Pumps == null || _hydroInfo.Pumps.Count < 1)
+            {
+                return;
+            }
+            var allCalcuResultList = GetCalcuVisualResultList(Yw.EPAnet.CalcuMode.MinorLoss, false);
+            var vmList = new List<XhsSinglePumpViewModel>();
+            foreach (var pump in _hydroInfo.Pumps)
+            {
+                if (!pump.RatedN.HasValue)
+                {
+                    continue;
+                }
+                var qh = _hydroInfo.Curves?.Find(t => t.Code == pump.CurveQH)?.CurveData;
+                var qe = _hydroInfo.Curves?.Find(t => t.Code == pump.CurveQE)?.CurveData;
+                var qp = _hydroInfo.Curves?.Find(t => t.Code == pump.CurveQP)?.CurveData;
+                if (qh == null)
+                {
+                    continue;
+                }
+
+                var qhPtList = qh.Select(x => new XhsSplinePointViewModel(x.X, x.Y)).ToList();
+                var qePtList = qe?.Select(x => new XhsSplinePointViewModel(x.X, x.Y)).ToList();
+                var qpPtList = qp?.Select(x => new XhsSplinePointViewModel(x.X, x.Y)).ToList();
+
+                var vm = new XhsSinglePumpViewModel();
+                vmList.Add(vm);
+                vm.ID = pump.ID;
+                vm.Name = pump.Name;
+                vm.Code = pump.Code;
+                vm.IsBp = true;
+                vm.RunStatus = pump.LinkStatus == Yw.Hydro.LinkStatus.Open;
+                vm.RatedHz = pump.RatedHz;
+                vm.CurrentHz = Math.Round(pump.RatedHz * pump.SpeedRatio, 1);
+                vm.RatedSpeed = pump.RatedN.Value;
+                vm.CurrentSpeed = Math.Round(pump.RatedN.Value * pump.SpeedRatio);
+                vm.CurveQH = qhPtList;
+                vm.CurveQE = qePtList;
+                vm.CurveQP = qpPtList;
+
+                if (allCalcuResultList != null && allCalcuResultList.Count > 0)
+                {
+                    var calcuResult = allCalcuResultList.Find(x => x.Code == pump.Code) as HydroCalcuLinkResult;
+                    if (calcuResult != null)
+                    {
+                        if (calcuResult.CalcuFlow.HasValue)
+                        {
+                            vm.CalcuQ = Math.Abs(calcuResult.CalcuFlow.Value);
+                        }
+
+                        var calcuResultStart = allCalcuResultList.Find(x => x.Code == pump.StartCode) as HydroCalcuNodeResult;
+                        var calcuResultEnd = allCalcuResultList.Find(x => x.Code == pump.EndCode) as HydroCalcuNodeResult;
+                        if (calcuResultStart != null && calcuResultEnd != null)
+                        {
+                            if (calcuResultStart.CalcuHead.HasValue && calcuResultEnd.CalcuHead.HasValue)
+                            {
+                                vm.CalcuH = Math.Round(Math.Abs(calcuResultStart.CalcuHead.Value - calcuResultEnd.CalcuHead.Value), 4);
+                            }
+                        }
+                    }
+                }
+
+            }
+
+            var dlg = new PumpParallelAnalyDlg();
+            dlg.SetBindingData(vmList);
+            dlg.ReloadDataEvent += (list) =>
+            {
+                list?.ForEach(x =>
+                {
+                    var pump = _hydroInfo.Pumps?.Find(t => t.Code == x.Code);
+                    if (pump != null)
+                    {
+                        pump.LinkStatus = x.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed;
+                        pump.SpeedRatio = Math.Round(x.CurrentHz / pump.RatedHz, 1);
+                    }
+                });
+                ShowSelectedProperty();
+                return true;
+            };
+            dlg.ShowDialog();
+        }
+
+        #endregion
+
+        #region 宸ュ喌鑳芥晥
+
+        private void barBtnWorkingPower_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            XtraMessageBox.Show("姝e湪寮�鍙戜腑锛屾暚璇锋湡寰咃紒");
+        }
+
+        #endregion
+
+        #region 鎹熷け鏇茬嚎
+
+        private void barBtnWorkingLossCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            XtraMessageBox.Show("姝e湪寮�鍙戜腑锛屾暚璇锋湡寰咃紒");
+        }
+
+        #endregion
+
+        #region 鎹熷け姣斾緥
+
+        private void barBtnWorkingLossScale_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            XtraMessageBox.Show("姝e湪寮�鍙戜腑锛屾暚璇锋湡寰咃紒");
+        }
+
+        #endregion
+
+        #region 缁煎悎鍒嗘瀽
+        private void barBtnWorkingAnaly_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            XtraMessageBox.Show("姝e湪寮�鍙戜腑锛屾暚璇锋湡寰咃紒");
+        }
+        #endregion
 
 
 

--
Gitblit v1.9.3