Browse Source

修复/rwd/instance/object/update校验信息点时判断非静态信息点不校验的bug

lijie 3 years ago
parent
commit
4c253e41c9

+ 8 - 9
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/TestController.java

@@ -4,6 +4,7 @@ import com.persagy.dmp.basic.dto.RelationCalRuleDTO;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.model.response.CommonResult;
 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.RelChainCalculateServiceImpl;
 import lombok.RequiredArgsConstructor;
@@ -19,17 +20,15 @@ import java.util.ArrayList;
 @RequiredArgsConstructor
 public class TestController {
 
-    private final RelChainCalculateServiceImpl relChainCalculateService;
+    private final ObjectRelationMapper objectRelationMapper;
 
     @PostMapping("/testCal")
-    public CommonResult<Void> testCal(@RequestBody RelationCalRuleDTO calRule){
-        CalculatingDTO calculatingDTO = CalculatingDTO.builder()
-                .accountId(AppContext.getContext().getAccountId())
-                .appId(AppContext.getContext().getAppId())
-                .groupCode(AppContext.getContext().getGroupCode())
-                .projectId(AppContext.getContext().getProjectId())
-                .build();
-        relChainCalculateService.calculateRelation(calRule,calculatingDTO);
+    public CommonResult<Void> testCal(@RequestBody CalculatingDTO calculatingDTO){
+        calculatingDTO.setAccountId(AppContext.getContext().getAccountId());
+        calculatingDTO.setAppId(AppContext.getContext().getAppId());
+        calculatingDTO.setGraphCode(AppContext.getContext().getGroupCode());
+        calculatingDTO.setProjectId(AppContext.getContext().getProjectId());
+        objectRelationMapper.insertObjectRelationByRelChain(calculatingDTO);
         return ResultHelper.success();
     }
 

+ 1 - 3
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/dao/ObjectRelationMapper.java

@@ -38,13 +38,11 @@ public interface ObjectRelationMapper extends BaseMapper<ObjectRelation> {
     List<ObjectDigital> selectRelCodesByObjIdsAndRelCodes(@Param("objIds") Set<String> objIds,@Param("relCodes") Set<String> relCodes);
     /***
      * Description: 根据关系链新增对象关系
-     *
-     * @param chain: 关系链
      * @param calculating : 请求参数
      * @return : void
      * @author : lijie
      * @date :2021/9/9 10:09
      * Update By lijie 2021/9/9 10:09
      */
-    void insertObjectRelationByRelChain( @Param("chain") List<RelationCalDTO> chain, @Param("param") CalculatingDTO calculating);
+    void insertObjectRelationByRelChain(@Param("param") CalculatingDTO calculating);
 }

+ 4 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/domain/CalculatingDTO.java

@@ -3,12 +3,14 @@ package com.persagy.dmp.rwd.digital.domain;
 import com.alibaba.fastjson.annotation.JSONField;
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.dmp.basic.dto.RelationCalDTO;
 import com.persagy.dmp.define.entity.RelationDefine;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -77,6 +79,8 @@ public class CalculatingDTO {
     private String appId;
     /** 账号id */
     private String accountId;
+    /** 关系链 */
+    private List<RelationCalDTO> chain;
 
 
 

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

@@ -65,7 +65,8 @@ public class RelChainCalculateServiceImpl implements CalculateService {
         }
         //objectRelationService.remove(queryWrapper);
         // 2.根据链的关系计算,链的首尾
-        objectRelationMapper.insertObjectRelationByRelChain(calRule.getDependentRelChain(),calculatingDTO);
+        calculatingDTO.setChain(calRule.getDependentRelChain());
+        objectRelationMapper.insertObjectRelationByRelChain(calculatingDTO);
 
 
 

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/parser/service/impl/AbstractInfoDataParser.java

@@ -48,7 +48,7 @@ public abstract class AbstractInfoDataParser implements IInfoDataParser {
         // 空值、非静态信息点不需要值校验
         if(valueInfo == null ||
                 JsonNodeType.NULL == valueInfo.getNodeType() ||
-                DigitalDataCategory.STATIC.getIndex().equalsIgnoreCase(infoDefine.getCategory())) {
+                ! DigitalDataCategory.STATIC.getIndex().equalsIgnoreCase(infoDefine.getCategory())) {
             return result;
         }
         try {

+ 75 - 6
dmp-business/dmp-rwd/src/main/resources/mapper/ObjectRelationMapper.xml

@@ -56,7 +56,11 @@
         creation_time,modifier,modified_time,
         valid,ts
     </sql>
-    <insert id="insertObjectRelationByRelChain" parameterType="com.persagy.dmp.rwd.digital.domain.CalculatingDTO">
+    <sql id="insertObjectRelationCondition">
+
+
+    </sql>
+    <insert id="insertObjectRelationByRelChain">
         INSERT INTO dt_relation (
             id,
             group_code,
@@ -94,7 +98,7 @@
             1
         FROM
         (
-        <if test="null!=chain and chain.size()>0">
+        <if test="null!=param.chain and param.chain.size()>0">
             SELECT
             dtr0.obj_from AS obj_from,
             dtr${chain.size()-1}.obj_to AS obj_to,
@@ -102,16 +106,81 @@
             dtr0.project_id AS project_id
             FROM
             (
-            <foreach collection="chain" item="rule" index="index">
+            <foreach collection="param.chain" item="rule" index="index">
              <choose>
                 <when test="index==0">
-                    ( SELECT * FROM dt_relation WHERE graph_code = 'ArchSubset' AND rel_code = 'Bd2Fl' AND valid = TRUE ) AS dtr${index}
+                    ( SELECT obj_to, obj_from,group_code,project_id FROM dt_relation WHERE 1=1
+                        <if test="null!=rule.graphCode and rule.graphCode.length>0">
+                            AND graph_code = #{rule.graphCode}
+                        </if>
+                        <if test="null!=rule.relCode and rule.relCode.length>0">
+                            AND rel_code = #{rule.relCode}
+                        </if>
+                        <if test="null!=rule.relValue and rule.relValue.length>0">
+                            AND rel_value = #{rule.relValue}
+                        </if>
+                        <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>
+                        <if test="null!=param.fromIds and param.fromIds.size()>0">
+                            <foreach collection="param.fromIds" item="fromId" separator="," open="AND obj_from IN(" close=")">
+                                #{fromId}
+                            </foreach>
+                        </if>
+                          AND valid = TRUE
+                    ) AS dtr${index}
                 </when>
                 <when test="index==chain.size()-1">
-                    INNER JOIN dt_relation AS dtr${index} ON ( dtr${index-1}).obj_to = dtr${index}.obj_from AND dtr${index}.graph_code = 'ArchSubset' AND dtr${index}.rel_code = 'Fl2Sp' )
+                    INNER JOIN (SELECT if(#{rule.currentRelDirection},obj_to,obj_from) AS obj_to,if(true,obj_from,obj_to) AS obj_from FROM dt_relation WHERE
+                    (
+                    1=1
+                    <if test="null!=rule.graphCode and rule.graphCode.length>0">
+                        AND graph_code = #{rule.graphCode}
+                    </if>
+                    <if test="null!=rule.relCode and rule.relCode.length>0">
+                        AND rel_code = #{rule.relCode}
+                    </if>
+                    <if test="null!=rule.relValue and rule.relValue.length>0">
+                        AND rel_value = #{rule.relValue}
+                    </if>
+                    <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 valid=TRUE
+                    <if test="null!=param.toIds and param.toIds.size()>0">
+                        if(#{rule.currentRelDirection},obj_to,obj_from) IN(
+                        <foreach collection="param.toIds" item="toId" separator=",">
+                            #{toId}
+                        </foreach>
+                        )
+                    </if>
+                        )) AS dtr${index} ON (if(#{rule.preRelDirection},dtr${index-1}.obj_to,dtr${index-1}.obj_from) = dtr${index}.obj_from)
                 </when>
                 <otherwise>
-                    INNER JOIN dt_relation AS CONCAT('dtr',#{index}) ON ( CONCAT('dtr',#{index}).obj_to = CONCAT('dtr',#{index}).obj_from AND dtr${index}.graph_code = 'ArchSubset' AND dtr${index}.rel_code = 'Fl2Sp' )
+                    INNER JOIN dt_relation AS dtr${index} ON (
+                        if(#{rule.preRelDirection},dtr${index-1}.obj_to,dtr${index-1}.obj_from) = if(#{rule.currentRelDirection},dtr${index}.obj_from,dtr${index}.obj_to)
+                        <if test="null!=rule.graphCode and rule.graphCode.length>0">
+                            AND dtr${index}.graph_code = #{rule.graphCode}
+                        </if>
+                        <if test="null!=rule.relCode and rule.relCode.length>0">
+                            AND dtr${index}.rel_code = #{rule.relCode}
+                        </if>
+                        <if test="null!=rule.relValue and rule.relValue.length>0">
+                            AND dtr${index}.rel_value = #{rule.relValue}
+                        </if>
+                        <if test="null!=param.groupCode and param.groupCode.length>0">
+                            AND dtr${index}.group_code = #{param.groupCode}
+                        </if>
+                        <if test="null!=param.projectId and param.projectId.length>0">
+                            AND dtr${index}.project_id = #{param.projectId}
+                        </if>
+                        AND dtr${index}.valid=TRUE)
                 </otherwise>
              </choose>
             </foreach>

+ 5 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/dto/RelationCalDTO.java

@@ -16,5 +16,10 @@ public class RelationCalDTO {
     private String relCode;
     /**空间类型编码*/
     private String relValue;
+    /**前一种关系的是用左侧关系还是右侧关系与当前关系做关联*/
+    private Boolean preRelDirection;
+    /**当前关系的是用左侧关系还是右侧关系与前一种关系做关联*/
+    private Boolean currentRelDirection;
+
 
 }