Procházet zdrojové kódy

调整querySpaceListByRoomFuncType接口,增加关系对象id返回

lijie před 3 roky
rodič
revize
9c2ca249f6

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

@@ -1,7 +1,12 @@
 package com.persagy.dmp.rwd.digital.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.digital.entity.ObjectRelation;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Set;
 
 /**
  * 关系数据 DAO
@@ -9,4 +14,14 @@ import com.persagy.dmp.digital.entity.ObjectRelation;
  * @date 2021-07-08
  */
 public interface ObjectRelationMapper extends BaseMapper<ObjectRelation> {
+    /***
+     * Description: 根据对象id(obj_to字段)
+     * @param objIds : 对象id
+     * @param relCode : 关系code
+     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
+     * @author : lijie
+     * @date :2021/8/26 12:07
+     * Update By lijie 2021/8/26 12:07
+     */
+    List<ObjectDigital> selectRelCodesByObjToIdsAndRelCode(@Param("objIds") Set<String> objIds,@Param("relCode") String relCode);
 }

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

@@ -18,8 +18,10 @@ import com.persagy.dmp.common.model.entity.BaseEntity;
 import com.persagy.dmp.common.model.response.CommonResult;
 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.rwd.basic.constant.DigitalMessageConstant;
+import com.persagy.dmp.rwd.basic.constant.DigitalObjectType;
 import com.persagy.dmp.rwd.basic.constant.DigitalRelCode;
 import com.persagy.dmp.rwd.basic.dto.RequestData;
 import com.persagy.dmp.rwd.basic.utils.DigitalCommonUtils;
@@ -27,6 +29,7 @@ import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
 import com.persagy.dmp.rwd.define.service.IObjectInfoService;
 import com.persagy.dmp.rwd.define.service.IObjectTypeService;
 import com.persagy.dmp.rwd.digital.dao.ObjectDigitalMapper;
+import com.persagy.dmp.rwd.digital.dao.ObjectRelationMapper;
 import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
 import com.persagy.dmp.rwd.parser.service.InfoDataFactory;
 import lombok.RequiredArgsConstructor;
@@ -37,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 对象数据 实现类
@@ -53,6 +57,7 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
     private final IObjectInfoService infoService;
     private final IObjectTypeService typeService;
     private final ObjectDigitalMapper objectDigitalMapper;
+    private final ObjectRelationMapper objectRelationMapper;
 
     @Override
     public ObjectDigital load(String id) {
@@ -278,8 +283,40 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
         }
         // 2.过滤信息点
         retainObjInfos(pageResult,requestData.getReturnInfos());
+        // 3.处理Fl2Sp的关系,将对应的空间对象的楼层id扔进去
+        fillFloorIdIntoSpaceObjFromIds(pageResult);
         return ResultHelper.multi(pageResult,totalCount.get(0).getTotalCount());
     }
+    /***
+     * Description: 填充关系id
+     * @param objectDigitals : 查询结果集
+     * @return : void
+     * @author : lijie
+     * @date :2021/8/26 12:00
+     * Update By lijie 2021/8/26 12:00
+     */
+    private void fillFloorIdIntoSpaceObjFromIds(List<ObjectDigital> objectDigitals) {
+        // 1.获得空间id
+        Set<String> spaceIds = objectDigitals.stream()
+                .filter(objectDigital -> DigitalObjectType.SPACE.getIndex().equals(objectDigital.getObjType()))
+                .map(ObjectDigital::getId)
+                .collect(Collectors.toSet());
+        if (CollUtil.isEmpty(spaceIds)){
+            return;
+        }
+        List<ObjectDigital> relResult = objectRelationMapper.selectRelCodesByObjToIdsAndRelCode(spaceIds,DigitalRelCode.FL_2_SP.getIndex());
+        if (CollUtil.isEmpty(relResult)){
+            return;
+        }
+        Map<String, Set<String>> setMap = relResult
+                .stream()
+                .collect(Collectors.toMap(ObjectDigital::getId, ObjectDigital::getObjFromIds, (k1, k2) -> k1));
+        for (ObjectDigital objectDigital : objectDigitals) {
+            Set<String> objFromIds = CollUtil.defaultIfEmpty(objectDigital.getObjFromIds(),new HashSet<>());
+            objFromIds.addAll(setMap.getOrDefault(objectDigital.getId(),new HashSet<>()));
+            objectDigital.setObjFromIds(objFromIds);
+        }
+    }
 
     /***
      * Description: 过滤掉不需要的信息点

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

@@ -24,6 +24,8 @@
             <result property="modifiedTime" column="modified_time" jdbcType="CHAR"/>
             <result property="valid" column="valid" jdbcType="TINYINT"/>
             <result property="ts" column="ts" jdbcType="TIMESTAMP"/>
+            <result property="objFromIds" column="objFromIds" jdbcType="VARCHAR" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+            <result property="objToIds" column="objToIds" jdbcType="VARCHAR" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
     </resultMap>
     <resultMap id="count" type="com.persagy.dmp.digital.entity.ObjectDigital">
         <result property="totalCount" column="totalCount" jdbcType="INTEGER"/>
@@ -96,10 +98,11 @@
                 #{relCode}
             </foreach>
         </if>
+        GROUP BY dto.id
     </sql>
     <sql id="commonQueryObjByRelSub">
         SELECT DISTINCT
-        dto.*
+        dto.*,JSON_ARRAYAGG(dtr.obj_from) AS objFromIds,JSON_ARRAYAGG(dtr.obj_to) AS objToIds
         FROM dt_relation AS dtr
         LEFT JOIN dt_object AS dto ON (dtr.obj_from=dto.id OR dtr.obj_to=dto.id)
         WHERE 1=1
@@ -128,7 +131,7 @@
                     <property name="param" value="#{param}"/>
                 </include>
                 AND dto.obj_type='equipment'
-            ))
+            ) GROUP BY dto.id)
         </if>
     </sql>
     <sql id="pageSet">

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

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.dmp.rwd.digital.dao.ObjectRelationMapper">
+
+    <resultMap id="BaseResultMap" type="com.persagy.dmp.digital.entity.ObjectRelation">
+            <id property="id" column="id" jdbcType="VARCHAR"/>
+            <result property="groupCode" column="group_code" jdbcType="VARCHAR"/>
+            <result property="projectId" column="project_id" jdbcType="VARCHAR"/>
+            <result property="graphId" column="graph_id" jdbcType="VARCHAR"/>
+            <result property="graphCode" column="graph_code" jdbcType="VARCHAR"/>
+            <result property="relCode" column="rel_code" jdbcType="VARCHAR"/>
+            <result property="relValue" column="rel_value" jdbcType="VARCHAR"/>
+            <result property="objFrom" column="obj_from" jdbcType="VARCHAR"/>
+            <result property="objTo" column="obj_to" jdbcType="VARCHAR"/>
+            <result property="createApp" column="create_app" jdbcType="VARCHAR"/>
+            <result property="updateApp" column="update_app" jdbcType="VARCHAR"/>
+            <result property="creator" column="creator" jdbcType="VARCHAR"/>
+            <result property="creationTime" column="creation_time" jdbcType="CHAR"/>
+            <result property="modifier" column="modifier" jdbcType="VARCHAR"/>
+            <result property="modifiedTime" column="modified_time" jdbcType="CHAR"/>
+            <result property="valid" column="valid" jdbcType="TINYINT"/>
+            <result property="ts" column="ts" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <resultMap id="ObjectDigitalResultMap" type="com.persagy.dmp.digital.entity.ObjectDigital">
+        <id property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="localId" column="local_id" jdbcType="VARCHAR"/>
+        <result property="localName" column="local_name" jdbcType="VARCHAR"/>
+        <result property="groupCode" column="group_code" jdbcType="VARCHAR"/>
+        <result property="projectId" column="project_id" jdbcType="VARCHAR"/>
+        <result property="objType" column="obj_type" jdbcType="VARCHAR"/>
+        <result property="classCode" column="class_code" jdbcType="VARCHAR"/>
+        <result property="grouping" column="grouping" jdbcType="INTEGER"/>
+        <result property="infos" column="infos" jdbcType="VARCHAR" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+        <result property="virtualCodes" column="virtual_codes" jdbcType="VARCHAR" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+        <result property="createApp" column="create_app" jdbcType="VARCHAR"/>
+        <result property="updateApp" column="update_app" jdbcType="VARCHAR"/>
+        <result property="creator" column="creator" jdbcType="VARCHAR"/>
+        <result property="creationTime" column="creation_time" jdbcType="CHAR"/>
+        <result property="modifier" column="modifier" jdbcType="VARCHAR"/>
+        <result property="modifiedTime" column="modified_time" jdbcType="CHAR"/>
+        <result property="valid" column="valid" jdbcType="TINYINT"/>
+        <result property="ts" column="ts" jdbcType="TIMESTAMP"/>
+        <result property="objFromIds" column="objFromIds" jdbcType="VARCHAR" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+        <result property="objToIds" column="objToIds" jdbcType="VARCHAR" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        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,ts
+    </sql>
+    <select id="selectRelCodesByObjToIdsAndRelCode" resultMap="ObjectDigitalResultMap">
+        SELECT
+            dtr.obj_to AS id,IFNULL(JSON_ARRAYAGG(dtr.obj_from),JSON_ARRAY()) AS objFromIds
+        FROM
+            dt_relation dtr
+        WHERE 1=1
+        <if test="objIds!=null and objIds.size()>0">
+            <foreach collection="objIds" item="objId" open="AND dtr.obj_to IN (" close=")" separator=",">
+                #{objId}
+            </foreach>
+        </if>
+        <if test="relCode!=null and relCode.length>0">
+            AND dtr.rel_code = #{relCode}
+        </if>
+        GROUP BY dtr.obj_to;
+    </select>
+</mapper>

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

@@ -13,6 +13,7 @@ import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotNull;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 对象数据
@@ -29,10 +30,6 @@ public class ObjectDigital extends AuditableEntity {
     /** 扩展属性列 */
     public static final String OBJ_TYPE = "obj_type";
 
-    /** 实体类必须有的属性 */
-    @TableId(value = "id",type = IdType.ASSIGN_ID)
-    private String id;
-
     /** 项目ID */
     private String projectId;
     /** 名称 */
@@ -67,4 +64,10 @@ public class ObjectDigital extends AuditableEntity {
     /** 符合查询条件的数据总条数 */
     @TableField(exist = false)
     private Integer totalCount;
+    /** 来源的对象id集合 */
+    @TableField(exist = false)
+    private Set<String> objFromIds;
+    /** 去向的对象id集合 */
+    @TableField(exist = false)
+    private Set<String> objToIds;
 }