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