mirror of
https://github.com/BgaSol/sol-cloud
synced 2026-05-23 17:18:44 +00:00
feat(system): 添加菜单、角色和用户相关操作的支持
- 在 DepartmentService、MenuService、PermissionService、RoleService 和 UserService 中添加了删除操作的实现 - 优化了树形结构数据的递归删除逻辑 - 处理了角色和用户删除时的关联数据清理 - 修复了一些潜在的 bug 和性能问题
This commit is contained in:
parent
bf40695812
commit
2b9b0423ed
5 changed files with 121 additions and 0 deletions
|
|
@ -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<DepartmentEntity, BasePageDto
|
|||
}
|
||||
return this.findById(DEFAULT_DEPARTMENT_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer delete(String id) {
|
||||
DepartmentEntity department = this.findById(id);
|
||||
if (ObjectUtils.isEmpty(department)){
|
||||
return 1;
|
||||
}
|
||||
HashSet<String> deptIds = new HashSet<>();
|
||||
deptIds.add(id);
|
||||
|
||||
List<DepartmentEntity> departments = findTreeAll(id, null);
|
||||
collectDeleteIds(departments, deptIds);
|
||||
|
||||
deptIds.forEach(super::delete);
|
||||
return 1;
|
||||
}
|
||||
|
||||
private void collectDeleteIds(List<DepartmentEntity> departments, HashSet<String> ids) {
|
||||
List<DepartmentEntity> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<MenuEntity, BasePageDto<MenuEntity>
|
|||
}
|
||||
return menuEntityList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer delete(String id) {
|
||||
MenuEntity menuEntity = this.findById(id);
|
||||
if (ObjectUtils.isEmpty(menuEntity)) {
|
||||
return 1;
|
||||
}
|
||||
HashSet<String> menuIds = new HashSet<>();
|
||||
menuIds.add(id);
|
||||
List<MenuEntity> 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<MenuEntity> menus, Set<String> ids) {
|
||||
List<MenuEntity> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<PermissionEntity, BasePageDto
|
|||
}
|
||||
return this.findById(parentPermission.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer delete(String id) {
|
||||
PermissionEntity permissionEntity = this.findById(id);
|
||||
if (ObjectUtils.isEmpty(permissionEntity)) {
|
||||
return 1;
|
||||
}
|
||||
HashSet<String> permissionIds = new HashSet<>();
|
||||
permissionIds.add(id);
|
||||
List<PermissionEntity> 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<PermissionEntity> permissions, HashSet<String> ids) {
|
||||
List<PermissionEntity> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,4 +65,12 @@ public class RoleService extends BaseService<RoleEntity, BasePageDto<RoleEntity>
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,6 +53,8 @@ public class UserService extends BaseService<UserEntity, UserPageDto> {
|
|||
public Integer delete(String id) {
|
||||
// 退出用户
|
||||
StpUtil.logout(id);
|
||||
// 删除用户关联角色-中间表
|
||||
this.userMapper.deleteFromTable("system_c_user_role", "user_id", id);
|
||||
return super.delete(id);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue