lixiaojun
2025-01-07 59a54652c0ca8d064ead157802d21e06b0ea34e6
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.cs
@@ -9,6 +9,9 @@
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Yw.Geometry;
using Yw.Pump;
using Yw.WinFrmUI.Phart;
namespace HStation.WinFrmUI
{
@@ -19,12 +22,21 @@
            InitializeComponent();
            this.layoutControl1.SetupLayoutControl();
            this.hydroPumpListExtendGridCtrl1.StateChangedEvent += HydroPumpListExtendGridCtrl1_StateChangedEvent;
            this.pumpParallelChart1.DesignPointChangedEvent += PumpParallelChart1_DesignPointChangedEvent;
            this.pumpParallelChart1.QueryPointChangedEvent += PumpParallelChart1_QueryPointChangedEvent;
            this.pumpParallelChart1.ParallelStatusChangedEvent += PumpParallelChart1_ParallelStatusChangedEvent;
        }
        /// <summary>
        /// 保存事件
        /// </summary>
        public event Action<List<SimulationPumpParallelSaveItemViewModel>> SaveEvent;
        /// <summary>
        /// 并联状态改变事件
        /// </summary>
        public event Action<bool, string> ParallelStatusChangedEvent;
        /// <summary>
        /// 绑定列表
@@ -32,18 +44,22 @@
        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
        {
            this.hydroPumpListExtendGridCtrl1.SetBindingData(hydroInfo);
            var allStateList = this.hydroPumpListExtendGridCtrl1.GetStateList();
            var allVmList = CreateParallelViewModels(allStateList);
            this.pumpParallelChart1.SetBindingData(allVmList);
        }
        //状态改变事件
        private void HydroPumpListExtendGridCtrl1_StateChangedEvent(List<HydroPumpListItemExtendViewModel> allPumpStateList)
        private void HydroPumpListExtendGridCtrl1_StateChangedEvent(List<HydroPumpListItemExtendViewModel> allStateList)
        {
            var allVmList = CreateParallelViewModels(allStateList);
            this.pumpParallelChart1.SetBindingData(allVmList);
        }
        //保存
        private void btnSave_Click(object sender, EventArgs e)
        {
            var result = XtraMessageBox.Show("是否将现有水泵状态更新模型?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes;
            var result = XtraMessageBox.Show("是否使用现有水泵状态更新模型?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes;
            if (!result)
            {
                return;
@@ -62,6 +78,145 @@
            this.SaveEvent?.Invoke(allSaveList);
        }
        //创建
        private List<PumpParallelViewModel> CreateParallelViewModels(List<HydroPumpListItemExtendViewModel> allStateList)
        {
            var allRunList = allStateList?.Where(x => x.RunStatus).ToList();
            if (allRunList == null || allRunList.Count < 1)
            {
                return default;
            }
            var vmList = new List<PumpParallelViewModel>();
            foreach (var item in allRunList)
            {
                var vm = new PumpParallelViewModel();
                vm.Id = item.Code;
                vm.Name = item.Name;
                vm.RatedQ = item.Vmo.RatedQ;
                vm.RatedH = item.Vmo.RatedH;
                vm.RatedP = item.Vmo.RatedP;
                vm.RatedN = item.Vmo.RatedN;
                vm.RatedHz = item.Vmo.RatedHz;
                vm.CurrentHz = item.Hz;
                vm.CurrentN = Math.Round(item.Hz / item.Vmo.RatedHz * vm.RatedN, 1);
                vm.CurrentColor = item.Color;
                double extend = 1;
                var curveqh = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.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 = qh_pts;
                        var qh_current_pts = qh_pts.GetQHPointListByN(item.Vmo.RatedHz, item.Hz);
                        vm.CurrentCurveQH = qh_current_pts;
                        if (item.Extend > 100)
                        {
                            vm.CurrentExtendFlow = vm.CurrentCurveQH.Max(x => x.X);
                            extend = item.Extend / 100;
                            var qh_current_extend_pts = vm.CurrentCurveQH.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20);
                            vm.CurrentCurveQH = qh_current_extend_pts;
                        }
                    }
                }
                var curveqp = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.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 = qp_pts;
                        var qp_current_pts = qp_pts.GetQPPointListByN(item.Vmo.RatedHz, item.Hz);
                        vm.CurrentCurveQP = qp_current_pts;
                        if (extend > 1)
                        {
                            var qp_current_extend_pts = vm.CurrentCurveQP.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20);
                            vm.CurrentCurveQP = qp_current_extend_pts;
                        }
                    }
                }
                var curveqe = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQE);
                if (curveqe != null)
                {
                    var qe_pts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
                    if (qe_pts != null && qe_pts.Count > 3)
                    {
                        vm.CurveQE = qe_pts;
                        var qe_current_pts = qe_pts.GetQEPointListByN(item.Vmo.RatedHz, item.Hz);
                        vm.CurrentCurveQE = qe_current_pts;
                        if (extend > 1)
                        {
                            var qe_current_extend_pts = vm.CurrentCurveQE.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20);
                            vm.CurrentCurveQE = qe_current_extend_pts;
                        }
                    }
                }
                vmList.Add(vm);
            }
            return vmList;
        }
        //设计点改变
        private void PumpParallelChart1_DesignPointChangedEvent(List<PumpDesignPointViewModel> obj)
        {
            var vmList = obj?.Select(x => new HydroPumpDesignPointViewModel()
            {
                Code = x.Id,
                Name = x.Name,
                DesignQ = Math.Round(x.Q, 1),
                DesignH = Math.Round(x.H, 2),
                DesignP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null,
                DesignE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null,
            }).ToList();
            this.hydroPumpDesignPointListGridCtrl1.SetBindingData(vmList);
        }
        //查询点改变
        private void PumpParallelChart1_QueryPointChangedEvent(List<PumpQueryPointViewModel> obj)
        {
            var vmList = obj?.Select(x => new HydroPumpQueryPointViewModel()
            {
                Code = x.Id,
                Name = x.Name,
                QueryQ = Math.Round(x.Q, 1),
                QueryH = Math.Round(x.H, 2),
                QueryP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null,
                QueryE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null,
            }).ToList();
            this.hydroPumpQueryPointListGridCtrl1.SetBindingData(vmList);
        }
        //并联状态改变事件
        private void PumpParallelChart1_ParallelStatusChangedEvent(bool status, string msg)
        {
            this.ParallelStatusChangedEvent?.Invoke(status, msg);
        }
        //设计点
        private void btnDesign_Click(object sender, EventArgs e)
        {
            var qtext = this.txtDesignQ.Text.Trim();
            if (string.IsNullOrEmpty(qtext))
            {
                TipFormHelper.ShowWarn("请输入设计点流量!");
                return;
            }
            var htext = this.txtDesignH.Text.Trim();
            if (string.IsNullOrEmpty(htext))
            {
                TipFormHelper.ShowWarn("请输入设计点扬程!");
                return;
            }
            var q = double.Parse(qtext);
            var h = double.Parse(htext);
            this.pumpParallelChart1.SetDesignPoint(q, h);
        }
    }
}