소스 검색

mxg:添加多个岗位共用一个BIMID重复检查

mengxiangge 6 년 전
부모
커밋
0cd7d742f2

BIN
MBI/MBIResource/DataCheck/垃圾数据检查结果输出-模版.xlsx


+ 2 - 0
MBI/SAGA.MBI/SAGA.MBI.csproj

@@ -283,7 +283,9 @@
     <Compile Include="ToolsData\DataCheck\DataCheckBase.cs" />
     <Compile Include="ToolsData\CheckBase\CheckContext.cs" />
     <Compile Include="ToolsData\DataCheck\DataCheckResultBase.cs" />
+    <Compile Include="ToolsData\DataCheck\BIMDuplicationCheck.cs" />
     <Compile Include="ToolsData\DataCheck\MissDutyOrModeCheck.cs" />
+    <Compile Include="ToolsData\DataCheck\BIMDuplicationCheckResult.cs" />
     <Compile Include="ToolsData\DataCheck\MissDutyOrModeCheckResult.cs" />
     <Compile Include="ToolsData\DataCheck\QRCodeContextCheck.cs" />
     <Compile Include="ToolsData\DataCheck\DutyFMInfoCheck.cs" />

+ 1 - 0
MBI/SAGA.MBI/ToolsData/CheckBase/CheckOperation.cs

@@ -78,6 +78,7 @@ namespace SAGA.MBI.ToolsData.CheckBase
             list.Add(new DutyFMInfoCheck());
             list.Add(new QRCodeContextCheck());
             list.Add(new MissDutyOrMode());
+            list.Add(new BIMDuplicationCheck());
             list.ForEach(t =>
             {
                 t.RIsChecked = true;

+ 155 - 0
MBI/SAGA.MBI/ToolsData/DataCheck/BIMDuplicationCheck.cs

@@ -0,0 +1,155 @@
+/* ==============================================================================
+ * 功能描述:检查BimID是否重复,多个岗位对应一个模型
+ * 创 建 者:Garrett
+ * 创建日期:2018/10/23 15:08:55
+ * ==============================================================================*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Mechanical;
+using Newtonsoft.Json.Linq;
+using NPOI.SS.UserModel;
+using SAGA.DotNetUtils.Extend;
+using SAGA.DotNetUtils.Others;
+using SAGA.MBI.Calc;
+using SAGA.MBI.DataArrange;
+using SAGA.MBI.JsonConvert;
+using SAGA.MBI.Model;
+using SAGA.MBI.RequestData;
+using SAGA.MBI.Tools;
+using SAGA.MBI.ToolsData.CheckBase;
+using SAGA.MBI.ToolsData.ModeCheck;
+using SAGA.RevitUtils.Extends;
+
+namespace SAGA.MBI.ToolsData.DataCheck
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    class BIMDuplicationCheck : DataCheckBase
+    {
+        public BIMDuplicationCheck()
+        {
+            Name = "多个岗位共用一个bimID检查";
+        }
+        [DataCheckProcessAspect]
+        public override bool Check()
+        {
+            IsRight = GetCheckResult();
+            RMessage = IsRight ? "" : "多个岗位对应一个BIMID,请检查。";
+            return IsRight;
+        }
+
+        public override void Correct()
+        {
+        }
+
+        #region CheckMethod
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        private bool GetCheckResult()
+        {            
+            bool result = true;
+            var mbuilding = DalProjectTree.GetSelectedBuilding();
+            var dutys = DalCommon.GetAllDutys(mbuilding.Id);
+            var bybimidGroups = dutys.GroupBy(t => t.BimID);
+            var exceptionGroups = bybimidGroups.Where(t => t.Count() >= 2 && !t.Key.IsOnlyDutyNoModelBIMID());
+            Results.AddRange(GetCheckResult(exceptionGroups));
+            return Results.Count==0;
+        }
+
+        private List<BIMDuplicationCheckResult> GetCheckResult(IEnumerable<IGrouping<string, MRevitEquipBase>> groups)
+        {
+            List<BIMDuplicationCheckResult> list = new List<BIMDuplicationCheckResult>();
+
+            try
+            {
+                foreach (var group in groups)
+                {
+                  list.AddRange(GetCheckResult(group));
+                }
+            }
+            catch (Exception e)
+            {
+            }
+            return list;
+        }
+
+        private List<BIMDuplicationCheckResult> GetCheckResult(IGrouping<string, MRevitEquipBase> group)
+        {
+            List<BIMDuplicationCheckResult> list = new List<BIMDuplicationCheckResult>();
+            try
+            {
+                string bimid = group.Key;
+                string revitId=bimid.GetBIMID().ToString();
+                string floorId = bimid.GetFloorId();
+                string floorName = DalProjectTree.GetFloorNameByFloorId(floorId);
+                foreach (MRevitEquipBase equipBase in group)
+                {
+                    BIMDuplicationCheckResult result=new BIMDuplicationCheckResult();
+                    result.FloorName = floorName;
+                    result.DutyId = equipBase.Id;
+                    result.DutyName = equipBase.ToString();
+                    result.BIMID = revitId;
+                    result.IsRight = false;
+                    list.Add(result);
+                }
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e);
+            }
+            finally
+            {
+            
+            }
+            return list;
+        }
+
+        #endregion
+
+        //[DataCheckProcessAspect]
+        public override void Export()
+        {
+            //   Check();
+            try
+            {
+                IWorkbook book = DCRExport.GetWorkbook();
+                //ISheet sheet = book.CreateSheet(Name);
+                ISheet sheet = book.GetSheet(Name);
+
+                #region 添加数据
+                int index = 3;
+                
+                foreach (MissDutyOrModeCheckResult result in Results)
+                {
+                    //数量过多,只显示有问题的
+                    //if (result.IsRight) continue;
+                    index++;
+                    IRow rowN = sheet.CreateRow(index);
+                    DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
+                    int i = 0;
+                    rowN.AddCell(i++, result.FloorName, style);
+                    rowN.AddCell(i++, result.DutyId, style);
+                    rowN.AddCell(i++, result.DutyName, style);
+                    rowN.AddCell(i++, result.BIMID, style);
+                    string rowN4 = result.IsRight ? "通过" : "不通过";
+                    rowN.AddCell(i++, rowN4, style);
+                    rowN.AddCell(i++, result.RMessage, style);
+                }
+                #endregion
+
+            }
+            catch (Exception e)
+            {
+                MessageShowBase.Show(e);
+            }
+        }
+    }
+}

+ 22 - 0
MBI/SAGA.MBI/ToolsData/DataCheck/BIMDuplicationCheckResult.cs

@@ -0,0 +1,22 @@
+/* ==============================================================================
+ * 功能描述:检查BimID是否重复,多个岗位对应一个模型
+ * 创 建 者:Garrett
+ * 创建日期:2018/10/23 15:13:17
+ * ==============================================================================*/
+
+using SAGA.MBI.ToolsData.CheckBase;
+using SAGA.MBI.ToolsData.ModeCheck;
+
+namespace SAGA.MBI.ToolsData.DataCheck
+{
+    /// <summary>
+    /// UnitCheckResult
+    /// </summary>
+    class BIMDuplicationCheckResult : DataCheckResultBase
+    {
+        public string FloorName { get; set; }
+        public string DutyId { get; set; }
+        public string DutyName { get; set; }
+        public string BIMID { get; set; }
+    }
+}

+ 8 - 6
MBI/SAGA.MBI/ToolsData/DataCheck/MissDutyOrModeCheck.cs

@@ -34,7 +34,7 @@ namespace SAGA.MBI.ToolsData.DataCheck
     {
         public MissDutyOrMode()
         {
-            Name = "岗位与模型一致性检查";
+            Name = "物理世界对象与模型一致性检查";
         }
         [DataCheckProcessAspect]
         public override bool Check()
@@ -89,13 +89,14 @@ namespace SAGA.MBI.ToolsData.DataCheck
                 //{
                 //    calcContext.OpenDocument();
                 //}
-                Action<List<MRevitEquipBase>, List<MissDutyOrModeCheckResult>> convetAction = (dutys, l) =>
+                Action<List<MRevitEquipBase>, List<MissDutyOrModeCheckResult>, DCElementType> convetAction = (dutys, l,type) =>
                 {
                     foreach (var duty in dutys)
                     {
                         MissDutyOrModeCheckResult result = new MissDutyOrModeCheckResult();
                         result.FloorName = calcContext.MFloor.ToString();
                         result.IsRight = false;
+                        result.Type = type;
                         if (isadd)
                         {
                             result.BIMID = duty.BimID.GetBIMID().ToString();
@@ -110,10 +111,10 @@ namespace SAGA.MBI.ToolsData.DataCheck
                         l.Add(result);
                     }
                 };
-                convetAction(calcContext.MEquipments.ToList<MRevitEquipBase>(), list);
-                convetAction(calcContext.MEquipmentParts.ToList<MRevitEquipBase>(), list);
-                convetAction(calcContext.MBeacons.ToList<MRevitEquipBase>(), list);
-                convetAction(calcContext.MSpaces.ToList<MRevitEquipBase>(), list);
+                convetAction(calcContext.MEquipments.ToList<MRevitEquipBase>(), list,DCElementType.Equipment);
+                convetAction(calcContext.MEquipmentParts.ToList<MRevitEquipBase>(), list,DCElementType.EuipmentPart);
+                convetAction(calcContext.MBeacons.ToList<MRevitEquipBase>(), list,DCElementType.Beacon);
+                convetAction(calcContext.MSpaces.ToList<MRevitEquipBase>(), list,DCElementType.Space);
             }
             catch (Exception e)
             {
@@ -155,6 +156,7 @@ namespace SAGA.MBI.ToolsData.DataCheck
                     rowN.AddCell(i++, result.FloorName, style);
                     rowN.AddCell(i++, result.DutyId, style);
                     rowN.AddCell(i++, result.DutyName, style);
+                    rowN.AddCell(i++, result.Type.GetDescription(), style);
                     rowN.AddCell(i++, result.BIMID, style);
                     string rowN4 = result.IsRight ? "通过" : "不通过";
                     rowN.AddCell(i++, rowN4, style);

+ 2 - 0
MBI/SAGA.MBI/ToolsData/DataCheck/MissDutyOrModeCheckResult.cs

@@ -4,6 +4,7 @@
  * 创建日期:2018/10/23 15:13:17
  * ==============================================================================*/
 
+using SAGA.MBI.ToolsData.CheckBase;
 using SAGA.MBI.ToolsData.ModeCheck;
 
 namespace SAGA.MBI.ToolsData.DataCheck
@@ -18,5 +19,6 @@ namespace SAGA.MBI.ToolsData.DataCheck
         public string DutyName { get; set; }
         public string BIMID { get; set; }
         public string FamilyName { get; set; }
+        public DCElementType Type { get; set; }
     }
 }

+ 1 - 1
MBI/SAGA.MBI/ToolsData/ModeCheck/DCRExport.cs

@@ -37,7 +37,7 @@ namespace SAGA.MBI.ToolsData.ModeCheck
         {
             SaveFileDialog sflg = new SaveFileDialog();
             if (File.Exists(defaultPath))
-                sflg.InitialDirectory = defaultPath;
+                sflg.FileName = defaultPath;
             sflg.Filter = "Excel(*.xlsx)|*.xlsx";
             if (sflg.ShowDialog() != true) return defaultPath;
             string fileName = sflg.FileName;

+ 2 - 2
MBI/SAGA.RevitUtils/Extends/FamilyInstanceExtend.cs

@@ -923,8 +923,8 @@ namespace SAGA.RevitUtils.Extends
         public static Line GetDoorWindowLocLine(this FamilyInstance instance, XYZ vect = null)
         {
             double dWidth = instance.GetBuiltInWidth()/2; //由于下边创建线的的方法是向两边延伸,所以宽度除以2
-            double dRotation = 0;
-            XYZ ptLoc = instance.Location.GetPoint(out dRotation);
+            double dRotation = instance.Location.GetRotation();
+            XYZ ptLoc = instance.Location.GetPoint();
 
             if (vect == null)
             {

+ 13 - 24
MBI/SAGA.RevitUtils/Extends/LocationExtend.cs

@@ -5,24 +5,6 @@ namespace SAGA.RevitUtils.Extends
 {
     public static class LocationExtend
     {
-        /// <summary>
-        /// 定位点
-        /// </summary>
-        /// <param name="loc"></param>
-        /// <param name="dRotate"></param>
-        /// <returns></returns>
-        public static XYZ GetPoint(this Location loc, out double dRotate)
-        {
-            dRotate = 0;
-            if (!(loc is LocationPoint)) return null;
-            LocationPoint lp = loc as LocationPoint;
-            try
-            {
-                dRotate = lp.Rotation;//MEP中有一些族获取此参数时抛出不明异常
-            }
-            catch { }
-            return lp.Point;
-        }
 
         /// <summary>
         /// 定位点
@@ -31,8 +13,10 @@ namespace SAGA.RevitUtils.Extends
         /// <returns></returns>
         public static XYZ GetPoint(this Location loc)
         {
-            double dR;
-            return loc.GetPoint(out dR);
+            XYZ point = null;
+            if (loc is LocationPoint lp)
+                point = lp?.Point;
+            return point;
         }
 
         /// <summary>
@@ -42,9 +26,14 @@ namespace SAGA.RevitUtils.Extends
         /// <returns></returns>
         public static double GetRotation(this Location loc)
         {
-            double dR;
-            loc.GetPoint(out dR);
-            return dR;
+            double dRotate = 0;
+            try
+            {
+                if (loc is LocationPoint lp)
+                    dRotate = lp.Rotation;//MEP中有一些族获取此参数时抛出不明异常
+            }
+            catch { }
+            return dRotate;
         }
 
         /// <summary>
@@ -54,7 +43,7 @@ namespace SAGA.RevitUtils.Extends
         /// <returns></returns>
         public static Curve GetCurve(this Location loc)
         {
-            if (!(loc is LocationCurve)) return null ;
+            if (!(loc is LocationCurve)) return null;
             LocationCurve lc = loc as LocationCurve;
             return lc.Curve;
         }