From f56423884e999eeaa7a14d9a22831cb0a2951b33 Mon Sep 17 00:00:00 2001 From: lixiaojun <1287241240@qq.com> Date: 星期二, 29 十月 2024 22:24:44 +0800 Subject: [PATCH] 优化计算控件 --- WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs | 524 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 478 insertions(+), 46 deletions(-) diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs index 3d46d64..c262764 100644 --- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs +++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs @@ -3,7 +3,9 @@ using DevExpress.XtraRichEdit.Layout; using DevExpress.XtraSpreadsheet.Commands; using HStation.WinFrmUI.PhartRelation; +using System.Windows.Media.Media3D; using Yw.Pump; +using Yw.Vmo; using Yw.WinFrmUI.Bimface; using Yw.WinFrmUI.Hydro; @@ -166,7 +168,7 @@ { _propertyCtrl = new XhsProjectSimulationPropertyCtrl(); _propertyCtrl.Dock = DockStyle.Fill; - _propertyCtrl.InitialData(() => _hydroInfo, () => GetAllCalcuResultList()); + _propertyCtrl.InitialData(() => _hydroInfo, () => GetCalcuResultList()); _propertyCtrl.BlinkLinkParterEvent += async (code, linkCode) => { //寮鸿皟杩炴帴缁勪欢 if (string.IsNullOrEmpty(code)) @@ -254,7 +256,7 @@ } _propertyCtrl?.SelectParter(_parter.Code); - var allCalcuResultList = GetAllCalcuResultList(); + var allCalcuResultList = GetCalcuResultList(); if (allCalcuResultList != null && allCalcuResultList.Count > 0) { var calcuResult = allCalcuResultList.Find(x => x.Code == _parter.Code); @@ -316,7 +318,7 @@ } this.controlContainerBottom.Controls.Clear(); var matchingListCtrl = GetMatchingListCtrl(); - var input = AssetsMatchingParasHelper.Create(_hydroInfo, GetAllCalcuResultList()); + var input = AssetsMatchingParasHelper.Create(_hydroInfo, GetCalcuResultList()); matchingListCtrl.SetBindingData(input); this.controlContainerBottom.Controls.Add(matchingListCtrl); this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; @@ -543,7 +545,7 @@ return; } var parterListCtrl = GetParterListCtrl(); - parterListCtrl.SetBindingData(_hydroInfo, GetAllCalcuResultList()); + parterListCtrl.SetBindingData(_hydroInfo, GetCalcuResultList()); this.controlContainerBottom.Controls.Clear(); this.controlContainerBottom.Controls.Add(parterListCtrl); this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; @@ -948,7 +950,7 @@ { return; } - var allCalcuResultList = GetAllCalcuResultList(); + var allCalcuResultList = GetCalcuResultList(); var vmList = new List<XhsSinglePumpViewModel>(); foreach (var pump in _hydroInfo.Pumps) { @@ -1034,13 +1036,13 @@ #region 鍓嶆彁鏉′欢 //鏄剧ず璁$畻鍓嶆彁鏉′欢绐椾綋 - private async void ShowCalcuPrefixDlg() + private void ShowCalcuPrefixDlg() { if (_hydroInfo == null) { return; } - var dlg = new SetHydroCalcuPrefixDlg(); + var dlg = new HStation.WinFrmUI.SetHydroCalcuPrefixDlg1(); dlg.SetBindingData(_hydroInfo); dlg.HydroViewEvent += async (parter) => { @@ -1067,11 +1069,17 @@ return; } + WaitFormHelper.ShowWaitForm(this, "姝e湪璁$畻鍒嗘瀽涓紝璇风◢鍊�..."); + + await Task.Delay(5000); + var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo); _calcuResult = netWork.Calcu(); + + WaitFormHelper.HideWaitForm(); if (_calcuResult.Succeed) { - GetAllCalcuResultList(false); + GetCalcuResultList(false); await _bimfaceCtrl?.SetLogicCalcuCustomLabels(_calcuResult); TipFormHelper.ShowSucceed("璁$畻鎴愬姛锛�"); } @@ -1136,7 +1144,7 @@ //鑾峰彇璁$畻缁撴灉 //true 浣跨敤缂撳瓨锛宖alse 涓嶄娇鐢ㄧ紦瀛� - private List<HydroCalcuResult> GetAllCalcuResultList(bool isCache = true) + private List<HydroCalcuResult> GetCalcuResultList(bool isCache = true) { if (_hydroInfo == null) { @@ -1451,30 +1459,85 @@ #region 棰滆壊鍒嗙骇 - //棰滆壊鍒嗙骇搴旂敤鍒楄〃 - private List<HydroGradingApplyViewModel> _allGradingApplyList = null; - //棰滆壊鍒嗙骇缂栫爜鍒楄〃 - private List<string> _allGradingCodeList = null; + #region 棰滆壊閰嶇疆 - //璁剧疆棰滆壊鍒嗙骇 - private void SetGrading() + //鎵�鏈夊垎绾у垪琛� + private List<HydroGradingVmo> _allGradingList = null; + + //鑾峰彇鍒嗙骇鍒楄〃 + private async Task<List<HydroGradingVmo>> GetGradingList() + { + if (_hydroInfo == null) + { + return default; + } + if (_allGradingList == null) + { + _allGradingList = await BLLFactory<Yw.BLL.HydroGrading>.Instance.GetByModelID(_hydroInfo.ID); + if (_allGradingList == null || _allGradingList.Count < 1) + { + var config = Yw.Settings.HydroParasHelper.Hydro.Grading; + if (config != null && config.Items != null && config.Items.Count > 0) + { + _allGradingList = new List<HydroGradingVmo>(); + config.Items.ForEach(x => + { + var vmo = new HydroGradingVmo() + { + ModelID = _hydroInfo.ID, + Catalog = x.Catalog, + PropName = x.PropName, + SetValue = x.SetValue, + MinValue = x.MinValue, + MaxValue = x.MaxValue, + Color = x.Color, + SortCode = config.Items.IndexOf(x) + }; + _allGradingList.Add(vmo); + }); + } + } + } + return _allGradingList; + } + + //鏄剧ず閰嶇疆棰滆壊鍒嗙骇绐椾綋 + private async void ShowSetGradingDlg() { if (_hydroInfo == null) { return; } - var dlg = new SetHydroGradingModelTreeDlg(); - dlg.SetBindingData(_hydroInfo.ID); + var allGradingList = await GetGradingList(); + var dlg = new SetHydroGradingTreeDlg(); + dlg.SetBindingData(_hydroInfo, allGradingList); + dlg.ReloadDataEvent += (list) => + { + _allGradingList = list; + }; + dlg.ApplyDataEvent += () => + { + ShowApplyGradingDlg(); + }; dlg.ShowDialog(); } - //搴旂敤棰滆壊鍒嗙骇 - private async void ApplyGrading() + //閰嶇疆棰滆壊鍒嗙骇 + private void barBtnGradingSet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { - if (_hydroInfo == null) - { - return; - } + ShowSetGradingDlg(); + } + + #endregion + + #region 搴旂敤鍒嗙骇 + + //棰滆壊鍒嗙骇搴旂敤鍒楄〃 + private List<HydroGradingApplyViewModel> _allGradingApplyList = null; + + //鑾峰彇棰滆壊鍒嗙骇搴旂敤鍒楄〃 + private List<HydroGradingApplyViewModel> GetGradingApplyList() + { if (_allGradingApplyList == null) { _allGradingApplyList = new List<HydroGradingApplyViewModel>(); @@ -1485,7 +1548,7 @@ { Code = Yw.Hydro.ParterCatalog.Pump, Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetCatalogName(Yw.Hydro.ParterCatalog.Pump), - PropName = string.Empty + PropName = Yw.Hydro.ParterProp.LinkStatus }); } if (_hydroInfo.Valves != null && _hydroInfo.Valves.Count > 0) @@ -1494,7 +1557,7 @@ { Code = Yw.Hydro.ParterCatalog.Valve, Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetCatalogName(Yw.Hydro.ParterCatalog.Valve), - PropName = string.Empty + PropName = Yw.Hydro.ParterProp.LinkStatus }); } if (_hydroInfo.Pipes != null && _hydroInfo.Pipes.Count > 0) @@ -1503,41 +1566,410 @@ { Code = Yw.Hydro.ParterCatalog.Pipe, Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetCatalogName(Yw.Hydro.ParterCatalog.Pipe), - PropName = string.Empty + PropName = Yw.Hydro.ParterProp.CalcuFlow }); } } - var dlg = new ApplyHydroGradingDlg(); - dlg.SetBindingData(() => _hydroInfo, _allGradingApplyList, GetAllCalcuResultList()); - dlg.ReloadDataEvent += (obj) => - { - _allGradingCodeList = obj?.Select(x => x.Code).Distinct().ToList(); - var objGroupList = obj?.GroupBy(x => x.Color).ToList(); - objGroupList?.ForEach(async x => - { - await _bimfaceCtrl?.OverrideComponentsColor(x.Select(t => t.Code).Distinct().ToList(), x.Key, 1); - }); - }; - if (dlg.ShowDialog() == DialogResult.Cancel) - { - await _bimfaceCtrl?.RestoreComponentsColor(_allGradingCodeList); - } + return _allGradingApplyList; } - //璁剧疆 - private void barBtnGradingSet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) + //棰滆壊鍒嗙骇搴旂敤缁撴灉鍒楄〃 + private List<HydroGradingApplyResultViewModel> _allGradingApplyResultList = null; + + //鑾峰彇棰滆壊鍒嗙骇搴旂敤缁撴灉鍒楄〃 + private async Task<List<HydroGradingApplyResultViewModel>> GetGradingApplyResultList() { - SetGrading(); + if (_hydroInfo == null) + { + return default; + } + + //鎵�鏈夊垎绾у垪琛� + var allGradingList = await GetGradingList(); + if (allGradingList == null || allGradingList.Count < 1) + { + return default; + } + + //鎵�鏈夊垎绾у簲鐢ㄥ垪琛� + var allGradingApplyList = GetGradingApplyList(); + if (allGradingApplyList == null || allGradingApplyList.Count < 1) + { + return default; + } + + var allCalcuResultList = GetCalcuResultList(); + + _allGradingApplyResultList = new List<HydroGradingApplyResultViewModel>(); + allGradingApplyList.ForEach(x => + { + var allCatalogGradingList = allGradingList.Where(t => t.Catalog == x.Code).ToList(); + if (allCatalogGradingList != null || allCatalogGradingList.Count > 0) + { + switch (x.Code) + { + case Yw.Hydro.ParterCatalog.Pump: + { + if (_hydroInfo.Pumps != null && _hydroInfo.Pumps.Count > 0) + { + foreach (var pump in _hydroInfo.Pumps) + { + switch (x.PropName) + { + case Yw.Hydro.ParterProp.LinkStatus: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.LinkStatus).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var grading = gradingList.Meet(pump.LinkStatus); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = pump.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + break; + case Yw.Hydro.ParterProp.CalcuFlow: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuFlow).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var calcuResult = allCalcuResultList?.Find(t => t.Code == pump.Code); + if (calcuResult is HydroCalcuLinkResult calcuLinkResult) + { + if (calcuLinkResult.CalcuFlow.HasValue) + { + var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value)); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = pump.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + } + } + break; + case Yw.Hydro.ParterProp.CalcuVelocity: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var calcuResult = allCalcuResultList?.Find(t => t.Code == pump.Code); + if (calcuResult is HydroCalcuLinkResult calcuLinkResult) + { + if (calcuLinkResult.CalcuVelocity.HasValue) + { + var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value)); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = pump.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + } + } + break; + case Yw.Hydro.ParterProp.CalcuHeadLoss: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var calcuResult = allCalcuResultList?.Find(t => t.Code == pump.Code); + if (calcuResult is HydroCalcuLinkResult calcuLinkResult) + { + if (calcuLinkResult.CalcuHeadLoss.HasValue) + { + var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value)); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = pump.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + } + } + break; + default: break; + } + } + } + } + break; + case Yw.Hydro.ParterCatalog.Valve: + { + if (_hydroInfo.Valves != null && _hydroInfo.Valves.Count > 0) + { + foreach (var valve in _hydroInfo.Valves) + { + switch (x.PropName) + { + case Yw.Hydro.ParterProp.LinkStatus: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.LinkStatus).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var grading = gradingList.Meet(valve.LinkStatus); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = valve.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + break; + case Yw.Hydro.ParterProp.CalcuFlow: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuFlow).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var calcuResult = allCalcuResultList?.Find(t => t.Code == valve.Code); + if (calcuResult is HydroCalcuLinkResult calcuLinkResult) + { + if (calcuLinkResult.CalcuFlow.HasValue) + { + var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value)); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = valve.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + } + } + break; + case Yw.Hydro.ParterProp.CalcuVelocity: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var calcuResult = allCalcuResultList?.Find(t => t.Code == valve.Code); + if (calcuResult is HydroCalcuLinkResult calcuLinkResult) + { + if (calcuLinkResult.CalcuVelocity.HasValue) + { + var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value)); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = valve.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + } + } + break; + case Yw.Hydro.ParterProp.CalcuHeadLoss: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var calcuResult = allCalcuResultList?.Find(t => t.Code == valve.Code); + if (calcuResult is HydroCalcuLinkResult calcuLinkResult) + { + if (calcuLinkResult.CalcuHeadLoss.HasValue) + { + var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value)); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = valve.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + } + } + break; + default: break; + } + } + } + } + break; + case Yw.Hydro.ParterCatalog.Pipe: + { + if (_hydroInfo.Pipes != null && _hydroInfo.Pipes.Count > 0) + { + foreach (var pipe in _hydroInfo.Pipes) + { + switch (x.PropName) + { + case Yw.Hydro.ParterProp.CalcuFlow: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuFlow).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var calcuResult = allCalcuResultList?.Find(t => t.Code == pipe.Code); + if (calcuResult is HydroCalcuLinkResult calcuLinkResult) + { + if (calcuLinkResult.CalcuFlow.HasValue) + { + var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value)); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = pipe.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + } + } + break; + case Yw.Hydro.ParterProp.CalcuVelocity: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuVelocity).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var calcuResult = allCalcuResultList?.Find(t => t.Code == pipe.Code); + if (calcuResult is HydroCalcuLinkResult calcuLinkResult) + { + if (calcuLinkResult.CalcuVelocity.HasValue) + { + var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value)); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = pipe.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + } + } + break; + case Yw.Hydro.ParterProp.CalcuHeadLoss: + { + var gradingList = allCatalogGradingList.Where(x => x.PropName == Yw.Hydro.ParterProp.CalcuHeadLoss).OrderBy(t => t.SortCode).ToList(); + if (gradingList != null && gradingList.Count > 0) + { + var calcuResult = allCalcuResultList?.Find(t => t.Code == pipe.Code); + if (calcuResult is HydroCalcuLinkResult calcuLinkResult) + { + if (calcuLinkResult.CalcuHeadLoss.HasValue) + { + var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value)); + if (grading != null) + { + var result = new HydroGradingApplyResultViewModel() + { + Code = pipe.Code, + Color = grading.Color + }; + _allGradingApplyResultList.Add(result); + } + } + } + } + } + break; + default: break; + } + } + } + } + break; + default: break; + } + } + }); + + return _allGradingApplyResultList; } - //搴旂敤 + //棰滆壊鍒嗙骇缂栫爜鍒楄〃 + private List<string> _allGradingCodeList = null; + + //搴旂敤棰滆壊鍒嗙骇 + private async void ApplyGrading() + { + if (_hydroInfo == null) + { + return; + } + var allGradingApplyResultList = await GetGradingApplyResultList(); + _allGradingCodeList = allGradingApplyResultList?.Select(x => x.Code).Distinct().ToList(); + var objGroupList = allGradingApplyResultList?.GroupBy(x => x.Color).ToList(); + objGroupList?.ForEach(async x => + { + await _bimfaceCtrl?.OverrideComponentsColor(x.Select(t => t.Code).Distinct().ToList(), x.Key, 1); + }); + } + + //鏄剧ず搴旂敤棰滆壊鍒嗙骇绐椾綋 + private void ShowApplyGradingDlg() + { + if (_hydroInfo == null) + { + return; + } + var allGradingApplyList = GetGradingApplyList(); + if (allGradingApplyList == null || allGradingApplyList.Count < 1) + { + return; + } + var dlg = new ApplyHydroGradingDlg(); + dlg.SetBindingData(allGradingApplyList); + dlg.ReloadDataEvent += async (obj) => + { + _allGradingApplyList = obj; + ApplyGrading(); + }; + dlg.ShowDialog(); + } + + //搴旂敤棰滆壊鍒嗙骇 private void barBtnGradingApply_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { - ApplyGrading(); + ShowApplyGradingDlg(); } #endregion + #endregion + #region 浜哄伐鍒锋柊 //鍒锋柊 -- Gitblit v1.9.3