|
@@ -0,0 +1,228 @@
|
|
|
+/* ==============================================================================
|
|
|
+ * 功能描述:管网及相关设备检查检查
|
|
|
+ * 创 建 者:Garrett
|
|
|
+ * 创建日期:2018/10/23 15:08:55
|
|
|
+ * ==============================================================================*/
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using Autodesk.Revit.DB;
|
|
|
+using NPOI.SS.UserModel;
|
|
|
+using SAGA.DotNetUtils;
|
|
|
+using SAGA.DotNetUtils.Extend;
|
|
|
+using SAGA.DotNetUtils.Logger;
|
|
|
+using SAGA.DotNetUtils.Others;
|
|
|
+using SAGA.MBI.DataArrange;
|
|
|
+using SAGA.MBI.Model;
|
|
|
+using SAGA.MBI.Tools;
|
|
|
+using SAGA.MBI.ToolsData.CheckBase;
|
|
|
+using SAGA.RevitUtils.Extends;
|
|
|
+using SAGA.RevitUtils.MEP;
|
|
|
+
|
|
|
+namespace SAGA.MBI.ToolsData.ModeCheck
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// UnitCheck
|
|
|
+ /// </summary>
|
|
|
+ class EquipReferSystemCheck : ModeCheckBase
|
|
|
+ {
|
|
|
+ public EquipReferSystemCheck()
|
|
|
+ {
|
|
|
+ Name = "管网及相关设备检查";
|
|
|
+ RSPecificationSheet.Add("参考-官网及相关设备");
|
|
|
+ }
|
|
|
+ [DataCheckProcessAspect]
|
|
|
+ public override bool Check()
|
|
|
+ {
|
|
|
+ if (!RBase.IsRight)
|
|
|
+ {
|
|
|
+ IsRight = RBase.IsRight;
|
|
|
+ return IsRight;
|
|
|
+ }
|
|
|
+ IsRight = GetCheckResult();
|
|
|
+ return IsRight;
|
|
|
+ }
|
|
|
+
|
|
|
+ public override void Correct()
|
|
|
+ {
|
|
|
+ throw new NotImplementedException();
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<DCR_EquipReferSystem> m_EquipReferSystems;
|
|
|
+ private bool GetCheckResult()
|
|
|
+ {
|
|
|
+ bool unitResult = true;
|
|
|
+ m_EquipReferSystems = DataCheckRule.GetEquipReferSystems();
|
|
|
+ foreach (SagaSignCheckResult signResult in RBase.Results)
|
|
|
+ {
|
|
|
+ var list = Check(signResult);
|
|
|
+ Results.AddRange(list);
|
|
|
+ }
|
|
|
+ return Results.All(t => t.IsRight);
|
|
|
+
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 获取所有的设备或者部件
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="document"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private List<ModeCheckResultBase> Check(SagaSignCheckResult signResult)
|
|
|
+ {
|
|
|
+ List<ModeCheckResultBase> list = new List<ModeCheckResultBase>();
|
|
|
+ var familyInstances = signResult.RDocument.GetFamilyInstances();
|
|
|
+
|
|
|
+ foreach (FamilyInstance fi in familyInstances)
|
|
|
+ {
|
|
|
+ if (fi.IsEquipment() || fi.IsEquipmentPart())
|
|
|
+ {
|
|
|
+ var result = GetCheckResult(fi);
|
|
|
+ if (result == null) continue;
|
|
|
+ result.RBase = signResult;
|
|
|
+ list.Add(result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取检测结果
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="fi"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private ModeCheckResultBase GetCheckResult(FamilyInstance fi)
|
|
|
+ {
|
|
|
+ var result = new EquipReferSystemCheckResult();
|
|
|
+ var code = fi.GetFamilyCode();
|
|
|
+ var referSystems = GetReferSystems(code);
|
|
|
+ if (referSystems.Count == 0) return null;
|
|
|
+
|
|
|
+ result.FamilyName = fi.GetFamily().Name;
|
|
|
+ result.Type = code.Length == 4 ? DCElementType.Equipment : DCElementType.EuipmentPart;
|
|
|
+ result.Id = fi.Id.ToString();
|
|
|
+
|
|
|
+ var tuple = CheckConType(fi, referSystems);
|
|
|
+ result.IsRight = !tuple.Item2.Any();
|
|
|
+ if (!result.IsRight)
|
|
|
+ {
|
|
|
+ result.RMessage = $"设备与管道系统类型不匹配;";
|
|
|
+ if (tuple.Item1.Any())
|
|
|
+ {
|
|
|
+ result.RMessage += "匹配的系统类型有";
|
|
|
+ result.RMessage += string.Join(",", tuple.Item1.ToArray());
|
|
|
+ }
|
|
|
+
|
|
|
+ result.RMessage += "不匹配的有:";
|
|
|
+ result.RMessage+= string.Join(",", tuple.Item2.ToArray());
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 可以与设备连接的系统
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="code"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private List<string> GetReferSystems(string code)
|
|
|
+ {
|
|
|
+ var item = m_EquipReferSystems.First(t => t.EquipName == code)?.Systems ?? new List<string>();
|
|
|
+
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 检查连接件连接的管道系统是否符合规范
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="result"></param>
|
|
|
+ /// <param name="domain"></param>
|
|
|
+ private Tuple<List<string>,List<string>> CheckConType(FamilyInstance fi, List<string> referSystems)
|
|
|
+ {
|
|
|
+ List<string> passList=new List<string>();
|
|
|
+ List<string> unpassList=new List<string>();
|
|
|
+
|
|
|
+ var connectors = fi.GetAllConnectors();
|
|
|
+ foreach (Connector connector in connectors)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var mepSystem = connector.MEPSystem;
|
|
|
+ if (mepSystem == null) continue;
|
|
|
+ var elementId = mepSystem.GetTypeId();
|
|
|
+ var type = fi.Document.GetElement(elementId);
|
|
|
+ if (referSystems.Contains(type.Name))
|
|
|
+ {
|
|
|
+ passList.Add(mepSystem.Name);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ unpassList.Add(mepSystem.Name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ Log4Net.Info($"读取连接件系统错误。Id:{fi.Id},Path:{fi.Document.PathName}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return new Tuple<List<string>, List<string>>(passList, unpassList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //[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;
|
|
|
+ //添加 共检查XXX条数据,未通过检查的如下 提示
|
|
|
+ IRow rowTip = sheet.CreateRow(index - 1);
|
|
|
+ rowTip.AddCell(0, $"总检查{Results.Count}条数据,未通过检查的如下", DataCheckNPOIStyle.Title);
|
|
|
+ //IRow row4 = sheet.CreateRow(index);
|
|
|
+ //row4.HeightInPoints = 15;
|
|
|
+
|
|
|
+ //row4.AddCell(0, "楼层本地名称", DataCheckNPOIStyle.Title);
|
|
|
+ //row4.AddCell(1, "文件名", DataCheckNPOIStyle.Title);
|
|
|
+ //row4.AddCell(2, "文件地址", DataCheckNPOIStyle.Title);
|
|
|
+ //row4.AddCell(3, "族名称", DataCheckNPOIStyle.Title);
|
|
|
+ //row4.AddCell(4, "类型", DataCheckNPOIStyle.Title);
|
|
|
+ //row4.AddCell(5, "ID", DataCheckNPOIStyle.Title);
|
|
|
+ //row4.AddCell(6, "通过", DataCheckNPOIStyle.Title);
|
|
|
+ //row4.AddCell(7, "备注(失败原因)", DataCheckNPOIStyle.Title);
|
|
|
+ foreach (EquipReferSystemCheckResult result in Results)
|
|
|
+ {
|
|
|
+ SagaSignCheckResult rbase = result.RBase as SagaSignCheckResult;
|
|
|
+ if (rbase == null)
|
|
|
+ continue;
|
|
|
+ //数量多过,只显示有问题的
|
|
|
+ if (result.IsRight) continue;
|
|
|
+ index++;
|
|
|
+ IRow rowN = sheet.CreateRow(index);
|
|
|
+ DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
|
|
|
+
|
|
|
+ rowN.AddCell(0, rbase.RFloorName, style);
|
|
|
+ rowN.AddCell(1, rbase.RFileName, style);
|
|
|
+ rowN.AddCell(2, rbase.RPath, style);
|
|
|
+ rowN.AddCell(3, result.FamilyName, style);
|
|
|
+ rowN.AddCell(4, result.Type.GetDescription(), style);
|
|
|
+ rowN.AddCell(5, result.Id, style);
|
|
|
+ string rowN4 = result.IsRight ? "通过" : "不通过";
|
|
|
+ rowN.AddCell(6, rowN4, style);
|
|
|
+ rowN.AddCell(7, result.RMessage, style);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ MessageShowBase.Show(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|