修复:删除部门及角色时,新增检测是否存在关联用户

This commit is contained in:
Charles7c 2023-02-14 21:27:26 +08:00
parent 68a1da687f
commit fb740f2938
6 changed files with 125 additions and 0 deletions

View File

@ -0,0 +1,29 @@
/*
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package top.charles7c.cnadmin.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import top.charles7c.cnadmin.system.model.entity.UserRoleDO;
/**
* 用户和角色 Mapper
*
* @author Charles7c
* @since 2023/2/13 23:13
*/
public interface UserRoleMapper extends BaseMapper<UserRoleDO> {}

View File

@ -0,0 +1,46 @@
/*
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package top.charles7c.cnadmin.system.model.entity;
import java.io.Serializable;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* 用户和角色实体
*
* @author Charles7c
* @since 2023/2/13 23:13
*/
@Data
@TableName("sys_user_role")
public class UserRoleDO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户 ID
*/
private Long userId;
/**
* 角色 ID
*/
private Long roleId;
}

View File

@ -16,6 +16,8 @@
package top.charles7c.cnadmin.system.service; package top.charles7c.cnadmin.system.service;
import java.util.List;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import top.charles7c.cnadmin.system.model.entity.UserDO; import top.charles7c.cnadmin.system.model.entity.UserDO;
@ -88,4 +90,22 @@ public interface UserService {
* @return 用户信息 * @return 用户信息
*/ */
UserDO getById(Long userId); UserDO getById(Long userId);
/**
* 根据部门 ID 列表查询
*
* @param deptIds
* 部门 ID 列表
* @return 用户数量
*/
Long countByDeptIds(List<Long> deptIds);
/**
* 根据角色 ID 列表查询
*
* @param roleIds
* 角色 ID 列表
* @return 用户数量
*/
Long countByRoleIds(List<Long> roleIds);
} }

View File

@ -43,6 +43,7 @@ import top.charles7c.cnadmin.system.model.request.DeptRequest;
import top.charles7c.cnadmin.system.model.vo.DeptDetailVO; import top.charles7c.cnadmin.system.model.vo.DeptDetailVO;
import top.charles7c.cnadmin.system.model.vo.DeptVO; import top.charles7c.cnadmin.system.model.vo.DeptVO;
import top.charles7c.cnadmin.system.service.DeptService; import top.charles7c.cnadmin.system.service.DeptService;
import top.charles7c.cnadmin.system.service.UserService;
/** /**
* 部门业务实现类 * 部门业务实现类
@ -55,6 +56,8 @@ import top.charles7c.cnadmin.system.service.DeptService;
public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO, DeptDetailVO, DeptQuery, DeptRequest> public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO, DeptDetailVO, DeptQuery, DeptRequest>
implements DeptService { implements DeptService {
private final UserService userService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long create(DeptRequest request) { public Long create(DeptRequest request) {
@ -80,6 +83,7 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(List<Long> ids) { public void delete(List<Long> ids) {
CheckUtils.throwIf(() -> userService.countByDeptIds(ids) > 0, "所选部门存在用户关联,请解除关联后重试");
super.delete(ids); super.delete(ids);
baseMapper.delete(Wrappers.<DeptDO>lambdaQuery().in(DeptDO::getParentId, ids)); baseMapper.delete(Wrappers.<DeptDO>lambdaQuery().in(DeptDO::getParentId, ids));
} }

View File

@ -16,6 +16,8 @@
package top.charles7c.cnadmin.system.service.impl; package top.charles7c.cnadmin.system.service.impl;
import java.util.List;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -33,6 +35,7 @@ import top.charles7c.cnadmin.system.model.request.RoleRequest;
import top.charles7c.cnadmin.system.model.vo.RoleDetailVO; import top.charles7c.cnadmin.system.model.vo.RoleDetailVO;
import top.charles7c.cnadmin.system.model.vo.RoleVO; import top.charles7c.cnadmin.system.model.vo.RoleVO;
import top.charles7c.cnadmin.system.service.RoleService; import top.charles7c.cnadmin.system.service.RoleService;
import top.charles7c.cnadmin.system.service.UserService;
/** /**
* 角色业务实现类 * 角色业务实现类
@ -45,6 +48,8 @@ import top.charles7c.cnadmin.system.service.RoleService;
public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO, RoleDetailVO, RoleQuery, RoleRequest> public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO, RoleDetailVO, RoleQuery, RoleRequest>
implements RoleService { implements RoleService {
private final UserService userService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long create(RoleRequest request) { public Long create(RoleRequest request) {
@ -67,6 +72,13 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO,
super.update(request); super.update(request);
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(List<Long> ids) {
CheckUtils.throwIf(() -> userService.countByRoleIds(ids) > 0, "所选角色存在用户关联,请解除关联后重试");
super.delete(ids);
}
/** /**
* 检查名称是否存在 * 检查名称是否存在
* *

View File

@ -18,6 +18,7 @@ package top.charles7c.cnadmin.system.service.impl;
import java.io.File; import java.io.File;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -42,7 +43,9 @@ import top.charles7c.cnadmin.common.util.SecureUtils;
import top.charles7c.cnadmin.common.util.helper.LoginHelper; import top.charles7c.cnadmin.common.util.helper.LoginHelper;
import top.charles7c.cnadmin.common.util.validate.CheckUtils; import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.system.mapper.UserMapper; import top.charles7c.cnadmin.system.mapper.UserMapper;
import top.charles7c.cnadmin.system.mapper.UserRoleMapper;
import top.charles7c.cnadmin.system.model.entity.UserDO; import top.charles7c.cnadmin.system.model.entity.UserDO;
import top.charles7c.cnadmin.system.model.entity.UserRoleDO;
import top.charles7c.cnadmin.system.service.UserService; import top.charles7c.cnadmin.system.service.UserService;
/** /**
@ -56,6 +59,7 @@ import top.charles7c.cnadmin.system.service.UserService;
public class UserServiceImpl implements UserService, CommonUserService { public class UserServiceImpl implements UserService, CommonUserService {
private final UserMapper userMapper; private final UserMapper userMapper;
private final UserRoleMapper userRoleMapper;
private final LocalStorageProperties localStorageProperties; private final LocalStorageProperties localStorageProperties;
@Override @Override
@ -157,6 +161,16 @@ public class UserServiceImpl implements UserService, CommonUserService {
return userDO; return userDO;
} }
@Override
public Long countByDeptIds(List<Long> deptIds) {
return userMapper.selectCount(Wrappers.<UserDO>lambdaQuery().in(UserDO::getDeptId, deptIds));
}
@Override
public Long countByRoleIds(List<Long> roleIds) {
return userRoleMapper.selectCount(Wrappers.<UserRoleDO>lambdaQuery().in(UserRoleDO::getRoleId, roleIds));
}
@Override @Override
public String getNicknameById(Long userId) { public String getNicknameById(Long userId) {
return this.getById(userId).getNickname(); return this.getById(userId).getNickname();