VMUploadModeManage.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /* ==============================================================================
  2. * 功能描述:VMUploadModeManage
  3. * 创 建 者:Garrett
  4. * 创建日期:2018/5/15 9:43:01
  5. * ==============================================================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Collections.ObjectModel;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows;
  13. using SAGA.DotNetUtils;
  14. using SAGA.DotNetUtils.WPF;
  15. using SAGA.MBI.Calc;
  16. using SAGA.MBI.FileStream;
  17. using SAGA.MBI.Model;
  18. using SAGA.DotNetUtils.Logger;
  19. using SAGA.DotNetUtils.Others;
  20. using SAGA.MBI.Common;
  21. using SAGA.MBI.DataArrange;
  22. using SAGA.MBI.RequestData;
  23. using SAGA.MBIAssistData.BLL;
  24. using SAGA.MBI.Interaction;
  25. using SAGA.RevitUtils;
  26. namespace SAGA.MBI.WinView.Upload
  27. {
  28. /// <summary>
  29. /// VMUploadModeManage
  30. /// </summary>
  31. public class VMUploadModeManage : BaseViewModelStub
  32. {
  33. public VMUploadModeManage()
  34. {
  35. IsUploadModify = true;
  36. UploadFloors = new ObservableCollection<UploadFloor>();
  37. MTopologyGriphs = new ObservableCollection<MTopologyGriph>();
  38. }
  39. private ObservableCollection<UploadFloor> m_UploadFloors;
  40. /// <summary>
  41. /// 上传的楼层列表
  42. /// </summary>
  43. public ObservableCollection<UploadFloor> UploadFloors
  44. {
  45. get { return m_UploadFloors; }
  46. set
  47. {
  48. m_UploadFloors = value;
  49. NotifyPropertyChanged("UploadFloors");
  50. foreach (var uploadFloor in UploadFloors)
  51. {
  52. uploadFloor.NotifyParentAction += () => { MTopologyGriphs = MTopologyGriphs; };
  53. }
  54. }
  55. }
  56. private UploadFloor m_UploadFloorCur;
  57. /// <summary>
  58. /// 上传的楼层列表
  59. /// </summary>
  60. public UploadFloor UploadFloorCur
  61. {
  62. get { return m_UploadFloorCur; }
  63. set
  64. {
  65. m_UploadFloorCur = value;
  66. NotifyPropertyChanged("UploadFloorCur");
  67. }
  68. }
  69. private ObservableCollection<MTopologyGriph> m_MTopologyGriphs;
  70. /// <summary>
  71. /// 拓扑图列表
  72. /// </summary>
  73. public ObservableCollection<MTopologyGriph> MTopologyGriphs
  74. {
  75. get { return m_MTopologyGriphs; }
  76. set
  77. {
  78. m_MTopologyGriphs = value;
  79. NotifyPropertyChanged("MTopologyGriphs");
  80. }
  81. }
  82. private bool m_IsUpdate;
  83. /// <summary>
  84. /// 模型文件修正,还是更新
  85. /// </summary>
  86. public bool IsUploadModify
  87. {
  88. get { return m_IsUpdate; }
  89. set
  90. {
  91. m_IsUpdate = value;
  92. NotifyPropertyChanged("IsUploadModify");
  93. }
  94. }
  95. /// <summary>
  96. /// 上传
  97. /// </summary>
  98. /// <param name="param"></param>
  99. [Command]
  100. public void Upload(object param)
  101. {
  102. try
  103. {
  104. Window mainWin = param as Window;
  105. if (mainWin == null) return;
  106. if (IsUploadModify)
  107. {
  108. WinUploadConfirmModify win = new WinUploadConfirmModify();
  109. if (win.ShowDialog() == true)
  110. {
  111. var upfloors = UploadFloors.Where(t =>
  112. t.IsUpload && t.MFloor.FloorLock.LockState == MFloorLockState.LockBySelf).ToList();
  113. int i = 0, count = upfloors.Count();
  114. List<string> successList = new List<string>();
  115. List<string> failList = UploadFloors.Select(t => t.FloorName).ToList();
  116. foreach (var ufloor in upfloors)
  117. {
  118. try
  119. {
  120. i++;
  121. CalcContext context = ufloor.CalcContext;
  122. if (context == null || !context.Upload())
  123. {
  124. continue;
  125. }
  126. if (FloorFileOperate.UploadFile(ufloor.MFloor.ToString(), ufloor.MFloor.FullPath, count, i))
  127. {
  128. //请除Duty和BIMID的关系
  129. MBIAssistHelper.DeleteFloorRelation(ufloor.MFloor.Id);
  130. //解锁
  131. DalLock.UnLockFloor(ufloor.MFloor.Id, false);
  132. //上传成功后清除日志数据
  133. ProjectLogManager.ClearFiles(ufloor.MFloor.Id);
  134. //删除备份文件
  135. FloorFileOperate.Del000BakFile(ufloor.MFloor.FullPath);
  136. //上传完日志反馈
  137. successList.Add(ufloor.FloorName);
  138. failList.Remove(ufloor.FloorName);
  139. }
  140. }
  141. catch (Exception e)
  142. {
  143. MessageShowBase.Show(e);
  144. }
  145. }
  146. #region 上传底图文件
  147. Log4Net.Debug($"开始楼层底图上传");
  148. MBIModelInfoUpload.UpdateMbiInfo(upfloors.Select(f => f.CalcContext).ToList());
  149. Log4Net.Debug($"结束楼层底图上传");
  150. #endregion
  151. #region 上传完成添加提示信息
  152. //添加提示窗口
  153. UpLoadFileRequest.CloseUploadWindow(failList.Count == 0, false);
  154. string tip = "";
  155. if (successList.Count > 0)
  156. {
  157. tip = $"楼层{string.Join(",", successList)}上传成功!\r\n";
  158. }
  159. if (failList.Count > 0)
  160. {
  161. tip += $"楼层{string.Join(",", failList)}上传失败!请重新上传。";
  162. }
  163. if (successList.Count > 0 || failList.Count > 0)
  164. MessageShow.Infomation(tip);
  165. #endregion
  166. mainWin.Close();
  167. }
  168. }
  169. else
  170. {
  171. MessageShowBase.Infomation("功能正在开发。");
  172. //WinUploadConfirmReplace win = new WinUploadConfirmReplace();
  173. //if (win.ShowDialog() == true)
  174. //{
  175. //}
  176. }
  177. }
  178. catch (Exception e)
  179. {
  180. MessageShow.Show(e);
  181. }
  182. }
  183. public bool CanUpload(object param)
  184. {
  185. return UploadFloors != null && UploadFloors.Any(t => t.IsUpload);
  186. }
  187. /// <summary>
  188. /// 显示没有申请到锁,但已更改的楼层列表
  189. /// </summary>
  190. /// <param name="param"></param>
  191. [Command]
  192. public void ShowUnloadFloors(object param)
  193. {
  194. WinUnlockedFloorList win = new WinUnlockedFloorList();
  195. win.DataContext = this;
  196. win.ShowDialog();
  197. }
  198. public bool CanShowUnloadFloors(object param)
  199. {
  200. return true;
  201. }
  202. }
  203. }