using DevExpress.Utils.Extensions; using DevExpress.Utils.Svg; using Yw.DAL.Basic; using Yw.Vmo; namespace HStation.WinFrmUI { public partial class SimulationFunctionCtrl : DevExpress.XtraEditors.XtraUserControl { public SimulationFunctionCtrl() { InitializeComponent(); this.layoutControl1.SetupLayoutControl(); } /// /// 显示项目站信息事件 /// public event Action ShowProjectSiteInfoEvent; /// /// 显示项目站模拟事件 /// public event Action, SvgImage> ShowProjectSiteSimulationEvent; /// /// 显示项目站工况事件 /// public event Action ShowProjectSiteWorkingEvent; /// /// 项目站工况选择改变事件 /// public event Action ProjectSiteWorkingCheckedEvent; /// /// 项目站工况更新事件 /// public event Action ProjectSiteWorkingUpdateEvent; /// /// 项目站工况移除事件 /// public event Action ProjectSiteWorkingRemoveEvent; /// /// 显示项目站方案事件 /// public event Action, SvgImage> ShowProjectSiteSchemeEvent; /// /// 显示项目站方案工况事件 /// public event Action ShowProjectSiteSchemeWorkingEvent; /// /// 项目站方案工况选择工况事件 /// public event Action ProjectSiteSchemeWorkingCheckedEvent; /// /// 项目站方案工况更新事件 /// public event Action ProjectSiteSchemeWorkingUpdateEvent; /// /// 项目站方案工况移除事件 /// public event Action ProjectSiteSchemeWorkingRemoveEvent; /// /// 创建项目站方案事件 /// public event Action CreateProjectSiteSchemeEvent; /// /// 比对项目工况事件 /// public event Action CompareProjectWorkingEvent; private XhsProjectVmo _project = null;//项目 private XhsProjectSiteVmo _projectSite = null;//项目站 private Yw.Model.HydroModelInfo _hydroInfo = null;//模型信息 private Dictionary _allWorkingCheckedListDict = null;//所有工况选择列表字典 private Dictionary _allSchemeHydroInfoDict = null;//所有方案水力信息列表 private Dictionary> _allSchemeWorkingCheckedListDict = null;//所有方案工况选择列表字典 /// /// 绑定数据 /// public async Task SetBindingData(XhsProjectVmo project) { if (project == null) { return; } _project = project; var overlay = this.ShowOverlay(); _projectSite = await BLLFactory.Instance.GetDefaultByProjectID(_project.ID); var relation = await BLLFactory.Instance .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation); if (relation == null) { return; } var allWorkingList = await BLLFactory.Instance.GetByModelID(relation.ModelID); if (allWorkingList != null && allWorkingList.Count > 0) { _allWorkingCheckedListDict = new Dictionary(); foreach (var working in allWorkingList) { _allWorkingCheckedListDict.Add(working, false); AppendWorking(working); } } var allSchemeList = await BLLFactory.Instance.GetBySiteID(_projectSite.ID); if (allSchemeList != null && allSchemeList.Count > 0) { _allSchemeWorkingCheckedListDict = new Dictionary>(); foreach (var scheme in allSchemeList) { AppendScheme(scheme); var schemeRelation = await BLLFactory.Instance .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, scheme.ID, HStation.Xhs.Purpose.Simulation); if (schemeRelation != null) { var allSchemeWorkingList = await BLLFactory.Instance.GetByModelID(schemeRelation.ModelID); if (allSchemeWorkingList != null && allSchemeWorkingList.Count > 0) { _allSchemeWorkingCheckedListDict.Add(scheme, new Dictionary()); foreach (var schemeWorking in allSchemeWorkingList) { _allSchemeWorkingCheckedListDict[scheme].Add(schemeWorking, false); AppendSchemeWorking(scheme, schemeWorking); } } } } } overlay.Close(); } #region 获取水力信息 /// /// 获取水力信息 /// UseCache 是否使用缓存 /// public async Task GetHydroInfo(bool useCache) { if (!useCache) { _hydroInfo = await GetHydroInfo(); if (_hydroInfo == null) { return null; } } if (_hydroInfo == null) { _hydroInfo = await GetHydroInfo(); } return _hydroInfo; } //获取水力信息 private async Task GetHydroInfo() { if (_project == null) { return default; } if (_projectSite == null) { return default; } var relation = await BLLFactory.Instance .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation); if (relation == null) { return null; } var hydroInfo = await BLLFactory.Instance.GetByID(relation.ModelID); return hydroInfo; } #endregion #region 获取方案水力信息 /// /// 获取方案水力信息 /// UseCache 是否使用缓存 /// public async Task GetSchemeHydroInfo(XhsSchemeVmo scheme, bool useCache) { if (_project == null) { return default; } if (_projectSite == null) { return default; } if (scheme == null) { return default; } if (!useCache) { var hydroInfo = await GetSchemeHydroInfo(scheme); if (hydroInfo == null) { return null; } if (_allSchemeHydroInfoDict == null) { _allSchemeHydroInfoDict = new Dictionary(); } if (_allSchemeHydroInfoDict.ContainsKey(scheme)) { _allSchemeHydroInfoDict[scheme] = hydroInfo; } else { _allSchemeHydroInfoDict.Add(scheme, hydroInfo); } return hydroInfo; } if (_allSchemeHydroInfoDict == null) { _allSchemeHydroInfoDict = new Dictionary(); } if (!_allSchemeHydroInfoDict.ContainsKey(scheme)) { var hydroInfo = await GetSchemeHydroInfo(scheme); _allSchemeHydroInfoDict.Add(scheme, hydroInfo); return hydroInfo; } return _allSchemeHydroInfoDict[scheme]; } //获取方案水力信息 private async Task GetSchemeHydroInfo(XhsSchemeVmo scheme) { if (_project == null) { return default; } if (_projectSite == null) { return default; } if (scheme == null) { return default; } var relation = await BLLFactory.Instance .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, scheme.ID, HStation.Xhs.Purpose.Simulation); if (relation == null) { return default; } var hydroInfo = await BLLFactory.Instance.GetByID(relation.ModelID); return hydroInfo; } #endregion #region 项目站工况方法 /// /// 添加工况 /// 纯添加,不会触发事件 /// public void AppendWorking(Yw.Vmo.HydroWorkingVmo working) { if (_project == null) { return; } if (_projectSite == null) { return; } if (working == null) { return; } this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group; var ckEdit = new CheckEdit(); ckEdit.Properties.AutoWidth = true; ckEdit.Properties.Caption = string.Empty; ckEdit.CheckedChanged += async (sender, e) => { if (_allWorkingCheckedListDict == null) { _allWorkingCheckedListDict = new Dictionary(); } if (_allWorkingCheckedListDict.ContainsKey(working)) { _allWorkingCheckedListDict[working] = ckEdit.Checked; } else { _allWorkingCheckedListDict.Add(working, ckEdit.Checked); } var hydroInfo = await GetHydroInfo(true); this.ProjectSiteWorkingCheckedEvent?.Invoke(_project, _projectSite, hydroInfo, working, ckEdit.Checked); }; this.accordionControl1.Controls.Add(ckEdit); var elementWorking = new DevExpress.XtraBars.Navigation.AccordionControlElement(); elementWorking.HeaderControl = ckEdit; elementWorking.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; elementWorking.Text = working.Name; elementWorking.Hint = working.Description; elementWorking.Tag = working; elementWorking.Click += async (sender, e) => { var hydroInfo = await GetHydroInfo(true); this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, hydroInfo, working, this.svgImg32[4]); }; this.elementProjectSiteSimulation.Elements.Add(elementWorking); } /// /// 更新工况 /// 更新,会触发更新事件 /// public async void UpdateWorking(Yw.Vmo.HydroWorkingVmo working) { if (_project == null) { return; } if (_projectSite == null) { return; } var hydroInfo = await GetHydroInfo(true); if (working == null) { return; } var element = this.elementProjectSiteSimulation.Elements. Where(x => x.Tag != null && (x.Tag is HydroWorkingVmo) && (x.Tag as HydroWorkingVmo).ID == working.ID).FirstOrDefault(); if (element == null) { return; } element.Tag = working; element.Text = working.Name; element.Hint = working.Description; this.ProjectSiteWorkingUpdateEvent?.Invoke(_project, _projectSite, hydroInfo, working); } /// /// 移除工况 /// 移除,会触发移除事件 /// public async void RemoveWorking(Yw.Vmo.HydroWorkingVmo working) { if (_project == null) { return; } if (_projectSite == null) { return; } var hydroInfo = await GetHydroInfo(true); if (working == null) { return; } var element = this.elementProjectSiteSimulation.Elements. Where(x => x.Tag != null && (x.Tag is HydroWorkingVmo) && (x.Tag as HydroWorkingVmo).ID == working.ID).FirstOrDefault(); if (element == null) { return; } if (element.HeaderControl != null) { this.accordionControl1.Controls.Remove(element.HeaderControl); } this.elementProjectSiteSimulation.Elements.Remove(element); if (this.elementProjectSiteSimulation.Elements.Count < 1) { this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; } this.ProjectSiteWorkingRemoveEvent?.Invoke(_project, _projectSite, hydroInfo, working); } #endregion #region 项目站方案 /// /// 添加方案 /// public void AppendScheme(XhsSchemeVmo scheme) { if (scheme == null) { return; } this.elementSchemeList.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group; var elementScheme = new DevExpress.XtraBars.Navigation.AccordionControlElement(); elementScheme.Text = scheme.Name; elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; elementScheme.ImageOptions.ImageIndex = 3; elementScheme.Tag = scheme; elementScheme.Click += async (sender, e) => { if (_project == null) { return; } if (_projectSite == null) { return; } var hydroInfo = await GetSchemeHydroInfo(scheme); if (hydroInfo == null) { return; } Dictionary dict = null; if (_allSchemeWorkingCheckedListDict != null) { if (_allSchemeWorkingCheckedListDict.ContainsKey(scheme)) { dict = _allSchemeWorkingCheckedListDict[scheme]; } } this.ShowProjectSiteSchemeEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, dict, this.svgImg32[3]); }; this.elementSchemeList.Elements.Add(elementScheme); } #endregion #region 项目站方案工况 /// /// 添加方案工况 /// public void AppendSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working) { if (_project == null) { return; } if (_projectSite == null) { return; } if (scheme == null) { return; } if (working == null) { return; } var elementScheme = this.elementSchemeList.Elements.FirstOrDefault(x => x.Tag is XhsSchemeVmo && (x.Tag as XhsSchemeVmo).ID == scheme.ID); if (elementScheme == null) { return; } elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group; var ckEdit = new CheckEdit(); ckEdit.Properties.AutoWidth = true; ckEdit.Properties.Caption = string.Empty; ckEdit.CheckedChanged += (sender, e) => { this.ProjectSiteSchemeWorkingCheckedEvent?.Invoke(scheme, working, ckEdit.Checked); }; this.accordionControl1.Controls.Add(ckEdit); var elementWorking = new DevExpress.XtraBars.Navigation.AccordionControlElement(); elementWorking.HeaderControl = ckEdit; elementWorking.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; elementWorking.Text = working.Name; elementWorking.Tag = working; elementWorking.Click += async (sender, e) => { var hydroInfo = await GetSchemeHydroInfo(scheme, true); this.ShowProjectSiteSchemeWorkingEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, working, this.svgImg32[4]); }; elementScheme.Elements.Add(elementWorking); } /// /// 更新方案工况 /// public void UpdateSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working) { if (_project == null) { return; } if (_projectSite == null) { return; } if (scheme == null) { return; } if (working == null) { return; } var elementScheme = this.elementSchemeList.Elements.FirstOrDefault(x => x.Tag is XhsSchemeVmo && (x.Tag as XhsSchemeVmo).ID == scheme.ID); if (elementScheme == null) { return; } elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group; var ckEdit = new CheckEdit(); ckEdit.Properties.AutoWidth = true; ckEdit.Properties.Caption = string.Empty; ckEdit.CheckedChanged += (sender, e) => { this.ProjectSiteSchemeWorkingCheckedEvent?.Invoke(scheme, working, ckEdit.Checked); }; this.accordionControl1.Controls.Add(ckEdit); var elementWorking = new DevExpress.XtraBars.Navigation.AccordionControlElement(); elementWorking.HeaderControl = ckEdit; elementWorking.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; elementWorking.Text = working.Name; elementWorking.Tag = working; elementWorking.Click += async (sender, e) => { var hydroInfo = await GetSchemeHydroInfo(scheme, true); this.ShowProjectSiteSchemeWorkingEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, working, this.svgImg32[4]); }; elementScheme.Elements.Add(elementWorking); } /// /// 移除方案工况 /// public void RemoveSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working) { } #endregion //元素点击事件 private void accordionControl1_ElementClick(object sender, DevExpress.XtraBars.Navigation.ElementClickEventArgs e) { } //项目站概况 private async void elementProjectSiteInfo_Click(object sender, EventArgs e) { if (_project == null) { return; } if (_projectSite == null) { return; } var hydroInfo = await GetHydroInfo(true); if (hydroInfo == null) { return; } this.ShowProjectSiteInfoEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[0]); } //项目站水力模拟 private async void elementProjectSiteSimulation_Click(object sender, EventArgs e) { if (_project == null) { return; } if (_projectSite == null) { return; } var hydroInfo = await GetHydroInfo(true); if (hydroInfo == null) { return; } this.ShowProjectSiteSimulationEvent?.Invoke(_project, _projectSite, hydroInfo, _allWorkingCheckedListDict, this.svgImg32[1]); } //创建项目站方案 private async void btnCreateProjectSiteScheme_Click(object sender, EventArgs e) { if (_project == null) { return; } if (_projectSite == null) { return; } var hydroInfo = await GetHydroInfo(true); if (hydroInfo == null) { return; } this.CreateProjectSiteSchemeEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[3]); } //工况对比 private void btnCompareWorking_Click(object sender, EventArgs e) { this.CompareProjectWorkingEvent?.Invoke(this.svgImg32[5]); } } }