From 1c82571504174fba279276a80ea8dac28a674c1e Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期四, 24 十月 2024 12:30:45 +0800
Subject: [PATCH] 优化了泵计算属性和计算结果缓存问题

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs |  246 +++++++++++++++++++++++++++++--------------------
 1 files changed, 145 insertions(+), 101 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 dd92fc4..6d27250 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,7 +1,9 @@
 锘縢lobal using Yw.EPAnet;
 using DevExpress.Mvvm.Native;
 using DevExpress.XtraRichEdit.Layout;
+using DevExpress.XtraSpreadsheet.Commands;
 using HStation.WinFrmUI.PhartRelation;
+using Yw.Pump;
 using Yw.WinFrmUI.Bimface;
 using Yw.WinFrmUI.Hydro;
 
@@ -245,50 +247,22 @@
             {
                 ShowPropertyCtrl();
             }
-
             if (_parter == null)
             {
                 _propertyCtrl?.SelectParter(null);
                 return;
             }
-
             _propertyCtrl?.SelectParter(_parter.Code);
-            if (_calcuResult != null)
-            {
-                if (_calcuResult.Succeed)
-                {
-                    var allCalcuParterList = _calcuResult.GetParterList();
-                    var calcuParter = allCalcuParterList.Find(x => x.Id == _parter.Code);
-                    if (calcuParter != null)
-                    {
-                        IHydroCalcuResult calcuProperty = null;
-                        if (calcuParter is Yw.EPAnet.CalcuNode calcuNode)
-                        {
-                            var calcuNodeProperty = new Yw.WinFrmUI.HydroCalcuNodeResult();
-                            calcuNodeProperty.Code = _parter.Code;
-                            calcuNodeProperty.CalcuPress = calcuNode.Press;
-                            calcuNodeProperty.CalcuDemand = calcuNode.Demand;
-                            calcuNodeProperty.CalcuHead = calcuNode.Head;
-                            calcuProperty = calcuNodeProperty;
-                        }
-                        else if (calcuParter is Yw.EPAnet.CalcuLink calcuLink)
-                        {
-                            var calcuLinkProperty = new Yw.WinFrmUI.HydroCalcuLinkResult();
-                            calcuLinkProperty.Code = _parter.Code;
-                            calcuLinkProperty.CalcuHeadLoss = calcuLink.Headloss;
-                            calcuLinkProperty.CalcuFlow = calcuLink.Flow;
-                            calcuLinkProperty.CalcuVelocity = calcuLink.Velocity;
-                            calcuProperty = calcuLinkProperty;
-                        }
 
-                        if (calcuProperty != null)
-                        {
-                            _propertyCtrl?.UpdateCalcuProperty(calcuProperty);
-                        }
-                    }
+            var allCalcuResultList = GetAllCalcuResultList();
+            if (allCalcuResultList != null && allCalcuResultList.Count > 0)
+            {
+                var calcuResult = allCalcuResultList.Find(x => x.Code == _parter.Code);
+                if (calcuResult != null)
+                {
+                    _propertyCtrl?.UpdateCalcuProperty(calcuResult);
                 }
             }
-
         }
 
         #endregion
@@ -970,6 +944,68 @@
 
         #region 姘村姏璁$畻
 
+
+        #region 鍓嶆彁鏉′欢
+
+        //鏄剧ず璁$畻鍓嶆彁鏉′欢绐椾綋
+        private async void ShowCalcuPrefixDlg()
+        {
+            if (_hydroInfo == null)
+            {
+                return;
+            }
+            var dlg = new SetHydroCalcuPrefixDlg();
+            dlg.SetBindingData(_hydroInfo);
+            dlg.HydroViewEvent += async (parter) =>
+            {
+                _parter = parter;
+                if (_parter != null)
+                {
+                    await _bimfaceCtrl?.ZoomAndSelectComponents(new List<string>() { _parter.Code });
+                }
+                ShowProperty();
+            };
+            dlg.HydroCalcuEvent += async () =>
+            {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
+
+                //鏍¢獙
+                _checkResult = _hydroInfo.Check();
+                if (!_checkResult.Succeed)
+                {
+                    ShowCheckCtrl();
+                    TipFormHelper.ShowWarn("鏍¢獙澶辫触锛岃妫�鏌ュ悗閲嶈瘯");
+                    return;
+                }
+
+                var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo);
+                _calcuResult = netWork.Calcu();
+                if (_calcuResult.Succeed)
+                {
+                    GetAllCalcuResultList(false);
+                    await _bimfaceCtrl?.SetLogicCalcuCustomLabels(_calcuResult);
+                    TipFormHelper.ShowSucceed("璁$畻鎴愬姛锛�");
+                }
+                else
+                {
+                    ShowCalcuFailedCtrl();
+                    TipFormHelper.ShowError("璁$畻澶辫触锛�");
+                }
+
+            };
+            if (dlg.ShowDialog() == DialogResult.Cancel)
+            {
+                await _bimfaceCtrl?.ClearLogicCalcuCustomLabels();
+            }
+        }
+
+        #endregion
+
+        #region 璁$畻澶辫触
+
         //璁$畻澶辫触鎺т欢
         private HydroCalcuFailedCtrl _calcuFailedCtrl = null;
 
@@ -1008,8 +1044,16 @@
             this.docPnlBottom.Height = 350;
         }
 
+        #endregion
+
+        #region 璁$畻缁撴灉
+
+        //鎵�鏈夎绠楃粨鏋滃垪琛�
+        private List<IHydroCalcuResult> _allCalcuResultList = null;
+
         //鑾峰彇璁$畻缁撴灉
-        private List<IHydroCalcuResult> GetAllCalcuResultList()
+        //true 浣跨敤缂撳瓨锛宖alse 涓嶄娇鐢ㄧ紦瀛�
+        private List<IHydroCalcuResult> GetAllCalcuResultList(bool isCache = true)
         {
             if (_hydroInfo == null)
             {
@@ -1023,7 +1067,12 @@
             {
                 return default;
             }
-            var list = new List<IHydroCalcuResult>();
+            if (isCache)
+            {
+                return _allCalcuResultList;
+            }
+
+            _allCalcuResultList = new List<IHydroCalcuResult>();
             var allNodeList = _hydroInfo.GetAllNodes();
             if (allNodeList != null && allNodeList.Count > 0)
             {
@@ -1042,91 +1091,86 @@
                                 CalcuHead = calcuNode.Head,
                                 CalcuDemand = calcuNode.Demand
                             };
-                            list.Add(calcuResult);
+                            _allCalcuResultList.Add(calcuResult);
                         }
                     }
                 }
             }
 
-            var allListList = _hydroInfo.GetAllLinks();
-            if (allListList != null && allListList.Count > 0)
+            var allLinkList = _hydroInfo.GetAllLinks();
+            if (allLinkList != null && allLinkList.Count > 0)
             {
                 var allCalcuLinkList = _calcuResult.LinkList;
                 if (allCalcuLinkList != null && allCalcuLinkList.Count > 0)
                 {
-                    foreach (var link in allListList)
+                    foreach (var link in allLinkList)
                     {
                         var calcuLink = allCalcuLinkList.Find(x => x.Id == link.Code);
                         if (calcuLink != null)
                         {
-                            var calcuResult = new HydroCalcuLinkResult()
+                            if (link is Yw.Model.HydroPumpInfo pump)
                             {
-                                Code = link.Code,
-                                CalcuFlow = calcuLink.Flow,
-                                CalcuVelocity = calcuLink.Velocity,
-                                CalcuHeadLoss = calcuLink.Headloss
-                            };
-                            list.Add(calcuResult);
+                                var calcuResult = new HydroCalcuPumpResult()
+                                {
+                                    Code = link.Code,
+                                    CalcuFlow = calcuLink.Flow,
+                                    CalcuVelocity = calcuLink.Velocity,
+                                    CalcuHeadLoss = calcuLink.Headloss,
+                                    CalcuQ = calcuLink.Flow
+                                };
+                                if (calcuResult.CalcuQ > 0)
+                                {
+                                    var startCalcuNode = _calcuResult.NodeList?.Find(x => x.Id == link.StartCode);
+                                    var endCalcuNode = _calcuResult.NodeList?.Find(x => x.Id == link.EndCode);
+                                    if (startCalcuNode != null && endCalcuNode != null)
+                                    {
+                                        calcuResult.CalcuH = Math.Abs(startCalcuNode.Press - endCalcuNode.Press);
+                                    }
+
+                                    if (pump.RatedN.HasValue)
+                                    {
+                                        var curveqp = _hydroInfo.Curves?.Find(x => x.Code == pump.CurveQP);
+                                        if (curveqp != null)
+                                        {
+                                            if (curveqp.CurveData != null && curveqp.CurveData.Count > 3)
+                                            {
+                                                var point2dList = curveqp.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
+                                                var point2dSimularList = point2dList.GetQPPointListByN(pump.RatedN.Value, pump.RatedN.Value * pump.SpeedRatio);
+                                                var pumpCurveQp = new Yw.Pump.CurveQP(eFeatType.Cubic, point2dSimularList);
+                                                calcuResult.CalcuP = pumpCurveQp.FeatCurve.GetPointY(calcuResult.CalcuQ.Value);
+                                            }
+                                        }
+                                    }
+                                    if (calcuResult.CalcuH.HasValue && calcuResult.CalcuP.HasValue)
+                                    {
+                                        calcuResult.CalcuE = Yw.Pump.CalculationHelper.CalcuE(calcuResult.CalcuQ.Value, calcuResult.CalcuH.Value, calcuResult.CalcuP.Value);
+                                    }
+                                }
+
+
+                                _allCalcuResultList.Add(calcuResult);
+                            }
+                            else
+                            {
+                                var calcuResult = new HydroCalcuLinkResult()
+                                {
+                                    Code = link.Code,
+                                    CalcuFlow = calcuLink.Flow,
+                                    CalcuVelocity = calcuLink.Velocity,
+                                    CalcuHeadLoss = calcuLink.Headloss
+                                };
+                                _allCalcuResultList.Add(calcuResult);
+                            }
+
                         }
                     }
                 }
             }
 
-            return list;
+            return _allCalcuResultList;
         }
 
-        //鏄剧ず璁$畻鍓嶆彁绐椾綋
-        private async void ShowCalcuPrefixDlg()
-        {
-            if (_hydroInfo == null)
-            {
-                return;
-            }
-            var dlg = new SetHydroCalcuPrefixDlg();
-            dlg.SetBindingData(_hydroInfo);
-            dlg.HydroViewEvent += async (parter) =>
-            {
-                _parter = parter;
-                if (_parter != null)
-                {
-                    await _bimfaceCtrl?.ZoomAndSelectComponents(new List<string>() { _parter.Code });
-                }
-                ShowProperty();
-            };
-            dlg.HydroCalcuEvent += async () =>
-            {
-                if (_hydroInfo == null)
-                {
-                    return;
-                }
-
-                //鏍¢獙
-                _checkResult = _hydroInfo.Check();
-                if (!_checkResult.Succeed)
-                {
-                    ShowCheckCtrl();
-                    TipFormHelper.ShowWarn("鏍¢獙澶辫触锛岃妫�鏌ュ悗閲嶈瘯");
-                    return;
-                }
-
-                var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo);
-                _calcuResult = netWork.Calcu();
-                if (_calcuResult.Succeed)
-                {
-                    await _bimfaceCtrl?.SetLogicCalcuCustomLabels(_calcuResult);
-                    TipFormHelper.ShowSucceed("璁$畻鎴愬姛锛�");
-                }
-                else
-                {
-                    ShowCalcuFailedCtrl();
-                    TipFormHelper.ShowError("璁$畻澶辫触锛�");
-                }
-            };
-            if (dlg.ShowDialog() == DialogResult.Cancel)
-            {
-                await _bimfaceCtrl?.ClearLogicCalcuCustomLabels();
-            }
-        }
+        #endregion
 
         //姘村姏璁$畻
         private void barBtnHydroCalcu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)

--
Gitblit v1.9.3