Преглед на файлове

mxg:添加族编码与岗位code一致性检查

mengxiangge преди 6 години
родител
ревизия
9bfcd8532d

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


+ 2 - 1
MBI/SAGA.MBI/Calc/CalcContext.cs

@@ -70,11 +70,12 @@ namespace SAGA.MBI.Calc
         /// <summary>
         /// 打开项目
         /// </summary>
-        public void OpenDocument()
+        public Document OpenDocument()
         {
             string path = MFloor.FullPath;
             var uiApp = ExternalDataWrapper.Current.UiApp;
             RevitDoc = uiApp.Application.OpenDocumentFile(path);
+            return RevitDoc;
         }
         /// <summary>
         /// 关闭项目

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

@@ -334,6 +334,8 @@
     <Compile Include="RevitModelHandle\RevitParameterUpdate.cs" />
     <Compile Include="RevitReference\RVTNoModeDutyOperate.cs" />
     <Compile Include="Service\InputService.cs" />
+    <Compile Include="ToolsData\DataCheck\DutyModeCodeDiffCheck.cs" />
+    <Compile Include="ToolsData\DataCheck\DutyModeCodeDiffCheckResult.cs" />
     <Compile Include="ToolsData\DataCheck\SpaceEquipFloorCheck.cs" />
     <Compile Include="ToolsData\DataCheck\SpaceEquipFloorCheckResult.cs" />
     <Compile Include="ToolsData\DelZeroSpace.cs" />

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

@@ -80,9 +80,10 @@ namespace SAGA.MBI.ToolsData.CheckBase
             List<DataCheckBase> list = new List<DataCheckBase>();
             list.Add(new DutyFMInfoCheck());
             list.Add(new QRCodeContextCheck());
+            list.Add(new SpaceEquipFloorCheck());
             list.Add(new MissDutyOrMode());
             list.Add(new BIMDuplicationCheck());
-            list.Add(new SpaceEquipFloorCheck());
+            list.Add(new DutyModeCodeDiff());
             list.ForEach(t =>
             {
                 t.RIsChecked = true;

+ 1 - 1
MBI/SAGA.MBI/ToolsData/CheckEquipCategory.cs

@@ -81,7 +81,7 @@ namespace SAGA.MBI.ToolsData
         /// <param name="baseContext"></param>
         /// <param name="delcontext"></param>
         /// <param name="addContext"></param>
-        private static void Check(CalcContext baseContext, CalcContext delcontext, CalcContext addContext)
+        public static void Check(CalcContext baseContext, CalcContext delcontext, CalcContext addContext)
         {
             var doc = baseContext.RevitDoc;
             //检查空间,逻辑不通,暂时注释掉

+ 162 - 0
MBI/SAGA.MBI/ToolsData/DataCheck/DutyModeCodeDiffCheck.cs

@@ -0,0 +1,162 @@
+/* ==============================================================================
+ * 功能描述:岗位和资产信息点一致性检查
+ * 创 建 者:Garrett
+ * 创建日期:2018/10/23 15:08:55
+ * ==============================================================================*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Windows.Documents;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Mechanical;
+using Newtonsoft.Json.Linq;
+using NPOI.SS.UserModel;
+using SAGA.DotNetUtils.Extend;
+using SAGA.DotNetUtils.Logger;
+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 DutyModeCodeDiff : DataCheckBase
+    {
+        public DutyModeCodeDiff()
+        {
+            Name = "模型中的族编码和岗位的设备类编码一致性检查";
+        }
+        [DataCheckProcessAspect]
+        public override bool Check()
+        {
+            IsRight = GetCheckResult();
+            return IsRight;
+        }
+
+        public override void Correct()
+        {
+            throw new NotImplementedException();
+        }
+
+        #region CheckMethod
+        /// <summary>
+        /// 对比信息点是否一致
+        /// </summary>
+        /// <returns></returns>
+        private bool GetCheckResult()
+        {
+            bool result = true;
+            var floors = DalProjectTree.GetSelectedFloors(true);
+            foreach (var mfloor in floors)
+            {
+                Results.AddRange(GetCheckResult(mfloor));
+            }
+            return Results.All(t => t.IsRight);
+        }
+
+        private List<DutyModeCodeDiffCheckResult> GetCheckResult(MFloor floor)
+        {
+            List<DutyModeCodeDiffCheckResult> list = new List<DutyModeCodeDiffCheckResult>();
+
+            var context = DalCommon.DownLoadCouldData(floor);
+            try
+            {
+                var doc=context.OpenDocument();
+                string floorName = context.MFloor.ToString();
+                //检查空间,逻辑不通,暂时注释掉
+                List<MRevitEquipBase> modes = new List<MRevitEquipBase>();
+                //检查设备
+                modes.AddRange(context.MEquipments);
+                //检查部件 
+                modes.AddRange(context.MEquipmentParts);
+                //信标不用检查
+                foreach (var mode in modes)
+                {
+                    string cBimId = mode.BimID;
+                    if (cBimId.IsNullOrEmpty()) continue;
+                    int bimid = cBimId.GetBIMID();
+                    FamilyInstance fi = doc.GetElement(bimid) as FamilyInstance;
+                    if (fi == null) continue;
+                    var code = fi.GetFamilyCode();
+                    var cCode = mode.EquipClassCode;
+                    if (code != cCode)
+                    {
+                        DutyModeCodeDiffCheckResult result = new DutyModeCodeDiffCheckResult();
+                        result.FloorName = floorName;
+                        result.DutyId = mode.Id;
+                        result.BIMID = bimid.ToString();
+                        result.DCode = cCode;
+                        result.MCode = code;
+                        result.FamilyName = fi.GetFamily()?.Name;
+                        result.IsRight = false;
+                        result.RMessage = "模型族编码与岗位设备类编码不一致,请检查模型是否需要更新或使用“族编码同步”命令同步";
+                        list.Add(result);
+                    }
+                }
+            }
+            catch (Exception e)
+            {
+                MessageShowBase.Show(e);
+            }
+            finally
+            {
+                context.RevitDoc.CloseDoc();
+            }
+            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 (DutyModeCodeDiffCheckResult 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.MCode, style);
+                    rowN.AddCell(i++, result.FamilyName, style);
+                    rowN.AddCell(i++, result.BIMID, style);
+                    rowN.AddCell(i++, result.DCode, style);
+                    rowN.AddCell(i++, result.DutyId, style);
+                    string rowN4 = result.IsRight ? "通过" : "不通过";
+                    rowN.AddCell(i++, rowN4, style);
+                    rowN.AddCell(i++, result.RMessage, style);
+                }
+                #endregion
+
+            }
+            catch (Exception e)
+            {
+                MessageShowBase.Show(e);
+            }
+        }
+    }
+}

+ 27 - 0
MBI/SAGA.MBI/ToolsData/DataCheck/DutyModeCodeDiffCheckResult.cs

@@ -0,0 +1,27 @@
+/* ==============================================================================
+ * 功能描述:岗位和资产信息点一致性检查结果
+ * 创 建 者: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 DutyModeCodeDiffCheckResult : DataCheckResultBase
+    {
+        public string FloorName { get; set; }
+        public string DutyId { get; set; }
+        public string DutyName { get; set; }
+        public string BIMID { get; set; }
+        public string FamilyName { get; set; }
+        //岗位设备类编码
+        public string DCode { get; set; }
+        //模型族编码
+        public string MCode { get; set; }
+    }
+}