Browse Source

fix bug:批量创建空间,缓冲很久都没返回创建成功提示,连着批量创建几层楼的空间后比较容易出现

lijie 3 years ago
parent
commit
dab2f656d7

+ 1 - 2
src/main/java/com/persagy/proxy/object/controller/AdmSpaceController.java

@@ -91,8 +91,7 @@ public class AdmSpaceController {
         }
         if(StrUtil.isEmpty(msg)){
             vos = service.doInsertExt(AdmContextUtil.toDmpContext(), AdmSpace.class, vos);
-            AdmCreateResponse admResponseObj = AdmCreateResponse.success(vos);
-            return admResponseObj;
+            return AdmCreateResponse.success(vos);
         }else{
             return AdmCreateResponse.failure(msg);
         }

+ 89 - 12
src/main/java/com/persagy/proxy/object/service/impl/AdmSpaceServiceImpl.java

@@ -17,11 +17,13 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.Sets;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.JsonNodeUtils;
+import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.helper.SpringHelper;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.define.entity.ObjectTypeDefine;
 import com.persagy.dmp.digital.client.DigitalObjectFacade;
+import com.persagy.dmp.digital.client.DigitalRelationProjectCalFacade;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
 import com.persagy.dmp.simple.client.DigitalObjectSimpleFacade;
@@ -91,7 +93,9 @@ public class AdmSpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmSpace> im
 
     @Override
     public List<AdmSpace> doInsertExt(InstanceUrlParam context, Class<AdmSpace> clazz, List<AdmSpace> voList) {
-        Map<String, List<AdmSpace>> spaceMapByFlId = voList.stream().filter(admSpace -> StringUtils.isNotEmpty(admSpace.getFloorId())).collect(Collectors.groupingBy(AdmSpace::getFloorId));
+        Map<String, List<AdmSpace>> spaceMapByFlId = voList.stream()
+                .filter(admSpace -> StringUtils.isNotEmpty(admSpace.getFloorId()))
+                .collect(Collectors.groupingBy(AdmSpace::getFloorId));
         //查询空间中floorId 对应的floor
         if(CollUtil.isNotEmpty(spaceMapByFlId)){
             List<ObjectNode> floors = queryFloorsByFloorIds(context, spaceMapByFlId.keySet());
@@ -438,17 +442,90 @@ public class AdmSpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmSpace> im
     @Async
     @Override
     public void processRelationType(InstanceUrlParam context,List<AdmSpace> vos) {
-        admRelCalService.calcRelation(context,
-                CollUtil.newArrayList(
-                        AdmRelationTypeEnum.SP2SP_SPACENEIGHBORHOOD_5,
-                        AdmRelationTypeEnum.SP2SP_TRAFFICNETWORK_3,
-                        AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_1,
-                        AdmRelationTypeEnum.SP2SP_RADIATIONNETWORK_1),null);
-
-        vos.forEach(admSpace -> {
-            admRelCalService.calcRelation(context,
-                    CollUtil.newArrayList(AdmRelationTypeEnum.EQ2SP_IN),admSpace.getClassCode());
-        });
+        // 2021年12月15日11:12:22 by lijie
+        // 更改逻辑,改为原有逻辑:仅更新计算标记.而非进行关系计算
+        // 1.根据关系枚举查询对应项目的关系计算数据
+        List<AdmRelationTypeEnum> admRelationTypeEnums = CollUtil.newArrayList(
+                AdmRelationTypeEnum.SP2SP_SPACENEIGHBORHOOD_5,
+                AdmRelationTypeEnum.SP2SP_TRAFFICNETWORK_3,
+                AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_1,
+                AdmRelationTypeEnum.SP2SP_RADIATIONNETWORK_1,
+                AdmRelationTypeEnum.EQ2SP_IN);
+        Set<String> graphCodes = admRelationTypeEnums.stream()
+                .filter(admRelationTypeEnum -> StrUtil.isNotBlank(admRelationTypeEnum.getGraphCode()))
+                .map(AdmRelationTypeEnum::getGraphCode)
+                .collect(Collectors.toSet());
+        Set<String> relCodes = admRelationTypeEnums.stream()
+                .filter(admRelationTypeEnum -> StrUtil.isNotBlank(admRelationTypeEnum.getRelCode()))
+                .map(AdmRelationTypeEnum::getRelCode)
+                .collect(Collectors.toSet());
+        QueryCriteria queryCriteria = new QueryCriteria();
+        ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+        ObjectNode criteria = objectMapper.createObjectNode();
+        criteria.putPOJO(ObjectRelation.GRAPH_CODE_HUM,graphCodes);
+        criteria.putPOJO(ObjectRelation.REL_CODE_HUM,relCodes);
+        criteria.put(ObjectRelation.PROP_VALID,Boolean.TRUE);
+        queryCriteria.setCriteria(criteria);
+        CommonResult<List<ObjectNode>> commonResult = DigitalRelationProjectCalFacade
+                .queryPrototype(AppContext.getContext().getGroupCode(),
+                AppContext.getContext().getProjectId(), AppContext.getContext().getAppId(),
+                AppContext.getContext().getAccountId(), queryCriteria);
+        if (!CommonConstant.QUERY_SUCCESS.equals(commonResult.getResult())
+                || CollUtil.isEmpty(commonResult.getData())){
+            return;
+        }
+        List<ObjectNode> updateDatas = CollUtil.newArrayList();
+        // 2.过滤及处理数据
+        Set<String> graphRelSet = new HashSet<>();
+        graphRelSet.add(AdmRelationTypeEnum.SP2SP_SPACENEIGHBORHOOD_5.getGraphCode()+StrUtil.UNDERLINE
+                +AdmRelationTypeEnum.SP2SP_SPACENEIGHBORHOOD_5.getRelCode());
+        graphRelSet.add(AdmRelationTypeEnum.SP2SP_TRAFFICNETWORK_3.getGraphCode()+StrUtil.UNDERLINE
+                +AdmRelationTypeEnum.SP2SP_TRAFFICNETWORK_3.getRelCode());
+        graphRelSet.add(AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_1.getGraphCode()+StrUtil.UNDERLINE
+                +AdmRelationTypeEnum.SP2SP_CONVECTIONNETWORK_1.getRelCode());
+        graphRelSet.add(AdmRelationTypeEnum.SP2SP_RADIATIONNETWORK_1.getGraphCode()+StrUtil.UNDERLINE
+                +AdmRelationTypeEnum.SP2SP_RADIATIONNETWORK_1.getRelCode());
+        for (AdmSpace admSpace : vos) {
+            String classCode = admSpace.getClassCode();
+            if (StrUtil.isBlank(classCode)){
+                continue;
+            }
+            graphRelSet.add(AdmRelationTypeEnum.EQ2SP_IN.getGraphCode()+StrUtil.UNDERLINE
+                    +AdmRelationTypeEnum.EQ2SP_IN.getRelCode()+StrUtil.UNDERLINE+admSpace.getClassCode());
+        }
+        for (ObjectNode objectNode : commonResult.getData()) {
+            if (!objectNode.has(ObjectRelation.GRAPH_CODE_HUM)
+                    || !objectNode.get(ObjectRelation.GRAPH_CODE_HUM).isTextual()
+                    || StrUtil.isBlank(objectNode.get(ObjectRelation.GRAPH_CODE_HUM).asText())
+                    || !objectNode.has(ObjectRelation.REL_CODE_HUM)
+                    || !objectNode.get(ObjectRelation.REL_CODE_HUM).isTextual()
+                    || StrUtil.isBlank(objectNode.get(ObjectRelation.REL_CODE_HUM).asText())){
+                continue;
+            }
+            String key = objectNode.get(ObjectRelation.GRAPH_CODE_HUM).asText()+StrUtil.UNDERLINE
+                    +objectNode.get(ObjectRelation.REL_CODE_HUM).asText();
+            if (graphRelSet.contains(key)){
+                objectNode.put("computationalState","2");
+                updateDatas.add(objectNode);
+                continue;
+            }
+            if (!objectNode.has("zoneType")
+                    || !objectNode.get("zoneType").isTextual()
+                    || StrUtil.isBlank(objectNode.get("zoneType").asText())){
+                continue;
+            }
+            key = key+StrUtil.UNDERLINE+objectNode.get("zoneType").asText();
+            if (graphRelSet.contains(key)){
+                objectNode.put("computationalState","2");
+                updateDatas.add(objectNode);
+            }
+        }
+        if (CollUtil.isNotEmpty(updateDatas)){
+            // 3.批量更新数据
+            DigitalRelationProjectCalFacade.update(AppContext.getContext().getGroupCode(),
+                    AppContext.getContext().getProjectId(), AppContext.getContext().getAppId(),
+                    AppContext.getContext().getAccountId(),updateDatas);
+        }
     }
 
     /***