Browse Source

mxg:如果通过CADID找到多个岗位,则保留cloud岗位,local岗位新建

mengxiangge 5 years ago
parent
commit
d3baded93d
1 changed files with 54 additions and 2 deletions
  1. 54 2
      MBI/SAGA.MBI/DataArrange/DalUploadFloor.cs

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

@@ -476,7 +476,7 @@ namespace SAGA.MBI.DataArrange
         /// <summary>
         /// 判断物理世界岗位与本地岗位是否一致
         /// 依据1:BimID
-        /// 依据2:CADID
+        /// --暂时不使用,依据2:CADID
         /// </summary>
         /// <param name="cduty"></param>
         /// <param name="lduty"></param>
@@ -489,6 +489,8 @@ namespace SAGA.MBI.DataArrange
             do
             {
                 result = lbimId == cbimId;
+                result = !cbimId.IsOnlyDutyNoModelBIMID() && result;
+                break;
                 //本地的bimid一定是完整的。
                 //有对应的bimId,或者bimId的格式正确。
                 if (result||!cbimId.IsOnlyDutyNoModelBIMID())
@@ -518,6 +520,51 @@ namespace SAGA.MBI.DataArrange
             return result;
         }
         /// <summary>
+        /// 判断物理世界岗位与本地岗位是否一致
+        /// 依据1:BimID
+        /// 依据2:CADID
+        /// </summary>
+        /// <param name="cduty"></param>
+        /// <param name="lduty"></param>
+        /// <returns></returns>
+        public static bool IsEqualDutyByCADID(MRevitEquipBase cduty, MRevitEquipBase lduty)
+        {
+            string lbimId = lduty.BimID;
+            string cbimId = cduty.BimID;
+            bool result = false;
+            do
+            {
+                result = lbimId == cbimId;
+                //本地的bimid一定是完整的。
+                //bimId的格式正确。直接返回,不进行CADID判断
+                if (!cbimId.IsOnlyDutyNoModelBIMID())
+                {
+                    result = false;
+                    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>
         public static void WrapperContext(CalcContext cloudContext, CalcContext localContext)
@@ -531,10 +578,14 @@ namespace SAGA.MBI.DataArrange
             foreach (var lduty in localDutys)
             {
                 var cdutys = cloudDutys.Where(t=> IsEqualCloudDuty2LocalDuty(t,lduty)).ToList();
+                var cdutysByCADID= cloudDutys.Where(t => IsEqualDutyByCADID(t, lduty)).ToList();
                 MRevitEquipBase cduty = null;
                 //如果对应多个岗位,仅保留信息点多的岗位,删除其它岗位
-                if (cdutys.Any())
+                if (cdutys.Any()||cdutysByCADID.Count==1)
                 {
+                    //如果通过CADID只找到一个,当做对应岗位处理。
+
+                    cdutys.AddRange(cdutysByCADID);
                     if (cdutys.Count() > 1)
                     {//信息点的个数从大到小排序
                         cdutys.Sort((x, y) => { return -x.CloundJObject.Count.CompareTo(y.CloundJObject.Count); });
@@ -547,6 +598,7 @@ namespace SAGA.MBI.DataArrange
                 }
                 else
                 {
+                    //通过CADID找到多个,也当做新增处理 190823 tjc
                     //请求Duty,Bim数据库中的id,待建模型清单产生的
                     var dutyId = lduty.GetDutyBIMRelationByBIM()?.DutyId;
                     if (dutyId.IsNotNullEmpty())