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

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
continew-admin-system/src/main/java/top/charles7c/cnadmin/system

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;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;
import top.charles7c.cnadmin.system.model.entity.UserDO;
@ -88,4 +90,22 @@ public interface UserService {
* @return 用户信息
*/
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.DeptVO;
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>
implements DeptService {
private final UserService userService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long create(DeptRequest request) {
@ -80,6 +83,7 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(List<Long> ids) {
CheckUtils.throwIf(() -> userService.countByDeptIds(ids) > 0, "所选部门存在用户关联,请解除关联后重试");
super.delete(ids);
baseMapper.delete(Wrappers.<DeptDO>lambdaQuery().in(DeptDO::getParentId, ids));
}

View File

@ -16,6 +16,8 @@
package top.charles7c.cnadmin.system.service.impl;
import java.util.List;
import lombok.RequiredArgsConstructor;
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.RoleVO;
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>
implements RoleService {
private final UserService userService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long create(RoleRequest request) {
@ -67,6 +72,13 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO,
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.time.LocalDateTime;
import java.util.List;
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.validate.CheckUtils;
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.UserRoleDO;
import top.charles7c.cnadmin.system.service.UserService;
/**
@ -56,6 +59,7 @@ import top.charles7c.cnadmin.system.service.UserService;
public class UserServiceImpl implements UserService, CommonUserService {
private final UserMapper userMapper;
private final UserRoleMapper userRoleMapper;
private final LocalStorageProperties localStorageProperties;
@Override
@ -157,6 +161,16 @@ public class UserServiceImpl implements UserService, CommonUserService {
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
public String getNicknameById(Long userId) {
return this.getById(userId).getNickname();