Pārlūkot izejas kodu

实现接口queryObjectListByGraphCodeAndRelCode

lijie 3 gadi atpakaļ
vecāks
revīzija
d962f6f1aa

+ 22 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java

@@ -33,6 +33,7 @@ import com.persagy.dmp.rwd.basic.constant.DigitalRelCode;
 import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
 import com.persagy.dmp.rwd.digital.service.ProjectBusinessService;
 import com.persagy.dmp.rwd.digital.utils.ObjectDigitalCriteriaHelper;
+import lombok.SneakyThrows;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -42,6 +43,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -360,6 +362,26 @@ public class ObjectDigitalController{
         requestData.setGroupCode(AppContext.getContext().getGroupCode());
         return service.querySpaceListByRoomFuncType(requestData);
     }
+    /***
+     * Description: 根据图类型编码及关系类型编码查询对象及其关联对象
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/8/30 9:41
+     * Update By lijie 2021/8/30 9:41
+     */
+    @PostMapping("/queryObjectListByGraphCodeAndRelCode")
+    public CommonResult<List<ObjectDigital>> queryObjectListByGraphCodeAndRelCode(@RequestBody RequestData requestData) {
+        //基础参数校验
+        if (StrUtil.isBlank(requestData.getGraphCode())
+                || StrUtil.isBlank(requestData.getRelCode())){
+            throw new BusinessException(ResponseCode.A0402.getCode(),ResponseCode.A0402.getDesc());
+        }
+        ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE);
+        requestData.setProjectId(AppContext.getContext().getProjectId());
+        requestData.setGroupCode(AppContext.getContext().getGroupCode());
+        return service.queryObjectListByGraphCodeAndRelCode(requestData);
+    }
 
 
     /**

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

@@ -69,4 +69,13 @@ public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
      * Update By lijie 2021/9/2 21:43
      */
     List<ObjectDigital> queryObjectListByIdOrNameOrCadId(@Param("param") RequestData requestData);
+    /***
+     * Description: 根据图类型编码及关系类型编码查询对象及其关联对象
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/8/30 9:41
+     * Update By lijie 2021/8/30 9:41
+     */
+    List<List<ObjectDigital>> queryObjectListByGraphCodeAndRelCode(@Param("param") RequestData requestData);
 }

+ 10 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectDigitalService.java

@@ -6,6 +6,7 @@ import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.digital.entity.ObjectDigital;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -127,4 +128,13 @@ public interface IObjectDigitalService {
      * Update By lijie 2021/8/30 9:41
      */
     CommonResult<List<ObjectDigital>> querySpaceListByRoomFuncType(RequestData requestData);
+    /***
+     * Description: 根据图类型编码及关系类型编码查询对象及其关联对象
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/8/30 9:41
+     * Update By lijie 2021/8/30 9:41
+     */
+    CommonResult<List<ObjectDigital>> queryObjectListByGraphCodeAndRelCode(RequestData requestData);
 }

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

@@ -42,6 +42,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -187,7 +188,7 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
      * Update By lijie 2021/8/24 16:37
      */
     @Override
-    public CommonResult<List<ObjectDigital>> queryObjectListSuperiorId(RequestData requestData) {
+    public CommonResult<List<ObjectDigital>> queryObjectListSuperiorId(RequestData requestData){
         // 1.计算分页参数
         Long page = requestData.getPage();
         Long size = requestData.getSize();
@@ -210,7 +211,7 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
         // 3.1 获取关系code列表
         fillSubordinateRelCode(requestData);
         // 3.2 调用查询语句查询相关内容
-        return analysisQueryResultList(objectDigitalMapper.queryObjectListBySuperiorId(requestData),requestData,false);
+        return analysisQueryResultList(objectDigitalMapper.queryObjectListBySuperiorId(requestData),requestData,false,true);
     }
     /***
      * Description: 查询指定楼层下所有指定空间类型的空间
@@ -329,6 +330,22 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
     }
 
     /***
+     * Description: 根据图类型编码及关系类型编码查询对象及其关联对象
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/8/30 9:41
+     * Update By lijie 2021/8/30 9:41
+     */
+    @Override
+    public CommonResult<List<ObjectDigital>> queryObjectListByGraphCodeAndRelCode(RequestData requestData) {
+        // 1.计算分页参数
+        computePageParam(requestData);
+        List<List<ObjectDigital>> objList = objectDigitalMapper.queryObjectListByGraphCodeAndRelCode(requestData);
+        return analysisQueryResultList(objList,requestData,false,false);
+    }
+
+    /***
      * Description: 通用处理分页数据方法
      * @param dataResult : 分页数据
      * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
@@ -415,7 +432,7 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
         // 1.查询结果集
         List<List<ObjectDigital>> resultList =
                 objectDigitalMapper.queryObjectDigitalsByProjectId(requestData,requestData.getSkip(),requestData.getSize());
-        return analysisQueryResultList(resultList,requestData,true);
+        return analysisQueryResultList(resultList,requestData,true,true);
     }
     /***
      * Description: 解析结果集
@@ -428,7 +445,8 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
      */
     private CommonResult<List<ObjectDigital>> analysisQueryResultList(List<List<ObjectDigital>> resultList,
                                                                       RequestData requestData,
-                                                                      Boolean fillRelFlag) {
+                                                                      Boolean fillRelFlag,
+                                                                      Boolean fillSpaceFlag) {
         if (CollUtil.isEmpty(resultList)){
             return ResultHelper.multi(new ArrayList<>(),0);
         }
@@ -445,10 +463,19 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
         // 2.过滤信息点
         retainObjInfos(pageResult,requestData.getReturnInfos());
         // 3.处理Fl2Sp的关系,将对应的空间对象的楼层id扔进去
-        fillFloorIdIntoSpaceObjFromIds(pageResult);
+        fillFloorIdIntoSpaceObjFromIds(pageResult,fillSpaceFlag);
         return ResultHelper.multi(pageResult,totalCount.get(0).getTotalCount());
     }
 
+    /***
+     * Description: 当只有项目时需要填充关系id
+     * @param pageResult : 查询的结果集
+     * @param fillRelFlag : 0-不注入关系数据,1-注入关系数据
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/4 22:39
+     * Update By lijie 2021/9/4 22:39
+     */
     private void fillRelIds(List<ObjectDigital> pageResult,
                             Boolean fillRelFlag) {
         if (null==fillRelFlag || !fillRelFlag){
@@ -495,7 +522,10 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
      * @date :2021/8/26 12:00
      * Update By lijie 2021/8/26 12:00
      */
-    private void fillFloorIdIntoSpaceObjFromIds(List<ObjectDigital> objectDigitals) {
+    private void fillFloorIdIntoSpaceObjFromIds(List<ObjectDigital> objectDigitals,Boolean fillSpaceFlag) {
+        if (null==fillSpaceFlag || !fillSpaceFlag){
+            return;
+        }
         // 1.获得空间id
         Set<String> spaceIds = objectDigitals.stream()
                 .filter(objectDigital -> DigitalObjectType.SPACE.getIndex().equals(objectDigital.getObjType()))

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

@@ -172,6 +172,7 @@ public class RelationCaclServiceImpl implements RelationCaclService {
      * Update By lijie 2021/9/2 20:20
      */
     @Override
+    @Transactional
     public CommonResult<List<ObjectRelation>> deleteObjRelationsByRelId(ObjectRelation objectRelation) {
         // 1.先查询关系
         LambdaQueryWrapper<ObjectRelation> queryWrapper = new LambdaQueryWrapper<>();

+ 4 - 1
dmp-business/dmp-rwd/src/main/resources/bootstrap.yml

@@ -35,4 +35,7 @@ config:
 #      min-request-size: 2048
 #    response:
 #      # 开启响应压缩
-#      enabled: true
+#      enabled: true
+#扫描Entity, 加入此设置方可在Mybatis的XML文件中使用实体类的Alias
+mybatis-plus:
+  type-handlers-package: com.persagy.dmp.basic.config

+ 88 - 0
dmp-business/dmp-rwd/src/main/resources/mapper/ObjectDigitalMapper.xml

@@ -26,6 +26,8 @@
             <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"/>
+            <result property="relObjs" column="relObjs" jdbcType="VARCHAR"  typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
+            <!--<result property="relObjs" column="relObjs" jdbcType="VARCHAR"  typeHandler="com.persagy.dmp.basic.typehandler.RelObjsHandler"/>-->
     </resultMap>
     <resultMap id="count" type="com.persagy.dmp.digital.entity.ObjectDigital">
         <result property="totalCount" column="totalCount" jdbcType="INTEGER"/>
@@ -381,6 +383,92 @@
         </if>
         AND dobj.valid=TRUE
     </select>
+    <select id="queryObjectListByGraphCodeAndRelCode" resultMap="BaseResultMap,count">
+        SELECT DISTINCT SQL_CALC_FOUND_ROWS
+            dtoA.*,
+        IF
+            (
+                CONCAT( JSON_EXTRACT( JSON_EXTRACT( JSON_ARRAYAGG( JSON_OBJECT( 'id', dtoB.id ) ), '$[0]' ), '$.id' ), '' ) = 'null',
+                JSON_ARRAY( ),
+                JSON_ARRAYAGG(
+                    JSON_OBJECT(
+                        'id',
+                        dtoB.id,
+                        'name',
+                        IFNULL( dtoB.`name`, ''),
+                        'localId',
+                        IFNULL( dtoB.local_id, ''),
+                        'localName',
+                        IFNULL( dtoB.local_name, ''),
+                        'infos',
+                        IFNULL( dtoB.infos, JSON_OBJECT()),
+                        'groupCode',
+                        IFNULL( dtoB.group_code, ''),
+                        'projectId',
+                        IFNULL( dtoB.project_id, ''),
+                        'objType',
+                        IFNULL( dtoB.obj_type, ''),
+                        'classCode',
+                        IFNULL( dtoB.class_code, ''),
+                        'grouping',
+                        IFNULL( dtoB.grouping, ''),
+                        'valid',
+                        IFNULL( dtoB.valid, 1 )
+                    )
+                )
+            ) AS relObjs
+        FROM
+            (
+            SELECT
+                dto.*,
+                JSON_ARRAYAGG( dtr.obj_to ) AS objToIds
+            FROM
+                dt_object dto
+                INNER JOIN dt_relation dtr ON dto.id = dtr.obj_from
+            WHERE 1=1
+            <if test="null!=param.relCode and param.relCode.length>0">
+                AND dtr.rel_code = #{param.relCode}
+            </if>
+            <if test="null!=param.graphCode and param.graphCode.length>0">
+                AND dtr.graph_code = #{param.graphCode}
+            </if>
+            <if test="null!=param.projectId and param.projectId.length>0">
+                AND dto.project_id = #{param.projectId}
+            </if>
+            <if test="null!=param.groupCode and param.groupCode.length>0">
+                AND dto.group_code = #{param.groupCode}
+            </if>
+            <if test="null!=param.mainContent and param.mainContent.length>0">
+                AND (
+                    dto.id = #{param.mainContent}
+                    OR dto.`name` LIKE CONCAT( '%', #{param.mainContent}, '%' )
+                    OR dto.local_name LIKE CONCAT( '%', #{param.mainContent}, '%' )
+                    OR dto.local_id LIKE CONCAT( '%', #{param.mainContent}, '%' )
+                    OR JSON_EXTRACT( dto.infos, '$.cADID' ) LIKE CONCAT( '%', #{param.mainContent}, '%' )
+                )
+            </if>
+            GROUP BY
+                dto.id
+            ) AS dtoA
+            LEFT JOIN dt_object AS dtoB ON (
+                JSON_SEARCH( dtoA.objToIds, 'one', dtoB.id ) > 0
+                <if test="null!=param.fromContent and param.fromContent.size()>0">
+                    <foreach collection="param.fromContent" item="keyword" open="AND (" close=")" separator=" OR ">
+                        dtoB.id = #{keyword}
+                        OR dtoB.`name` LIKE CONCAT( '%', #{keyword}, '%' )
+                        OR dtoB.local_name LIKE CONCAT( '%', #{keyword}, '%' )
+                        OR dtoB.local_id LIKE CONCAT( '%', #{keyword}, '%' )
+                    </foreach>
+                </if>
+            )
+        GROUP BY
+            dtoA.id
+        <include refid="pageSet">
+            <property name="param" value="#{param}"/>
+        </include>
+        ;
+        SELECT FOUND_ROWS() AS totalCount;
+    </select>
 
 
 </mapper>

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

@@ -229,6 +229,11 @@ public class RequestData {
     @JsonProperty("graphCode")
     @JSONField(name = "graphCode",alternateNames = {"graphCode","graph_code"})
     private String graphCode;
+    /** 关系值 */
+    @JsonAlias({"relValue","rel_value"})
+    @JsonProperty("relValue")
+    @JSONField(name = "relValue",alternateNames = {"relValue","rel_value"})
+    private String relValue;
     /** 主对象分类 */
     @JsonAlias({"masterObjType","master_obj_type"})
     @JsonProperty("masterObjType")
@@ -292,5 +297,4 @@ public class RequestData {
     @JsonProperty("checkSensorCodes")
     @JSONField(name = "checkSensorCodes",alternateNames = {"checkSensorCodes","check_sensor_codes"})
     private Set<String> checkSensorCodes;
-
 }

+ 16 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalObjectClient.java

@@ -179,4 +179,20 @@ public interface DigitalObjectClient {
                               @RequestParam("appId") String appId,
                               @RequestParam("userId") String userId,
                               @RequestBody RequestData requestData);
+    /**
+     * 根据上级id查询下级关联对象
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param requestData: 请求参数
+     * @return void
+     */
+    @PostMapping("queryObjectListByGraphCodeAndRelCode")
+    CommonResult<List<ObjectDigital>> queryObjectListByGraphCodeAndRelCode(
+                              @RequestParam("groupCode") String groupCode,
+                              @RequestParam("projectId") String projectId,
+                              @RequestParam("appId") String appId,
+                              @RequestParam("userId") String userId,
+                              @RequestBody RequestData requestData);
 }

+ 18 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalObjectFacade.java

@@ -162,4 +162,22 @@ public class DigitalObjectFacade {
         CommonResult<List<ObjectDigital>> commonResult = client.queryObjectListSuperiorId(groupCode, projectId, appId, userId, requestData);
         return commonResult.getData();
     }
+    /**
+     * 根据图类型编码及关系类型编码查询对象及其关联对象
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param requestData: 请求参数
+     * @return void
+     */
+    public static List<ObjectDigital> queryObjectListByGraphCodeAndRelCode(String groupCode,
+                                                                           String projectId,
+                                                                           String appId,
+                                                                           String userId,
+                                                                           RequestData requestData) {
+        CommonResult<List<ObjectDigital>> commonResult = client.queryObjectListByGraphCodeAndRelCode(groupCode,
+                projectId, appId, userId, requestData);
+        return commonResult.getData();
+    }
 }

+ 15 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationCaclClient.java

@@ -37,4 +37,19 @@ public interface DigitalRelationCaclClient {
                                                                             @RequestParam("appId") String appId,
                                                                             @RequestParam("userId") String userId,
                                                                             @RequestBody RequestData requestData);
+    /**
+     * 根据项目ID查询设备数量和待报废设备数量统计
+     * @param groupCode: 集团编码
+     * @param projectId: 项目id
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param objectRelation: 请求参数
+     * @return
+     */
+    @PostMapping("deleteObjRelationsByRelId")
+    CommonResult<List<ObjectRelation>> deleteObjRelationsByRelId(@RequestParam("groupCode") String groupCode,
+                                                                 @RequestParam("projectId") String projectId,
+                                                                 @RequestParam("appId") String appId,
+                                                                 @RequestParam("userId") String userId,
+                                                                 @RequestBody ObjectRelation objectRelation);
 }

+ 18 - 1
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalRelationCaclFacade.java

@@ -23,7 +23,7 @@ public class DigitalRelationCaclFacade {
     private static DigitalRelationCaclClient client = SpringUtil.getBean(DigitalRelationCaclClient.class);
 
     /**
-     * 根据项目ID查询设备数量和待报废设备数量统计
+     * 根据id,localId,name,localName,CADID及关系类型信息,对象分类信息创建关系
      * @param groupCode: 集团编码
      * @param projectId: 项目id
      * @param appId: 应用ID
@@ -39,4 +39,21 @@ public class DigitalRelationCaclFacade {
                 client.createObjRelationsByKeywordAndObjType(groupCode, projectId, appId, userId, requestData);
         return relations.getData();
     }
+    /**
+     * 根据fromId,toId,relType,graphCode删除关系
+     * @param groupCode: 集团编码
+     * @param projectId: 项目id
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param objectRelation: 请求参数
+     * @return
+     */
+    @PostMapping("deleteObjRelationsByRelId")
+    public List<ObjectRelation> deleteObjRelationsByRelId(String groupCode, String projectId,
+                                                          String appId, String userId,
+                                                          ObjectRelation objectRelation){
+        CommonResult<List<ObjectRelation>> relations =
+                client.deleteObjRelationsByRelId(groupCode, projectId, appId, userId, objectRelation);
+        return relations.getData();
+    }
 }

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

@@ -1,14 +1,14 @@
 package com.persagy.dmp.digital.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotNull;
@@ -23,6 +23,8 @@ import java.util.Set;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @TableName(value = "dt_object",autoResultMap = true)
+@NoArgsConstructor
+@AllArgsConstructor
 public class ObjectDigital extends AuditableEntity {
 
     /** 扩展属性列 */
@@ -90,4 +92,7 @@ public class ObjectDigital extends AuditableEntity {
     /** CADID */
     @TableField(exist = false)
     private String cadId;
+    /** 关联的对象列表 */
+    @TableField(exist = false,typeHandler = JacksonTypeHandler.class)
+    private List<ObjectDigital> relObjs;
 }