lixiaojun
2025-01-24 7b65f86343ca014b12894f09b7d62e8b5ac1f95d
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/01-property/SimulationPropertyCtrl.cs
@@ -1,6 +1,4 @@
using HStation.WinFrmUI.PhartRelation;
using HStation.WinFrmUI.Xhs;
using Yw.Model;
using Yw.Model;
namespace HStation.WinFrmUI
{
@@ -20,10 +18,9 @@
            this.hydroVisualPropertyCtrl1.PropertyValueChangedEvent += HydroVisualPropertyCtrl1_PropertyValueChangedEvent;
            this.hydroVisualPropertyCtrl1.MarkPropertyValueChangedEvent += HydroVisualPropertyCtrl1_MarkPropertyValueChangedEvent;
            this.hydroVisualPropertyCtrl1.GradingPropertyValueChangedEvent += HydroPVisualPropertyCtrl1_GradingPropertyValueChangedEvent;
            this.hydroVisualPropertyCtrl1.FlowEffectPropertyValueChangedEvent += HydroVisualPropertyCtrl1_FlowEffectPropertyValueChangedEvent;
        }
        #region 事件集
        #region 事件集合
        /// <summary>
        /// 构件查看事件
@@ -52,14 +49,35 @@
        /// </summary>
        public event Action<HydroVisualInfo> GradingPropertyValueChangedEvent;
        /// <summary>
        /// 水流动画属性值改变事件
        /// </summary>
        public event Action<HydroVisualInfo> FlowEffectPropertyValueChangedEvent;
        private HydroChangeHelper _changeHelper = null;//改变辅助类
        private HydroPropStatusHelper _propStatusHelper = null;//属性状态辅助类
        #endregion
        /// <summary>
        /// 初始化数据
        /// </summary>
        public void InitialData
            (
                HydroChangeHelper changeHelper,
                HydroPropStatusHelper propStatusHelper
            )
        {
            _changeHelper = changeHelper;
            _propStatusHelper = propStatusHelper;
            this.hydroVisualPropertyCtrl1.InitialData(changeHelper, propStatusHelper);
        }
        #region 属性赋值
        /// <summary>
        /// 允许编辑
        /// </summary>
        public bool AllowEdit
        {
            get { return this.hydroVisualPropertyCtrl1.AllowEdit; }
            set { this.hydroVisualPropertyCtrl1.AllowEdit = value; }
        }
        /// <summary>
        /// 选择对象
@@ -69,6 +87,11 @@
            get { return this.hydroVisualPropertyCtrl1.SelectedObject; }
            set { this.hydroVisualPropertyCtrl1.SelectedObject = value; }
        }
        /// <summary>
        /// 计算结果
        /// </summary>
        public Func<HydroCalcuResult> CalcuResult { get; set; }
        #endregion
@@ -104,7 +127,7 @@
            this.hydroVisualPropertyCtrl1.UpdateRows();
        }
        #endregion 属性更新
        #endregion
        #region 事件实现
@@ -120,125 +143,310 @@
                case Yw.Hydro.ParterCatalog.Tank:
                    {
                        var tankViewModel = vm as HydroTankViewModel;
                        var input = HydroMatchingHelper.Create(tankViewModel.Vmo, tankViewModel.HydroInfo);
                        var dlg = new TankSingleMatchingDlg();
                        var input = HydroMatchingHelper.Create(tankViewModel);
                        var dlg = new AssetsTankSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(tankViewModel.HydroInfo, tankViewModel.Vmo, output);
                            tankViewModel.UpdateProperty();
                            HydroMatchingHelper.Apply(tankViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Waterbox:
                    {
                        var tankViewModel = vm as HydroTankViewModel;
                        var input = HydroMatchingHelper.Create(tankViewModel.Vmo, tankViewModel.HydroInfo);
                        var dlg = new TankSingleMatchingDlg();
                        var input = HydroMatchingHelper.Create(tankViewModel);
                        var dlg = new AssetsTankSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(tankViewModel.HydroInfo, tankViewModel.Vmo, output);
                            tankViewModel.UpdateProperty();
                            HydroMatchingHelper.Apply(tankViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Blunthead:
                    {
                        var bluntheadViewModel = vm as HydroBluntheadViewModel;
                        var input = HydroMatchingHelper.Create(bluntheadViewModel);
                        var dlg = new AssetsBluntheadSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(bluntheadViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Elbow:
                    {
                        var elbowViewModel = vm as HydroElbowViewModel;
                        var input = HydroMatchingHelper.Create(elbowViewModel.Vmo, elbowViewModel.HydroInfo);
                        var dlg = new ElbowSingMatchingDlg();
                        var input = HydroMatchingHelper.Create(elbowViewModel);
                        var dlg = new AssetsElbowSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(elbowViewModel.HydroInfo, elbowViewModel.Vmo, output);
                            elbowViewModel.UpdateProperty();
                            HydroMatchingHelper.Apply(elbowViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Threelink:
                    {
                        var threelinkViewModel = vm as HydroThreelinkViewModel;
                        var input = HydroMatchingHelper.Create(threelinkViewModel);
                        var dlg = new AssetsThreelinkSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(threelinkViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Fourlink:
                    {
                        var fourlinkViewModel = vm as HydroFourlinkViewModel;
                        var input = HydroMatchingHelper.Create(fourlinkViewModel);
                        var dlg = new AssetsFourlinkSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(fourlinkViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Meter:
                    {
                        var meterViewModel = vm as HydroMeterViewModel;
                        var input = HydroMatchingHelper.Create(meterViewModel);
                        var dlg = new AssetsMeterSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(meterViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Flowmeter:
                    {
                        var flowmeterViewModel = vm as HydroFlowmeterViewModel;
                        var input = HydroMatchingHelper.Create(flowmeterViewModel);
                        var dlg = new AssetsFlowmeterSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(flowmeterViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Pressmeter:
                    {
                        var pressmeterViewModel = vm as HydroPressmeterViewModel;
                        var input = HydroMatchingHelper.Create(pressmeterViewModel);
                        var dlg = new AssetsPressmeterSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(pressmeterViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Nozzle:
                    {
                        var nozzleViewModel = vm as HydroNozzleViewModel;
                        var input = HydroMatchingHelper.Create(nozzleViewModel);
                        var dlg = new AssetsSprinklerSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(nozzleViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Hydrant:
                    {
                        var hydrantViewModel = vm as HydroHydrantViewModel;
                        var input = HydroMatchingHelper.Create(hydrantViewModel);
                        var dlg = new AssetsHydrantSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(hydrantViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Cooling:
                    {
                        var coolingViewModel = vm as HydroCoolingViewModel;
                        var input = HydroMatchingHelper.Create(coolingViewModel);
                        var dlg = new AssetsCoolingSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(coolingViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Pipe:
                    {
                        var pipeViewModel = vm as HydroPipeViewModel;
                        var input = HydroMatchingHelper.Create(pipeViewModel);
                        var dlg = new AssetsPipeSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(pipeViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Pump:
                    {
                        var pumpViewModel = vm as HydroPumpViewModel;
                        var input = HydroMatchingHelper.Create(pumpViewModel.Vmo, pumpViewModel.HydroInfo);
                        var dlg = new PumpSingleMatchingDlg();
                        var dlg = new SimulationPumpSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(pumpViewModel.HydroInfo, pumpViewModel.Vmo, output);
                            pumpViewModel.UpdateProperty();
                            HydroMatchingHelper.Apply(pumpViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Valve:
                    {
                        var valveViewModel = vm as HydroValveViewModel;
                        var input = HydroMatchingHelper.Create(valveViewModel);
                        var dlg = new AssetsValveSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(valveViewModel, output, _changeHelper, _propStatusHelper);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Exchanger:
                    {
                        var exchangerViewModel = vm as HydroExchangerViewModel;
                        var input = HydroMatchingHelper.Create(exchangerViewModel);
                        var dlg = new AssetsExchangerSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(exchangerViewModel, output);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                case Yw.Hydro.ParterCatalog.Compressor:
                    {
                        var compressorViewModel = vm as HydroCompressorViewModel;
                        var input = HydroMatchingHelper.Create(compressorViewModel);
                        var dlg = new AssetsCompressorSingleMatchingDlg();
                        dlg.ReloadDataEvent += (output) =>
                        {
                            HydroMatchingHelper.Apply(compressorViewModel, output);
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                            this.PropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo);
                            this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo);
                        };
                        dlg.SetBindingData(input);
                        dlg.ShowDialog();
                    }
                    break;
                default: break;
                default: break;
            }
        }
@@ -253,48 +461,84 @@
            {
                case HydroCurve.Tank:
                    {
                        var tankViewModel = vm as HydroTankViewModel;
                        var curveInfo = tankViewModel.HydroInfo.Curves?.Find(x => x.Code == tankViewModel.VolCurve);
                        if (curveInfo != null)
                        {
                            if (long.TryParse(curveInfo.DbId, out long longDbId))
                            {
                                var dlg = new AssetsTankCurveVOLViewDlg();
                                dlg.SetBindingData(longDbId);
                                dlg.ShowDialog();
                            }
                        }
                    }
                    break;
                case HydroCurve.Pump:
                    {
                        //var pumpInfo = vm.HydroInfo.Pumps?.Find(x => x.Code == vm.Code);
                        //if (pumpInfo == null)
                        //{
                        //    break;
                        //}
                        //var input = AssetsMatchingParasHelper.Create(vm.HydroInfo, pumpInfo, null);
                        //var dlg = new SinglePumpAnalyDlg();
                        //dlg.SetBindindData(input);
                        //dlg.ReloadDataEvent += (output) =>
                        //{
                        //    var bol = AssetsMatchingParasHelper.Apply(vm.HydroInfo, output);
                        //    if (bol)
                        //    {
                        //        vm.UpdateProperty();
                        //        this.hydroVisualPropertyCtrl1.UpdateRows();
                        //    }
                        //    return bol;
                        //};
                        //dlg.ShowDialog();
                        //return true;
                        var pumpViewModel = vm as HydroPumpViewModel;
                        var dlg = new SimulationSinglePumpFeatDlg();
                        dlg.SaveEvent += (working) =>
                        {
                            pumpViewModel.Vmo.LinkStatus = working.LinkStatus;
                            pumpViewModel.Vmo.SpeedRatio = working.CurrentHz / pumpViewModel.Vmo.RatedHz;
                            pumpViewModel.UpdateProperty();
                            this.hydroVisualPropertyCtrl1.UpdateRows();
                        };
                        dlg.SetBindingData(pumpViewModel, this.CalcuResult?.Invoke());
                        dlg.ShowDialog();
                    }
                    break;
                case HydroCurve.Valve:
                    {
                        var valveViewModel = vm as HydroValveViewModel;
                        var curveInfo = valveViewModel.HydroInfo.Curves?.Find(x => x.Code == valveViewModel.CurveOL);
                        if (curveInfo != null)
                        {
                            if (long.TryParse(curveInfo.DbId, out long longDbId))
                            {
                                var dlg = new AssetsValveCurveViewDlg();
                                dlg.SetBindingData(longDbId);
                                dlg.ShowDialog();
                            }
                        }
                    }
                    break;
                case HydroCurve.Exchanger:
                    {
                        var exchangerViewModel = vm as HydroExchangerViewModel;
                        var curveInfo = exchangerViewModel.HydroInfo.Curves?.Find(x => x.Code == exchangerViewModel.CurveQL);
                        if (curveInfo != null)
                        {
                            if (long.TryParse(curveInfo.DbId, out long longDbId))
                            {
                                var dlg = new AssetsExchangerCurveQLViewDlg();
                                dlg.SetBindingData(longDbId);
                                dlg.ShowDialog();
                            }
                        }
                    }
                    break;
                case HydroCurve.Compressor:
                    {
                        var compressorViewModel = vm as HydroCompressorViewModel;
                        var curveInfo = compressorViewModel.HydroInfo.Curves?.Find(x => x.Code == compressorViewModel.CurveQL);
                        if (curveInfo != null)
                        {
                            if (long.TryParse(curveInfo.DbId, out long longDbId))
                            {
                                var dlg = new AssetsCompressorCurveQLViewDlg();
                                dlg.SetBindingData(longDbId);
                                dlg.ShowDialog();
                            }
                        }
                    }
                    break;
                default: break;
            }
        }
@@ -341,12 +585,9 @@
            this.GradingPropertyValueChangedEvent?.Invoke(vm?.Vmo);
        }
        //水流动画属性发生改变
        private void HydroVisualPropertyCtrl1_FlowEffectPropertyValueChangedEvent(HydroVisualViewModel vm)
        {
            this.FlowEffectPropertyValueChangedEvent?.Invoke(vm?.Vmo);
        }
        #endregion
    }
}