Browse Source

fix bug:修复会产生重复的关系

lijie 3 years ago
parent
commit
853f12aace

+ 21 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/RelationCaclController.java

@@ -7,15 +7,19 @@ import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.dmp.rwd.basic.constant.ComputationalStateEnum;
 import com.persagy.dmp.rwd.digital.service.RelationCalService;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /***
@@ -27,6 +31,7 @@ import java.util.List;
 @RestController
 @RequestMapping("/rwd/instance/object/compatible/")
 @RequiredArgsConstructor
+@Slf4j
 public class RelationCaclController {
 
     private final RelationCalService relationCaclService;
@@ -82,7 +87,22 @@ public class RelationCaclController {
                 || StrUtil.isBlank(requestData.getRelCode())){
             throw new BusinessException(ResponseCode.A0400.getCode(),ResponseCode.A0400.getDesc());
         }
-        return relationCaclService.calculatingObjRelation(requestData);
+        // 更新计算时间
+        try{
+            relationCaclService.updateComputeTimeByProjectAndGraphCodeAndRelCode(requestData.getGraphCode(),
+                    requestData.getRelCode(), ComputationalStateEnum.COMPUTING.getState());
+            CommonResult<List<ObjectRelation>> listCommonResult = relationCaclService.calculatingObjRelation(requestData);
+            // 更新计算时间
+            relationCaclService.updateComputeTimeByProjectAndGraphCodeAndRelCode(requestData.getGraphCode(),
+                    requestData.getRelCode(), ComputationalStateEnum.INIT.getState());
+            return listCommonResult;
+        }catch (Exception e){
+            log.error("计算关系失败",e);
+            // 更新计算时间
+            relationCaclService.updateComputeTimeByProjectAndGraphCodeAndRelCode(requestData.getGraphCode(),
+                    requestData.getRelCode(), ComputationalStateEnum.FAIL.getState());
+        }
+        return ResultHelper.multi(new ArrayList<>(),0L);
     }
 
 

+ 10 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/RelationCalService.java

@@ -40,4 +40,14 @@ public interface RelationCalService {
      * Update By lijie 2021/9/7 14:36
      */
     CommonResult<List<ObjectRelation>> calculatingObjRelation(RequestData requestData);
+    /***
+     * Description: 根据项目id和图类型编码及关系类型编码更新计算时间
+     * @param graphCode : 图类型编码
+     * @param relCode : 关系类型编码
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/4 23:14
+     * Update By lijie 2021/9/4 23:14
+     */
+    void updateComputeTimeByProjectAndGraphCodeAndRelCode(String graphCode, String relCode, Integer computationalState);
 }

+ 0 - 8
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/calstrategy/EqToSpCalculateServiceImpl.java

@@ -63,8 +63,6 @@ public class EqToSpCalculateServiceImpl implements CalculateService {
             return;
         }
         // 2.根据各个楼层分别进行关系计算
-        Set<String> ids = CollUtil.newHashSet();
-        String modeStr = "{}_{}_{}_{}_{}";
         for (ObjectDigital floor : floors) {
             // 2.1 根据项目id和楼层id查询设备列表
             List<ObjectDigital> equipments = objectDigitalMapper
@@ -81,12 +79,6 @@ public class EqToSpCalculateServiceImpl implements CalculateService {
             List<ObjectRelation> insertRels = new ArrayList<>();
             for (ObjectDigital equipment : equipments) {
                 for (ObjectDigital space : spaces) {
-                    String key = StrUtil.format(modeStr,calculatingDTO.getGroupCode(),calculatingDTO.getProjectId(),
-                            space.getClassCode(),equipment.getId(),space.getId());
-                    if (ids.contains(key)){
-                        continue;
-                    }
-                    ids.add(key);
                     if (GeoToolsUtil.isPointInPoly(equipment.getBimLocation(),space.getOutLines())){
                         ObjectRelation objectRelation = new ObjectRelation();
                         objectRelation.setGroupCode(calculatingDTO.getGroupCode());

+ 2 - 5
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/RelationCalServiceImpl.java

@@ -217,8 +217,6 @@ public class RelationCalServiceImpl implements RelationCalService {
     @Override
     @Transactional
     public CommonResult<List<ObjectRelation>> calculatingObjRelation(RequestData requestData) {
-        // 更新计算时间
-        updateComputeTimeByProjectAndGraphCodeAndRelCode(requestData.getGraphCode(),requestData.getRelCode(),ComputationalStateEnum.COMPUTING.getState());
         // 拷贝参数到计算对象中
         CalculatingDTO calculatingDTO = copyRequestDataToDTO(requestData);
         // 1.应用fast-fail机制,先校验一下数据正确性,如果不正确拒绝计算
@@ -268,8 +266,6 @@ public class RelationCalServiceImpl implements RelationCalService {
                 .getBean(calRuleTypeMap.get(calRuleType), CalculateService.class);
         // 根据计算规则和参数计算关系
         calculateService.calculateRelation(currentRelationDefine.getCalRules(), calculatingDTO);
-        // 更新计算时间
-        updateComputeTimeByProjectAndGraphCodeAndRelCode(requestData.getGraphCode(),requestData.getRelCode(), ComputationalStateEnum.INIT.getState());
         return ResultHelper.multi(new ArrayList<>(),0L);
     }
     /***
@@ -358,7 +354,8 @@ public class RelationCalServiceImpl implements RelationCalService {
      * @date :2021/9/4 23:14
      * Update By lijie 2021/9/4 23:14
      */
-    private void updateComputeTimeByProjectAndGraphCodeAndRelCode(String graphCode,String relCode,Integer computationalState) {
+    @Override
+    public void updateComputeTimeByProjectAndGraphCodeAndRelCode(String graphCode,String relCode,Integer computationalState) {
         LambdaUpdateWrapper<ObjectRelationProjectCal> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.eq(ObjectRelationProjectCal::getProjectId,AppContext.getContext().getProjectId());
         updateWrapper.eq(ObjectRelationProjectCal::getGraphCode,graphCode);

+ 2 - 2
dmp-business/dmp-rwd/src/main/resources/mapper/ObjectDigitalMapper.xml

@@ -713,7 +713,7 @@
         </if>
     </select>
     <select id="queryEquipBimLocationsByProjectIdAndFloorId" resultMap="BaseResultMap">
-        SELECT dto.id AS id,JSON_OBJECT('X',
+        SELECT DISTINCT dto.id AS id,JSON_OBJECT('X',
             JSON_EXTRACT(JSON_UNQUOTE(CONCAT('[',SUBSTRING(JSON_EXTRACT(infos, '$.bimLocation') FROM 2 FOR LENGTH(JSON_EXTRACT(infos, '$.bimLocation'))-2),']')),'$[0]'),
             'Y',
             JSON_EXTRACT(JSON_UNQUOTE(CONCAT('[',SUBSTRING(JSON_EXTRACT(infos, '$.bimLocation') FROM 2 FOR LENGTH(JSON_EXTRACT(infos, '$.bimLocation'))-2),']')),'$[1]'),
@@ -730,7 +730,7 @@
           AND JSON_UNQUOTE(JSON_EXTRACT(dto.infos, '$.bimLocation')) IS NOT NULL
     </select>
     <select id="querySpacesByProjectIdAndFloorId" resultMap="BaseResultMap">
-        SELECT dto.id AS id,
+        SELECT DISTINCT dto.id AS id,
                JSON_UNQUOTE(JSON_EXTRACT(infos,'$.outline' )) AS outLines,
                dto.class_code AS class_code FROM dt_relation AS dtr
         INNER JOIN dt_object AS dto ON (dto.id=dtr.obj_to)