diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/UserRoleMapper.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/UserRoleMapper.java new file mode 100644 index 00000000..ef79777c --- /dev/null +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/UserRoleMapper.java @@ -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 {} diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/UserRoleDO.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/UserRoleDO.java new file mode 100644 index 00000000..51e5e46a --- /dev/null +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/UserRoleDO.java @@ -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; +} diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserService.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserService.java index e5715b3c..c2059a61 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserService.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserService.java @@ -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 deptIds); + + /** + * 根据角色 ID 列表查询 + * + * @param roleIds + * 角色 ID 列表 + * @return 用户数量 + */ + Long countByRoleIds(List roleIds); } diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java index 7ad62612..6b7576cb 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java @@ -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 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 ids) { + CheckUtils.throwIf(() -> userService.countByDeptIds(ids) > 0, "所选部门存在用户关联,请解除关联后重试"); super.delete(ids); baseMapper.delete(Wrappers.lambdaQuery().in(DeptDO::getParentId, ids)); } diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java index b697feea..412ae743 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java @@ -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 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 ids) { + CheckUtils.throwIf(() -> userService.countByRoleIds(ids) > 0, "所选角色存在用户关联,请解除关联后重试"); + super.delete(ids); + } + /** * 检查名称是否存在 * diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserServiceImpl.java index 69fcc541..152c9a9b 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserServiceImpl.java @@ -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 deptIds) { + return userMapper.selectCount(Wrappers.lambdaQuery().in(UserDO::getDeptId, deptIds)); + } + + @Override + public Long countByRoleIds(List roleIds) { + return userRoleMapper.selectCount(Wrappers.lambdaQuery().in(UserRoleDO::getRoleId, roleIds)); + } + @Override public String getNicknameById(Long userId) { return this.getById(userId).getNickname();