Explorar o código

mxg:数据检查删除周长为Zero的空间,修正岗位指定待建模资产关联失败bug

mengxiangge %!s(int64=6) %!d(string=hai) anos
pai
achega
fb54d120d2

+ 1 - 1
MBI/SAGA.MBI/Calc/ObjectCalc.cs

@@ -59,7 +59,7 @@ namespace SAGA.MBI.Calc
             var spaces = context.RevitDoc.GetSpaces();
             foreach (Space space in spaces)
             {
-                if(!space.IsValidObject)continue;
+                if(!space.IsSpace())continue;
                 MSpace mspace = DalSpace.GetSpace(space);
                 if(mspace==null)continue;
                 mspace.Operator = DocumentChangedOperator.Add;

+ 15 - 9
MBI/SAGA.MBI/DataArrange/DalUploadFloor.cs

@@ -10,6 +10,7 @@ using System.Collections.ObjectModel;
 using System.IO;
 using System.Linq;
 using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Mechanical;
 using SAGA.DotNetUtils;
 using SAGA.DotNetUtils.Extend;
 using SAGA.DotNetUtils.Logger;
@@ -317,7 +318,7 @@ namespace SAGA.MBI.DataArrange
         {
             if (mode != null)
             {
-                mode.Operator = DocumentChangedOperator.DeleteSaveDuty; 
+                mode.Operator = DocumentChangedOperator.DeleteSaveDuty;
             }
         }
         /// <summary>
@@ -443,14 +444,19 @@ namespace SAGA.MBI.DataArrange
         private static bool OperateZeroSpace(MRevitEquipBase mode, Element elem)
         {
             bool isUselessSpace = false;
-            if (!elem.IsSpace()) return isUselessSpace;
-            //周长
-            double perimeter = elem.GetParameterDouble(BuiltInParameter.ROOM_PERIMETER);
-            //空间比较特殊,周长为零就相当于删除
-            isUselessSpace = (perimeter.IsZero());
-            //如果是无用空间,直接删除云平台对应数据
-            if (isUselessSpace && mode != null)
-                mode.Operator = DocumentChangedOperator.Delete;
+            if (elem is Space space)
+            {
+                if (space.IsDeleteSpace())
+                {
+                    isUselessSpace = true;
+                    if (mode != null)
+                    {
+                        //如果是无用空间,直接删除云平台对应数据
+                        mode.Operator = DocumentChangedOperator.Delete;
+                    }
+                }
+            }
+
             return isUselessSpace;
         }
         /// <summary>

+ 14 - 3
MBI/SAGA.MBI/Extend/ElementExtend.cs

@@ -67,15 +67,26 @@ namespace SAGA.MBI.Tools
             var family = elem.GetFamily().Name;
             return (Regex.IsMatch(family, MBIConst.BeaconFamilyName));
         }
+
         /// <summary>
-        /// 判断是否为空间
+        /// 判断是否为空间,判断周长是否为零
+        /// 如果周长为零,是删除的空间
         /// </summary>
         /// <param name="elem"></param>
+        /// <param name="ischeckzero">是否检查周长为零</param>
         /// <returns></returns>
-        public static bool IsSpace(this Element elem)
+        public static bool IsSpace(this Element elem, bool ischeckzero = true)
         {
-            return elem is Space;
+            var isspace = false;
+            if (elem is Space space)
+            {
+                //空间比较特殊,周长为零就相当于删除
+                isspace = !ischeckzero || !(space.IsDeleteSpace());
+            }
+
+            return isspace;
         }
+
         /// <summary>
         /// 获取云平台存储的BimId
         /// 文件名:Id

+ 2 - 2
MBI/SAGA.MBI/Html5Command.cs

@@ -259,8 +259,8 @@ namespace SAGA.MBI
         {
             try
             {
-                //http://172.16.0.181:8888/#/buildGraphy?projId=Pj1101080003&userId=25518428919955458
-                string url = $"{MBIConst.Html5ScanLocalHost}buildGraphy?projId={MBIControl.ProjectCur.Id}&userId={MBIControl.ManageInfo.Person_Id}";
+                //http://172.16.0.181:8888/#/buildGraphy?projId=Pj1101080003&userId=25518428919955458&secret=***
+                string url = $"{MBIConst.Html5ScanLocalHost}buildGraphy?projId={MBIControl.ProjectCur.Id}&userId={MBIControl.ManageInfo.Person_Id}&secret={MBIConst.ProjectSecret}";
 
                 var win = WinBrowser.Instance;
                 win.Show(url, "楼层平面图管理");

+ 31 - 34
MBI/SAGA.MBI/ToolCommand.cs

@@ -3,6 +3,7 @@
  * 创 建 者:Garrett
  * 创建日期:2018/7/11 14:25:22
  * ==============================================================================*/
+
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -30,23 +31,37 @@ using WinModeCheckSetting = SAGA.MBI.ToolsData.ModeCheck.WinModeCheckSetting;
 
 namespace SAGA.MBI
 {
+
+    #region 工具
     /// <summary>
-    /// 导出不在空间中的设备
+    /// 批量删除无用的空间
     /// </summary>
     [Transaction(TransactionMode.Manual)]
     [Regeneration(RegenerationOption.Manual)]
-    public class ExportEquipNotInSpaceCommand : ExternalCommand
+    public class DeleteZeroSpaceCommand : ExternalCommand
     {
         public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
         {
             try
             {
-                var fi = ExternalDataWrapper.Current.UiApp.GetSelectedElement() as FamilyInstance;
-                var space = fi.GetReferenceSpace();
-                MessageShowBase.Infomation($"设备所在空间Id为{space?.Id}");
-                //var tip = MessageShow.Question("确定要执行设备所在空间的检查?\r\n未在空间中的岗位将会被导出的excel中,由建模人员进行检查。");
-                //if (tip)
-                //    CheckEquipInSpace.Export();
+                var doc = ExternalDataWrapper.Current.Doc;
+                using (Transaction trans = new Transaction(doc, "删除"))
+                {
+                    trans.Start();
+                    try
+                    {
+                        var spaces = doc.GetSpaces().Where(t => t.IsDeleteSpace());
+                        doc.Delete(spaces.Select(t => t.Id).ToList());
+                        trans.Commit();
+                        MessageShowBase.Infomation("删除成功");
+                    }
+                    catch (Exception)
+                    {
+                        trans.RollBack();
+
+                    }
+                }
+
             }
             catch (Exception e)
             {
@@ -55,31 +70,21 @@ namespace SAGA.MBI
             }
             return Result.Succeeded;
         }
-
-
-        /// <summary>
-        /// Onlys show the dialog when a document is open, as Dockable dialogs are only available
-        /// when a document is open.
-        /// </summary>
-        public bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
-        {
-            return true;
-        }
     }
     /// <summary>
-    /// 检查BimID是否重复,多个岗位对应一个模型
+    /// 报告设备所在空间
     /// </summary>
     [Transaction(TransactionMode.Manual)]
     [Regeneration(RegenerationOption.Manual)]
-    public class CheckDuplicationBIMIdCommand : ExternalCommand
+    public class ReportEquipInSpaceCommand : ExternalCommand
     {
         public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
         {
             try
             {
-                var tip = MessageShow.Question("确定要执行设备BIMID重复性检查?\r\n未在空间中的岗位将会被导出的excel中。");
-                if (tip)
-                    CheckDuplicationBIMId.CheckAll();
+                var fi = ExternalDataWrapper.Current.UiApp.GetSelectedElement() as FamilyInstance;
+                var space = fi.GetReferenceSpace();
+                MessageShowBase.Infomation($"设备所在空间Id为{space?.Id}");
             }
             catch (Exception e)
             {
@@ -88,17 +93,9 @@ namespace SAGA.MBI
             }
             return Result.Succeeded;
         }
-
-
-        /// <summary>
-        /// Onlys show the dialog when a document is open, as Dockable dialogs are only available
-        /// when a document is open.
-        /// </summary>
-        public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
-        {
-            return true;
-        }
     }
+    #endregion
+
 
     /// <summary>
     /// 修正云平台族类型和本地族类型不一致
@@ -339,7 +336,7 @@ namespace SAGA.MBI
                 var checkType = CheckType.DataCheck;
                 var checkItems = CheckOperation.GetCheckItems(checkType);
 
-                WinDataCheckSetting win = new WinDataCheckSetting(checkItems,CheckType.DataCheck);
+                WinDataCheckSetting win = new WinDataCheckSetting(checkItems, CheckType.DataCheck);
                 if (win.ShowDialog() != true) return Result.Cancelled;
                 CheckOperation.Execute(checkItems, win.GetCheckContext());
             }

+ 2 - 0
MBI/SAGA.MBI/ToolsData/CheckBase/CheckOperation.cs

@@ -105,6 +105,8 @@ namespace SAGA.MBI.ToolsData.CheckBase
             list.ForEach(t => t.Export2());
             ExportResultSummary(list);
             DCRExport.Save(context.SavePath, DCRExport.GetWorkbook());
+            //关闭所有窗体
+            DocumentQueue.CloseAll();
             DataCheckProgressBarClient.UpdateBigTip("结束");
         }
         /// <summary>

+ 3 - 2
MBI/SAGA.MBI/ToolsData/ModeCheck/ElementRangeCheck.cs

@@ -217,8 +217,9 @@ namespace SAGA.MBI.ToolsData.ModeCheck
                         result = null;
                     }
                 }
-                else if (element is Space space)
+                else if (element.IsSpace())
                 {
+                    var space = element as Space;
                     isBoxInst = true;
                     result.RType = DCElementType.Space;
                     zb = space.GetBaseStaticHeight();
@@ -313,7 +314,7 @@ namespace SAGA.MBI.ToolsData.ModeCheck
                     rowN.AddCell(6, rowN4, style);
                     rowN.AddCell(7, result.RMessage, style);
                 }
-         
+
                 #endregion
 
             }

+ 0 - 7
MBI/SAGA.MBI/ToolsData/ModeCheck/SagaSignCheck.cs

@@ -192,12 +192,5 @@ namespace SAGA.MBI.ToolsData.ModeCheck
                 MessageShowBase.Show(e);
             }
         }
-        /// <summary>
-        /// 关闭所有窗体
-        /// </summary>
-        public void CloseDoc()
-        {
-            DocumentQueue.CloseAll();
-        }
     }
 }

+ 9 - 3
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/VMMatchFM.cs

@@ -150,13 +150,17 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
                     DalCommon.Delete(FMData.FmCur.EquipmentId);
                     break;
                 case MatchOperateType.FMHasDutyNoBim3:
+                    var oldDutyId = FMData.FmCur.EquipmentId;
+                    var newDutyId = MEquipment.Id;
                     //取消1,2步.由于选择保留资产和资产的岗位关系--由于要清空“ctm-Location”信息点,所以还是更新一下
+                    //使用旧岗位id,更新对应资产的关系
+                    MEquipment.Id = oldDutyId;
                     MatchFMConvert.CreateRelationFMWithId(MEquipment, FMData.FmCur);
                     //3 更新此模型计算的各种关系中的岗位id
                     //更新设备所在空间 用旧id,替换新id,中的关系
-                    RelationConvert.UpdateEquipInSpaceRelation(MEquipment.Id, FMData.FmCur.EquipmentId);
+                    RelationConvert.UpdateEquipInSpaceRelation(newDutyId, oldDutyId);
                     //4,将当前模型BIMID添加到选中资产关联的原岗位上
-                    DalCommon.UpdateBimId(FMData.FmCur.EquipmentId, MEquipment.BimID);
+                    DalCommon.UpdateBimId(oldDutyId, MEquipment.BimID);
                     //5 按用户设定维护原岗位信息点
 
                     #region 合并信息点
@@ -171,10 +175,12 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
                             jo.Add(combine.Definition.CodeName, CommonTool.GetPropertyJArray(itemProperty.Value.ToString()));
                         }
                     }
-                    CommonConvert.UpdateInfosSigle(FMData.FmCur.EquipmentId, jo);
+                    CommonConvert.UpdateInfosSigle(oldDutyId, jo);
 
                     #endregion
                     //6,删除模型对应的新岗位
+                    //1,2替换为旧的id,这里替换回来
+                    MEquipment.Id = newDutyId;
                     MEquipment.DelObject();
                     break;
             }

+ 1 - 1
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/WinMatchFMTip_FMNoBimId.xaml

@@ -39,7 +39,7 @@
 
         </Grid>
         <Canvas Grid.Row="3">
-            <Button Width="180"  Height="24" Content="确定" Canvas.Left="180" Canvas.Top="15" Click="BtnConfirm_OnClick"></Button>
+            <Button Width="150"  Height="24" Content="确定" Canvas.Left="150" Canvas.Top="15" Click="BtnConfirm_OnClick"></Button>
             <Button Width="80"  Height="24" Content="取消" Canvas.Left="350" Canvas.Top="15" Background="White" IsCancel="True"></Button>
         </Canvas>
     </Grid>

+ 54 - 4
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/WinMatchFMTip_FMNoBimId.xaml.cs

@@ -1,7 +1,10 @@
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.ComponentModel;
+using System.Linq;
 using System.Windows;
+using SAGA.DotNetUtils;
+using SAGA.DotNetUtils.Extend;
 using SAGA.MBI.ModeInfoEdit;
 using SAGA.MBI.Model;
 using SAGA.MBI.RequestData;
@@ -12,7 +15,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
     /// <summary>
     /// WinUploadConfirmModify.xaml 的交互逻辑
     /// </summary>
-    public partial class WinMatchFMTip_FMNoBimId:INotifyPropertyChanged
+    public partial class WinMatchFMTip_FMNoBimId : INotifyPropertyChanged
     {
         private WinMatchFMTip_FMNoBimId()
         {
@@ -22,7 +25,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         }
 
         private string m_Id1, m_Id2;
-        public WinMatchFMTip_FMNoBimId(string id1,string id2):this()
+        public WinMatchFMTip_FMNoBimId(string id1, string id2) : this()
         {
             m_Id1 = id1;
             m_Id2 = id2;
@@ -62,7 +65,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
             set
             {
                 m_Operate = value;
-                PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(nameof(Operate)));
+                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Operate)));
                 LoadData(m_Id1, m_Id2);
             }
         }
@@ -71,7 +74,54 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
 
         private void BtnConfirm_OnClick(object sender, RoutedEventArgs e)
         {
-            this.DialogResult = true;
+            if (Operate == MatchOperateType.FMHasDutyNoBim3)
+            {
+                int nullItemsCount = GetNullItemsCount();
+                if (nullItemsCount > 0)
+                {
+                    WinPointMergeTip win = new WinPointMergeTip();
+                    if (win.Show(nullItemsCount))
+                    {
+                        this.DialogResult = true;
+                    }
+                }
+                else
+                {
+                    this.DialogResult = true;
+                }
+            }
+            else
+            {
+                this.DialogResult = true;
+            }
+
+        }
+        /// <summary>
+        /// 获取未赋值的项
+        /// </summary>
+        /// <returns></returns>
+        private int GetNullItemsCount()
+        {
+            var source = InfoGrid.ItemsSource;
+            var items = new List<ItemProperty>();
+            foreach (ItemProperty item in source)
+            {
+                GetAssigmentItems(item, items);
+            }
+            return items.Where(t => t.Value.ToString().IsNullOrEmpty()).GetCount();
+        }
+
+        private void GetAssigmentItems(ItemProperty item, List<ItemProperty> items)
+        {
+            if (item is AssigmentItemProperty)
+            {
+                items.Add(item);
+            }
+            foreach (ItemProperty subitem in item.Children)
+            {
+                GetAssigmentItems(subitem, items);
+            }
+
         }
     }
 }

+ 13 - 1
MBI/SAGA.RevitUtils/Extends/SpaceExtend.cs

@@ -10,6 +10,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Autodesk.Revit.DB;
 using Autodesk.Revit.DB.Mechanical;
+using SAGA.DotNetUtils.Extend;
 
 namespace SAGA.RevitUtils.Extends
 {
@@ -178,7 +179,18 @@ namespace SAGA.RevitUtils.Extends
         {
             return space.GetTopLevel().Elevation + space.GetTopOffSet();
         }
-
+        /// <summary>
+        /// 手动删除的空间,仅在明细表中可见
+        /// </summary>
+        /// <param name="space"></param>
+        /// <returns></returns>
+        public static bool IsDeleteSpace(this Space space)
+        {
+            //周长
+            double perimeter = space.Perimeter;
+            //空间比较特殊,周长为零就相当于删除
+            return  (perimeter.IsZero());
+        }
 
     }
 }