Browse Source

fix : 设备空间更新优化

lvxianyun 3 years ago
parent
commit
c44722392f

+ 61 - 27
src/main/java/com/persagy/proxy/object/controller/AdmEquipmentController.java

@@ -14,7 +14,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.Sets;
 import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.basic.model.QueryCriteria;
-import com.persagy.dmp.basic.utils.JsonNodeUtils;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.helper.SpringHelper;
@@ -177,15 +176,54 @@ public class AdmEquipmentController {
 			ObjectNode node = JsonNodeFactory.instance.objectNode();
 			node.put("graphCode", graphCode);
 			admEquipmentMap.keySet().stream().forEach(equipId -> {
-				node.put("relCode", "Eq2Bd");
-				node.put("objFrom", equipId);
-				criteria.setCriteria(node);
-				relationService.doDelete(AdmContextUtil.toDmpContext(), criteria);
-
-				node.put("relCode", "Eq2Fl");
-				node.put("objFrom", equipId);
-				criteria.setCriteria(node);
-				relationService.doDelete(AdmContextUtil.toDmpContext(), criteria);
+				AdmEquipment admEquipment = admEquipmentMap.get(equipId);
+				//处理建筑 楼层信息点
+				int removeflBd = 0 ;//关系处理 0不删除 1删除bd 2删除fl 3都删除
+				String flowBuild = admEquipment.getFlowBuild();
+				if(StrUtil.isNotEmpty(flowBuild)){
+					if(!flowBuild.contains("-")){
+						if(flowBuild.startsWith("Bd")){
+							admEquipment.setBuildingId(flowBuild);
+							if(StrUtil.isNotEmpty(admEquipment.getFloorId())){
+								Map<String, Object> infos = new HashMap<String,Object>(16);
+								infos.put("$remove", Arrays.asList("floorId"));
+								admEquipment.setInfos(infos);
+								removeflBd = 2;
+							}
+						}
+					}else {
+						String[] str = flowBuild.split("-");
+						if(str[0].startsWith("Bd")){
+							admEquipment.setBuildingId(str[0]);
+							admEquipment.setFloorId(str[1]);
+						}else{
+							admEquipment.setBuildingId(str[1]);
+							admEquipment.setFloorId(str[0]);
+						}
+						removeflBd = 3;
+					}
+					admEquipment.setFlowBuild(null);
+				}else{
+					if(StrUtil.isAllNotEmpty(admEquipment.getBuildingId(),admEquipment.getFloorId())){
+						Map<String, Object> infos = new HashMap<String,Object>(16);
+						infos.put("$remove",Arrays.asList("floorId","buildingId"));
+						admEquipment.setInfos(infos);
+						removeflBd = 3;
+					}
+				}
+				//删除关系 然后重建
+				if(removeflBd == 3 || removeflBd == 2){
+					node.put("relCode", "Eq2Fl");
+					node.put("objFrom", equipId);
+					criteria.setCriteria(node);
+					relationService.doDelete(AdmContextUtil.toDmpContext(), criteria);
+				}
+				if(removeflBd == 3 || removeflBd == 1){
+					node.put("relCode", "Eq2Bd");
+					node.put("objFrom", equipId);
+					criteria.setCriteria(node);
+					relationService.doDelete(AdmContextUtil.toDmpContext(), criteria);
+				}
 			});
 
 			List<RelationDTO> relationDTOList = new ArrayList<>(vos.size());
@@ -204,27 +242,23 @@ public class AdmEquipmentController {
 				relationService.doSave(AdmContextUtil.toDmpContext(), relationDTOList);
 			}
 			//处理设备更新特殊数据
-            List<AdmEquipment> equipmentList = new ArrayList<>(vos.size());
             vos.stream().forEach(equipment -> {
-                if(CollUtil.isNotEmpty(equipment.getInfos())){
-                    AdmEquipment admEquipment = new AdmEquipment();
-                    admEquipment.setId(equipment.getId());
-                    admEquipment.setInfos(equipment.getInfos());
-                    ObjectNode objectNode = JsonNodeUtils.toObjectNode(admEquipment, "infos", null);
-                    AdmEquipment admEquipmentNew = JsonNodeUtils.toEntity(objectNode, AdmEquipment.class, "infos");
-                    if(CollUtil.isNotEmpty(equipment.getNullList())){
-                    	admEquipmentNew.setNullList(equipment.getNullList());
-					}
-                    if(StrUtil.isNotEmpty(equipment.getFloorId())){
-                    	admEquipmentNew.setFloorId(equipment.getFloorId());
+				//特殊处理位置信息
+				if(StrUtil.isNotEmpty(equipment.getBimLocation())){
+					Map<String,Object> infos = equipment.getInfos();
+					if(CollUtil.isEmpty(infos)){
+						infos = new HashMap<String, Object>();
+						infos.put("bimLocation", equipment.getBimLocation());
+						equipment.setInfos(infos);
 					}
-					if(StrUtil.isNotEmpty(equipment.getBuildingId())){
-						admEquipmentNew.setBuildingId(equipment.getBuildingId());
-					}
-                    equipmentList.add(admEquipmentNew);
+				}
+                if(CollUtil.isNotEmpty(equipment.getInfos())){
+                	Object localId = equipment.getInfos().get("localId");
+                   if(localId != null && StrUtil.isNotEmpty(localId.toString())){
+						equipment.setLocalId(localId.toString());
+				   }
                 }
             });
-            vos = equipmentList;
         }
         vos = service.doUpdate(AdmContextUtil.toDmpContext(), AdmEquipment.class, vos);
         return AdmResponse.success(vos);

+ 24 - 18
src/main/java/com/persagy/proxy/object/controller/AdmSpaceController.java

@@ -8,7 +8,6 @@ import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.JsonNodeUtils;
-import com.persagy.dmp.common.model.entity.BaseEntity;
 import com.persagy.proxy.adm.constant.AdmRelationTypeEnum;
 import com.persagy.proxy.adm.handler.SpaceRelationInfoHandler;
 import com.persagy.proxy.adm.request.*;
@@ -125,36 +124,26 @@ public class AdmSpaceController {
     public AdmResponse update(@RequestBody AdmCreateRequest<AdmSpace> createRequest, @QueryParam("projectId") String projectId) throws Exception {
         List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
         if(CollUtil.isNotEmpty(vos)) {
-            Map<String, AdmSpace> admSpaceMap = CollUtil.fieldValueMap(vos, BaseEntity.PROP_ID);
             AdmRelationTypeEnum typeEnumBd = AdmRelationTypeEnum.BD2SP;
-
             AdmRelationTypeEnum typeEnumFl = AdmRelationTypeEnum.FL2SP;
             QueryCriteria criteria = new QueryCriteria();
             ObjectNode node = JsonNodeFactory.instance.objectNode();
 
             List<RelationDTO> relationDTOList = new ArrayList<>(vos.size());
             vos.stream().forEach(admSpace -> {
-                //删除关系 然后重建
-                node.put("relCode", typeEnumBd.getRelCode());
-                node.put("objTo", admSpace.getId());
-                node.put("graphCode", typeEnumBd.getGraphCode());
-                criteria.setCriteria(node);
-                relationService.doDelete(AdmContextUtil.toDmpContext(), criteria);
-
-                node.put("relCode", typeEnumFl.getRelCode());
-                node.put("objTo",  admSpace.getId());
-                node.put("graphCode", typeEnumFl.getGraphCode());
-                criteria.setCriteria(node);
-                relationService.doDelete(AdmContextUtil.toDmpContext(), criteria);
                 //处理建筑 楼层信息点
+                int removeflBd = 0 ;//关系处理 0 不删除 1 删除bd 2 删除fl 3 都删除
                 if(StrUtil.isNotEmpty(admSpace.getFlowBuild())){
                     String flowBuild = admSpace.getFlowBuild();
                     if(!flowBuild.contains("-")){
                         if(flowBuild.startsWith("Bd")){
                             admSpace.setBuildingId(flowBuild);
-                            Map<String, Object> infos = new HashMap<String,Object>(16);
-                            infos.put("$remove", Arrays.asList("floorId"));
-                            admSpace.setInfos(infos);
+                            if(StrUtil.isNotEmpty(admSpace.getFloorId())){
+                                Map<String, Object> infos = new HashMap<String,Object>(16);
+                                infos.put("$remove", Arrays.asList("floorId"));
+                                admSpace.setInfos(infos);
+                                removeflBd = 2;
+                            }
                         }
                     }else {
                         String[] str = flowBuild.split("-");
@@ -165,12 +154,29 @@ public class AdmSpaceController {
                             admSpace.setBuildingId(str[1]);
                             admSpace.setFloorId(str[0]);
                         }
+                        removeflBd = 3;
                     }
                     admSpace.setFlowBuild(null);
                 }else{
                     Map<String, Object> infos = new HashMap<String,Object>(16);
                     infos.put("$remove",Arrays.asList("floorId","buildingId"));
                     admSpace.setInfos(infos);
+                    removeflBd = 3;
+                }
+                //删除关系 然后重建
+                if(removeflBd == 3 || removeflBd == 2){
+                    node.put("relCode", typeEnumFl.getRelCode());
+                    node.put("objTo",  admSpace.getId());
+                    node.put("graphCode", typeEnumFl.getGraphCode());
+                    criteria.setCriteria(node);
+                    relationService.doDelete(AdmContextUtil.toDmpContext(), criteria);
+                }
+                if(removeflBd == 3 || removeflBd == 1){
+                    node.put("relCode", typeEnumBd.getRelCode());
+                    node.put("objTo", admSpace.getId());
+                    node.put("graphCode", typeEnumBd.getGraphCode());
+                    criteria.setCriteria(node);
+                    relationService.doDelete(AdmContextUtil.toDmpContext(), criteria);
                 }
             });
             vos.stream().forEach(space -> {

+ 2 - 0
src/main/java/com/persagy/proxy/object/model/AdmEquipment.java

@@ -116,6 +116,8 @@ public class AdmEquipment extends AdmBaseEntity<AdmEquipment> {
     private String objectType = OBJ_TYPE;
     /** 设备分类 */
     private Map<String, String> equipCategory;
+    /** 更新的时候使用此字段保存楼层和建筑id */
+    private String flowBuild;
 
     /** 资产信息实体类   资产对应设备设施关系 资产→设备设施*/
     @CascadeColumn(graphCode = "Property2Mech", relCode = "Pe2Eq", selectToObj = false)