| | |
| | | using HStation.Vmo; |
| | | using HStation.WinFrmUI.PhartRelation; |
| | | using System.Windows.Input; |
| | | using HStation.WinFrmUI.PhartRelation; |
| | | |
| | | namespace HStation.WinFrmUI |
| | | { |
| | |
| | | private const int _angle = 1;//角度范围 |
| | | |
| | | //资产自动匹配 |
| | | public static bool Matching(AssetsMatchingViewModel assetsAutoMatchingView, out string Error) |
| | | public static bool Matching(HydroMatchingViewModel assetsAutoMatchingView, out string Error) |
| | | { |
| | | Error = string.Empty; |
| | | bool IsMaching = false; |
| | | var AssetsPumpMain = new BLL.AssetsPumpMain(); |
| | | var adaptingManage = new BLL.AdaptingManage(); |
| | | var AdaptingManage = new BLL.AdaptingManage(); |
| | | var pipeLineManage = new BLL.AssetsPipeMain(); |
| | | var AssetsValveMain = new BLL.AssetsValveMain(); |
| | | var AssetsElbowMain = new BLL.AssetsElbowMain(); |
| | | var AssetsThreelinkMain = new BLL.AssetsThreelinkMain(); |
| | | var AssetsFourlinkMain = new BLL.AssetsFourlinkMain(); |
| | | var AssetsSprinkler = new BLL.AssetsSprinklerMain(); |
| | | var AssetsExchanger = new BLL.AssetsExchangerMain(); |
| | | var AssetsCompressorMain = new BLL.AssetsCompressorMain(); |
| | | var AssetsBluntheadMain = new BLL.AssetsBluntheadMain(); |
| | | var AssetsTankMain = new BLL.AssetsTankMain(); |
| | | var AssetsMeterMain = new BLL.AssetsMeterMain(); |
| | | var AssetsFlowmeterMain = new BLL.AssetsFlowmeterMain(); |
| | | var AssetsHydrantMain = new BLL.AssetsHydrantMain(); |
| | | var AssetsPressmeterMain = new BLL.AssetsPressmeterMain(); |
| | | var AssetsTranslationMain = new BLL.AssetsTranslationMain(); |
| | | try |
| | | { |
| | | var allPump = Task.Run(async () => await AssetsPumpMain.GetAll()).Result; |
| | | var allAdapting = Task.Run(async () => await adaptingManage.GetAll()).Result; |
| | | // var allAdapting = Task.Run(async () => await adaptingManage.GetAll()).Result; |
| | | var allPipeLine = Task.Run(async () => await pipeLineManage.GetAll()).Result; |
| | | var allValve = Task.Run(async () => await AssetsValveMain.GetAll()).Result; |
| | | var allElbow = Task.Run(async () => await AssetsElbowMain.GetAll()).Result; |
| | | var allThreeLink = Task.Run(async () => await AssetsThreelinkMain.GetAll()).Result; |
| | | var allFourLink = Task.Run(async () => await AssetsFourlinkMain.GetAll()).Result; |
| | | var allSprinkler = Task.Run(async () => await AssetsSprinkler.GetAll()).Result; |
| | | var allExchanger = Task.Run(async () => await AssetsExchanger.GetAll()).Result; |
| | | var allCompressorMain = Task.Run(async () => await AssetsCompressorMain.GetAll()).Result; |
| | | var allBluntheadMain = Task.Run(async () => await AssetsBluntheadMain.GetAll()).Result; |
| | | var allTankMain = Task.Run(async () => await AssetsTankMain.GetAll()).Result; |
| | | var allMeterMain = Task.Run(async () => await AssetsMeterMain.GetAll()).Result; |
| | | var allFlowmeterMain = Task.Run(async () => await AssetsFlowmeterMain.GetAll()).Result; |
| | | var allHydrantMain = Task.Run(async () => await AssetsHydrantMain.GetAll()).Result; |
| | | var allPressmeterMain = Task.Run(async () => await AssetsPressmeterMain.GetAll()).Result; |
| | | var allTranslationMain = Task.Run(async () => await AssetsTranslationMain.GetAll()).Result; |
| | | //泵匹配 |
| | | foreach (var item in assetsAutoMatchingView.PumpMatchingList) |
| | | foreach (var item in assetsAutoMatchingView.Pumps) |
| | | { |
| | | if (MatchingPumps(item, allPump)) |
| | | { |
| | |
| | | } |
| | | } |
| | | //三通匹配 |
| | | foreach (var item in assetsAutoMatchingView.ThreelinkMatchingList) |
| | | foreach (var item in assetsAutoMatchingView.Threelinks) |
| | | { |
| | | if (MatchingThreelink(item, allThreeLink)) |
| | | { |
| | |
| | | } |
| | | } |
| | | //四通匹配 |
| | | foreach (var item in assetsAutoMatchingView.FourlinkMatchingList) |
| | | foreach (var item in assetsAutoMatchingView.Fourlinks) |
| | | { |
| | | if (MatchingFourlink(item, allFourLink)) |
| | | { |
| | |
| | | } |
| | | } |
| | | //管道匹配 |
| | | foreach (var item in assetsAutoMatchingView.PipeMatchingList) |
| | | foreach (var item in assetsAutoMatchingView.Pipes) |
| | | { |
| | | if (MatchingPipe(item, allPipeLine)) |
| | | { |
| | |
| | | } |
| | | } |
| | | //阀门匹配 |
| | | foreach (var item in assetsAutoMatchingView.ValveMatchingList) |
| | | foreach (var item in assetsAutoMatchingView.Valves) |
| | | { |
| | | if (MatchingValve(item, allValve)) |
| | | { |
| | |
| | | } |
| | | } |
| | | //弯头匹配 |
| | | foreach (var item in assetsAutoMatchingView.ElbowMatchingList) |
| | | foreach (var item in assetsAutoMatchingView.Elbows) |
| | | { |
| | | if (MatchingElbow(item, allElbow)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //喷头匹配 |
| | | foreach (var item in assetsAutoMatchingView.Nozzles) |
| | | { |
| | | if (MatchingSprinkler(item, allSprinkler)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //闷头匹配 |
| | | foreach (var item in assetsAutoMatchingView.Bluntheads) |
| | | { |
| | | if (MatchingBlunthead(item, allBluntheadMain)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //换热器匹配 |
| | | foreach (var item in assetsAutoMatchingView.Exchangers) |
| | | { |
| | | if (MatchingExchanger(item, allExchanger)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //压缩机匹配 |
| | | foreach (var item in assetsAutoMatchingView.Compressors) |
| | | { |
| | | if (MatchingCompressor(item, allCompressorMain)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //水池匹配 |
| | | foreach (var item in assetsAutoMatchingView.Tanks) |
| | | { |
| | | if (MatchingTank(item, allTankMain)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //水表匹配 |
| | | foreach (var item in assetsAutoMatchingView.Meters) |
| | | { |
| | | if (MatchingMeter(item, allMeterMain)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //流量计匹配 |
| | | foreach (var item in assetsAutoMatchingView.Flowmeters) |
| | | { |
| | | if (MatchingFlowmeter(item, allFlowmeterMain)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //消火栓匹配 |
| | | foreach (var item in assetsAutoMatchingView.Hydrants) |
| | | { |
| | | if (MatchingHydrant(item, allHydrantMain)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //压力表匹配 |
| | | foreach (var item in assetsAutoMatchingView.Pressmeters) |
| | | { |
| | | if (MatchingPressmeter(item, allPressmeterMain)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | | } |
| | | //过渡件匹配 |
| | | foreach (var item in assetsAutoMatchingView.Translations) |
| | | { |
| | | if (MatchingTranslation(item, allTranslationMain)) |
| | | { |
| | | IsMaching = true; |
| | | } |
| | |
| | | } |
| | | |
| | | //泵匹配 |
| | | public static bool MatchingPumps(PumpMatchingViewModel InputModel, List<Vmo.AssetsPumpMainVmo> AssetsPumpMainVmos) |
| | | public static bool MatchingPumps(HydroPumpMatchingViewModel InputModel, List<Vmo.AssetsPumpMainVmo> AssetsPumpMainVmos) |
| | | { |
| | | if (AssetsPumpMainVmos == null) |
| | | { |
| | |
| | | if (graph_qh != null) |
| | | { |
| | | var points_qh = PhartPerformCurveHelper.GetFeatPointList(graph_qh.GraphType, graph_qh.GeometryInfo, 100, null); |
| | | InputModel.MatchingCurveQH = new List<CurvePointMatchingViewModel>(); |
| | | InputModel.MatchingCurveQH = new List<HydroCurvePointViewModel>(); |
| | | foreach (var item in points_qh) |
| | | { |
| | | InputModel.MatchingCurveQH.Add(new CurvePointMatchingViewModel(item.X, item.Y)); |
| | | InputModel.MatchingCurveQH.Add(new HydroCurvePointViewModel(item.X, item.Y)); |
| | | } |
| | | } |
| | | if (graph_qe != null) |
| | | { |
| | | var points_qe = PhartPerformCurveHelper.GetFeatPointList(graph_qe.GraphType, graph_qe.GeometryInfo, 100, null); |
| | | InputModel.MatchingCurveQE = new List<CurvePointMatchingViewModel>(); |
| | | InputModel.MatchingCurveQE = new List<HydroCurvePointViewModel>(); |
| | | foreach (var item in points_qe) |
| | | { |
| | | InputModel.MatchingCurveQE.Add(new CurvePointMatchingViewModel(item.X, item.Y)); |
| | | InputModel.MatchingCurveQE.Add(new HydroCurvePointViewModel(item.X, item.Y)); |
| | | } |
| | | } |
| | | if (graph_qp != null) |
| | | { |
| | | var points_qp = PhartPerformCurveHelper.GetFeatPointList(graph_qp.GraphType, graph_qp.GeometryInfo, 100, null); |
| | | InputModel.MatchingCurveQP = new List<CurvePointMatchingViewModel>(); |
| | | InputModel.MatchingCurveQP = new List<HydroCurvePointViewModel>(); |
| | | foreach (var item in points_qp) |
| | | { |
| | | InputModel.MatchingCurveQP.Add(new CurvePointMatchingViewModel(item.X, item.Y)); |
| | | InputModel.MatchingCurveQP.Add(new HydroCurvePointViewModel(item.X, item.Y)); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | //阀门匹配 |
| | | public static bool MatchingValve(ValveMatchingViewModel input, List<Vmo.AssetsValveMainVmo> adaptingManageVmos) |
| | | public static bool MatchingValve(HydroValveMatchingViewModel input, List<Vmo.AssetsValveMainVmo> valveMainVmos) |
| | | { |
| | | if (adaptingManageVmos == null) |
| | | bool isNotarize = false; //是否确定 |
| | | if (valveMainVmos == null) |
| | | { |
| | | return true; |
| | | } |
| | | HStation.Vmo.AssetsValveMainVmo vmo = null; |
| | | //口径最小差值 |
| | | // 绝对匹配 |
| | | adaptingManageVmos = adaptingManageVmos.Where(x => x.ValveType == input.ValveType).ToList(); |
| | | valveMainVmos = valveMainVmos.Where(x => (int)x.ValveType == (int)input.ValveType).ToList(); |
| | | |
| | | var nameMatching = adaptingManageVmos.Where(x => |
| | | var nameMatching = valveMainVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | return false; |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = valveMainVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | return false; |
| | | vmo = valveMainVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = valveMainVmos.Where(i => |
| | | ((i.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - input.Diameter) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = valveMainVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = valveMainVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (input.CurveDbId == null) |
| | | { |
| | | if ((int)input.ValveType == (int)HStation.Assets.eValveType.GPV) |
| | | { |
| | | var curveList = Task.Run(async () => await new BLL.AssetsValveCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().MinorLossCurve); |
| | | input.MatchingCurveQL = pt_list; |
| | | } |
| | | } |
| | | else if ((int)vmo.ValveType == (int)HStation.Assets.eValveType.TCV) |
| | | { |
| | | var curveList = Task.Run(async () => await new BLL.AssetsValveCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().OpenLossCurve); |
| | | input.MatchingCurveOL = pt_list; |
| | | } |
| | | } |
| | | } |
| | | if (input.MinorLoss < 0) |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | } |
| | | if (!input.MatchingDiameter.HasValue) |
| | | input.MatchingDiameter = vmo.Caliber; |
| | | if (input.ValveSetting == null) |
| | | input.MatchingValveSetting = vmo.ValveSetting; |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingDiameter = vmo.Caliber; |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingValveSetting = vmo.ValveSetting; |
| | | input.MatchingValveType = (eValveType?)(int)vmo.ValveType; |
| | | if (vmo.ValveType == HStation.Assets.eValveType.GPV) |
| | | { |
| | | var curveList = Task.Run(async () => await new BLL.AssetsValveCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().MinorLossCurve); |
| | | input.MatchingCurveQL = pt_list; |
| | | } |
| | | } |
| | | else if (vmo.ValveType == HStation.Assets.eValveType.TCV) |
| | | { |
| | | var curveList = Task.Run(async () => await new BLL.AssetsValveCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().OpenLossCurve); |
| | | input.MatchingCurveOL = pt_list; |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //管道匹配 |
| | | public static bool MatchingPipe(HydroPipeMatchingViewModel input, List<Vmo.AssetsPipeMainVmo> pipeLineMainVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | if (pipeLineMainVmos == null) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsPipeMainVmo vmo = null; |
| | | |
| | | var nameMatching = pipeLineMainVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | ((i.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - input.Diameter) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = pipeLineMainVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = pipeLineMainVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = pipeLineMainVmos.Where(i => |
| | | ((i.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - input.Diameter) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = pipeLineMainVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = pipeLineMainVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.Material == null) |
| | | input.MatchingMaterial = vmo.Material; |
| | | if (input.MinorLoss < 0) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | switch (input.eAlgorithmType) |
| | | { |
| | | case eAlgorithmType.Hazen: |
| | | input.MatchingRoughness = vmo.Hazen; |
| | | break; |
| | | |
| | | case eAlgorithmType.Manning: |
| | | input.MatchingRoughness = vmo.Manning; |
| | | break; |
| | | |
| | | case eAlgorithmType.Darcy: |
| | | input.MatchingRoughness = vmo.Darcy; |
| | | break; |
| | | |
| | | default: |
| | | input.MatchingRoughness = vmo.Hazen; |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | switch (input.eAlgorithmType) |
| | | { |
| | | case eAlgorithmType.Hazen: |
| | | input.MatchingRoughness = vmo.Hazen; |
| | | break; |
| | | |
| | | case eAlgorithmType.Manning: |
| | | input.MatchingRoughness = vmo.Manning; |
| | | break; |
| | | |
| | | case eAlgorithmType.Darcy: |
| | | input.MatchingRoughness = vmo.Darcy; |
| | | break; |
| | | |
| | | default: |
| | | input.MatchingRoughness = vmo.Hazen; |
| | | break; |
| | | } |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //弯头匹配 |
| | | public static bool MatchingElbow(HydroElbowMatchingViewModel input, List<Vmo.AssetsElbowMainVmo> elbowMainVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | if (elbowMainVmos == null || input == null || elbowMainVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsElbowMainVmo vmo = null; |
| | | var nameMatching = elbowMainVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = elbowMainVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = elbowMainVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = elbowMainVmos.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = elbowMainVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = elbowMainVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (!input.MinorLoss.HasValue) |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | } |
| | | if (input.DbId == null) |
| | | { |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | } |
| | | if (input.Material == null) |
| | | { |
| | | input.MatchingMaterial = vmo.Material; |
| | | } |
| | | if (input.ModelType == null) |
| | | { |
| | | input.MatchingModelType = vmo.Material; |
| | | } |
| | | if (!input.ElbowType.HasValue) |
| | | { |
| | | input.MatchingElbowType = (eElbowType?)(int)vmo.ElbowType; |
| | | } |
| | | if (!input.BendingAngle.HasValue) |
| | | { |
| | | input.MatchingBendingAngle = vmo.Angle; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingElbowType = (eElbowType?)(int)vmo.ElbowType; |
| | | input.MatchingBendingAngle = vmo.Angle; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //三通匹配 |
| | | public static bool MatchingThreelink(HydroThreelinkMatchingViewModel input, List<Vmo.AssetsThreelinkMainVmo> threelinkVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | Vmo.AssetsThreelinkMainVmo vmo = null; |
| | | if (threelinkVmos == null || input == null || threelinkVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | var nameMatching = threelinkVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = threelinkVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = threelinkVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = threelinkVmos.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = threelinkVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = threelinkVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (!input.MinorLoss.HasValue) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (!input.RunningThroughLoss.HasValue) |
| | | input.MatchingRunningThroughLoss = vmo.RunThroughMinorLoss; |
| | | if (!input.MatchingBranchThroughLoss.HasValue) |
| | | input.MatchingRunningThroughLoss = vmo.BranchThroughMinorLoss; |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingRunningThroughLoss = vmo.RunThroughMinorLoss; |
| | | input.MatchingBranchThroughLoss = vmo.BranchThroughMinorLoss; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //四通匹配 |
| | | public static bool MatchingFourlink(HydroFourlinkMatchingViewModel input, List<Vmo.AssetsFourlinkMainVmo> fourLinkVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | if (fourLinkVmos == null || input == null || fourLinkVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsFourlinkMainVmo vmo = null; |
| | | var nameMatching = fourLinkVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = fourLinkVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = fourLinkVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = fourLinkVmos.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = fourLinkVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = fourLinkVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (!input.MinorLoss.HasValue) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.Material == null) |
| | | input.MatchingMaterial = vmo.Material; |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //喷头匹配 |
| | | public static bool MatchingSprinkler(HydroNozzleMatchingViewModel input, List<Vmo.AssetsSprinklerMainVmo> sprinklerVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | if (sprinklerVmos == null || input == null || sprinklerVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsSprinklerMainVmo vmo = null; |
| | | var nameMatching = sprinklerVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = sprinklerVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = sprinklerVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = sprinklerVmos.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = sprinklerVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = sprinklerVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (!input.MinorLoss.HasValue) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.Material == null) |
| | | input.MatchingMaterial = vmo.Material; |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //换热器匹配 |
| | | public static bool MatchingExchanger(HydroExchangerMatchingViewModel input, List<Vmo.AssetsExchangerMainVmo> exchangerVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | |
| | | if (exchangerVmos == null || input == null || exchangerVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsExchangerMainVmo vmo = null; |
| | | var nameMatching = exchangerVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = exchangerVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = exchangerVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = exchangerVmos.Where(i => |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = exchangerVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = exchangerVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (input.MinorLoss < 0) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.Material == null) |
| | | input.MatchingMaterial = vmo.Material; |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | if (input.CurveDbId == null) |
| | | { |
| | | var curveList = Task.Run(async () => await new BLL.AssetsExchangerCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().MinorLossCurve); |
| | | input.MatchingCurveQL = pt_list; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | var curveList = Task.Run(async () => await new BLL.AssetsExchangerCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().MinorLossCurve); |
| | | input.MatchingCurveQL = pt_list; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //空压机匹配 |
| | | public static bool MatchingCompressor(HydroCompressorMatchingViewModel input, List<Vmo.AssetsCompressorMainVmo> compressorVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | if (compressorVmos == null || input == null || compressorVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsCompressorMainVmo vmo = null; |
| | | var nameMatching = compressorVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = compressorVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = compressorVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = compressorVmos.Where(i => |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = compressorVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = compressorVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (input.MinorLoss < 0) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.Material == null) |
| | | input.MatchingMaterial = vmo.Material; |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | if (input.CurveDbId == null) |
| | | { |
| | | var curveList = Task.Run(async () => await new BLL.AssetsCompressorCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().MinorLossCurve); |
| | | input.MatchingCurveQL = pt_list; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | var curveList = Task.Run(async () => await new BLL.AssetsCompressorCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().MinorLossCurve); |
| | | input.MatchingCurveQL = pt_list; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //闷头匹配 |
| | | public static bool MatchingBlunthead(HydroBluntheadMatchingViewModel input, List<Vmo.AssetsBluntheadMainVmo> bluntheadVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | if (bluntheadVmos == null || input == null || bluntheadVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsBluntheadMainVmo vmo = null; |
| | | var nameMatching = bluntheadVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = bluntheadVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = bluntheadVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = bluntheadVmos.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = bluntheadVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = bluntheadVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (input.MinorLoss < 0) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.Material == null) |
| | | input.MatchingMaterial = vmo.Material; |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //水池匹配 |
| | | public static bool MatchingTank(HydroTankMatchingViewModel input, List<Vmo.AssetsTankMainVmo> tankVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | if (tankVmos == null || input == null || tankVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsTankMainVmo vmo = null; |
| | | var nameMatching = tankVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var defaultList = nameMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = tankVmos.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = tankVmos.First(); |
| | | } |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | vmo = tankVmos.First(); |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | if (input.DN < 0) |
| | | input.MatchingDN = vmo.DN; |
| | | if (input.MinLevel < 0) |
| | | input.MatchingMinLevel = vmo.MinLevel; |
| | | if (input.CurveDbId == null) |
| | | { |
| | | var curveList = Task.Run(async () => await new BLL.AssetsTankCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().VolCurve); |
| | | input.MatchingVolCurve = pt_list; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingDN = vmo.DN; |
| | | input.MatchingMinLevel = vmo.MinLevel; |
| | | input.MatchingOverFlow = vmo.OverFlow; |
| | | var curveList = Task.Run(async () => await new BLL.AssetsTankCoefficient().GetByMainID(vmo.ID)).Result; |
| | | if (curveList != null && curveList.Count > 0) |
| | | { |
| | | input.MatchingCurveDbId = curveList.First().ID.ToString(); |
| | | var pt_list = Yw.JsonHelper.Json2Object<List<HydroCurvePointViewModel>>(curveList.First().VolCurve); |
| | | input.MatchingVolCurve = pt_list; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //水表匹配 |
| | | public static bool MatchingMeter(HydroMeterMatchingViewModel input, List<Vmo.AssetsMeterMainVmo> MeterMainVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | Vmo.AssetsMeterMainVmo vmo = null; |
| | | if (MeterMainVmos == null || input == null || MeterMainVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | var nameMatching = MeterMainVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var defaultList = nameMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = MeterMainVmos.First(); |
| | | } |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | vmo = MeterMainVmos.First(); |
| | | |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (input.MinorLoss < 0) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //流量计匹配 |
| | | public static bool MatchingFlowmeter(HydroFlowmeterMatchingViewModel input, List<Vmo.AssetsFlowmeterMainVmo> FlowmeterMainVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | if (FlowmeterMainVmos == null || input == null || FlowmeterMainVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsFlowmeterMainVmo vmo = null; |
| | | var nameMatching = FlowmeterMainVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var defaultList = nameMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = FlowmeterMainVmos.First(); |
| | | } |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | vmo = FlowmeterMainVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (input.MinorLoss < 0) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //消火栓匹配 |
| | | public static bool MatchingHydrant(HydroHydrantMatchingViewModel input, List<Vmo.AssetsHydrantMainVmo> hydrantVmos) |
| | | { |
| | | bool isNotarize = false; //是否确定 |
| | | if (hydrantVmos == null || input == null || hydrantVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsHydrantMainVmo vmo = null; |
| | | var nameMatching = hydrantVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = hydrantVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = hydrantVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = adaptingManageVmos.Where(i => |
| | | ((i.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - input.Diameter) <= _caliberTolerance) && //直径约束 |
| | | var absoluteMatching = hydrantVmos.Where(i => |
| | | ((i.Caliber == null || input.Caliber == null) || Math.Abs(Convert.ToInt64(i.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) && //直径约束 |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | return false; |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = hydrantVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | return false; |
| | | vmo = hydrantVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingDiameter = vmo.Caliber; |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingValveSetting = vmo.ValveSetting; |
| | | input.MatchingValveType = vmo.ValveType; |
| | | if (vmo.ValveType == HStation.Assets.eValveType.GPV) |
| | | if (!isNotarize) |
| | | { |
| | | var list = Task.Run(async () => await new BLL.XhsPumpMainPhartMappingExtensions().GetByPumpMainID(vmo.ID)).Result; |
| | | if (list != null && list.Count > 0) |
| | | { |
| | | var maxImportanceItem = list.OrderByDescending(x => x.Importance).First(); |
| | | input.MatchingCurveDbId = maxImportanceItem.ID.ToString(); |
| | | var graph_ql = maxImportanceItem.Diagram.GraphList.Find(x => x.GraphType == HStation.PhartRelation.eGraphType.ValveQL); |
| | | var graph_ol = maxImportanceItem.Diagram.GraphList.Find(x => x.GraphType == HStation.PhartRelation.eGraphType.ValveOL); |
| | | if (graph_ql != null) |
| | | { |
| | | var points_qh = PhartPerformCurveHelper.GetFeatPointList(graph_ql.GraphType, graph_ql.GeometryInfo, 100, null); |
| | | input.MatchingCurveQL = new List<CurvePointMatchingViewModel>(); |
| | | foreach (var item in points_qh) |
| | | { |
| | | input.MatchingCurveQL.Add(new CurvePointMatchingViewModel(item.X, item.Y)); |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | else if (vmo.ValveType == HStation.Assets.eValveType.TCV) |
| | | { |
| | | var list = Task.Run(async () => await new BLL.XhsPumpMainPhartMappingExtensions().GetByPumpMainID(vmo.ID)).Result; |
| | | if (list != null && list.Count > 0) |
| | | { |
| | | var maxImportanceItem = list.OrderByDescending(x => x.Importance).First(); |
| | | input.MatchingCurveDbId = maxImportanceItem.ID.ToString(); |
| | | var graph_ol = maxImportanceItem.Diagram.GraphList.Find(x => x.GraphType == HStation.PhartRelation.eGraphType.ValveOL); |
| | | if (graph_ol != null) |
| | | { |
| | | var points_qh = PhartPerformCurveHelper.GetFeatPointList(graph_ol.GraphType, graph_ol.GeometryInfo, 100, null); |
| | | input.MatchingCurveOL = new List<CurvePointMatchingViewModel>(); |
| | | foreach (var item in points_qh) |
| | | { |
| | | input.MatchingCurveOL.Add(new CurvePointMatchingViewModel(item.X, item.Y)); |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //管道匹配 |
| | | public static bool MatchingPipe(PipeMatchingViewModel input, List<Vmo.AssetsPipeMainVmo> pipeLineManageVmos) |
| | | { |
| | | if (pipeLineManageVmos == null) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsPipeMainVmo vmo = null; |
| | | int firstCount = 0; |
| | | //口径最小差值 |
| | | // 绝对匹配 |
| | | var absoluteMatch = pipeLineManageVmos.Where(i => |
| | | ((i.Caliber == null) || i.Caliber == input.Diameter) && |
| | | ((input.Material == null) || i.MaterialName == input.Material)).ToList(); |
| | | if (absoluteMatch.Count > 1) |
| | | { |
| | | } |
| | | else if (absoluteMatch.Count == 1) |
| | | { |
| | | vmo = absoluteMatch.First(); |
| | | } |
| | | else |
| | | { |
| | | //区间匹配 |
| | | var rangeMatch = pipeLineManageVmos |
| | | .Where(item => |
| | | item.Caliber == null || |
| | | Math.Abs(Convert.ToInt64(item.Caliber) - Convert.ToInt64(input.Diameter)) <= _caliberTolerance) |
| | | .ToList(); |
| | | if (rangeMatch != null) |
| | | { |
| | | var materialList = new List<Vmo.AssetsPipeMainVmo>(); |
| | | foreach (var range in rangeMatch) |
| | | { |
| | | //以材料为条件开始匹配 |
| | | if (range.MaterialName == null) |
| | | { |
| | | materialList.Add(range); |
| | | } |
| | | else |
| | | { |
| | | int commonCount = GetIntersect(input.Material, range.MaterialName); |
| | | if (commonCount > firstCount) |
| | | { |
| | | materialList.Add(range); |
| | | firstCount = commonCount; |
| | | } |
| | | } |
| | | } |
| | | firstCount = 0; |
| | | if (materialList.Count < 1) |
| | | return false; |
| | | var allMatchingList = materialList |
| | | .Where(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType) >= 2) |
| | | .OrderByDescending(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType)) |
| | | .ToList();//找出相同字符在2以上并且进行排序 |
| | | if (allMatchingList.Count < 1) |
| | | return false;//通过型号名没有找到,则视为没有匹配到 |
| | | foreach (var item in allMatchingList) |
| | | { |
| | | if (item.IsDefault) |
| | | { |
| | | vmo = item; |
| | | } |
| | | } |
| | | vmo = allMatchingList.First();//如果没有设置默认值,则默认返回匹配字符最多的一条数据 |
| | | } |
| | | } |
| | | //口径和材料都没有匹配上,就用型号名匹配 |
| | | if (vmo != null) |
| | | { |
| | | switch (input.eAlgorithmType) |
| | | { |
| | | case HStation.Assets.eAlgorithmType.Hazen: |
| | | input.MatchingRoughness = vmo.Hazen; |
| | | break; |
| | | |
| | | case HStation.Assets.eAlgorithmType.Manning: |
| | | input.MatchingRoughness = vmo.Manning; |
| | | break; |
| | | |
| | | case HStation.Assets.eAlgorithmType.Darcy: |
| | | input.MatchingRoughness = vmo.Darcy; |
| | | break; |
| | | |
| | | default: |
| | | input.MatchingRoughness = vmo.Hazen; |
| | | break; |
| | | } |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.MaterialName; |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingMinorLoss = vmo.Coefficient; |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //弯头匹配 |
| | | public static bool MatchingElbow(ElbowMatchingViewModel input, List<Vmo.AssetsElbowMainVmo> adaptingManageVmos) |
| | | { |
| | | if (adaptingManageVmos == null) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsElbowMainVmo 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 == input.Material)).ToList(); |
| | | if (absoluteMatch.Count > 1) |
| | | { |
| | | var allMatchingList = absoluteMatch |
| | | .Where(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType) >= 2) |
| | | .OrderByDescending(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType)) |
| | | .ToList();//找出相同字符在2以上并且进行排序 |
| | | if (allMatchingList.Count < 1) |
| | | return false;//通过型号名没有找到,则视为没有匹配到 |
| | | foreach (var item in allMatchingList) |
| | | { |
| | | if (item.IsDefault) |
| | | { |
| | | vmo = item; |
| | | } |
| | | } |
| | | vmo = allMatchingList.First();//如果没有设置默认值,则默认返回匹配字符最多的一条数据 |
| | | } |
| | | else if (absoluteMatch.Count == 1) |
| | | { |
| | | vmo = absoluteMatch.First(); |
| | | if (input.MinorLoss < 0) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | else |
| | | { |
| | | //区间匹配 |
| | | var rangeMatch = adaptingManageVmos |
| | | .Where(item => |
| | | (input.Caliber == null && input.Caliber == null) |
| | | || (item.Caliber.HasValue && input.Caliber.HasValue) && //存在值,则进行下面差值判断 |
| | | Math.Abs(Convert.ToInt64(item.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance |
| | | || item.ElbowLengthType == input.ElbowLengthType |
| | | || (item.Angle.HasValue && input.Angle.HasValue) && //存在值,则进行下面差值判断 |
| | | Math.Abs(Convert.ToInt64(item.Angle) - Convert.ToInt64(input.Angle)) <= _angle) |
| | | .ToList(); |
| | | if (rangeMatch != null && rangeMatch.Count > 0) |
| | | { |
| | | var materialList = new List<Vmo.AssetsElbowMainVmo>(); |
| | | foreach (var range in rangeMatch) |
| | | { |
| | | //以材料为条件开始匹配 |
| | | if (range.Material == null) |
| | | { |
| | | materialList.Add(range); |
| | | } |
| | | else |
| | | { |
| | | int commonCount = GetIntersect(input.Material, range.Material); |
| | | if (commonCount > firstCount) |
| | | { |
| | | materialList.Add(range); |
| | | firstCount = commonCount; |
| | | } |
| | | } |
| | | } |
| | | //用已经筛选完成的列表中以名称筛选 |
| | | firstCount = 0; |
| | | if (materialList.Count < 1) |
| | | return false; |
| | | var allMatchingList = materialList |
| | | .Where(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType) >= 2) |
| | | .OrderByDescending(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType)) |
| | | .ToList();//找出相同字符在2以上并且进行排序 |
| | | if (allMatchingList.Count < 1) |
| | | return false;//通过型号名没有找到,则视为没有匹配到 |
| | | foreach (var item in allMatchingList) |
| | | { |
| | | if (item.IsDefault) |
| | | { |
| | | vmo = item; |
| | | } |
| | | } |
| | | vmo = allMatchingList.First();//如果没有设置默认值,则默认返回匹配字符最多的一条数据 |
| | | } |
| | | } |
| | | //精确匹配和粗糙匹配都没有匹配到就返回错误 |
| | | firstCount = 0; |
| | | if (vmo != null) |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingConnectionLength = vmo.ElbowLengthType; |
| | | input.MatchingAngle = vmo.Angle; |
| | | return true; |
| | | }*/ |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //三通匹配 |
| | | public static bool MatchingThreelink(ThreelinkMatchingViewModel input, List<Vmo.AssetsThreelinkMainVmo> adaptingManageVmos) |
| | | //压力表匹配 |
| | | public static bool MatchingPressmeter(HydroPressmeterMatchingViewModel input, List<Vmo.AssetsPressmeterMainVmo> pressmeterVmos) |
| | | { |
| | | if (adaptingManageVmos == null) |
| | | bool isNotarize = false; //是否确定 |
| | | if (pressmeterVmos == null || input == null || pressmeterVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsThreelinkMainVmo vmo = null; |
| | | int firstCount = 0; |
| | | // 绝对匹配 |
| | | var absoluteMatch = adaptingManageVmos.Where(i => |
| | | ((input.Caliber == null && i.Caliber == null) || i.Caliber == input.Caliber) && |
| | | ((input.Material == null) || i.MaterialName == input.Material)).ToList(); |
| | | if (absoluteMatch.Count > 1) |
| | | Vmo.AssetsPressmeterMainVmo vmo = null; |
| | | var nameMatching = pressmeterVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var allMatchingList = absoluteMatch |
| | | .Where(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType) >= 2) |
| | | .OrderByDescending(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType)) |
| | | .ToList();//找出相同字符在2以上并且进行排序 |
| | | if (allMatchingList.Count < 1) |
| | | return false;//通过型号名没有找到,则视为没有匹配到 |
| | | foreach (var item in allMatchingList) |
| | | var defaultList = nameMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | if (item.IsDefault) |
| | | { |
| | | vmo = item; |
| | | } |
| | | vmo = pressmeterVmos.First(); |
| | | } |
| | | vmo = allMatchingList.First();//如果没有设置默认值,则默认返回匹配字符最多的一条数据 |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = pressmeterVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatch.Count == 1) |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | vmo = absoluteMatch.First(); |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | //区间匹配 |
| | | var rangeMatch = adaptingManageVmos |
| | | .Where(item => |
| | | input.Caliber == null || |
| | | item.Caliber == null || |
| | | Math.Abs(Convert.ToInt64(item.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) |
| | | .ToList(); |
| | | if (rangeMatch != null && rangeMatch.Count > 0) |
| | | { |
| | | var materialList = new List<Vmo.AssetsThreelinkMainVmo>(); |
| | | foreach (var range in rangeMatch) |
| | | { |
| | | //以材料为条件开始匹配 |
| | | if (range.MaterialName == null) |
| | | { |
| | | materialList.Add(range); |
| | | } |
| | | else |
| | | { |
| | | int commonCount = GetIntersect(input.Material, range.MaterialName); |
| | | if (commonCount > firstCount) |
| | | { |
| | | materialList.Add(range); |
| | | firstCount = commonCount; |
| | | } |
| | | } |
| | | } |
| | | //用已经筛选完成的列表中以名称筛选 |
| | | firstCount = 0; |
| | | if (materialList.Count < 1) |
| | | return false; |
| | | var allMatchingList = materialList |
| | | .Where(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType) >= 2) |
| | | .OrderByDescending(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType)) |
| | | .ToList();//找出相同字符在2以上并且进行排序 |
| | | if (allMatchingList.Count < 1) |
| | | return false;//通过型号名没有找到,则视为没有匹配到 |
| | | foreach (var item in allMatchingList) |
| | | { |
| | | if (item.IsDefault) |
| | | { |
| | | vmo = item; |
| | | } |
| | | } |
| | | vmo = allMatchingList.First();//如果没有设置默认值,则默认返回匹配字符最多的一条数据 |
| | | } |
| | | vmo = pressmeterVmos.First(); |
| | | } |
| | | //精确匹配和粗糙匹配都没有匹配到就返回错误 |
| | | firstCount = 0; |
| | | if (vmo != null) |
| | | { |
| | | input.MatchingMinorLoss = vmo.Coefficient; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.MaterialName; |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingRunThroughCoefficient = vmo.RunThroughCoefficient; |
| | | input.MatchingBranchThroughCoefficient = vmo.BranchThroughCoefficient; |
| | | if (!isNotarize) |
| | | { |
| | | if (input.MinorLoss < 0) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingModelType = vmo.Name; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //四通匹配 |
| | | public static bool MatchingFourlink(FourlinkMatchingViewModel input, List<Vmo.AssetsFourlinkMainVmo> adaptingManageVmos) |
| | | //过渡件匹配 |
| | | public static bool MatchingTranslation(HydroTranslationMatchingViewModel input, List<Vmo.AssetsTranslationMainVmo> translationVmos) |
| | | { |
| | | /* if (adaptingManageVmos == null) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsFourlinkMainVmo 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 == input.Material)).ToList(); |
| | | if (absoluteMatch.Count > 1) |
| | | { |
| | | var allMatchingList = absoluteMatch |
| | | .Where(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType) >= 2) |
| | | .OrderByDescending(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType)) |
| | | .ToList();//找出相同字符在2以上并且进行排序 |
| | | if (allMatchingList.Count < 1) |
| | | return false;//通过型号名没有找到,则视为没有匹配到 |
| | | foreach (var item in allMatchingList) |
| | | { |
| | | } |
| | | vmo = allMatchingList.First();//如果没有设置默认值,则默认返回匹配字符最多的一条数据 |
| | | } |
| | | else if (absoluteMatch.Count == 1) |
| | | { |
| | | vmo = absoluteMatch.First(); |
| | | } |
| | | else |
| | | { |
| | | //区间匹配 |
| | | var rangeMatch = adaptingManageVmos |
| | | .Where(item => |
| | | input.Caliber == null || |
| | | item.Caliber == null || |
| | | Math.Abs(Convert.ToInt64(item.Caliber) - Convert.ToInt64(input.Caliber)) <= _caliberTolerance) |
| | | .ToList(); |
| | | if (rangeMatch != null && rangeMatch.Count > 0) |
| | | { |
| | | var materialList = new List<Vmo.AssetsFourlinkMainVmo>(); |
| | | foreach (var range in rangeMatch) |
| | | { |
| | | //以材料为条件开始匹配 |
| | | if (range.Material == null) |
| | | { |
| | | materialList.Add(range); |
| | | } |
| | | else |
| | | { |
| | | int commonCount = GetIntersect(input.Material, range.Material); |
| | | if (commonCount > firstCount) |
| | | { |
| | | materialList.Add(range); |
| | | firstCount = commonCount; |
| | | } |
| | | } |
| | | } |
| | | //用已经筛选完成的列表中以名称筛选 |
| | | firstCount = 0; |
| | | if (materialList.Count < 1) |
| | | return false; |
| | | var allMatchingList = materialList |
| | | .Where(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType) >= 2) |
| | | .OrderByDescending(x => GetIntersect(x.KeyWord == string.Empty ? x.Name : x.KeyWord, input.ModelType)) |
| | | .ToList();//找出相同字符在2以上并且进行排序 |
| | | if (allMatchingList.Count < 1) |
| | | return false;//通过型号名没有找到,则视为没有匹配到 |
| | | foreach (var item in allMatchingList) |
| | | { |
| | | } |
| | | vmo = allMatchingList.First();//如果没有设置默认值,则默认返回匹配字符最多的一条数据 |
| | | } |
| | | } |
| | | //精确匹配和粗糙匹配都没有匹配到就返回错误 |
| | | firstCount = 0; |
| | | if (vmo != null) |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | return true; |
| | | }*/ |
| | | bool isNotarize = false; //是否确定 |
| | | |
| | | if (translationVmos == null || input == null || translationVmos.Count == 0) |
| | | { |
| | | return true; |
| | | } |
| | | Vmo.AssetsTranslationMainVmo vmo = null; |
| | | var nameMatching = translationVmos.Where(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1 |
| | | ) //先进行筛选,后进行从大到小排序 |
| | | .OrderByDescending(x => |
| | | (x.KeyWord != null && x.KeyWord.Any(keyword => GetIntersect(keyword, input.ModelType) >= 1)) || |
| | | (x.KeyWord == null || !x.KeyWord.Any()) && GetIntersect(x.Name, input.ModelType) >= 1).ToList(); |
| | | |
| | | if (nameMatching.Count > 1) |
| | | { |
| | | var absoluteMatching = nameMatching.Where(i => |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = translationVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = translationVmos.First(); |
| | | } |
| | | else if (nameMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = nameMatching.First(); |
| | | } |
| | | else |
| | | { |
| | | var absoluteMatching = translationVmos.Where(i => |
| | | i.Material == input.Material //材料约束 |
| | | ).ToList(); |
| | | if (absoluteMatching.Count > 1) |
| | | { |
| | | var defaultList = absoluteMatching.Where(x => x.Flags.Contains("默认值")).ToList(); |
| | | //取默认 |
| | | if (defaultList.Count > 0) |
| | | { |
| | | vmo = defaultList.First(); |
| | | } |
| | | else if (defaultList.Count <= 0) |
| | | { |
| | | vmo = translationVmos.First(); |
| | | } |
| | | } |
| | | else if (absoluteMatching.Count == 1) |
| | | { |
| | | isNotarize = true; |
| | | |
| | | vmo = absoluteMatching.First(); |
| | | } |
| | | else |
| | | vmo = translationVmos.First(); |
| | | } |
| | | if (vmo != null) |
| | | { |
| | | if (!isNotarize) |
| | | { |
| | | if (input.MinorLoss < 0) |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | if (input.DbId == null) |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | if (input.ModelType == null) |
| | | input.MatchingModelType = vmo.Name; |
| | | if (input.Roughness < 0) |
| | | input.MatchingRoughness = vmo.Roughness; |
| | | if (input.EndDiameter < 0) |
| | | input.MatchingEndDiameter = vmo.EndDiameter; |
| | | if (input.StartDiameter < 0) |
| | | input.MatchingStartDiameter = vmo.StartDiameter; |
| | | if (input.Diameter < 0) |
| | | input.MatchingDiameter = vmo.Diameter; |
| | | } |
| | | else |
| | | { |
| | | input.MatchingMinorLoss = vmo.MinorLoss; |
| | | input.MatchingDbId = vmo.ID.ToString(); |
| | | input.MatchingMaterial = vmo.Material; |
| | | input.MatchingModelType = vmo.Name; |
| | | input.MatchingDiameter = vmo.Diameter; |
| | | input.MatchingEndDiameter = vmo.EndDiameter; |
| | | input.MatchingStartDiameter = vmo.StartDiameter; |
| | | input.MatchingRoughness = vmo.Roughness; |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |