global using Yw.EPAnet; using DevExpress.Xpo.Helpers; using HStation.WinFrmUI.Xhs; using HStation.WinFrmUI.Xhs.Core; using NPOI.SS.Formula.Functions; using Yw.WinFrmUI.HydroL2d; using Yw.WinFrmUI.HydroL3d; namespace HStation.WinFrmUI { public partial class XhsProjectSimulationCorePage : DocumentPage { public XhsProjectSimulationCorePage() { InitializeComponent(); this.PageTitle.Caption = "水力模拟"; this.PageTitle.HeaderSvgImage = this.svgImg32[0]; this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.assetsMainChoicePage1.FormRowClickEvent += xhsProjectSimulationHydroCheckFailedCtrl1_HydroClickEvent; } private HStation.Vmo.XhsProjectVmo _project = null;//项目 private HStation.Vmo.XhsProjectSiteVmo _projectSite = null;//项目站 private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息 private List _fastShowHideCodeList = null;//显隐编码列表 private Yw.Model.HydroParterInfo _parter = null; private Yw.EPAnet.CheckResult _checkResult = null; private Yw.EPAnet.CalcuResult _calcuResult = null; /// /// 绑定数据 /// public async Task SetBindingData ( HStation.Vmo.XhsProjectVmo project, HStation.Vmo.XhsProjectSiteVmo projectSite, Yw.Model.HydroModelInfo hydroInfo ) { if (project == null) { return; } _project = project; _projectSite = projectSite; _hydroInfo = hydroInfo; if (_projectSite == null) { _projectSite = await BLLFactory.Instance.GetDefaultByProjectID(_project.ID); } if (_hydroInfo == null) { var hydroRelation = await BLLFactory.Instance .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation); _hydroInfo = await BLLFactory.Instance.GetByID(hydroRelation.ModelID); } this.xhsProjectSimulationQ3dCtrl1.SetBindingData(_hydroInfo); this.xhsProjectSimulationL3dCtrl1.SetBindingData(_hydroInfo); } /// /// 初始化数据 /// public override async void InitialDataSource() { base.InitialDataSource(); if (_project == null) { return; } this.PageTitle.Caption = $"{_project.Name}\r\n水力模拟"; await this.xhsProjectSimulationBimfaceCtrl1.SetBindingData(_project, _projectSite); } //属性面板获取水力信息事件 private Yw.Model.HydroModelInfo xhsProjectSimulationPropertyCtrl1_GetHydroInfoEvent() { return _hydroInfo; } //一键显隐 private async void barBtnShowHide_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } if (_hydroInfo.Decorators == null || _hydroInfo.Decorators.Count < 1) { return; } if (_fastShowHideCodeList == null) { _fastShowHideCodeList = _hydroInfo.Decorators.Select(x => x.Code).ToList(); await this.xhsProjectSimulationBimfaceCtrl1.HideComponents(_fastShowHideCodeList); } else { await this.xhsProjectSimulationBimfaceCtrl1.ShowComponents(_fastShowHideCodeList); _fastShowHideCodeList = null; } } //水力计算 private void barBtnHydroCalcu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo); _calcuResult = netWork.Calcu(); if (_calcuResult.Succeed) { ShowProperty(); TipFormHelper.ShowSucceed("计算成功!"); return; } this.xhsProjectSimulationHydroCalcuFailedCtrl1.SetBindingData(_calcuResult.FailedList); this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlHydroCalcu.Height = 350; } //水力构件列表 private void barBtnHydroParterList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; // this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.hydroParterListCtrl1.SetBindingData(_hydroInfo); this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlHydroParterList.Height = 350; } //导出水力INP文件 private void barBtnHydroExportInp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } var fileName = Yw.WinFrmUI.FileDialogHelper.SaveInp("导出Inp文件"); if (string.IsNullOrEmpty(fileName)) { return; } var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo); var result = netWork.ToInpString(); File.WriteAllText(fileName, result); TipFormHelper.ShowSucceed("导出成功"); } //自动匹配 private void barBtnAllAutoMatching_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } var input = new AssetsAutoMatchingViewModel(); input.PumpMatchingModels = _hydroInfo.Pumps?.Select(x => new PumpMatchingViewModel() { ID = x.ID, Code = x.Code, Name = x.Name, DbID = x.DbId, DbLocked = x.DbLocked, ChartDbID = _hydroInfo.Curves?.Find(t => t.Code == x.CurveQH)?.DbId, ModelType = x.ModelType, RatedP = x.RatedP, RatedH = x.RatedH, RatedN = x.RatedN, RatedQ = x.RatedQ, }).ToList(); input.ElbowsMatchingModels = _hydroInfo.Elbows?.Select(x => new ElbowsMatchingViewModel() { ID = x.ID, Name = x.Name, Code = x.Code, Dbid = x.DbId, DbLocked = x.DbLocked, ModelType = x.ModelType, Caliber = x.Caliber, Material = x.Material }).ToList(); input.ThreeLinkMatchingModels = _hydroInfo.Threelinks?.Select(x => new ThreeLinkMatchingViewModel() { ID = x.ID, Name = x.Name, Code = x.Code, DbId = x.DbId, DbLocked = x.DbLocked, ModelType = x.ModelType, Caliber = x.Caliber, Material = x.Material }).ToList(); input.FourLinkMatchingModels = _hydroInfo.Fourlinks?.Select(x => new FourLinkMatchingViewModel() { ID = x.ID, Name = x.Name, Code = x.Code, Dbid = x.DbId, DbLocked = x.DbLocked, ModelType = x.ModelType, Caliber = x.Caliber, Material = x.Material }).ToList(); input.PipeLineMatchingModels = _hydroInfo.Pipes?.Select(x => new PipeLineMatchingViewModel() { ID = x.ID, Name = x.Name, Code = x.Code, DbId = x.DbId, DbLocked = x.DbLocked, ModelType = x.ModelType, Caliber = x.Diameter,//这里是数值 Material = x.Material }).ToList(); input.ValveMatchingModels = _hydroInfo.Pipes?.Select(x => new ValveMatchingViewModel() { ID = x.ID, Name = x.Name, Code = x.Code, DbId = x.DbId, DbLocked = x.DbLocked, ModelType = x.ModelType, Caliber = x.Diameter,//这里是数值 Material = x.Material//怎么没有阀门类型 }).ToList(); this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.hydroParterListCtrl1.SetBindingData(_hydroInfo); this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlMatchingList.Height = 350; this.assetsMainChoicePage1.SetBindingData(input); this.assetsMainChoicePage1.RelaodEvent += (rhs) => { return false; }; } //水力构件明细面板点击事件 private async void hydroParterListCtrl1_HydroClickEvent(Yw.Model.HydroParterInfo parter) { var allParterList = _hydroInfo.GetAllParters(); _parter = allParterList.Find(x => x.ID == parter.ID); await this.xhsProjectSimulationBimfaceCtrl1.SetSelectedComponents(new List() { _parter.Code }); ShowProperty(); } #region Bimface //bimface 构件点击 private void xhsProjectSimulationBimfaceCtrl1_ClickParterEvent(string objectId) { if (_hydroInfo == null) { return; } var allParterList = _hydroInfo.GetAllParters(); _parter = allParterList.Find(x => x.Code == objectId); ShowProperty(); SetBimfaceLinkColor(); } #endregion #region 水力校验 //水力验证 private void barBtnHydroCheck_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo); _checkResult = netWork.Check(); if (_checkResult.Succeed) { TipFormHelper.ShowSucceed("校验通过!"); return; } this.xhsProjectSimulationHydroCheckFailedCtrl1.SetBindingData(_checkResult.FailedList); this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlHydroCheck.Height = 350; } //水力校验点击 private async void xhsProjectSimulationHydroCheckFailedCtrl1_HydroClickEvent(string code) { if (_hydroInfo == null) { return; } var allParterList = _hydroInfo.GetAllParters(); _parter = allParterList.Find(x => x.Code == code); var elementIds = new List() { _parter.Code }; await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds); ShowProperty(); } #endregion #region 未匹配列表 //未匹配列表 private void barBtnUnMatchingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } this.docPnlHydroCheck.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroCalcu.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlHydroParterList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.docPnlMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Hidden; this.xhsProjectSimulationUnMatchingListCtrl1.SetBindingData(_hydroInfo); this.docPnlUnMatchingList.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible; this.docPnlUnMatchingList.Height = 350; } //未匹配列表点击事件 private async void xhsProjectSimulationUnMatchingListCtrl1_HydroClickEvent(Yw.Model.HydroParterInfo parter) { var allParterList = _hydroInfo.GetAllParters(); _parter = allParterList.Find(x => x.ID == parter.ID); var elementIds = new List() { _parter.Code }; await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(elementIds); ShowProperty(); } //未匹配列表查看模型 private async void xhsProjectSimulationUnMatchingListCtrl1_ViewModelEvent(List parters) { var codes = parters?.Select(x => x.Code).Distinct().ToList(); await this.xhsProjectSimulationBimfaceCtrl1.ZoomAndSelectComponents(codes); _parter = null; ShowProperty(); } #endregion #region 保存水力信息 //保存 private async void barBtnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_hydroInfo == null) { return; } var id = await BLLFactory.Instance.Save(_hydroInfo); if (id < 1) { TipFormHelper.ShowError("保存失败!"); return; } _hydroInfo = await BLLFactory.Instance.GetByID(id); TipFormHelper.ShowSucceed("保存成功!"); } #endregion #region 业务方法 //显示属性 private void ShowProperty() { if (_hydroInfo == null) { return; } if (_parter == null) { this.xhsProjectSimulationPropertyCtrl1.SelectParter(null); return; } this.xhsProjectSimulationPropertyCtrl1.SelectParter(_parter.Code); if (_calcuResult != null) { if (_calcuResult.Succeed) { var allCalcuParterList = _calcuResult.GetParterList(); var calcuParter = allCalcuParterList.Find(x => x.Id == _parter.Code); if (calcuParter != null) { IHydroCalcuProperty calcuProperty = null; if (calcuParter is Yw.EPAnet.CalcuNode calcuNode) { var calcuNodeProperty = new Yw.WinFrmUI.HydroCalcuNodeProperty(); calcuNodeProperty.ID = _parter.ID; calcuNodeProperty.CalcuPress = calcuNode.Press; calcuNodeProperty.CalcuDemand = calcuNode.Demand; calcuNodeProperty.CalcuHead = calcuNode.Head; calcuProperty = calcuNodeProperty; } else if (calcuParter is Yw.EPAnet.CalcuLink calcuLink) { var calcuLinkProperty = new Yw.WinFrmUI.HydroCalcuLinkProperty(); calcuLinkProperty.ID = _parter.ID; calcuLinkProperty.CalcuHeadLoss = calcuLink.Headloss; calcuLinkProperty.CalcuFlow = calcuLink.Flow; calcuLinkProperty.CalcuVelocity = calcuLink.Velocity; calcuProperty = calcuLinkProperty; } if (calcuProperty != null) { this.xhsProjectSimulationPropertyCtrl1.UpdateCalcuProperty(calcuProperty); } } } } } //设置Bimface连接颜色 private async void SetBimfaceLinkColor() { if (_hydroInfo == null) { return; } List elementIds = null; if (_parter != null) { if (_parter is Yw.Model.HydroLinkInfo linker) { elementIds = new List() { linker.StartCode, linker.EndCode }; } } await this.xhsProjectSimulationBimfaceCtrl1.SetLinkComponentsColor(elementIds); } #endregion } }