123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- /* ==============================================================================
- * 功能描述:管网及相关设备检查检查
- * 创 建 者:Garrett
- * 创建日期:2018/10/23 15:08:55
- * ==============================================================================*/
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Autodesk.Revit.DB;
- using NPOI.SS.UserModel;
- using SAGA.DotNetUtils.Extend;
- using SAGA.DotNetUtils.Logger;
- using SAGA.DotNetUtils.Others;
- using SAGA.RevitUtils.Extends;
- using SAGA.RevitUtils.MEP;
- namespace Saga.PlugIn.ModelCheck
- {
- /// <summary>
- ///
- /// </summary>
- [ParseIndex(Index = 11)]
- class EquipReferSystemCheck : ModeCheckBase
- {
- public EquipReferSystemCheck()
- {
- Name = "管网及相关设备检查";
- RSPecificationSheet.Add("参考-管网及相关设备");
- }
- public override bool Check()
- {
- if (!RBase.IsRight)
- {
- IsRight = RBase.IsRight;
- return IsRight;
- }
- IsRight = GetCheckResult();
- return IsRight;
- }
- 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 elements = signResult.RDocument.GetFamilyInstances();
- foreach (Element element in elements)
- {
- if (element.IsEquipment() || element.IsEquipmentPart())
- {
- var result = GetCheckResult(element);
- if (result == null) continue;
- result.RBase = signResult;
- list.Add(result);
- }
- }
- return list;
- }
- /// <summary>
- /// 获取检测结果
- /// </summary>
- /// <param name="fi"></param>
- /// <returns></returns>
- private ModeCheckResultBase GetCheckResult(Element element)
- {
- var result = new EquipReferSystemCheckResult();
- var code = element.GetFamilyCode();
- var referSystems = GetReferSystems(code);
- if (referSystems.Count == 0) return null;
- result.FamilyName = element.GetFamilyName();
- result.Id = element.Id.ToString();
- var tuple = CheckConType(element, referSystems);
- result.IsRight = !tuple.Item2.Any();
- result.PassConnectorsName += string.Join("、", tuple.Item1.ToArray());
- result.UnPassConnectorsName += string.Join("、", tuple.Item2.ToArray());
- if (!result.IsRight)
- {
- result.RMessage = $"连接件所连接的管道系统与规范不一致,请检查";
- }
- return result;
- }
- /// <summary>
- /// 可以与设备连接的系统
- /// </summary>
- /// <param name="code"></param>
- /// <returns></returns>
- private List<string> GetReferSystems(string code)
- {
- var item = m_EquipReferSystems.FirstOrDefault(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(Element element, List<string> referSystems)
- {
- List<string> passList=new List<string>();
- List<string> unpassList=new List<string>();
- var connectors = element.GetAllConnectors();
- foreach (Connector connector in connectors)
- {
- try
- {
- var mepSystem = connector.MEPSystem;
- if (mepSystem == null) continue;
- var elementId = mepSystem.GetTypeId();
- var type = element.Document.GetElement(elementId);
- if (!referSystems.Contains(type.Name))
- {
- unpassList.Add(type.Name);
- }
- else
- {
- passList.Add(type.Name);
- }
- }
- catch (Exception e)
- {
- Log4Net.Info($"读取连接件系统错误。Id:{element.Id},Path:{element.Document.PathName}");
- }
- }
- return new Tuple<List<string>, List<string>>(passList, unpassList);
- }
-
- //[DataCheckProcessAspect]
- public override void Export()
- {
- 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);
- 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;
- int j = -1;
- rowN.AddCell(++j, result.FamilyName, style);
- rowN.AddCell(++j, result.Id, style);
- rowN.AddCell(++j, result.PassConnectorsName, style);
- rowN.AddCell(++j, result.UnPassConnectorsName, style);
- string rowN4 = result.IsRight ? "通过" : "不通过";
- rowN.AddCell(++j, rowN4, style);
- rowN.AddCell(++j, result.RMessage, style);
- }
- #endregion
- }
- catch (Exception e)
- {
- MessageShowBase.Show(e);
- }
- }
- }
- class EquipReferSystemCheckResult : ModeCheckResultBase
- {
- public string FamilyName { get; set; }
- public string Id { get; set; }
- /// <summary>
- /// 通过的连接件系统名称
- /// </summary>
- public string PassConnectorsName { get; set; }
- /// <summary>
- /// 不通过的连接件系统名称
- /// </summary>
- public string UnPassConnectorsName { get; set; }
- }
- }
|