lixiaojun
2024-10-25 ba4fd2f2456a3cee97cc90204c9e21505a42b2aa
Service/HStation.Service.Revit.Core/04-service/01-json/RevitJsonHelper.cs
@@ -1,4 +1,6 @@
namespace HStation.Service
using System.Transactions;
namespace HStation.Service
{
    /// <summary>
    /// Revit Json辅助类
@@ -177,6 +179,15 @@
                                }
                            }
                            break;
                        case RevitJsonCatalog.Compressor:
                            {
                                var compressor = ParseCompressor(jobject);
                                if (compressor != null)
                                {
                                    model.Compressors.Add(compressor);
                                }
                            }
                            break;
                        case RevitJsonCatalog.Pump:
                            {
                                var pump = ParsePump(jobject);
@@ -292,6 +303,7 @@
            }
            var junction = new Model.RevitJunction();
            junction.Catalog = RevitJsonCatalog.Junction;
            #region Id 
@@ -524,6 +536,7 @@
            }
            var nozzle = new Model.RevitNozzle();
            nozzle.Catalog = RevitJsonCatalog.Nozzle;
            #region Id 
@@ -786,6 +799,7 @@
            }
            var hydrant = new Model.RevitHydrant();
            hydrant.Catalog = RevitJsonCatalog.Hydrant;
            #region Id 
@@ -1046,6 +1060,7 @@
            }
            var blunthead = new Model.RevitBlunthead();
            blunthead.Catalog = RevitJsonCatalog.Blunthead;
            #region Id 
@@ -1321,6 +1336,7 @@
            }
            var elbow = new Model.RevitElbow();
            elbow.Catalog = RevitJsonCatalog.Elbow;
            #region Id 
@@ -1596,6 +1612,7 @@
            }
            var threelink = new Model.RevitThreelink();
            threelink.Catalog = RevitJsonCatalog.Threelink;
            #region Id 
@@ -1871,6 +1888,7 @@
            }
            var fourlink = new Model.RevitFourlink();
            fourlink.Catalog = RevitJsonCatalog.Fourlink;
            #region Id 
@@ -2146,6 +2164,7 @@
            }
            var meter = new Model.RevitMeter();
            meter.Catalog = RevitJsonCatalog.Meter;
            #region Id 
@@ -2378,6 +2397,7 @@
            }
            var flowmeter = new Model.RevitFlowmeter();
            flowmeter.Catalog = RevitJsonCatalog.Flowmeter;
            #region Id 
@@ -2598,6 +2618,19 @@
            #endregion
            #region Flow
            if (jobject[RevitJsonProp.Flow].MatchNumeric(out double flow))
            {
                flowmeter.CurrentFlow = flow;
            }
            else
            {
                flowmeter.AppendOrUpdatePropStatus(nameof(flowmeter.CurrentFlow), ePropStatus.Abnormal, "[流量]缺少或者数据格式错误");
            }
            #endregion
            return flowmeter;
        }
@@ -2610,6 +2643,7 @@
            }
            var pressmeter = new Model.RevitPressmeter();
            pressmeter.Catalog = RevitJsonCatalog.Pressmeter;
            #region Id 
@@ -2830,6 +2864,19 @@
            #endregion
            #region Press
            if (jobject[RevitJsonProp.Press].MatchNumeric(out double press))
            {
                pressmeter.CurrentPress = Yw.Pump.CalculationHelper.Mpa2M(press);
            }
            else
            {
                pressmeter.AppendOrUpdatePropStatus(nameof(pressmeter.CurrentPress), ePropStatus.Abnormal, "[压力]缺少或者数据格式错误");
            }
            #endregion
            return pressmeter;
        }
@@ -2842,6 +2889,7 @@
            }
            var reservoir = new Model.RevitReservoir();
            reservoir.Catalog = RevitJsonCatalog.Reservoir;
            #region Id 
@@ -3074,6 +3122,7 @@
            }
            var tank = new Model.RevitTank();
            tank.Catalog = RevitJsonCatalog.Tank;
            #region Id 
@@ -3363,6 +3412,7 @@
            }
            var waterbox = new Model.RevitWaterbox();
            waterbox.Catalog = RevitJsonCatalog.Waterbox;
            #region Id 
@@ -3652,6 +3702,7 @@
            }
            var pipe = new Model.RevitPipe();
            pipe.Catalog = RevitJsonCatalog.Pipe;
            #region Id 
@@ -4054,6 +4105,7 @@
            }
            var translation = new Model.RevitTranslation();
            translation.Catalog = RevitJsonCatalog.Translation;
            #region Id 
@@ -4456,6 +4508,7 @@
            }
            var exchanger = new Model.RevitExchanger();
            exchanger.Catalog = RevitJsonCatalog.Exchanger;
            #region Id 
@@ -4465,7 +4518,7 @@
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Id), ePropStatus.Error, "缺少[构件编码]");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Id), ePropStatus.Error, "[换热器]缺少[构件编码]");
            }
            #endregion
@@ -4478,12 +4531,12 @@
                if (string.IsNullOrEmpty(exchanger.Code))
                {
                    exchanger.Code = exchanger.Id;
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Code), ePropStatus.Lack, "使用[构件编码]赋值");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Code), ePropStatus.Lack, "[换热器][编码]缺省,使用[构件编码]赋值");
                }
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Code), ePropStatus.Error, "缺少[编码]");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Code), ePropStatus.Error, "[换热器]缺少[编码]");
            }
            #endregion
@@ -4493,11 +4546,11 @@
            if (jobject.ParseString(RevitJsonProp.Name, out string name))
            {
                exchanger.Name = name;
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Name), ePropStatus.Lack, "[名称]缺省");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Name), ePropStatus.Lack, "[换热器][名称]缺省");
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Name), ePropStatus.Error, "缺少[名称]");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Name), ePropStatus.Error, "[换热器]缺少[名称]");
            }
            #endregion
@@ -4509,12 +4562,12 @@
                exchanger.ModelType = modelType;
                if (string.IsNullOrEmpty(exchanger.ModelType))
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.ModelType), ePropStatus.Lack, "[型号信息]缺省");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.ModelType), ePropStatus.Lack, "[换热器][型号信息]缺省");
                }
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.ModelType), ePropStatus.Error, "缺少[型号信息]");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.ModelType), ePropStatus.Error, "[换热器]缺少[型号信息]");
            }
            #endregion
@@ -4528,13 +4581,13 @@
                {
                    if (exchanger.Flags == null || exchanger.Flags.Count < 1)
                    {
                        exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Flags), ePropStatus.Abnormal, "[标签]格式错误");
                        exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Flags), ePropStatus.Abnormal, "[换热器][标签]格式错误");
                    }
                }
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Flags), ePropStatus.Error, "缺少[标签]");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Flags), ePropStatus.Error, "[换热器]缺少[标签]");
            }
            #endregion
@@ -4547,7 +4600,7 @@
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Description), ePropStatus.Error, "缺少[说明信息]");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Description), ePropStatus.Error, "[换热器]缺少[说明信息]");
            }
            #endregion
@@ -4570,12 +4623,12 @@
                }).ToList();
                if (exchanger.ConnectList == null || exchanger.ConnectList.Count < 1)
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.ConnectList), ePropStatus.Error, "[连接列表]解析失败");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.ConnectList), ePropStatus.Error, "[换热器][连接列表]解析失败");
                }
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.ConnectList), ePropStatus.Error, "缺少[连接列表]");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.ConnectList), ePropStatus.Error, "[换热器]缺少[连接列表]");
            }
            #endregion
@@ -4586,12 +4639,12 @@
            exchanger.StartCode = startConnect?.Id;
            if (string.IsNullOrEmpty(exchanger.StartCode))
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartCode), ePropStatus.Error, "[上游构件]受[连接列表]影响解析错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartCode), ePropStatus.Error, "[换热器][上游构件]受[连接列表]影响解析错误");
            }
            exchanger.StartPosition = startConnect?.Position;
            if (exchanger.StartPosition == null)
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartPosition), ePropStatus.Error, "[上游构件位置]受[连接列表]影响解析错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartPosition), ePropStatus.Error, "[换热器][上游构件位置]受[连接列表]影响解析错误");
            }
            #endregion
@@ -4602,12 +4655,12 @@
            exchanger.EndCode = endConnect?.Id;
            if (string.IsNullOrEmpty(exchanger.EndCode))
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndCode), ePropStatus.Error, "[下游构件]受[连接列表]影响解析错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndCode), ePropStatus.Error, "[换热器][下游构件]受[连接列表]影响解析错误");
            }
            exchanger.EndPosition = endConnect?.Position;
            if (exchanger.EndPosition == null)
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndPosition), ePropStatus.Error, "[下游构件位置]受[连接列表]影响解析错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndPosition), ePropStatus.Error, "[换热器][下游构件位置]受[连接列表]影响解析错误");
            }
            #endregion
@@ -4620,21 +4673,21 @@
                if (string.IsNullOrEmpty(exchanger.LinkStatus))
                {
                    exchanger.LinkStatus = PipeStatus.Open;
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.LinkStatus), ePropStatus.Lack, "[管道状态]缺省");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.LinkStatus), ePropStatus.Lack, "[换热器][管道状态]缺省");
                }
                else
                {
                    if (!PipeStatus.Contains(exchanger.LinkStatus))
                    {
                        exchanger.LinkStatus = PipeStatus.Open;
                        exchanger.AppendOrUpdatePropStatus(nameof(exchanger.LinkStatus), ePropStatus.Abnormal, "[管道状态]设置错误");
                        exchanger.AppendOrUpdatePropStatus(nameof(exchanger.LinkStatus), ePropStatus.Abnormal, "[换热器][管道状态]设置错误");
                    }
                }
            }
            else
            {
                exchanger.LinkStatus = PipeStatus.Open;
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.LinkStatus), ePropStatus.Abnormal, "[管道状态]缺少或格式错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.LinkStatus), ePropStatus.Abnormal, "[换热器][管道状态]缺少或格式错误");
            }
            #endregion
@@ -4647,7 +4700,7 @@
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartElev), ePropStatus.Abnormal, "[上游标高]缺少或格式错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartElev), ePropStatus.Abnormal, "[换热器][上游标高]缺少或格式错误");
            }
            if (exchanger.StartElev <= 0)
@@ -4655,12 +4708,12 @@
                //通过z轴自动计算
                if (exchanger.StartPosition == null)
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartElev), ePropStatus.Lack, "[上游标高]缺省,受[上游构件位置]影响,无法通过Z轴自动计算");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartElev), ePropStatus.Lack, "[换热器][上游标高]缺省,受[上游构件位置]影响,无法通过Z轴自动计算");
                }
                else
                {
                    exchanger.StartElev = exchanger.StartPosition.Z;
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartElev), ePropStatus.Lack, "[上游标高]缺省,通过Z轴自动计算");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartElev), ePropStatus.Lack, "[换热器][上游标高]缺省,通过Z轴自动计算");
                }
            }
@@ -4674,7 +4727,7 @@
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndElev), ePropStatus.Abnormal, "[下游标高]缺少或格式错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndElev), ePropStatus.Abnormal, "[换热器][下游标高]缺少或格式错误");
            }
            if (exchanger.EndElev <= 0)
@@ -4682,12 +4735,12 @@
                //通过z轴自动计算
                if (exchanger.EndPosition == null)
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndElev), ePropStatus.Lack, "[下游标高]缺省,受[下游构件位置]影响,无法通过Z轴自动计算");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndElev), ePropStatus.Lack, "[换热器][下游标高]缺省,受[下游构件位置]影响,无法通过Z轴自动计算");
                }
                else
                {
                    exchanger.EndElev = exchanger.EndPosition.Z;
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndElev), ePropStatus.Lack, "[下游标高]缺省,通过Z轴自动计算");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndElev), ePropStatus.Lack, "[换热器][下游标高]缺省,通过Z轴自动计算");
                }
            }
@@ -4700,12 +4753,12 @@
                exchanger.StartQuality = startQuality;
                if (exchanger.StartQuality <= 0)
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartQuality), ePropStatus.Lack, "[上游初始水质]缺省");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartQuality), ePropStatus.Lack, "[换热器][上游初始水质]缺省");
                }
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartQuality), ePropStatus.Abnormal, "[上游初始水质]缺少或者格式错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.StartQuality), ePropStatus.Abnormal, "[换热器][上游初始水质]缺少或者格式错误");
            }
            #endregion
@@ -4717,12 +4770,12 @@
                exchanger.EndQuality = endQuality;
                if (exchanger.EndQuality <= 0)
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndQuality), ePropStatus.Lack, "[下游初始水质]缺省");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndQuality), ePropStatus.Lack, "[换热器][下游初始水质]缺省");
                }
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndQuality), ePropStatus.Abnormal, "[下游初始水质]缺少或者格式错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.EndQuality), ePropStatus.Abnormal, "[换热器][下游初始水质]缺少或者格式错误");
            }
            #endregion
@@ -4734,12 +4787,12 @@
                exchanger.Material = material;
                if (string.IsNullOrEmpty(exchanger.Material))
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Material), ePropStatus.Lack, "[材质]缺省");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Material), ePropStatus.Lack, "[换热器][材质]缺省");
                }
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Material), ePropStatus.Abnormal, "缺少[材质]");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Material), ePropStatus.Abnormal, "[换热器]缺少[材质]");
            }
            #endregion
@@ -4752,7 +4805,7 @@
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Abnormal, "[直径]缺少或者格式错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Abnormal, "[换热器][直径]缺少或者格式错误");
            }
            if (exchanger.Diameter < 1)
@@ -4760,11 +4813,11 @@
                if (jobject[RevitJsonProp.InternalDiameter].MatchNumeric(out double internalDiameter))
                {
                    exchanger.Diameter = internalDiameter;
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Lack, "[直径]通过[内径]进行修复]");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Lack, "[换热器][直径]通过[内径]进行修复]");
                }
                else
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Abnormal, "[直径]无法通过[内径]进行修复]");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Abnormal, "[换热器][直径]无法通过[内径]进行修复]");
                }
            }
@@ -4773,18 +4826,18 @@
                if (jobject[RevitJsonProp.DN].MatchNumeric(out double dn))
                {
                    exchanger.Diameter = dn;
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Lack, "[直径]通过[公称直径]进行修复]");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Lack, "[换热器][直径]通过[公称直径]进行修复]");
                }
                else
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Abnormal, "[直径]无法通过[公称直径]进行修复]");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Abnormal, "[换热器][直径]无法通过[公称直径]进行修复]");
                }
            }
            if (exchanger.Diameter < 1)
            {
                exchanger.Diameter = 1000;
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Lack, "[直径][内径]解析错误,使用默认值(1000mm)修正]");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Diameter), ePropStatus.Lack, "[换热器][直径][内径]解析错误,使用默认值(1000mm)修正]");
            }
            #endregion
@@ -4797,18 +4850,18 @@
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Length), ePropStatus.Abnormal, "[长度]缺少或者格式错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Length), ePropStatus.Abnormal, "[换热器][长度]缺少或者格式错误");
            }
            if (exchanger.Length <= 0)
            {
                if (exchanger.StartPosition != null && exchanger.EndPosition != null)
                {
                    exchanger.Length = exchanger.StartPosition.Distance(exchanger.EndPosition);
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Length), ePropStatus.Lack, "[长度]缺省,通过位置自动计算");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Length), ePropStatus.Lack, "[换热器][长度]缺省,通过位置自动计算");
                }
                else
                {
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Length), ePropStatus.Abnormal, "[长度]受[连接列表]影响无法自动计算");
                    exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Length), ePropStatus.Abnormal, "[换热器][长度]受[连接列表]影响无法自动计算");
                }
            }
@@ -4822,13 +4875,13 @@
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Roughness), ePropStatus.Abnormal, "[粗糙系数]缺少或者数据格式错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Roughness), ePropStatus.Abnormal, "[换热器][粗糙系数]缺少或者数据格式错误");
            }
            if (exchanger.Roughness < 0.1)
            {
                exchanger.Roughness = 110;
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Roughness), ePropStatus.Lack, "[粗糙系数]解析错误,通过默认值(110)进行修正");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.Roughness), ePropStatus.Lack, "[换热器][粗糙系数]解析错误,通过默认值(110)进行修正");
            }
            #endregion
@@ -4841,12 +4894,441 @@
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.MinorLoss), ePropStatus.Abnormal, "[局部阻力系数]缺少或者数据格式错误");
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.MinorLoss), ePropStatus.Abnormal, "[换热器][局部阻力系数]缺少或者数据格式错误");
            }
            #endregion
            #region MinorLossK
            if (jobject[RevitJsonProp.MinorLossK].MatchNumeric(out double minorLossK))
            {
                exchanger.MinorLossK = minorLossK;
            }
            else
            {
                exchanger.AppendOrUpdatePropStatus(nameof(exchanger.MinorLossK), ePropStatus.Abnormal, "[换热器][损失K系数]缺少或者数据格式错误");
            }
            #endregion
            return exchanger;
        }
        //解析空压机
        private static HStation.Model.RevitCompressor ParseCompressor(JToken jobject)
        {
            if (jobject == null)
            {
                return default;
            }
            var compressor = new Model.RevitCompressor();
            compressor.Catalog = RevitJsonCatalog.Compressor;
            #region Id
            if (jobject.ParseString(RevitJsonProp.Id, out string id))
            {
                compressor.Id = id;
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Id), ePropStatus.Error, "[空压机]缺少[构件编码]");
            }
            #endregion
            #region Code
            if (jobject.ParseString(RevitJsonProp.Code, out string code))
            {
                compressor.Code = code;
                if (string.IsNullOrEmpty(compressor.Code))
                {
                    compressor.Code = compressor.Id;
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.Code), ePropStatus.Lack, "[空压机][编码]缺省,使用[构件编码]赋值");
                }
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Code), ePropStatus.Error, "[空压机]缺少[编码]");
            }
            #endregion
            #region Name
            if (jobject.ParseString(RevitJsonProp.Name, out string name))
            {
                compressor.Name = name;
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Name), ePropStatus.Lack, "[空压机][名称]缺省");
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Name), ePropStatus.Error, "[空压机]缺少[名称]");
            }
            #endregion
            #region ModelType
            if (jobject.ParseString(RevitJsonProp.ModelType, out string modelType))
            {
                compressor.ModelType = modelType;
                if (string.IsNullOrEmpty(compressor.ModelType))
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.ModelType), ePropStatus.Lack, "[空压机][型号信息]缺省");
                }
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.ModelType), ePropStatus.Error, "[空压机]缺少[型号信息]");
            }
            #endregion
            #region Flags
            if (jobject.ParseString(RevitJsonProp.Flags, out string flags))
            {
                compressor.Flags = Yw.Untity.FlagsHelper.ToList(flags);
                if (!string.IsNullOrEmpty(flags))
                {
                    if (compressor.Flags == null || compressor.Flags.Count < 1)
                    {
                        compressor.AppendOrUpdatePropStatus(nameof(compressor.Flags), ePropStatus.Abnormal, "[空压机][标签]格式错误");
                    }
                }
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Flags), ePropStatus.Error, "[空压机]缺少[标签]");
            }
            #endregion
            #region Description
            if (jobject.ParseString(RevitJsonProp.Description, out string description))
            {
                compressor.Description = description;
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Description), ePropStatus.Error, "[空压机]缺少[说明信息]");
            }
            #endregion
            #region ConnectList
            if (jobject.ParseString(RevitJsonProp.Connects, out string connectString))
            {
                var connectList = JsonHelper.Json2Object<List<RevitJsonConnectModel>>(connectString);
                compressor.ConnectList = connectList?.Select(x => new Model.RevitConnect()
                {
                    Id = x.ConnectId,
                    Direction = x.Dirction,
                    Position = new Model.RevitPosition()
                    {
                        X = x.Point.X / 1000f,
                        Y = x.Point.Y / 1000f,
                        Z = x.Point.Z / 1000f
                    }
                }).ToList();
                if (compressor.ConnectList == null || compressor.ConnectList.Count < 1)
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.ConnectList), ePropStatus.Error, "[空压机][连接列表]解析失败");
                }
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.ConnectList), ePropStatus.Error, "[空压机]缺少[连接列表]");
            }
            #endregion
            #region StartCode/StartPosition
            var startConnect = compressor.ConnectList?.GetStartConnect();
            compressor.StartCode = startConnect?.Id;
            if (string.IsNullOrEmpty(compressor.StartCode))
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.StartCode), ePropStatus.Error, "[空压机][上游构件]受[连接列表]影响解析错误");
            }
            compressor.StartPosition = startConnect?.Position;
            if (compressor.StartPosition == null)
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.StartPosition), ePropStatus.Error, "[空压机][上游构件位置]受[连接列表]影响解析错误");
            }
            #endregion
            #region EndCode/EndPosition
            var endConnect = compressor.ConnectList?.GetEndConnect();
            compressor.EndCode = endConnect?.Id;
            if (string.IsNullOrEmpty(compressor.EndCode))
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.EndCode), ePropStatus.Error, "[空压机][下游构件]受[连接列表]影响解析错误");
            }
            compressor.EndPosition = endConnect?.Position;
            if (compressor.EndPosition == null)
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.EndPosition), ePropStatus.Error, "[空压机][下游构件位置]受[连接列表]影响解析错误");
            }
            #endregion
            #region LinkStatus
            if (jobject.ParseString(RevitJsonProp.LinkStatusPipe, out string linkStatus))
            {
                compressor.LinkStatus = linkStatus;
                if (string.IsNullOrEmpty(compressor.LinkStatus))
                {
                    compressor.LinkStatus = PipeStatus.Open;
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.LinkStatus), ePropStatus.Lack, "[空压机][管道状态]缺省");
                }
                else
                {
                    if (!PipeStatus.Contains(compressor.LinkStatus))
                    {
                        compressor.LinkStatus = PipeStatus.Open;
                        compressor.AppendOrUpdatePropStatus(nameof(compressor.LinkStatus), ePropStatus.Abnormal, "[空压机][管道状态]设置错误");
                    }
                }
            }
            else
            {
                compressor.LinkStatus = PipeStatus.Open;
                compressor.AppendOrUpdatePropStatus(nameof(compressor.LinkStatus), ePropStatus.Abnormal, "[空压机][管道状态]缺少或格式错误");
            }
            #endregion
            #region StartElev
            if (jobject[RevitJsonProp.StartElev].MatchNumeric(out double startElev))
            {
                compressor.StartElev = startElev / 1000f;
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.StartElev), ePropStatus.Abnormal, "[空压机][上游标高]缺少或格式错误");
            }
            if (compressor.StartElev <= 0)
            {
                //通过z轴自动计算
                if (compressor.StartPosition == null)
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.StartElev), ePropStatus.Lack, "[空压机][上游标高]缺省,受[上游构件位置]影响,无法通过Z轴自动计算");
                }
                else
                {
                    compressor.StartElev = compressor.StartPosition.Z;
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.StartElev), ePropStatus.Lack, "[空压机][上游标高]缺省,通过Z轴自动计算");
                }
            }
            #endregion
            #region EndElev
            if (jobject[RevitJsonProp.EndElev].MatchNumeric(out double endElev))
            {
                compressor.EndElev = endElev / 1000f;
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.EndElev), ePropStatus.Abnormal, "[空压机][下游标高]缺少或格式错误");
            }
            if (compressor.EndElev <= 0)
            {
                //通过z轴自动计算
                if (compressor.EndPosition == null)
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.EndElev), ePropStatus.Lack, "[空压机][下游标高]缺省,受[下游构件位置]影响,无法通过Z轴自动计算");
                }
                else
                {
                    compressor.EndElev = compressor.EndPosition.Z;
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.EndElev), ePropStatus.Lack, "[空压机][下游标高]缺省,通过Z轴自动计算");
                }
            }
            #endregion
            #region StartQuality
            if (jobject[RevitJsonProp.StartQuality].MatchNumeric(out double startQuality))
            {
                compressor.StartQuality = startQuality;
                if (compressor.StartQuality <= 0)
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.StartQuality), ePropStatus.Lack, "[空压机][上游初始水质]缺省");
                }
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.StartQuality), ePropStatus.Abnormal, "[空压机][上游初始水质]缺少或者格式错误");
            }
            #endregion
            #region EndQuality
            if (jobject[RevitJsonProp.EndQuality].MatchNumeric(out double endQuality))
            {
                compressor.EndQuality = endQuality;
                if (compressor.EndQuality <= 0)
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.EndQuality), ePropStatus.Lack, "[空压机][下游初始水质]缺省");
                }
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.EndQuality), ePropStatus.Abnormal, "[空压机][下游初始水质]缺少或者格式错误");
            }
            #endregion
            #region Material
            if (jobject.ParseString(RevitJsonProp.Material, out string material))
            {
                compressor.Material = material;
                if (string.IsNullOrEmpty(compressor.Material))
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.Material), ePropStatus.Lack, "[空压机][材质]缺省");
                }
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Material), ePropStatus.Abnormal, "[空压机]缺少[材质]");
            }
            #endregion
            #region Diameter
            if (jobject[RevitJsonProp.Diameter].MatchNumeric(out double diameter))
            {
                compressor.Diameter = diameter;
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Diameter), ePropStatus.Abnormal, "[空压机][直径]缺少或者格式错误");
            }
            if (compressor.Diameter < 1)
            {
                if (jobject[RevitJsonProp.InternalDiameter].MatchNumeric(out double internalDiameter))
                {
                    compressor.Diameter = internalDiameter;
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.Diameter), ePropStatus.Lack, "[空压机][直径]通过[内径]进行修复]");
                }
                else
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.Diameter), ePropStatus.Abnormal, "[空压机][直径]无法通过[内径]进行修复]");
                }
            }
            if (compressor.Diameter < 1)
            {
                if (jobject[RevitJsonProp.DN].MatchNumeric(out double dn))
                {
                    compressor.Diameter = dn;
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.Diameter), ePropStatus.Lack, "[空压机][直径]通过[公称直径]进行修复]");
                }
                else
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.Diameter), ePropStatus.Abnormal, "[空压机][直径]无法通过[公称直径]进行修复]");
                }
            }
            if (compressor.Diameter < 1)
            {
                compressor.Diameter = 1000;
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Diameter), ePropStatus.Lack, "[空压机][直径][内径]解析错误,使用默认值(1000mm)修正]");
            }
            #endregion
            #region Length
            if (jobject[RevitJsonProp.Length].MatchNumeric(out double length))
            {
                compressor.Length = length / 1000f;
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Length), ePropStatus.Abnormal, "[空压机][长度]缺少或者格式错误");
            }
            if (compressor.Length <= 0)
            {
                if (compressor.StartPosition != null && compressor.EndPosition != null)
                {
                    compressor.Length = compressor.StartPosition.Distance(compressor.EndPosition);
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.Length), ePropStatus.Lack, "[空压机][长度]缺省,通过位置自动计算");
                }
                else
                {
                    compressor.AppendOrUpdatePropStatus(nameof(compressor.Length), ePropStatus.Abnormal, "[空压机][长度]受[连接列表]影响无法自动计算");
                }
            }
            #endregion
            #region Roughness
            if (jobject[RevitJsonProp.Roughness].MatchNumeric(out double roughness))
            {
                compressor.Roughness = roughness;
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Roughness), ePropStatus.Abnormal, "[空压机][粗糙系数]缺少或者数据格式错误");
            }
            if (compressor.Roughness < 0.1)
            {
                compressor.Roughness = 110;
                compressor.AppendOrUpdatePropStatus(nameof(compressor.Roughness), ePropStatus.Lack, "[空压机][粗糙系数]解析错误,通过默认值(110)进行修正");
            }
            #endregion
            #region MinorLoss
            if (jobject[RevitJsonProp.MinorLoss].MatchNumeric(out double minorLoss))
            {
                compressor.MinorLoss = minorLoss;
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.MinorLoss), ePropStatus.Abnormal, "[空压机][局部阻力系数]缺少或者数据格式错误");
            }
            #endregion
            #region MinorLossK
            if (jobject[RevitJsonProp.MinorLossK].MatchNumeric(out double minorLossK))
            {
                compressor.MinorLossK = minorLossK;
            }
            else
            {
                compressor.AppendOrUpdatePropStatus(nameof(compressor.MinorLossK), ePropStatus.Abnormal, "[空压机][损失K系数]缺少或者数据格式错误");
            }
            #endregion
            return compressor;
        }
        //解析水泵
@@ -4857,6 +5339,7 @@
                return default;
            }
            var pump = new Model.RevitPump();
            pump.Catalog = RevitJsonCatalog.Pump;
            #region Id 
@@ -5213,6 +5696,7 @@
            if (pump.RatedHz < 1)
            {
                pump.RatedHz = 50;
                pump.AppendOrUpdatePropStatus(nameof(pump.RatedHz), ePropStatus.Lack, "[额定频率]缺省,使用默认值(50Hz)进行修正");
            }
@@ -5346,6 +5830,7 @@
                return default;
            }
            var valve = new Model.RevitValve();
            valve.Catalog = RevitJsonCatalog.Valve;
            #region Id 
@@ -5702,6 +6187,20 @@
            #endregion
            #region OpeningDegree
            if (jobject[RevitJsonProp.ValveOpeningDegree].MatchNumeric(out double openingDegree))
            {
                valve.OpeningDegree = openingDegree;
            }
            else
            {
                valve.OpeningDegree = 100;
                valve.AppendOrUpdatePropStatus(nameof(valve.MinorLoss), ePropStatus.Abnormal, "[阀门开度]缺少或者数据格式错误,使用默认值(100)进行修正");
            }
            #endregion
            #region ValveSetting
            if (jobject.ParseString(RevitJsonProp.ValveSetting, out string valveSetting))