lixiaojun
2024-10-24 1c82571504174fba279276a80ea8dac28a674c1e
优化了泵计算属性和计算结果缓存问题
已修改9个文件
已添加2个文件
612 ■■■■ 文件已修改
Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/04-calcu/HydroCalcuPumpResult.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/04-calcu/IHydroCalcuPumpResult.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/03-link/00-core/HydroLinkPropertyViewModel.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/03-link/02-pump/HydroPumpPropertyViewModel.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/03-link/00-core/HydroLinkViewModel.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/03-link/02-pump/HydroPumpListCtrl.Designer.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/03-link/02-pump/HydroPumpListCtrl.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/03-link/02-pump/HydroPumpViewModel.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj
@@ -7,7 +7,7 @@
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Yw.Service.Hydro.Core" Version="3.6.3" />
    <PackageReference Include="Yw.Service.Hydro.Core" Version="3.6.5" />
  </ItemGroup>
  <ItemGroup>
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs
@@ -107,7 +107,7 @@
            ribbonControl1.ShowPageHeadersMode = DevExpress.XtraBars.Ribbon.ShowPageHeadersMode.ShowOnMultiplePages;
            ribbonControl1.ShowQatLocationSelector = false;
            ribbonControl1.ShowToolbarCustomizeItem = false;
            ribbonControl1.Size = new Size(1206, 101);
            ribbonControl1.Size = new Size(1206, 128);
            ribbonControl1.Toolbar.ShowCustomizeItem = false;
            ribbonControl1.ToolbarLocation = DevExpress.XtraBars.Ribbon.RibbonQuickAccessToolbarLocation.Hidden;
            // 
@@ -418,12 +418,12 @@
            tabPane1.Controls.Add(tabPageBimface);
            tabPane1.Controls.Add(tabPageQ3d);
            tabPane1.Dock = DockStyle.Fill;
            tabPane1.Location = new Point(0, 101);
            tabPane1.Location = new Point(0, 128);
            tabPane1.Name = "tabPane1";
            tabPane1.Pages.AddRange(new DevExpress.XtraBars.Navigation.NavigationPageBase[] { tabPageBimface, tabPageQ3d });
            tabPane1.RegularSize = new Size(931, 434);
            tabPane1.RegularSize = new Size(931, 407);
            tabPane1.SelectedPage = tabPageBimface;
            tabPane1.Size = new Size(931, 434);
            tabPane1.Size = new Size(931, 407);
            tabPane1.TabIndex = 1;
            tabPane1.Text = "tabPane1";
            // 
@@ -450,17 +450,17 @@
            docPnlRight.Controls.Add(controlContainerRight);
            docPnlRight.Dock = DevExpress.XtraBars.Docking.DockingStyle.Right;
            docPnlRight.ID = new Guid("cffe2560-3445-4488-83cf-b9e4b936ff18");
            docPnlRight.Location = new Point(931, 101);
            docPnlRight.Location = new Point(931, 128);
            docPnlRight.Name = "docPnlRight";
            docPnlRight.OriginalSize = new Size(275, 200);
            docPnlRight.Size = new Size(275, 599);
            docPnlRight.Size = new Size(275, 572);
            docPnlRight.Text = "属性";
            // 
            // controlContainerRight
            // 
            controlContainerRight.Location = new Point(4, 26);
            controlContainerRight.Name = "controlContainerRight";
            controlContainerRight.Size = new Size(268, 570);
            controlContainerRight.Size = new Size(268, 543);
            controlContainerRight.TabIndex = 0;
            // 
            // docPnlBottom
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -1,7 +1,9 @@
global 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 ä½¿ç”¨ç¼“存,false ä¸ä½¿ç”¨ç¼“å­˜
        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)
WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/04-calcu/HydroCalcuPumpResult.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
namespace Yw.WinFrmUI
{
    /// <summary>
    ///
    /// </summary>
    public class HydroCalcuPumpResult : HydroCalcuLinkResult, IHydroCalcuPumpResult
    {
        /// <summary>
        /// æµé‡  (m³/h)
        /// </summary>
        public double? CalcuQ { get; set; }
        /// <summary>
        /// æ‰¬ç¨‹ï¼ˆm)
        /// </summary>
        public double? CalcuH { get; set; }
        /// <summary>
        /// åŠŸçŽ‡ï¼ˆkW)
        /// </summary>
        public double? CalcuP { get; set; }
        /// <summary>
        /// æ•ˆçŽ‡ï¼ˆ%)
        /// </summary>
        public double? CalcuE { get; set; }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/04-calcu/IHydroCalcuPumpResult.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yw.WinFrmUI
{
    /// <summary>
    ///
    /// </summary>
    public interface IHydroCalcuPumpResult : IHydroCalcuLinkResult
    {
        /// <summary>
        /// è®¡ç®—流量
        /// </summary>
        double? CalcuQ { get; set; }
        /// <summary>
        /// è®¡ç®—扬程
        /// </summary>
        double? CalcuH { get; set; }
        /// <summary>
        /// è®¡ç®—功率
        /// </summary>
        double? CalcuP { get; set; }
        /// <summary>
        /// è®¡ç®—效率
        /// </summary>
        double? CalcuE { get; set; }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/03-link/00-core/HydroLinkPropertyViewModel.cs
@@ -66,7 +66,7 @@
        [DisplayUnit("m³/h")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        public double? CalcuFlow { get; set; }
        public virtual double? CalcuFlow { get; set; }
        /// <summary>
        /// æµé€Ÿ
@@ -78,7 +78,7 @@
        [DisplayUnit("m/s")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        public double? CalcuVelocity { get; set; }
        public virtual double? CalcuVelocity { get; set; }
        /// <summary>
        /// æ°´å¤´æŸå¤±
@@ -90,7 +90,7 @@
        [DisplayUnit("m")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        public double? CalcuHeadLoss { get; set; }
        public virtual double? CalcuHeadLoss { get; set; }
        /// <summary>
        /// æ›´æ–°å±žæ€§
WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-property/03-link/02-pump/HydroPumpPropertyViewModel.cs
@@ -5,7 +5,7 @@
    /// <summary>
    /// æ°´æ³µå±žæ€§è§†å›¾
    /// </summary>
    public class HydroPumpPropertyViewModel : HydroLinkPropertyViewModel
    public class HydroPumpPropertyViewModel : HydroLinkPropertyViewModel, IHydroCalcuPumpResult
    {
        /// <summary>
        /// 
@@ -203,6 +203,92 @@
        /// <summary>
        /// æµé‡
        /// </summary>
        [Category("计算结果")]
        [DisplayName("流量")]
        [PropertyOrder(10001)]
        [DisplayUnit("m³/h")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        [Browsable(false)]
        public override double? CalcuFlow { get; set; }
        /// <summary>
        /// æµé€Ÿ
        /// </summary>
        [Category("计算结果")]
        [DisplayName("流速")]
        [PropertyOrder(10002)]
        [DisplayUnit("m/s")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        [Browsable(false)]
        public override double? CalcuVelocity { get; set; }
        /// <summary>
        /// æ°´å¤´æŸå¤±
        /// </summary>
        [Category("计算结果")]
        [DisplayName("水头损失")]
        [PropertyOrder(10003)]
        [DisplayUnit("m")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        [Browsable(false)]
        public override double? CalcuHeadLoss { get; set; }
        /// <summary>
        /// æµé‡
        /// </summary>
        [Category("计算结果")]
        [DisplayName("流量")]
        [PropertyOrder(11001)]
        [DisplayUnit("m³/h")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        [Browsable(true)]
        public double? CalcuQ { get; set; }
        /// <summary>
        /// æ‰¬ç¨‹
        /// </summary>
        [Category("计算结果")]
        [DisplayName("扬程")]
        [PropertyOrder(11002)]
        [DisplayUnit("m")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        [Browsable(true)]
        public double? CalcuH { get; set; }
        /// <summary>
        /// åŠŸçŽ‡
        /// </summary>
        [Category("计算结果")]
        [DisplayName("功率")]
        [PropertyOrder(11003)]
        [DisplayUnit("kW")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        [Browsable(true)]
        public double? CalcuP { get; set; }
        /// <summary>
        /// æ•ˆçއ
        /// </summary>
        [Category("计算结果")]
        [DisplayName("效率")]
        [PropertyOrder(11004)]
        [DisplayUnit("%")]
        [IsHydroCalcuPro(true)]
        [ShowEditor(false)]
        [Browsable(true)]
        public double? CalcuE { get; set; }
        /// <summary>
        /// æ›´æ–°å±žæ€§
        /// </summary>
        public override void UpdateProperty(HydroParterInfo rhs, List<HydroParterInfo> allParterList)
@@ -237,7 +323,20 @@
            }
        }
        /// <summary>
        /// æ›´æ–°è®¡ç®—属性
        /// </summary>
        public override void UpdateCalcuProperty(IHydroCalcuResult rhs)
        {
            base.UpdateCalcuProperty(rhs);
            if (rhs is IHydroCalcuPumpResult calcuPumpProperty)
            {
                this.CalcuQ = calcuPumpProperty.CalcuQ.HasValue ? Math.Round(calcuPumpProperty.CalcuQ.Value, 1) : null;
                this.CalcuH = calcuPumpProperty.CalcuH.HasValue ? Math.Round(calcuPumpProperty.CalcuH.Value, 2) : null;
                this.CalcuP = calcuPumpProperty.CalcuP.HasValue ? Math.Round(calcuPumpProperty.CalcuP.Value, 1) : null;
                this.CalcuE = calcuPumpProperty.CalcuE.HasValue ? Math.Round(calcuPumpProperty.CalcuE.Value, 1) : null;
            }
        }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/03-link/00-core/HydroLinkViewModel.cs
@@ -3,7 +3,7 @@
    /// <summary>
    /// 
    /// </summary>
    public class HydroLinkViewModel : HydroVisualViewModel
    public class HydroLinkViewModel : HydroVisualViewModel, IHydroCalcuLinkResult
    {
        /// <summary>
@@ -58,19 +58,19 @@
        /// è®¡ç®—流量 ï¼ˆm³/h)
        /// </summary>
        [DisplayName("计算流量(m³/h)")]
        public double? CalcuFlow { get; set; }
        public virtual double? CalcuFlow { get; set; }
        /// <summary>
        /// è®¡ç®—流速(m/s)
        /// </summary>
        [DisplayName("计算流速(m/s)")]
        public double? CalcuVelocity { get; set; }
        public virtual double? CalcuVelocity { get; set; }
        /// <summary>
        /// è®¡ç®—水头损失(m)
        /// </summary>
        [DisplayName("计算水头损失(m)")]
        public double? CalcuHeadLoss { get; set; }
        public virtual double? CalcuHeadLoss { get; set; }
        /// <summary>
        /// Vmo
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/03-link/02-pump/HydroPumpListCtrl.Designer.cs
@@ -54,11 +54,12 @@
            colSpeedRatioPattern = new DevExpress.XtraGrid.Columns.GridColumn();
            colPrice = new DevExpress.XtraGrid.Columns.GridColumn();
            colPricePattern = new DevExpress.XtraGrid.Columns.GridColumn();
            colCalcuFlow = new DevExpress.XtraGrid.Columns.GridColumn();
            colCalcuVelocity = new DevExpress.XtraGrid.Columns.GridColumn();
            colCalcuHeadLoss = new DevExpress.XtraGrid.Columns.GridColumn();
            colFlagsString = new DevExpress.XtraGrid.Columns.GridColumn();
            colDescription = new DevExpress.XtraGrid.Columns.GridColumn();
            colCalcuQ = new DevExpress.XtraGrid.Columns.GridColumn();
            colCalcuH = new DevExpress.XtraGrid.Columns.GridColumn();
            colCalcuP = new DevExpress.XtraGrid.Columns.GridColumn();
            colCalcuE = new DevExpress.XtraGrid.Columns.GridColumn();
            ((ISupportInitialize)gridControl1).BeginInit();
            ((ISupportInitialize)hydroPumpViewModelBindingSource).BeginInit();
            ((ISupportInitialize)gridView1).BeginInit();
@@ -81,7 +82,7 @@
            // 
            // gridView1
            // 
            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colDbLocked, colCode, colName, colModelType, colHasDb, colStartCode, colEndCode, colLinkStatus, colRatedP, colRatedQ, colRatedH, colRatedN, colRatedHz, colCurrentHz, colHasCurve, colCurveQH, colCurveQP, colCurveQE, colSpeedRatio, colSpeedRatioPattern, colPrice, colPricePattern, colCalcuFlow, colCalcuVelocity, colCalcuHeadLoss, colFlagsString, colDescription });
            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colDbLocked, colCode, colName, colModelType, colHasDb, colStartCode, colEndCode, colLinkStatus, colRatedP, colRatedQ, colRatedH, colRatedN, colRatedHz, colCurrentHz, colHasCurve, colCurveQH, colCurveQP, colCurveQE, colSpeedRatio, colSpeedRatioPattern, colPrice, colPricePattern, colCalcuQ, colCalcuH, colCalcuP, colCalcuE, colFlagsString, colDescription });
            gridView1.GridControl = gridControl1;
            gridView1.Name = "gridView1";
            gridView1.OptionsFind.AlwaysVisible = true;
@@ -307,36 +308,6 @@
            colPricePattern.VisibleIndex = 21;
            colPricePattern.Width = 100;
            // 
            // colCalcuFlow
            //
            colCalcuFlow.FieldName = "CalcuFlow";
            colCalcuFlow.MaxWidth = 100;
            colCalcuFlow.MinWidth = 100;
            colCalcuFlow.Name = "colCalcuFlow";
            colCalcuFlow.Visible = true;
            colCalcuFlow.VisibleIndex = 22;
            colCalcuFlow.Width = 100;
            //
            // colCalcuVelocity
            //
            colCalcuVelocity.FieldName = "CalcuVelocity";
            colCalcuVelocity.MaxWidth = 100;
            colCalcuVelocity.MinWidth = 100;
            colCalcuVelocity.Name = "colCalcuVelocity";
            colCalcuVelocity.Visible = true;
            colCalcuVelocity.VisibleIndex = 23;
            colCalcuVelocity.Width = 100;
            //
            // colCalcuHeadLoss
            //
            colCalcuHeadLoss.FieldName = "CalcuHeadLoss";
            colCalcuHeadLoss.MaxWidth = 100;
            colCalcuHeadLoss.MinWidth = 100;
            colCalcuHeadLoss.Name = "colCalcuHeadLoss";
            colCalcuHeadLoss.Visible = true;
            colCalcuHeadLoss.VisibleIndex = 24;
            colCalcuHeadLoss.Width = 100;
            //
            // colFlagsString
            // 
            colFlagsString.FieldName = "FlagsString";
@@ -344,7 +315,7 @@
            colFlagsString.MinWidth = 100;
            colFlagsString.Name = "colFlagsString";
            colFlagsString.Visible = true;
            colFlagsString.VisibleIndex = 25;
            colFlagsString.VisibleIndex = 26;
            colFlagsString.Width = 100;
            // 
            // colDescription
@@ -353,8 +324,48 @@
            colDescription.MinWidth = 100;
            colDescription.Name = "colDescription";
            colDescription.Visible = true;
            colDescription.VisibleIndex = 26;
            colDescription.VisibleIndex = 27;
            colDescription.Width = 100;
            //
            // colCalcuQ
            //
            colCalcuQ.FieldName = "CalcuQ";
            colCalcuQ.MaxWidth = 100;
            colCalcuQ.MinWidth = 100;
            colCalcuQ.Name = "colCalcuQ";
            colCalcuQ.Visible = true;
            colCalcuQ.VisibleIndex = 22;
            colCalcuQ.Width = 100;
            //
            // colCalcuH
            //
            colCalcuH.FieldName = "CalcuH";
            colCalcuH.MaxWidth = 100;
            colCalcuH.MinWidth = 100;
            colCalcuH.Name = "colCalcuH";
            colCalcuH.Visible = true;
            colCalcuH.VisibleIndex = 23;
            colCalcuH.Width = 100;
            //
            // colCalcuP
            //
            colCalcuP.FieldName = "CalcuP";
            colCalcuP.MaxWidth = 100;
            colCalcuP.MinWidth = 100;
            colCalcuP.Name = "colCalcuP";
            colCalcuP.Visible = true;
            colCalcuP.VisibleIndex = 24;
            colCalcuP.Width = 100;
            //
            // colCalcuE
            //
            colCalcuE.FieldName = "CalcuE";
            colCalcuE.MaxWidth = 100;
            colCalcuE.MinWidth = 100;
            colCalcuE.Name = "colCalcuE";
            colCalcuE.Visible = true;
            colCalcuE.VisibleIndex = 25;
            colCalcuE.Width = 100;
            // 
            // HydroPumpListCtrl
            // 
@@ -394,12 +405,13 @@
        private DevExpress.XtraGrid.Columns.GridColumn colRatedH;
        private DevExpress.XtraGrid.Columns.GridColumn colRatedN;
        private DevExpress.XtraGrid.Columns.GridColumn colCurveQP;
        private DevExpress.XtraGrid.Columns.GridColumn colCalcuFlow;
        private DevExpress.XtraGrid.Columns.GridColumn colCalcuVelocity;
        private DevExpress.XtraGrid.Columns.GridColumn colCalcuHeadLoss;
        private DevExpress.XtraGrid.Columns.GridColumn colHasDb;
        private DevExpress.XtraGrid.Columns.GridColumn colRatedHz;
        private DevExpress.XtraGrid.Columns.GridColumn colCurrentHz;
        private DevExpress.XtraGrid.Columns.GridColumn colHasCurve;
        private DevExpress.XtraGrid.Columns.GridColumn colCalcuQ;
        private DevExpress.XtraGrid.Columns.GridColumn colCalcuH;
        private DevExpress.XtraGrid.Columns.GridColumn colCalcuP;
        private DevExpress.XtraGrid.Columns.GridColumn colCalcuE;
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/03-link/02-pump/HydroPumpListCtrl.cs
@@ -49,8 +49,8 @@
            {
                foreach (var pump in hydroInfo.Pumps)
                {
                    var calcuLinkResult = allCalcuResultList?.Find(x => x.Code == pump.Code) as HydroCalcuLinkResult;
                    var vm = new HydroPumpViewModel(pump, calcuLinkResult);
                    var calcuPumpResult = allCalcuResultList?.Find(x => x.Code == pump.Code) as HydroCalcuPumpResult;
                    var vm = new HydroPumpViewModel(pump, calcuPumpResult);
                    _allBindingList.Add(vm);
                }
            }
@@ -93,9 +93,10 @@
            this.colSpeedRatioPattern.Visible = false;
            this.colPrice.Visible = false;
            this.colPricePattern.Visible = false;
            this.colCalcuFlow.Visible = false;
            this.colCalcuVelocity.Visible = false;
            this.colCalcuHeadLoss.Visible = false;
            this.colCalcuQ.Visible = false;
            this.colCalcuH.Visible = false;
            this.colCalcuP.Visible = false;
            this.colCalcuE.Visible = false;
            this.colFlagsString.Visible = true;
            this.colDescription.Visible = true;
        }
@@ -127,9 +128,10 @@
            this.colSpeedRatioPattern.Visible = false;
            this.colPrice.Visible = false;
            this.colPricePattern.Visible = false;
            this.colCalcuFlow.Visible = false;
            this.colCalcuVelocity.Visible = false;
            this.colCalcuHeadLoss.Visible = false;
            this.colCalcuQ.Visible = false;
            this.colCalcuH.Visible = false;
            this.colCalcuP.Visible = false;
            this.colCalcuE.Visible = false;
            this.colFlagsString.Visible = true;
            this.colDescription.Visible = true;
        }
@@ -161,9 +163,10 @@
            this.colSpeedRatioPattern.Visible = false;
            this.colPrice.Visible = false;
            this.colPricePattern.Visible = false;
            this.colCalcuFlow.Visible = true;
            this.colCalcuVelocity.Visible = true;
            this.colCalcuHeadLoss.Visible = true;
            this.colCalcuQ.Visible = true;
            this.colCalcuH.Visible = true;
            this.colCalcuP.Visible = true;
            this.colCalcuE.Visible = true;
            this.colFlagsString.Visible = true;
            this.colDescription.Visible = true;
        }
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/03-link/02-pump/HydroPumpViewModel.cs
@@ -3,7 +3,7 @@
    /// <summary>
    /// 
    /// </summary>
    public class HydroPumpViewModel : HydroLinkViewModel
    public class HydroPumpViewModel : HydroLinkViewModel, IHydroCalcuPumpResult
    {
        /// <summary>
        /// 
@@ -35,7 +35,7 @@
        /// <summary>
        /// 
        /// </summary>
        public HydroPumpViewModel(Yw.Model.HydroPumpInfo rhs, Yw.WinFrmUI.HydroCalcuLinkResult calcuResult) : base(rhs, calcuResult)
        public HydroPumpViewModel(Yw.Model.HydroPumpInfo rhs, Yw.WinFrmUI.HydroCalcuPumpResult calcuResult) : base(rhs, calcuResult)
        {
            this.RatedP = rhs.RatedP;
            this.RatedQ = rhs.RatedQ;
@@ -52,6 +52,14 @@
            this.PricePattern = rhs.PricePattern;
            this.Vmo = rhs;
            if (calcuResult != null)
            {
                this.CalcuQ = calcuResult.CalcuQ.HasValue ? Math.Round(calcuResult.CalcuQ.Value, 1) : null;
                this.CalcuH = calcuResult.CalcuH.HasValue ? Math.Round(calcuResult.CalcuH.Value, 2) : null;
                this.CalcuP = calcuResult.CalcuP.HasValue ? Math.Round(calcuResult.CalcuP.Value, 1) : null;
                this.CalcuE = calcuResult.CalcuE.HasValue ? Math.Round(calcuResult.CalcuE.Value, 1) : null;
            }
        }
        /// <summary>
@@ -159,6 +167,48 @@
        [DisplayName("价格模式")]
        public string PricePattern { get; set; }
        /// <summary>
        /// è®¡ç®—流量 ï¼ˆm³/h)
        /// </summary>
        [DisplayName("计算流量(m³/h)")]
        public override double? CalcuFlow { get; set; }
        /// <summary>
        /// è®¡ç®—流速(m/s)
        /// </summary>
        [DisplayName("计算流速(m/s)")]
        public override double? CalcuVelocity { get; set; }
        /// <summary>
        /// è®¡ç®—水头损失(m)
        /// </summary>
        [DisplayName("计算水头损失(m)")]
        public override double? CalcuHeadLoss { get; set; }
        /// <summary>
        /// è®¡ç®—流量 ï¼ˆm³/h)
        /// </summary>
        [DisplayName("计算流量(m³/h)")]
        public double? CalcuQ { get; set; }
        /// <summary>
        /// è®¡ç®—扬程 ï¼ˆm)
        /// </summary>
        [DisplayName("计算扬程(m)")]
        public double? CalcuH { get; set; }
        /// <summary>
        /// è®¡ç®—功率 ï¼ˆkW)
        /// </summary>
        [DisplayName("计算功率(kW)")]
        public double? CalcuP { get; set; }
        /// <summary>
        /// è®¡ç®—效率 ï¼ˆ%)
        /// </summary>
        [DisplayName("计算效率(%)")]
        public double? CalcuE { get; set; }
        /// <summary>
        ///