Browse Source

实现统计数量接口queryObjectCountByObjInfos

lijie 3 years ago
parent
commit
fd02a7964b

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/utils/ObjectDigitalCriteriaHelper.java

@@ -27,7 +27,7 @@ import java.util.*;
 public class ObjectDigitalCriteriaHelper {
 
     /** 对象类字段集 */
-    private static final Set<String> DIGITAL_FIELDS = ReflectUtil.getFieldMap(ObjectDigital.class).keySet();
+    public static final Set<String> DIGITAL_FIELDS = ReflectUtil.getFieldMap(ObjectDigital.class).keySet();
 
     /**
      * 对象查询条件预处理:主要处理infos扩展内容

+ 20 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/controller/EquipmentReportController.java

@@ -1,6 +1,10 @@
 package com.persagy.dmp.rwd.simple.controller;
 
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.common.constant.CommonConstant;
+import com.persagy.dmp.common.constant.ResponseCode;
+import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ParamCheckUtil;
 import com.persagy.dmp.common.utils.ResultHelper;
@@ -61,4 +65,20 @@ public class EquipmentReportController {
         List<CountTypeEquipmentVO> result = reportService.queryEquipmentCountByType(projectIds);
         return ResultHelper.multi(result);
     }
+    /**
+     * 根据对象信息点统计数量
+     * @param requestData:请求参数
+     * @return
+     */
+    @PostMapping("/queryObjectCountByObjInfos")
+    public CommonResult<List<Map<String, Object>>> queryObjectCountByObjInfos(@RequestBody RequestData requestData) {
+        //基础参数校验
+        ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE);
+        if (CollUtil.isEmpty(requestData.getGroups())){
+            throw new BusinessException(ResponseCode.A0402.getCode(),ResponseCode.A0402.getDesc());
+        }
+        // 统计
+        List<Map<String, Object>> result = reportService.queryObjectCountByObjInfos(requestData);
+        return ResultHelper.multi(result);
+    }
 }

+ 11 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/dao/EquipmentReportMapper.java

@@ -1,5 +1,7 @@
 package com.persagy.dmp.rwd.simple.dao;
 
+import com.persagy.dmp.basic.dto.RequestData;
+import com.persagy.dmp.rwd.simple.dto.GroupDTO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -26,4 +28,13 @@ public interface EquipmentReportMapper {
      * @return
      */
     List<Map<String, Object>> queryEquipmentCountByType(@Param("projectIds") List<String> projectIds);
+    /***
+     * Description: 根据对象信息点统计数量
+     * @param requestData :
+     * @return : java.util.List<com.fasterxml.jackson.databind.node.ObjectNode>
+     * @author : lijie
+     * @date :2021/9/13 21:50
+     * Update By lijie 2021/9/13 21:50
+     */
+    List<Map<String, Object>> queryObjectCountByObjInfos(@Param("param") RequestData requestData,@Param("groups") List<GroupDTO> groupDTOS);
 }

+ 12 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/dto/GroupDTO.java

@@ -0,0 +1,12 @@
+package com.persagy.dmp.rwd.simple.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class GroupDTO {
+    private String column;
+    private String field;
+    private Boolean fieldFlag=false;
+}

+ 11 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/service/IEquipmentReportService.java

@@ -1,5 +1,7 @@
 package com.persagy.dmp.rwd.simple.service;
 
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.rwd.simple.entity.CountTypeEquipmentVO;
 
 import java.util.List;
@@ -26,4 +28,13 @@ public interface IEquipmentReportService {
      * @return
      */
     List<CountTypeEquipmentVO> queryEquipmentCountByType(List<String> projectIds);
+    /***
+     * Description: 根据对象信息点统计数量
+     * @param requestData : 
+     * @return : java.util.List<com.fasterxml.jackson.databind.node.ObjectNode>  
+     * @author : lijie
+     * @date :2021/9/13 21:50
+     * Update By lijie 2021/9/13 21:50
+     */
+    List<Map<String, Object>> queryObjectCountByObjInfos(RequestData requestData);
 }

+ 30 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/simple/service/impl/EquipmentReportServiceImpl.java

@@ -3,11 +3,17 @@ package com.persagy.dmp.rwd.simple.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.common.utils.DateHelper;
+import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.rwd.basic.constant.DigitalObjectType;
+import com.persagy.dmp.rwd.digital.utils.ObjectDigitalCriteriaHelper;
 import com.persagy.dmp.rwd.simple.dao.EquipmentReportMapper;
+import com.persagy.dmp.rwd.simple.dto.GroupDTO;
 import com.persagy.dmp.rwd.simple.entity.CountTypeEquipmentVO;
 import com.persagy.dmp.rwd.simple.service.IEquipmentReportService;
 import lombok.extern.slf4j.Slf4j;
@@ -52,6 +58,30 @@ public class EquipmentReportServiceImpl implements IEquipmentReportService {
         List<Map<String, Object>> rsList = mapper.queryEquipmentCountByType(projectIds);
         return mergeCountResult(rsList, majorMap, systemMap);
     }
+    /***
+     * Description: 根据对象信息点统计数量
+     * @param requestData :
+     * @return : java.util.List<com.fasterxml.jackson.databind.node.ObjectNode>
+     * @author : lijie
+     * @date :2021/9/13 21:50
+     * Update By lijie 2021/9/13 21:50
+     */
+    @Override
+    public List<Map<String, Object>> queryObjectCountByObjInfos(RequestData requestData) {
+        requestData.setGroupCode(AppContext.getContext().getGroupCode());
+        requestData.setProjectId(AppContext.getContext().getProjectId());
+        Set<String> digitalFields = ObjectDigitalCriteriaHelper.DIGITAL_FIELDS;
+        List<String> groups = requestData.getGroups();
+        List<GroupDTO> groupDTOS = new ArrayList<>();
+        for (String group : groups) {
+            if (digitalFields.contains(group)){
+                groupDTOS.add(GroupDTO.builder().field(group).column(StrUtil.toUnderlineCase(group)).fieldFlag(true).build());
+                continue;
+            }
+            groupDTOS.add(GroupDTO.builder().field(group).column(group).fieldFlag(false).build());
+        }
+        return mapper.queryObjectCountByObjInfos(requestData,groupDTOS);
+    }
 
     /**
      * 累加统计结果,合并为专业-系统-设备类 层级结构

+ 48 - 0
dmp-business/dmp-rwd/src/main/resources/mapper/EquipmentReportMapper.xml

@@ -41,4 +41,52 @@
         group by dt_define_type.major_code, dt_define_type.system_code,
           dt_define_type.code, dt_define_type.name;
     </select>
+    <select id="queryObjectCountByObjInfos" resultType="java.util.Map">
+        SELECT
+            <foreach collection="groups" item="group" separator=",">
+                <if test="null!=group.fieldFlag and group.fieldFlag">
+                    ${group.column} AS #{group.field}
+                </if>
+                <if test="null!=group.fieldFlag and !group.fieldFlag">
+                    JSON_UNQUOTE(JSON_EXTRACT(infos, CONCAT('$.',#{group.column}))) AS #{group.field}
+                </if>
+            </foreach>,
+            COUNT(id) AS count
+        FROM dt_object
+        WHERE valid=TRUE
+        <if test="null!=param.objTypes and param.objTypes.size()>0">
+            <foreach collection="param.objTypes" item="objType" open="AND obj_type IN(" close=")" separator=",">
+                #{objType}
+            </foreach>
+        </if>
+        <if test="null!=param.classCodes and param.classCodes.size()>0">
+            <foreach collection="param.classCodes" item="classCode" open="AND class_code IN(" close=")" separator=",">
+                #{classCode}
+            </foreach>
+        </if>
+        <if test="null!=param.projectId and param.projectId.length>0">
+            AND project_id=#{param.projectId}
+        </if>
+        <if test="null!=param.groupCode and param.groupCode.length>0">
+            AND group_code=#{param.groupCode}
+        </if>
+        <foreach collection="groups" item="group">
+            <if test="null!=group.fieldFlag and group.fieldFlag">
+                AND ${group.column} IS NOT NULL
+            </if>
+            <if test="null!=group.fieldFlag and !group.fieldFlag">
+                AND JSON_UNQUOTE(JSON_EXTRACT(infos, CONCAT('$.',#{group.column}))) IS NOT NULL
+            </if>
+        </foreach>
+        GROUP BY
+        <foreach collection="groups" item="group" separator=",">
+            <if test="null!=group.fieldFlag and group.fieldFlag">
+                ${group.column}
+            </if>
+            <if test="null!=group.fieldFlag and !group.fieldFlag">
+                JSON_UNQUOTE(JSON_EXTRACT(infos, CONCAT('$.',#{group.column})))
+            </if>
+        </foreach>
+        ORDER BY count DESC
+    </select>
 </mapper>

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

@@ -314,4 +314,8 @@ public class RequestData {
     @JsonProperty("calBeforeRelFlag")
     @JSONField(name = "calBeforeRelFlag",alternateNames = {"calBeforeRelFlag","cal_before_rel_flag"})
     private Boolean calBeforeRelFlag=false;
+    /** 信息点分组统计 */
+    @JsonProperty("groups")
+    @JSONField(name = "groups")
+    private List<String> groups;
 }

+ 3 - 2
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/RelationDefine.java

@@ -2,6 +2,7 @@ package com.persagy.dmp.define.entity;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.persagy.dmp.basic.dto.RelationCalRuleDTO;
 import com.persagy.dmp.basic.dto.RelationCalDTO;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
@@ -42,10 +43,10 @@ public class RelationDefine extends AuditableEntity {
     /** 备注 */
     private String remark;
     /** 计算关系之前需要计算的关系 */
-    @TableField(value = "before_cal_rel")
+    @TableField(value = "before_cal_rel",typeHandler = JacksonTypeHandler.class)
     private List<RelationCalDTO> beforeCalRels;
     /** 计算器,就是计算规则 */
-    @TableField(value = "cal_rule")
+    @TableField(value = "cal_rule",typeHandler = JacksonTypeHandler.class)
     private RelationCalRuleDTO calRules;
     /** 关系左侧的对象分类 */
     @TableField(value = "from_obj_type")