Procházet zdrojové kódy

实现楼层贯通关系计算器

lijie před 3 roky
rodič
revize
dd4888095f

+ 4 - 3
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/constant/CalRuleTypeEnum.java

@@ -16,9 +16,10 @@ import java.util.stream.Collectors;
 @Getter
 public enum CalRuleTypeEnum {
     /** 计算规则种类 */
-    REL_CHAIN("1","relChainCalculateService"),
-    COORDINATE("2","coordinateCalculateService"),
-    REL_EXTEND("3","relExtendCalculateService");
+    REL_CHAIN("1","relChainCalculateServiceImpl"),
+    COORDINATE("2","coordinateCalculateServiceImpl"),
+    REL_EXTEND("3","relExtendCalculateServiceImpl"),
+    FL_THROUGH_FL("4","flThroughFlRelCalculateServiceImpl");
 
     CalRuleTypeEnum(String index, String beanName) {
         this.index = index;

+ 4 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/TestController.java

@@ -7,6 +7,7 @@ import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.rwd.digital.dao.ObjectRelationMapper;
 import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
 import com.persagy.dmp.rwd.digital.service.impl.CoordinateCalculateServiceImpl;
+import com.persagy.dmp.rwd.digital.service.impl.FlThroughFlRelCalculateServiceImpl;
 import com.persagy.dmp.rwd.digital.service.impl.RelChainCalculateServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -23,6 +24,7 @@ public class TestController {
 
     private final ObjectRelationMapper objectRelationMapper;
     private final CoordinateCalculateServiceImpl coordinateCalculateService;
+    private final FlThroughFlRelCalculateServiceImpl flThroughFlRelCalculateService;
 
     @PostMapping("/testCal")
     public CommonResult<Void> testCal(@RequestBody CalculatingDTO calculatingDTO){
@@ -39,7 +41,8 @@ public class TestController {
         calculatingDTO.setAppId(AppContext.getContext().getAppId());
         calculatingDTO.setGroupCode(AppContext.getContext().getGroupCode());
         calculatingDTO.setProjectId(AppContext.getContext().getProjectId());
-        coordinateCalculateService.calculateRelation(calculatingDTO.getRelationCalRule(),calculatingDTO);
+        //coordinateCalculateService.calculateRelation(calculatingDTO.getRelationCalRule(),calculatingDTO);
+        flThroughFlRelCalculateService.calculateRelation(calculatingDTO.getRelationCalRule(),calculatingDTO);
         return ResultHelper.success();
     }
 

+ 9 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/ObjectRelationMapper.java

@@ -45,4 +45,13 @@ public interface ObjectRelationMapper extends BaseMapper<ObjectRelation> {
      * Update By lijie 2021/9/9 10:09
      */
     void insertObjectRelationByRelChain(@Param("param") CalculatingDTO calculating);
+    /***
+     * Description: 新增楼层贯通对象关系
+     * @param calculating : 请求参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/9 10:09
+     * Update By lijie 2021/9/9 10:09
+     */
+    void insertObjectRelationForFlThroughFl(@Param("param") CalculatingDTO calculating);
 }

+ 4 - 27
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/CoordinateCalculateServiceImpl.java

@@ -22,6 +22,7 @@ import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
 import com.persagy.dmp.rwd.digital.service.CalculateService;
 import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
 import com.persagy.dmp.rwd.digital.service.IObjectRelationService;
+import com.persagy.dmp.rwd.digital.utils.ObjectDigitalCriteriaHelper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -177,7 +178,7 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
      */
     private void deleteRelDataByCondition(CalculatingDTO calculatingDTO, Set<String> fromIds, Set<String> toIds) {
         fromIds.addAll(toIds);
-        QueryWrapper<ObjectRelation> queryWrapper = createCommonQueryWrapper(fromIds,calculatingDTO);
+        QueryWrapper<ObjectRelation> queryWrapper = ObjectDigitalCriteriaHelper.createCommonQueryWrapper(fromIds,calculatingDTO);
         queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.GRAPH_CODE_HUM),calculatingDTO.getGraphCode());
         queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.REL_CODE_HUM),calculatingDTO.getRelCode());
         if (StrUtil.isNotBlank(calculatingDTO.getRelValue())){
@@ -198,7 +199,7 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
      * Update By lijie 2021/9/11 15:36
      */
     private List<ObjectDigital> queryPlaneData(Set<String> toIds, String objType, String toInfoCode, CalculatingDTO calculatingDTO) {
-        QueryWrapper<ObjectDigital> queryWrapper = createCommonQueryWrapper(toIds,calculatingDTO);
+        QueryWrapper<ObjectDigital> queryWrapper = ObjectDigitalCriteriaHelper.createCommonQueryWrapper(toIds,calculatingDTO);
         if (StrUtil.isNotBlank(objType)){
             queryWrapper.eq(ObjectDigital.OBJ_TYPE,objType);
         }
@@ -214,30 +215,6 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
     }
 
     /***
-     * Description: 创建通用查询条件对象
-     * @param ids : 对象id数组
-     * @param calculatingDTO : 请求参数
-     * @return : com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<com.persagy.dmp.digital.entity.ObjectDigital>
-     * @author : lijie
-     * @date :2021/9/11 15:41
-     * Update By lijie 2021/9/11 15:41
-     */
-    private <T> QueryWrapper<T> createCommonQueryWrapper(Set<String> ids, CalculatingDTO calculatingDTO) {
-        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(ObjectDigital.PROP_VALID,Boolean.TRUE);
-        if (CollUtil.isNotEmpty(ids)){
-            queryWrapper.in(ObjectDigital.PROP_ID,ids);
-        }
-        if (StrUtil.isNotBlank(calculatingDTO.getGroupCode())){
-            queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_GROUPCODE),calculatingDTO.getGroupCode());
-        }
-        if (StrUtil.isNotBlank(calculatingDTO.getProjectId())){
-            queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_PROJECTID),calculatingDTO.getProjectId());
-        }
-        return queryWrapper;
-    }
-
-    /***
      * Description: 查询来源数据
      * @param fromIds : 来源id集合
      * @param objType : 对象分类
@@ -249,7 +226,7 @@ public class CoordinateCalculateServiceImpl implements CalculateService {
      * Update By lijie 2021/9/11 15:32
      */
     private List<ObjectDigital> queryPointData(Set<String> fromIds, String objType, String fromInfoCode, CalculatingDTO calculatingDTO) {
-        QueryWrapper<ObjectDigital> queryWrapper = createCommonQueryWrapper(fromIds, calculatingDTO);
+        QueryWrapper<ObjectDigital> queryWrapper = ObjectDigitalCriteriaHelper.createCommonQueryWrapper(fromIds, calculatingDTO);
         if (StrUtil.isNotBlank(objType)){
             queryWrapper.eq(ObjectDigital.OBJ_TYPE,objType);
         }

+ 64 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/FlThroughFlRelCalculateServiceImpl.java

@@ -0,0 +1,64 @@
+package com.persagy.dmp.rwd.digital.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.persagy.dmp.basic.dto.RelationCalRuleDTO;
+import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.dmp.rwd.digital.dao.ObjectRelationMapper;
+import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
+import com.persagy.dmp.rwd.digital.service.CalculateService;
+import com.persagy.dmp.rwd.digital.service.IObjectRelationService;
+import com.persagy.dmp.rwd.digital.utils.ObjectDigitalCriteriaHelper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Set;
+
+/***
+ * Description: 楼层贯通关系计算
+ * @author : lijie
+ * @date :2021/10/9 16:26
+ * Update By lijie 2021/10/9 16:26
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class FlThroughFlRelCalculateServiceImpl implements CalculateService {
+
+    private final IObjectRelationService objectRelationService;
+    private final ObjectRelationMapper objectRelationMapper;
+
+
+    /***
+     * Description: 楼层贯通关系计算
+     * @param calRule : 计算规则
+     * @param calculatingDTO : 请求参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/10/9 16:26
+     * Update By lijie 2021/10/9 16:26
+     */
+    @Override
+    public void calculateRelation(RelationCalRuleDTO calRule, CalculatingDTO calculatingDTO) {
+        // 1.根据图类型编码,边类型编码,relValue,项目id,集团编码删除关系
+        deleteRelDataByCondition(calculatingDTO);
+        // 2.调用接口批量生成关系
+        objectRelationMapper.insertObjectRelationForFlThroughFl(calculatingDTO);
+    }
+
+    /***
+     * Description: 根据请求参数和id集合删除关系
+     * @param calculatingDTO : 请求参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/11 16:13
+     * Update By lijie 2021/9/11 16:13
+     */
+    private void deleteRelDataByCondition(CalculatingDTO calculatingDTO) {
+        QueryWrapper<ObjectRelation> queryWrapper = ObjectDigitalCriteriaHelper.createCommonQueryWrapper(null,calculatingDTO);
+        queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.GRAPH_CODE_HUM),calculatingDTO.getGraphCode());
+        queryWrapper.eq(StrUtil.toUnderlineCase(ObjectRelation.REL_CODE_HUM),calculatingDTO.getRelCode());
+        objectRelationService.remove(queryWrapper);
+    }
+}

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

@@ -246,6 +246,11 @@ public class RelationCalServiceImpl implements RelationCalService {
                         relationDefine.getGraphCode() + StrUtil.UNDERLINE + relationDefine.getCode(),
                 relationDefine -> relationDefine, (k1, k2) -> k1));
         calculatingDTO.setRelationDefineMap(relationDefineMap);
+        if (null==currentRelationDefine.getCalRules()
+                || StrUtil.isBlank(currentRelationDefine.getCalRules().getCalRuleType())){
+            // 计算规则为空,则直接放弃计算
+            throw new BusinessException(BusinessErrorRwdCode.A7308.getCode(), BusinessErrorRwdCode.A7308.getDesc());
+        }
         // 2.1 前置关系是否存在,如果存在先处理前置关系
         handlePreRelation(currentRelationDefine,calculatingDTO);
         // 2.2 计算自身关系

+ 27 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/utils/ObjectDigitalCriteriaHelper.java

@@ -5,6 +5,7 @@ import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ReflectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -12,10 +13,12 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.model.QueryOperator;
 import com.persagy.dmp.basic.utils.JsonNodeUtils;
+import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.model.entity.BaseEntity;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
 
 import java.util.*;
 
@@ -330,4 +333,28 @@ public class ObjectDigitalCriteriaHelper {
             inSql.append("and " + column + " = " + nodeValue + " ");
         }
     }
+
+    /***
+     * Description: 创建通用查询条件对象
+     * @param ids : 对象id数组
+     * @param calculatingDTO : 请求参数
+     * @return : com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<com.persagy.dmp.digital.entity.ObjectDigital>
+     * @author : lijie
+     * @date :2021/9/11 15:41
+     * Update By lijie 2021/9/11 15:41
+     */
+    public static <T> QueryWrapper<T> createCommonQueryWrapper(Set<String> ids, CalculatingDTO calculatingDTO) {
+        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(ObjectDigital.PROP_VALID,Boolean.TRUE);
+        if (CollUtil.isNotEmpty(ids)){
+            queryWrapper.in(ObjectDigital.PROP_ID,ids);
+        }
+        if (StrUtil.isNotBlank(calculatingDTO.getGroupCode())){
+            queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_GROUPCODE),calculatingDTO.getGroupCode());
+        }
+        if (StrUtil.isNotBlank(calculatingDTO.getProjectId())){
+            queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_PROJECTID),calculatingDTO.getProjectId());
+        }
+        return queryWrapper;
+    }
 }

+ 79 - 0
dmp-business/dmp-rwd/src/main/resources/mapper/ObjectRelationMapper.xml

@@ -259,4 +259,83 @@
         )
         ) AS rdtr;
     </select>
+
+    <insert id="insertObjectRelationForFlThroughFl">
+        INSERT INTO dt_relation (
+        id,
+        group_code,
+        project_id,
+        graph_id,
+        graph_code,
+        rel_code,
+        rel_value,
+        obj_from,
+        obj_to,
+        create_app,
+        update_app,
+        creator,
+        creation_time,
+        modifier,
+        modified_time,
+        valid
+        )
+        SELECT
+        (SELECT MD5(UUID()) FROM DUAL),
+        dtr.group_code,
+        dtr.project_id,
+        CONCAT('Gt',#{param.graphCode},'001'),
+        #{param.graphCode},
+        #{param.relCode},
+        NULL,
+        dtr.obj_from,
+        dtr.obj_to,
+        #{param.appId},
+        #{param.appId},
+        #{param.accountId},
+        DATE_FORMAT(NOW(),'%Y%m%d%H%i%s'),
+        #{param.accountId},
+        DATE_FORMAT(NOW(),'%Y%m%d%H%i%s'),
+        1
+        FROM
+        (
+        SELECT
+        dtr0.id AS obj_from,
+        dtr1.id AS obj_to,
+        dtr0.group_code AS group_code,
+        dtr0.project_id AS project_id
+        FROM
+        (
+        SELECT
+        *
+        FROM
+        dt_object
+        WHERE
+        obj_type = 'floor'
+        <if test="null!=param.groupCode and param.groupCode.length>0">
+            AND group_code = #{param.groupCode}
+        </if>
+        <if test="null!=param.projectId and param.projectId.length>0">
+            AND project_id = #{param.projectId}
+        </if>
+        AND JSON_EXTRACT( infos, '$.modelId' ) IS NOT NULL
+        ) AS dtr0
+        LEFT JOIN (
+        SELECT
+        *
+        FROM
+        dt_object
+        WHERE
+        obj_type = 'floor'
+        <if test="null!=param.groupCode and param.groupCode.length>0">
+            AND group_code = #{param.groupCode}
+        </if>
+        <if test="null!=param.projectId and param.projectId.length>0">
+            AND project_id = #{param.projectId}
+        </if>
+        AND JSON_EXTRACT( infos, '$.modelId' ) IS NOT NULL
+        ) AS dtr1 ON dtr0.id &lt;&gt; dtr1.id
+        AND JSON_EXTRACT( dtr0.infos, '$.modelId' ) = JSON_EXTRACT( dtr1.infos, '$.modelId' )
+        ) AS dtr
+    </insert>
+
 </mapper>