lixiaojun
2024-10-12 dd4fa076e58b00f46118928bbdaf38f7593544b4
WinFrmUI/HStation.WinFrmUI.Xhs.Core/00-core/AssetsMatchingHelper.cs
@@ -1,4 +1,5 @@
using HStation.WinFrmUI.PhartRelation;
using HStation.Vmo;
using HStation.WinFrmUI.PhartRelation;
namespace HStation.WinFrmUI
{
@@ -17,12 +18,19 @@
            bool IsMaching = false;
            var pumpMain = new BLL.PumpMain();
            var adaptingManage = new BLL.AdaptingManage();
            var pipeLineManage = new BLL.PipeLineManage();
            var pipeLineManage = new BLL.PipeMain();
            var valveMain = new BLL.ValveMain();
            var elbowMain = new BLL.ElbowMain();
            var threeLinkMain = new BLL.ThreeLinkMain();
            var fourLinkMain = new BLL.FourLinkMain();
            var allPump = await pumpMain.GetAll();
            var allAdapting = await adaptingManage.GetAll();
            var allPipeLine = await pipeLineManage.GetAll();
            var allValve = await valveMain.GetAll();
            var allElbow = await elbowMain.GetAll();
            var allThreeLink = await threeLinkMain.GetAll();
            var allFourLink = await fourLinkMain.GetAll();
            //泵匹配
            foreach (var item in assetsAutoMatchingView.PumpMatchingList)
            {
@@ -34,7 +42,7 @@
            //三通匹配
            foreach (var item in assetsAutoMatchingView.ThreelinkMatchingList)
            {
                if (MatchingThreelink(item, allAdapting))
                if (MatchingThreelink(item, allThreeLink))
                {
                    IsMaching = true;
                }
@@ -42,7 +50,7 @@
            //四通匹配
            foreach (var item in assetsAutoMatchingView.FourlinkMatchingList)
            {
                if (MatchingFourlink(item, allAdapting))
                if (MatchingFourlink(item, allFourLink))
                {
                    IsMaching = true;
                }
@@ -66,7 +74,7 @@
            //弯头匹配
            foreach (var item in assetsAutoMatchingView.ElbowMatchingList)
            {
                if (MatchingElbow(item, allAdapting))
                if (MatchingElbow(item, allElbow))
                {
                    IsMaching = true;
                }
@@ -77,6 +85,10 @@
        //泵匹配
        public static async Task<bool> MatchingPumps(PumpMatchingViewModel InputModel, List<Vmo.PumpMainVmo> pumpMainVmos)
        {
            if (pumpMainVmos == null)
            {
                return true;
            }
            Vmo.PumpMainVmo vmo = null;
            int startCount = 0;
            // 尝试绝对匹配
@@ -182,18 +194,22 @@
        //阀门匹配
        public static bool MatchingValve(ValveMatchingViewModel input, List<Vmo.ValveMainVmo> adaptingManageVmos)
        {
            if (adaptingManageVmos == null)
            {
                return true;
            }
            HStation.Vmo.ValveMainVmo vmo = null;
            int firstCount = 0;
            //口径最小差值
            // 绝对匹配
            var absoluteMatch = adaptingManageVmos.Where(i =>
              ((i.Caliber == null) || i.Caliber == input.Diameter) &&
               ((input.Material == null && i.Material == "默认") || i.Material == input.Material)).ToList();
               ((input.Material == null) || i.MaterialName == input.Material)).ToList();
            if (absoluteMatch.Any())
            {
                foreach (var range in absoluteMatch)
                {
                    int commonCount = GetIntersect(input.ModelType, range.Name);
                    int commonCount = GetIntersect(input.ModelType, range.KeyWord);
                    if (commonCount > firstCount)
                    {
                        vmo = range;
@@ -226,13 +242,13 @@
                    foreach (var range in rangeMatch)
                    {
                        //以材料为条件开始匹配
                        if (range.Material == "默认")
                        if (range.MaterialName == null)
                        {
                            materialList.Add(range);
                        }
                        else
                        {
                            int commonCount = GetIntersect(input.Material, range.Material);
                            int commonCount = GetIntersect(input.Material, range.MaterialName);
                            if (commonCount > firstCount)
                            {
                                materialList.Add(range);
@@ -244,7 +260,7 @@
                    firstCount = 0;
                    foreach (var material in materialList)
                    {
                        int commonCount = GetIntersect(input.ModelType, material.Name);
                        int commonCount = GetIntersect(input.ModelType, material.KeyWord);
                        if (commonCount > firstCount)
                        {
                            vmo = material;
@@ -259,7 +275,7 @@
            {
                foreach (var item in adaptingManageVmos)
                {
                    int commonCount = GetIntersect(input.ModelType, item.Name);
                    int commonCount = GetIntersect(input.ModelType, item.KeyWord);
                    if (commonCount > firstCount)
                    {
                        vmo = item;
@@ -272,30 +288,34 @@
                input.MatchingMinorLoss = vmo.Coefficient;
                input.MatchingDbId = vmo.ID.ToString();
                input.MatchingDiameter = vmo.Caliber;
                input.MatchingMaterial = vmo.Material;
                input.MatchingMaterial = vmo.MaterialName;
                input.MatchingModelType = vmo.Name;
                //  input.MatchingValveSetting =
                input.MatchingValveType = vmo.Type.ToString();
                input.MatchingValveType = vmo.SeriesType.ToString();
                return true;
            }
            return false;
        }
        //管道匹配
        public static bool MatchingPipe(PipeMatchingViewModel input, List<Vmo.PipeLineManageVmo> pipeLineManageVmos)
        public static bool MatchingPipe(PipeMatchingViewModel input, List<Vmo.PipeMainVmo> pipeLineManageVmos)
        {
            Vmo.PipeLineManageVmo vmo = null;
            if (pipeLineManageVmos == null)
            {
                return true;
            }
            Vmo.PipeMainVmo vmo = null;
            int StartCount = 0;
            //口径最小差值
            // 绝对匹配
            var absoluteMatch = pipeLineManageVmos.Where(i =>
            ((i.Caliber == null) || i.Caliber == input.Diameter) &&
               ((input.Material == null && i.Material == "默认") || i.Material == input.Material)).ToList();
               ((input.Material == null) || i.MaterialName == input.Material)).ToList();
            if (absoluteMatch.Any())
            {
                foreach (var range in absoluteMatch)
                {
                    int commonCount = GetIntersect(input.ModelType, range.Name);
                    int commonCount = GetIntersect(input.ModelType, range.KeyWord);
                    if (commonCount > StartCount)
                    {
                        vmo = range;
@@ -320,7 +340,7 @@
                    foreach (var range in rangeMatch)
                    {
                        //以材料为条件开始匹配
                        int commonCount = GetIntersect(input.Material, range.Material);
                        int commonCount = GetIntersect(input.Material, range.MaterialName);
                        if (commonCount > StartCount)
                        {
                            vmo = range;
@@ -334,7 +354,7 @@
            {
                foreach (var item in pipeLineManageVmos)
                {
                    int commonCount = GetIntersect(input.ModelType, item.Name);
                    int commonCount = GetIntersect(input.ModelType, item.KeyWord);
                    if (commonCount > StartCount)
                    {
                        vmo = item;
@@ -363,7 +383,7 @@
                        break;
                }
                input.MatchingDbId = vmo.ID.ToString();
                input.MatchingMaterial = vmo.Material;
                input.MatchingMaterial = vmo.MaterialName;
                input.MatchingModelType = vmo.Name;
                input.MatchingMinorLoss = vmo.Coefficient;
                return true;
@@ -372,20 +392,24 @@
        }
        //弯头匹配
        public static bool MatchingElbow(ElbowMatchingViewModel input, List<Vmo.AdaptingManageVmo> adaptingManageVmos)
        public static bool MatchingElbow(ElbowMatchingViewModel input, List<Vmo.ElbowMainVmo> adaptingManageVmos)
        {
            Vmo.AdaptingManageVmo vmo = null;
            if (adaptingManageVmos == null)
            {
                return true;
            }
            Vmo.ElbowMainVmo vmo = null;
            int firstCount = 0;
            //口径最小差值
            // 绝对匹配
            var absoluteMatch = adaptingManageVmos.Where(i =>
              ((input.Caliber == null && i.Caliber == null) || i.Caliber == input.Caliber) &&
               ((input.Material == null && i.Material == "默认") || i.Material == input.Material)).ToList();
               ((input.Material == null) || i.MaterialName == input.Material)).ToList();
            if (absoluteMatch.Any())
            {
                foreach (var range in absoluteMatch)
                {
                    int commonCount = GetIntersect(input.ModelType, range.Name);
                    int commonCount = GetIntersect(input.ModelType, range.KeyWord);
                    if (commonCount > firstCount)
                    {
                        vmo = range;
@@ -414,17 +438,17 @@
             .ToList();
                if (rangeMatch != null && rangeMatch.Count > 0)
                {
                    var materialList = new List<Vmo.AdaptingManageVmo>();
                    var materialList = new List<Vmo.ElbowMainVmo>();
                    foreach (var range in rangeMatch)
                    {
                        //以材料为条件开始匹配
                        if (range.Material == "默认")
                        if (range.MaterialName == null)
                        {
                            materialList.Add(range);
                        }
                        else
                        {
                            int commonCount = GetIntersect(input.Material, range.Material);
                            int commonCount = GetIntersect(input.Material, range.MaterialName);
                            if (commonCount > firstCount)
                            {
                                materialList.Add(range);
@@ -436,7 +460,7 @@
                    firstCount = 0;
                    foreach (var material in materialList)
                    {
                        int commonCount = GetIntersect(input.ModelType, material.Name);
                        int commonCount = GetIntersect(input.ModelType, material.KeyWord);
                        if (commonCount > firstCount)
                        {
                            vmo = material;
@@ -463,7 +487,7 @@
            {
                input.MatchingMinorLoss = vmo.Coefficient;
                input.MatchingDbId = vmo.ID.ToString();
                input.MatchingMaterial = vmo.Material;
                input.MatchingMaterial = vmo.MaterialName;
                input.MatchingModelType = vmo.Name;
                return true;
            }
@@ -471,15 +495,19 @@
        }
        //三通匹配
        public static bool MatchingThreelink(ThreelinkMatchingViewModel input, List<Vmo.AdaptingManageVmo> adaptingManageVmos)
        public static bool MatchingThreelink(ThreelinkMatchingViewModel input, List<Vmo.ThreeLinkMainVmo> adaptingManageVmos)
        {
            Vmo.AdaptingManageVmo vmo = null;
            if (adaptingManageVmos == null)
            {
                return true;
            }
            Vmo.ThreeLinkMainVmo vmo = null;
            int firstCount = 0;
            //口径最小差值
            // 绝对匹配
            var absoluteMatch = adaptingManageVmos.Where(i =>
              ((input.Caliber == null && i.Caliber == null) || i.Caliber == input.Caliber) &&
               ((input.Material == null && i.Material == "默认") || i.Material == input.Material)).ToList();
               ((input.Material == null) || i.MaterialName == input.Material)).ToList();
            if (absoluteMatch.Any())
            {
                foreach (var range in absoluteMatch)
@@ -513,17 +541,17 @@
             .ToList();
                if (rangeMatch != null && rangeMatch.Count > 0)
                {
                    var materialList = new List<Vmo.AdaptingManageVmo>();
                    var materialList = new List<Vmo.ThreeLinkMainVmo>();
                    foreach (var range in rangeMatch)
                    {
                        //以材料为条件开始匹配
                        if (range.Material == "默认")
                        if (range.MaterialName == null)
                        {
                            materialList.Add(range);
                        }
                        else
                        {
                            int commonCount = GetIntersect(input.Material, range.Material);
                            int commonCount = GetIntersect(input.Material, range.MaterialName);
                            if (commonCount > firstCount)
                            {
                                materialList.Add(range);
@@ -562,7 +590,7 @@
            {
                input.MatchingMinorLoss = vmo.Coefficient;
                input.MatchingDbId = vmo.ID.ToString();
                input.MatchingMaterial = vmo.Material;
                input.MatchingMaterial = vmo.MaterialName;
                input.MatchingModelType = vmo.Name;
                return true;
            }
@@ -570,15 +598,19 @@
        }
        //四通匹配
        public static bool MatchingFourlink(FourlinkMatchingViewModel input, List<Vmo.AdaptingManageVmo> adaptingManageVmos)
        public static bool MatchingFourlink(FourlinkMatchingViewModel input, List<Vmo.FourLinkMainVmo> adaptingManageVmos)
        {
            Vmo.AdaptingManageVmo vmo = null;
            if (adaptingManageVmos == null)
            {
                return true;
            }
            Vmo.FourLinkMainVmo vmo = null;
            int firstCount = 0;
            //口径最小差值
            // 绝对匹配
            var absoluteMatch = adaptingManageVmos.Where(i =>
              ((input.Caliber == null && i.Caliber == null) || i.Caliber == input.Caliber) &&
               ((input.Material == null && i.Material == "默认") || i.Material == input.Material)).ToList();
               ((input.Material == null) || i.MaterialName == input.Material)).ToList();
            if (absoluteMatch.Any())
            {
                foreach (var range in absoluteMatch)
@@ -612,17 +644,17 @@
             .ToList();
                if (rangeMatch != null && rangeMatch.Count > 0)
                {
                    var materialList = new List<Vmo.AdaptingManageVmo>();
                    var materialList = new List<Vmo.FourLinkMainVmo>();
                    foreach (var range in rangeMatch)
                    {
                        //以材料为条件开始匹配
                        if (range.Material == "默认")
                        if (range.MaterialName == null)
                        {
                            materialList.Add(range);
                        }
                        else
                        {
                            int commonCount = GetIntersect(input.Material, range.Material);
                            int commonCount = GetIntersect(input.Material, range.MaterialName);
                            if (commonCount > firstCount)
                            {
                                materialList.Add(range);
@@ -649,7 +681,7 @@
            {
                foreach (var item in adaptingManageVmos)
                {
                    int commonCount = GetIntersect(input.ModelType, item.Name);
                    int commonCount = GetIntersect(input.ModelType, item.KeyWord);
                    if (commonCount > firstCount)
                    {
                        vmo = item;
@@ -661,28 +693,12 @@
            {
                input.MatchingMinorLoss = vmo.Coefficient;
                input.MatchingDbId = vmo.ID.ToString();
                input.MatchingMaterial = vmo.Material;
                input.MatchingMaterial = vmo.MaterialName;
                input.MatchingModelType = vmo.Name;
                return true;
            }
            return false;
        }
        /*
                //返回两个字符串之间相同的字符个数
                private static int GetIntersect(string baseString, string compareString)
                {
                    // 将字符串转换为字符集合
                    if (baseString == string.Empty || baseString == null || compareString == string.Empty || compareString == null)
                    {
                        return 0;
                    }
                    HashSet<char> baseChars = new HashSet<char>(baseString);
                    HashSet<char> comparisonChars = new HashSet<char>(compareString);
                    // 计算两个集合的交集
                    int commonCount = baseChars.Intersect(comparisonChars).Count();
                    return commonCount;
                }*/
        /// <summary>
        /// 获取两个字符串的所有交集