| | |
| | | using DevExpress.CodeParser; |
| | | using DevExpress.DataAccess.Native; |
| | | using DevExpress.Utils.Extensions; |
| | | using DevExpress.Utils.Svg; |
| | | using DevExpress.XtraCharts; |
| | | using DevExpress.Utils.Svg; |
| | | using System.Collections.Concurrent; |
| | | using Yw.DAL.Basic; |
| | | using Yw.Vmo; |
| | | |
| | | namespace HStation.WinFrmUI |
| | |
| | | this.layoutControl1.SetupLayoutControl(); |
| | | } |
| | | |
| | | #region 项目事件 |
| | | |
| | | /// <summary> |
| | | /// 显示项目站信息事件 |
| | | /// </summary> |
| | |
| | | /// 显示项目站模拟事件 |
| | | /// </summary> |
| | | public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, Dictionary<HydroWorkingVmo, bool>, SvgImage> ShowProjectSiteSimulationEvent; |
| | | /// <summary> |
| | | /// 显示项目站工况事件 |
| | | /// </summary> |
| | | public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, SvgImage> ShowProjectSiteWorkingEvent; |
| | | /// <summary> |
| | | /// 项目站工况选择改变事件 |
| | | /// </summary> |
| | | public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo, bool> ProjectSiteWorkingCheckedEvent; |
| | | |
| | | #endregion |
| | | |
| | | #region 工况事件 |
| | | |
| | | /// <summary> |
| | | /// 项目站工况增加事件 |
| | | /// </summary> |
| | |
| | | /// </summary> |
| | | public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo> ProjectSiteWorkingRemoveEvent; |
| | | /// <summary> |
| | | /// 项目站工况选择改变事件 |
| | | /// </summary> |
| | | public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo, bool> ProjectSiteWorkingCheckedEvent; |
| | | /// <summary> |
| | | /// 项目站工况重载事件 |
| | | /// </summary> |
| | | public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>> ProjectSiteWorkingReloadEvent; |
| | | |
| | | #endregion |
| | | |
| | | #region 方案事件 |
| | | |
| | | /// <summary> |
| | | /// 创建项目站方案事件 |
| | | /// </summary> |
| | | public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, SvgImage> CreateProjectSiteSchemeEvent; |
| | | public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, List<XhsSchemeVmo>, SvgImage> CreateProjectSiteSchemeEvent; |
| | | /// <summary> |
| | | /// 项目站方案增加事件 |
| | | /// </summary> |
| | |
| | | /// 项目站方案移除事件 |
| | | /// </summary> |
| | | public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo> ProjectSiteSchemeRemoveEvent; |
| | | |
| | | #endregion |
| | | |
| | | private XhsProjectVmo _project = null;//项目 |
| | | private XhsProjectSiteVmo _projectSite = null;//项目站 |
| | |
| | | }); |
| | | await ShowInfo(); |
| | | overlay.Close(); |
| | | await Task.Delay(2000); |
| | | this.accordionControl1.ExpandAll(); |
| | | } |
| | | |
| | | //项目站概况 |
| | |
| | | { |
| | | return; |
| | | } |
| | | this.CreateProjectSiteSchemeEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[3]); |
| | | var allSchemeList = _allSchemeHydroInfoDict?.Keys.ToList(); |
| | | this.CreateProjectSiteSchemeEvent?.Invoke(_project, _projectSite, hydroInfo, allSchemeList, this.svgImg32[3]); |
| | | } |
| | | |
| | | //右键弹出 |
| | |
| | | } |
| | | |
| | | #region 通用方法 |
| | | |
| | | #region Model |
| | | |
| | | /// <summary> |
| | | /// 获取模型 |
| | | /// </summary> |
| | | public async Task<Yw.Model.HydroModelInfo> GetModel(XhsSchemeVmo scheme) |
| | | { |
| | | return await GetHydroInfo(scheme, true); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 刷新Model |
| | | /// </summary> |
| | | public async Task<Yw.Model.HydroModelInfo> RefreshModel(XhsSchemeVmo scheme) |
| | | { |
| | | return await GetHydroInfo(scheme, false); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | /// <summary> |
| | | /// 获取水力信息 |
| | |
| | | return default; |
| | | } |
| | | } |
| | | |
| | | WaitFormHelper.ShowWaitForm(this.FindForm(), "正在加载模型数据,请稍后..."); |
| | | //var overlay = this.ShowOverlay(); |
| | | if (!_gettingHydroInfoDict.TryAdd(key, true)) |
| | | { |
| | | _gettingHydroInfoDict[key] = true; |
| | |
| | | } |
| | | var hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(relation.ModelID); |
| | | _gettingHydroInfoDict[key] = false; |
| | | //overlay.Close(); |
| | | WaitFormHelper.HideWaitForm(); |
| | | return hydroInfo; |
| | | } |
| | | |
| | |
| | | elementWorking.Text = working.Name; |
| | | elementWorking.Hint = working.Description; |
| | | elementWorking.Tag = working; |
| | | elementWorking.Click += async (sender, e) => |
| | | elementWorking.Click += (sender, e) => |
| | | { |
| | | var hydroInfo = await GetHydroInfo(null, true); |
| | | if (hydroInfo == null) |
| | | { |
| | | return; |
| | | } |
| | | this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, null, hydroInfo, working, this.svgImg32[4]); |
| | | |
| | | }; |
| | | this.elementProjectSiteSimulation.Elements.Add(elementWorking); |
| | | this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group; |
| | |
| | | elementWorking.Text = working.Name; |
| | | elementWorking.Hint = working.Description; |
| | | elementWorking.Tag = working; |
| | | elementWorking.Click += async (sender, e) => |
| | | elementWorking.Click += (sender, e) => |
| | | { |
| | | var hydroInfo = await GetHydroInfo(scheme, true); |
| | | if (hydroInfo == null) |
| | | { |
| | | return; |
| | | } |
| | | this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, working, this.svgImg32[4]); |
| | | |
| | | }; |
| | | elementScheme.Elements.Add(elementWorking); |
| | | elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group; |
| | |
| | | this.ProjectSiteWorkingRemoveEvent?.Invoke(_project, _projectSite, scheme, working); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 重载工况 |
| | | /// 重载,会触发重载事件 |
| | | /// </summary> |
| | | public void ReloadWorking(XhsSchemeVmo scheme, Dictionary<HydroWorkingVmo, bool> dict) |
| | | { |
| | | if (_project == null) |
| | | { |
| | | return; |
| | | } |
| | | if (_projectSite == null) |
| | | { |
| | | return; |
| | | } |
| | | if (dict == null) |
| | | { |
| | | dict = new Dictionary<HydroWorkingVmo, bool>(); |
| | | } |
| | | if (scheme == null) |
| | | { |
| | | var elements = this.elementProjectSiteSimulation.Elements.ToList(); |
| | | //存在则更新,不存在则删除 |
| | | foreach (var ele in elements) |
| | | { |
| | | var working = ele.Tag as HydroWorkingVmo; |
| | | if (working != null) |
| | | { |
| | | if (ele.HeaderControl != null) |
| | | { |
| | | this.accordionControl1.Controls.Remove(ele.HeaderControl); |
| | | } |
| | | ele.HeaderControl = null; |
| | | |
| | | var key = dict.Keys.FirstOrDefault(x => x.ID == working.ID); |
| | | if (key == null) |
| | | { |
| | | //移除element |
| | | this.elementProjectSiteSimulation.Elements.Remove(ele); |
| | | } |
| | | else |
| | | { |
| | | var ckEdit = new CheckEdit(); |
| | | ckEdit.Properties.AutoWidth = true; |
| | | ckEdit.Properties.Caption = string.Empty; |
| | | ckEdit.Checked = dict[key]; |
| | | ckEdit.CheckedChanged += (sender, e) => |
| | | { |
| | | if (_allWorkingCheckedListDict != null) |
| | | { |
| | | if (_allWorkingCheckedListDict.ContainsKey(key)) |
| | | { |
| | | _allWorkingCheckedListDict[key] = ckEdit.Checked; |
| | | } |
| | | } |
| | | this.ProjectSiteWorkingCheckedEvent?.Invoke(_project, _projectSite, null, key, ckEdit.Checked); |
| | | }; |
| | | this.accordionControl1.Controls.Add(ckEdit); |
| | | ele.HeaderControl = ckEdit; |
| | | ele.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; |
| | | ele.Text = key.Name; |
| | | ele.Hint = key.Description; |
| | | ele.Tag = key; |
| | | ele.Click += (sender, e) => |
| | | { |
| | | |
| | | }; |
| | | } |
| | | } |
| | | } |
| | | //不存在则增加 |
| | | foreach (var item in dict) |
| | | { |
| | | var ele = elements.FirstOrDefault(x => (x.Tag is HydroWorkingVmo) && (x.Tag as HydroWorkingVmo).ID == item.Key.ID); |
| | | if (ele == null) |
| | | { |
| | | //添加element |
| | | //目前不存在添加的情况 |
| | | } |
| | | } |
| | | |
| | | if (this.elementProjectSiteSimulation.Elements.Count < 1) |
| | | { |
| | | this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; |
| | | } |
| | | else |
| | | { |
| | | this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group; |
| | | } |
| | | _allWorkingCheckedListDict = dict; |
| | | } |
| | | else |
| | | { |
| | | var elementScheme = this.elementProjectSiteSchemeList.Elements |
| | | .FirstOrDefault(x => (x.Tag is XhsSchemeVmo) && (x.Tag as XhsSchemeVmo).ID == scheme.ID); |
| | | if (elementScheme == null) |
| | | { |
| | | return; |
| | | } |
| | | var elements = elementScheme.Elements.ToList(); |
| | | //存在则更新,不存在则删除 |
| | | foreach (var ele in elements) |
| | | { |
| | | var working = ele.Tag as HydroWorkingVmo; |
| | | if (working != null) |
| | | { |
| | | if (ele.HeaderControl != null) |
| | | { |
| | | this.accordionControl1.Controls.Remove(ele.HeaderControl); |
| | | } |
| | | ele.HeaderControl = null; |
| | | |
| | | var key = dict.Keys.FirstOrDefault(x => x.ID == working.ID); |
| | | if (key == null) |
| | | { |
| | | //移除element |
| | | elementScheme.Elements.Remove(ele); |
| | | } |
| | | else |
| | | { |
| | | var ckEdit = new CheckEdit(); |
| | | ckEdit.Properties.AutoWidth = true; |
| | | ckEdit.Properties.Caption = string.Empty; |
| | | ckEdit.Checked = dict[key]; |
| | | ckEdit.CheckedChanged += (sender, e) => |
| | | { |
| | | if (_allSchemeWorkingCheckedListDict != null) |
| | | { |
| | | if (_allSchemeWorkingCheckedListDict.ContainsKey(scheme)) |
| | | { |
| | | var workingCheckedDict = _allSchemeWorkingCheckedListDict[scheme]; |
| | | if (workingCheckedDict.ContainsKey(key)) |
| | | { |
| | | workingCheckedDict[key] = ckEdit.Checked; |
| | | } |
| | | } |
| | | } |
| | | this.ProjectSiteWorkingCheckedEvent?.Invoke(_project, _projectSite, scheme, key, ckEdit.Checked); |
| | | }; |
| | | this.accordionControl1.Controls.Add(ckEdit); |
| | | ele.HeaderControl = ckEdit; |
| | | ele.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; |
| | | ele.Text = key.Name; |
| | | ele.Hint = key.Description; |
| | | ele.Tag = key; |
| | | ele.Click += (sender, e) => |
| | | { |
| | | |
| | | }; |
| | | |
| | | } |
| | | } |
| | | } |
| | | //不存在增增加 |
| | | foreach (var item in dict) |
| | | { |
| | | var ele = elements.FirstOrDefault(x => (x.Tag is HydroWorkingVmo) && (x.Tag as HydroWorkingVmo).ID == item.Key.ID); |
| | | if (ele == null) |
| | | { |
| | | //添加element |
| | | //目前不存在增加的情况 |
| | | } |
| | | } |
| | | if (elementScheme.Elements.Count < 1) |
| | | { |
| | | elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; |
| | | } |
| | | else |
| | | { |
| | | elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group; |
| | | } |
| | | if (_allSchemeWorkingCheckedListDict == null) |
| | | { |
| | | _allSchemeWorkingCheckedListDict = new Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>>(); |
| | | } |
| | | var schemeKey = _allSchemeWorkingCheckedListDict.Keys.FirstOrDefault(x => x.ID == scheme.ID); |
| | | if (schemeKey == null) |
| | | { |
| | | _allSchemeWorkingCheckedListDict.Add(scheme, dict); |
| | | } |
| | | else |
| | | { |
| | | _allSchemeWorkingCheckedListDict[schemeKey] = dict; |
| | | } |
| | | } |
| | | |
| | | this.ProjectSiteWorkingReloadEvent?.Invoke(_project, _projectSite, scheme, dict); |
| | | } |
| | | |
| | | //显示信息 |
| | | private async Task ShowInfo() |
| | | { |
| | |
| | | this.ShowProjectSiteInfoEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[0]); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 保存 |
| | | /// </summary> |
| | | public async Task<Yw.Model.HydroModelInfo> SaveModel(XhsSchemeVmo scheme, Yw.Model.HydroModelInfo hydroInfo) |
| | | { |
| | | if (hydroInfo == null) |
| | | { |
| | | return default; |
| | | } |
| | | var id = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.Save(hydroInfo); |
| | | if (id < 1) |
| | | { |
| | | return default; |
| | | } |
| | | var db = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(id); |
| | | if (scheme == null) |
| | | { |
| | | _hydroInfo = db; |
| | | return _hydroInfo; |
| | | } |
| | | if (_allSchemeHydroInfoDict == null || _allSchemeHydroInfoDict.Count < 1) |
| | | { |
| | | return default; |
| | | } |
| | | var schemeKey = _allSchemeHydroInfoDict.Keys.FirstOrDefault(x => x.ID == scheme.ID); |
| | | if (schemeKey == null) |
| | | { |
| | | return default; |
| | | } |
| | | _allSchemeHydroInfoDict[schemeKey] = db; |
| | | return db; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 刷新 |
| | | /// </summary> |
| | | public async Task<Yw.Model.HydroModelInfo> RefreshModel(XhsSchemeVmo scheme) |
| | | { |
| | | return await GetHydroInfo(scheme, false); |
| | | } |
| | | |
| | | #endregion |
| | | } |