Shuxia Ning
2024-11-20 4fa5e391fcb989f4687ba3398f84a5ab066d7285
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/04-scheme/XhsProjectSimulationSchemeMgrPage.cs
@@ -1,12 +1,7 @@
global using Yw.EPAnet;
using DevExpress.Mvvm.Native;
using DevExpress.Xpo.Helpers;
using DevExpress.XtraRichEdit.Layout;
using DevExpress.XtraSpreadsheet.Commands;
using HStation.WinFrmUI.PhartRelation;
using System.Diagnostics;
using System.Windows.Media;
using System.Windows.Media.Media3D;
using Yw.Pump;
using Yw.Vmo;
using Yw.WinFrmUI.Bimface;
@@ -93,7 +88,7 @@
            {
                _bimfaceCtrl = new XhsProjectSimulationBimfaceCtrl();
                _bimfaceCtrl.Dock = DockStyle.Fill;
                await _bimfaceCtrl.InitialData(_project, _projectSite, () => _hydroInfo);
                await _bimfaceCtrl.InitialData(_project, _projectSite);
                _bimfaceCtrl.LoadCompletedEvent += () =>
                {//view加载完成事件
                    if (_hydroInfo == null)
@@ -108,7 +103,7 @@
                    {
                        return;
                    }
                    _selectedVisual = obj;
                    //_selectedVisual = obj;
                    ShowSelectedProperty();
                };
            }
@@ -179,57 +174,57 @@
            {
                _propertyCtrl = new XhsProjectSimulationPropertyCtrl();
                _propertyCtrl.Dock = DockStyle.Fill;
                _propertyCtrl.InitialData(() => _hydroInfo, () => GetCalcuResultList());
                _propertyCtrl.BlinkLinkParterEvent += async (code, linkCode) =>
                { //强调连接组件
                    if (string.IsNullOrEmpty(code))
                    {
                        return;
                    }
                    if (string.IsNullOrEmpty(linkCode))
                    {
                        return;
                    }
                    if (_hydroInfo == null)
                    {
                        return;
                    }
                    var allVisualList = _hydroInfo.GetAllVisuals();
                    if (allVisualList == null || allVisualList.Count < 1)
                    {
                        return;
                    }
                    var linkParter = allVisualList.Find(x => x.Code == linkCode);
                    if (linkParter == null)
                    {
                        return;
                    }
                    var blinkCodes = new List<string>();
                    if (linkParter.GetType() == typeof(Yw.Model.HydroJunctionInfo))
                    {
                        var allLinkList = _hydroInfo.GetAllLinks();
                        if (allLinkList == null || allLinkList.Count < 1)
                        {
                            return;
                        }
                        var linkList = allLinkList.Where(x => (x.StartCode == linkParter.Code || x.EndCode == linkParter.Code) && x.Code != code).ToList();
                        if (linkList == null || linkList.Count < 1)
                        {
                            return;
                        }
                        blinkCodes.AddRange(linkList.Select(x => x.Code));
                    }
                    else
                    {
                        blinkCodes.Add(linkCode);
                    }
                //_propertyCtrl.InitialData(() => _hydroInfo, () => GetCalcuResultList());
                //_propertyCtrl.BlinkLinkNodeEvent += async (code, linkCode) =>
                //{ //强调连接组件
                //    if (string.IsNullOrEmpty(code))
                //    {
                //        return;
                //    }
                //    if (string.IsNullOrEmpty(linkCode))
                //    {
                //        return;
                //    }
                //    if (_hydroInfo == null)
                //    {
                //        return;
                //    }
                //    var allVisualList = _hydroInfo.GetAllVisuals();
                //    if (allVisualList == null || allVisualList.Count < 1)
                //    {
                //        return;
                //    }
                //    var linkParter = allVisualList.Find(x => x.Code == linkCode);
                //    if (linkParter == null)
                //    {
                //        return;
                //    }
                //    var blinkCodes = new List<string>();
                //    if (linkParter.GetType() == typeof(Yw.Model.HydroJunctionInfo))
                //    {
                //        var allLinkList = _hydroInfo.GetAllLinks();
                //        if (allLinkList == null || allLinkList.Count < 1)
                //        {
                //            return;
                //        }
                //        var linkList = allLinkList.Where(x => (x.StartCode == linkParter.Code || x.EndCode == linkParter.Code) && x.Code != code).ToList();
                //        if (linkList == null || linkList.Count < 1)
                //        {
                //            return;
                //        }
                //        blinkCodes.AddRange(linkList.Select(x => x.Code));
                //    }
                //    else
                //    {
                //        blinkCodes.Add(linkCode);
                //    }
                    await _bimfaceCtrl?.SetBlinkComponents(blinkCodes);
                    await Task.Delay(5000);
                    await _bimfaceCtrl?.ClearBlinkComponents();
                };
                //    await _bimfaceCtrl?.SetBlinkComponents(blinkCodes);
                //    await Task.Delay(5000);
                //    await _bimfaceCtrl?.ClearBlinkComponents();
                //};
                _propertyCtrl.ViewParterEvent += (parter) =>
                _propertyCtrl.HydroViewEvent += (parter) =>
                {
                    if (parter == null)
                    {
@@ -256,11 +251,11 @@
                    //分级属性发生改变
                    //判断当前是否有分级展示,若有则更新分级,最好是更新单个分级
                };
                _propertyCtrl.FlowDirectionPropertyValueChangedEvent += async (parter) =>
                _propertyCtrl.FlowEffectPropertyValueChangedEvent += async (parter) =>
                {
                    //流向属性发生改变
                    //判断流向是否加载,如果加载则更新流向,最好是更新单个流向
                    UpdateFlowEffect(parter);
                    //UpdateFlowEffect(parter);
                    //await _bimfaceCtrl?.UnloadFlowEffectById(parter.Code);
                };
@@ -1060,52 +1055,52 @@
                }
                ShowSelectedProperty();
            };
            dlg.HydroCalcuEvent += async (hydroInfo, workingInfo) =>
            {
                if (_hydroInfo == null)
                {
                    return;
                }
                _hydroInfo.UpdateWorkingInfo(workingInfo);
                //校验
                _checkResult = _hydroInfo.Check();
                if (!_checkResult.Succeed)
                {
                    ShowCheckCtrl();
                    TipFormHelper.ShowWarn("校验失败,请检查后重试");
                    return;
                }
            //dlg.HydroCalcuEvent += async (hydroInfo, workingInfo) =>
            //{
            //    if (_hydroInfo == null)
            //    {
            //        return;
            //    }
            //    _hydroInfo.UpdateWorkingInfo(workingInfo);
            //    //校验
            //    _checkResult = _hydroInfo.Check();
            //    if (!_checkResult.Succeed)
            //    {
            //        ShowCheckCtrl();
            //        TipFormHelper.ShowWarn("校验失败,请检查后重试");
            //        return;
            //    }
                WaitFormHelper.ShowWaitForm(this, "正在计算分析中,请稍候...");
            //    WaitFormHelper.ShowWaitForm(this, "正在计算分析中,请稍候...");
                await Task.Delay(5000);
            //    await Task.Delay(5000);
                var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo);
                _calcuResult = netWork.CalcuMinorLoss();
            //    var netWork = Yw.Hydro.ParseHelper.ToNetwork(_hydroInfo);
            //    _calcuResult = netWork.CalcuMinorLoss();
                WaitFormHelper.HideWaitForm();
                if (_calcuResult.Succeed)
                {
                    GetCalcuResultList(false);
                    UpdateVisualViewModelCalcuProperty();
                    UpdateVisualListCtrl();
                    UpdateSelectedProperty();
                    await _bimfaceCtrl?.SetLogicCalcuCustomLabels(_calcuResult);
                    TipFormHelper.ShowSucceed("计算成功!");
                    var codes = _hydroInfo.Pumps.Select(x => x.Code).ToList();
                    await _bimfaceCtrl?.ZoomAndSelectComponents(codes);
                }
                else
                {
                    ShowCalcuFailedCtrl();
                    TipFormHelper.ShowError("计算失败!");
                }
                AutoApplyGrading();
                UpdateVisualListCtrl();
                ShowSelectedProperty();
            };
            dlg.SetBindingData(_hydroInfo);
            //    WaitFormHelper.HideWaitForm();
            //    if (_calcuResult.Succeed)
            //    {
            //        GetCalcuResultList(false);
            //        UpdateVisualViewModelCalcuProperty();
            //        UpdateVisualListCtrl();
            //        UpdateSelectedProperty();
            //        await _bimfaceCtrl?.SetLogicCalcuCustomLabels(_calcuResult);
            //        TipFormHelper.ShowSucceed("计算成功!");
            //        var codes = _hydroInfo.Pumps.Select(x => x.Code).ToList();
            //        await _bimfaceCtrl?.ZoomAndSelectComponents(codes);
            //    }
            //    else
            //    {
            //        ShowCalcuFailedCtrl();
            //        TipFormHelper.ShowError("计算失败!");
            //    }
            //    AutoApplyGrading();
            //    UpdateVisualListCtrl();
            //    ShowSelectedProperty();
            //};
            //dlg.SetBindingData(_hydroInfo);
            dlg.ShowDialog();
        }
@@ -2055,8 +2050,8 @@
                {
                    _allGradingApplyList.Add(new HydroGradingApplyViewModel()
                    {
                        Code = Yw.Hydro.ParterCatalog.Pump,
                        Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump),
                        Catalog = Yw.Hydro.ParterCatalog.Pump,
                        CatalogName = Yw.WinFrmUI.HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump),
                        PropName = Yw.Hydro.ParterProp.LinkStatus
                    });
                }
@@ -2064,8 +2059,8 @@
                {
                    _allGradingApplyList.Add(new HydroGradingApplyViewModel()
                    {
                        Code = Yw.Hydro.ParterCatalog.Valve,
                        Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve),
                        Catalog = Yw.Hydro.ParterCatalog.Valve,
                        CatalogName = Yw.WinFrmUI.HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve),
                        PropName = Yw.Hydro.ParterProp.LinkStatus
                    });
                }
@@ -2073,8 +2068,8 @@
                {
                    _allGradingApplyList.Add(new HydroGradingApplyViewModel()
                    {
                        Code = Yw.Hydro.ParterCatalog.Pipe,
                        Name = Yw.WinFrmUI.HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe),
                        Catalog = Yw.Hydro.ParterCatalog.Pipe,
                        CatalogName = Yw.WinFrmUI.HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe),
                        PropName = HydroVisualCalcuProp.CalcuFlow
                    });
                }
@@ -2083,7 +2078,7 @@
        }
        //获取颜色分级应用结果列表
        private async Task<List<HydroGradingApplyResultViewModel>> GetGradingApplyResultList()
        private async Task<List<HydroGradingResultViewModel>> GetGradingApplyResultList()
        {
            if (_hydroInfo == null)
            {
@@ -2108,13 +2103,13 @@
            var allCalcuResultList = GetCalcuResultList();
            //所有应用结果列表
            var allGradingApplyResultList = new List<HydroGradingApplyResultViewModel>();
            var allGradingApplyResultList = new List<HydroGradingResultViewModel>();
            allGradingApplyList.ForEach(x =>
            {
                var allCatalogGradingList = allGradingList.Where(t => t.Catalog == x.Code).ToList();
                var allCatalogGradingList = allGradingList.Where(t => t.Catalog == x.Catalog).ToList();
                if (allCatalogGradingList != null || allCatalogGradingList.Count > 0)
                {
                    switch (x.Code)
                    switch (x.Catalog)
                    {
                        case Yw.Hydro.ParterCatalog.Pump:
                            {
@@ -2132,7 +2127,7 @@
                                                        var grading = gradingList.Meet(pump.LinkStatus);
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = pump.Code,
                                                                Color = grading.Color
@@ -2155,7 +2150,7 @@
                                                                var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value));
                                                                if (grading != null)
                                                                {
                                                                    var result = new HydroGradingApplyResultViewModel()
                                                                    var result = new HydroGradingResultViewModel()
                                                                    {
                                                                        Code = pump.Code,
                                                                        Color = grading.Color
@@ -2180,7 +2175,7 @@
                                                                var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value));
                                                                if (grading != null)
                                                                {
                                                                    var result = new HydroGradingApplyResultViewModel()
                                                                    var result = new HydroGradingResultViewModel()
                                                                    {
                                                                        Code = pump.Code,
                                                                        Color = grading.Color
@@ -2205,7 +2200,7 @@
                                                                var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value));
                                                                if (grading != null)
                                                                {
                                                                    var result = new HydroGradingApplyResultViewModel()
                                                                    var result = new HydroGradingResultViewModel()
                                                                    {
                                                                        Code = pump.Code,
                                                                        Color = grading.Color
@@ -2239,7 +2234,7 @@
                                                        var grading = gradingList.Meet(valve.LinkStatus);
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = valve.Code,
                                                                Color = grading.Color
@@ -2262,7 +2257,7 @@
                                                                var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value));
                                                                if (grading != null)
                                                                {
                                                                    var result = new HydroGradingApplyResultViewModel()
                                                                    var result = new HydroGradingResultViewModel()
                                                                    {
                                                                        Code = valve.Code,
                                                                        Color = grading.Color
@@ -2287,7 +2282,7 @@
                                                                var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value));
                                                                if (grading != null)
                                                                {
                                                                    var result = new HydroGradingApplyResultViewModel()
                                                                    var result = new HydroGradingResultViewModel()
                                                                    {
                                                                        Code = valve.Code,
                                                                        Color = grading.Color
@@ -2312,7 +2307,7 @@
                                                                var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value));
                                                                if (grading != null)
                                                                {
                                                                    var result = new HydroGradingApplyResultViewModel()
                                                                    var result = new HydroGradingResultViewModel()
                                                                    {
                                                                        Code = valve.Code,
                                                                        Color = grading.Color
@@ -2351,7 +2346,7 @@
                                                                var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value));
                                                                if (grading != null)
                                                                {
                                                                    var result = new HydroGradingApplyResultViewModel()
                                                                    var result = new HydroGradingResultViewModel()
                                                                    {
                                                                        Code = pipe.Code,
                                                                        Color = grading.Color
@@ -2376,7 +2371,7 @@
                                                                var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value));
                                                                if (grading != null)
                                                                {
                                                                    var result = new HydroGradingApplyResultViewModel()
                                                                    var result = new HydroGradingResultViewModel()
                                                                    {
                                                                        Code = pipe.Code,
                                                                        Color = grading.Color
@@ -2401,7 +2396,7 @@
                                                                var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value));
                                                                if (grading != null)
                                                                {
                                                                    var result = new HydroGradingApplyResultViewModel()
                                                                    var result = new HydroGradingResultViewModel()
                                                                    {
                                                                        Code = pipe.Code,
                                                                        Color = grading.Color
@@ -2428,7 +2423,7 @@
        }
        //获取颜色分级应用结果列表
        private async Task<List<HydroGradingApplyResultViewModel>> GetGradingApplyResultList(string catalog, string propName)
        private async Task<List<HydroGradingResultViewModel>> GetGradingApplyResultList(string catalog, string propName)
        {
            if (_hydroInfo == null)
            {
@@ -2455,7 +2450,7 @@
            }
            //当前分级应用
            var gradingApply = allGradingApplyList.Find(x => x.Code == catalog);
            var gradingApply = allGradingApplyList.Find(x => x.Catalog == catalog);
            if (gradingApply == null)
            {
                return default;
@@ -2466,7 +2461,7 @@
            var allCalcuResultList = GetCalcuResultList();
            //应用结果列表
            var gradingApplyResultList = new List<HydroGradingApplyResultViewModel>();
            var gradingApplyResultList = new List<HydroGradingResultViewModel>();
            switch (catalog)
            {
@@ -2486,7 +2481,7 @@
                                                var grading = gradingList.Meet(pump.LinkStatus);
                                                if (grading != null)
                                                {
                                                    var result = new HydroGradingApplyResultViewModel()
                                                    var result = new HydroGradingResultViewModel()
                                                    {
                                                        Code = pump.Code,
                                                        Color = grading.Color
@@ -2509,7 +2504,7 @@
                                                        var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value));
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = pump.Code,
                                                                Color = grading.Color
@@ -2534,7 +2529,7 @@
                                                        var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value));
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = pump.Code,
                                                                Color = grading.Color
@@ -2559,7 +2554,7 @@
                                                        var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value));
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = pump.Code,
                                                                Color = grading.Color
@@ -2593,7 +2588,7 @@
                                                var grading = gradingList.Meet(valve.LinkStatus);
                                                if (grading != null)
                                                {
                                                    var result = new HydroGradingApplyResultViewModel()
                                                    var result = new HydroGradingResultViewModel()
                                                    {
                                                        Code = valve.Code,
                                                        Color = grading.Color
@@ -2616,7 +2611,7 @@
                                                        var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value));
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = valve.Code,
                                                                Color = grading.Color
@@ -2641,7 +2636,7 @@
                                                        var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value));
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = valve.Code,
                                                                Color = grading.Color
@@ -2666,7 +2661,7 @@
                                                        var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value));
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = valve.Code,
                                                                Color = grading.Color
@@ -2705,7 +2700,7 @@
                                                        var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuFlow.Value));
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = pipe.Code,
                                                                Color = grading.Color
@@ -2730,7 +2725,7 @@
                                                        var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuVelocity.Value));
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = pipe.Code,
                                                                Color = grading.Color
@@ -2755,7 +2750,7 @@
                                                        var grading = gradingList.Meet(Math.Abs(calcuLinkResult.CalcuHeadLoss.Value));
                                                        if (grading != null)
                                                        {
                                                            var result = new HydroGradingApplyResultViewModel()
                                                            var result = new HydroGradingResultViewModel()
                                                            {
                                                                Code = pipe.Code,
                                                                Color = grading.Color