From 4441a0b6792565f4021940bc860df17cc3ce6aff Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期一, 09 十二月 2024 18:54:52 +0800
Subject: [PATCH] 修复水泵分析

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs |  238 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 202 insertions(+), 36 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs
index a79af34..e659f6b 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/03-analy/SimulationPumpAnalyChartCtrl.cs
@@ -10,6 +10,7 @@
 using System.Windows.Forms;
 using Yw.Geometry;
 using Yw.Pump;
+using Yw.Vmo;
 using Yw.WinFrmUI.Phart;
 
 namespace HStation.WinFrmUI
@@ -21,18 +22,24 @@
             InitializeComponent();
         }
 
+        private Yw.Model.HydroModelInfo _hydroInfo = null;//姘村姏淇℃伅
+        private Yw.Model.HydroPumpInfo _pumpInfo = null;//姘存车淇℃伅
+        private Dictionary<string, HydroCalcuVisualResult> _allCalcuResultVisualDict = null;//璁$畻缁撴灉鍙瀛楀吀
+        private List<HydroWorkingVmo> _allWorkingList = null;//鎵�鏈夊伐鍐靛垪琛�
+        private Dictionary<HydroWorkingVmo, Dictionary<string, HydroCalcuVisualResult>> _allWorkingCalcuResultDict = null;//鎵�鏈夊伐鍐佃绠楃粨鏋滃瓧鍏�
+
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
         public void SetBindingData
             (
                 Yw.Model.HydroModelInfo hydroInfo,
-                HydroCalcuResult calcuResult,
-                Yw.Model.HydroPumpInfo pumpInfo
+                Yw.Model.HydroPumpInfo pumpInfo,
+                HydroCalcuResult calcuResult
             )
         {
             var allCalcuResultVisualDict = calcuResult?.GetVisualDict();
-            SetBindingData(hydroInfo, allCalcuResultVisualDict, pumpInfo);
+            SetBindingData(hydroInfo, pumpInfo, allCalcuResultVisualDict);
         }
 
         /// <summary>
@@ -41,31 +48,76 @@
         public void SetBindingData
             (
                 Yw.Model.HydroModelInfo hydroInfo,
-                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict,
-                Yw.Model.HydroPumpInfo pumpInfo
+                Yw.Model.HydroPumpInfo pumpInfo,
+                Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict
             )
         {
-            if (hydroInfo == null)
-            {
-                return;
-            }
-            if (pumpInfo == null)
-            {
-                return;
-            }
+            _hydroInfo = hydroInfo;
+            _pumpInfo = pumpInfo;
+            _allCalcuResultVisualDict = allCalcuResultVisualDict;
+            var vm = CreateViewModel();
+            SetBindingData(vm);
+        }
 
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                Yw.Model.HydroPumpInfo pumpInfo,
+                List<HydroWorkingVmo> allWorkingList
+            )
+        {
+            _hydroInfo = hydroInfo;
+            _pumpInfo = pumpInfo;
+            _allWorkingList = allWorkingList;
+            var vm = CreateWorkingViewModel();
+            SetBindingData(vm);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(PumpRunViewViewModel vm)
+        {
+            this.pumpRunViewChart1.SetBindingData(vm);
+            if (vm != null && vm.Items != null)
+            {
+                var item = vm.Items.FirstOrDefault();
+                if (item != null)
+                {
+                    this.barTxtQ.EditValue = $"{Math.Round(item.Q, 1)}m鲁/h";
+                    this.barTxtH.EditValue = $"{Math.Round(item.H, 2)}m";
+                    this.barTxtP.EditValue = $"{Math.Round(item.P ?? 0, 1)}kW";
+                    this.barTxtE.EditValue = $"{Math.Round(item.E ?? 0, 1)}%";
+                }
+            }
+        }
+
+        //鍒涘缓瑙嗗浘
+        private PumpRunViewViewModel CreateViewModel()
+        {
+            if (_hydroInfo == null)
+            {
+                return default;
+            }
+            if (_pumpInfo == null)
+            {
+                return default;
+            }
             var vm = new PumpRunViewViewModel();
-            vm.Id = pumpInfo.Code;
-            vm.Name = pumpInfo.Name;
-            vm.CurveName = $"棰濆畾鏇茬嚎({pumpInfo.RatedHz}hz)";
-            vm.RatedQ = pumpInfo.RatedQ ?? 0;
-            vm.RatedH = pumpInfo.RatedH ?? 0;
-            vm.RatedP = pumpInfo.RatedP;
-            vm.RatedN = pumpInfo.RatedN ?? 0;
-            vm.RatedHz = pumpInfo.RatedHz;
+            vm.Id = _pumpInfo.Code;
+            vm.Name = _pumpInfo.Name;
+            vm.CurveName = $"棰濆畾鏇茬嚎({_pumpInfo.RatedHz}hz)";
+            vm.RatedQ = _pumpInfo.RatedQ ?? 0;
+            vm.RatedH = _pumpInfo.RatedH ?? 0;
+            vm.RatedP = _pumpInfo.RatedP;
+            vm.RatedN = _pumpInfo.RatedN ?? 0;
+            vm.RatedHz = _pumpInfo.RatedHz;
             vm.Color = Color.Black;
 
-            var curveqh = hydroInfo.Curves?.Find(x => x.Code == pumpInfo.CurveQH);
+            var curveqh = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQH);
             if (curveqh != null)
             {
                 var qh_pts = curveqh.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
@@ -75,7 +127,7 @@
                 }
             }
 
-            var curveqp = hydroInfo.Curves?.Find(x => x.Code == pumpInfo.CurveQP);
+            var curveqp = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQP);
             if (curveqp != null)
             {
                 var qp_pts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
@@ -85,7 +137,7 @@
                 }
             }
 
-            var curveqe = hydroInfo.Curves?.Find(x => x.Code == pumpInfo.CurveQE);
+            var curveqe = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQE);
             if (curveqe != null)
             {
                 var qepts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
@@ -95,20 +147,20 @@
                 }
             }
 
-            if (pumpInfo.LinkStatus == Yw.Hydro.PumpStatus.Open)
+            if (_pumpInfo.LinkStatus == Yw.Hydro.PumpStatus.Open)
             {
                 vm.Items = new List<PumpRunViewItemViewModel>();
                 var vmItem = new PumpRunViewItemViewModel();
                 vm.Items.Add(vmItem);
                 vmItem.Id = string.Empty;
                 vmItem.Name = "杩愯";
-                vmItem.Hz = Math.Round(pumpInfo.RatedHz * pumpInfo.SpeedRatio, 1);
+                vmItem.Hz = Math.Round(_pumpInfo.RatedHz * _pumpInfo.SpeedRatio, 1);
                 vmItem.Color = Color.Blue;
-                if (pumpInfo.RatedN.HasValue)
+                if (_pumpInfo.RatedN.HasValue)
                 {
-                    vmItem.N = Math.Round(pumpInfo.RatedN.Value * pumpInfo.SpeedRatio, 1);
+                    vmItem.N = Math.Round(_pumpInfo.RatedN.Value * _pumpInfo.SpeedRatio, 1);
                 }
-                var calcuResult = allCalcuResultVisualDict?.GetValue(pumpInfo.Code) as HydroCalcuPumpResult;
+                var calcuResult = _allCalcuResultVisualDict?.GetValue(_pumpInfo.Code) as HydroCalcuPumpResult;
                 if (calcuResult != null)
                 {
                     vmItem.Q = calcuResult.CalcuQ ?? 0;
@@ -140,16 +192,130 @@
                 }
             }
 
-            SetBindingData(vm);
+            return vm;
         }
 
-        /// <summary>
-        /// 缁戝畾鏁版嵁
-        /// </summary>
-        public void SetBindingData(PumpRunViewViewModel vm)
+        //鍒涘缓宸ュ喌瑙嗗浘
+        private PumpRunViewViewModel CreateWorkingViewModel()
         {
-            this.pumpRunViewChart1.SetBindingData(vm);
-            //this.barCheckE.Checked=this.pumpRunViewChart1.
+            if (_hydroInfo == null)
+            {
+                return default;
+            }
+            if (_pumpInfo == null)
+            {
+                return default;
+            }
+            var vm = new PumpRunViewViewModel();
+            vm.Id = _pumpInfo.Code;
+            vm.Name = _pumpInfo.Name;
+            vm.CurveName = $"棰濆畾鏇茬嚎({_pumpInfo.RatedHz}hz)";
+            vm.RatedQ = _pumpInfo.RatedQ ?? 0;
+            vm.RatedH = _pumpInfo.RatedH ?? 0;
+            vm.RatedP = _pumpInfo.RatedP;
+            vm.RatedN = _pumpInfo.RatedN ?? 0;
+            vm.RatedHz = _pumpInfo.RatedHz;
+            vm.Color = Color.Black;
+
+            var curveqh = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQH);
+            if (curveqh != null)
+            {
+                var qh_pts = curveqh.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
+                if (qh_pts != null && qh_pts.Count > 3)
+                {
+                    vm.CurveQH = new CubicSpline2d(qh_pts);
+                }
+            }
+
+            var curveqp = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQP);
+            if (curveqp != null)
+            {
+                var qp_pts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
+                if (qp_pts != null && qp_pts.Count > 3)
+                {
+                    vm.CurveQP = new CubicSpline2d(qp_pts);
+                }
+            }
+
+            var curveqe = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQE);
+            if (curveqe != null)
+            {
+                var qepts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
+                if (qepts != null && qepts.Count > 3)
+                {
+                    vm.CurveQE = new CubicSpline2d(qepts);
+                }
+            }
+
+            if (_allWorkingList != null && _allWorkingList.Count > 0)
+            {
+                vm.Items = new List<PumpRunViewItemViewModel>();
+                foreach (var working in _allWorkingList)
+                {
+                    var workingInfo = JsonHelper.Json2Object<HydroWorkingInfoViewModel>(working.WorkingInfo);
+                    if (workingInfo != null && workingInfo.Pumps != null && workingInfo.Pumps.Count > 0)
+                    {
+                        var workingPumpInfo = workingInfo.Pumps.Find(x => x.Code == _pumpInfo.Code);
+                        if (workingPumpInfo != null)
+                        {
+                            var vmItem = new PumpRunViewItemViewModel();
+                            vm.Items.Add(vmItem);
+                            vmItem.Id = working.ID.ToString();
+                            vmItem.Name = working.Name;
+                            vmItem.Hz = workingPumpInfo.CurrentHz;
+                            vmItem.Color = HydroPumpCurveColorHelper.GetRandomColor(_allWorkingList.IndexOf(working));
+                            if (_pumpInfo.RatedN.HasValue)
+                            {
+                                var speedRatio = workingPumpInfo.CurrentHz / _pumpInfo.RatedHz;
+                                vmItem.N = Math.Round(_pumpInfo.RatedN.Value * speedRatio, 1);
+                            }
+                            vmItem.CurveName = $"{working.Name}({vmItem.Hz}hz)";
+                            if (_allWorkingCalcuResultDict == null)
+                            {
+                                _allWorkingCalcuResultDict = new Dictionary<HydroWorkingVmo, Dictionary<string, HydroCalcuVisualResult>>();
+                            }
+                            if (!_allWorkingCalcuResultDict.ContainsKey(working))
+                            {
+                                _hydroInfo.UpdateWorkingInfo(workingInfo);
+                                var calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
+                                _allWorkingCalcuResultDict.Add(working, calcuResult?.GetVisualDict());
+                            }
+                            var calcuResultVisualDict = _allWorkingCalcuResultDict[working];
+                            var calcuPumpResult = calcuResultVisualDict?.GetValue(_pumpInfo.Code) as HydroCalcuPumpResult;
+                            if (calcuPumpResult != null)
+                            {
+                                vmItem.Q = calcuPumpResult.CalcuQ ?? 0;
+                                vmItem.H = calcuPumpResult.CalcuH ?? 0;
+                                vmItem.P = calcuPumpResult.CalcuP;
+                                vmItem.E = calcuPumpResult.CalcuE;
+                            }
+
+                            if (vm.CurveQH != null)
+                            {
+                                var qh_pts = vm.CurveQH.GetPointList(20);
+                                var qh_run_pts = qh_pts.GetQHPointListByN(vm.RatedHz, vmItem.Hz);
+                                vmItem.CurveQH = new CubicSpline2d(qh_run_pts);
+                            }
+
+                            if (vm.CurveQP != null)
+                            {
+                                var qp_pts = vm.CurveQP.GetPointList(20);
+                                var qp_run_pts = qp_pts.GetQPPointListByN(vm.RatedHz, vmItem.Hz);
+                                vmItem.CurveQP = new CubicSpline2d(qp_run_pts);
+                            }
+
+                            if (vm.CurveQE != null)
+                            {
+                                var qe_pts = vm.CurveQE.GetPointList(20);
+                                var qe_run_pts = qe_pts.GetQEPointListByN(vm.RatedHz, vmItem.Hz);
+                                vmItem.CurveQE = new CubicSpline2d(qe_run_pts);
+                            }
+                        }
+                    }
+                }
+            }
+
+            return vm;
         }
 
         //鏁堢巼绾�

--
Gitblit v1.9.3