Procházet zdrojové kódy

实现接口queryObjectListSuperiorId逻辑

lijie před 3 roky
rodič
revize
b87c0d8c54

+ 11 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/dto/RequestData.java

@@ -102,10 +102,20 @@ public class RequestData {
     @JsonProperty("skip")
     @JSONField(name = "skip",alternateNames = {"skip"})
     private Long skip;
-    /** 跳跃条数 */
+    /** 关系code数组 */
     @JsonAlias({"relCodes","rel_codes"})
     @JsonProperty("relCodes")
     @JSONField(name = "relCodes",alternateNames = {"relCodes","rel_codes"})
     private Set<String> relCodes;
+    /** 查询部件标记,true-查询,false-不查询 */
+    @JsonAlias({"queryEcFlag","query_ec_flag"})
+    @JsonProperty("queryEcFlag")
+    @JSONField(name = "queryEcFlag",alternateNames = {"queryEcFlag","query_ec_flag"})
+    private Boolean queryEcFlag=false;
+    /** 部件关系码 */
+    @JsonAlias({"ecRelCodes","ec_rel_codes"})
+    @JsonProperty("ecRelCodes")
+    @JSONField(name = "ecRelCodes",alternateNames = {"ecRelCodes","ec_rel_codes"})
+    private Set<String> ecRelCodes;
 
 }

+ 3 - 3
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/dto/TimeScope.java

@@ -17,8 +17,8 @@ public class TimeScope {
     @JsonProperty("startEq")
     @JSONField(name = "startEq",alternateNames = {"$gte","startEq"})
     private String startEq;
-    @JsonAlias({"$lte","createTimeScope"})
-    @JsonProperty("createTimeScope")
-    @JSONField(name = "createTimeScope",alternateNames = {"$lte","createTimeScope"})
+    @JsonAlias({"$lte","endEq"})
+    @JsonProperty("endEq")
+    @JSONField(name = "endEq",alternateNames = {"$lte","endEq"})
     private String endEq;
 }

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

@@ -24,4 +24,13 @@ public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
      * Update By lijie 2021/8/24 16:40
      */
     List<List<ObjectDigital>> queryObjectDigitalsByProjectId(@Param("param") RequestData requestData,@Param("skip") Long skip,@Param("size") Long size);
+    /***
+     * Description: 根据上级id查询对象列表
+     * @param requestData : 请求参数
+     * @return : java.util.List<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/8/25 9:49
+     * Update By lijie 2021/8/25 9:49
+     */
+    List<List<ObjectDigital>> queryObjectListBySuperiorId(@Param("param") RequestData requestData);
 }

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

@@ -192,13 +192,11 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
                 && StrUtil.isBlank(requestData.getEquipmentId())){
             return queryObjectListByProjectId(requestData);
         }
-        // 3.存在建筑id/楼层id/设备id,获取关系code列表
-        querySubordinateRelCode(requestData);
-
-
-
-
-        return null;
+        // 3.存在建筑id/楼层id/设备id
+        // 3.1 获取关系code列表
+        fillSubordinateRelCode(requestData);
+        // 3.2 调用查询语句查询相关内容
+        return analysisQueryResultList(objectDigitalMapper.queryObjectListBySuperiorId(requestData),requestData);
     }
     /***
      * Description: 根据对象id获取下级关系code数组
@@ -208,24 +206,30 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
      * @date :2021/8/24 21:20
      * Update By lijie 2021/8/24 21:20
      */
-    private void querySubordinateRelCode(RequestData requestData) {
+    private void fillSubordinateRelCode(RequestData requestData) {
         if (StrUtil.isNotBlank(requestData.getEquipmentId())){
             // 设备下的部件
             requestData.setRelCodes(CollUtil.newHashSet(DigitalRelCode.EQ_2_EC.getIndex()));
             return;
         }
         if (StrUtil.isNotBlank(requestData.getFloorId())){
-            // 楼层下的部件
+            // 楼层下的空间,设备,系统
             requestData.setRelCodes(CollUtil.newHashSet(DigitalRelCode.FL_2_SP.getIndex(),
-                    DigitalRelCode.EQ_2_FL.getIndex(),DigitalRelCode.SY_2_FL.getIndex(),
-                    DigitalRelCode.EQ_2_EC.getIndex()));
+                    DigitalRelCode.EQ_2_FL.getIndex(),DigitalRelCode.SY_2_FL.getIndex()));
+            // 设置设备查询部件
+            requestData.setQueryEcFlag(true);
+            requestData.setEcRelCodes(CollUtil.newHashSet(DigitalRelCode.EQ_2_EC.getIndex()));
             return;
         }
-
-
-
-
-
+        if (StrUtil.isNotBlank(requestData.getBuildingId())){
+            // 建筑下的楼层,空间,设备,系统
+            requestData.setRelCodes(CollUtil.newHashSet(DigitalRelCode.BD_2_FL.getIndex(),
+                    DigitalRelCode.BD_2_SP.getIndex(),DigitalRelCode.SY_2_BD.getIndex(),
+                    DigitalRelCode.EQ_2_BD.getIndex()));
+            // 设置设备查询部件
+            requestData.setQueryEcFlag(true);
+            requestData.setEcRelCodes(CollUtil.newHashSet(DigitalRelCode.EQ_2_EC.getIndex()));
+        }
     }
 
     /***
@@ -240,6 +244,19 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
         // 1.查询结果集
         List<List<ObjectDigital>> resultList =
                 objectDigitalMapper.queryObjectDigitalsByProjectId(requestData,requestData.getSkip(),requestData.getSize());
+        return analysisQueryResultList(resultList,requestData);
+
+    }
+    /***
+     * Description: 解析结果集
+     * @param resultList : 结果集
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/8/25 13:16
+     * Update By lijie 2021/8/25 13:16
+     */
+    private CommonResult<List<ObjectDigital>> analysisQueryResultList(List<List<ObjectDigital>> resultList,RequestData requestData) {
         if (CollUtil.isEmpty(resultList)){
             return ResultHelper.multi(new ArrayList<>(),0);
         }
@@ -252,18 +269,31 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
             // 只返回数
             return ResultHelper.multi(new ArrayList<>(),totalCount.get(0).getTotalCount());
         }
-        if (CollUtil.isEmpty(requestData.getReturnInfos())){
-            return ResultHelper.multi(pageResult,totalCount.get(0).getTotalCount());
-        }
         // 2.过滤信息点
-        for (ObjectDigital objectDigital : pageResult) {
+        retainObjInfos(pageResult,requestData.getReturnInfos());
+        return ResultHelper.multi(pageResult,totalCount.get(0).getTotalCount());
+    }
+
+    /***
+     * Description: 过滤掉不需要的信息点
+     * @param objectDigitals : 查询结果集
+     * @param returnInfos : 返回的信息点key
+     * @return : void
+     * @author : lijie
+     * @date :2021/8/25 13:13
+     * Update By lijie 2021/8/25 13:13
+     */
+    private void retainObjInfos(List<ObjectDigital> objectDigitals, Set<String> returnInfos) {
+        if (CollUtil.isEmpty(returnInfos) || CollUtil.isEmpty(objectDigitals)){
+            return;
+        }
+        for (ObjectDigital objectDigital : objectDigitals) {
             ObjectNode infos = objectDigital.getInfos();
             if (null==infos || infos.size()<=0){
                 continue;
             }
-            infos.retain(requestData.getReturnInfos());
+            infos.retain(returnInfos);
         }
-        return ResultHelper.multi(pageResult,totalCount.get(0).getTotalCount());
     }
 
     /**

+ 3 - 1
dmp-business/dmp-rwd/src/main/resources/db/init/schema.sql

@@ -148,5 +148,7 @@ CREATE TABLE IF NOT EXISTS `dt_relation` (
   KEY `idx_1` (`graph_code`,`rel_code`,`obj_from`,`obj_to`,`project_id`) USING BTREE,
   KEY `idx_2` (`graph_id`,`rel_code`,`obj_from`,`obj_to`,`project_id`) USING BTREE,
   KEY `idx_3` (`graph_code`,`rel_code`,`obj_to`,`project_id`) USING BTREE,
-  KEY `idx_4` (`graph_id`,`rel_code`,`obj_to`,`project_id`) USING BTREE
+  KEY `idx_4` (`graph_id`,`rel_code`,`obj_to`,`project_id`) USING BTREE,
+  KEY "idx_5" ("obj_from") USING BTREE,
+  KEY "idx_6" ("obj_to") USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='关系实例表';

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

@@ -38,11 +38,8 @@
         modifier,modified_time,valid,
         ts
     </sql>
-    <select id="queryObjectDigitalsByProjectId" resultMap="BaseResultMap,count">
-        SELECT DISTINCT SQL_CALC_FOUND_ROWS
-            *
-        FROM dt_object dto
-        WHERE 1=1
+
+    <sql id="commonJoinQueryParam">
         <if test="param.projectId!=null and param.projectId.length>0">
             AND dto.project_id=#{param.projectId}
         </if>
@@ -69,17 +66,103 @@
                 AND dto.valid = TRUE
             </otherwise>
         </choose>
-        <if test="param.createTimeScope!=null">
-            <if test="param.createTimeScope.startEq!=null and param.createTimeScope.startEq.length>0">
-                AND dto.creation_time&gt;=#{param.createTimeScope.startEq}
-            </if>
-            <if test="param.createTimeScope.endEq!=null and param.createTimeScope.endEq.length>0">
-                AND dto.creation_time&lt;=#{param.createTimeScope.endEq}
+        <choose>
+            <when test="param.createTimeScope!=null">
+                <if test="param.createTimeScope.startEq!=null and param.createTimeScope.startEq.length>0">
+                    AND dto.creation_time&gt;=#{param.createTimeScope.startEq}
+                </if>
+                <if test="param.createTimeScope.endEq!=null and param.createTimeScope.endEq.length>0">
+                    AND dto.creation_time&lt;=#{param.createTimeScope.endEq}
+                </if>
+            </when>
+        </choose>
+    </sql>
+    <sql id="queryObjByRel">
+        (
+        <include refid="commonQueryObjByRel">
+            <property name="param" value="#{param}"/>
+        </include>
+        )
+        <include refid="queryObjDataUnionEcData">
+            <property name="param" value="#{param}"/>
+        </include>
+    </sql>
+    <sql id="commonQueryObjByRel">
+        <include refid="commonQueryObjByRelSub">
+            <property name="param" value="#{param}"/>
+        </include>
+        <if test="param.relCodes!=null and param.relCodes.size()>0">
+            <foreach collection="param.relCodes" open="AND dtr.rel_code IN (" close=")" separator="," item="relCode">
+                #{relCode}
+            </foreach>
+        </if>
+    </sql>
+    <sql id="commonQueryObjByRelSub">
+        SELECT DISTINCT
+        dto.*
+        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
+        <include refid="commonJoinQueryParam">
+            <property name="param" value="#{param}"/>
+        </include>
+    </sql>
+    <sql id="queryObjDataUnionEcData">
+        <if test="param.queryEcFlag!=null and param.queryEcFlag='true'">
+            UNION
+            (<include refid="commonQueryObjByRelSub">
+                <property name="param" value="#{param}"/>
+            </include>
+            <if test="param.ecRelCodes!=null and param.ecRelCodes.size()>0">
+                <foreach collection="param.ecRelCodes" open="AND dtr.rel_code IN (" close=")" separator="," item="relCode">
+                    #{relCode}
+                </foreach>
             </if>
+            AND dtr.obj_from IN(
+                SELECT DISTINCT
+                dto.id
+                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
+                <include refid="commonJoinQueryParam">
+                    <property name="param" value="#{param}"/>
+                </include>
+                AND dto.obj_type='equipment'
+            ))
         </if>
-        <if test="skip!=null and skip!=null and size!=0">
-            limit #{skip},#{size}
+    </sql>
+    <sql id="pageSet">
+        <if test="param.skip!=null and param.skip!=null and param.size!=0">
+            limit #{param.skip},#{param.size}
         </if>
+    </sql>
+
+    <select id="queryObjectDigitalsByProjectId" resultMap="BaseResultMap,count">
+        SELECT DISTINCT SQL_CALC_FOUND_ROWS
+            *
+        FROM dt_object dto
+        WHERE 1=1
+         <include refid="commonJoinQueryParam">
+             <property name="param" value="#{param}"/>
+         </include>
+        <include refid="pageSet">
+            <property name="param" value="#{param}"/>
+        </include>
+        ;
+        SELECT FOUND_ROWS()	AS totalCount;
+    </select>
+    <select id="queryObjectListBySuperiorId" resultMap="BaseResultMap,count">
+        SELECT DISTINCT SQL_CALC_FOUND_ROWS
+        dto.*
+        FROM
+        (
+        <include refid="queryObjByRel">
+            <property name="param" value="#{param}"/>
+        </include>
+        ) AS dto
+        <include refid="pageSet">
+            <property name="param" value="#{param}"/>
+        </include>
         ;
         SELECT FOUND_ROWS()	AS totalCount;
     </select>