duheng
2024-12-11 17a0baa0ef883689c73e3141d148a28a48d62cd6
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -4,6 +4,7 @@
using DevExpress.XtraMap;
using HStation.WinFrmUI.PhartRelation;
using Mapster;
using NPOI.OpenXmlFormats.Dml;
using NPOI.SS.Formula.Functions;
using System.Diagnostics;
using Yw.EPAnet;
@@ -30,6 +31,26 @@
        /// </summary>
        public event Action<HydroWorkingVmo> AppendWorkingEvent;
        /// <summary>
        /// 保存模型事件
        /// </summary>
        public event Func<Yw.Model.HydroModelInfo, Task<Yw.Model.HydroModelInfo>> SaveModelEvent;
        /// <summary>
        /// 刷新模型事件
        /// </summary>
        public event Func<Task<Yw.Model.HydroModelInfo>> RefreshModelEvent;
        /// <summary>
        /// 更新方案事件
        /// </summary>
        public event Action<XhsSchemeVmo> UpdateSchemeEvent;
        /// <summary>
        /// 移除方案事件
        /// </summary>
        public event Action<XhsSchemeVmo> RemoveSchemeEvent;
        private HStation.Vmo.XhsProjectVmo _project = null;//项目
        private HStation.Vmo.XhsProjectSiteVmo _projectSite = null;//项目站
        private HStation.Vmo.XhsSchemeVmo _scheme = null;//方案
@@ -53,6 +74,17 @@
            _scheme = scheme;
            _hydroInfo = hydroInfo;
            _allWorkingCheckedListDict = allWorkingCheckedListDict;
            ResetMonitorValue();
            if (_scheme == null)
            {
                this.ribPageGroupForScheme.Visible = false;
                this.PageTitle.Caption = $"水力模拟";
            }
            else
            {
                this.ribPageGroupForScheme.Visible = true;
                this.PageTitle.Caption = $"水力方案\r\n{_scheme.Name}";
            }
        }
        /// <summary>
@@ -108,7 +140,7 @@
            this.tabPageBimface.Controls.Add(bimfaceCtrl);
        }
        #endregion
        #endregion BIM控件
        #region Q3d控件
@@ -145,7 +177,7 @@
            this.tabPageQ3d.Controls.Add(q3dCtrl);
        }
        #endregion
        #endregion Q3d控件
        #region 属性控件
@@ -236,7 +268,6 @@
                    var flowEffectHelper = await GetFlowEffectHelper();
                    flowEffectHelper.Set(visual);
                };
            }
            return _propertyCtrl;
        }
@@ -291,7 +322,7 @@
            _propertyCtrl?.UpdateRows();
        }
        #endregion
        #endregion 属性控件
        #region 选择构件
@@ -327,12 +358,14 @@
                        SetPropertyCtrl(visual);
                    }
                    break;
                case eVisualSource.Bimface:
                    {
                        this.barBtnSetMonitor.Enabled = visual != null;
                        SetPropertyCtrl(visual);
                    }
                    break;
                case eVisualSource.Q3d:
                    {
                        _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code);
@@ -340,12 +373,14 @@
                        SetPropertyCtrl(visual);
                    }
                    break;
                case eVisualSource.Property:
                    {
                        _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code);
                        this.barBtnSetMonitor.Enabled = visual != null;
                    }
                    break;
                case eVisualSource.List:
                    {
                        _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code);
@@ -353,6 +388,7 @@
                        SetPropertyCtrl(visual);
                    }
                    break;
                case eVisualSource.Set:
                    {
                        _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code);
@@ -360,6 +396,7 @@
                        SetPropertyCtrl(visual);
                    }
                    break;
                case eVisualSource.Search:
                    {
                        _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code);
@@ -367,6 +404,7 @@
                        SetPropertyCtrl(visual);
                    }
                    break;
                case eVisualSource.Monitor:
                    {
                        _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code);
@@ -374,6 +412,7 @@
                        SetPropertyCtrl(visual);
                    }
                    break;
                case eVisualSource.Check:
                    {
                        _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code);
@@ -381,6 +420,7 @@
                        SetPropertyCtrl(visual);
                    }
                    break;
                case eVisualSource.Calcu:
                    {
                        _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code);
@@ -388,6 +428,7 @@
                        SetPropertyCtrl(visual);
                    }
                    break;
                case eVisualSource.Warning:
                    {
                        _bimfaceCtrl?.ZoomAndSelectComponent(visual?.Code);
@@ -395,11 +436,19 @@
                        SetPropertyCtrl(visual);
                    }
                    break;
                default: break;
            }
        }
        #endregion
        //选择构件
        private void SelectVisual(string code, eVisualSource source)
        {
            var visual = GetVisual(code);
            SelectVisual(visual, source);
        }
        #endregion 选择构件
        #region 构件明细
@@ -419,6 +468,21 @@
            return _visualListHelper;
        }
        //重置可见列表
        private void ResetVisualList()
        {
            var helper = GetVisualListHelper();
            helper.InitialData(_hydroInfo);
        }
        //获取可见构件
        private Yw.Model.HydroVisualInfo GetVisual(string code)
        {
            var helper = GetVisualListHelper();
            var visual = helper.GetVisual(code);
            return visual;
        }
        //获取可见列表
        private List<Yw.Model.HydroVisualInfo> GetVisualList()
        {
@@ -433,7 +497,7 @@
            return helper.GetSourceList();
        }
        #endregion
        #endregion 可见列表
        #region 视图列表
@@ -463,7 +527,7 @@
            return helper.GetVisualList();
        }
        #endregion
        #endregion 视图列表
        #region 明细控件
@@ -563,7 +627,7 @@
            ShowVisualListCtrl();
        }
        #endregion
        #endregion 明细控件
        #region 构件显示
@@ -612,9 +676,9 @@
            SetVisualVisible();
        }
        #endregion
        #endregion 构件显示
        #endregion
        #endregion 构件明细
        #region 一键显隐
@@ -638,7 +702,9 @@
            SetDecoratorVisible(this.barCkDecorator.Checked);
        }
        #endregion
        #endregion 一键显隐
        #region 保存信息
@@ -649,27 +715,29 @@
            {
                return;
            }
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var id = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.Save(_hydroInfo);
            //耗时巨大的代码
            sw.Stop();
            TimeSpan ts2 = sw.Elapsed;
            Console.WriteLine("Stopwatch总共花费{0}ms.", ts2.TotalMilliseconds);
            if (id < 1)
            if (this.SaveModelEvent == null)
            {
                return;
            }
            var hydroInfo = await this.SaveModelEvent.Invoke(_hydroInfo);
            if (hydroInfo == null)
            {
                TipFormHelper.ShowError("保存失败!");
                return;
            }
            _hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(id);
            _hydroInfo = hydroInfo;
            TipFormHelper.ShowSucceed("保存成功!");
            //Stopwatch sw = new Stopwatch();
            //sw.Start();
            //耗时巨大的代码
            //sw.Stop();
            //TimeSpan ts2 = sw.Elapsed;
            //Console.WriteLine("Stopwatch总共花费{0}ms.", ts2.TotalMilliseconds);
        }
        #endregion
        #endregion 保存信息
        #region 批量配置
@@ -967,7 +1035,6 @@
            };
        }
        //显示RadialMenu
        private void barBtnSetList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
@@ -1171,11 +1238,9 @@
            {
                this.barBtnSetCompressorList.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
            }
        }
        #endregion
        #endregion 批量配置
        #region 构件查询
@@ -1266,7 +1331,7 @@
            ShowSearchDlg();
        }
        #endregion
        #endregion 构件查询
        #region 模型标注
@@ -1318,7 +1383,7 @@
            markHelper.Set();
        }
        #endregion
        #endregion 模型标注
        #region 颜色分级
@@ -1400,42 +1465,34 @@
            gradingHelper.Set();
        }
        #endregion
        #endregion 颜色分级
        #region 人工刷新
        //刷新
        private async void barBtnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (this.RefreshModelEvent == null)
            {
                return;
            }
            if (XtraMessageBox.Show("刷新后将丢失当前水力信息更改,是否继续刷新?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                if (_project == null)
                var hydroInfo = await this.RefreshModelEvent.Invoke();
                if (hydroInfo == null)
                {
                    TipFormHelper.ShowError("刷新失败!");
                    return;
                }
                if (_projectSite == null)
                {
                    return;
                }
                var hydroRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
                    .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
                Stopwatch sw = new Stopwatch();
                sw.Start();
                _hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(hydroRelation.ModelID);
                sw.Stop();
                TimeSpan ts2 = sw.Elapsed;
                Console.WriteLine("Stopwatch总共花费{0}ms.", ts2.TotalMilliseconds);
                _visual = null;
                await _bimfaceCtrl?.ZoomAndSelectComponents(null);
                //ShowSelectedProperty();
                TipFormHelper.ShowSucceed("数据已刷新");
                _hydroInfo = hydroInfo;
                SelectVisual(visual: null, eVisualSource.None);
                var visualListHelper = GetVisualListHelper();
                visualListHelper.InitialData(_hydroInfo);
                ResetVisualList();
                TipFormHelper.ShowSucceed("刷新成功!");
            }
        }
        #endregion
        #endregion 人工刷新
        #region 水流动画
@@ -1468,7 +1525,7 @@
            flowEffectHelper.Set();
        }
        #endregion
        #endregion 水流动画
        #region 监测列表
@@ -1490,6 +1547,13 @@
                _monitorHelper = new SimulationMonitorHelper(visualListHelper);
            }
            return _monitorHelper;
        }
        //获取监测点列表
        private async Task<List<HydroMonitorVmo>> GetMonitorList()
        {
            var helper = GetMonitorHelper();
            return await helper.Get();
        }
        //设置监测点列表
@@ -1528,7 +1592,7 @@
            SetMonitorList(_visual);
        }
        #endregion
        #endregion 监测点
        #region 监测值
@@ -1547,7 +1611,19 @@
            return _monitorValueHelper;
        }
        #endregion
        //重置
        private void ResetMonitorValue()
        {
            var allWorkingList = GetWorkingList();
            var working = allWorkingList?.LastOrDefault(x => !string.IsNullOrEmpty(x.MonitorInfo));
            if (working != null)
            {
                var helper = GetMonitorValueHelper();
                helper.Reset(working.MonitorInfo);
            }
        }
        #endregion 监测值
        #region 监测值控件
@@ -1613,7 +1689,7 @@
            ShowMonitorValueListCtrl();
        }
        #endregion
        #endregion 监测值控件
        #region 监测点标记
@@ -1640,9 +1716,9 @@
            monitorMarkerHelper.Set();
        }
        #endregion
        #endregion 监测点标记
        #endregion
        #endregion 监测列表
        #region 模型检查
@@ -1726,7 +1802,7 @@
            ShowCheckCtrl(checkResult);
        }
        #endregion
        #endregion 模型检查
        #region 模型计算
@@ -1746,7 +1822,7 @@
            return _calcuResultHelper;
        }
        #endregion
        #endregion 计算结果
        #region 计算失败
@@ -1810,7 +1886,7 @@
            calcuFailedCtrl.SetBindingData(calcuResult.FailedList);
        }
        #endregion
        #endregion 计算失败
        #region 计算警告
@@ -1882,7 +1958,7 @@
            calcuWaringCtrl.SetBindingData(calcuResult.WainingList, allVisualDict);
        }
        #endregion
        #endregion 计算警告
        #region 计算标签
@@ -1909,9 +1985,9 @@
            calcuResultLabelHelper.Set();
        }
        #endregion
        #endregion 计算标签
        #endregion
        #endregion 模型计算
        #region 管网修复
@@ -1976,7 +2052,7 @@
            Repair();
        }
        #endregion
        #endregion 管网修复
        #region 导出INP
@@ -1998,7 +2074,7 @@
            TipFormHelper.ShowSucceed("导出成功");
        }
        #endregion
        #endregion 导出INP
        #region 水泵列表
@@ -2073,11 +2149,10 @@
        //并联模拟
        private void barBtnPumpParallel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            PumpParallel();
        }
        #endregion
        #endregion 水泵列表
        #region 水力计算
@@ -2136,6 +2211,7 @@
                        ShowCalcuWarningCtrl(calcuResult);
                    }
                    this.barBtnAddWorking.Enabled = true;
                    this.barBtnExportWord.Enabled = true;
                    TipFormHelper.ShowSucceed("计算成功!");
                }
                else
@@ -2149,38 +2225,36 @@
                var visualVmListHelper = GetVisualVmListHelper();
                visualVmListHelper.UpdateCalcuProperty(calcuResult);
                #endregion
                #endregion 视图列表
                #region 当前构件
                SelectVisual(_visual, eVisualSource.Calcu);
                #endregion
                #endregion 当前构件
                #region 构件明细
                UpdateVisualListCtrl();
                #endregion
                #endregion 构件明细
                #region 颜色分级
                var gradingHelper = await GetGradingHelper();
                gradingHelper.Set();
                #endregion
                #endregion 颜色分级
                #region 计算标签
                var calcuResultLabelHelper = await GetCalcuResultLabelHelper();
                calcuResultLabelHelper.Set();
                #endregion
                #endregion 计算标签
            };
            dlg.ShowDialog();
        }
        //水力计算
@@ -2189,7 +2263,22 @@
            Calcu();
        }
        #endregion
        #endregion 水力计算
        #region 导出报告
        private void barBtnExportWord_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var fileName = FileDialogHelper.SaveWordDoc("导出Word报告");
            if (string.IsNullOrEmpty(fileName))
            {
                return;
            }
            SimulationWordReport word = new SimulationWordReport();
            //word.Create(fileName);
        }
        #endregion 导出报告
        #region 当前工况
@@ -2254,7 +2343,7 @@
            AddWorking();
        }
        #endregion
        #endregion 当前工况
        #region 选择工况
@@ -2271,6 +2360,13 @@
                _workingCheckedListHelper.InitialData(_allWorkingCheckedListDict);
            }
            return _workingCheckedListHelper;
        }
        //获取工况列表
        private List<HydroWorkingVmo> GetWorkingList()
        {
            var helper = GetWorkingCheckedListHelper();
            return helper.GetWorkingList();
        }
        //更新工况选择列表
@@ -2294,10 +2390,30 @@
            helper.Remove(working);
        }
        #endregion
        #endregion 选择工况
        #region 工况分析
        //选择进口水源
        private void SelectInputSource()
        {
            var sources = GetSourceList();
            if (sources != null)
            {
                if (sources.Count == 1)
                {
                    SelectVisual(sources[0], eVisualSource.None);
                }
                else
                {
                    var source = sources.FirstOrDefault(x => x.Flags.Contains(HStation.Xhs.Flags.进口));
                    if (source != null)
                    {
                        SelectVisual(source, eVisualSource.None);
                    }
                }
            }
        }
        //精度评估
        private async void barBtnWorkingEvaluation_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
@@ -2353,8 +2469,9 @@
        }
        //能效分析
        private void barBtnWorkingPower_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        private async void barBtnWorkingPower_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var allMonitorList = await GetMonitorList();
            var workingCheckedListHelper = GetWorkingCheckedListHelper();
            var allCheckedWorkingList = workingCheckedListHelper.GetCheckedWorkingList();
            if (allCheckedWorkingList == null || allCheckedWorkingList.Count < 1)
@@ -2366,13 +2483,13 @@
                    return;
                }
                var dlg = new SimulationSingleWorkingEnergyDlg();
                dlg.SetBindingData(workingHelper.HydroInfo, workingHelper.CalcuResult);
                dlg.SetBindingData(workingHelper.Working, workingHelper.HydroInfo, allMonitorList, workingHelper.CalcuResult);
                dlg.ShowDialog();
            }
            else
            {
                var dlg = new SimulationMultiWorkingEnergyDlg();
                dlg.SetBindingData(_hydroInfo, allCheckedWorkingList);
                dlg.SetBindingData(_hydroInfo, allMonitorList, allCheckedWorkingList);
                dlg.ShowDialog();
            }
        }
@@ -2382,22 +2499,7 @@
        {
            if (_visual == null)
            {
                var sources = GetSourceList();
                if (sources != null)
                {
                    if (sources.Count == 1)
                    {
                        SelectVisual(sources[0], eVisualSource.None);
                    }
                    else
                    {
                        var source = sources.FirstOrDefault(x => x.Flags.Contains(HStation.Xhs.Flags.进口));
                        if (source != null)
                        {
                            SelectVisual(source, eVisualSource.None);
                        }
                    }
                }
                SelectInputSource();
                if (_visual == null)
                {
                    TipFormHelper.ShowWarn("请选择构件后重试!");
@@ -2422,12 +2524,20 @@
                    return;
                }
                var dlg = new HydroSingleWorkingLossCurveDlg();
                dlg.HydroClickEvent += (code) =>
                {
                    SelectVisual(code, eVisualSource.None);
                };
                dlg.SetBindingData(workingHelper.HydroInfo, workingHelper.CalcuResult, visual);
                dlg.ShowDialog();
            }
            else
            {
                var dlg = new HydroMultiWorkingLossCurveDlg();
                dlg.HydroClickEvent += (code) =>
                {
                    SelectVisual(code, eVisualSource.None);
                };
                dlg.SetBindingData(_hydroInfo, allCheckedWorkingList, visual);
                dlg.ShowDialog();
            }
@@ -2463,8 +2573,15 @@
        {
            if (_visual == null)
            {
                TipFormHelper.ShowWarn("请选择构件后重试!");
                return;
                if (_visual == null)
                {
                    SelectInputSource();
                    if (_visual == null)
                    {
                        TipFormHelper.ShowWarn("请选择构件后重试!");
                        return;
                    }
                }
            }
            HydroVisualInfo visual = _visual;
            if (_visual is HydroLinkInfo linkInfo)
@@ -2498,13 +2615,6 @@
            }
        }
        #endregion
        #endregion 工况分析
    }
}