Kaynağa Gözat

修复/rwd/def/funcid/query没有带上通用信息点的bug

lijie 3 yıl önce
ebeveyn
işleme
b752a5b26c

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

@@ -21,11 +21,10 @@ public enum BusinessErrorRwdCode {
     A7305("A7305", ":错误的类型参考:这里的传感器包含车库摄像头,车位检测器,办公摄像头,火灾探测器,燃气探测器,漏电探测器,消防设备电源传感器,监控摄像头,入侵报警探测器,以及传感器系统下所有设备类型"),
     A7306("A7306", ":不符合主对象条件限制"),
     A7307("A7307", "图类型编码或边类型编码不能为空"),
-    A7308("A7308", "错误的关系计算策略"),
+    A7308("A7308", "关系计算策略错误"),
     A7309("A7309", "边类型编码不存在"),
-    A7310("A7310", "前置关系中的图类型编码或边类型编码不能为空"),
-    A7311("A7311", "计算关系链为空"),
-    A7312("A7312", "计算器的类型不存在");
+    A7310("A7310", "计算关系链为空"),
+    A7311("A7311", "计算器的类型不存在");
 
     private String code;
 

+ 48 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectInfoController.java

@@ -1,8 +1,12 @@
 package com.persagy.dmp.rwd.define.controller;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
@@ -11,10 +15,16 @@ import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.JsonHelper;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.define.entity.ObjectInfoDefine;
+import com.persagy.dmp.define.entity.ObjectTypeDefine;
+import com.persagy.dmp.digital.entity.ObjectDigital;
+import com.persagy.dmp.digital.entity.ObjectRelation;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
 import com.persagy.dmp.rwd.define.service.IObjectInfoService;
+import com.persagy.dmp.rwd.define.service.IObjectTypeService;
+import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -32,10 +42,11 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/rwd/def/funcid")
+@RequiredArgsConstructor
 public class ObjectInfoController {
 
-    @Autowired
-    private IObjectInfoService service;
+    private final IObjectInfoService service;
+    private final IObjectTypeService objectTypeService;
 
     @PostMapping("")
     public CommonResult<List<ObjectInfoDefine>> query(@RequestBody QueryCriteria criteria) {
@@ -48,6 +59,8 @@ public class ObjectInfoController {
             objCriteria.remove(CommonConstant.TYPE);
         }
         QueryWrapper<ObjectInfoDefine> wrapper = new QueryWrapper<>();
+        // 处理classCode
+        ensureClassCode(criteria);
         // 添加所属项目条件
         ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
@@ -67,6 +80,39 @@ public class ObjectInfoController {
         }
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
+    /***
+     * Description: 处理对象类型,如果父级id存在则加上父级id
+     * @param criteria : 查询参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/9 18:25
+     * Update By lijie 2021/9/9 18:25
+     */
+    private void ensureClassCode(QueryCriteria criteria) {
+        ObjectNode objectNode = criteria.getCriteria();
+        if (!objectNode.has(ObjectDigital.CLASS_CODE_HUM)){
+            return;
+        }
+        JsonNode jsonNode = objectNode.get(ObjectDigital.CLASS_CODE_HUM);
+        if (!jsonNode.isTextual()){
+            return;
+        }
+        String classCode = jsonNode.asText();
+        LambdaQueryWrapper<ObjectTypeDefine> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ObjectTypeDefine::getCode,classCode);
+        queryWrapper.eq(ObjectTypeDefine::getValid,true);
+        List<ObjectTypeDefine> objectTypeDefines = objectTypeService.queryByCondition(queryWrapper);
+        if (CollUtil.isEmpty(objectTypeDefines)){
+            return;
+        }
+        ObjectTypeDefine objectTypeDefine = objectTypeDefines.get(0);
+        ArrayNode arrayNode = JsonHelper.objectMapper.createArrayNode();
+        arrayNode.add(classCode);
+        if (StrUtil.isNotBlank(objectTypeDefine.getParentCode())){
+            arrayNode.add(objectTypeDefine.getParentCode());
+        }
+        objectNode.put(ObjectDigital.CLASS_CODE_HUM,arrayNode);
+    }
 
     @PostMapping("/create")
     public CommonResult<ObjectInfoDefine> create(@Valid @RequestBody ObjectInfoDefine vo){

+ 38 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/TestController.java

@@ -0,0 +1,38 @@
+package com.persagy.dmp.rwd.digital.controller;
+
+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.domain.CalculatingDTO;
+import com.persagy.dmp.rwd.digital.service.impl.RelChainCalculateServiceImpl;
+import lombok.RequiredArgsConstructor;
+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;
+
+@RestController
+@RequestMapping("/test")
+@RequiredArgsConstructor
+public class TestController {
+
+    private final RelChainCalculateServiceImpl relChainCalculateService;
+
+    @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);
+        return ResultHelper.success();
+    }
+
+
+
+}

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

@@ -1,8 +1,10 @@
 package com.persagy.dmp.rwd.digital.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.basic.dto.RelationCalDTO;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -34,4 +36,15 @@ public interface ObjectRelationMapper extends BaseMapper<ObjectRelation> {
      * Update By lijie 2021/8/26 12:07
      */
     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);
 }

+ 1 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectRelationService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.persagy.dmp.basic.dto.RelationCalDTO;
 import com.persagy.dmp.digital.entity.ObjectRelation;
 import java.util.List;
 

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.dmp.basic.dto.RelationCalDTO;
 import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.digital.entity.ObjectRelation;
 import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
@@ -99,5 +100,4 @@ public class ObjectRelationServiceImpl extends ServiceImpl<ObjectRelationMapper,
         return list;
     }
 
-
 }

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

@@ -5,7 +5,10 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.persagy.dmp.basic.dto.RelationCalDTO;
 import com.persagy.dmp.basic.dto.RelationCalRuleDTO;
+import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.digital.entity.ObjectRelation;
+import com.persagy.dmp.rwd.basic.constant.BusinessErrorRwdCode;
+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;
@@ -28,6 +31,7 @@ import java.util.List;
 public class RelChainCalculateServiceImpl implements CalculateService {
 
     private final IObjectRelationService objectRelationService;
+    private final ObjectRelationMapper objectRelationMapper;
 
 
     /***
@@ -42,6 +46,10 @@ public class RelChainCalculateServiceImpl implements CalculateService {
     @Override
     @Transactional
     public void calculateRelation(RelationCalRuleDTO calRule, CalculatingDTO calculatingDTO) {
+        List<RelationCalDTO> chain = calRule.getDependentRelChain();
+        if (chain.size()<=1){
+            throw new BusinessException(BusinessErrorRwdCode.A7310.getCode(),BusinessErrorRwdCode.A7310.getDesc());
+        }
         // 1.删除该类关系
         LambdaQueryWrapper<ObjectRelation> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(ObjectRelation::getGraphCode,calculatingDTO.getGraphCode());
@@ -55,10 +63,9 @@ public class RelChainCalculateServiceImpl implements CalculateService {
         if (StrUtil.isNotBlank(calculatingDTO.getProjectId())){
             queryWrapper.eq(ObjectRelation::getProjectId,calculatingDTO.getProjectId());
         }
-        objectRelationService.remove(queryWrapper);
+        //objectRelationService.remove(queryWrapper);
         // 2.根据链的关系计算,链的首尾
-        List<RelationCalDTO> chain = calRule.getDependentRelChain();
-
+        objectRelationMapper.insertObjectRelationByRelChain(calRule.getDependentRelChain(),calculatingDTO);
 
 
 

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

@@ -321,7 +321,7 @@ public class RelationCalServiceImpl implements RelationCalService {
             RelationCalRuleDTO calRules = relationDefine.getCalRules();
             if (!(CalRuleTypeEnum.REL_CHAIN.getIndex().equals(calRules.getCalRuleType())
                 || CalRuleTypeEnum.COORDINATE.getIndex().equals(calRules.getCalRuleType()))){
-                throw new BusinessException(BusinessErrorRwdCode.A7312.getCode(),BusinessErrorRwdCode.A7312.getDesc());
+                throw new BusinessException(BusinessErrorRwdCode.A7308.getCode(),BusinessErrorRwdCode.A7308.getDesc());
             }
             if (CalRuleTypeEnum.REL_CHAIN.getIndex().equals(calRules.getCalRuleType())){
                 CalculateService calculateService = SpringHelper

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

@@ -56,6 +56,70 @@
         creation_time,modifier,modified_time,
         valid,ts
     </sql>
+    <insert id="insertObjectRelationByRelChain" parameterType="com.persagy.dmp.rwd.digital.domain.CalculatingDTO">
+        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
+        (
+        <if test="null!=chain and chain.size()>0">
+            SELECT
+            dtr0.obj_from AS obj_from,
+            dtr${chain.size()-1}.obj_to AS obj_to,
+            dtr0.group_code AS group_code,
+            dtr0.project_id AS project_id
+            FROM
+            (
+            <foreach collection="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}
+                </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' )
+                </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' )
+                </otherwise>
+             </choose>
+            </foreach>
+            )
+        </if>
+        ) AS dtr
+    </insert>
+
     <select id="selectRelCodesByObjToIdsAndRelCode" resultMap="ObjectDigitalResultMap">
         SELECT
             dtr.obj_to AS id,IFNULL(JSON_ARRAYAGG(dtr.obj_from),JSON_ARRAY()) AS objFromIds

+ 1 - 1
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/ObjectDigital.java

@@ -36,7 +36,7 @@ public class ObjectDigital extends AuditableEntity {
     /** 对象类型 */
     public static final String CLASS_CODE = "class_code";
     /** 对象类型 */
-    public static final String CLASS_CODE_HUM = "class_code";
+    public static final String CLASS_CODE_HUM = "classCode";
     /** 对象本地名称 */
     public static final String LOCAL_NAME_HUM = "localName";
     /** 对象本地名称 */