lixiaojun
2025-02-18 1f7091dac2a5dddf4a0a40acb0940d3787cf35f5
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/SimulationFunctionCtrl.cs
@@ -1,10 +1,5 @@
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
@@ -17,6 +12,8 @@
            this.layoutControl1.SetupLayoutControl();
        }
        #region 项目事件
        /// <summary>
        /// 显示项目站信息事件
        /// </summary>
@@ -25,10 +22,11 @@
        /// 显示项目站模拟事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, Yw.Model.HydroModelInfo, Dictionary<HydroWorkingVmo, bool>, SvgImage> ShowProjectSiteSimulationEvent;
        /// <summary>
        /// 项目站工况选择改变事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo, bool> ProjectSiteWorkingCheckedEvent;
        #endregion
        #region 工况事件
        /// <summary>
        /// 项目站工况增加事件
        /// </summary>
@@ -42,9 +40,22 @@
        /// </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>
@@ -57,6 +68,8 @@
        /// 项目站方案移除事件
        /// </summary>
        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo> ProjectSiteSchemeRemoveEvent;
        #endregion
        private XhsProjectVmo _project = null;//项目
        private XhsProjectSiteVmo _projectSite = null;//项目站
@@ -106,6 +119,8 @@
            });
            await ShowInfo();
            overlay.Close();
            await Task.Delay(2000);
            this.accordionControl1.ExpandAll();
        }
        //项目站概况
@@ -154,7 +169,8 @@
            {
                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]);
        }
        //右键弹出
@@ -179,6 +195,26 @@
        }
        #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>
        /// 获取水力信息
@@ -764,6 +800,194 @@
            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()
        {
@@ -783,48 +1007,7 @@
            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 HStation.BLL.XhsHydroInfo.GetByID(id);
            if (scheme == null)
            {
                // _hydroInfo = db;
                _hydroInfo = hydroInfo;
                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;
            _allSchemeHydroInfoDict[schemeKey] = hydroInfo;
            return _allSchemeHydroInfoDict[schemeKey];
        }
        /// <summary>
        /// 刷新
        /// </summary>
        public async Task<Yw.Model.HydroModelInfo> RefreshModel(XhsSchemeVmo scheme)
        {
            return await GetHydroInfo(scheme, false);
        }
        #endregion
    }