CorrectLossDuty.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /* ==============================================================================
  2. * 功能描述:ExportAllCategory
  3. * 创 建 者:Garrett
  4. * 创建日期:2018/10/11 8:58:18
  5. * ==============================================================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Diagnostics;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using Autodesk.Revit.DB;
  14. using Microsoft.Win32;
  15. using NPOI.SS.UserModel;
  16. using NPOI.XSSF.UserModel;
  17. using SAGA.DotNetUtils.Logger;
  18. using SAGA.DotNetUtils.Others;
  19. using SAGA.MBI.Calc;
  20. using SAGA.MBI.DataArrange;
  21. using SAGA.MBI.Model;
  22. using SAGA.MBI.Tools;
  23. using SAGA.MBI.WinView.Upload;
  24. using SAGA.RevitUtils.Extends;
  25. using CellType = Autodesk.Revit.DB.CellType;
  26. using SAGA.DotNetUtils;
  27. using SAGA.RevitUtils;
  28. namespace SAGA.MBI.ToolsData
  29. {
  30. /// <summary>
  31. /// ExportAllCategory
  32. /// </summary>
  33. class CorrectLossDuty
  34. {
  35. /// <summary>
  36. /// 检查并处理所有楼层
  37. /// </summary>
  38. public static void OperateAll()
  39. {
  40. var floors = DalUploadFloor.GetHasFileFloors();
  41. foreach (UploadFloor floor in floors)
  42. {
  43. Operate(floor.MFloor);
  44. }
  45. }
  46. /// <summary>
  47. /// 只处理当前楼层
  48. /// </summary>
  49. public static void OperateCurFloor()
  50. {
  51. MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
  52. if (floor != null)
  53. Operate(floor);
  54. }
  55. /// <summary>
  56. /// 检查并处理
  57. /// </summary>
  58. /// <param name="floor"></param>
  59. /// <returns></returns>
  60. private static void Operate(MFloor floor)
  61. {
  62. var tuple = GetCheckResult(floor);
  63. //分组
  64. var beaddContext = tuple.Item1;
  65. var bedelContext = tuple.Item2;
  66. RebuildCloudData(bedelContext, beaddContext);
  67. }
  68. /// <summary>
  69. /// 获取需要增加或删除的内容
  70. /// Item1增加,Item2删除
  71. /// </summary>
  72. /// <param name="floor"></param>
  73. /// <returns></returns>
  74. public static Tuple<CalcContext,CalcContext> GetCheckResult(MFloor floor)
  75. {
  76. var oldContext = DalCommon.DownLoadCouldData(floor);
  77. var newContext = ObjectCalc.Calc(floor);
  78. //分组
  79. var beaddContext = DalModeFileManange.GetAddContext(oldContext, newContext, true);
  80. var bedelContext = (DalModeFileManange.GetDelContext(oldContext, newContext, true));
  81. RemoveNoBimIdDuty(bedelContext);
  82. return new Tuple<CalcContext, CalcContext>(beaddContext,bedelContext);
  83. }
  84. /// <summary>
  85. /// 重建物理世界有问题的数据
  86. /// </summary>
  87. /// <param name="delcontext"></param>
  88. /// <param name="addContext"></param>
  89. private static void RebuildCloudData(CalcContext delcontext, CalcContext addContext)
  90. {
  91. delcontext.Del();
  92. addContext.Upload();
  93. //var tip =
  94. // $"{addContext.MEquipments} 个设备受到影响;{string.Join(addContext.MEquipments.Select(t => t.BimID).ToArray())}";
  95. //Log4Net.Debug(tip);
  96. }
  97. public static bool Upload(CalcContext context)
  98. {
  99. bool result = true;
  100. Log4Net.Debug("更新楼层数据开始");
  101. try
  102. {
  103. //修改设备
  104. DalEquip.BatchUpdate(context.MEquipments);
  105. //修改部件
  106. DalCommon.BatchUpdate(context.MEquipmentParts);
  107. }
  108. catch (Exception e)
  109. {
  110. MessageShow.Show(e);
  111. result = false;
  112. }
  113. Log4Net.Debug("更新楼层数据结束");
  114. return result;
  115. }
  116. /// <summary>
  117. /// 根据用户选择,进行删除,或者清除BimId的保留
  118. /// </summary>
  119. /// <returns></returns>
  120. public static bool Del(CalcContext context)
  121. {
  122. bool result = true;
  123. try
  124. {
  125. //修改空间
  126. context.MSpaces.ToList().ForEach(t => t.DelOrClearBIMIDSave());
  127. //修改设备
  128. context.MEquipments.ToList().ForEach(t => t.DelOrClearBIMIDSave());
  129. }
  130. catch (Exception e)
  131. {
  132. MessageShow.Show(e);
  133. result = false;
  134. }
  135. return result;
  136. }
  137. public static void RemoveNoBimIdDuty(CalcContext context)
  138. {
  139. var nobimdutyEquips = context.MEquipments.Where(t => t.BimID.IsOnlyDutyNoModelBIMID()).ToList();
  140. foreach (var equip in nobimdutyEquips)
  141. {
  142. context.MEquipments.Remove(equip);
  143. }
  144. var nobimdutyParts = context.MEquipmentParts.Where(t => t.BimID.IsOnlyDutyNoModelBIMID()).ToList();
  145. foreach (var equip in nobimdutyParts)
  146. {
  147. context.MEquipmentParts.Remove(equip);
  148. }
  149. var nobimdutyBeacons = context.MBeacons.Where(t => t.BimID.IsOnlyDutyNoModelBIMID()).ToList();
  150. foreach (var equip in nobimdutyBeacons)
  151. {
  152. context.MBeacons.Remove(equip);
  153. }
  154. }
  155. }
  156. }