lixiaojun
2024-12-30 9242291f2a1d7c7186f502d451f77f601af194d0
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/SimulationFunctionCtrl.cs
@@ -1,6 +1,9 @@
using DevExpress.Utils.Extensions;
using DevExpress.CodeParser;
using DevExpress.DataAccess.Native;
using DevExpress.Utils.Extensions;
using DevExpress.Utils.Svg;
using DevExpress.XtraCharts;
using System.Collections.Concurrent;
using Yw.DAL.Basic;
using Yw.Vmo;
@@ -22,10 +25,6 @@
        /// 显示项目站模拟事件
        /// </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>
@@ -65,6 +64,7 @@
        private Dictionary<HydroWorkingVmo, bool> _allWorkingCheckedListDict = null;//所有工况选择列表字典
        private Dictionary<XhsSchemeVmo, Yw.Model.HydroModelInfo> _allSchemeHydroInfoDict = null;//所有方案水力信息列表
        private Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>> _allSchemeWorkingCheckedListDict = null;//所有方案工况选择列表字典
        private ConcurrentDictionary<string, bool> _gettingHydroInfoDict = new ConcurrentDictionary<string, bool>();//获取水力信息字典
        /// <summary>
        /// 绑定数据
@@ -157,6 +157,7 @@
            this.CreateProjectSiteSchemeEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[3]);
        }
        //右键弹出
        private void accordionControl1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
@@ -165,11 +166,13 @@
            }
        }
        //全部折叠
        private void barBtnCollpseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.accordionControl1.CollapseAll();
        }
        //全部展开
        private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.accordionControl1.ExpandAll();
@@ -186,7 +189,10 @@
            Yw.Model.HydroModelInfo hydroInfo = null;
            if (!useCache)
            {
                hydroInfo = await GetHydroInfo(scheme);
                if (hydroInfo == null)
                {
                    hydroInfo = await GetHydroInfo(scheme);
                }
                if (hydroInfo == null)
                {
                    return default;
@@ -199,7 +205,15 @@
                {
                    if (_hydroInfo == null)
                    {
                        _hydroInfo = await GetHydroInfo(null);
                        hydroInfo = await GetHydroInfo(null);
                        if (hydroInfo == null)
                        {
                            return default;
                        }
                        if (_hydroInfo == null)
                        {
                            _hydroInfo = hydroInfo;
                        }
                    }
                    return _hydroInfo;
                }
@@ -217,9 +231,16 @@
                if (!_allSchemeHydroInfoDict.ContainsKey(scheme))
                {
                    hydroInfo = await GetHydroInfo(scheme);
                    _allSchemeHydroInfoDict.Add(scheme, hydroInfo);
                    return hydroInfo;
                    if (hydroInfo == null)
                    {
                        return default;
                    }
                    if (!_allSchemeHydroInfoDict.ContainsKey(scheme))
                    {
                        _allSchemeHydroInfoDict.Add(scheme, hydroInfo);
                    }
                }
                return _allSchemeHydroInfoDict[scheme];
            }
            if (_allSchemeHydroInfoDict.ContainsKey(scheme))
@@ -231,7 +252,7 @@
                _allSchemeHydroInfoDict.Add(scheme, hydroInfo);
            }
            return hydroInfo;
            return _allSchemeHydroInfoDict[scheme];
        }
        //获取水力信息
@@ -244,6 +265,21 @@
            if (_projectSite == null)
            {
                return default;
            }
            string key = $"{_project.ID}-{_projectSite.ID}-{scheme?.ID}";
            if (_gettingHydroInfoDict.TryGetValue(key, out bool getting))
            {
                if (getting)
                {
                    return default;
                }
            }
            WaitFormHelper.ShowWaitForm(this.FindForm(), "正在加载模型数据,请稍后...");
            //var overlay = this.ShowOverlay();
            if (!_gettingHydroInfoDict.TryAdd(key, true))
            {
                _gettingHydroInfoDict[key] = true;
            }
            HydroModelRelationVmo relation = null;
@@ -262,6 +298,9 @@
                return default;
            }
            var hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(relation.ModelID);
            _gettingHydroInfoDict[key] = false;
            //overlay.Close();
            WaitFormHelper.HideWaitForm();
            return hydroInfo;
        }
@@ -481,10 +520,9 @@
                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);
                    this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, null, hydroInfo, working, this.svgImg32[4]);
                };
                this.elementProjectSiteSimulation.Elements.Add(elementWorking);
                this.elementProjectSiteSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
@@ -531,10 +569,9 @@
                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);
                    this.ShowProjectSiteWorkingEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, working, this.svgImg32[4]);
                };
                elementScheme.Elements.Add(elementWorking);
                elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
@@ -760,10 +797,11 @@
            {
                return default;
            }
            var db = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(id);
            //var db = await HStation.BLL.XhsHydroInfo.GetByID(id);
            if (scheme == null)
            {
                _hydroInfo = db;
                // _hydroInfo = db;
                _hydroInfo = hydroInfo;
                return _hydroInfo;
            }
            if (_allSchemeHydroInfoDict == null || _allSchemeHydroInfoDict.Count < 1)
@@ -775,8 +813,9 @@
            {
                return default;
            }
            _allSchemeHydroInfoDict[schemeKey] = db;
            return db;
            //_allSchemeHydroInfoDict[schemeKey] = db;
            _allSchemeHydroInfoDict[schemeKey] = hydroInfo;
            return _allSchemeHydroInfoDict[schemeKey];
        }
        /// <summary>