Merge remote-tracking branch 'origin/main'

# Conflicts:
#	cloud/web/web-system-8081/src/main/java/com/bgasol/web/system/menu/service/MenuService.java
This commit is contained in:
sol 2025-09-05 15:09:37 +08:00
commit c69c27fd06
7 changed files with 134 additions and 7 deletions

View file

@ -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);
}
}
}

View file

@ -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;
@ -152,8 +153,34 @@ public class MenuService extends BaseService<MenuEntity, BasePageDto<MenuEntity>
@Override
public Integer delete(String id) {
List<MenuEntity> treeAll = this.findTreeAll(id, null);
// 递归删除所有子菜单
return super.delete(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);
}
}
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}

View file

@ -51,7 +51,7 @@ public class UserController extends BaseController<
@PostMapping("/logout")
@Operation(summary = "用户登出", operationId = "logout")
@SaCheckPermission({"user:logout"})
// @SaCheckPermission({"user:logout"})
public BaseVo<?> logout() {
this.loginService.logout();
return BaseVo.success("登出成功");

View file

@ -13,6 +13,7 @@ import com.bgasol.web.system.user.mapper.UserMapper;
import com.pig4cloud.captcha.ArithmeticCaptcha;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -21,6 +22,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.UUID;
import static com.bgasol.common.constant.value.SystemConfigValues.ADMIN_USER_ID;
@Service
@RequiredArgsConstructor
@Transactional
@ -81,9 +84,19 @@ public class LoginService {
log.error("密码错误");
throw new BaseException("用户名或密码错误");
}
if (userEntity.getLocked()) {
log.error("用户已锁定");
throw new BaseException("用户已锁定");
if (!ADMIN_USER_ID.equals(userEntity.getId())) {
userEntity = this.userService.findById(userEntity.getId());
if (userEntity.getLocked()) {
log.error("用户已锁定");
throw new BaseException("用户已锁定");
}
if (ObjectUtils.isEmpty(userEntity.getRoles())) {
throw new BaseException("用户未绑定角色,无法登录");
}
if (ObjectUtils.isEmpty(userEntity.getDepartment())) {
throw new BaseException("用户未绑定部门,无法登录");
}
}
StpUtil.login(userEntity.getId());
return StpUtil.getTokenInfo();

View file

@ -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);
}