Browse Source

mxg:修改《模型上传》参考日志的处理逻辑

mengxiangge 6 years ago
parent
commit
5780af0b17

+ 60 - 104
MBI/SAGA.MBI/DataArrange/DalUploadFloor.cs

@@ -248,7 +248,7 @@ namespace SAGA.MBI.DataArrange
                     var tempGriphs = new List<MTopologyGriph>(topologyGriphs);
                     foreach (IGrouping<string, DocumentChangedLogMode> logGroup in floorLogsGroupByBimId)
                     {
-                        DocumentChangedLogMode log = DalLogOperate.CombineLogs(logGroup.ToList());
+                        DocumentChangedLogMode log = logGroup.FirstOrDefault();
                         if (log == null) continue;
                         var bimId = CommonTool.GetCloudBIMId(log.DocName, log.Id);
                         var elem = context.RevitDoc.GetElement(log.Id.ToInt());
@@ -256,17 +256,14 @@ namespace SAGA.MBI.DataArrange
                         var operate =
                             (DocumentChangedOperator)Enum.Parse(typeof(DocumentChangedOperator), log.Operator);
                         var mode = context.FindItem(bimId);
-                        if (mode == null && elem == null) continue;
+                        //模型和物理世界都找不到这条数据,Next
+                        if(mode==null&&elem==null)continue;
                         switch (operate)
                         {
                             case DocumentChangedOperator.Add:
-                                OperateAddLog(mode, elem, context);
-                                break;
                             case DocumentChangedOperator.Modified:
-                                OperateModifyLog(mode, elem, context);
-                                break;
                             case DocumentChangedOperator.Delete:
-                                OperateDelLog(mode);
+                                OperateModifyLog(mode, elem, context);
                                 break;
                             case DocumentChangedOperator.DeleteSaveDuty:
                                 OperateDelSaveDutyLog(mode);
@@ -304,17 +301,7 @@ namespace SAGA.MBI.DataArrange
 
             return vm;
         }
-        /// <summary>
-        /// 对 删除日志 进行的操作
-        /// </summary>
-        /// <param name="mode"></param>
-        private static void OperateDelLog(MRevitEquipBase mode)
-        {
-            if (mode != null)
-            {
-                mode.Operator = DocumentChangedOperator.Delete;
-            }
-        }
+    
         /// <summary>
         /// 对 删除并保留岗位日志 进行的操作
         /// </summary>
@@ -329,140 +316,109 @@ namespace SAGA.MBI.DataArrange
         /// <summary>
         /// 处理增加日志
         /// </summary>
-        private static void OperateAddLog(MRevitEquipBase mode, Element elem, CalcContext context)
+        private static void OperateModifyLog(MRevitEquipBase mode, Element elem, CalcContext context)
         {
             //如果为空间并且周长为零,删除云平台的空间数据
-            if (OperateZeroSpace(mode, elem)) return;
+            if (JudgeDeleteOperate(mode, elem)) return;
+            var revitmode = DalCommon.GetEquipmentBase(elem);
             //不知什么原因,日志就显示add,但物理世界存在这条信息
             if (mode != null)
             {
-                mode.Operator = DocumentChangedOperator.Modified;
+                IsEquipClassCodeChanged(mode, revitmode, context);
             }
             else
             {
-                //正式处理Add
-                mode = DalCommon.GetEquipmentBase(elem);
-                if (mode.IsNullOrDefaultEquip())
+                if (revitmode.IsNullOrDefaultEquip())
                 {//不能识别的设备,部件,信标,空间
                 }
                 else
                 {
                     //请求Duty,Bim数据库中的id
-                    var dutyId = mode.GetDutyBIMRelationByBIM()?.DutyId;
+                    var dutyId = revitmode.GetDutyBIMRelationByBIM()?.DutyId;
                     if (dutyId.IsNullOrEmpty())
                     {//本地数据库不存在此岗位
-                        mode.Operator = DocumentChangedOperator.Add;
+                        revitmode.Operator = DocumentChangedOperator.Add;
+                        context.Add(revitmode);
                     }
                     else
                     {
-                        //物理世界存在该岗位
-                        var tempmode = CommonConvert.QueryObjectById(dutyId);
-                        if (tempmode != null)
+                        var cloudmode = CommonConvert.QueryObjectById(dutyId);
+                        if (cloudmode==null)
                         {
-                            //更改族名称处理,如果设备族四位或六位改了,需要将岗位删除,重建岗位
-                            if (mode.EquipClassCode != tempmode.EquipClassCode)
-                            {
-                                mode.Operator = DocumentChangedOperator.Add;
-                                tempmode.Operator = DocumentChangedOperator.Delete;
-                                context.Add(tempmode);
-                            }
-                            else
-                            {
-                                mode.Id = dutyId;
-                                mode.Operator = DocumentChangedOperator.Modified;
-                                //处理设备所在楼层,Add方法已经处理设备所在楼层关系
-                                RltEquipinFloor rlt =
-                                    new RltEquipinFloor(dutyId, context.FloorId) { Operator = DocumentChangedOperator.Add };
-                                context.UnGroupDatas.Add(rlt);
-                            }
+                            revitmode.Operator = DocumentChangedOperator.Add;
+                            context.Add(revitmode);
+                        }
+                        else
+                        {
+                            //待建模型清单新建的设备
+                            cloudmode.BimID = revitmode.BimID;
+                            IsEquipClassCodeChanged(cloudmode, revitmode, context);
+                            context.Add(cloudmode);
                         }
                     }
-                    context.Add(mode);
                 }
             }
-
         }
-        /// <summary>
-        /// 处理修改日志
-        /// </summary>
-        private static void OperateModifyLog(MRevitEquipBase mode, Element elem, CalcContext context)
+         /// <summary>
+         /// 判断设备类编码是否更改
+         /// 如果发生更改,把之前的删除。
+         /// 重建岗位。
+         /// </summary>
+         /// <param name="mode"></param>
+         /// <param name="tempmode"></param>
+         /// <param name="context"></param>
+         /// <returns></returns>
+        private static bool IsEquipClassCodeChanged(MRevitEquipBase mode, MRevitEquipBase tempmode, CalcContext context)
         {
-            //如果为空间并且周长为零,删除云平台的空间数据
-            if (OperateZeroSpace(mode, elem)) return;
-
-            if (mode != null)
+            bool result = false;
+            if (mode != null&& !tempmode.IsNullOrDefaultEquip())
             {
-                //物理世界存在该岗位
-                var tempmode = DalCommon.GetEquipmentBase(elem);
-                if (tempmode.IsNullOrDefaultEquip())
+                //如果设备族四位或六位改了,需要将岗位删除,重建岗位
+                if (mode.EquipClassCode != tempmode.EquipClassCode)
                 {
                     mode.Operator = DocumentChangedOperator.Delete;
+                    tempmode.Operator = DocumentChangedOperator.Add;
+                    context.Add(tempmode);
+                    result = true;
                 }
                 else
                 {
-                    //更改族名称处理,如果设备族四位或六位改了,需要将岗位删除,重建岗位
-                    if (mode.EquipClassCode != tempmode.EquipClassCode)
-                    {
-                        mode.Operator = DocumentChangedOperator.Delete;
-                        tempmode.Operator = DocumentChangedOperator.Add;
-                        context.Add(tempmode);
-                    }
-                    else
-                    {
-                        mode.Operator = DocumentChangedOperator.Modified;
-                    }
-                }
-            }
-            else
-            {
-                //物理世界不存在该岗位,当成添加处理
-                var newmode = DalCommon.GetEquipmentBase(elem);
-                if (newmode.IsNullOrDefaultEquip())
-                {//不可识别类型,直接返回
-                }
-                else
-                {
-                    //请求Duty,本地数据库中的id,待建模设备
-                    var dutyId = newmode.GetDutyBIMRelationByBIM()?.DutyId;
-                    if (dutyId.IsNotNullEmpty())
-                    {//本地数据库存在
-                        newmode.Id = dutyId;
-                        newmode.Operator = DocumentChangedOperator.Modified;
-                        //处理设备所在楼层,Add方法已经处理设备所在楼层关系
-                        RltEquipinFloor rlt =
-                            new RltEquipinFloor(dutyId, context.FloorId) { Operator = DocumentChangedOperator.Add };
-                        context.UnGroupDatas.Add(rlt);
-                    }
-                    else
-                    {
-                        newmode.Operator = DocumentChangedOperator.Add;
-                    }
-                    context.Add(newmode);
+                    mode.Operator = DocumentChangedOperator.Modified;
                 }
             }
+
+            return result;
         }
+       
         /// <summary>
-        /// 处理是无用的空间,周长为零
+        /// 1,处理是无用的空间,周长为零
+        /// 2,对象被删除
         /// </summary>
         /// <param name="elem"></param>
         /// <returns></returns>
-        private static bool OperateZeroSpace(MRevitEquipBase mode, Element elem)
+        private static bool JudgeDeleteOperate(MRevitEquipBase mode, Element elem)
         {
-            bool isUselessSpace = false;
-            if (elem is Space space)
+            bool result = false;
+            if (mode != null)
             {
-                if (space.IsDeleteSpace())
+                if (elem == null)
+                {
+                    mode.Operator = DocumentChangedOperator.Delete;
+                    result = true;
+                }
+                else if (elem is Space space)
                 {
-                    isUselessSpace = true;
-                    if (mode != null)
+                    if (space.IsDeleteSpace())
                     {
                         //如果是无用空间,直接删除云平台对应数据
                         mode.Operator = DocumentChangedOperator.Delete;
+                        result = true;
                     }
                 }
             }
+           
 
-            return isUselessSpace;
+            return result;
         }
         /// <summary>
         /// 准备需要显示的拓扑图(全集)

+ 18 - 4
MBI/SAGA.MBI/ToolsData/CorrectLossDuty.cs

@@ -25,13 +25,14 @@ using SAGA.RevitUtils.Extends;
 using CellType = Autodesk.Revit.DB.CellType;
 using SAGA.DotNetUtils;
 using SAGA.RevitUtils;
+using SAGA.MBI.JsonConvert;
 
 namespace SAGA.MBI.ToolsData
 {
     /// <summary>
     /// ExportAllCategory
     /// </summary>
-    class CorrectLossDuty 
+    class CorrectLossDuty
     {
         /// <summary>
         /// 检查并处理所有楼层
@@ -51,7 +52,7 @@ namespace SAGA.MBI.ToolsData
         {
             MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
             if (floor != null)
-                Operate(floor); 
+                Operate(floor);
         }
         /// <summary>
         /// 检查并处理
@@ -65,6 +66,19 @@ namespace SAGA.MBI.ToolsData
             var beaddContext = tuple.Item1;
             var bedelContext = tuple.Item2;
             RebuildCloudData(bedelContext, beaddContext);
+
+            ////参照扫楼数据库BIMID数据,更新岗位和资产关系
+            //var equipments = DalCommon.DownLoadCouldData(floor).MEquipments;
+            //var buildingId = DalProjectTree.GetBuildingIdByFloor(floor.Id);
+            //var m_AllEquipFms = MatchFMConvert.GetAllEquipFmFromScanBuilding(buildingId);
+            //foreach (MEquipFM fm in m_AllEquipFms)
+            //{
+            //    string bimid = fm.BimID;
+            //    if (bimid.IsOnlyDutyNoModelBIMID()) continue;
+            //    var duty = equipments.FirstOrDefault(t => t.BimID == bimid);
+            //    if (duty == null) continue;
+            //    MatchFMConvert.CreateRelationFMWithId(duty, fm);
+            //}
         }
         /// <summary>
         /// 获取需要增加或删除的内容
@@ -72,7 +86,7 @@ namespace SAGA.MBI.ToolsData
         /// </summary>
         /// <param name="floor"></param>
         /// <returns></returns>
-        public static Tuple<CalcContext,CalcContext> GetCheckResult(MFloor floor)
+        public static Tuple<CalcContext, CalcContext> GetCheckResult(MFloor floor)
         {
             var oldContext = DalCommon.DownLoadCouldData(floor);
             var newContext = ObjectCalc.Calc(floor);
@@ -80,7 +94,7 @@ namespace SAGA.MBI.ToolsData
             var beaddContext = DalModeFileManange.GetAddContext(oldContext, newContext, true);
             var bedelContext = (DalModeFileManange.GetDelContext(oldContext, newContext, true));
             RemoveNoBimIdDuty(bedelContext);
-            return new Tuple<CalcContext, CalcContext>(beaddContext,bedelContext);
+            return new Tuple<CalcContext, CalcContext>(beaddContext, bedelContext);
         }
         /// <summary>
         /// 重建物理世界有问题的数据

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

@@ -20,8 +20,6 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         private WinMatchFMTip_FMNoBimId()
         {
             InitializeComponent();
-            Operate = MatchOperateType.FMHasDutyNoBim1;
-            this.DataContext = this;
         }
 
         private string m_Id1, m_Id2;
@@ -29,6 +27,10 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         {
             m_Id1 = id1;
             m_Id2 = id2;
+
+            Operate = MatchOperateType.FMHasDutyNoBim1;
+            LoadData(id1, id2);
+            this.DataContext = this;
         }
 
         private void LoadData(string id1, string id2)
@@ -47,7 +49,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
                 InfoGrid.ItemsSource = new ObservableCollection<ItemProperty>(EquipmentCombineUtil.GetGroupProperties(originitems).Where(t=>t.Children.All(tt=>tt.Value.IsNotNullEmpty())));
             }
         }
-        private List<ItemProperty> m_Items;
+        private List<ItemProperty> m_Items=new List<ItemProperty>();
         /// <summary>
         /// 获取需要合并的信息点
         /// </summary>
@@ -82,7 +84,6 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
             {
                 m_Operate = value;
                 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Operate)));
-                LoadData(m_Id1, m_Id2);
             }
         }