|
@@ -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>
|
|
|
/// 准备需要显示的拓扑图(全集)
|