From 1dd0b6e81d70ac0968fbd4fb1f37c482234afc4c Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期一, 28 十月 2024 12:09:22 +0800
Subject: [PATCH] 流量计、压力表计算结果优化

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs |  274 ++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 203 insertions(+), 71 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 6d27250..217d09e 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
@@ -618,25 +618,111 @@
             //闂峰ご
             this.barBtnSetBluntheadList.ItemClick += delegate
             {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
                 var dlg = new HydroBluntheadBulkSetListDlg();
                 dlg.ShowDialog();
             };
             //寮ご
             this.barBtnSetElbowsList.ItemClick += delegate
             {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
                 var dlg = new HydroElbowBulkSetListDlg();
+                dlg.SetBindingData(_hydroInfo);
                 dlg.ShowDialog();
             };
             //涓夐��
             this.barBtnSetThreelinkList.ItemClick += delegate
             {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
                 var dlg = new HydroThreelinkBulkSetListDlg();
+                dlg.SetBindingData(_hydroInfo);
                 dlg.ShowDialog();
             };
             //鍥涢��
             this.barBtnSetFourlinkList.ItemClick += delegate
             {
-
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
+                var dlg = new HydroFourlinkBulkSetListDlg();
+                dlg.SetBindingData(_hydroInfo);
+                dlg.ShowDialog();
+            };
+            //姘磋〃
+            this.barBtnSetMeterList.ItemClick += delegate
+            {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
+                var dlg = new HydroMeterBulkSetListDlg();
+                dlg.SetBindingData(_hydroInfo);
+                dlg.ShowDialog();
+            };
+            //娴侀噺璁�
+            this.barBtnSetFlowmeterList.ItemClick += delegate
+            {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
+                var dlg = new HydroFlowmeterBulkSetListDlg();
+                dlg.SetBindingData(_hydroInfo);
+                dlg.ShowDialog();
+            };
+            //鍘嬪姏琛�
+            this.barBtnSetPressmeterList.ItemClick += delegate
+            {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
+                var dlg = new HydroPressmeterBulkSetListDlg();
+                dlg.SetBindingData(_hydroInfo);
+                dlg.ShowDialog();
+            };
+            //绠¢亾
+            this.barBtnSetPipeList.ItemClick += delegate
+            {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
+                var dlg = new HydroPipeBulkSetListDlg();
+                dlg.SetBindingData(_hydroInfo);
+                dlg.ShowDialog();
+            };
+            //姘存车
+            this.barBtnSetPumpList.ItemClick += delegate
+            {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
+                var dlg = new HydroPumpBulkSetListDlg();
+                dlg.SetBindingData(_hydroInfo);
+                dlg.ShowDialog();
+            };
+            //闃�闂�
+            this.barBtnSetValveList.ItemClick += delegate
+            {
+                if (_hydroInfo == null)
+                {
+                    return;
+                }
+                var dlg = new HydroValveBulkSetListDlg();
+                dlg.SetBindingData(_hydroInfo);
+                dlg.ShowDialog();
             };
         }
 
@@ -1049,11 +1135,11 @@
         #region 璁$畻缁撴灉
 
         //鎵�鏈夎绠楃粨鏋滃垪琛�
-        private List<IHydroCalcuResult> _allCalcuResultList = null;
+        private List<HydroCalcuResult> _allCalcuResultList = null;
 
         //鑾峰彇璁$畻缁撴灉
         //true 浣跨敤缂撳瓨锛宖alse 涓嶄娇鐢ㄧ紦瀛�
-        private List<IHydroCalcuResult> GetAllCalcuResultList(bool isCache = true)
+        private List<HydroCalcuResult> GetAllCalcuResultList(bool isCache = true)
         {
             if (_hydroInfo == null)
             {
@@ -1072,97 +1158,143 @@
                 return _allCalcuResultList;
             }
 
-            _allCalcuResultList = new List<IHydroCalcuResult>();
+            _allCalcuResultList = new List<HydroCalcuResult>();
+
+            //鑺傜偣
             var allNodeList = _hydroInfo.GetAllNodes();
             if (allNodeList != null && allNodeList.Count > 0)
             {
-                var allCalcuNodeList = _calcuResult.NodeList;
-                if (allCalcuNodeList != null && allCalcuNodeList.Count > 0)
+                foreach (var node in allNodeList)
                 {
-                    foreach (var node in allNodeList)
+                    var calcuNode = _calcuResult.NodeList?.Find(x => x.Id == node.Code);
+                    if (calcuNode != null)
                     {
-                        var calcuNode = allCalcuNodeList.Find(x => x.Id == node.Code);
-                        if (calcuNode != null)
+                        var calcuResult = new HydroCalcuNodeResult()
                         {
-                            var calcuResult = new HydroCalcuNodeResult()
-                            {
-                                Code = node.Code,
-                                CalcuPress = calcuNode.Press,
-                                CalcuHead = calcuNode.Head,
-                                CalcuDemand = calcuNode.Demand
-                            };
-                            _allCalcuResultList.Add(calcuResult);
-                        }
+                            Code = node.Code,
+                            CalcuPress = calcuNode.Press,
+                            CalcuHead = calcuNode.Head,
+                            CalcuDemand = calcuNode.Demand
+                        };
+                        _allCalcuResultList.Add(calcuResult);
                     }
                 }
             }
 
+            //绠℃
             var allLinkList = _hydroInfo.GetAllLinks();
             if (allLinkList != null && allLinkList.Count > 0)
             {
-                var allCalcuLinkList = _calcuResult.LinkList;
-                if (allCalcuLinkList != null && allCalcuLinkList.Count > 0)
+                foreach (var link in allLinkList)
                 {
-                    foreach (var link in allLinkList)
+                    var calcuLink = _calcuResult.LinkList?.Find(x => x.Id == link.Code);
+                    if (calcuLink != null)
                     {
-                        var calcuLink = allCalcuLinkList.Find(x => x.Id == link.Code);
-                        if (calcuLink != null)
+                        var calcuResult = new HydroCalcuLinkResult()
                         {
-                            if (link is Yw.Model.HydroPumpInfo pump)
-                            {
-                                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);
-                                    }
+                            Code = link.Code,
+                            CalcuFlow = calcuLink.Flow,
+                            CalcuVelocity = calcuLink.Velocity,
+                            CalcuHeadLoss = calcuLink.Headloss
+                        };
+                        _allCalcuResultList.Add(calcuResult);
+                    }
+                }
+            }
 
-                                    if (pump.RatedN.HasValue)
+            //娴侀噺璁�
+            var allFlowmeterList = _hydroInfo.Flowmeters;
+            if (allFlowmeterList != null && allFlowmeterList.Count > 0)
+            {
+                foreach (var flowmeter in allFlowmeterList)
+                {
+                    var calcuFlowmeterResult = _allCalcuResultList.Find(x => x.Code == flowmeter.Code) as HydroCalcuNodeResult;
+                    if (calcuFlowmeterResult != null)
+                    {
+                        var calcuFlowmeterNewResult = new HydroCalcuFlowmeterResult(calcuFlowmeterResult);
+                        var calcuFlowmeterLinkResultList = new List<HydroCalcuLinkResult>();
+                        var flowmeterLinkList = allLinkList?.Where(x => x.StartCode == flowmeter.Code || x.EndCode == flowmeter.Code).ToList();
+                        if (flowmeterLinkList != null && flowmeterLinkList.Count > 0)
+                        {
+                            foreach (var flowmeterLink in flowmeterLinkList)
+                            {
+                                var calcuFlowmeterLinkResult = _allCalcuResultList.Find(x => x.Code == flowmeterLink.Code) as HydroCalcuLinkResult;
+                                if (calcuFlowmeterLinkResult != null)
+                                {
+                                    calcuFlowmeterLinkResultList.Add(calcuFlowmeterLinkResult);
+                                }
+                            }
+                        }
+                        if (calcuFlowmeterLinkResultList.Exists(x => x.CalcuFlow.HasValue))
+                        {
+                            calcuFlowmeterNewResult.CalcuQ = calcuFlowmeterLinkResultList.Where(x => x.CalcuFlow.HasValue).Average(x => x.CalcuFlow.Value);
+                        }
+                        _allCalcuResultList.Remove(calcuFlowmeterResult);
+                        _allCalcuResultList.Add(calcuFlowmeterNewResult);
+                    }
+                }
+            }
+
+            //鍘嬪姏琛�
+            var allPressmeterList = _hydroInfo.Pressmeters;
+            if (allPressmeterList != null && allPressmeterList.Count > 0)
+            {
+                foreach (var pressmeter in allPressmeterList)
+                {
+                    var calcuPressmeterResult = _allCalcuResultList.Find(x => x.Code == pressmeter.Code) as HydroCalcuNodeResult;
+                    if (calcuPressmeterResult != null)
+                    {
+                        var calcuPressmeterNewResult = new HydroCalcuPressmeterResult(calcuPressmeterResult);
+                        calcuPressmeterNewResult.CalcuPr = calcuPressmeterResult.CalcuPress;
+                        _allCalcuResultList.Remove(calcuPressmeterResult);
+                        _allCalcuResultList.Add(calcuPressmeterNewResult);
+                    }
+                }
+            }
+
+            //姘存车
+            var allPumpList = _hydroInfo.Pumps;
+            if (allPumpList != null && allPumpList.Count > 0)
+            {
+                foreach (var pump in allPumpList)
+                {
+                    var calcuPumpResult = _allCalcuResultList.Find(x => x.Code == pump.Code) as HydroCalcuLinkResult;
+                    if (calcuPumpResult != null)
+                    {
+                        var calcuPumpNewResult = new HydroCalcuPumpResult(calcuPumpResult);
+                        calcuPumpNewResult.CalcuQ = calcuPumpResult.CalcuFlow;
+                        if (calcuPumpNewResult.CalcuQ.HasValue)
+                        {
+                            var calcuNodeStartResult = _allCalcuResultList.Find(x => x.Code == pump.StartCode) as HydroCalcuNodeResult;
+                            var calcuNodeEndResult = _allCalcuResultList.Find(x => x.Code == pump.EndCode) as HydroCalcuNodeResult;
+                            if (calcuNodeStartResult != null && calcuNodeEndResult != null)
+                            {
+                                if (calcuNodeStartResult.CalcuPress.HasValue && calcuNodeEndResult.CalcuPress.HasValue)
+                                {
+                                    calcuPumpNewResult.CalcuH = Math.Abs(calcuNodeStartResult.CalcuPress.Value - calcuNodeEndResult.CalcuPress.Value);
+                                }
+                                if (pump.RatedN.HasValue)
+                                {
+                                    var curveqp = _hydroInfo.Curves?.Find(x => x.Code == pump.CurveQP);
+                                    if (curveqp != null)
                                     {
-                                        var curveqp = _hydroInfo.Curves?.Find(x => x.Code == pump.CurveQP);
-                                        if (curveqp != null)
+                                        if (curveqp.CurveData != null && curveqp.CurveData.Count > 3)
                                         {
-                                            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);
-                                            }
+                                            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);
+                                            calcuPumpNewResult.CalcuP = pumpCurveQp.FeatCurve.GetPointY(calcuPumpNewResult.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()
+                                if (calcuPumpNewResult.CalcuH.HasValue && calcuPumpNewResult.CalcuP.HasValue)
                                 {
-                                    Code = link.Code,
-                                    CalcuFlow = calcuLink.Flow,
-                                    CalcuVelocity = calcuLink.Velocity,
-                                    CalcuHeadLoss = calcuLink.Headloss
-                                };
-                                _allCalcuResultList.Add(calcuResult);
+                                    calcuPumpNewResult.CalcuE = Yw.Pump.CalculationHelper.CalcuE(calcuPumpNewResult.CalcuQ.Value, calcuPumpNewResult.CalcuH.Value, calcuPumpNewResult.CalcuP.Value);
+                                }
                             }
-
                         }
+                        _allCalcuResultList.Remove(calcuPumpResult);
+                        _allCalcuResultList.Add(calcuPumpNewResult);
                     }
                 }
             }
@@ -1388,12 +1520,12 @@
             {
                 _allGradingCodeList = obj?.Select(x => x.Code).Distinct().ToList();
                 var objGroupList = obj?.GroupBy(x => x.Color).ToList();
-                objGroupList.ForEach(async x =>
+                objGroupList?.ForEach(async x =>
                 {
                     await _bimfaceCtrl?.OverrideComponentsColor(x.Select(t => t.Code).Distinct().ToList(), x.Key, 1);
                 });
             };
-            if (dlg.ShowDialog() != DialogResult.OK)
+            if (dlg.ShowDialog() == DialogResult.Cancel)
             {
                 await _bimfaceCtrl?.RestoreComponentsColor(_allGradingCodeList);
             }

--
Gitblit v1.9.3