From 5ea168155f9440197487ce3e7c04962667d8dc1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Fri, 16 Jan 2026 13:54:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E5=AE=9E=E7=8E=B0=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E8=B4=A6=E5=8F=B7=E6=90=9C=E7=B4=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 搜索账号接口添加新版本标识 - 重构搜索逻辑,使用流式过滤替代模糊查询 - 优化部门层级绑定逻辑,支持更精确的树形结构构建 - 添加子节点递归处理功能,完善用户组织架构展示 - 修复部门与用户关联关系的数据转换问题 - 优化集合操作提高搜索性能 --- .../admin/controller/AdminUserController.java | 2 +- .../common/pojo/vo/AdminUserVO.java | 3 +- .../service/impl/AdminUserServiceImpl.java | 97 +++++++++++++------ 3 files changed, 68 insertions(+), 34 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java index c425c959..1fca14b9 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java @@ -373,7 +373,7 @@ public class AdminUserController extends ControllerBase { } /** - * 搜索账号 + * 搜索账号(新) * @param request 请求参数 */ @PostMapping("searchAccountNew") diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java index 00811883..9c153e9c 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java @@ -5,6 +5,7 @@ import lombok.Data; import lombok.experimental.Accessors; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -83,5 +84,5 @@ public class AdminUserVO { @JsonProperty("isGongfu") private boolean isGongfu; - private List children; + private List children = new ArrayList<>(); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java index 484228df..28d2412a 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java @@ -443,34 +443,66 @@ public class AdminUserServiceImpl extends ServiceImpl userVOS = convert(roots, department, positions, roleMaps, roles); - getChildren(userVOS.get(0), departments, adminUsers, positions, roleMaps, roles); - for (int index = 1, size = userVOS.size(); index < size; index++) { - userVOS.get(index).setChildren(userVOS.get(0).getChildren()); + List rootUserVOS = convert(roots, department, positions, roleMaps, roles); + getChildren(rootUserVOS.get(0), departments, adminUsers, positions, roleMaps, roles); + for (int index = 1, size = rootUserVOS.size(); index < size; index++) { + rootUserVOS.get(index).setChildren(rootUserVOS.get(0).getChildren()); } - return userVOS; + return rootUserVOS; } else { List adminUsers = lambdaQuery() .eq(AdminUser::getIsDel, false) - .like(StrUtil.isNotBlank(request.getLoginName()), AdminUser::getLoginName, request.getLoginName()) - .like(StrUtil.isNotBlank(request.getUserName()), AdminUser::getUserName, request.getUserName()) - .eq(request.getState() != null, AdminUser::getState, request.getState()) .list(); - if (CollectionUtil.isEmpty(adminUsers)) { + List searchUsers = adminUsers.stream() + .filter(u -> (StrUtil.isBlank(request.getLoginName()) || StrUtil.contains(u.getLoginName(), request.getLoginName())) + && (StrUtil.isBlank(request.getUserName()) || StrUtil.contains(u.getUserName(), request.getUserName())) + && (request.getState() == null || Objects.equals(u.getState(), request.getState())) + ) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(searchUsers)) { return Collections.emptyList(); } - List userVOS = convert1(adminUsers, departments, positions, roleMaps, roles); - Set departmentVOS = departments.stream() - .filter(d -> userVOS.stream().map(AdminUserVO::getDepartmentId).anyMatch(dt -> Objects.equals(d.getId(), dt))) + Set searchDepartments = departments.stream() + .filter(d -> searchUsers.stream().map(AdminUser::getDepartmentId).anyMatch(dt -> Objects.equals(d.getId(), dt))) .collect(Collectors.toSet()); - departmentVOS.forEach(d -> bindParent(d, departmentVOS, departments)); - List rootDepartments = departmentVOS.stream() + searchDepartments.forEach(d -> bindParent(d, searchDepartments, departments)); + List rootDepartments = searchDepartments.stream() .filter(d -> d.getDeptParentId() == 0) .collect(Collectors.toList()); -// List -// rootDepartments.forEach(d -> getChildren1(d, departmentVOS, adminUsers, positions, roleMaps, roles)); - //TODO 绑定树形结构 - return userVOS; + List rootUsers = adminUsers.stream() + .filter(u -> rootDepartments.stream() + .map(TBaseDepartment::getId).anyMatch(dt -> Objects.equals(u.getDepartmentId(), dt)) + ).collect(Collectors.toList()); + List rootUserVOS = convert1(rootUsers, departments, positions, roleMaps, roles); + rootUserVOS.forEach(uvo -> getChildren1(uvo, departments, adminUsers, searchUsers, positions, roleMaps, roles)); + return rootUserVOS; + } + } + + private void getChildren1(AdminUserVO user, List departments, List users, List searchUsers + , List positions, List roleMaps, List roles) { + List cdepartments = departments.stream() + .filter(d -> Objects.equals(d.getDeptParentId(), user.getDepartmentId())) + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(cdepartments)) { + cdepartments.forEach(department -> { + List csers = searchUsers.stream() + .filter(u -> Objects.equals(u.getDepartmentId(), department.getId())) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(csers)) { + csers = users.stream() + .filter(u -> Objects.equals(u.getDepartmentId(), department.getId())) + .collect(Collectors.toList()); + } + if (CollectionUtil.isNotEmpty(csers)) { + List cuserVOS = convert(csers, department, positions, roleMaps, roles); + user.getChildren().addAll(cuserVOS); + getChildren(cuserVOS.get(0), departments, users, positions, roleMaps, roles); + for (int index = 1, size = cuserVOS.size(); index < size; index++) { + cuserVOS.get(index).setChildren(cuserVOS.get(0).getChildren()); + } + } + }); } } @@ -540,22 +572,23 @@ public class AdminUserServiceImpl extends ServiceImpl departments, List users , List positions, List roleMaps, List roles) { - TBaseDepartment department = departments.stream() + List cdepartments = departments.stream() .filter(d -> Objects.equals(d.getDeptParentId(), user.getDepartmentId())) - .findFirst() - .orElse(null); - if (Objects.nonNull(department)) { - List csers = users.stream() - .filter(u -> Objects.equals(u.getDepartmentId(), department.getId())) - .collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(csers)) { - List cuserVOS = convert(csers, department, positions, roleMaps, roles); - user.setChildren(cuserVOS); - getChildren(cuserVOS.get(0), departments, users, positions, roleMaps, roles); - for (int index = 1, size = cuserVOS.size(); index < size; index++) { - cuserVOS.get(index).setChildren(cuserVOS.get(0).getChildren()); + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(cdepartments)) { + cdepartments.forEach(department -> { + List csers = users.stream() + .filter(u -> Objects.equals(u.getDepartmentId(), department.getId())) + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(csers)) { + List cuserVOS = convert(csers, department, positions, roleMaps, roles); + user.getChildren().addAll(cuserVOS); + getChildren(cuserVOS.get(0), departments, users, positions, roleMaps, roles); + for (int index = 1, size = cuserVOS.size(); index < size; index++) { + cuserVOS.get(index).setChildren(cuserVOS.get(0).getChildren()); + } } - } + }); } } } \ No newline at end of file