Commit 597a396fc73f0d8fcddb6c564a603bb8f5839160

Authored by xp.Huang
2 parents 8b3eb8b8 97d7cf1e

Merge branch 'fix/i18n-openapi' into 'master_dev'

perf: 调整openapi调用趋势查询

See merge request yunteng/thingskit!442
@@ -37,3 +37,7 @@ rebuild-docker.sh @@ -37,3 +37,7 @@ rebuild-docker.sh
37 */.run/** 37 */.run/**
38 .run/** 38 .run/**
39 .run 39 .run
  40 +protocol-template/
  41 +template/
  42 +
  43 +
@@ -75,7 +75,7 @@ public class TkOpenApiRecordController extends BaseController { @@ -75,7 +75,7 @@ public class TkOpenApiRecordController extends BaseController {
75 @GetMapping("/getClassify") 75 @GetMapping("/getClassify")
76 @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN'},{})") 76 @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN'},{})")
77 @ApiImplicitParams(value = { 77 @ApiImplicitParams(value = {
78 - @ApiImplicitParam(name = "type", value = "统计类型 hour按小时;week按7天;month按30天" ,required = true) 78 + @ApiImplicitParam(name = "type", value = "统计类型 hour按小时;day按1天;week按7天;month按30天" ,required = true)
79 }) 79 })
80 public ResponseEntity<List<OpenApiRecordClassifyAllDTO>> getClassify( 80 public ResponseEntity<List<OpenApiRecordClassifyAllDTO>> getClassify(
81 @RequestParam(value = "type" ) String type 81 @RequestParam(value = "type" ) String type
@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
4 import lombok.Data; 4 import lombok.Data;
5 import org.thingsboard.server.common.data.yunteng.enums.ApplicationApiEnum; 5 import org.thingsboard.server.common.data.yunteng.enums.ApplicationApiEnum;
6 6
  7 +import java.sql.Timestamp;
7 import java.time.LocalDateTime; 8 import java.time.LocalDateTime;
8 9
9 @Data 10 @Data
@@ -13,7 +14,7 @@ public class OpenApiRecordClassifyDTO { @@ -13,7 +14,7 @@ public class OpenApiRecordClassifyDTO {
13 private ApplicationApiEnum classify; 14 private ApplicationApiEnum classify;
14 15
15 @ApiModelProperty(value = "时间") 16 @ApiModelProperty(value = "时间")
16 - private LocalDateTime time; 17 + private String time;
17 18
18 @ApiModelProperty(value = "调用数量") 19 @ApiModelProperty(value = "调用数量")
19 private Integer count; 20 private Integer count;
@@ -17,7 +17,9 @@ import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; @@ -17,7 +17,9 @@ import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
17 import org.thingsboard.server.dao.exception.DataValidationException; 17 import org.thingsboard.server.dao.exception.DataValidationException;
18 import org.thingsboard.server.dao.yunteng.entities.TkOpenApiEntity; 18 import org.thingsboard.server.dao.yunteng.entities.TkOpenApiEntity;
19 import org.thingsboard.server.dao.yunteng.mapper.OpenApiMapper; 19 import org.thingsboard.server.dao.yunteng.mapper.OpenApiMapper;
  20 +import org.thingsboard.server.dao.yunteng.mapper.OpenApiRecordMapper;
20 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; 21 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  22 +import org.thingsboard.server.dao.yunteng.service.OpenApiRecordService;
21 import org.thingsboard.server.dao.yunteng.service.OpenApiService; 23 import org.thingsboard.server.dao.yunteng.service.OpenApiService;
22 24
23 import java.util.*; 25 import java.util.*;
@@ -29,6 +31,8 @@ import java.util.stream.Collectors; @@ -29,6 +31,8 @@ import java.util.stream.Collectors;
29 public class OpenApiImpl extends AbstractBaseService<OpenApiMapper, TkOpenApiEntity> 31 public class OpenApiImpl extends AbstractBaseService<OpenApiMapper, TkOpenApiEntity>
30 implements OpenApiService { 32 implements OpenApiService {
31 33
  34 + OpenApiRecordMapper openApiRecordMapper;
  35 +
32 36
33 @Override 37 @Override
34 public OpenApiDTO getDto(String id) { 38 public OpenApiDTO getDto(String id) {
@@ -85,7 +89,9 @@ public class OpenApiImpl extends AbstractBaseService<OpenApiMapper, TkOpenApiEnt @@ -85,7 +89,9 @@ public class OpenApiImpl extends AbstractBaseService<OpenApiMapper, TkOpenApiEnt
85 NOT_HAVE_PERMISSION.getI18nCode()))); 89 NOT_HAVE_PERMISSION.getI18nCode())));
86 } 90 }
87 }); 91 });
88 - return baseMapper.deleteBatchIds(apiIds) > 0; 92 + baseMapper.deleteBatchIds(apiIds);
  93 + openApiRecordMapper.deleteByAppIds(apiIds);
  94 + return true;
89 } 95 }
90 96
91 @Override 97 @Override
@@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
8 import org.springframework.stereotype.Service; 8 import org.springframework.stereotype.Service;
9 import org.springframework.transaction.annotation.Transactional; 9 import org.springframework.transaction.annotation.Transactional;
10 import org.thingsboard.server.common.data.yunteng.dto.*; 10 import org.thingsboard.server.common.data.yunteng.dto.*;
  11 +import org.thingsboard.server.common.data.yunteng.utils.DateTimeUtils;
11 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; 12 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
12 import org.thingsboard.server.dao.yunteng.entities.TkApplicationEntity; 13 import org.thingsboard.server.dao.yunteng.entities.TkApplicationEntity;
13 import org.thingsboard.server.dao.yunteng.entities.TkOpenApiRecordEntity; 14 import org.thingsboard.server.dao.yunteng.entities.TkOpenApiRecordEntity;
@@ -16,6 +17,7 @@ import org.thingsboard.server.dao.yunteng.mapper.OpenApiRecordMapper; @@ -16,6 +17,7 @@ import org.thingsboard.server.dao.yunteng.mapper.OpenApiRecordMapper;
16 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; 17 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
17 import org.thingsboard.server.dao.yunteng.service.OpenApiRecordService; 18 import org.thingsboard.server.dao.yunteng.service.OpenApiRecordService;
18 19
  20 +import java.sql.Time;
19 import java.util.ArrayList; 21 import java.util.ArrayList;
20 import java.util.List; 22 import java.util.List;
21 import java.util.Map; 23 import java.util.Map;
@@ -28,6 +30,7 @@ public class OpenApiRecordImpl extends AbstractBaseService<OpenApiRecordMapper, @@ -28,6 +30,7 @@ public class OpenApiRecordImpl extends AbstractBaseService<OpenApiRecordMapper,
28 implements OpenApiRecordService { 30 implements OpenApiRecordService {
29 31
30 private final ApplicationMapper applicationMapper; 32 private final ApplicationMapper applicationMapper;
  33 + private final long HOUR_TIMESTAMP=1000L*60L*60L;
31 @Override 34 @Override
32 public OpenApiRecordDTO getDto(String id) { 35 public OpenApiRecordDTO getDto(String id) {
33 TkOpenApiRecordEntity entity = baseMapper.selectById(id); 36 TkOpenApiRecordEntity entity = baseMapper.selectById(id);
@@ -106,7 +109,7 @@ public class OpenApiRecordImpl extends AbstractBaseService<OpenApiRecordMapper, @@ -106,7 +109,7 @@ public class OpenApiRecordImpl extends AbstractBaseService<OpenApiRecordMapper,
106 109
107 @Override 110 @Override
108 public TkPageData<OpenApiRecordTopDTO> getPage(String tenantId,Integer page,Integer pageSize) { 111 public TkPageData<OpenApiRecordTopDTO> getPage(String tenantId,Integer page,Integer pageSize) {
109 - List<OpenApiRecordTopDTO> tops = baseMapper.getTop(tenantId,page,pageSize); 112 + List<OpenApiRecordTopDTO> tops = baseMapper.getTop(tenantId,page<1?1:page,pageSize);
110 Long count = applicationMapper.selectCount(new LambdaQueryWrapper<TkApplicationEntity>() 113 Long count = applicationMapper.selectCount(new LambdaQueryWrapper<TkApplicationEntity>()
111 .eq(TkApplicationEntity::getTenantId, tenantId)); 114 .eq(TkApplicationEntity::getTenantId, tenantId));
112 return new TkPageData<>(tops, count); 115 return new TkPageData<>(tops, count);
@@ -114,13 +117,24 @@ public class OpenApiRecordImpl extends AbstractBaseService<OpenApiRecordMapper, @@ -114,13 +117,24 @@ public class OpenApiRecordImpl extends AbstractBaseService<OpenApiRecordMapper,
114 117
115 @Override 118 @Override
116 public List<OpenApiRecordClassifyAllDTO> getClassify(String tenantId,String type) { 119 public List<OpenApiRecordClassifyAllDTO> getClassify(String tenantId,String type) {
117 - List<OpenApiRecordClassifyDTO> tops = baseMapper.getClassify(tenantId,type); 120 + //value = "统计类型 hour按小时;day按1天;week按7天;month按30天" ,required = true)
  121 + java.util.Date endTime=new java.util.Date();
  122 + java.util.Date startTime=null;
  123 + switch (type){
  124 + case "hour":startTime=new java.util.Date(endTime.getTime()- HOUR_TIMESTAMP);break;
  125 + case "day":startTime =new java.util.Date(endTime.getTime()- HOUR_TIMESTAMP*24L);break;
  126 + case "week":startTime=new java.util.Date(endTime.getTime()- HOUR_TIMESTAMP*24L*7L);break;
  127 + case "month":startTime=new java.util.Date(endTime.getTime()- HOUR_TIMESTAMP*24L*30L);break;
  128 + }
  129 +
  130 + List<OpenApiRecordClassifyDTO> tops = baseMapper.getClassify(tenantId,type,startTime,endTime);
118 List<OpenApiRecordClassifyAllDTO> allList =new ArrayList<>(); 131 List<OpenApiRecordClassifyAllDTO> allList =new ArrayList<>();
119 if(!tops.isEmpty()){ 132 if(!tops.isEmpty()){
120 for (OpenApiRecordClassifyDTO entity: tops) { 133 for (OpenApiRecordClassifyDTO entity: tops) {
  134 + if(entity==null){continue;}
121 // 查找 listDto 中是否已有相同 enum 的 entity 135 // 查找 listDto 中是否已有相同 enum 的 entity
122 OpenApiRecordClassifyAllDTO existingDto = allList.stream() 136 OpenApiRecordClassifyAllDTO existingDto = allList.stream()
123 - .filter(dto -> dto.getClassify().name().equals(entity.getClassify().name())) 137 + .filter(dto -> entity.getClassify()!=null && dto.getClassify().name().equals(entity.getClassify().name()))
124 .findFirst() 138 .findFirst()
125 .orElse(null); 139 .orElse(null);
126 if (existingDto != null) { 140 if (existingDto != null) {
@@ -15,8 +15,7 @@ public interface OpenApiRecordMapper extends BaseMapper<TkOpenApiRecordEntity> { @@ -15,8 +15,7 @@ public interface OpenApiRecordMapper extends BaseMapper<TkOpenApiRecordEntity> {
15 15
16 List<OpenApiRecordTopDTO> getTop(@Param("tenantId") String tenantId,@Param("page")Integer page,@Param("pageSize")Integer pageSize); 16 List<OpenApiRecordTopDTO> getTop(@Param("tenantId") String tenantId,@Param("page")Integer page,@Param("pageSize")Integer pageSize);
17 17
18 - List<OpenApiRecordClassifyDTO> getClassify(@Param("tenantId") String tenantId,  
19 - @Param("type") String type); 18 + List<OpenApiRecordClassifyDTO> getClassify(@Param("tenantId") String tenantId,@Param("type") String type,@Param("startTime") java.util.Date startTime,@Param("endTime") java.util.Date endTime);
20 19
21 int deleteByAppIds(@Param("applicationIds") Collection<String> applicationId); 20 int deleteByAppIds(@Param("applicationIds") Collection<String> applicationId);
22 } 21 }
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 AND tenant_id = '13814000-1dd2-11b2-8080-808080808080' AND status = 1 23 AND tenant_id = '13814000-1dd2-11b2-8080-808080808080' AND status = 1
24 OR tenant_id = #{tenantId} 24 OR tenant_id = #{tenantId}
25 </if> 25 </if>
26 - <if test="status !=null and status !=''"> 26 + <if test="status !=null">
27 AND status = #{status} 27 AND status = #{status}
28 </if> 28 </if>
29 <if test="dictItemId !=null and dictItemId !=''"> 29 <if test="dictItemId !=null and dictItemId !=''">
@@ -14,7 +14,6 @@ @@ -14,7 +14,6 @@
14 <result property="classify" column="classify"/> 14 <result property="classify" column="classify"/>
15 <result property="time" column="time_period"/> 15 <result property="time" column="time_period"/>
16 <result property="count" column="call_count"/> 16 <result property="count" column="call_count"/>
17 -  
18 </resultMap> 17 </resultMap>
19 18
20 <select id="getTop" resultMap="DTOMap"> 19 <select id="getTop" resultMap="DTOMap">
@@ -35,34 +34,37 @@ @@ -35,34 +34,37 @@
35 </select> 34 </select>
36 35
37 <select id="getClassify" resultMap="map"> 36 <select id="getClassify" resultMap="map">
38 - SELECT  
39 - classify,  
40 - <if test="type == 'hour'">  
41 - DATE_TRUNC('hour', request_time) AS time_period,  
42 - </if>  
43 - <if test="type == 'week'">  
44 - DATE_TRUNC('week', request_time) AS time_period,  
45 - </if>  
46 - <if test="type == 'month'">  
47 - DATE_TRUNC('month', request_time) AS time_period,  
48 - </if>  
49 - COUNT(*) AS call_count  
50 - FROM  
51 - tk_open_api_record  
52 - WHERE tenant_id = #{tenantId}  
53 - GROUP BY  
54 - classify,  
55 - <if test="type == 'hour'">  
56 - DATE_TRUNC('hour', request_time)  
57 - </if>  
58 - <if test="type == 'week'">  
59 - DATE_TRUNC('week', request_time)  
60 - </if>  
61 - <if test="type == 'month'">  
62 - DATE_TRUNC('month', request_time)  
63 - </if>  
64 - ORDER BY  
65 - time_period 37 + SELECT foo.classify,foo.time_period,count(foo.time_period) as call_count from (
  38 +
  39 + SELECT
  40 + classify,
  41 +
  42 + concat(
  43 +
  44 + EXTRACT(YEAR FROM request_time), '-',
  45 + EXTRACT(MONTH FROM request_time),'-',
  46 + EXTRACT(DAY FROM request_time)
  47 + <choose>
  48 + <when test="type == 'hour'">
  49 + , ' ',
  50 + EXTRACT(HOUR FROM request_time), ':',
  51 + floor( EXTRACT(MINUTE FROM request_time) / 5 ) * 5
  52 + </when>
  53 + <when test="type == 'day'">
  54 + , ' ',
  55 + floor( EXTRACT(HOUR FROM request_time) / 2 ) * 2, ':',
  56 + '00'
  57 + </when>
  58 +
  59 + </choose>
  60 + )
  61 + as time_period
  62 + FROM tk_open_api_record
  63 + WHERE tenant_id = #{tenantId} AND request_time <![CDATA[ >= ]]> #{startTime} AND request_time <![CDATA[ <= ]]> #{endTime}
  64 +
  65 + ) as foo
  66 + GROUP BY foo.classify,foo.time_period
  67 + ORDER BY foo.time_period;
66 </select> 68 </select>
67 69
68 <delete id="deleteByAppIds"> 70 <delete id="deleteByAppIds">