From 7a2fbae8b6c0f9eb6dab7dc91b435c967b2faa8e Mon Sep 17 00:00:00 2001 From: ZhengJie <201507802@qq.com> Date: Sat, 23 May 2020 17:35:07 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BB=A3=E7=A0=81=E5=AE=8C=E5=96=84](v2.5):?= =?UTF-8?q?=20v2.5=20beta=20=E8=A7=92=E8=89=B2=E3=80=81=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E3=80=81=E5=B2=97=E4=BD=8D=E5=88=A0=E9=99=A4=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新详情:https://www.ydyno.com/archives/1225.html --- .../java/me/zhengjie/utils/ThrowableUtil.java | 14 ----------- .../system/repository/RoleRepository.java | 9 +++++++ .../system/repository/UserRepository.java | 24 +++++++++++++++++++ .../modules/system/rest/DeptController.java | 8 +++---- .../modules/system/rest/JobController.java | 8 +++---- .../modules/system/rest/RoleController.java | 8 +++---- .../modules/system/service/DeptService.java | 6 +++++ .../modules/system/service/JobService.java | 6 +++++ .../modules/system/service/RoleService.java | 6 +++++ .../system/service/impl/DeptServiceImpl.java | 13 ++++++++++ .../system/service/impl/JobServiceImpl.java | 10 ++++++++ .../system/service/impl/RoleServiceImpl.java | 8 +++++++ 12 files changed, 91 insertions(+), 29 deletions(-) diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/ThrowableUtil.java b/eladmin-common/src/main/java/me/zhengjie/utils/ThrowableUtil.java index 775459c2..075a65c5 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/ThrowableUtil.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/ThrowableUtil.java @@ -15,8 +15,6 @@ */ package me.zhengjie.utils; -import me.zhengjie.exception.BadRequestException; -import org.hibernate.exception.ConstraintViolationException; import java.io.PrintWriter; import java.io.StringWriter; @@ -36,16 +34,4 @@ public class ThrowableUtil { return sw.toString(); } } - - public static void throwForeignKeyException(Throwable e, String msg){ - Throwable t = e.getCause(); - while ((t != null) && !(t instanceof ConstraintViolationException)) { - t = t.getCause(); - } - if (t != null) { - throw new BadRequestException(msg); - } - assert false; - throw new BadRequestException("删除失败"); - } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/RoleRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/RoleRepository.java index a0c4c720..d761cee2 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/RoleRepository.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/RoleRepository.java @@ -57,4 +57,13 @@ public interface RoleRepository extends JpaRepository, JpaSpecificat @Modifying @Query(value = "delete from sys_roles_menus where menu_id = ?1",nativeQuery = true) void untiedMenu(Long id); + + /** + * 根据部门查询 + * @param deptIds / + * @return / + */ + @Query(value = "select count(1) from sys_role r, sys_roles_depts d where " + + "r.role_id = d.role_id and d.dept_id in ?1",nativeQuery = true) + int countByDepts(Set deptIds); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/UserRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/UserRepository.java index f82a709a..7cd5a85f 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/UserRepository.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/UserRepository.java @@ -95,4 +95,28 @@ public interface UserRepository extends JpaRepository, JpaSpecificat * @param ids / */ void deleteAllByIdIn(Set ids); + + /** + * 根据岗位查询 + * @param ids / + * @return / + */ + @Query(value = "SELECT count(1) FROM sys_user u, sys_users_jobs j WHERE u.user_id = j.user_id AND j.job_id IN ?1", nativeQuery = true) + int countByJobs(Set ids); + + /** + * 根据部门查询 + * @param deptIds / + * @return / + */ + @Query(value = "SELECT count(1) FROM sys_user u WHERE u.dept_id IN ?1", nativeQuery = true) + int countByDepts(Set deptIds); + + /** + * 根据角色查询 + * @return / + */ + @Query(value = "SELECT count(1) FROM sys_user u, sys_users_roles r WHERE " + + "u.user_id = r.user_id AND r.role_id in ?1", nativeQuery = true) + int countByRoles(Set ids); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java index 79b8a168..26ada083 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java @@ -113,11 +113,9 @@ public class DeptController { deptDtos = deptService.getDeleteDepts(deptList, deptDtos); } } - try { - deptService.delete(deptDtos); - }catch (Throwable e){ - ThrowableUtil.throwForeignKeyException(e, "所选部门中存在岗位或者角色关联,请取消关联后再试"); - } + // 验证是否被角色或用户关联 + deptService.verification(deptDtos); + deptService.delete(deptDtos); return new ResponseEntity<>(HttpStatus.OK); } } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java index b479519e..7257f8e8 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java @@ -89,11 +89,9 @@ public class JobController { @DeleteMapping @PreAuthorize("@el.check('job:del')") public ResponseEntity delete(@RequestBody Set ids){ - try { - jobService.delete(ids); - }catch (Throwable e){ - ThrowableUtil.throwForeignKeyException(e, "所选岗位存在用户关联,请取消关联后再试"); - } + // 验证是否被用户关联 + jobService.verification(ids); + jobService.delete(ids); return new ResponseEntity<>(HttpStatus.OK); } } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java index ac99ee9c..de49a55c 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java @@ -136,11 +136,9 @@ public class RoleController { RoleDto role = roleService.findById(id); getLevels(role.getLevel()); } - try { - roleService.delete(ids); - } catch (Throwable e){ - ThrowableUtil.throwForeignKeyException(e, "所选角色存在用户关联,请取消关联后再试"); - } + // 验证是否被用户关联 + roleService.verification(ids); + roleService.delete(ids); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java index 677d0c5f..ae1b6672 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java @@ -116,4 +116,10 @@ public interface DeptService { * @return */ List getDeptChildren(Long deptId, List deptList); + + /** + * 验证是否被角色或用户关联 + * @param deptDtos / + */ + void verification(Set deptDtos); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/JobService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/JobService.java index 1a30d651..5b6fa85b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/JobService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/JobService.java @@ -79,4 +79,10 @@ public interface JobService { * @throws IOException / */ void download(List queryAll, HttpServletResponse response) throws IOException; + + /** + * 验证是否被用户关联 + * @param ids / + */ + void verification(Set ids); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java index 5fb58f3b..a157a191 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java @@ -120,4 +120,10 @@ public interface RoleService { * @return 权限信息 */ List mapToGrantedAuthorities(UserDto user); + + /** + * 验证是否被用户关联 + * @param ids / + */ + void verification(Set ids); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java index 21d7440d..7a335dc3 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java @@ -21,6 +21,7 @@ import lombok.RequiredArgsConstructor; import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.domain.Dept; import me.zhengjie.modules.system.domain.User; +import me.zhengjie.modules.system.repository.RoleRepository; import me.zhengjie.modules.system.repository.UserRepository; import me.zhengjie.modules.system.service.dto.DeptDto; import me.zhengjie.modules.system.service.dto.DeptQueryCriteria; @@ -57,6 +58,7 @@ public class DeptServiceImpl implements DeptService { private final DeptMapper deptMapper; private final UserRepository userRepository; private final RedisUtils redisUtils; + private final RoleRepository roleRepository; @Override public List queryAll(DeptQueryCriteria criteria, Boolean isQuery) throws Exception { @@ -240,6 +242,17 @@ public class DeptServiceImpl implements DeptService { deptRepository.updateSubCntById(count, deptId); } + @Override + public void verification(Set deptDtos) { + Set deptIds = deptDtos.stream().map(DeptDto::getId).collect(Collectors.toSet()); + if(userRepository.countByDepts(deptIds) > 0){ + throw new BadRequestException("所选部门存在用户关联,请解除后再试!"); + } + if(roleRepository.countByDepts(deptIds) > 0){ + throw new BadRequestException("所选部门存在角色关联,请解除后再试!"); + } + } + /** * 清理缓存 * @param id / diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java index 4873820a..8c0e3700 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java @@ -16,8 +16,10 @@ package me.zhengjie.modules.system.service.impl; import lombok.RequiredArgsConstructor; +import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.EntityExistException; import me.zhengjie.modules.system.domain.Job; +import me.zhengjie.modules.system.repository.UserRepository; import me.zhengjie.modules.system.service.dto.JobQueryCriteria; import me.zhengjie.utils.*; import me.zhengjie.modules.system.repository.JobRepository; @@ -49,6 +51,7 @@ public class JobServiceImpl implements JobService { private final JobRepository jobRepository; private final JobMapper jobMapper; private final RedisUtils redisUtils; + private final UserRepository userRepository; @Override public Map queryAll(JobQueryCriteria criteria, Pageable pageable) { @@ -114,4 +117,11 @@ public class JobServiceImpl implements JobService { } FileUtil.downloadExcel(list, response); } + + @Override + public void verification(Set ids) { + if(userRepository.countByJobs(ids) > 0){ + throw new BadRequestException("所选的岗位中存在用户关联,请解除关联再试!"); + } + } } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java index 00c8f76c..73254309 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java @@ -16,6 +16,7 @@ package me.zhengjie.modules.system.service.impl; import lombok.RequiredArgsConstructor; +import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.modules.system.domain.Role; import me.zhengjie.exception.EntityExistException; @@ -202,4 +203,11 @@ public class RoleServiceImpl implements RoleService { redisUtils.delByKeys("menu::user:",userIds); redisUtils.delByKeys("role::auth:",userIds); } + + @Override + public void verification(Set ids) { + if(userRepository.countByRoles(ids) > 0){ + throw new BadRequestException("所选角色存在用户关联,请解除关联再试!"); + } + } }