CorrectLossDuty.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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. using SAGA.MBI.JsonConvert;
  29. namespace SAGA.MBI.ToolsData
  30. {
  31. /// <summary>
  32. /// ExportAllCategory
  33. /// </summary>
  34. class CorrectLossDuty
  35. {
  36. /// <summary>
  37. /// 检查并处理所有楼层
  38. /// </summary>
  39. public static void OperateAll()
  40. {
  41. var floors = DalUploadFloor.GetHasFileFloors();
  42. foreach (UploadFloor floor in floors)
  43. {
  44. Operate(floor.MFloor);
  45. }
  46. }
  47. /// <summary>
  48. /// 只处理当前楼层
  49. /// </summary>
  50. public static void OperateCurFloor()
  51. {
  52. MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
  53. if (floor != null)
  54. Operate(floor);
  55. }
  56. /// <summary>
  57. /// 检查并处理
  58. /// </summary>
  59. /// <param name="floor"></param>
  60. /// <returns></returns>
  61. private static void Operate(MFloor floor)
  62. {
  63. var tuple = GetCheckResult(floor);
  64. //分组
  65. var beaddContext = tuple.Item1;
  66. var bedelContext = tuple.Item2;
  67. RebuildCloudData(bedelContext, beaddContext);
  68. ////参照扫楼数据库BIMID数据,更新岗位和资产关系
  69. //var equipments = DalCommon.DownLoadCouldData(floor).MEquipments;
  70. //var buildingId = DalProjectTree.GetBuildingIdByFloor(floor.Id);
  71. //var m_AllEquipFms = MatchFMConvert.GetAllEquipFmFromScanBuilding(buildingId);
  72. //foreach (MEquipFM fm in m_AllEquipFms)
  73. //{
  74. // string bimid = fm.BimID;
  75. // if (bimid.IsOnlyDutyNoModelBIMID()) continue;
  76. // var duty = equipments.FirstOrDefault(t => t.BimID == bimid);
  77. // if (duty == null) continue;
  78. // MatchFMConvert.CreateRelationFMWithId(duty, fm);
  79. //}
  80. }
  81. /// <summary>
  82. /// 获取需要增加或删除的内容
  83. /// Item1增加,Item2删除
  84. /// </summary>
  85. /// <param name="floor"></param>
  86. /// <returns></returns>
  87. public static Tuple<CalcContext, CalcContext> GetCheckResult(MFloor floor)
  88. {
  89. Log4Net.Debug("start");
  90. var oldContext = DalCommon.DownLoadCouldData(floor);
  91. Log4Net.Debug("download");
  92. var newContext = ObjectCalc.Calc(floor);
  93. Log4Net.Debug("calc");
  94. //分组
  95. var beaddContext = DalModeFileManange.GetAddContext(oldContext, newContext, true);
  96. Log4Net.Debug("addcontext");
  97. var bedelContext = (DalModeFileManange.GetDelContext(oldContext, newContext, true));
  98. Log4Net.Debug("delcontext");
  99. RemoveNoBimIdDuty(bedelContext);
  100. return new Tuple<CalcContext, CalcContext>(beaddContext, bedelContext);
  101. }
  102. /// <summary>
  103. /// 重建物理世界有问题的数据
  104. /// </summary>
  105. /// <param name="delcontext"></param>
  106. /// <param name="addContext"></param>
  107. private static void RebuildCloudData(CalcContext delcontext, CalcContext addContext)
  108. {
  109. delcontext.Del();
  110. addContext.Upload();
  111. //var tip =
  112. // $"{addContext.MEquipments} 个设备受到影响;{string.Join(addContext.MEquipments.Select(t => t.BimID).ToArray())}";
  113. //Log4Net.Debug(tip);
  114. }
  115. public static bool Upload(CalcContext context)
  116. {
  117. bool result = true;
  118. Log4Net.Debug("更新楼层数据开始");
  119. try
  120. {
  121. //修改设备
  122. DalEquip.BatchUpdate(context.MEquipments);
  123. //修改部件
  124. DalCommon.BatchUpdate(context.MEquipmentParts);
  125. }
  126. catch (Exception e)
  127. {
  128. MessageShow.Show(e);
  129. result = false;
  130. }
  131. Log4Net.Debug("更新楼层数据结束");
  132. return result;
  133. }
  134. /// <summary>
  135. /// 根据用户选择,进行删除,或者清除BimId的保留
  136. /// </summary>
  137. /// <returns></returns>
  138. public static bool Del(CalcContext context)
  139. {
  140. bool result = true;
  141. try
  142. {
  143. //修改空间
  144. context.MSpaces.ToList().ForEach(t => t.DelOrClearBIMIDSave());
  145. //修改设备
  146. context.MEquipments.ToList().ForEach(t => t.DelOrClearBIMIDSave());
  147. }
  148. catch (Exception e)
  149. {
  150. MessageShow.Show(e);
  151. result = false;
  152. }
  153. return result;
  154. }
  155. public static void RemoveNoBimIdDuty(CalcContext context)
  156. {
  157. var nobimdutyEquips = context.MEquipments.Where(t => t.BimID.IsOnlyDutyNoModelBIMID()).ToList();
  158. foreach (var equip in nobimdutyEquips)
  159. {
  160. context.MEquipments.Remove(equip);
  161. }
  162. var nobimdutyParts = context.MEquipmentParts.Where(t => t.BimID.IsOnlyDutyNoModelBIMID()).ToList();
  163. foreach (var equip in nobimdutyParts)
  164. {
  165. context.MEquipmentParts.Remove(equip);
  166. }
  167. var nobimdutyBeacons = context.MBeacons.Where(t => t.BimID.IsOnlyDutyNoModelBIMID()).ToList();
  168. foreach (var equip in nobimdutyBeacons)
  169. {
  170. context.MBeacons.Remove(equip);
  171. }
  172. }
  173. }
  174. }