这是我的请求记录表: 对应的 mapper 等文件在: `D:\MyCode\Work\yd-hy\ibs-plus\plus-service\src\main\java\com\cmcc\plus\gateway` `D:\MyCode\Work\yd-hy\ibs-plus\plus-service\src\main\resources\mapper\gateway` 表结构: ```java @TableName(value = "gw_forward_record") @Data @Builder @NoArgsConstructor @AllArgsConstructor public class GwForwardRecord implements Serializable { /** * 记录ID */ @TableId(type = IdType.AUTO) private Long recordId; /** * 请求UUID */ private String uuid; /** * 请求时间 */ private LocalDateTime requestTime; /** * 接口路径 */ private String requestUrl; /** * 请求方法 */ private String method; /** * 目的地址 */ private String targetEndpoint; /** * 请求响应码 */ private Integer httpCode; /** * 链路追踪ID */ private String traceId; /** * 网关地址 */ private String gatewayEndpoint; /** * 请求匹配的路由ID */ private Long routeId; /** * 请求耗时(ms) */ private Integer costTime; @Serial @TableField(exist = false) private static final long serialVersionUID = 1L; } ``` 我现在有一个需求,需要给前端提供一个曲线图数据查询接口: 接口创建在 com.cmcc.plus.web.controller.gateway.GwForwardRecordController 下。 注意一定要保证代码执行效率。因为这是网关请求记录表,是一个量级非常大的表。 图中包含 5 条线:2xx、4xx、5xx、其他状态码(请求次数,对应表httpCode字段)、平均耗时(ms,对应表 costTime 字段) 我的图标左侧 Y 轴为 请求次数,右侧 Y 轴 平均耗时。下方 X 轴为时间坐标轴。 我想给我前端一个通用方法,查询某个时间段的这五个指标(也就是针对 requestTime 的过滤)。costTime(比如前端传 200ms-300ms 的查询)同时支持通过 requestUrl、method、targetEndpoint、httpCode、gatewayEndpoint 的过滤。 请仔细设计返回前端的结构体,做到最标准和效率。 仔细设计 requestUrl、targetEndpoint、gatewayEndpoint 是否可以使用模糊查询,前提是保证效率,因为这个表是一个非常大的表。 针对时间粒度。帮我提供时间区间内 5 分钟(例如 00:00:00 的数据就是 00:00:00-00:04:59),1小时,1天,一周,一月。时间粒度均为左闭右开。这个粒度根据前端选择进行聚合。不用一次全聚合出来。