From 43e2bc986ab03fa8413319a3e91a7c62fc1b0f80 Mon Sep 17 00:00:00 2001 From: lbw Date: Mon, 17 Apr 2023 13:49:32 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20Refactoring=20code.=20#4836=20WITH?= =?UTF-8?q?=20RECURSIVE=20=E9=80=92=E5=BD=92=E6=9F=A5=E8=AF=A2=E8=AF=AD?= =?UTF-8?q?=E6=B3=95=E5=85=BC=E5=AE=B9=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pigx/admin/mapper/SysDeptMapper.java | 7 ---- .../service/impl/SysDeptServiceImpl.java | 34 ++++++++++++++++--- .../main/resources/mapper/SysDeptMapper.xml | 12 ------- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysDeptMapper.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysDeptMapper.java index 53f2d62ac..f83a6248c 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysDeptMapper.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysDeptMapper.java @@ -36,11 +36,4 @@ import java.util.List; @Mapper public interface SysDeptMapper extends PigxBaseMapper { - /** - * 获取部门的所有后代部门列表 - * @param deptId 部门ID - * @return 后代部门列表 - */ - List listDescendant(Long deptId); - } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java index a50cfa679..d4cf8fcaa 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java @@ -65,7 +65,7 @@ public class SysDeptServiceImpl extends ServiceImpl impl @Transactional(rollbackFor = Exception.class) public Boolean removeDeptById(Long id) { // 级联删除部门 - List idList = baseMapper.listDescendant(id).stream().map(SysDept::getDeptId).collect(Collectors.toList()); + List idList = this.listDescendant(id).stream().map(SysDept::getDeptId).collect(Collectors.toList()); Optional.ofNullable(idList).filter(CollUtil::isNotEmpty).ifPresent(this::removeByIds); @@ -174,13 +174,37 @@ public class SysDeptServiceImpl extends ServiceImpl impl } /** - * 获取部门的所有后代部门列表 - * @param deptId 部门ID - * @return 后代部门列表 + * 查询所有子节点 (包含当前节点) + * @param deptId 部门ID 目标部门ID + * @return ID */ @Override public List listDescendant(Long deptId) { - return baseMapper.listDescendant(deptId); + // 查询全部部门 + List allDeptList = baseMapper.selectList(Wrappers.emptyWrapper()); + + // 递归查询所有子节点 + List resDeptList = new ArrayList<>(); + recursiveDept(allDeptList, deptId, resDeptList); + + // 添加当前节点 + resDeptList.addAll(allDeptList.stream().filter(sysDept -> deptId.equals(sysDept.getDeptId())) + .collect(Collectors.toList())); + return resDeptList; + } + + /** + * 递归查询所有子节点。 + * @param allDeptList 所有部门列表 + * @param parentId 父部门ID + * @param resDeptList 结果集合 + */ + private void recursiveDept(List allDeptList, Long parentId, List resDeptList) { + // 使用 Stream API 进行筛选和遍历 + allDeptList.stream().filter(sysDept -> sysDept.getParentId().equals(parentId)).forEach(sysDept -> { + resDeptList.add(sysDept); + recursiveDept(allDeptList, sysDept.getDeptId(), resDeptList); + }); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysDeptMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysDeptMapper.xml index de00e1ebc..81b39533f 100644 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysDeptMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysDeptMapper.xml @@ -20,16 +20,4 @@ - -