From d7837329e5d2ca8938f4939fa58db2295c7ed88c Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期二, 10 十二月 2024 23:02:20 +0800
Subject: [PATCH] 优化解析

---
 Service/HStation.Service.Revit.Core/04-service/02-correct/RevitCorrectHelper.cs |  749 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 618 insertions(+), 131 deletions(-)

diff --git a/Service/HStation.Service.Revit.Core/04-service/02-correct/RevitCorrectHelper.cs b/Service/HStation.Service.Revit.Core/04-service/02-correct/RevitCorrectHelper.cs
index dab1a35..c7e71b6 100644
--- a/Service/HStation.Service.Revit.Core/04-service/02-correct/RevitCorrectHelper.cs
+++ b/Service/HStation.Service.Revit.Core/04-service/02-correct/RevitCorrectHelper.cs
@@ -1,6 +1,4 @@
 锘縰sing HStation.Model;
-using Microsoft.VisualBasic;
-using System;
 
 namespace HStation.Service
 {
@@ -10,141 +8,411 @@
     public static class RevitCorrectHelper
     {
         /// <summary>
-        /// 淇(鏃犳硶淇浼氭姏鍑哄紓甯�)
+        /// 淇
         /// </summary>
-        /// <param name="rhs">RevitModel</param>
-        public static bool Correct(this Model.RevitModel rhs, out string msg)
+        public static bool Correct(this Model.RevitModel rhs, ref List<string> msgList)
         {
             if (rhs == null)
             {
-                msg = "鏁版嵁涓虹┖";
                 return false;
             }
-            if (!Zero(rhs, out msg))
+            if (msgList == null)
             {
-                return false;
+                msgList = new List<string>();
             }
-            if (!First(rhs, out msg))
-            {
-                return false;
+            var result = true;
+            if (!CorrectCollection(rhs, ref msgList))
+            {//淇闆嗗悎
+                result = false;
             }
-            if (!Exchanger(rhs, out msg))
-            {
-                return false;
+            if (!CorrectName(rhs, ref msgList))
+            {//淇鍚嶇О
+                result = false;
             }
-            if (!Second(rhs, out msg))
-            {
-                return false;
+            if (!CorrectExchanger(rhs, ref msgList))
+            {//淇鎹㈢儹鍣�
+                result = false;
             }
-            if (!Three(rhs, out msg))
-            {
-                return false;
+            if (!CorrectCompressor(rhs, ref msgList))
+            {//淇绌哄帇鏈�
+                result = false;
             }
-            return true;
+            if (!CorrectCode(rhs, ref msgList))
+            {//淇缂栫爜
+                result = false;
+            }
+            if (!CorrectLink(rhs, ref msgList))
+            {//淇杩炴帴
+                result = false;
+            }
+
+            return result;
         }
 
-        //鍓嶆彁锛氶獙璇佸悎娉曟��
-        private static bool Zero(Model.RevitModel rhs, out string msg)
+        //淇闆嗗悎
+        private static bool CorrectCollection(Model.RevitModel rhs, ref List<string> msgList)
         {
-            msg = string.Empty;
-            var allWaterSourceList = rhs.GetAllWaterSources();
-            if (allWaterSourceList == null || allWaterSourceList.Count < 1)
+            if (rhs == null)
             {
-                msg = "鏃犳按婧�";
                 return false;
             }
-            var allJunctionList = rhs.GetAllJunctions();
-            if (allJunctionList == null || allJunctionList.Count < 1)
+            if (msgList == null)
             {
-                msg = "鏃犺繛鎺ヨ妭鐐�";
-                return false;
+                msgList = new List<string>();
             }
-            return true;
-        }
-
-        //绗竴姝ワ細妫�鏌ラ泦鍚堝垵濮嬪寲
-        private static bool First(Model.RevitModel rhs, out string msg)
-        {
-            msg = string.Empty;
             if (rhs.Reservoirs == null)
-            {
+            {//姘村簱
                 rhs.Reservoirs = new List<Model.RevitReservoir>();
             }
             if (rhs.Tanks == null)
-            {
+            {//姘存睜
                 rhs.Tanks = new List<Model.RevitTank>();
             }
             if (rhs.Waterboxs == null)
-            {
+            {//姘寸
                 rhs.Waterboxs = new List<Model.RevitWaterbox>();
             }
             if (rhs.Junctions == null)
-            {
-                rhs.Waterboxs = new List<Model.RevitWaterbox>();
+            {//杩炴帴鑺傜偣
+                rhs.Junctions = new List<Model.RevitJunction>();
+            }
+            if (rhs.Bluntheads == null)
+            {//闂峰ご
+                rhs.Bluntheads = new List<Model.RevitBlunthead>();
             }
             if (rhs.Elbows == null)
-            {
+            {//寮ご
                 rhs.Elbows = new List<Model.RevitElbow>();
             }
             if (rhs.Threelinks == null)
-            {
+            {//涓夐��
                 rhs.Threelinks = new List<Model.RevitThreelink>();
             }
             if (rhs.Fourlinks == null)
-            {
+            {//鍥涢��
                 rhs.Fourlinks = new List<Model.RevitFourlink>();
             }
-            if (rhs.Meters == null)
-            {
-                rhs.Meters = new List<RevitMeter>();
-            }
-            if (rhs.Flowmeters == null)
-            {
-                rhs.Flowmeters = new List<Model.RevitFlowmeter>();
-            }
-            if (rhs.Pressmeters == null)
-            {
-                rhs.Pressmeters = new List<Model.RevitPressmeter>();
-            }
             if (rhs.Nozzles == null)
-            {
+            {//鍠峰ご
                 rhs.Nozzles = new List<Model.RevitNozzle>();
             }
             if (rhs.Hydrants == null)
-            {
+            {//娑堢伀鏍�
                 rhs.Hydrants = new List<Model.RevitHydrant>();
             }
-            if (rhs.Bluntheads == null)
-            {
-                rhs.Bluntheads = new List<Model.RevitBlunthead>();
+            if (rhs.Meters == null)
+            {//姘磋〃
+                rhs.Meters = new List<RevitMeter>();
             }
+            if (rhs.Flowmeters == null)
+            {//娴侀噺璁�
+                rhs.Flowmeters = new List<Model.RevitFlowmeter>();
+            }
+            if (rhs.Pressmeters == null)
+            {//鍘嬪姏琛�
+                rhs.Pressmeters = new List<Model.RevitPressmeter>();
+            }
+
             if (rhs.Pipes == null)
-            {
+            {//绠¢亾
                 rhs.Pipes = new List<Model.RevitPipe>();
             }
             if (rhs.Translations == null)
-            {
+            {//杩囨浮浠�
                 rhs.Translations = new List<Model.RevitTranslation>();
             }
-            if (rhs.Exchangers == null)
-            {
-                rhs.Exchangers = new List<RevitExchanger>();
-            }
             if (rhs.Pumps == null)
-            {
+            {//姘存车
                 rhs.Pumps = new List<Model.RevitPump>();
             }
             if (rhs.Valves == null)
-            {
+            {//闃�闂�
                 rhs.Valves = new List<Model.RevitValve>();
+            }
+            if (rhs.Exchangers == null)
+            {//鎹㈢儹鍣�
+                rhs.Exchangers = new List<RevitExchanger>();
+            }
+            if (rhs.Compressors == null)
+            {//绌哄帇鏈�
+                rhs.Compressors = new List<RevitCompressor>();
             }
             return true;
         }
 
-        //鍗曠嫭淇鎹㈢儹鍣�
-        private static bool Exchanger(Model.RevitModel rhs, out string msg)
+        //淇鍚嶇О
+        private static bool CorrectName(Model.RevitModel rhs, ref List<string> msgList)
         {
-            msg = string.Empty;
+            if (rhs == null)
+            {
+                return false;
+            }
+            if (msgList == null)
+            {
+                msgList = new List<string>();
+            }
+            if (rhs.Reservoirs != null && rhs.Reservoirs.Count > 0)
+            {//姘村簱
+                var reservoirNameList = rhs.Reservoirs.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var reservoir in rhs.Reservoirs)
+                {
+                    if (string.IsNullOrEmpty(reservoir.Name))
+                    {
+                        var reservoirName = Yw.Untity.UniqueHelper.CreateFromFirst("姘村簱", reservoirNameList);
+                        reservoir.Name = reservoirName;
+                        reservoirNameList.Add(reservoirName);
+                    }
+                }
+            }
+            if (rhs.Tanks != null && rhs.Tanks.Count > 0)
+            {//姘存睜
+                var tankNameList = rhs.Tanks.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var tank in rhs.Tanks)
+                {
+                    if (string.IsNullOrEmpty(tank.Name))
+                    {
+                        var tankName = Yw.Untity.UniqueHelper.CreateFromFirst("姘存睜", tankNameList);
+                        tank.Name = tankName;
+                        tankNameList.Add(tankName);
+                    }
+                }
+            }
+            if (rhs.Waterboxs != null && rhs.Waterboxs.Count > 0)
+            {//姘寸
+                var waterboxNameList = rhs.Waterboxs.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var waterbox in rhs.Waterboxs)
+                {
+                    if (string.IsNullOrEmpty(waterbox.Name))
+                    {
+                        var waterboxName = Yw.Untity.UniqueHelper.CreateFromFirst("姘寸", waterboxNameList);
+                        waterbox.Name = waterboxName;
+                        waterboxNameList.Add(waterboxName);
+                    }
+                }
+            }
+            if (rhs.Junctions != null && rhs.Junctions.Count > 0)
+            {//杩炴帴鑺傜偣
+                var junctionNameList = rhs.Junctions.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var junction in rhs.Junctions)
+                {
+                    if (string.IsNullOrEmpty(junction.Name))
+                    {
+                        var junctionName = Yw.Untity.UniqueHelper.CreateFromFirst("杩炴帴鑺傜偣", junctionNameList);
+                        junction.Name = junctionName;
+                        junctionNameList.Add(junctionName);
+                    }
+                }
+            }
+            if (rhs.Bluntheads != null && rhs.Bluntheads.Count > 0)
+            {//闂峰ご
+                var bluntheadNameList = rhs.Bluntheads.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var blunthead in rhs.Bluntheads)
+                {
+                    if (string.IsNullOrEmpty(blunthead.Name))
+                    {
+                        var bluntheadName = Yw.Untity.UniqueHelper.CreateFromFirst("闂峰ご", bluntheadNameList);
+                        blunthead.Name = bluntheadName;
+                        bluntheadNameList.Add(bluntheadName);
+                    }
+                }
+            }
+            if (rhs.Elbows != null && rhs.Elbows.Count > 0)
+            {//寮ご
+                var elbowNameList = rhs.Elbows.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var elbow in rhs.Elbows)
+                {
+                    if (string.IsNullOrEmpty(elbow.Name))
+                    {
+                        var elbowName = Yw.Untity.UniqueHelper.CreateFromFirst("寮ご", elbowNameList);
+                        elbow.Name = elbowName;
+                        elbowNameList.Add(elbowName);
+                    }
+                }
+            }
+            if (rhs.Threelinks != null && rhs.Threelinks.Count > 0)
+            {//涓夐��
+                var threelinkNameList = rhs.Threelinks.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var threelink in rhs.Threelinks)
+                {
+                    if (string.IsNullOrEmpty(threelink.Name))
+                    {
+                        var threelinkName = Yw.Untity.UniqueHelper.CreateFromFirst("涓夐��", threelinkNameList);
+                        threelink.Name = threelinkName;
+                        threelinkNameList.Add(threelinkName);
+                    }
+                }
+            }
+            if (rhs.Fourlinks != null && rhs.Fourlinks.Count > 0)
+            {//鍥涢��
+                var fourlinkNameList = rhs.Fourlinks.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var fourlink in rhs.Fourlinks)
+                {
+                    if (string.IsNullOrEmpty(fourlink.Name))
+                    {
+                        var fourlinkName = Yw.Untity.UniqueHelper.CreateFromFirst("鍥涢��", fourlinkNameList);
+                        fourlink.Name = fourlinkName;
+                        fourlinkNameList.Add(fourlinkName);
+                    }
+                }
+            }
+            if (rhs.Nozzles != null && rhs.Nozzles.Count > 0)
+            {//鍠峰ご
+                var nozzleNameList = rhs.Nozzles.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var nozzle in rhs.Nozzles)
+                {
+                    if (string.IsNullOrEmpty(nozzle.Name))
+                    {
+                        var nozzleName = Yw.Untity.UniqueHelper.CreateFromFirst("鍠峰ご", nozzleNameList);
+                        nozzle.Name = nozzleName;
+                        nozzleNameList.Add(nozzleName);
+                    }
+                }
+            }
+            if (rhs.Hydrants != null && rhs.Hydrants.Count > 0)
+            {//娑堢伀鏍�
+                var hydrantNameList = rhs.Hydrants.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var hydrant in rhs.Hydrants)
+                {
+                    if (string.IsNullOrEmpty(hydrant.Name))
+                    {
+                        var hydrantName = Yw.Untity.UniqueHelper.CreateFromFirst("娑堢伀鏍�", hydrantNameList);
+                        hydrant.Name = hydrantName;
+                        hydrantNameList.Add(hydrantName);
+                    }
+                }
+            }
+            if (rhs.Meters != null && rhs.Meters.Count > 0)
+            {//姘磋〃
+                var meterNameList = rhs.Meters.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var meter in rhs.Meters)
+                {
+                    if (string.IsNullOrEmpty(meter.Name))
+                    {
+                        var meterName = Yw.Untity.UniqueHelper.CreateFromFirst("姘磋〃", meterNameList);
+                        meter.Name = meterName;
+                        meterNameList.Add(meterName);
+                    }
+                }
+            }
+            if (rhs.Flowmeters != null && rhs.Flowmeters.Count > 0)
+            {//娴侀噺璁�
+                var flowmeterNameList = rhs.Flowmeters.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var flowmeter in rhs.Flowmeters)
+                {
+                    if (string.IsNullOrEmpty(flowmeter.Name))
+                    {
+                        var flowmeterName = Yw.Untity.UniqueHelper.CreateFromFirst("娴侀噺璁�", flowmeterNameList);
+                        flowmeter.Name = flowmeterName;
+                        flowmeterNameList.Add(flowmeterName);
+                    }
+                }
+            }
+            if (rhs.Pressmeters != null && rhs.Pressmeters.Count > 0)
+            {//鍘嬪姏琛�
+                var pressmeterNameList = rhs.Pressmeters.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var pressmeter in rhs.Pressmeters)
+                {
+                    if (string.IsNullOrEmpty(pressmeter.Name))
+                    {
+                        var pressmeterName = Yw.Untity.UniqueHelper.CreateFromFirst("鍘嬪姏琛�", pressmeterNameList);
+                        pressmeter.Name = pressmeterName;
+                        pressmeterNameList.Add(pressmeterName);
+                    }
+                }
+            }
+            if (rhs.Pipes != null && rhs.Pipes.Count > 0)
+            {//绠¢亾
+                var pipeNameList = rhs.Pipes.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var pipe in rhs.Pipes)
+                {
+                    if (string.IsNullOrEmpty(pipe.Name))
+                    {
+                        var pipeName = Yw.Untity.UniqueHelper.CreateFromFirst("绠¢亾", pipeNameList);
+                        pipe.Name = pipeName;
+                        pipeNameList.Add(pipeName);
+                    }
+                }
+            }
+            if (rhs.Translations != null && rhs.Translations.Count > 0)
+            {//杩囨浮浠�
+                var translationNameList = rhs.Translations.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var translation in rhs.Translations)
+                {
+                    if (string.IsNullOrEmpty(translation.Name))
+                    {
+                        var translationName = Yw.Untity.UniqueHelper.CreateFromFirst("杩囨浮浠�", translationNameList);
+                        translation.Name = translationName;
+                        translationNameList.Add(translationName);
+                    }
+                }
+            }
+            if (rhs.Pumps != null && rhs.Pumps.Count > 0)
+            {//姘存车
+                var pumpNameList = rhs.Pumps.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var pump in rhs.Pumps)
+                {
+                    if (string.IsNullOrEmpty(pump.Name))
+                    {
+                        var pumpName = Yw.Untity.UniqueHelper.CreateFromFirst("姘存车", pumpNameList);
+                        pump.Name = pumpName;
+                        pumpNameList.Add(pumpName);
+                    }
+                }
+            }
+            if (rhs.Valves != null && rhs.Valves.Count > 0)
+            {//闃�闂�
+                var valveNameList = rhs.Valves.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var valve in rhs.Valves)
+                {
+                    if (string.IsNullOrEmpty(valve.Name))
+                    {
+                        var valveName = Yw.Untity.UniqueHelper.CreateFromFirst("闃�闂�", valveNameList);
+                        valve.Name = valveName;
+                        valveNameList.Add(valveName);
+                    }
+                }
+            }
+            if (rhs.Exchangers != null && rhs.Exchangers.Count > 0)
+            {//鎹㈢儹鍣�
+                var exchangerNameList = rhs.Exchangers.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var exchanger in rhs.Exchangers)
+                {
+                    if (string.IsNullOrEmpty(exchanger.Name))
+                    {
+                        var exchangerName = Yw.Untity.UniqueHelper.CreateFromFirst("鎹㈢儹鍣�", exchangerNameList);
+                        exchanger.Name = exchangerName;
+                        exchangerNameList.Add(exchangerName);
+                    }
+                }
+            }
+            if (rhs.Compressors != null && rhs.Compressors.Count > 0)
+            {//绌哄帇鏈�
+                var compressorNameList = rhs.Compressors.Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name).Distinct().ToList();
+                foreach (var compressor in rhs.Compressors)
+                {
+                    if (string.IsNullOrEmpty(compressor.Name))
+                    {
+                        var compressorName = Yw.Untity.UniqueHelper.CreateFromFirst("绌哄帇鏈�", compressorNameList);
+                        compressor.Name = compressorName;
+                        compressorNameList.Add(compressorName);
+                    }
+                }
+            }
+            return true;
+        }
+
+        //淇鎹㈢儹鍣�
+        private static bool CorrectExchanger(Model.RevitModel rhs, ref List<string> msgList)
+        {
+            if (rhs == null)
+            {
+                return false;
+            }
+            if (msgList == null)
+            {
+                msgList = new List<string>();
+            }
+            var result = true;
             if (rhs.Exchangers != null && rhs.Exchangers.Count > 0)
             {
                 var allParterList = rhs.GetAllParters();
@@ -152,40 +420,67 @@
                 {
                     if (exchanger.ConnectList != null && exchanger.ConnectList.Count > 0)
                     {
-                        foreach (var connect in exchanger.ConnectList)
+                        #region 鍘婚櫎鏃犳晥杩炴帴鍜岄椃澶�
+
+                        foreach (var connect in exchanger.ConnectList.ToList())
                         {
                             var connectParter = allParterList.Find(x => x.Id == connect.Id);
                             if (connectParter == null)
                             {
-                                msg = $"鎹㈢儹鍣細{exchanger.Id} 杩炴帴缁勪欢 {connect.Id} 涓嶅瓨鍦�";
-                                return false;
+                                exchanger.ConnectList.Remove(connect);
+                            }
+                            else
+                            {
+                                if (connectParter is RevitBlunthead blunthead)
+                                {
+                                    var decorator = new Model.RevitDecorator();
+                                    decorator.Id = blunthead.Id;
+                                    decorator.Name = blunthead.Name;
+                                    decorator.Category = RevitJsonCatalog.Blunthead;
+                                    decorator.Decoration = null;
+                                    decorator.Description = blunthead.Description;
+                                    rhs.Decorators.Add(decorator);
+                                    rhs.Bluntheads.Remove(blunthead);
+                                    allParterList.Remove(connectParter);
+                                }
                             }
                         }
 
+                        #endregion
+
+                        #region 寮�濮嬭繛鎺�
+
                         var startConnectList = exchanger.ConnectList.GetStartConnects();
-                        if (startConnectList == null || startConnectList.Count < 1)
+                        if (startConnectList.Count < 1)
                         {
-                            msg = $"鎹㈢儹鍣細{exchanger.Id} 涓婃父杩炴帴缁勪欢涓嶅瓨鍦�";
-                            return false;
+                            var startConnect = exchanger.ConnectList.GetStartConnect();
+                            if (startConnect != null)
+                            {
+                                startConnectList.Add(startConnect);
+                            }
+                        }
+                        if (startConnectList.Count < 1)
+                        {
+                            msgList.Add($"鎹㈢儹鍣╗{exchanger.Id}]涓婃父杩炴帴缁勪欢涓嶅瓨鍦�");
+                            result = false;
+                            continue;
                         }
                         var startJunction = new Model.RevitJunction();
-                        startJunction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Code).ToList());
-                        startJunction.Code = startJunction.Id;
+                        startJunction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Id).ToList());
                         startJunction.Name = UniqueHelper.CreateFromFirst("杩炴帴鑺傜偣", allParterList.Select(x => x.Name).Distinct().ToList());
                         startJunction.Flags = null;
                         startJunction.ModelType = null;
                         startJunction.Description = "鎹㈢儹鍣ㄤ慨姝f椂锛岃嚜鍔ㄦ坊鍔�";
-                        startJunction.Quality = exchanger.StartQuality;
                         startJunction.Position = startConnectList.GetCenterPosition();
-                        startJunction.Elev = exchanger.StartElev;
+                        startJunction.Elev = exchanger.Elev;
                         startJunction.Demand = null;
                         startJunction.DemandPattern = null;
                         rhs.Junctions.Add(startJunction);
-                        exchanger.StartCode = startJunction.Code;
+                        exchanger.StartCode = startJunction.Id;
                         foreach (var startConnect in startConnectList)
                         {
                             var startConnectParter = allParterList.Find(x => x.Id == startConnect.Id);
-                            if (startConnectParter is IRevitLink revitLink)
+                            if (startConnectParter is RevitLink revitLink)
                             {
                                 if (revitLink.StartCode == exchanger.Id)
                                 {
@@ -199,30 +494,41 @@
                         }
                         allParterList.Add(startJunction);
 
+                        #endregion
+
+                        #region 缁撴潫杩炴帴
+
                         var endConnectList = exchanger.ConnectList.GetEndConnects();
-                        if (endConnectList == null || endConnectList.Count < 1)
+                        if (endConnectList.Count < 1)
                         {
-                            msg = $"鎹㈢儹鍣細{exchanger.Id} 涓嬫父杩炴帴缁勪欢涓嶅瓨鍦�";
-                            return false;
+                            var endConnect = exchanger.ConnectList.GetEndConnect();
+                            if (endConnect != null)
+                            {
+                                endConnectList.Add(endConnect);
+                            }
+                        }
+                        if (endConnectList.Count < 1)
+                        {
+                            msgList.Add($"鎹㈢儹鍣╗{exchanger.Id}]涓嬫父杩炴帴缁勪欢涓嶅瓨鍦�");
+                            result = false;
+                            continue;
                         }
                         var endJunction = new Model.RevitJunction();
-                        endJunction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Code).ToList());
-                        endJunction.Code = endJunction.Id;
+                        endJunction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Id).ToList());
                         endJunction.Name = UniqueHelper.CreateFromFirst("杩炴帴鑺傜偣", allParterList.Select(x => x.Name).Distinct().ToList());
                         endJunction.Flags = null;
                         endJunction.ModelType = null;
                         endJunction.Description = "鎹㈢儹鍣ㄤ慨姝f椂锛岃嚜鍔ㄦ坊鍔�";
-                        endJunction.Quality = exchanger.EndQuality;
                         endJunction.Position = endConnectList.GetCenterPosition();
-                        endJunction.Elev = exchanger.EndElev;
+                        endJunction.Elev = exchanger.Elev;
                         endJunction.Demand = null;
                         endJunction.DemandPattern = null;
                         rhs.Junctions.Add(endJunction);
-                        exchanger.EndCode = endJunction.Code;
+                        exchanger.EndCode = endJunction.Id;
                         foreach (var endConnect in endConnectList)
                         {
                             var endConnectParter = allParterList.Find(x => x.Id == endConnect.Id);
-                            if (endConnectParter is IRevitLink revitLink)
+                            if (endConnectParter is RevitLink revitLink)
                             {
                                 if (revitLink.StartCode == exchanger.Id)
                                 {
@@ -235,16 +541,184 @@
                             }
                         }
                         allParterList.Add(endJunction);
+
+                        #endregion
+                    }
+                    else
+                    {
+                        msgList.Add($"鎹㈢儹鍣╗{exchanger.Id}]杩炴帴鍒楄〃涓虹┖");
+                        result = false;
                     }
                 }
             }
-            return true;
+            return result;
         }
 
-        //绗簩姝ワ細妫�鏌ヤ笂涓嬫父缂栫爜
-        private static bool Second(Model.RevitModel rhs, out string msg)
+        //淇绌哄帇鏈�
+        private static bool CorrectCompressor(Model.RevitModel rhs, ref List<string> msgList)
         {
-            msg = string.Empty;
+            if (rhs == null)
+            {
+                return false;
+            }
+            if (msgList == null)
+            {
+                msgList = new List<string>();
+            }
+            var result = true;
+            if (rhs.Compressors != null && rhs.Compressors.Count > 0)
+            {
+                var allParterList = rhs.GetAllParters();
+                foreach (var compressor in rhs.Compressors)
+                {
+                    if (compressor.ConnectList != null && compressor.ConnectList.Count > 0)
+                    {
+                        #region 鍘婚櫎鏃犳晥杩炴帴鍜岄椃澶�
+
+                        foreach (var connect in compressor.ConnectList.ToList())
+                        {
+                            var connectParter = allParterList.Find(x => x.Id == connect.Id);
+                            if (connectParter == null)
+                            {
+                                compressor.ConnectList.Remove(connect);
+                            }
+                            else
+                            {
+                                if (connectParter is RevitBlunthead blunthead)
+                                {
+                                    var decorator = new Model.RevitDecorator();
+                                    decorator.Id = blunthead.Id;
+                                    decorator.Name = blunthead.Name;
+                                    decorator.Category = RevitJsonCatalog.Blunthead;
+                                    decorator.Decoration = null;
+                                    decorator.Description = blunthead.Description;
+                                    rhs.Decorators.Add(decorator);
+                                    rhs.Bluntheads.Remove(blunthead);
+                                    allParterList.Remove(connectParter);
+                                }
+                            }
+                        }
+
+                        #endregion
+
+                        #region 寮�濮嬭繛鎺�
+
+                        var startConnectList = compressor.ConnectList.GetStartConnects();
+                        if (startConnectList.Count < 1)
+                        {
+                            var startConnect = compressor.ConnectList.GetStartConnect();
+                            if (startConnect != null)
+                            {
+                                startConnectList.Add(startConnect);
+                            }
+                        }
+                        if (startConnectList.Count < 1)
+                        {
+                            msgList.Add($"绌哄帇鏈篬{compressor.Id}]涓婃父杩炴帴缁勪欢涓嶅瓨鍦�");
+                            result = false;
+                            continue;
+                        }
+                        var startJunction = new Model.RevitJunction();
+                        startJunction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Id).ToList());
+                        startJunction.Name = UniqueHelper.CreateFromFirst("杩炴帴鑺傜偣", allParterList.Select(x => x.Name).Distinct().ToList());
+                        startJunction.Flags = null;
+                        startJunction.ModelType = null;
+                        startJunction.Description = "绌哄帇鏈轰慨姝f椂锛岃嚜鍔ㄦ坊鍔�";
+                        startJunction.Position = startConnectList.GetCenterPosition();
+                        startJunction.Elev = compressor.Elev;
+                        startJunction.Demand = null;
+                        startJunction.DemandPattern = null;
+                        rhs.Junctions.Add(startJunction);
+                        compressor.StartCode = startJunction.Id;
+                        foreach (var startConnect in startConnectList)
+                        {
+                            var startConnectParter = allParterList.Find(x => x.Id == startConnect.Id);
+                            if (startConnectParter is RevitLink revitLink)
+                            {
+                                if (revitLink.StartCode == compressor.Id)
+                                {
+                                    revitLink.StartCode = startJunction.Id;
+                                }
+                                else if (revitLink.EndCode == compressor.Id)
+                                {
+                                    revitLink.EndCode = startJunction.Id;
+                                }
+                            }
+                        }
+                        allParterList.Add(startJunction);
+
+                        #endregion
+
+                        #region 缁撴潫杩炴帴
+
+                        var endConnectList = compressor.ConnectList.GetEndConnects();
+                        if (endConnectList.Count < 1)
+                        {
+                            var endConnect = compressor.ConnectList.GetEndConnect();
+                            if (endConnect != null)
+                            {
+                                endConnectList.Add(endConnect);
+                            }
+                        }
+                        if (endConnectList.Count < 1)
+                        {
+                            msgList.Add($"绌哄帇鏈篬{compressor.Id}]涓嬫父杩炴帴缁勪欢涓嶅瓨鍦�");
+                            result = false;
+                            continue;
+                        }
+                        var endJunction = new Model.RevitJunction();
+                        endJunction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Id).ToList());
+                        endJunction.Name = UniqueHelper.CreateFromFirst("杩炴帴鑺傜偣", allParterList.Select(x => x.Name).Distinct().ToList());
+                        endJunction.Flags = null;
+                        endJunction.ModelType = null;
+                        endJunction.Description = "绌哄帇鏈轰慨姝f椂锛岃嚜鍔ㄦ坊鍔�";
+                        endJunction.Position = endConnectList.GetCenterPosition();
+                        endJunction.Elev = compressor.Elev;
+                        endJunction.Demand = null;
+                        endJunction.DemandPattern = null;
+                        rhs.Junctions.Add(endJunction);
+                        compressor.EndCode = endJunction.Id;
+                        foreach (var endConnect in endConnectList)
+                        {
+                            var endConnectParter = allParterList.Find(x => x.Id == endConnect.Id);
+                            if (endConnectParter is RevitLink revitLink)
+                            {
+                                if (revitLink.StartCode == compressor.Id)
+                                {
+                                    revitLink.StartCode = endJunction.Id;
+                                }
+                                else if (revitLink.EndCode == compressor.Id)
+                                {
+                                    revitLink.EndCode = endJunction.Id;
+                                }
+                            }
+                        }
+                        allParterList.Add(endJunction);
+
+                        #endregion
+                    }
+                    else
+                    {
+                        msgList.Add($"绌哄帇鏈篬{compressor.Id}]杩炴帴鍒楄〃涓虹┖");
+                        result = false;
+                    }
+                }
+            }
+            return result;
+        }
+
+        //淇缂栫爜
+        private static bool CorrectCode(Model.RevitModel rhs, ref List<string> msgList)
+        {
+            if (rhs == null)
+            {
+                return false;
+            }
+            if (msgList == null)
+            {
+                msgList = new List<string>();
+            }
+            var result = true;
             var allParterList = rhs.GetAllParters();
             var allLinks = rhs.GetAllLinks();
             foreach (var link in allLinks)
@@ -252,82 +726,93 @@
                 var startLinkParter = allParterList.Find(x => x.Id == link.StartCode);
                 if (startLinkParter == null)
                 {
-                    msg = $"绠℃: {link.Id} 涓婃父鑺傜偣閿欒";
-                    return false;
+                    msgList.Add($"绠℃:[{link.Id}]涓婃父鑺傜偣[{link.StartCode}]閿欒");
+                    result = false;
                 }
-                link.StartCode = startLinkParter.Code;
+                else
+                {
+                    link.StartCode = startLinkParter.Id;
+                }
+
                 var endLinkParter = allParterList.Find(x => x.Id == link.EndCode);
                 if (endLinkParter == null)
                 {
-                    msg = $"绠℃: {link.Id} 涓嬫父鑺傜偣閿欒";
-                    return false;
+                    msgList.Add($"绠℃:[{link.Id}]涓嬫父鑺傜偣[{link.EndCode}]閿欒");
+                    result = false;
                 }
-                link.EndCode = endLinkParter.Code;
+                else
+                {
+                    link.EndCode = endLinkParter.Id;
+                }
+
             }
-            return true;
+            return result;
         }
 
-        //绗笁姝ワ細鎸夌収姘村姏缁撴瀯杩涜淇
-        private static bool Three(Model.RevitModel rhs, out string msg)
+        //淇杩炴帴
+        private static bool CorrectLink(Model.RevitModel rhs, ref List<string> msgList)
         {
-            msg = string.Empty;
+            if (rhs == null)
+            {
+                return false;
+            }
+            if (msgList == null)
+            {
+                msgList = new List<string>();
+            }
             var allParterList = rhs.GetAllParters();
             var allLinks = rhs.GetAllLinks();
             foreach (var link in allLinks)
             {
-                var startLinkParter = allParterList.Find(x => x.Code == link.StartCode);
-                if (startLinkParter is IRevitLink startLink)
+                var startLinkParter = allParterList.Find(x => x.Id == link.StartCode);
+                if (startLinkParter is RevitLink startLink)
                 {
                     var junction = new Model.RevitJunction();
-                    junction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Code).ToList());
-                    junction.Code = junction.Id;
+                    junction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Id).ToList());
                     junction.Name = UniqueHelper.CreateFromFirst("杩炴帴鑺傜偣", allParterList.Select(x => x.Name).Distinct().ToList());
                     junction.Flags = null;
                     junction.ModelType = null;
                     junction.Description = "姘村姏淇鏃讹紝鑷姩娣诲姞";
-                    junction.Quality = link.StartQuality;
                     junction.Position = link.StartPosition;
-                    junction.Elev = link.StartElev;
+                    junction.Elev = link.StartPosition.Z;
                     junction.Demand = null;
                     junction.DemandPattern = null;
                     rhs.Junctions.Add(junction);
-                    link.StartCode = junction.Code;
+                    link.StartCode = junction.Id;
 
-                    if (startLink.StartCode == link.StartCode)
+                    if (startLink.StartCode == link.Id)
                     {
-                        startLink.StartCode = junction.Code;
+                        startLink.StartCode = junction.Id;
                     }
-                    else if (startLink.EndCode == link.StartCode)
+                    else if (startLink.EndCode == link.Id)
                     {
-                        startLink.EndCode = junction.Code;
+                        startLink.EndCode = junction.Id;
                     }
                     allParterList.Add(junction);
                 }
 
-                var endLinkParter = allParterList.Find(x => x.Code == link.EndCode);
-                if (endLinkParter is IRevitLink endLink)
+                var endLinkParter = allParterList.Find(x => x.Id == link.EndCode);
+                if (endLinkParter is RevitLink endLink)
                 {
                     var junction = new Model.RevitJunction();
-                    junction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Code).ToList());
-                    junction.Code = junction.Id;
+                    junction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", allParterList.Select(x => x.Id).ToList());
                     junction.Name = UniqueHelper.CreateFromFirst("杩炴帴鑺傜偣", allParterList.Select(x => x.Name).Distinct().ToList());
                     junction.Flags = null;
                     junction.ModelType = null;
                     junction.Description = "姘村姏淇鏃讹紝鑷姩娣诲姞";
-                    junction.Quality = link.EndQuality;
                     junction.Position = link.EndPosition;
-                    junction.Elev = link.EndElev;
+                    junction.Elev = link.EndPosition.Z;
                     junction.Demand = null;
                     junction.DemandPattern = null;
                     rhs.Junctions.Add(junction);
-                    link.EndCode = junction.Code;
-                    if (endLink.StartCode == link.EndCode)
+                    link.EndCode = junction.Id;
+                    if (endLink.StartCode == link.Id)
                     {
-                        endLink.StartCode = junction.Code;
+                        endLink.StartCode = junction.Id;
                     }
-                    else if (endLink.EndCode == link.EndCode)
+                    else if (endLink.EndCode == link.Id)
                     {
-                        endLink.EndCode = junction.Code;
+                        endLink.EndCode = junction.Id;
                     }
                     allParterList.Add(junction);
                 }
@@ -335,5 +820,7 @@
             return true;
         }
 
+
+
     }
 }

--
Gitblit v1.9.3