用户列表时间查询功能说明.md
5 KB
用户列表时间查询功能说明
功能概述
后端用户列表查询接口已添加创建时间范围查询功能,支持按创建时间筛选用户数据。
实现内容
1. 数据库查询条件
-
开始时间查询:
create_time >= startTime -
结束时间查询:
create_time <= endTime - 时间范围查询: 同时支持开始时间和结束时间,实现时间范围筛选
2. 技术实现
2.1 DTO 类修改
文件: UserQueryReq.java
/**
* 开始时间(创建时间范围查询)
*/
private LocalDateTime startTime;
/**
* 结束时间(创建时间范围查询)
*/
private LocalDateTime endTime;
2.2 Controller 层修改
文件: SysUserController.java
// 添加时间范围查询条件
if (queryReq.getStartTime() != null) {
wrapper.ge(SysUser::getCreateTime, queryReq.getStartTime());
}
if (queryReq.getEndTime() != null) {
wrapper.le(SysUser::getCreateTime, queryReq.getEndTime());
}
2.3 查询逻辑
- 使用 MyBatis Plus 的
LambdaQueryWrapper构建查询条件 -
ge()方法实现大于等于查询(开始时间) -
le()方法实现小于等于查询(结束时间) - 支持单独使用开始时间或结束时间查询
API 接口说明
接口路径
GET /api/system/user/list
新增参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| startTime | String | 否 | 开始时间,格式:yyyy-MM-ddTHH |
| endTime | String | 否 | 结束时间,格式:yyyy-MM-ddTHH |
请求示例
GET /api/system/user/list?startTime=2024-01-01T00:00:00&endTime=2024-12-31T23:59:59&pageNum=1&pageSize=10
查询逻辑
- 只有开始时间: 查询创建时间 >= 开始时间的用户
- 只有结束时间: 查询创建时间 <= 结束时间的用户
- 开始时间 + 结束时间: 查询创建时间在指定范围内的用户
- 无时间参数: 查询所有用户(原有逻辑)
数据库查询示例
SQL 查询示例
-- 查询2024年1月创建的用户
SELECT * FROM t_sys_user
WHERE del_flag = '0'
AND create_time >= '2024-01-01 00:00:00'
AND create_time <= '2024-01-31 23:59:59'
ORDER BY create_time DESC;
-- 查询2024年1月1日之后创建的用户
SELECT * FROM t_sys_user
WHERE del_flag = '0'
AND create_time >= '2024-01-01 00:00:00'
ORDER BY create_time DESC;
MyBatis Plus 查询条件
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUser::getDelFlag, "0"); // 未删除
wrapper.ge(SysUser::getCreateTime, startTime); // 开始时间
wrapper.le(SysUser::getCreateTime, endTime); // 结束时间
wrapper.orderByDesc(SysUser::getCreateTime); // 按创建时间降序
时间格式说明
前端传递格式
-
日期格式:
yyyy-MM-dd(如: 2024-01-01) -
日期时间格式:
yyyy-MM-ddTHH:mm:ss(如: 2024-01-01T00:00:00)
后端处理
- 使用
LocalDateTime类型接收时间参数 - 自动进行类型转换和格式验证
- 支持时区处理(基于服务器时区)
性能优化
1. 数据库索引
确保 create_time 字段有适当的索引:
-- 创建时间索引
CREATE INDEX idx_user_create_time ON t_sys_user(create_time);
-- 复合索引(状态 + 创建时间)
CREATE INDEX idx_user_status_create_time ON t_sys_user(status, create_time);
2. 查询优化
- 时间范围查询使用索引
- 避免全表扫描
- 合理使用分页查询
测试用例
1. 基础功能测试
# 查询2024年1月创建的用户
curl -X GET "http://localhost:8083/api/system/user/list?startTime=2024-01-01T00:00:00&endTime=2024-01-31T23:59:59"
# 查询2024年1月1日之后创建的用户
curl -X GET "http://localhost:8083/api/system/user/list?startTime=2024-01-01T00:00:00"
# 查询2024年1月31日之前创建的用户
curl -X GET "http://localhost:8083/api/system/user/list?endTime=2024-01-31T23:59:59"
2. 边界条件测试
- 开始时间 = 结束时间
- 开始时间 > 结束时间
- 时间格式错误处理
- 空值处理
3. 性能测试
- 大数据量下的查询性能
- 索引使用情况
- 查询响应时间
注意事项
-
时间格式: 前端传递的时间格式必须符合
yyyy-MM-ddTHH:mm:ss格式 - 时区处理: 后端使用服务器本地时区处理时间
- 索引优化: 确保数据库表有适当的索引以提升查询性能
- 参数验证: 开始时间不能晚于结束时间(可在前端或后端添加验证)
- 空值处理: 时间参数为空时不添加查询条件
扩展功能
1. 可添加的查询条件
- 更新时间范围查询
- 最后登录时间范围查询
- 多时间字段组合查询
2. 可优化的功能
- 时间格式自动转换
- 时区统一处理
- 查询结果缓存
- 时间范围验证
相关文件
-
UserQueryReq.java- 查询请求DTO -
SysUserController.java- 用户控制器 -
SysUserService.java- 用户服务接口 -
SysUserServiceImpl.java- 用户服务实现 -
API接口文档.md- API文档更新