用户列表时间查询功能说明.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:mm:ss
endTime String 结束时间,格式:yyyy-MM-ddTHH:mm:ss

请求示例

GET /api/system/user/list?startTime=2024-01-01T00:00:00&endTime=2024-12-31T23:59:59&pageNum=1&pageSize=10

查询逻辑

  1. 只有开始时间: 查询创建时间 >= 开始时间的用户
  2. 只有结束时间: 查询创建时间 <= 结束时间的用户
  3. 开始时间 + 结束时间: 查询创建时间在指定范围内的用户
  4. 无时间参数: 查询所有用户(原有逻辑)

数据库查询示例

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. 性能测试

  • 大数据量下的查询性能
  • 索引使用情况
  • 查询响应时间

注意事项

  1. 时间格式: 前端传递的时间格式必须符合 yyyy-MM-ddTHH:mm:ss 格式
  2. 时区处理: 后端使用服务器本地时区处理时间
  3. 索引优化: 确保数据库表有适当的索引以提升查询性能
  4. 参数验证: 开始时间不能晚于结束时间(可在前端或后端添加验证)
  5. 空值处理: 时间参数为空时不添加查询条件

扩展功能

1. 可添加的查询条件

  • 更新时间范围查询
  • 最后登录时间范围查询
  • 多时间字段组合查询

2. 可优化的功能

  • 时间格式自动转换
  • 时区统一处理
  • 查询结果缓存
  • 时间范围验证

相关文件

  • UserQueryReq.java - 查询请求DTO
  • SysUserController.java - 用户控制器
  • SysUserService.java - 用户服务接口
  • SysUserServiceImpl.java - 用户服务实现
  • API接口文档.md - API文档更新