duheng
2025-01-13 e7df5d1ece7ecabaa7a3943f24a6621649fdc455
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/07-matching/00-core/AssetsMatchingHelper.cs
@@ -1,10 +1,4 @@
using HStation.WinFrmUI.PhartRelation;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Linq;
using System.Windows.Input;
using Yw.WinFrmUI.Q3d;
namespace HStation.WinFrmUI
namespace HStation.WinFrmUI
{
    public class AssetsMatchingHelper
    {
@@ -237,9 +231,9 @@
            {
                // 尝试区间匹配
                var rangeMatch = AssetsPumpMainVmos.Where(item =>
                   (InputModel.RatedN.HasValue ? Math.Abs(InputModel.RatedN.Value - item.RatedSpeed) <= _speedTolerance : true) &&
                   (InputModel.RatedQ.HasValue ? Math.Abs(InputModel.RatedQ.Value - item.RatedFlow) <= _flowTolerance : true) &&
                   (InputModel.RatedH.HasValue ? Math.Abs(InputModel.RatedH.Value - item.RatedHead) <= _headTolerance : true) &&
                   (InputModel.RatedN > 0 ? Math.Abs(InputModel.RatedN - item.RatedSpeed) <= _speedTolerance : true) &&
                   (InputModel.RatedQ > 0 ? Math.Abs(InputModel.RatedQ - item.RatedFlow) <= _flowTolerance : true) &&
                   (InputModel.RatedH > 0 ? Math.Abs(InputModel.RatedH - item.RatedHead) <= _headTolerance : true) &&
                   (Math.Abs(InputModel.RatedP - item.RatedPower) <= _powerTolerance)).ToList();
                if (rangeMatch != null && rangeMatch.Count != 0)
                {
@@ -401,7 +395,6 @@
                    }
                }
            }
            var valve = dict.OrderBy(x => x.Value).LastOrDefault().Key;
            input.MatchingDbId = valve.ID.ToString();
            if (string.IsNullOrEmpty(input.ModelType))
@@ -426,30 +419,30 @@
            }
            if (input.CurveDbId == null)
            {
                var list = Task.Run(async () =>
                    await new BLL.PhartDiagramRelation().GetExByObjectTypeAndObjectID(HStation.Assets.DataType.ValveMain, valve.ID)).Result;
                if (list != null && list.Count > 0)
                {
                    var def = list.OrderByDescending(x => x.Importance).First();
                    input.MatchingCurveDbId = def.ID.ToString();
                    var curve = def.Diagram.GraphList[0].GetFeatPointList();
                    if (valve.ValveType == HStation.Assets.eValveType.GPV)
                /*    var list = Task.Run(async () =>
                        await new BLL.PhartDiagramRelation().GetExByObjectTypeAndObjectID(HStation.Assets.DataType.ValveMain, valve.ID)).Result;
                    if (list != null && list.Count > 0)
                    {
                        input.MatchingCurveQL = new List<HydroCurvePointViewModel>();
                        foreach (var item in curve)
                        var def = list.OrderByDescending(x => x.Importance).First();
                        input.MatchingCurveDbId = def.ID.ToString();
                        var curve = def.Diagram.GraphList[0].GetFeatPointList();
                        if (valve.ValveType == HStation.Assets.eValveType.GPV)
                        {
                            input.MatchingCurveQL.Add(new HydroCurvePointViewModel(item.X, item.Y));
                            input.MatchingCurveQL = new List<HydroCurvePointViewModel>();
                            foreach (var item in curve)
                            {
                                input.MatchingCurveQL.Add(new HydroCurvePointViewModel(item.X, item.Y));
                            }
                        }
                    }
                    else if (valve.ValveType == HStation.Assets.eValveType.TCV)
                    {
                        input.MatchingCurveOL = new List<HydroCurvePointViewModel>();
                        foreach (var item in curve)
                        else if (valve.ValveType == HStation.Assets.eValveType.TCV)
                        {
                            input.MatchingCurveOL.Add(new HydroCurvePointViewModel(item.X, item.Y));
                            input.MatchingCurveOL = new List<HydroCurvePointViewModel>();
                            foreach (var item in curve)
                            {
                                input.MatchingCurveOL.Add(new HydroCurvePointViewModel(item.X, item.Y));
                            }
                        }
                    }
                }
                    }*/
            }
            return true;
@@ -557,17 +550,14 @@
            {
                input.MatchingModelType = pipe.Name;
            }
            if (input.Roughness == 0)
            {
                input.MatchingRoughness = pipe.Hazen;
            }
            if (string.IsNullOrEmpty(input.Material))
            {
                input.MatchingMaterial = pipe.Material;
            }
            if (input.MinorLoss < 0)
            {
                input.MatchingMinorLoss = pipe.MinorLoss;
                input.MatchingMinorLoss = pipe.Hazen;
            }
            return true;
@@ -625,14 +615,14 @@
            //口径
            int caliberWeight = 1;
            if (input.Caliber.HasValue)
            if (input.Caliber > 0)
            {
                foreach (var item in threelinkVmos)
                {
                    if (item.Caliber.HasValue)
                    {
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber.Value);
                        dict[item] += diff / input.Caliber.Value * 100 * caliberWeight;
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber);
                        dict[item] += diff / input.Caliber * 100 * caliberWeight;
                    }
                }
            }
@@ -679,19 +669,16 @@
            {
                input.MatchingMaterial = threelink.Material;
            }
            if (!input.Caliber.HasValue || input.Caliber.Value <= 0)
            if (input.Caliber <= 0)
            {
                input.Caliber = threelink.Caliber;
                input.Caliber = threelink.Caliber ?? 0;
            }
            if (!input.MinorLoss.HasValue)
            {
                input.MatchingMinorLoss = threelink.MinorLoss;
            }
            if (!input.RunningThroughLoss.HasValue)
            if (input.RunningThroughLoss <= 0)
            {
                input.MatchingRunningThroughLoss = threelink.RunThroughMinorLoss;
            }
            if (!input.MatchingBranchThroughLoss.HasValue)
            if (input.MatchingBranchThroughLoss <= 0)
            {
                input.MatchingBranchThroughLoss = threelink.BranchThroughMinorLoss;
            }
@@ -751,14 +738,14 @@
            //口径
            int caliberWeight = 1;
            if (input.Caliber.HasValue)
            if (input.Caliber > 0)
            {
                foreach (var item in fourLinkVmos)
                {
                    if (item.Caliber.HasValue)
                    {
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber.Value);
                        dict[item] += diff / input.Caliber.Value * 100 * caliberWeight;
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber);
                        dict[item] += diff / input.Caliber * 100 * caliberWeight;
                    }
                }
            }
@@ -805,11 +792,11 @@
            {
                input.MatchingMaterial = fourlink.Material;
            }
            if (!input.Caliber.HasValue || input.Caliber.Value <= 0)
            if (input.Caliber <= 0)
            {
                input.Caliber = fourlink.Caliber;
                input.Caliber = fourlink.Caliber ?? 0;
            }
            if (!input.MinorLoss.HasValue)
            if (input.MinorLoss <= 0)
            {
                input.MatchingMinorLoss = fourlink.MinorLoss;
            }
@@ -869,14 +856,14 @@
            //口径
            int caliberWeight = 1;
            if (input.Caliber.HasValue)
            if (input.Caliber > 0)
            {
                foreach (var item in sprinklerVmos)
                {
                    if (item.Caliber.HasValue)
                    {
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber.Value);
                        dict[item] += diff / input.Caliber.Value * 100 * caliberWeight;
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber);
                        dict[item] += diff / input.Caliber * 100 * caliberWeight;
                    }
                }
            }
@@ -923,13 +910,13 @@
            {
                input.MatchingMaterial = sprinkler.Material;
            }
            if (!input.Caliber.HasValue || input.Caliber.Value <= 0)
            if (input.Caliber <= 0)
            {
                input.Caliber = sprinkler.Caliber;
                input.Caliber = sprinkler.Caliber ?? 0;
            }
            if (!input.MinorLoss.HasValue)
            if (input.MinorLoss <= 0)
            {
                input.MatchingMinorLoss = sprinkler.MinorLoss;
                input.MatchingMinorLoss = sprinkler.FlowMinorLoss;
            }
            return true;
@@ -1265,14 +1252,14 @@
            //口径
            int caliberWeight = 1;
            if (input.Caliber.HasValue)
            if (input.Caliber > 0)
            {
                foreach (var item in bluntheadVmos)
                {
                    if (item.Caliber.HasValue)
                    {
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber.Value);
                        dict[item] += diff / input.Caliber.Value * 100 * caliberWeight;
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber);
                        dict[item] += diff / input.Caliber * 100 * caliberWeight;
                    }
                }
            }
@@ -1319,9 +1306,9 @@
            {
                input.MatchingMaterial = blunthead.Material;
            }
            if (!input.Caliber.HasValue || input.Caliber.Value <= 0)
            if (input.Caliber <= 0)
            {
                input.Caliber = blunthead.Caliber;
                input.Caliber = blunthead.Caliber ?? 0;
            }
            if (input.MinorLoss < 0)
            {
@@ -1643,14 +1630,14 @@
            //口径
            int caliberWeight = 1;
            if (input.Caliber.HasValue)
            if (input.Caliber > 0)
            {
                foreach (var item in hydrantVmos)
                {
                    if (item.Caliber.HasValue)
                    {
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber.Value);
                        dict[item] += diff / input.Caliber.Value * 100 * caliberWeight;
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber);
                        dict[item] += diff / input.Caliber * 100 * caliberWeight;
                    }
                }
            }
@@ -1697,9 +1684,9 @@
            {
                input.MatchingMaterial = hydrant.Material;
            }
            if (!input.Caliber.HasValue || input.Caliber.Value <= 0)
            if (input.Caliber <= 0)
            {
                input.Caliber = hydrant.Caliber;
                input.Caliber = hydrant.Caliber ?? 0;
            }
            if (input.MinorLoss < 0)
            {
@@ -1791,8 +1778,10 @@
            {
                input.MatchingMaterial = elbow.Material;
            }
            if (!input.Caliber.HasValue)
            if (input.Caliber <= 0)
            {
                input.MatchingCaliber = elbow.Caliber;
            }
            return true;
        }
@@ -1981,10 +1970,6 @@
            {
                input.MatchingStartDiameter = translation.StartDiameter;
            }
            if (input.Diameter < 0)
            {
                input.MatchingDiameter = translation.Diameter;
            }
            return true;
        }
@@ -2041,14 +2026,14 @@
            //口径
            int caliberWeight = 1;
            if (input.Caliber.HasValue)
            if (input.Caliber > 0)
            {
                foreach (var item in allCoolingList)
                {
                    if (item.Caliber.HasValue)
                    {
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber.Value);
                        dict[item] += diff / input.Caliber.Value * 100 * caliberWeight;
                        var diff = Math.Abs(item.Caliber.Value - input.Caliber);
                        dict[item] += diff / input.Caliber * 100 * caliberWeight;
                    }
                }
            }
@@ -2095,9 +2080,9 @@
            {
                input.MatchingMaterial = cooling.Material;
            }
            if (!input.Caliber.HasValue || input.Caliber.Value <= 0)
            if (input.Caliber <= 0)
            {
                input.Caliber = cooling.Caliber;
                input.Caliber = cooling.Caliber ?? 0;
            }
            if (input.Coefficient <= 1)
            {