lixiaojun
2024-12-09 4607e20cecf567ee2e86f9a07158deaa1b74d622
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/SimulationFunctionCtrl.cs
@@ -20,56 +20,27 @@
        /// <summary>
        /// 显示项目站模拟事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, Dictionary<HydroWorkingVmo, bool>, SvgImage> ShowProjectSiteSimulationEvent;
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, Dictionary<HydroWorkingVmo, bool>, SvgImage> ShowProjectSiteSimulationEvent;
        /// <summary>
        /// 显示项目站工况事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, SvgImage> ShowProjectSiteWorkingEvent;
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, SvgImage> ShowProjectSiteWorkingEvent;
        /// <summary>
        /// 项目站工况选择改变事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, bool> ProjectSiteWorkingCheckedEvent;
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo, bool> ProjectSiteWorkingCheckedEvent;
        /// <summary>
        /// 项目站工况更新事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo> ProjectSiteWorkingUpdateEvent;
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo> ProjectSiteWorkingUpdateEvent;
        /// <summary>
        /// 项目站工况移除事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo> ProjectSiteWorkingRemoveEvent;
        /// <summary>
        /// 显示项目站方案事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, Dictionary<HydroWorkingVmo, bool>, SvgImage> ShowProjectSiteSchemeEvent;
        /// <summary>
        /// 显示项目站方案工况事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, SvgImage> ShowProjectSiteSchemeWorkingEvent;
        /// <summary>
        /// 项目站方案工况选择工况事件
        /// </summary>
        public event Action<XhsSchemeVmo, HydroWorkingVmo, bool> ProjectSiteSchemeWorkingCheckedEvent;
        /// <summary>
        /// 项目站方案工况更新事件
        /// </summary>
        public event Action<XhsSchemeVmo, HydroWorkingVmo> ProjectSiteSchemeWorkingUpdateEvent;
        /// <summary>
        /// 项目站方案工况移除事件
        /// </summary>
        public event Action<XhsSchemeVmo, HydroWorkingVmo> ProjectSiteSchemeWorkingRemoveEvent;
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo> ProjectSiteWorkingRemoveEvent;
        /// <summary>
        /// 创建项目站方案事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, SvgImage> CreateProjectSiteSchemeEvent;
        /// <summary>
        /// 比对项目工况事件
        /// </summary>
        public event Action<SvgImage> CompareProjectWorkingEvent;
        private XhsProjectVmo _project = null;//项目
        private XhsProjectSiteVmo _projectSite = null;//项目站
@@ -97,119 +68,75 @@
                return;
            }
            var allWorkingList = await BLLFactory<Yw.BLL.HydroWorking>.Instance.GetByModelID(relation.ModelID);
            if (allWorkingList != null && allWorkingList.Count > 0)
            allWorkingList?.ForEach(x =>
            {
                _allWorkingCheckedListDict = new Dictionary<HydroWorkingVmo, bool>();
                foreach (var working in allWorkingList)
                {
                    _allWorkingCheckedListDict.Add(working, false);
                    AppendWorking(working);
                }
            }
                AppendWorking(null, x);
            });
            var allSchemeList = await BLLFactory<HStation.BLL.XhsScheme>.Instance.GetBySiteID(_projectSite.ID);
            if (allSchemeList != null && allSchemeList.Count > 0)
            allSchemeList?.ForEach(async x =>
            {
                _allSchemeWorkingCheckedListDict = new Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>>();
                foreach (var scheme in allSchemeList)
                {
                    AppendScheme(scheme);
                AppendScheme(x);
                    var schemeRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
                        .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, scheme.ID, HStation.Xhs.Purpose.Simulation);
                        .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, x.ID, HStation.Xhs.Purpose.Simulation);
                    if (schemeRelation != null)
                    {
                        var allSchemeWorkingList = await BLLFactory<Yw.BLL.HydroWorking>.Instance.GetByModelID(schemeRelation.ModelID);
                        if (allSchemeWorkingList != null && allSchemeWorkingList.Count > 0)
                    allSchemeWorkingList?.ForEach(y =>
                        {
                            _allSchemeWorkingCheckedListDict.Add(scheme, new Dictionary<HydroWorkingVmo, bool>());
                            foreach (var schemeWorking in allSchemeWorkingList)
                            {
                                _allSchemeWorkingCheckedListDict[scheme].Add(schemeWorking, false);
                                AppendSchemeWorking(scheme, schemeWorking);
                        AppendWorking(x, y);
                    });
                            }
                        }
                    }
                }
            }
            });
            overlay.Close();
        }
        #region 获取水力信息
        #region 通用方法
        /// <summary>
        /// 获取水力信息
        /// UseCache 是否使用缓存
        /// </summary>
        public async Task<Yw.Model.HydroModelInfo> GetHydroInfo(bool useCache)
        public async Task<Yw.Model.HydroModelInfo> GetHydroInfo(XhsSchemeVmo scheme, bool useCache)
        {
            Yw.Model.HydroModelInfo hydroInfo = null;
            if (!useCache)
            {
                _hydroInfo = await GetHydroInfo();
                if (_hydroInfo == null)
                hydroInfo = await GetHydroInfo(scheme);
                if (hydroInfo == null)
                {
                    return null;
                    return default;
                }
            }
            if (scheme == null)
            {
                if (hydroInfo == null)
                {
            if (_hydroInfo == null)
            {
                _hydroInfo = await GetHydroInfo();
                        _hydroInfo = await GetHydroInfo(null);
            }
            return _hydroInfo;
        }
        //获取水力信息
        private async Task<Yw.Model.HydroModelInfo> GetHydroInfo()
        {
            if (_project == null)
            {
                return default;
            }
            if (_projectSite == null)
            {
                return default;
            }
            var relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
                .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
            if (relation == null)
            {
                return null;
            }
            var hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(relation.ModelID);
            return hydroInfo;
                _hydroInfo = hydroInfo;
                return _hydroInfo;
        }
        #endregion
        #region 获取方案水力信息
        /// <summary>
        /// 获取方案水力信息
        /// UseCache 是否使用缓存
        /// </summary>
        public async Task<Yw.Model.HydroModelInfo> 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<XhsSchemeVmo, Yw.Model.HydroModelInfo>();
                }
            if (hydroInfo == null)
            {
                if (!_allSchemeHydroInfoDict.ContainsKey(scheme))
                {
                    hydroInfo = await GetHydroInfo(scheme);
                    _allSchemeHydroInfoDict.Add(scheme, hydroInfo);
                    return hydroInfo;
                }
            }
                if (_allSchemeHydroInfoDict.ContainsKey(scheme))
                {
                    _allSchemeHydroInfoDict[scheme] = hydroInfo;
@@ -218,23 +145,12 @@
                {
                    _allSchemeHydroInfoDict.Add(scheme, hydroInfo);
                }
                return hydroInfo;
            }
            if (_allSchemeHydroInfoDict == null)
            {
                _allSchemeHydroInfoDict = new Dictionary<XhsSchemeVmo, Yw.Model.HydroModelInfo>();
            }
            if (!_allSchemeHydroInfoDict.ContainsKey(scheme))
            {
                var hydroInfo = await GetSchemeHydroInfo(scheme);
                _allSchemeHydroInfoDict.Add(scheme, hydroInfo);
                return hydroInfo;
            }
            return _allSchemeHydroInfoDict[scheme];
        }
        //获取方案水力信息
        private async Task<Yw.Model.HydroModelInfo> GetSchemeHydroInfo(XhsSchemeVmo scheme)
        //获取水力信息
        private async Task<Yw.Model.HydroModelInfo> GetHydroInfo(XhsSchemeVmo scheme)
        {
            if (_project == null)
            {
@@ -244,12 +160,18 @@
            {
                return default;
            }
            HydroModelRelationVmo relation = null;
            if (scheme == null)
            {
                return default;
                relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
                    .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
            }
            var relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
            else
            {
                relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
                   .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, scheme.ID, HStation.Xhs.Purpose.Simulation);
            }
            if (relation == null)
            {
                return default;
@@ -258,153 +180,11 @@
            return hydroInfo;
        }
        #endregion
        #region 项目站工况方法
        /// <summary>
        /// 添加工况
        /// 纯添加,不会触发事件
        /// </summary>
        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<HydroWorkingVmo, bool>();
                }
                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);
        }
        /// <summary>
        /// 更新工况
        /// 更新,会触发更新事件
        /// </summary>
        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);
        }
        /// <summary>
        /// 移除工况
        /// 移除,会触发移除事件
        /// </summary>
        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 项目站方案
        /// <summary>
        /// 添加方案
        /// </summary>
        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;
@@ -413,7 +193,20 @@
                {
                    return;
                }
                var hydroInfo = await GetSchemeHydroInfo(scheme);
            if (scheme == null)
            {
                return;
            }
            var elementScheme = new DevExpress.XtraBars.Navigation.AccordionControlElement();
            elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
            elementScheme.Text = scheme.Name;
            elementScheme.Hint = scheme.Description;
            elementScheme.Tag = scheme;
            elementScheme.ImageOptions.ImageIndex = 3;
            elementScheme.Click += async (sender, e) =>
            {
                var hydroInfo = await GetHydroInfo(scheme, true);
                if (hydroInfo == null)
                {
                    return;
@@ -426,19 +219,29 @@
                        dict = _allSchemeWorkingCheckedListDict[scheme];
                    }
                }
                this.ShowProjectSiteSchemeEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, dict, this.svgImg32[3]);
                this.ShowProjectSiteSimulationEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, dict, this.svgImg32[3]);
            };
            this.elementSchemeList.Elements.Add(elementScheme);
            this.elementProjectSiteSchemeList.Elements.Add(elementScheme);
            this.elementProjectSiteSchemeList.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
            if (_allSchemeHydroInfoDict == null)
            {
                _allSchemeHydroInfoDict = new Dictionary<XhsSchemeVmo, Yw.Model.HydroModelInfo>();
            }
            if (_allSchemeWorkingCheckedListDict == null)
            {
                _allSchemeWorkingCheckedListDict = new Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>>();
            }
            if (!_allSchemeWorkingCheckedListDict.ContainsKey(scheme))
            {
                _allSchemeWorkingCheckedListDict.Add(scheme, new Dictionary<HydroWorkingVmo, bool>());
            }
        }
        #endregion
        #region 项目站方案工况
        /// <summary>
        /// 添加方案工况
        /// 添加工况
        /// 纯添加,不会触发事件
        /// </summary>
        public void AppendSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
        public void AppendWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
        {
            if (_project == null)
            {
@@ -448,26 +251,26 @@
            {
                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)
            if (scheme == null)
            {
                return;
            }
            elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
            var ckEdit = new CheckEdit();
            ckEdit.Properties.AutoWidth = true;
            ckEdit.Properties.Caption = string.Empty;
                ckEdit.Checked = false;
            ckEdit.CheckedChanged += (sender, e) =>
            {
                this.ProjectSiteSchemeWorkingCheckedEvent?.Invoke(scheme, working, ckEdit.Checked);
                    if (_allWorkingCheckedListDict != null)
                    {
                        if (_allWorkingCheckedListDict.ContainsKey(working))
                        {
                            _allWorkingCheckedListDict[working] = ckEdit.Checked;
                        }
                    }
                    this.ProjectSiteWorkingCheckedEvent?.Invoke(_project, _projectSite, null, working, ckEdit.Checked);
            };
            this.accordionControl1.Controls.Add(ckEdit);
            var elementWorking = new DevExpress.XtraBars.Navigation.AccordionControlElement();
@@ -478,17 +281,84 @@
            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]);
                    var hydroInfo = await GetHydroInfo(null, true);
                    this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, null, hydroInfo, working, this.svgImg32[4]);
                };
                this.elementProjectSiteSimulation.Elements.Add(elementWorking);
                this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
                if (_allWorkingCheckedListDict == null)
                {
                    _allWorkingCheckedListDict = new Dictionary<HydroWorkingVmo, bool>();
                }
                if (!_allWorkingCheckedListDict.ContainsKey(working))
                {
                    _allWorkingCheckedListDict.Add(working, false);
                }
            }
            else
            {
                var elementScheme = this.elementProjectSiteSchemeList.Elements
                    .FirstOrDefault(x => (x.Tag is XhsSchemeVmo) && (x.Tag as XhsSchemeVmo).ID == scheme.ID);
                if (elementScheme == null)
                {
                    return;
                }
                var ckEdit = new CheckEdit();
                ckEdit.Properties.AutoWidth = true;
                ckEdit.Properties.Caption = string.Empty;
                ckEdit.Checked = false;
                ckEdit.CheckedChanged += (sender, e) =>
                {
                    if (_allSchemeWorkingCheckedListDict != null)
                    {
                        if (_allSchemeWorkingCheckedListDict.ContainsKey(scheme))
                        {
                            var workingCheckedDict = _allSchemeWorkingCheckedListDict[scheme];
                            if (workingCheckedDict.ContainsKey(working))
                            {
                                workingCheckedDict[working] = ckEdit.Checked;
                            }
                        }
                    }
                    this.ProjectSiteWorkingCheckedEvent?.Invoke(_project, _projectSite, 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.Hint = working.Description;
                elementWorking.Tag = working;
                elementWorking.Click += async (sender, e) =>
                {
                    var hydroInfo = await GetHydroInfo(scheme, true);
                    this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, working, this.svgImg32[4]);
            };
            elementScheme.Elements.Add(elementWorking);
                elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
                if (_allSchemeWorkingCheckedListDict == null)
                {
                    _allSchemeWorkingCheckedListDict = new Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>>();
                }
                if (_allSchemeWorkingCheckedListDict.ContainsKey(scheme))
                {
                    var workingCheckedDict = _allSchemeWorkingCheckedListDict[scheme];
                    if (workingCheckedDict != null)
                    {
                        if (!workingCheckedDict.ContainsKey(working))
                        {
                            workingCheckedDict.Add(working, false);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// 更新方案工况
        /// 更新工况
        /// 更新,会触发更新事件
        /// </summary>
        public void UpdateSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
        public void UpdateWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
        {
            if (_project == null)
            {
@@ -498,15 +368,37 @@
            {
                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 (scheme == null)
            {
                var element = this.elementProjectSiteSimulation.Elements.
                         Where(x => (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;
                if (_allWorkingCheckedListDict != null)
                {
                    var key = _allWorkingCheckedListDict.Keys.FirstOrDefault(x => x.ID == working.ID);
                    if (key != null)
                    {
                        var hasChecked = _allWorkingCheckedListDict[key];
                        _allWorkingCheckedListDict.Remove(key);
                        _allWorkingCheckedListDict.Add(key, hasChecked);
                    }
                }
            }
            else
            {
                var elementScheme = this.elementProjectSiteSchemeList.Elements
                    .FirstOrDefault(x => (x.Tag is XhsSchemeVmo) && (x.Tag as XhsSchemeVmo).ID == scheme.ID);
            if (elementScheme == null)
            {
                return;
@@ -520,13 +412,34 @@
            element.Tag = working;
            element.Text = working.Name;
            element.Hint = working.Description;
            this.ProjectSiteSchemeWorkingUpdateEvent?.Invoke(scheme, working);
                if (_allSchemeWorkingCheckedListDict != null)
                {
                    var schemeKey = _allSchemeWorkingCheckedListDict.Keys.FirstOrDefault(x => x.ID == scheme.ID);
                    if (schemeKey != null)
                    {
                        var workingCheckedDict = _allSchemeWorkingCheckedListDict[schemeKey];
                        if (workingCheckedDict != null)
                        {
                            var workingKey = workingCheckedDict.Keys.FirstOrDefault(x => x.ID == working.ID);
                            if (workingKey != null)
                            {
                                var hasChecked = workingCheckedDict[workingKey];
                                workingCheckedDict.Remove(workingKey);
                                workingCheckedDict.Add(working, hasChecked);
                            }
                        }
                    }
                }
            }
            this.ProjectSiteWorkingUpdateEvent?.Invoke(_project, _projectSite, scheme, working);
        }
        /// <summary>
        /// 移除方案工况
        /// 移除工况
        /// 移除,会触发移除事件
        /// </summary>
        public void RemoveSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
        public void RemoveWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
        {
            if (_project == null)
            {
@@ -536,15 +449,40 @@
            {
                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 (scheme == null)
            {
                var element = this.elementProjectSiteSimulation.Elements.
                        Where(x => (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;
                }
                if (_allWorkingCheckedListDict != null)
                {
                    var key = _allWorkingCheckedListDict.Keys.FirstOrDefault(x => x.ID == working.ID);
                    if (key != null)
                    {
                        _allWorkingCheckedListDict.Remove(key);
                    }
                }
            }
            else
            {
                var elementScheme = this.elementProjectSiteSchemeList.Elements
                    .FirstOrDefault(x => (x.Tag is XhsSchemeVmo) && (x.Tag as XhsSchemeVmo).ID == scheme.ID);
            if (elementScheme == null)
            {
                return;
@@ -564,18 +502,28 @@
            {
                elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
            }
            this.ProjectSiteSchemeWorkingRemoveEvent?.Invoke(scheme, working);
                if (_allSchemeWorkingCheckedListDict != null)
                {
                    var schemeKey = _allSchemeWorkingCheckedListDict.Keys.FirstOrDefault(x => x.ID == scheme.ID);
                    if (schemeKey != null)
                    {
                        var workingCheckedDict = _allSchemeWorkingCheckedListDict[schemeKey];
                        if (workingCheckedDict != null)
                        {
                            var workingKey = workingCheckedDict.Keys.FirstOrDefault(x => x.ID == working.ID);
                            if (workingKey != null)
                            {
                                workingCheckedDict.Remove(workingKey);
                            }
                        }
                    }
                }
        }
            this.ProjectSiteWorkingRemoveEvent?.Invoke(_project, _projectSite, scheme, working);
        }
        #endregion
        //元素点击事件
        private void accordionControl1_ElementClick(object sender, DevExpress.XtraBars.Navigation.ElementClickEventArgs e)
        {
        }
        //项目站概况
        private async void elementProjectSiteInfo_Click(object sender, EventArgs e)
@@ -588,7 +536,7 @@
            {
                return;
            }
            var hydroInfo = await GetHydroInfo(true);
            var hydroInfo = await GetHydroInfo(null, true);
            if (hydroInfo == null)
            {
                return;
@@ -607,16 +555,16 @@
            {
                return;
            }
            var hydroInfo = await GetHydroInfo(true);
            var hydroInfo = await GetHydroInfo(null, true);
            if (hydroInfo == null)
            {
                return;
            }
            this.ShowProjectSiteSimulationEvent?.Invoke(_project, _projectSite, hydroInfo, _allWorkingCheckedListDict, this.svgImg32[1]);
            this.ShowProjectSiteSimulationEvent?.Invoke(_project, _projectSite, null, hydroInfo, _allWorkingCheckedListDict, this.svgImg32[1]);
        }
        //创建项目站方案
        private async void btnCreateProjectSiteScheme_Click(object sender, EventArgs e)
        private async void accordionControl1_ContextButtonClick(object sender, DevExpress.Utils.ContextItemClickEventArgs e)
        {
            if (_project == null)
            {
@@ -626,7 +574,12 @@
            {
                return;
            }
            var hydroInfo = await GetHydroInfo(true);
            var element = e.DataItem as DevExpress.XtraBars.Navigation.AccordionControlElement;
            if (element != this.elementProjectSiteSchemeList)
            {
                return;
            }
            var hydroInfo = await GetHydroInfo(null, true);
            if (hydroInfo == null)
            {
                return;
@@ -634,11 +587,7 @@
            this.CreateProjectSiteSchemeEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[3]);
        }
        //工况对比
        private void btnCompareWorking_Click(object sender, EventArgs e)
        {
            this.CompareProjectWorkingEvent?.Invoke(this.svgImg32[5]);
        }
    }