duheng
2025-01-13 1b7957fac12e80698971513b30e65772c4c5c038
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/04-scheme/00-core/CreateXhsSchemeDlg.cs
@@ -1,13 +1,5 @@
using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraLayout.Utils;
using Mapster;
namespace HStation.WinFrmUI
{
@@ -17,9 +9,583 @@
        {
            InitializeComponent();
            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
            this.layoutControl1.SetupLayoutControl();
            this.FormClosing += CreateXhsSchemeDlg_FormClosing;
        }
        /// <summary>
        /// 重载数据
        /// </summary>
        public event Action<XhsSchemeVmo> ReloadDataEvent;
        private CreateXhsSchemeViewModel _vm = null;//视图
        private CreateXhsSchemeManager _wizard = null;//管理器
        private List<IWizardPageAsync<CreateXhsSchemeViewModel>> _allPageList = null;//所有页面列表
        private List<IWizardPageAsync<CreateXhsSchemeViewModel>> _bindingPageList = null;//绑定页面列表
        /// <summary>
        /// 绑定数据
        /// </summary>
        public void SetBindingData
            (
                XhsProjectVmo project,
                XhsProjectSiteVmo projectSite,
                Yw.Model.HydroModelInfo hydroInfo,
                List<XhsSchemeVmo> allSchemeList
            )
        {
            if (project == null)
            {
                return;
            }
            if (projectSite == null)
            {
                return;
            }
            if (hydroInfo == null)
            {
                return;
            }
            var hydroInfoRhs = hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
            _vm = new CreateXhsSchemeViewModel(project, projectSite, hydroInfoRhs, allSchemeList);
            InitialManager();
        }
        //初始化管理器
        private void InitialManager()
        {
            if (_vm == null)
            {
                return;
            }
            InitialPages();
            InitialSteps();
            _wizard = new CreateXhsSchemeManager(_vm);
            _wizard.SelectedPageChangedEvent += _wizard_SelectedPageChangedEvent;
            _wizard.SelectedPageStateChangedEvent += _wizard_SelectedPageStateChangedEvent;
            _wizard.InitialManager(_bindingPageList?.ToArray());
        }
        //初始化页面
        private void InitialPages()
        {
            if (_vm == null)
            {
                return;
            }
            _bindingPageList = new List<IWizardPageAsync<CreateXhsSchemeViewModel>>();
            if (_allPageList == null)
            {
                _allPageList = new List<IWizardPageAsync<CreateXhsSchemeViewModel>>();
            }
            this.navigationFrame.Pages.Clear();
            //基础信息
            var pageInfo = _allPageList.Find(x => x is CreateXhsSchemeInfoPage) as CreateXhsSchemeInfoPage;
            if (pageInfo == null)
            {
                pageInfo = new CreateXhsSchemeInfoPage();
                pageInfo.Dock = DockStyle.Fill;
                _allPageList.Add(pageInfo);
            }
            _bindingPageList.Add(pageInfo);
            this.navigationFrame.AddPage(pageInfo);
            if (_vm.Scheme != null && _vm.Scheme.ChangeTypes != null && _vm.Scheme.ChangeTypes.Count > 0)
            {
                //水池
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Tank))
                {
                    var pageTank = _allPageList.Find(x => x is CreateXhsSchemeTankChangePage) as CreateXhsSchemeTankChangePage;
                    if (pageTank == null)
                    {
                        pageTank = new CreateXhsSchemeTankChangePage();
                        pageTank.Dock = DockStyle.Fill;
                        _allPageList.Add(pageTank);
                    }
                    _bindingPageList.Add(pageTank);
                    this.navigationFrame.AddPage(pageTank);
                }
                //水箱
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Waterbox))
                {
                    var pageWaterbox = _allPageList.Find(x => x is CreateXhsSchemeWaterboxChangePage) as CreateXhsSchemeWaterboxChangePage;
                    if (pageWaterbox == null)
                    {
                        pageWaterbox = new CreateXhsSchemeWaterboxChangePage();
                        pageWaterbox.Dock = DockStyle.Fill;
                        _allPageList.Add(pageWaterbox);
                    }
                    _bindingPageList.Add(pageWaterbox);
                    this.navigationFrame.AddPage(pageWaterbox);
                }
                //闷头
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Blunthead))
                {
                    var pageBlunthead = _allPageList.Find(x => x is CreateXhsSchemeBluntheadChangePage) as CreateXhsSchemeBluntheadChangePage;
                    if (pageBlunthead == null)
                    {
                        pageBlunthead = new CreateXhsSchemeBluntheadChangePage();
                        pageBlunthead.Dock = DockStyle.Fill;
                        _allPageList.Add(pageBlunthead);
                    }
                    _bindingPageList.Add(pageBlunthead);
                    this.navigationFrame.AddPage(pageBlunthead);
                }
                //弯头
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Elbow))
                {
                    var pageElbow = _allPageList.Find(x => x is CreateXhsSchemeElbowChangePage) as CreateXhsSchemeElbowChangePage;
                    if (pageElbow == null)
                    {
                        pageElbow = new CreateXhsSchemeElbowChangePage();
                        pageElbow.Dock = DockStyle.Fill;
                        _allPageList.Add(pageElbow);
                    }
                    _bindingPageList.Add(pageElbow);
                    this.navigationFrame.AddPage(pageElbow);
                }
                //三通
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Threelink))
                {
                    var pageThreelink = _allPageList.Find(x => x is CreateXhsSchemeThreelinkChangePage) as CreateXhsSchemeThreelinkChangePage;
                    if (pageThreelink == null)
                    {
                        pageThreelink = new CreateXhsSchemeThreelinkChangePage();
                        pageThreelink.Dock = DockStyle.Fill;
                        _allPageList.Add(pageThreelink);
                    }
                    _bindingPageList.Add(pageThreelink);
                    this.navigationFrame.AddPage(pageThreelink);
                }
                //四通
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Fourlink))
                {
                    var pageFourlink = _allPageList.Find(x => x is CreateXhsSchemeFourlinkChangePage) as CreateXhsSchemeFourlinkChangePage;
                    if (pageFourlink == null)
                    {
                        pageFourlink = new CreateXhsSchemeFourlinkChangePage();
                        pageFourlink.Dock = DockStyle.Fill;
                        _allPageList.Add(pageFourlink);
                    }
                    _bindingPageList.Add(pageFourlink);
                    this.navigationFrame.AddPage(pageFourlink);
                }
                //水表
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Meter))
                {
                    var pageMeter = _allPageList.Find(x => x is CreateXhsSchemeMeterChangePage) as CreateXhsSchemeMeterChangePage;
                    if (pageMeter == null)
                    {
                        pageMeter = new CreateXhsSchemeMeterChangePage();
                        pageMeter.Dock = DockStyle.Fill;
                        _allPageList.Add(pageMeter);
                    }
                    _bindingPageList.Add(pageMeter);
                    this.navigationFrame.AddPage(pageMeter);
                }
                //流量计
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Flowmeter))
                {
                    var pageFlowmeter = _allPageList.Find(x => x is CreateXhsSchemeFlowmeterChangePage) as CreateXhsSchemeFlowmeterChangePage;
                    if (pageFlowmeter == null)
                    {
                        pageFlowmeter = new CreateXhsSchemeFlowmeterChangePage();
                        pageFlowmeter.Dock = DockStyle.Fill;
                        _allPageList.Add(pageFlowmeter);
                    }
                    _bindingPageList.Add(pageFlowmeter);
                    this.navigationFrame.AddPage(pageFlowmeter);
                }
                //压力表
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Pressmeter))
                {
                    var pagePressmeter = _allPageList.Find(x => x is CreateXhsSchemePressmeterChangePage) as CreateXhsSchemePressmeterChangePage;
                    if (pagePressmeter == null)
                    {
                        pagePressmeter = new CreateXhsSchemePressmeterChangePage();
                        pagePressmeter.Dock = DockStyle.Fill;
                        _allPageList.Add(pagePressmeter);
                    }
                    _bindingPageList.Add(pagePressmeter);
                    this.navigationFrame.AddPage(pagePressmeter);
                }
                //消火栓
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Hydrant))
                {
                    var pageHydrant = _allPageList.Find(x => x is CreateXhsSchemeHydrantChangePage) as CreateXhsSchemeHydrantChangePage;
                    if (pageHydrant == null)
                    {
                        pageHydrant = new CreateXhsSchemeHydrantChangePage();
                        pageHydrant.Dock = DockStyle.Fill;
                        _allPageList.Add(pageHydrant);
                    }
                    _bindingPageList.Add(pageHydrant);
                    this.navigationFrame.AddPage(pageHydrant);
                }
                //喷嘴
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Nozzle))
                {
                    var pageNozzle = _allPageList.Find(x => x is CreateXhsSchemeNozzleChangePage) as CreateXhsSchemeNozzleChangePage;
                    if (pageNozzle == null)
                    {
                        pageNozzle = new CreateXhsSchemeNozzleChangePage();
                        pageNozzle.Dock = DockStyle.Fill;
                        _allPageList.Add(pageNozzle);
                    }
                    _bindingPageList.Add(pageNozzle);
                    this.navigationFrame.AddPage(pageNozzle);
                }
                //冷却塔
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Cooling))
                {
                    var pageCooling = _allPageList.Find(x => x is CreateXhsSchemeCoolingChangePage) as CreateXhsSchemeCoolingChangePage;
                    if (pageCooling == null)
                    {
                        pageCooling = new CreateXhsSchemeCoolingChangePage();
                        pageCooling.Dock = DockStyle.Fill;
                        _allPageList.Add(pageCooling);
                    }
                    _bindingPageList.Add(pageCooling);
                    this.navigationFrame.AddPage(pageCooling);
                }
                //管道
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Pipe))
                {
                    var pagePipe = _allPageList.Find(x => x is CreateXhsSchemePipeChangePage) as CreateXhsSchemePipeChangePage;
                    if (pagePipe == null)
                    {
                        pagePipe = new CreateXhsSchemePipeChangePage();
                        pagePipe.Dock = DockStyle.Fill;
                        _allPageList.Add(pagePipe);
                    }
                    _bindingPageList.Add(pagePipe);
                    this.navigationFrame.AddPage(pagePipe);
                }
                //过渡件
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Translation))
                {
                    var pageTranslation = _allPageList.Find(x => x is CreateXhsSchemeTranslationChangePage) as CreateXhsSchemeTranslationChangePage;
                    if (pageTranslation == null)
                    {
                        pageTranslation = new CreateXhsSchemeTranslationChangePage();
                        pageTranslation.Dock = DockStyle.Fill;
                        _allPageList.Add(pageTranslation);
                    }
                    _bindingPageList.Add(pageTranslation);
                    this.navigationFrame.AddPage(pageTranslation);
                }
                //水泵
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Pump))
                {
                    var pagePump = _allPageList.Find(x => x is CreateXhsSchemePumpChangePage) as CreateXhsSchemePumpChangePage;
                    if (pagePump == null)
                    {
                        pagePump = new CreateXhsSchemePumpChangePage();
                        pagePump.Dock = DockStyle.Fill;
                        _allPageList.Add(pagePump);
                    }
                    _bindingPageList.Add(pagePump);
                    this.navigationFrame.AddPage(pagePump);
                }
                //阀门
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Valve))
                {
                    var pageValve = _allPageList.Find(x => x is CreateXhsSchemeValveChangePage) as CreateXhsSchemeValveChangePage;
                    if (pageValve == null)
                    {
                        pageValve = new CreateXhsSchemeValveChangePage();
                        pageValve.Dock = DockStyle.Fill;
                        _allPageList.Add(pageValve);
                    }
                    _bindingPageList.Add(pageValve);
                    this.navigationFrame.AddPage(pageValve);
                }
                //换热器
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Exchanger))
                {
                    var pageExchanger = _allPageList.Find(x => x is CreateXhsSchemeExchangerChangePage) as CreateXhsSchemeExchangerChangePage;
                    if (pageExchanger == null)
                    {
                        pageExchanger = new CreateXhsSchemeExchangerChangePage();
                        pageExchanger.Dock = DockStyle.Fill;
                        _allPageList.Add(pageExchanger);
                    }
                    _bindingPageList.Add(pageExchanger);
                    this.navigationFrame.AddPage(pageExchanger);
                }
                //压缩机
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Compressor))
                {
                    var pageCompressor = _allPageList.Find(x => x is CreateXhsSchemeCompressorChangePage) as CreateXhsSchemeCompressorChangePage;
                    if (pageCompressor == null)
                    {
                        pageCompressor = new CreateXhsSchemeCompressorChangePage();
                        pageCompressor.Dock = DockStyle.Fill;
                        _allPageList.Add(pageCompressor);
                    }
                    _bindingPageList.Add(pageCompressor);
                    this.navigationFrame.AddPage(pageCompressor);
                }
            }
            //生成
            var pageGenerate = _allPageList.Find(x => x is CreateXhsSchemeGeneralWizardPage) as CreateXhsSchemeGeneralWizardPage;
            if (pageGenerate == null)
            {
                pageGenerate = new CreateXhsSchemeGeneralWizardPage();
                pageGenerate.Dock = DockStyle.Fill;
                _allPageList.Add(pageGenerate);
            }
            _bindingPageList.Add(pageGenerate);
            this.navigationFrame.AddPage(pageGenerate);
            //变更记录
            var pageComplete = _allPageList.Find(x => x is CreateXhsSchemeChangeRecordPage) as CreateXhsSchemeChangeRecordPage;
            if (pageComplete == null)
            {
                pageComplete = new CreateXhsSchemeChangeRecordPage();
                pageComplete.Dock = DockStyle.Fill;
                _allPageList.Add(pageComplete);
            }
            _bindingPageList.Add(pageComplete);
            this.navigationFrame.AddPage(pageComplete);
        }
        //初始化步骤
        private void InitialSteps()
        {
            this.stepProgressBar1.Items.Clear();
            if (_bindingPageList != null && _bindingPageList.Count > 0)
            {
                foreach (var page in _bindingPageList)
                {
                    if (page is CreateXhsSchemeInfoPage)
                    {
                        AddStepItem("方案信息");
                    }
                    else if (page is CreateXhsSchemeTankChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Tank);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeWaterboxChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Waterbox);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeBluntheadChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Blunthead);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeElbowChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Elbow);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeThreelinkChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Threelink);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeFourlinkChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Fourlink);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeMeterChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Meter);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeFlowmeterChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Flowmeter);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemePressmeterChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pressmeter);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeHydrantChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Hydrant);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeNozzleChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Nozzle);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeCoolingChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Cooling);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemePipeChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeTranslationChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Translation);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemePumpChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeValveChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeExchangerChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Exchanger);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeCompressorChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Compressor);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeGeneralWizardPage)
                    {
                        var caption = "创建";
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeChangeRecordPage)
                    {
                        var caption = "变更记录";
                        AddStepItem(caption);
                    }
                }
            }
        }
        //选择页面改变
        private void _wizard_SelectedPageChangedEvent(IWizardPageAsync<CreateXhsSchemeViewModel> page, int index)
        {
            this.itemForPrev.Visibility = page.AllowPrev ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForNext.Visibility = page.AllowNext ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForCancel.Visibility = page.AllowCancel ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForComplete.Visibility = page.AllowComplete ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.navigationFrame.SelectedPageIndex = index;
            this.stepProgressBar1.SelectedItemIndex = index;
            this.itemForTitle.Visibility = index > 0 ? LayoutVisibility.Always : LayoutVisibility.Never;
        }
        //选择页面状态改变
        private void _wizard_SelectedPageStateChangedEvent(IWizardPageAsync<CreateXhsSchemeViewModel> page, int index)
        {
            this.itemForPrev.Visibility = page.AllowPrev ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForNext.Visibility = page.AllowNext ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForCancel.Visibility = page.AllowCancel ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForComplete.Visibility = page.AllowComplete ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForTitle.Visibility = index > 0 ? LayoutVisibility.Always : LayoutVisibility.Never;
        }
        //上一步
        private async void btnPrev_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                await _wizard.Prev();
            }
        }
        //下一步
        private async void btnNext_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                if (_wizard.SelectedIndex == 0)
                {
                    var page = _wizard.SelectedPage;
                    if (await page.CanNext())
                    {
                        InitialManager();
                    }
                }
                await _wizard.Next();
            }
        }
        //取消
        private async void btnCancel_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                if (await _wizard.Cancel())
                {
                    this.DialogResult = DialogResult.Cancel;
                    this.Close();
                }
            }
        }
        //完成
        private async void btnComplete_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                if (await _wizard.Complete())
                {
                    this.ReloadDataEvent?.Invoke(_vm.Scheme);
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
            }
        }
        //正在关闭
        private async void CreateXhsSchemeDlg_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (_wizard != null)
            {
                if (this.DialogResult == DialogResult.OK)
                {
                    /*  if (!_wizard.Complete())
                      {
                          e.Cancel = true;
                      }*/
                }
                else if (this.DialogResult == DialogResult.Cancel)
                {
                    if (!await _wizard.Cancel())
                    {
                        e.Cancel = true;
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }
        //添加步骤项
        private void AddStepItem(string caption)
        {
            this.stepProgressBar1.BeginInit();
            var item = new StepProgressBarItem();
            item.ContentBlock2.Caption = caption;
            item.Options.Indicator.ActiveStateDrawMode = IndicatorDrawMode.Full;
            item.Options.Indicator.ActiveStateImageOptions.SvgImage = null;
            item.Options.Indicator.InactiveStateImageOptions.SvgImage = null;
            item.State = StepProgressBarItemState.Inactive;
            this.stepProgressBar1.Items.Add(item);
            this.stepProgressBar1.EndInit();
        }
    }
}