Browse Source

mxg:修改岗位相等判断条件

mengxiangge 5 years ago
parent
commit
d70c949e0a

+ 8 - 47
MBI/SAGA.MBI/DataArrange/DalModeFileManange.cs

@@ -246,22 +246,19 @@ namespace SAGA.MBI.DataArrange
         {
             CalcContext context = new CalcContext(newContext.MFloor);
             var equips = oldContext.MEquipments.Except(newContext.MEquipments,
-                new CommonEqualComparer<MEquipment>((a, b) => { return a.BimID == b.BimID; }));
+                new CommonEqualComparer<MEquipment>(DalUploadFloor.IsEqualCloudDuty2LocalDuty));
             context.MEquipments.AddRange(equips);
             var equipParts = oldContext.MEquipmentParts.Except(newContext.MEquipmentParts,
-                new CommonEqualComparer<MEquipmentPart>((a, b) =>
-                {
-                    return a.BimID == b.BimID;
-                }));
+                new CommonEqualComparer<MEquipmentPart>(DalUploadFloor.IsEqualCloudDuty2LocalDuty));
             context.MEquipmentParts.AddRange(equipParts);
             var beacons = oldContext.MBeacons.Except(newContext.MBeacons,
-                new CommonEqualComparer<MBeacon>((a, b) => { return a.BimID == b.BimID; }));
+                new CommonEqualComparer<MBeacon>(DalUploadFloor.IsEqualCloudDuty2LocalDuty));
             context.MBeacons.AddRange(beacons);
             //模型文件替换后,元空间重新上传,之前的不保留
             if (isExceptSpace)
             {
                 var spaces = oldContext.MSpaces.Except(newContext.MSpaces,
-                    new CommonEqualComparer<MISpace>((a, b) => { return a.BimID == b.BimID; }));
+                    new CommonEqualComparer<MISpace>(DalUploadFloor.IsEqualCloudDuty2LocalDuty));
                 context.MSpaces.AddRange(spaces);
             }
             else
@@ -271,39 +268,6 @@ namespace SAGA.MBI.DataArrange
 
             return context;
         }
-
-        /// <summary>
-        /// 新旧文件对比过后,需要更新的数据
-        /// </summary>
-        public static CalcContext GetModifyContext(CalcContext oldContext, CalcContext newContext, bool isExceptSpace = false)
-        {
-            CalcContext context = new CalcContext(newContext.MFloor);
-            var equips = oldContext.MEquipments.Intersect(newContext.MEquipments,
-                new CommonEqualComparer<MEquipment>((a, b) => { return a.BimID == b.BimID; }));
-            context.MEquipments.AddRange(equips);
-            var equipParts = oldContext.MEquipmentParts.Intersect(newContext.MEquipmentParts,
-                new CommonEqualComparer<MEquipmentPart>((a, b) =>
-                {
-                    return a.BimID == b.BimID;
-                }));
-            context.MEquipmentParts.AddRange(equipParts);
-            var beacons = oldContext.MBeacons.Intersect(newContext.MBeacons,
-                new CommonEqualComparer<MBeacon>((a, b) => { return a.BimID == b.BimID; }));
-            context.MBeacons.AddRange(beacons);
-            //模型文件替换后,元空间重新上传,之前的不保留
-            if (isExceptSpace)
-            {
-                var spaces = oldContext.MSpaces.Intersect(newContext.MSpaces,
-                    new CommonEqualComparer<MISpace>((a, b) => { return a.BimID == b.BimID; }));
-                context.MSpaces.AddRange(spaces);
-            }
-            else
-            {
-                context.MSpaces.AddRange(oldContext.MSpaces);
-            }
-            return context;
-        }
-
         /// <summary>
         /// 新旧文件对比过后,需要添加的数据
         /// </summary>
@@ -311,22 +275,19 @@ namespace SAGA.MBI.DataArrange
         {
             CalcContext context = new CalcContext(newContext.MFloor);
             var equips = newContext.MEquipments.Except(oldContext.MEquipments,
-                new CommonEqualComparer<MEquipment>((a, b) => { return a.BimID == b.BimID; }));
+                new CommonEqualComparer<MEquipment>(DalUploadFloor.IsEqualCloudDuty2LocalDuty));
             context.MEquipments.AddRange(equips);
             var equipParts = newContext.MEquipmentParts.Except(oldContext.MEquipmentParts,
-                new CommonEqualComparer<MEquipmentPart>((a, b) =>
-                {
-                    return a.BimID == b.BimID;
-                }));
+                new CommonEqualComparer<MEquipmentPart>(DalUploadFloor.IsEqualCloudDuty2LocalDuty));
             context.MEquipmentParts.AddRange(equipParts);
             var beacons = newContext.MBeacons.Except(oldContext.MBeacons,
-                new CommonEqualComparer<MBeacon>((a, b) => { return a.BimID == b.BimID; }));
+                new CommonEqualComparer<MBeacon>(DalUploadFloor.IsEqualCloudDuty2LocalDuty));
             context.MBeacons.AddRange(beacons);
             //模型文件替换后,元空间重新上传,之前的不保留
             if (isExceptSpace)
             {
                 var spaces = newContext.MSpaces.Except(oldContext.MSpaces,
-                    new CommonEqualComparer<MISpace>((a, b) => { return a.BimID == b.BimID; }));
+                    new CommonEqualComparer<MISpace>(DalUploadFloor.IsEqualCloudDuty2LocalDuty));
                 context.MSpaces.AddRange(spaces);
                 //处理设备所在空间
                 var bimids = context.MEquipments.Select(tt => tt.BimID).ToList();

+ 44 - 2
MBI/SAGA.MBI/DataArrange/DalUploadFloor.cs

@@ -473,7 +473,50 @@ namespace SAGA.MBI.DataArrange
             list.Add(new MTopologyGriph() { Name = "空间流通网络" });
             return list;
         }
+        /// <summary>
+        /// 判断物理世界岗位与本地岗位是否一致
+        /// 依据1:BimID
+        /// 依据2:CADID
+        /// </summary>
+        /// <param name="cduty"></param>
+        /// <param name="lduty"></param>
+        /// <returns></returns>
+        public static bool IsEqualCloudDuty2LocalDuty(MRevitEquipBase cduty,MRevitEquipBase lduty)
+        {
+            string lbimId = lduty.BimID;
+            string cbimId = cduty.BimID;
+            bool result = false;
+            do
+            {
+                result = lbimId == cbimId;
+                //本地的bimid一定是完整的。
+                //有对应的bimId,或者bimId的格式正确。
+                if (result||!cbimId.IsOnlyDutyNoModelBIMID())
+                {
+                    break;
+                }
 
+                string lcadId, ccadId;
+                //bimId格式不正确,判断CADID
+                //设备
+                if (lduty is MEquipment lequip && cduty is MEquipment cequip)
+                {
+                    lcadId = lequip.CADID;
+                    ccadId = cequip.CADID;
+                    result = lcadId.IsNotNullEmpty() && lcadId == ccadId;
+                    break;
+                }
+                //部件
+                if (lduty is MEquipmentPart lpart && cduty is MEquipmentPart cpart)
+                {
+                    lcadId = lpart.CADID;
+                    ccadId = cpart.CADID;
+                    result = lcadId.IsNotNullEmpty() && lcadId == ccadId;
+                    break;
+                }
+            } while (false);
+            return result;
+        }
         /// <summary>
         /// 新旧文件对比过后,需要添加的数据
         /// </summary>
@@ -487,8 +530,7 @@ namespace SAGA.MBI.DataArrange
             #region Modify Add
             foreach (var lduty in localDutys)
             {
-                string bimId = lduty.BimID;
-                var cdutys = cloudDutys.Where(t => t.BimID == bimId).ToList();
+                var cdutys = cloudDutys.Where(t=> IsEqualCloudDuty2LocalDuty(t,lduty)).ToList();
                 MRevitEquipBase cduty = null;
                 //如果对应多个岗位,仅保留信息点多的岗位,删除其它岗位
                 if (cdutys.Any())

+ 2 - 1
MBI/SAGA.MBI/ToolsData/CorrectLossDuty.cs

@@ -86,7 +86,8 @@ 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)
         {
             Log4Net.Debug("start");
             var oldContext = DalCommon.DownLoadCouldData(floor);