From 98e49c0dd42840a094837f7acae532bc237a719a Mon Sep 17 00:00:00 2001 From: yangyin <1850366751@qq.com> Date: 星期二, 20 八月 2024 15:42:37 +0800 Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/HStation/XHS.V1.0 --- Hydro/Yw.EPAnet.Calcu.Core/02-check/NetworkCheckExtensions.cs | 97 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 93 insertions(+), 4 deletions(-) diff --git a/Hydro/Yw.EPAnet.Calcu.Core/02-check/NetworkCheckExtensions.cs b/Hydro/Yw.EPAnet.Calcu.Core/02-check/NetworkCheckExtensions.cs index bff0317..5fcd14e 100644 --- a/Hydro/Yw.EPAnet.Calcu.Core/02-check/NetworkCheckExtensions.cs +++ b/Hydro/Yw.EPAnet.Calcu.Core/02-check/NetworkCheckExtensions.cs @@ -157,32 +157,121 @@ FailReason = "灞炴�ц缃敊璇紝绠¢亾闀垮害蹇呴』澶т簬0" }); } - if (pipe.Roughness <= 0.1 || pipe.Roughness > 10000) + if (pipe.Roughness <= 5 || pipe.Roughness > 10000) { result.Succeed = false; result.FailedList.Add(new CheckFailed() { ParterId = pipe.Id, FailType = eCheckFailType.PropSetError, - FailReason = "灞炴�ц缃敊璇紝绮楃硻绯绘暟鍖洪棿(0.1,10000銆�" + FailReason = "灞炴�ц缃敊璇紝绮楃硻绯绘暟鍖洪棿(5,10000銆�" }); } - if (pipe.Diameter <= 0.1 || pipe.Diameter > 10000) + if (pipe.Diameter <= 10 || pipe.Diameter > 10000) { result.Succeed = false; result.FailedList.Add(new CheckFailed() { ParterId = pipe.Id, FailType = eCheckFailType.PropSetError, - FailReason = "灞炴�ц缃敊璇紝绠″緞鍖洪棿(0.1,10000銆�" + FailReason = "灞炴�ц缃敊璇紝绠″緞鍖洪棿(10,10000銆�" }); } } } + //楠岃瘉杩為�氭�� + var objs = network.GetAllLinks().Select(o => o as ILink).ToList(); + objs = objs.Distinct().ToList(); + var visitedNodes = new HashSet<INode>(); + var FindObjs = new HashSet<IParter>(); + var resultObjs = new List<List<IParter>>(); + objs.ForEach(o => + { + //濡傛灉o鐨勪袱涓鐐归兘宸茬粡琚闂繃锛屽垯涓嶅啀璁块棶 + if (visitedNodes.Contains(o.StartNode) && visitedNodes.Contains(o.EndNode)) + return; + var list=TraversePipeNetworkALL(o, visitedNodes, FindObjs); + if (list.Count > 0) + resultObjs.Add(list); + }); + int NumErrRegion = 0; + resultObjs.ForEach(o => + { + //楠岃瘉o涓槸鍚﹀寘鍚按姹犳垨鑰呮按搴擄紝濡傛灉涓嶅寘鍚笉閫氳繃 + if (o.Exists(x => x is Reservoir || x is Tank)) return; + NumErrRegion++; + }); + if (NumErrRegion > 0) + { + result.Succeed = false; + result.FailedList.Add(new CheckFailed() + { + ParterId = string.Empty, + FailType = eCheckFailType.Disconnected, + FailReason = $"绠$綉涓湁{resultObjs.Count}涓嫭绔嬭繛閫氭�у尯鍩�,鍏朵腑{NumErrRegion}涓病鏈夊寘鍚按姹犳垨姘村簱" + }); + } + + + return result; } + /// <summary> + /// 閬嶅巻绠$綉 + /// </summary> + + private static List<IParter> TraversePipeNetworkALL(ILink startLink, HashSet<INode> visitedNodes , HashSet<IParter> FindObjs) + { + List<IParter> result=new List<IParter>(); + Queue<ILink> queue = new Queue<ILink>(); + + + + queue.Enqueue(startLink); + if (visitedNodes == null) + visitedNodes = new HashSet<INode>(); + //visitedNodes.Add(startLink.StartNode); + //visitedNodes.Add(startLink.EndNode); + + while (queue.Count > 0) + { + ILink currentLink = queue.Dequeue(); + //Console.WriteLine("Traversing Link: " + currentLink.ID); + + foreach (var node in new INode[] { currentLink.StartNode, currentLink.EndNode }) + { + if (visitedNodes.Contains(node)) + { + result.Add(node); + } + if (node != null && !visitedNodes.Contains(node)) + { + visitedNodes.Add(node); + result.Add(node); + if (!FindObjs.Contains(node)) FindObjs.Add(node); + + foreach (var link in node.Links) + { + if (!visitedNodes.Contains(link.StartNode) || !visitedNodes.Contains(link.EndNode)) + { + if (!FindObjs.Contains(link)) FindObjs.Add(link); + queue.Enqueue(link); + result.Add(link); + + } + } + } + } + + } + return result; + + + } + + } } -- Gitblit v1.9.3