From 50296e8fce2744575000dfd5c3bc6da6040f0e7e Mon Sep 17 00:00:00 2001 From: Chaos Date: Mon, 1 Dec 2025 17:27:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E5=A2=9E=E5=BC=BA=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=88=97=E8=A1=A8=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 keyword 参数支持用户名和昵称模糊搜索 - 新增 roleId 参数支持按角色过滤用户 - 优化 SQL 查询逻辑,使用 EXISTS 子查询关联用户与角色 - 更新 Mapper 接口以支持新的查询参数 - 调整 Service 和 Controller 层方法签名适配新参数 - 添加请求日志记录便于调试和监控 --- .../cn/nopj/chaos_api/mapper/UserMapper.java | 40 +++++++++++-------- .../chaos_api/service/UserProfileService.java | 2 +- .../service/impl/UserProfileServiceImpl.java | 4 +- .../chaos_api/controller/UserController.java | 8 +++- 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/chaos_api_data/src/main/java/cn/nopj/chaos_api/mapper/UserMapper.java b/chaos_api_data/src/main/java/cn/nopj/chaos_api/mapper/UserMapper.java index 3061a89..a47c658 100644 --- a/chaos_api_data/src/main/java/cn/nopj/chaos_api/mapper/UserMapper.java +++ b/chaos_api_data/src/main/java/cn/nopj/chaos_api/mapper/UserMapper.java @@ -91,7 +91,6 @@ public interface UserMapper extends BaseMapper { """) List findRolesByUserId(@Param("userId") Long userId); - @Select("SELECT * FROM t_user WHERE username = #{username} ") @Results({ @Result(id = true, property = "id", column = "id"), @@ -103,24 +102,31 @@ public interface UserMapper extends BaseMapper { many = @Many(select = "findRolesByUserId")) }) User findUserWithRolesByUsername(String username); + /** * 分页查询用户,并携带角色信息 - * MyBatis-Plus 会自动处理 Page 参数进行物理分页 - * @param page 分页对象 - * @param keyword 搜索关键词 (可选) - * @return 分页后的用户列表 (包含角色) + * 增加了 roleId 过滤 */ @Select(""" - - """) + +""") @Results({ @Result(id = true, property = "id", column = "id"), @Result(property = "username", column = "username"), @@ -129,5 +135,7 @@ public interface UserMapper extends BaseMapper { @Result(property = "roles", column = "id", many = @Many(select = "findRolesByUserId")) }) - IPage selectPageWithRoles(Page page, @Param("keyword") String keyword); + IPage selectPageWithRoles(Page page, + @Param("keyword") String keyword, + @Param("roleId") Long roleId); } \ No newline at end of file diff --git a/chaos_api_interface/src/main/java/cn/nopj/chaos_api/service/UserProfileService.java b/chaos_api_interface/src/main/java/cn/nopj/chaos_api/service/UserProfileService.java index b034a21..a953fb6 100644 --- a/chaos_api_interface/src/main/java/cn/nopj/chaos_api/service/UserProfileService.java +++ b/chaos_api_interface/src/main/java/cn/nopj/chaos_api/service/UserProfileService.java @@ -89,7 +89,7 @@ public interface UserProfileService { * @param pageSize 页大小 * @return 所有用户信息 */ - IPage getAllUsers(Integer pageNum, Integer pageSize); + IPage getAllUsers(Integer pageNum, Integer pageSize,String keyword,Long roleId); /** * 根据用户ID查询用户信息 diff --git a/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/UserProfileServiceImpl.java b/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/UserProfileServiceImpl.java index 2972614..088e596 100644 --- a/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/UserProfileServiceImpl.java +++ b/chaos_api_service/src/main/java/cn/nopj/chaos_api/service/impl/UserProfileServiceImpl.java @@ -153,9 +153,9 @@ public class UserProfileServiceImpl implements UserProfileService { } @Override - public IPage getAllUsers(Integer pageNum, Integer pageSize) { + public IPage getAllUsers(Integer pageNum, Integer pageSize, String keyword, Long roleId) { Page page = new Page<>(pageNum, pageSize); - IPage userPage = userMapper.selectPageWithRoles(page, null); + IPage userPage = userMapper.selectPageWithRoles(page, keyword,roleId); return userPage.convert(UserProfileResponse::new); } diff --git a/chaos_api_web/src/main/java/cn/nopj/chaos_api/controller/UserController.java b/chaos_api_web/src/main/java/cn/nopj/chaos_api/controller/UserController.java index 7aebf75..9e7f78b 100644 --- a/chaos_api_web/src/main/java/cn/nopj/chaos_api/controller/UserController.java +++ b/chaos_api_web/src/main/java/cn/nopj/chaos_api/controller/UserController.java @@ -35,8 +35,12 @@ public class UserController { @GetMapping public ApiResult> listUsers( @RequestParam(defaultValue = "1", name = "pageNum") Integer pageNum, - @RequestParam(defaultValue = "10", name = "pageSize") Integer pageSize) { - return ApiResult.success(userProfileService.getAllUsers(pageNum, pageSize)); + @RequestParam(defaultValue = "10", name = "pageSize") Integer pageSize, + @RequestParam(required = false) String keyword, + @RequestParam(required = false) Long roleId + ) { + log.info("获取用户列表 (分页):{}, {}, {}, {}" ,pageNum, pageSize, keyword, roleId); + return ApiResult.success(userProfileService.getAllUsers(pageNum, pageSize, keyword, roleId)); } @GetMapping("/{id}")