From dbcef6befb123066754141adef6dc3ef6653b6ce Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期一, 02 十二月 2024 14:34:02 +0800
Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/HStation/XHS.V1.0

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/XhsProjectSimulationFunctionCtrl.cs |  372 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 328 insertions(+), 44 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/XhsProjectSimulationFunctionCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/XhsProjectSimulationFunctionCtrl.cs
index ba9cd71..b0a80ae 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/XhsProjectSimulationFunctionCtrl.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/05-function/XhsProjectSimulationFunctionCtrl.cs
@@ -14,81 +14,286 @@
         }
 
         /// <summary>
-        /// 鏄剧ず椤圭洰淇℃伅浜嬩欢
+        /// 鏄剧ず椤圭洰绔欎俊鎭簨浠�
         /// </summary>
-        public event Action<SvgImage> ShowProjectInfoEvent;
+        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, SvgImage> ShowProjectSiteInfoEvent;
         /// <summary>
-        /// 鏄剧ず椤圭洰妯℃嫙浜嬩欢
+        /// 鏄剧ず椤圭洰绔欐ā鎷熶簨浠�
         /// </summary>
-        public event Action<SvgImage> ShowProjectSimulationEvent;
+        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, Dictionary<HydroWorkingVmo, bool>, SvgImage> ShowProjectSiteSimulationEvent;
         /// <summary>
-        /// 鍒涘缓椤圭洰鏂规浜嬩欢
+        /// 鏄剧ず椤圭洰绔欏伐鍐典簨浠�
         /// </summary>
-        public event Action<SvgImage> CreateProjectSchemeEvent;
+        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, SvgImage> ShowProjectSiteWorkingEvent;
         /// <summary>
-        /// 鏄剧ず椤圭洰鏂规浜嬩欢
+        /// 椤圭洰绔欏伐鍐甸�夋嫨鏀瑰彉浜嬩欢
         /// </summary>
-        public event Action<XhsSchemeVmo, SvgImage> ShowProjectSchemeEvent;
+        public event Action<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, HydroWorkingVmo, bool> ProjectSiteWorkingCheckedEvent;
+        /// <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<XhsProjectVmo, XhsProjectSiteVmo, Yw.Model.HydroModelInfo, SvgImage> CreateProjectSiteSchemeEvent;
+
         /// <summary>
         /// 姣斿椤圭洰宸ュ喌浜嬩欢
         /// </summary>
         public event Action<SvgImage> CompareProjectWorkingEvent;
-        /// <summary>
-        /// 鏄剧ず椤圭洰宸ュ喌浜嬩欢
-        /// </summary>
-        public event Action<HydroWorkingVmo, SvgImage> ShowProjectWorkingEvent;
 
 
         private XhsProjectVmo _project = null;//椤圭洰
         private XhsProjectSiteVmo _projectSite = null;//椤圭洰绔�
-        private List<HydroWorkingVmo> _allWorkingList = null;//鎵�鏈夊伐鍐靛垪琛�
-        private Dictionary<XhsSchemeVmo, List<HydroWorkingVmo>> _allSchemeWorkingDict = 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;//鎵�鏈夋柟妗堝伐鍐甸�夋嫨鍒楄〃瀛楀吀
 
         /// <summary>
         /// 缁戝畾鏁版嵁
         /// </summary>
-        public void SetBindingData
-            (
-                XhsProjectVmo project,
-                XhsProjectSiteVmo projectSite,
-                List<HydroWorkingVmo> allWorkingList,
-                Dictionary<XhsSchemeVmo, List<HydroWorkingVmo>> allSchemeWorkingDict
-            )
+        public async Task SetBindingData(XhsProjectVmo project)
         {
-            _project = project;
-            _projectSite = projectSite;
-            _allWorkingList = allWorkingList;
-            _allSchemeWorkingDict = allSchemeWorkingDict;
-            _allWorkingList?.ForEach(x => AppendWorking(x));
-            _allSchemeWorkingDict?.ForEach(x =>
+            if (project == null)
             {
-                AppendScheme(x.Key);
-                x.Value?.ForEach(y => AppendSchemeWorking(x.Key, y));
-            });
+                return;
+            }
+            _project = project;
+            var overlay = this.ShowOverlay();
+            _projectSite = await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_project.ID);
+            var relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
+                  .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
+            if (relation == null)
+            {
+                return;
+            }
+            var allWorkingList = await BLLFactory<Yw.BLL.HydroWorking>.Instance.GetByModelID(relation.ModelID);
+            if (allWorkingList != null && allWorkingList.Count > 0)
+            {
+                _allWorkingCheckedListDict = new Dictionary<HydroWorkingVmo, bool>();
+                foreach (var working in allWorkingList)
+                {
+                    _allWorkingCheckedListDict.Add(working, false);
+                    AppendWorking(working);
+                }
+            }
+            var allSchemeList = await BLLFactory<HStation.BLL.XhsScheme>.Instance.GetBySiteID(_projectSite.ID);
+            if (allSchemeList != null && allSchemeList.Count > 0)
+            {
+                _allSchemeWorkingCheckedListDict = new Dictionary<XhsSchemeVmo, Dictionary<HydroWorkingVmo, bool>>();
+                foreach (var scheme in allSchemeList)
+                {
+                    AppendScheme(scheme);
+                    var schemeRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
+                        .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, scheme.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)
+                        {
+                            _allSchemeWorkingCheckedListDict.Add(scheme, new Dictionary<HydroWorkingVmo, bool>());
+                            foreach (var schemeWorking in allSchemeWorkingList)
+                            {
+                                _allSchemeWorkingCheckedListDict[scheme].Add(schemeWorking, false);
+                                AppendSchemeWorking(scheme, schemeWorking);
+                            }
+                        }
+                    }
+                }
+            }
+            overlay.Close();
         }
 
+        #region 鑾峰彇姘村姏淇℃伅
+
+        /// <summary>
+        /// 鑾峰彇姘村姏淇℃伅
+        /// UseCache 鏄惁浣跨敤缂撳瓨
+        /// </summary>
+        public async Task<Yw.Model.HydroModelInfo> GetHydroInfo(bool useCache)
+        {
+            if (!useCache)
+            {
+                _hydroInfo = await GetHydroInfo();
+                if (_hydroInfo == null)
+                {
+                    return null;
+                }
+            }
+            if (_hydroInfo == null)
+            {
+                _hydroInfo = await GetHydroInfo();
+            }
+            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;
+        }
+
+        #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 (_allSchemeHydroInfoDict.ContainsKey(scheme))
+                {
+                    _allSchemeHydroInfoDict[scheme] = hydroInfo;
+                }
+                else
+                {
+                    _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)
+        {
+            if (_project == null)
+            {
+                return default;
+            }
+            if (_projectSite == null)
+            {
+                return default;
+            }
+            if (scheme == null)
+            {
+                return default;
+            }
+            var relation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
+                   .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsScheme, scheme.ID, HStation.Xhs.Purpose.Simulation);
+            if (relation == null)
+            {
+                return default;
+            }
+            var hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(relation.ModelID);
+            return hydroInfo;
+        }
+
+        #endregion
 
         /// <summary>
         /// 娣诲姞宸ュ喌
         /// </summary>
         public void AppendWorking(Yw.Vmo.HydroWorkingVmo working)
         {
+            if (_project == null)
+            {
+                return;
+            }
+            if (_projectSite == null)
+            {
+                return;
+            }
             if (working == null)
             {
                 return;
             }
-            this.elementSimulation.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
+            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.Tag = working;
-            elementWorking.Click += (sender, e) => this.ShowProjectWorkingEvent?.Invoke(working, svgImg32[4]);
-            this.elementSimulation.Elements.Add(elementWorking);
+            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>
@@ -106,7 +311,31 @@
             elementScheme.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
             elementScheme.ImageOptions.ImageIndex = 3;
             elementScheme.Tag = scheme;
-            elementScheme.Click += (sender, e) => this.ShowProjectSchemeEvent?.Invoke(scheme, svgImg32[3]);
+            elementScheme.Click += async (sender, e) =>
+            {
+                if (_project == null)
+                {
+                    return;
+                }
+                if (_projectSite == null)
+                {
+                    return;
+                }
+                var hydroInfo = await GetSchemeHydroInfo(scheme);
+                if (hydroInfo == null)
+                {
+                    return;
+                }
+                Dictionary<HydroWorkingVmo, bool> dict = null;
+                if (_allSchemeWorkingCheckedListDict != null)
+                {
+                    if (_allSchemeWorkingCheckedListDict.ContainsKey(scheme))
+                    {
+                        dict = _allSchemeWorkingCheckedListDict[scheme];
+                    }
+                }
+                this.ShowProjectSiteSchemeEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, dict, this.svgImg32[3]);
+            };
             this.elementSchemeList.Elements.Add(elementScheme);
         }
 
@@ -115,6 +344,14 @@
         /// </summary>
         public void AppendSchemeWorking(XhsSchemeVmo scheme, Yw.Vmo.HydroWorkingVmo working)
         {
+            if (_project == null)
+            {
+                return;
+            }
+            if (_projectSite == null)
+            {
+                return;
+            }
             if (scheme == null)
             {
                 return;
@@ -132,13 +369,21 @@
             var ckEdit = new CheckEdit();
             ckEdit.Properties.AutoWidth = true;
             ckEdit.Properties.Caption = string.Empty;
+            ckEdit.CheckedChanged += (sender, e) =>
+            {
+                this.ProjectSiteSchemeWorkingCheckedEvent?.Invoke(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.Tag = working;
-            elementWorking.Click += (sender, e) => this.ShowProjectWorkingEvent?.Invoke(working, svgImg32[4]);
+            elementWorking.Click += async (sender, e) =>
+            {
+                var hydroInfo = await GetSchemeHydroInfo(scheme, true);
+                this.ShowProjectSiteSchemeWorkingEvent?.Invoke(_project, _projectSite, scheme, hydroInfo, working, this.svgImg32[4]);
+            };
             elementScheme.Elements.Add(elementWorking);
         }
 
@@ -148,22 +393,61 @@
 
         }
 
-        //椤圭洰姒傚喌
-        private void elementInfo_Click(object sender, EventArgs e)
+        //椤圭洰绔欐鍐�
+        private async void elementProjectSiteInfo_Click(object sender, EventArgs e)
         {
-            this.ShowProjectInfoEvent?.Invoke(this.svgImg32[0]);
+            if (_project == null)
+            {
+                return;
+            }
+            if (_projectSite == null)
+            {
+                return;
+            }
+            var hydroInfo = await GetHydroInfo(true);
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            this.ShowProjectSiteInfoEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[0]);
         }
 
-        //姘村姏妯℃嫙
-        private void elementSimulation_Click(object sender, EventArgs e)
+        //椤圭洰绔欐按鍔涙ā鎷�
+        private async void elementProjectSiteSimulation_Click(object sender, EventArgs e)
         {
-            this.ShowProjectSimulationEvent?.Invoke(this.svgImg32[1]);
+            if (_project == null)
+            {
+                return;
+            }
+            if (_projectSite == null)
+            {
+                return;
+            }
+            var hydroInfo = await GetHydroInfo(true);
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            this.ShowProjectSiteSimulationEvent?.Invoke(_project, _projectSite, hydroInfo, _allWorkingCheckedListDict, this.svgImg32[1]);
         }
 
-        //鍒涘缓鏂规
-        private void btnCreateScheme_Click(object sender, EventArgs e)
+        //鍒涘缓椤圭洰绔欐柟妗�
+        private async void btnCreateProjectSiteScheme_Click(object sender, EventArgs e)
         {
-            this.CreateProjectSchemeEvent?.Invoke(this.svgImg32[3]);
+            if (_project == null)
+            {
+                return;
+            }
+            if (_projectSite == null)
+            {
+                return;
+            }
+            var hydroInfo = await GetHydroInfo(true);
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            this.CreateProjectSiteSchemeEvent?.Invoke(_project, _projectSite, hydroInfo, this.svgImg32[3]);
         }
 
         //宸ュ喌瀵规瘮

--
Gitblit v1.9.3