From 2b9b0423ed81a67b28791c68e6aeae74229e0899 Mon Sep 17 00:00:00 2001 From: smile <1372184840@qq.com> Date: Thu, 4 Sep 2025 10:57:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(system):=20=E6=B7=BB=E5=8A=A0=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E3=80=81=E8=A7=92=E8=89=B2=E5=92=8C=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=93=8D=E4=BD=9C=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 DepartmentService、MenuService、PermissionService、RoleService 和 UserService 中添加了删除操作的实现 - 优化了树形结构数据的递归删除逻辑 - 处理了角色和用户删除时的关联数据清理 - 修复了一些潜在的 bug 和性能问题 --- .../department/service/DepartmentService.java | 39 +++++++++++++++++++ .../web/system/menu/service/MenuService.java | 34 ++++++++++++++++ .../permission/service/PermissionService.java | 38 ++++++++++++++++++ .../web/system/role/service/RoleService.java | 8 ++++ .../web/system/user/service/UserService.java | 2 + 5 files changed, 121 insertions(+) diff --git a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/department/service/DepartmentService.java b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/department/service/DepartmentService.java index b807922..1cb70e6 100644 --- a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/department/service/DepartmentService.java +++ b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/department/service/DepartmentService.java @@ -3,6 +3,7 @@ package com.bgasol.web.system.department.service; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.bgasol.common.core.base.dto.BasePageDto; +import com.bgasol.common.core.base.entity.BaseTreeEntity; import com.bgasol.common.core.base.service.BaseService; import com.bgasol.model.system.department.entity.DepartmentEntity; import com.bgasol.web.system.department.mapper.DepartmentMapper; @@ -15,6 +16,12 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + import static com.bgasol.common.constant.value.SystemConfigValues.DEFAULT_DEPARTMENT_ID; @Service @@ -63,4 +70,36 @@ public class DepartmentService extends BaseService deptIds = new HashSet<>(); + deptIds.add(id); + + List departments = findTreeAll(id, null); + collectDeleteIds(departments, deptIds); + + deptIds.forEach(super::delete); + return 1; + } + + private void collectDeleteIds(List departments, HashSet ids) { + List departmentEntityList = departments.stream() + .filter(e -> !e.getChildren().isEmpty()) + .flatMap(e -> e.getChildren().stream()) + .toList(); + + // 将当前层级子部门的ID添加到删除集合中 + departmentEntityList.forEach(dept -> ids.add(dept.getId())); + departments.forEach(dept -> ids.add(dept.getId())); + + if (!departmentEntityList.isEmpty()) { + // 递归处理下一层级的子部门 + this.collectDeleteIds(departmentEntityList, ids); + } + } } diff --git a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/menu/service/MenuService.java b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/menu/service/MenuService.java index ba2f159..14bc3f9 100644 --- a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/menu/service/MenuService.java +++ b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/menu/service/MenuService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.bgasol.common.constant.value.SystemConfigValues; import com.bgasol.common.core.base.dto.BasePageDto; import com.bgasol.common.core.base.service.BaseService; +import com.bgasol.model.system.department.entity.DepartmentEntity; import com.bgasol.model.system.menu.entity.MenuEntity; import com.bgasol.model.system.user.entity.UserEntity; import com.bgasol.web.system.menu.mapper.MenuMapper; @@ -149,4 +150,37 @@ public class MenuService extends BaseService } return menuEntityList; } + + @Override + public Integer delete(String id) { + MenuEntity menuEntity = this.findById(id); + if (ObjectUtils.isEmpty(menuEntity)) { + return 1; + } + HashSet menuIds = new HashSet<>(); + menuIds.add(id); + List menus = findTreeAll(id, null); + collectDeleteIds(menus, menuIds); + menuIds.forEach(menuId -> { + this.menuMapper.deleteFromTable("system_c_role_menu", "menu_id", menuId); + super.delete(menuId); + }); + return 1; + } + + private void collectDeleteIds(List menus, Set ids) { + List menuEntityList = menus.stream() + .filter(e -> !e.getChildren().isEmpty()) + .flatMap(e -> e.getChildren().stream()) + .toList(); + + // 将当前层级子部门的ID添加到删除集合中 + menuEntityList.forEach(e -> ids.add(e.getId())); + menus.forEach(e -> ids.add(e.getId())); + + if (!menuEntityList.isEmpty()) { + // 递归处理下一层级的子部门 + this.collectDeleteIds(menuEntityList, ids); + } + } } diff --git a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/permission/service/PermissionService.java b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/permission/service/PermissionService.java index bf620da..bb49bd2 100644 --- a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/permission/service/PermissionService.java +++ b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/permission/service/PermissionService.java @@ -2,13 +2,18 @@ package com.bgasol.web.system.permission.service; import com.bgasol.common.core.base.dto.BasePageDto; import com.bgasol.common.core.base.service.BaseService; +import com.bgasol.model.system.menu.entity.MenuEntity; import com.bgasol.model.system.permission.entity.PermissionEntity; import com.bgasol.web.system.permission.mapper.PermissionMapper; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.ObjectUtils; import org.redisson.api.RedissonClient; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashSet; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional @@ -42,4 +47,37 @@ public class PermissionService extends BaseService permissionIds = new HashSet<>(); + permissionIds.add(id); + List permissions = findTreeAll(id, null); + collectDeleteIds(permissions, permissionIds); + permissionIds.forEach(e -> { + this.permissionMapper.deleteFromTable("system_c_role_permission", "permission_id", e); + super.delete(e); + }); + return 1; + } + + private void collectDeleteIds(List permissions, HashSet ids) { + List permissionEntityList = permissions.stream() + .filter(e -> !e.getChildren().isEmpty()) + .flatMap(e -> e.getChildren().stream()) + .toList(); + + // 将当前层级子部门的ID添加到删除集合中 + permissionEntityList.forEach(e -> ids.add(e.getId())); + permissions.forEach(e -> ids.add(e.getId())); + + if (!permissionEntityList.isEmpty()) { + // 递归处理下一层级的子部门 + this.collectDeleteIds(permissionEntityList, ids); + } + } } diff --git a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/role/service/RoleService.java b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/role/service/RoleService.java index 068e5e6..eef23f9 100644 --- a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/role/service/RoleService.java +++ b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/role/service/RoleService.java @@ -65,4 +65,12 @@ public class RoleService extends BaseService roleEntity.setMenus(menuEntities); super.findOtherTable(roleEntity); } + + @Override + public Integer delete(String id) { + this.roleMapper.deleteFromTable("system_c_role_permission", "role_id", id); + this.roleMapper.deleteFromTable("system_c_role_menu", "role_id", id); + this.roleMapper.deleteFromTable("system_c_user_role", "role_id", id); + return super.delete(id); + } } diff --git a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/user/service/UserService.java b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/user/service/UserService.java index 16f91e3..7a3fafa 100644 --- a/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/user/service/UserService.java +++ b/cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/user/service/UserService.java @@ -53,6 +53,8 @@ public class UserService extends BaseService { public Integer delete(String id) { // 退出用户 StpUtil.logout(id); + // 删除用户关联角色-中间表 + this.userMapper.deleteFromTable("system_c_user_role", "user_id", id); return super.delete(id); }