lixiaojun
2025-02-17 4bb44a9c6b32cf299f3103f66d720992ec4a89a2
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -1,5 +1,6 @@
using DevExpress.Diagram.Core.Native;
using DevExpress.Mvvm.Native;
using DevExpress.Pdf.Native;
using Mapster;
using Yw.EPAnet;
using Yw.Hydro;
@@ -19,25 +20,54 @@
            RegistBulkSetEvents();
        }
        /// <summary>
        /// 新增工况事件
        /// </summary>
        public event Action<HydroWorkingVmo> AppendWorkingEvent;
        #region 模型事件
        /// <summary>
        /// 获取模型事件
        /// </summary>
        public event Func<XhsSchemeVmo, Task<Yw.Model.HydroModelInfo>> GetModelEvent;
        /// <summary>
        /// 刷新模型事件
        /// </summary>
        public event Func<Task<Yw.Model.HydroModelInfo>> RefreshModelEvent;
        #endregion
        #region 方案事件
        /// <summary>
        /// 更新方案事件
        /// </summary>
        public event Action<XhsSchemeVmo> UpdateSchemeEvent;
        /// <summary>
        /// 移除方案事件
        /// </summary>
        public event Action<XhsSchemeVmo> RemoveSchemeEvent;
        #endregion
        #region 工况事件
        /// <summary>
        /// 新增工况事件
        /// </summary>
        public event Action<HydroWorkingVmo> AppendWorkingEvent;
        /// <summary>
        /// 更新工况事件
        /// </summary>
        public event Action<HydroWorkingVmo> UpdateWorkingEvent;
        /// <summary>
        /// 移除工况事件
        /// </summary>
        public event Action<HydroWorkingVmo> RemoveWorkingEvent;
        /// <summary>
        /// 重载工况事件
        /// </summary>
        public event Action<Dictionary<HydroWorkingVmo, bool>> ReloadWorkingEvent;
        #endregion
        private HStation.Vmo.XhsProjectVmo _project = null;//项目
        private HStation.Vmo.XhsProjectSiteVmo _projectSite = null;//项目站
@@ -674,7 +704,7 @@
            return helper.GetSourceList();
        }
        #endregion 可见列表
        #endregion
        #region 视图列表
@@ -711,7 +741,7 @@
            return helper.GetVisual(code);
        }
        #endregion 视图列表
        #endregion
        #region 明细控件
@@ -956,8 +986,11 @@
            WaitFormHelper.ShowWaitForm("正在保存,请稍后...");
            var bol = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance
                .Update(_hydroInfo, addParterList, updateParterList, removeParters);
            if (!bol)
            {
                WaitFormHelper.HideWaitForm();
@@ -1804,7 +1837,7 @@
            gradingHelper.Set();
        }
        #endregion 颜色分级
        #endregion
        #region 人工刷新
@@ -1831,7 +1864,7 @@
            }
        }
        #endregion 人工刷新
        #endregion
        #region 监测点
@@ -1870,7 +1903,7 @@
            return await helper.GetAnalyseList();
        }
        #endregion 监测点
        #endregion
        #region 监测值
@@ -2468,6 +2501,78 @@
        #endregion 水泵列表
        #region 压力切换
        //计算压力是否为绝对压力
        private bool _calcuPressModeIsHead = false;
        //计算结果压力切换
        private void barToggleSwitchPress_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            _calcuPressModeIsHead = !this.barToggleSwitchPress.Checked;
            this.barToggleSwitchPress.Caption = _calcuPressModeIsHead ? "绝对压力" : "自由压力";
            var workingHelper = GetWorkingHelper();
            workingHelper.ResetResult(_calcuPressModeIsHead);
            UpdateVisualListCtrl();
            UpdatePropertyCtrl();
        }
        #endregion
        #region 评价规则
        //评价规则辅助类
        private SimulationEvaluationHelper _evaluationHelper = null;
        //获取评价规则辅助类
        private SimulationEvaluationHelper GetEvaluationHelper()
        {
            if (_evaluationHelper == null)
            {
                _evaluationHelper = new SimulationEvaluationHelper(_hydroInfo.ID);
            }
            return _evaluationHelper;
        }
        //获取评价规则列表
        private async Task<List<Yw.Vmo.HydroEvaluationVmo>> GetEvaluationList()
        {
            var helper = GetEvaluationHelper();
            return await helper.GetEvaluationList();
        }
        //设置评价规则列表
        private void SetEvaluationList(List<Yw.Vmo.HydroEvaluationVmo> allEvaluationList)
        {
            var helper = GetEvaluationHelper();
            helper.SetEvaluationList(allEvaluationList);
        }
        //显示评价窗体
        private void ShowEvaluationDlg()
        {
            if (_hydroInfo == null)
            {
                return;
            }
            var dlg = new SetHydroEvaluationModelDlg();
            dlg.SetBindingData(_hydroInfo.ID);
            dlg.ReloadDataEvent += (rhs) =>
            {
                SetEvaluationList(rhs);
            };
            dlg.ShowDialog();
        }
        //评价规则
        private void barBtnEvaluation_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            ShowEvaluationDlg();
        }
        #endregion
        #region 水力计算
        //计算
@@ -2519,7 +2624,7 @@
                WaitFormHelper.ShowWaitForm(this, "正在计算分析中,请稍候...");
                await Task.Delay(3000);
                var calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
                var calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss, _calcuPressModeIsHead);
                WaitFormHelper.HideWaitForm();
                workingHelper.InitialData(hydroInfo, working, checkResult, calcuResult);
                if (calcuResult.Succeed)
@@ -2584,8 +2689,154 @@
        #region 导出报告
        //创建打印信息
        private async Task<SimulationPrintViewModel> CreatePrintInfo()
        {
            if (_project == null)
            {
                return default;
            }
            if (_hydroInfo == null)
            {
                return default;
            }
            #region 工况列表
            var allWorkingList = GetCheckedWorkingList();
            if (allWorkingList == null || allWorkingList.Count < 1)
            {
                var working = GetWorking();
                if (working == null)
                {
                    TipFormHelper.ShowWarn("请计算或选择工况后重试!");
                    return default;
                }
                allWorkingList = new List<HydroWorkingVmo>() { working };
            }
            #endregion
            #region 选择节点
            var selectedNode = GetSelectNode();
            if (selectedNode == null)
            {
                return default;
            }
            #endregion
            var vm = new SimulationPrintViewModel();
            #region 项目
            vm.Project = new SimulationPrintProjectViewModel(_project);
            if (_hydroInfo == null)
            {
                return vm;
            }
            #endregion
            #region 水泵列表
            vm.PumpList = _hydroInfo.Pumps?.Select(x =>
                {
                    var pump = new SimulationPrintPumpViewModel(x);
                    return pump;
                }).ToList();
            #endregion
            #region 附加信息
            var allMonitorList = await GetMonitorList();
            var allEvaluationList = await GetEvaluationList();
            #endregion
            #region 基础模型
            var baseHydroInfo = _hydroInfo;
            if (_scheme != null)
            {
                baseHydroInfo = await GetModelEvent?.Invoke(null);
            }
            var baseHydroInfoRhs = baseHydroInfo.Adapt<Yw.Model.HydroModelInfo>();
            #endregion
            #region 遍历工况
            vm.WorkingList = new List<SimulationPrintWorkingViewModel>();
            foreach (var working in allWorkingList)
            {
                baseHydroInfoRhs.UpdateWorkingInfo(working.WorkingInfo);
                var calcuResult = baseHydroInfoRhs.Calcu(Yw.EPAnet.CalcuMode.MinorLoss, _calcuPressModeIsHead, allEvaluationList);
                var printWorking = new SimulationPrintWorkingViewModel(working);
                vm.WorkingList.Add(printWorking);
                //精度评估
                printWorking.Accuracy = SimulationPrintAccuracyHelper.Create(baseHydroInfoRhs, allMonitorList, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                //水泵分析
                printWorking.PumpAnaly = SimulationPrintPumpAnalyHelper.Create(baseHydroInfoRhs, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                //监测分析
                printWorking.MonitorAnaly = SimulationPrintMonitorAnalyHelper.Create(baseHydroInfoRhs, allMonitorList, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                //能耗分析
                printWorking.EnergyAnaly = SimulationPrintEnergyAnalyHelper.Create(baseHydroInfoRhs, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                //损失统计
                printWorking.LossStatistics = SimulationPrintLossStatisticsHelper.Create(baseHydroInfoRhs, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                //损失曲线
                printWorking.LossCurve = SimulationPrintLossCurveHelper.Create(baseHydroInfoRhs, working, selectedNode, calcuResult, _calcuPressModeIsHead, allEvaluationList);
            }
            #endregion
            #region 方案处理
            if (_scheme != null)
            {
                var hydroInfo = _hydroInfo;
                var hydroInfoRhs = hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
                vm.Scheme = new SimulationPrintSchemeViewModel(_scheme);
                foreach (var working in allWorkingList)
                {
                    hydroInfoRhs.UpdateWorkingInfo(working.WorkingInfo);
                    var calcuResult = hydroInfoRhs.Calcu(Yw.EPAnet.CalcuMode.MinorLoss, _calcuPressModeIsHead, allEvaluationList);
                    var printWorking = new SimulationPrintWorkingViewModel(working);
                    vm.Scheme.WorkingList.Add(printWorking);
                    //精度评估
                    printWorking.Accuracy = SimulationPrintAccuracyHelper.Create(hydroInfoRhs, allMonitorList, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                    //水泵分析
                    printWorking.PumpAnaly = SimulationPrintPumpAnalyHelper.Create(hydroInfoRhs, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                    //监测分析
                    printWorking.MonitorAnaly = SimulationPrintMonitorAnalyHelper.Create(hydroInfoRhs, allMonitorList, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                    //能耗分析
                    printWorking.EnergyAnaly = SimulationPrintEnergyAnalyHelper.Create(hydroInfoRhs, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                    //损失统计
                    printWorking.LossStatistics = SimulationPrintLossStatisticsHelper.Create(hydroInfoRhs, working, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                    //损失曲线
                    printWorking.LossCurve = SimulationPrintLossCurveHelper.Create(hydroInfoRhs, working, selectedNode, calcuResult, _calcuPressModeIsHead, allEvaluationList);
                }
            }
            #endregion
            return vm;
        }
        //导出word
        private async void barBtnExportWord_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var printInfo = await CreatePrintInfo();
            var printDlg = new SimulationCommonReportDlg();
            printDlg.SetBindingData(printInfo);
            printDlg.ShowDialog();
            if (_visual == null)
            {
                SelectInputSource();
@@ -2699,11 +2950,17 @@
        {
            if (_workingCheckedListHelper == null)
            {
                var visualListHelper = GetVisualListHelper();
                _workingCheckedListHelper = new SimulationWorkingCheckedListHelper(visualListHelper);
                _workingCheckedListHelper = new SimulationWorkingCheckedListHelper();
                _workingCheckedListHelper.InitialData(_allWorkingCheckedListDict);
            }
            return _workingCheckedListHelper;
        }
        //获取工况字典
        private Dictionary<HydroWorkingVmo, bool> GetWorkingDict()
        {
            var helper = GetWorkingCheckedListHelper();
            return helper.GetWorkingDict();
        }
        //获取工况列表
@@ -2741,7 +2998,44 @@
            helper.Remove(working);
        }
        #endregion 选择工况
        /// <summary>
        /// 重载工况选择列表
        /// </summary>
        public void ReloadWorkingCheckedList(Dictionary<HydroWorkingVmo, bool> dict)
        {
            var helper = GetWorkingCheckedListHelper();
            helper.InitialData(dict);
        }
        //管理工况
        private void barBtnMgrWorking_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var dict = GetWorkingDict();
            var dlg = new HydroWorkingMgrDlg();
            dlg.ReloadDataEvent += (dict) =>
            {
                this.ReloadWorkingEvent?.Invoke(dict);
            };
            dlg.UpdateDataEvent += (rhs) =>
            {
                this.UpdateWorkingEvent?.Invoke(rhs);
            };
            dlg.ApplyDataEvent += async (rhs) =>
            {
                _hydroInfo.UpdateWorkingInfo(rhs.WorkingInfo);
                var monitorValueHelper = GetMonitorValueHelper();
                var allMonitorValueList = await monitorValueHelper.GetAll();
                allMonitorValueList.UpdateMonitorValue(rhs.MonitorInfo);
            };
            dlg.DeleteDataEvent += (rhs) =>
            {
                this.RemoveWorkingEvent?.Invoke(rhs);
            };
            dlg.SetBindingData(dict);
            dlg.ShowDialog();
        }
        #endregion
        #region 监测分析
@@ -2849,6 +3143,27 @@
                    }
                }
            }
        }
        //获取选择节点
        private HydroNodeInfo GetSelectNode()
        {
            if (_visual == null)
            {
                SelectInputSource();
                if (_visual == null)
                {
                    TipFormHelper.ShowWarn("请选择构件后重试!");
                    return null;
                }
            }
            HydroVisualInfo visual = _visual;
            if (_visual is HydroLinkInfo linkInfo)
            {
                var visualListHelper = GetVisualListHelper();
                visual = visualListHelper.GetVisual(linkInfo.StartCode);
            }
            return visual as HydroNodeInfo;
        }
        //精度评估
@@ -3186,5 +3501,9 @@
        #endregion 方案管理
    }
}