Browse Source

fix bug:更新楼层的轮廓时更新计算状态为需要计算

lijie 3 years ago
parent
commit
5f84c947ed

+ 71 - 17
src/main/java/com/persagy/proxy/object/service/impl/AdmFloorServiceImpl.java

@@ -9,7 +9,12 @@ import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
+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.digital.client.DigitalRelationProjectCalFacade;
+import com.persagy.dmp.digital.entity.ObjectRelation;
 import com.persagy.proxy.adm.constant.AdmRelationTypeEnum;
 import com.persagy.proxy.adm.constant.GraphCodeEnum;
 import com.persagy.proxy.adm.constant.RelCodeEnum;
@@ -21,16 +26,15 @@ import com.persagy.proxy.calculation.service.AdmRelCalService;
 import com.persagy.proxy.common.entity.DmpResult;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
 import com.persagy.proxy.object.model.AdmFloor;
+import com.persagy.proxy.object.model.AdmSpace;
 import com.persagy.proxy.object.service.IAdmFloorService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * ADM 楼层 实现类
@@ -99,19 +103,69 @@ public class AdmFloorServiceImpl extends AbstractAdmBaseServiceImpl<AdmFloor> im
          listtype.add("pe2bd")
          listtype.add("pe2fl")
          */
-        admRelCalService.calcRelation(AdmContextUtil.toDmpContext(),
-                //暂不支持资产的关系计算
-                CollUtil.newArrayList(
-                        AdmRelationTypeEnum.SH2BD,
-                        AdmRelationTypeEnum.BD2SP,
-                        AdmRelationTypeEnum.FL2SP,
-                        AdmRelationTypeEnum.SYEQ2BD,
-                        AdmRelationTypeEnum.SY2FL,
-                        AdmRelationTypeEnum.EQ2FL
-                        //AdmRelationTypeEnum.PE2BD,
-                        //AdmRelationTypeEnum.PE2FL
-                ),
-                null);
+        // 2021年12月15日12:17:10 by lijie
+        // 改为原有逻辑:仅更新计算标记,不需要计算
+        // 1.根据关系枚举查询对应项目的关系计算数据
+        List<AdmRelationTypeEnum> admRelationTypeEnums = CollUtil.newArrayList(AdmRelationTypeEnum.SH2BD,
+                AdmRelationTypeEnum.BD2SP,
+                AdmRelationTypeEnum.FL2SP,
+                AdmRelationTypeEnum.SYEQ2BD,
+                AdmRelationTypeEnum.SY2FL,
+                AdmRelationTypeEnum.EQ2FL,
+                AdmRelationTypeEnum.PE2BD,
+                AdmRelationTypeEnum.PE2FL);
+        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<>();
+        for (AdmRelationTypeEnum admRelationTypeEnum : admRelationTypeEnums) {
+            graphRelSet.add(admRelationTypeEnum.getGraphCode()+StrUtil.UNDERLINE+admRelationTypeEnum.getRelCode());
+        }
+        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)){
+                continue;
+            }
+            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);
+        }
     }
 
     /***