duheng
2024-11-14 60908c00556f4f53d82f5588ae3013f80c443590
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -1,6 +1,8 @@
global using Yw.EPAnet;
using DevExpress.Mvvm.Native;
using DevExpress.Utils.Extensions;
using DevExpress.Xpo.Helpers;
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraRichEdit.Layout;
using DevExpress.XtraSpreadsheet.Commands;
using HStation.WinFrmUI.PhartRelation;
@@ -1079,7 +1081,7 @@
                WaitFormHelper.ShowWaitForm(this, "正在计算分析中,请稍候...");
                await Task.Delay(5000);
                //await Task.Delay(5000);
                var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo);
                _calcuResult = netWork.CalcuMinorLoss();
@@ -2076,7 +2078,7 @@
                    {
                        Code = Yw.Hydro.ParterCatalog.Pipe,
                        Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe),
                        PropName = Yw.Hydro.ParterProp.CalcuFlow
                        PropName = HydroCalcuProp.CalcuFlow
                    });
                }
            }
@@ -2143,9 +2145,9 @@
                                                    }
                                                }
                                                break;
                                            case Yw.Hydro.ParterProp.CalcuFlow:
                                            case HydroCalcuProp.CalcuFlow:
                                                {
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                                    if (gradingList != null && gradingList.Count > 0)
                                                    {
                                                        var calcuResult = allCalcuResultList?.Find(t => t.Code == pump.Code);
@@ -2168,9 +2170,9 @@
                                                    }
                                                }
                                                break;
                                            case Yw.Hydro.ParterProp.CalcuVelocity:
                                            case HydroCalcuProp.CalcuVelocity:
                                                {
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                                    if (gradingList != null && gradingList.Count > 0)
                                                    {
                                                        var calcuResult = allCalcuResultList?.Find(t => t.Code == pump.Code);
@@ -2193,9 +2195,9 @@
                                                    }
                                                }
                                                break;
                                            case Yw.Hydro.ParterProp.CalcuHeadLoss:
                                            case HydroCalcuProp.CalcuHeadLoss:
                                                {
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                                    if (gradingList != null && gradingList.Count > 0)
                                                    {
                                                        var calcuResult = allCalcuResultList?.Find(t => t.Code == pump.Code);
@@ -2250,9 +2252,9 @@
                                                    }
                                                }
                                                break;
                                            case Yw.Hydro.ParterProp.CalcuFlow:
                                            case HydroCalcuProp.CalcuFlow:
                                                {
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                                    if (gradingList != null && gradingList.Count > 0)
                                                    {
                                                        var calcuResult = allCalcuResultList?.Find(t => t.Code == valve.Code);
@@ -2275,9 +2277,9 @@
                                                    }
                                                }
                                                break;
                                            case Yw.Hydro.ParterProp.CalcuVelocity:
                                            case HydroCalcuProp.CalcuVelocity:
                                                {
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                                    if (gradingList != null && gradingList.Count > 0)
                                                    {
                                                        var calcuResult = allCalcuResultList?.Find(t => t.Code == valve.Code);
@@ -2300,9 +2302,9 @@
                                                    }
                                                }
                                                break;
                                            case Yw.Hydro.ParterProp.CalcuHeadLoss:
                                            case HydroCalcuProp.CalcuHeadLoss:
                                                {
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                                    if (gradingList != null && gradingList.Count > 0)
                                                    {
                                                        var calcuResult = allCalcuResultList?.Find(t => t.Code == valve.Code);
@@ -2339,9 +2341,9 @@
                                    {
                                        switch (x.PropName)
                                        {
                                            case Yw.Hydro.ParterProp.CalcuFlow:
                                            case HydroCalcuProp.CalcuFlow:
                                                {
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                                    if (gradingList != null && gradingList.Count > 0)
                                                    {
                                                        var calcuResult = allCalcuResultList?.Find(t => t.Code == pipe.Code);
@@ -2364,9 +2366,9 @@
                                                    }
                                                }
                                                break;
                                            case Yw.Hydro.ParterProp.CalcuVelocity:
                                            case HydroCalcuProp.CalcuVelocity:
                                                {
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                                    if (gradingList != null && gradingList.Count > 0)
                                                    {
                                                        var calcuResult = allCalcuResultList?.Find(t => t.Code == pipe.Code);
@@ -2389,9 +2391,9 @@
                                                    }
                                                }
                                                break;
                                            case Yw.Hydro.ParterProp.CalcuHeadLoss:
                                            case HydroCalcuProp.CalcuHeadLoss:
                                                {
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                                    var gradingList = allCatalogGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                                    if (gradingList != null && gradingList.Count > 0)
                                                    {
                                                        var calcuResult = allCalcuResultList?.Find(t => t.Code == pipe.Code);
@@ -2497,9 +2499,9 @@
                                            }
                                        }
                                        break;
                                    case Yw.Hydro.ParterProp.CalcuFlow:
                                    case HydroCalcuProp.CalcuFlow:
                                        {
                                            var gradingList = currentGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                            var gradingList = currentGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                            if (gradingList != null && gradingList.Count > 0)
                                            {
                                                var calcuResult = allCalcuResultList?.Find(t => t.Code == pump.Code);
@@ -2522,9 +2524,9 @@
                                            }
                                        }
                                        break;
                                    case Yw.Hydro.ParterProp.CalcuVelocity:
                                    case HydroCalcuProp.CalcuVelocity:
                                        {
                                            var gradingList = currentGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                            var gradingList = currentGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                            if (gradingList != null && gradingList.Count > 0)
                                            {
                                                var calcuResult = allCalcuResultList?.Find(t => t.Code == pump.Code);
@@ -2547,9 +2549,9 @@
                                            }
                                        }
                                        break;
                                    case Yw.Hydro.ParterProp.CalcuHeadLoss:
                                    case HydroCalcuProp.CalcuHeadLoss:
                                        {
                                            var gradingList = currentGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                            var gradingList = currentGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                            if (gradingList != null && gradingList.Count > 0)
                                            {
                                                var calcuResult = allCalcuResultList?.Find(t => t.Code == pump.Code);
@@ -2604,9 +2606,9 @@
                                            }
                                        }
                                        break;
                                    case Yw.Hydro.ParterProp.CalcuFlow:
                                    case HydroCalcuProp.CalcuFlow:
                                        {
                                            var gradingList = currentGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                            var gradingList = currentGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                            if (gradingList != null && gradingList.Count > 0)
                                            {
                                                var calcuResult = allCalcuResultList?.Find(t => t.Code == valve.Code);
@@ -2629,9 +2631,9 @@
                                            }
                                        }
                                        break;
                                    case Yw.Hydro.ParterProp.CalcuVelocity:
                                    case HydroCalcuProp.CalcuVelocity:
                                        {
                                            var gradingList = currentGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                            var gradingList = currentGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                            if (gradingList != null && gradingList.Count > 0)
                                            {
                                                var calcuResult = allCalcuResultList?.Find(t => t.Code == valve.Code);
@@ -2654,9 +2656,9 @@
                                            }
                                        }
                                        break;
                                    case Yw.Hydro.ParterProp.CalcuHeadLoss:
                                    case HydroCalcuProp.CalcuHeadLoss:
                                        {
                                            var gradingList = currentGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                            var gradingList = currentGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                            if (gradingList != null && gradingList.Count > 0)
                                            {
                                                var calcuResult = allCalcuResultList?.Find(t => t.Code == valve.Code);
@@ -2693,9 +2695,9 @@
                            {
                                switch (propName)
                                {
                                    case Yw.Hydro.ParterProp.CalcuFlow:
                                    case HydroCalcuProp.CalcuFlow:
                                        {
                                            var gradingList = currentGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                            var gradingList = currentGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuFlow).OrderBy(t => t.SortCode).ToList();
                                            if (gradingList != null && gradingList.Count > 0)
                                            {
                                                var calcuResult = allCalcuResultList?.Find(t => t.Code == pipe.Code);
@@ -2718,9 +2720,9 @@
                                            }
                                        }
                                        break;
                                    case Yw.Hydro.ParterProp.CalcuVelocity:
                                    case HydroCalcuProp.CalcuVelocity:
                                        {
                                            var gradingList = currentGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                            var gradingList = currentGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList();
                                            if (gradingList != null && gradingList.Count > 0)
                                            {
                                                var calcuResult = allCalcuResultList?.Find(t => t.Code == pipe.Code);
@@ -2743,9 +2745,9 @@
                                            }
                                        }
                                        break;
                                    case Yw.Hydro.ParterProp.CalcuHeadLoss:
                                    case HydroCalcuProp.CalcuHeadLoss:
                                        {
                                            var gradingList = currentGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                            var gradingList = currentGradingList.Where(x => x.PropName == HydroCalcuProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList();
                                            if (gradingList != null && gradingList.Count > 0)
                                            {
                                                var calcuResult = allCalcuResultList?.Find(t => t.Code == pipe.Code);
@@ -3086,12 +3088,39 @@
        #endregion
        #region 可见视图
        #region 选择构件
        //所有可见视图列表
        //选择构件
        private Yw.Model.HydroVisualInfo _selectedVisual = null;
        //选择构件
        private Yw.Model.HydroVisualInfo SelectedVisual
        {
            get { return _selectedVisual; }
            set
            {
                _selectedVisual = value;
                if (_selectedVisual == null)
                {
                    this.barBtnSetMonitor.Enabled = false;
                }
                else
                {
                    this.barBtnSetMonitor.Enabled = true;
                }
            }
        }
        #endregion
        #region 构件明细
        #region 构件列表
        //所有构件视图列表
        private List<HydroVisualViewModel> _allVisualViewModelList = null;
        //获取可见视图列表
        //获取构件视图列表
        private List<HydroVisualViewModel> GetVisualViewModelList()
        {
            if (_hydroInfo == null)
@@ -3154,6 +3183,17 @@
            }
        }
        //获取构件视图
        private HydroVisualViewModel GetVisualViewModel(string code)
        {
            if (string.IsNullOrEmpty(code))
            {
                return default;
            }
            var allVisualViewModelList = GetVisualViewModelList();
            return allVisualViewModelList?.Find(x => x.Code == code);
        }
        //获取可见视图
        private HydroVisualViewModel GetVisualViewModel(Yw.Model.HydroVisualInfo visual)
        {
@@ -3165,17 +3205,11 @@
            return allVisualViewModelList?.Find(x => x.Code == visual.Code);
        }
        #endregion
        #region 选择构件
        //选择构件
        private Yw.Model.HydroVisualInfo _selectedVisual = null;
        #endregion
        #region 构件明细
        #region 构件明细控件
        //构件明细控件
        private Yw.WinFrmUI.HydroVisualListCtrl _visualListCtrl = null;
@@ -3269,6 +3303,247 @@
        #endregion
        #endregion
        #region 监测列表
        #region 测点列表
        //所有监测点列表
        private List<HydroMonitorVmo> _allMonitorList = null;
        //获取监测点列表
        private async Task<List<HydroMonitorVmo>> GetMonitorList()
        {
            if (_hydroInfo == null)
            {
                return default;
            }
            if (_allMonitorList == null)
            {
                _allMonitorList = await BLLFactory<Yw.BLL.HydroMonitor>.Instance.GetByModelID(_hydroInfo.ID);
                if (_allMonitorList == null)
                {
                    _allMonitorList = new List<HydroMonitorVmo>();
                }
            }
            return _allMonitorList;
        }
        //更新监测点列表
        private async void UpdateMonitorList(string code)
        {
            if (_hydroInfo == null)
            {
                return;
            }
            if (string.IsNullOrEmpty(code))
            {
                return;
            }
            var allMonitorList = await GetMonitorList();
            allMonitorList.RemoveAll(x => x.Relation == code);
            var monitorList = await BLLFactory<Yw.BLL.HydroMonitor>.Instance.GetByRelation(_hydroInfo.ID, code);
            if (monitorList != null && monitorList.Count > 0)
            {
                allMonitorList.AddRange(monitorList);
            }
            UpdateMonitorValueList(code, monitorList);
            SetLogicMonitorList();
        }
        //设置选择构件监测点列表
        private async void SetSelectVisualMonitorList()
        {
            if (_hydroInfo == null)
            {
                return;
            }
            if (_selectedVisual == null)
            {
                return;
            }
            var allMonitorList = await GetMonitorList();
            var dlg = new SetHydroVisualMonitorDlg();
            dlg.SetBindingData(_hydroInfo, _selectedVisual, allMonitorList);
            dlg.ReloadDataEvent += async (hydroInfo, visual, list) =>
            {
                if (hydroInfo == null)
                {
                    return;
                }
                if (visual == null)
                {
                    return;
                }
                var bol = await BLLFactory<Yw.BLL.HydroMonitor>.Instance.Save(hydroInfo.ID, visual.Code, list);
                if (!bol)
                {
                    TipFormHelper.ShowError("设置失败");
                    return;
                }
                TipFormHelper.ShowSucceed("设置成功");
                UpdateMonitorList(visual.Code);
            };
            dlg.ShowDialog();
        }
        //设置监测点
        private void barBtnSetMonitor_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            SetSelectVisualMonitorList();
        }
        #endregion
        #region 监测值列表
        //所有监测值列表
        private List<HydroVisualMonitorValueViewModel> _allMonitorValueList = null;
        //获取监测值列表
        private async Task<List<HydroVisualMonitorValueViewModel>> GetMonitorValueList()
        {
            if (_allMonitorValueList == null)
            {
                _allMonitorValueList = new List<HydroVisualMonitorValueViewModel>();
                var allMonitorList = await GetMonitorList();
                var allVisualViewModelList = GetVisualViewModelList();
                allMonitorList.ForEach(x =>
                {
                    var visual = allVisualViewModelList.Find(t => t.Code == x.Relation);
                    if (visual != null)
                    {
                        var vm = new HydroVisualMonitorValueViewModel(visual.Vmo, x);
                        _allMonitorValueList.Add(vm);
                    }
                });
            }
            return _allMonitorValueList;
        }
        //更新监测值列表
        private async void UpdateMonitorValueList(string code, List<HydroMonitorVmo> monitorList)
        {
            if (string.IsNullOrEmpty(code))
            {
                return;
            }
            var visual = GetVisualViewModel(code)?.Vmo;
            if (visual == null)
            {
                return;
            }
            var allMonitorValueList = await GetMonitorValueList();
            var monitorValueList = allMonitorValueList.Where(x => x.Vmo.Relation == code).ToList();
            monitorValueList?.ForEach(x =>
            {
                var result = monitorList?.Exists(t => t.Relation == x.Vmo.Relation && t.PropName == x.Vmo.PropName);
                if (!(result.HasValue && result.Value))
                {
                    allMonitorValueList.Remove(x);
                }
            });
            monitorList?.ForEach(x =>
            {
                var result = monitorValueList?.Exists(t => t.Vmo.Relation == x.Relation && t.Vmo.PropName == x.PropName);
                if (!(result.HasValue && result.Value))
                {
                    var vm = new HydroVisualMonitorValueViewModel(visual, x);
                    allMonitorValueList.Add(vm);
                }
            });
        }
        #endregion
        #region 监测值列表控件
        //监测值列表控件
        private HydroVisualMonitorValueListCtrl _monitorValueListCtrl = null;
        //获取监测值列表控件
        private HydroVisualMonitorValueListCtrl GetMonitorValueListCtrl()
        {
            if (_monitorValueListCtrl == null)
            {
                _monitorValueListCtrl = new HydroVisualMonitorValueListCtrl();
                _monitorValueListCtrl.Dock = DockStyle.Fill;
                _monitorValueListCtrl.HydroViewEvent += (code) =>
                {
                    _bimfaceCtrl?.ZoomToComponent(code);
                };
            }
            return _monitorValueListCtrl;
        }
        //显示监测值列表控件
        private async void ShowMonitorValueListCtrl()
        {
            var monitorValueListCtrl = GetMonitorValueListCtrl();
            var allMonitorValueList = await GetMonitorValueList();
            monitorValueListCtrl.SetBindingData(allMonitorValueList);
            this.controlContainerBottom.Controls.Clear();
            this.controlContainerBottom.Controls.Add(monitorValueListCtrl);
            this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible;
            this.docPnlBottom.Text = "监测值";
            this.docPnlBottom.Height = 350;
        }
        //设置监测值
        private void barBtnSetMonitorValue_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            ShowMonitorValueListCtrl();
        }
        #endregion
        #region 监测列表显示
        //监测是否显示
        private bool _isMonitorVisible = false;
        //获取业务监测列表
        private async Task<List<LogicMonitor>> GetLogicMonitorList()
        {
            var allMonitorList = await GetMonitorList();
            var allLogicMonitorList = allMonitorList.Select(x =>
            {
                var logicMonitor = new LogicMonitor();
                logicMonitor.Id = x.Relation;
                logicMonitor.PropName = x.PropName;
                logicMonitor.Description = x.Description;
                return logicMonitor;
            }).ToList();
            return allLogicMonitorList;
        }
        //设置业务监测列表
        private async void SetLogicMonitorList()
        {
            if (_isMonitorVisible)
            {
                var allLogicMonitorList = await GetLogicMonitorList();
                await _bimfaceCtrl?.SetLogicMonitors(allLogicMonitorList);
            }
            else
            {
                await _bimfaceCtrl?.ClearLogicMonitors();
            }
        }
        //显示状态改变
        private void barCkMonitor_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            _isMonitorVisible = this.barCkMonitor.Checked;
            SetLogicMonitorList();
        }
        #endregion
        #endregion
        #region 水力校验
        //校验控件
@@ -3339,5 +3614,10 @@
        #endregion
    }
}