lixiaojun
2024-12-06 046df0f7526575cfb8b4b8c045d864c498b5a46c
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/XhsProjectSimulationMgrPage.cs
@@ -1,6 +1,8 @@
using DevExpress.XtraBars.Docking;
using DevExpress.Drawing;
using DevExpress.Utils.Svg;
using DevExpress.XtraBars.Docking;
using DevExpress.XtraBars.Docking2010.Views;
using HStation.Vmo;
using Yw.Vmo;
using Yw.WinFrmUI.Page;
namespace HStation.WinFrmUI
@@ -13,18 +15,35 @@
            this.PageTitle.Caption = "水力模拟";
            this.PageTitle.HeaderSvgImage = this.svgImg32[0];
            this.PageTitle.SvgImageSize = new Size(24, 24);
            this.xhsProjectSimulationSchemeMgrCtrl1.ProjectSiteSelectedChangedEvent += XhsProjectSimulationSchemeMgrCtrl1_ProjectSiteSelectedChangedEvent;
            this.xhsProjectSimulationFunctionMgrCtrl1.ShowXhsProjectInfoEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowXhsProjectInfoEvent;
            this.xhsProjectSimulationFunctionMgrCtrl1.ShowXhsProjectSimulationEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowXhsProjectSimulationEvent;
            this.xhsProjectSimulationFunctionMgrCtrl1.CreateXhsProjectSchemeEvent += XhsProjectSimulationFunctionMgrCtrl1_CreateXhsProjectSchemeEvent;
            this.xhsProjectSimulationFunctionMgrCtrl1.CompareXhsProjectSchemeEvent += XhsProjectSimulationFunctionMgrCtrl1_CompareXhsProjectSchemeEvent;
            this.simulationFunctionMgrCtrl1.ShowProjectSiteInfoEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteInfoEvent;
            this.simulationFunctionMgrCtrl1.ShowProjectSiteSimulationEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteSimulationEvent;
            this.simulationFunctionMgrCtrl1.ShowProjectSiteWorkingEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteWorkingEvent;
            this.simulationFunctionMgrCtrl1.ProjectSiteWorkingUpdateEvent += XhsProjectSimulationFunctionMgrCtrl1_ProjectSiteWorkingUpdateEvent;
            this.simulationFunctionMgrCtrl1.ProjectSiteWorkingRemoveEvent += XhsProjectSimulationFunctionMgrCtrl1_ProjectSiteWorkingRemoveEvent;
            this.simulationFunctionMgrCtrl1.ProjectSiteWorkingCheckedEvent += XhsProjectSimulationFunctionMgrCtrl1_ProjectSiteWorkingCheckedEvent;
            this.simulationFunctionMgrCtrl1.CreateProjectSiteSchemeEvent += XhsProjectSimulationFunctionMgrCtrl1_CreateProjectSiteSchemeEvent;
            this.simulationFunctionMgrCtrl1.ShowProjectSiteSchemeEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteSchemeEvent;
            this.simulationFunctionMgrCtrl1.ShowProjectSiteSchemeWorkingEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteSchemeWorkingEvent;
            this.simulationFunctionMgrCtrl1.ProjectSiteSchemeWorkingCheckedEvent += SimulationFunctionMgrCtrl1_ProjectSiteSchemeWorkingCheckedEvent;
            this.simulationFunctionMgrCtrl1.ProjectSiteSchemeWorkingUpdateEvent += SimulationFunctionMgrCtrl1_ProjectSiteSchemeWorkingUpdateEvent;
            this.simulationFunctionMgrCtrl1.ProjectSiteSchemeWorkingRemoveEvent += SimulationFunctionMgrCtrl1_ProjectSiteSchemeWorkingRemoveEvent;
        }
        private long _projectId;//项目id
        private XhsProjectVmo _project = null;//项目
        private XhsProjectSiteVmo _projectSite = null;//项目站
        private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息
        private object _locker = new object();//锁定对象
        /// <summary>
        /// 初始化数据源
        /// </summary>
        public override async void InitialDataSource()
        {
            base.InitialDataSource();
            if (_project == null)
            {
                return;
            }
            await this.simulationFunctionMgrCtrl1.SetBindingData(_project);
        }
        /// <summary>
        /// 绑定数据
@@ -32,101 +51,320 @@
        public async Task SetBindingData(long projectId)
        {
            _project = await BLLFactory<HStation.BLL.XhsProject>.Instance.GetByID(projectId);
            await SetBindingData(_project);
            SetBindingData(_project);
        }
        /// <summary>
        /// 设置数据
        /// </summary>
        public async Task SetBindingData(XhsProjectVmo project)
        public void SetBindingData(XhsProjectVmo project)
        {
            if (project == null)
            {
                return;
            }
            _project = project;
            _projectId = project.ID;
            this.PageTitle.Caption = $"{_project.Name}\r\n水力模拟";
            await this.xhsProjectSimulationSchemeMgrCtrl1.SetBindingData(_project);
            this.PageTitle.Caption = $"{_project.Name}\r\n项目模拟";
        }
        /// <summary>
        /// 初始化数据源
        /// </summary>
        public override void InitialDataSource()
        {
            base.InitialDataSource();
        }
        #region 功能面板
        //项目站选择改变事件
        private async void XhsProjectSimulationSchemeMgrCtrl1_ProjectSiteSelectedChangedEvent(XhsProjectSiteVmo obj)
        //显示项目站概况事件
        private void XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteInfoEvent
            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, Yw.Model.HydroModelInfo hydroInfo, SvgImage svgImage)
        {
            _projectSite = obj;
            if (_projectSite != null)
            lock (_locker)
            {
                var hydroRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
                   .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
                _hydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(hydroRelation.ModelID);
                this.xhsProjectSimulationFunctionMgrCtrl1.SetBindingData();
                var guid = new PageGuid()
                {
                    Modular = this.PageGuid.Modular,
                    MoudingType = eMoudingType.Tab,
                    Function = SimulationFunctionHelper.Info,
                };
                if (!IsExistPage(guid, true))
                {
                    var page = new XhsProjectSimulationInfoPage();
                    page.PageTitle.HeaderSvgImage = svgImage;
                    page.SetBindingData(project, projectSite, hydroInfo);
                    CreatePage(page, guid);
                }
            }
        }
        //显示项目信息事件
        private async void XhsProjectSimulationFunctionMgrCtrl1_ShowXhsProjectInfoEvent(DevExpress.Utils.Svg.SvgImage obj)
        //显示项目站水力模拟事件
        private void XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteSimulationEvent
            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, Yw.Model.HydroModelInfo hydroInfo, Dictionary<HydroWorkingVmo, bool> allWorkingCheckedListDict, SvgImage svgImage)
        {
            lock (_locker)
            {
                var guid = new PageGuid()
                {
                    Modular = this.PageGuid.Modular,
                    MoudingType = eMoudingType.Tab,
                    Function = SimulationFunctionHelper.Simulation,
                    TagName = projectSite.ID.ToString()
                };
                if (!IsExistPage(guid, true))
                {
                    var page = new XhsProjectSimulationCorePage();
                    page.PageTitle.HeaderSvgImage = svgImage;
                    page.AppendWorkingEvent += (working) =>
                    {
                        this.simulationFunctionMgrCtrl1.AppendWorking(working);
                    };
                    page.SetBindingData(project, projectSite, hydroInfo, allWorkingCheckedListDict);
                    CreatePage(page, guid);
                }
            }
        }
        //显示项目站工况事件
        private void XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteWorkingEvent
            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, Yw.Model.HydroModelInfo hydroInfo, HydroWorkingVmo working, SvgImage svgImage)
        {
            lock (_locker)
            {
                var guid = new PageGuid()
                {
                    Modular = this.PageGuid.Modular,
                    MoudingType = eMoudingType.Tab,
                    Function = SimulationFunctionHelper.Working,
                    TagName = working.ID.ToString()
                };
                if (!IsExistPage(guid, true))
                {
                    var page = new XhsProjectSimulationWorkingPage();
                    page.UpdateWorkingEvent += (rhs) =>
                    {
                        this.simulationFunctionMgrCtrl1.UpdateWorking(rhs);
                    };
                    page.RemoveWorkingEvent += (rhs) =>
                    {
                        this.simulationFunctionMgrCtrl1.RemoveWorking(rhs);
                    };
                    page.PageTitle.HeaderSvgImage = svgImage;
                    page.SetBindingData(project, projectSite, hydroInfo, working);
                    CreatePage(page, guid);
                }
            }
        }
        //项目站工况更新事件
        private void XhsProjectSimulationFunctionMgrCtrl1_ProjectSiteWorkingUpdateEvent
            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, Yw.Model.HydroModelInfo hydroInfo, HydroWorkingVmo working)
        {
            var guid = new PageGuid()
            {
                Modular = this.PageGuid.Modular,
                MoudingType = eMoudingType.Tab,
                Function = "xhs-project-simulation-info",
                Function = SimulationFunctionHelper.Simulation,
                TagName = projectSite.ID.ToString()
            };
            if (!IsExistPage(guid, true))
            {
                var page = new XhsProjectSimulationInfoPage();
                await page.SetBindingData(_project, _projectSite, _hydroInfo);
                CreatePage(page, guid);
            }
        }
        //显示水力模拟事件
        private async void XhsProjectSimulationFunctionMgrCtrl1_ShowXhsProjectSimulationEvent(DevExpress.Utils.Svg.SvgImage obj)
        {
            var guid = new PageGuid()
            {
                Modular = this.PageGuid.Modular,
                MoudingType = eMoudingType.Tab,
                Function = "xhs-project-simulation-core",
            };
            if (!IsExistPage(guid, true))
            {
                var page = new XhsProjectSimulationCorePage();
                await page.SetBindingData(_project, _projectSite, _hydroInfo);
                CreatePage(page, guid);
            }
        }
        //创建项目方案事件
        private async void XhsProjectSimulationFunctionMgrCtrl1_CreateXhsProjectSchemeEvent(DevExpress.Utils.Svg.SvgImage obj)
        {
            if (_projectSite == null)
            var page = FindPage(guid);
            if (page == null)
            {
                return;
            }
            var dlg = new AddXhsProjectSimulationSchemeDlg();
            await dlg.SetBindingData(_projectSite.ID);
            dlg.ReloadDataEvent += (scheme) =>
            var ctrl = page as XhsProjectSimulationCorePage;
            if (ctrl == null)
            {
                this.xhsProjectSimulationSchemeMgrCtrl1.AppendScheme(scheme);
                return;
            }
            ctrl.UpdateWorkingCheckedList(working);
        }
        //项目站工况移除事件
        private void XhsProjectSimulationFunctionMgrCtrl1_ProjectSiteWorkingRemoveEvent
            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, Yw.Model.HydroModelInfo hydroInfo, HydroWorkingVmo working)
        {
            var guid = new PageGuid()
            {
                Modular = this.PageGuid.Modular,
                MoudingType = eMoudingType.Tab,
                Function = SimulationFunctionHelper.Simulation,
                TagName = projectSite.ID.ToString()
            };
            var page = FindPage(guid);
            if (page == null)
            {
                return;
            }
            var ctrl = page as XhsProjectSimulationCorePage;
            if (ctrl == null)
            {
                return;
            }
            ctrl.RemoveWorkingCheckedList(working);
        }
        //项目站工况选择改变事件
        private void XhsProjectSimulationFunctionMgrCtrl1_ProjectSiteWorkingCheckedEvent
            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, Yw.Model.HydroModelInfo hydroInfo, HydroWorkingVmo working, bool hasChecked)
        {
            var guid = new PageGuid()
            {
                Modular = this.PageGuid.Modular,
                MoudingType = eMoudingType.Tab,
                Function = SimulationFunctionHelper.Simulation,
                TagName = projectSite.ID.ToString()
            };
            var page = FindPage(guid);
            if (page == null)
            {
                return;
            }
            var ctrl = page as XhsProjectSimulationCorePage;
            if (ctrl == null)
            {
                return;
            }
            ctrl.UpdateWorkingCheckedList(working, hasChecked);
        }
        //项目站方案创建事件
        private void XhsProjectSimulationFunctionMgrCtrl1_CreateProjectSiteSchemeEvent
            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, Yw.Model.HydroModelInfo hydroInfo, SvgImage svgImage)
        {
            WaitFormHelper.ShowWaitForm(this.FindForm(), "正在加载模型,请稍侯...");
            var dlg = new AddXhsSchemeDlg();
            dlg.Shown += delegate { WaitFormHelper.HideWaitForm(this.FindForm()); };
            dlg.ReloadDataEvent += (rhs) =>
            {
                this.simulationFunctionMgrCtrl1.AppendScheme(rhs);
            };
            dlg.SetBindingData(project, projectSite, hydroInfo);
            dlg.ShowDialog();
        }
        //比较项目方案事件
        private void XhsProjectSimulationFunctionMgrCtrl1_CompareXhsProjectSchemeEvent(DevExpress.Utils.Svg.SvgImage obj)
        //显示项目站方案事件
        private void XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteSchemeEvent
            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, XhsSchemeVmo scheme, Yw.Model.HydroModelInfo hydroInfo, Dictionary<HydroWorkingVmo, bool> dict, SvgImage svgImage)
        {
            lock (_locker)
            {
                var guid = new PageGuid()
                {
                    Modular = this.PageGuid.Modular,
                    MoudingType = eMoudingType.Tab,
                    Function = SimulationFunctionHelper.Scheme,
                    TagName = scheme.ID.ToString()
                };
                if (!IsExistPage(guid, true))
                {
                    var page = new XhsProjectSimulationSchemePage();
                    page.PageTitle.HeaderSvgImage = svgImage;
                    page.AppendWorkingEvent += (working) =>
                    {
                        this.simulationFunctionMgrCtrl1.AppendSchemeWorking(scheme, working);
                    };
                    page.SetBindingData(project, projectSite, scheme, hydroInfo, dict);
                    CreatePage(page, guid);
                }
            }
        }
        //显示项目站方案工况事件
        private void XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteSchemeWorkingEvent
            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, XhsSchemeVmo scheme, Yw.Model.HydroModelInfo hydroInfo, HydroWorkingVmo working, SvgImage svgImage)
        {
            lock (_locker)
            {
                var guid = new PageGuid()
                {
                    Modular = this.PageGuid.Modular,
                    MoudingType = eMoudingType.Tab,
                    Function = SimulationFunctionHelper.Working,
                    TagName = working.ID.ToString()
                };
                if (!IsExistPage(guid, true))
                {
                    var page = new XhsProjectSimulationWorkingPage();
                    page.PageTitle.HeaderSvgImage = svgImage;
                    page.UpdateWorkingEvent += (rhs) =>
                    {
                        this.simulationFunctionMgrCtrl1.UpdateSchemeWorking(scheme, rhs);
                    };
                    page.RemoveWorkingEvent += (rhs) =>
                    {
                        this.simulationFunctionMgrCtrl1.RemoveSchemeWorking(scheme, rhs);
                    };
                    page.SetBindingData(project, projectSite, scheme, hydroInfo, working);
                    CreatePage(page, guid);
                }
            }
        }
        //项目站方案工况选择改变事件
        private void SimulationFunctionMgrCtrl1_ProjectSiteSchemeWorkingCheckedEvent(XhsSchemeVmo scheme, HydroWorkingVmo working, bool hasChecked)
        {
            var guid = new PageGuid()
            {
                Modular = this.PageGuid.Modular,
                MoudingType = eMoudingType.Tab,
                Function = SimulationFunctionHelper.Scheme,
                TagName = scheme.ID.ToString()
            };
            var page = FindPage(guid);
            if (page == null)
            {
                return;
            }
            var ctrl = page as XhsProjectSimulationSchemePage;
            if (ctrl == null)
            {
                return;
            }
            ctrl.UpdateWorkingCheckedList(working, hasChecked);
        }
        //项目站方案工况更新事件
        private void SimulationFunctionMgrCtrl1_ProjectSiteSchemeWorkingUpdateEvent(XhsSchemeVmo scheme, HydroWorkingVmo working)
        {
            var guid = new PageGuid()
            {
                Modular = this.PageGuid.Modular,
                MoudingType = eMoudingType.Tab,
                Function = SimulationFunctionHelper.Scheme,
                TagName = scheme.ID.ToString()
            };
            var page = FindPage(guid);
            if (page == null)
            {
                return;
            }
            var ctrl = page as XhsProjectSimulationSchemePage;
            if (ctrl == null)
            {
                return;
            }
        }
        //项目站方案工况移除事件
        private void SimulationFunctionMgrCtrl1_ProjectSiteSchemeWorkingRemoveEvent(XhsSchemeVmo scheme, HydroWorkingVmo working)
        {
            var guid = new PageGuid()
            {
                Modular = this.PageGuid.Modular,
                MoudingType = eMoudingType.Tab,
                Function = SimulationFunctionHelper.Scheme,
                TagName = scheme.ID.ToString()
            };
            var page = FindPage(guid);
            if (page == null)
            {
                return;
            }
            var ctrl = page as XhsProjectSimulationSchemePage;
            if (ctrl == null)
            {
                return;
            }
        }
        #endregion
        #region TabbedView 相关事件处理程序
@@ -153,12 +391,28 @@
                return;
        }
        //正在关闭Document
        private void tabbedView1_DocumentClosing(object sender, DocumentCancelEventArgs e)
        {
            var page = e.Document.Control as DocumentPage;
            if (page == null)
            {
                return;
            }
            if (!page.CanClose())
            {
                e.Cancel = true;
                return;
            }
            page.UnRegistEvents();
        }
        //关闭 此时控件已经为空
        private void tabbedView1_DocumentClosed(object sender, DocumentEventArgs e)
        {
        }
        #endregion TabbedView 相关事件处理程序
        #endregion
        #region Page
@@ -344,7 +598,6 @@
                        docPnl.Show();
                    }
                    break;
                case eMoudingType.Tab:
                    {
                        this.tabbedView1.BeginUpdate();
@@ -363,7 +616,6 @@
                        this.tabbedView1.Controller.Activate(doc);
                    }
                    break;
                default: break;
            }
            page.InitialDataSource();
@@ -407,6 +659,52 @@
            }
        }
        #endregion Page
        //查询Page
        private DocumentPage FindPage(PageGuid pguid)
        {
            if (pguid == null)
            {
                return default;
            }
            if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
            {
                foreach (DockPanel panel in this.dockManager1.Panels)
                {
                    if (panel.Tag != null)
                    {
                        if (panel.Tag is PageGuid)
                        {
                            if ((panel.Tag as PageGuid).ToString() == pguid.ToString())
                            {
                                return panel.ControlContainer.Controls[0] as DocumentPage;
                            }
                        }
                    }
                }
            }
            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
            {
                foreach (BaseDocument doc in this.tabbedView1.Documents)
                {
                    if (doc.Tag != null)
                    {
                        if (doc.Tag is PageGuid)
                        {
                            if ((doc.Tag as PageGuid).ToString() == pguid.ToString())
                            {
                                return doc.Control as DocumentPage;
                            }
                        }
                    }
                }
            }
            return default;
        }
        #endregion
    }
}