From 1f7091dac2a5dddf4a0a40acb0940d3787cf35f5 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期二, 18 二月 2025 14:05:47 +0800
Subject: [PATCH] 损失统计整理

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/SimulationFunctionCtrl.cs |  330 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 268 insertions(+), 62 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/SimulationFunctionCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/SimulationFunctionCtrl.cs
index 82cb9c5..8c1810e 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/SimulationFunctionCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/SimulationFunctionCtrl.cs
@@ -1,9 +1,5 @@
-锘縰sing DevExpress.CodeParser;
-using DevExpress.DataAccess.Native;
-using DevExpress.Utils.Extensions;
-using DevExpress.Utils.Svg;
-using DevExpress.XtraCharts;
-using Yw.DAL.Basic;
+锘縰sing DevExpress.Utils.Svg;
+using System.Collections.Concurrent;
 using Yw.Vmo;
 
 namespace HStation.WinFrmUI
@@ -16,6 +12,8 @@
             this.layoutControl1.SetupLayoutControl();
         }
 
+        #region 椤圭洰浜嬩欢
+
         /// <summary>
         /// 鏄剧ず椤圭洰绔欎俊鎭簨浠�
         /// </summary>
@@ -24,14 +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, Yw.Model.HydroModelInfo, HydroWorkingVmo, SvgImage> ShowProjectSiteWorkingEvent;
-        /// <summary>
-        /// 椤圭洰绔欏伐鍐甸�夋嫨鏀瑰彉浜嬩欢
-        /// </summary>
-        public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo, HydroWorkingVmo, bool> ProjectSiteWorkingCheckedEvent;
+
+        #endregion
+
+        #region 宸ュ喌浜嬩欢
+
         /// <summary>
         /// 椤圭洰绔欏伐鍐靛鍔犱簨浠�
         /// </summary>
@@ -45,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>
@@ -61,13 +69,15 @@
         /// </summary>
         public event Action<XhsProjectVmo, XhsProjectSiteVmo, XhsSchemeVmo> ProjectSiteSchemeRemoveEvent;
 
+        #endregion
+
         private XhsProjectVmo _project = null;//椤圭洰
         private XhsProjectSiteVmo _projectSite = null;//椤圭洰绔�
         private Yw.Model.HydroModelInfo _hydroInfo = null;//妯″瀷淇℃伅
         private Dictionary<HydroWorkingVmo, bool> _allWorkingCheckedListDict = null;//鎵�鏈夊伐鍐甸�夋嫨鍒楄〃瀛楀吀
         private Dictionary<XhsSchemeVmo, Yw.Model.HydroModelInfo> _allSchemeHydroInfoDict = null;//鎵�鏈夋柟妗堟按鍔涗俊鎭垪琛�
         private Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>> _allSchemeWorkingCheckedListDict = null;//鎵�鏈夋柟妗堝伐鍐甸�夋嫨鍒楄〃瀛楀吀
-        private readonly object _locker = new();//閿佸畾瀵硅薄
+        private ConcurrentDictionary<string, bool> _gettingHydroInfoDict = new ConcurrentDictionary<string, bool>();//鑾峰彇姘村姏淇℃伅瀛楀吀
 
         /// <summary>
         /// 缁戝畾鏁版嵁
@@ -109,6 +119,8 @@
             });
             await ShowInfo();
             overlay.Close();
+            await Task.Delay(2000);
+            this.accordionControl1.ExpandAll();
         }
 
         //椤圭洰绔欐鍐�
@@ -157,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]);
         }
 
         //鍙抽敭寮瑰嚭
@@ -182,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>
         /// 鑾峰彇姘村姏淇℃伅
@@ -209,6 +242,10 @@
                     if (_hydroInfo == null)
                     {
                         hydroInfo = await GetHydroInfo(null);
+                        if (hydroInfo == null)
+                        {
+                            return default;
+                        }
                         if (_hydroInfo == null)
                         {
                             _hydroInfo = hydroInfo;
@@ -230,6 +267,10 @@
                 if (!_allSchemeHydroInfoDict.ContainsKey(scheme))
                 {
                     hydroInfo = await GetHydroInfo(scheme);
+                    if (hydroInfo == null)
+                    {
+                        return default;
+                    }
                     if (!_allSchemeHydroInfoDict.ContainsKey(scheme))
                     {
                         _allSchemeHydroInfoDict.Add(scheme, hydroInfo);
@@ -261,6 +302,21 @@
             {
                 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(), "姝e湪鍔犺浇妯″瀷鏁版嵁锛岃绋嶅悗...");
+            //var overlay = this.ShowOverlay();
+            if (!_gettingHydroInfoDict.TryAdd(key, true))
+            {
+                _gettingHydroInfoDict[key] = true;
+            }
 
             HydroModelRelationVmo relation = null;
             if (scheme == null)
@@ -278,6 +334,9 @@
                 return default;
             }
             var hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(relation.ModelID);
+            _gettingHydroInfoDict[key] = false;
+            //overlay.Close();
+            WaitFormHelper.HideWaitForm();
             return hydroInfo;
         }
 
@@ -497,10 +556,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;
@@ -547,10 +605,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;
@@ -743,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()
         {
@@ -762,46 +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 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
     }

--
Gitblit v1.9.3