From ca1a0254b38ed0a5df22f8195041b45cfed249e8 Mon Sep 17 00:00:00 2001 From: wanxiaoli Date: Fri, 31 Jul 2026 14:14:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=88=A0=E9=99=A4=EF=BC=88?= =?UTF-8?q?=E8=8B=A5=E8=A7=92=E8=89=B2=E4=BB=8D=E7=BB=91=E5=AE=9A=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=88=99=E6=8B=92=E7=BB=9D=E5=88=A0=E9=99=A4=E5=B9=B6?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF=EF=BC=89?= =?UTF-8?q?=EF=BC=9B=E9=80=82=E9=85=8D=E4=BA=86=E7=BB=84=E7=BB=87=E6=9C=BA?= =?UTF-8?q?=E6=9E=84=E6=A0=91=E8=BF=94=E5=9B=9E=E6=97=B6orgscope=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E6=97=B6=EF=BC=8C=E9=BB=98=E8=AE=A4=E5=85=A8=E9=87=8F?= =?UTF-8?q?=E5=8F=AF=E8=A7=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/SysRoleController.java | 4 +- .../platform/system/mapper/SysRoleMapper.java | 2 + .../impl/SysOrganizationServiceImpl.java | 4 +- .../service/impl/SysRoleServiceImpl.java | 52 +++++++++++++++++++ .../resources/mapper/system/SysRoleMapper.xml | 12 +++++ 5 files changed, 71 insertions(+), 3 deletions(-) diff --git a/framework/src/main/java/com/yfd/platform/system/controller/SysRoleController.java b/framework/src/main/java/com/yfd/platform/system/controller/SysRoleController.java index ea2fa0f..4604670 100644 --- a/framework/src/main/java/com/yfd/platform/system/controller/SysRoleController.java +++ b/framework/src/main/java/com/yfd/platform/system/controller/SysRoleController.java @@ -289,8 +289,8 @@ public class SysRoleController { /*********************************** * 用途说明:根据id删除角色 * 参数说明 - *id 角色id - * 返回值说明: 是否删除成功 + * id 角色id(支持逗号分隔批量) + * 返回值说明: 成功返回 success;若角色仍绑定用户则拒绝删除并返回错误信息(Fail-Fast:批量中只要有一个绑定则全部不删除) ***********************************/ @PostMapping("/deleteById") @Operation(summary = "根据id删除角色") diff --git a/framework/src/main/java/com/yfd/platform/system/mapper/SysRoleMapper.java b/framework/src/main/java/com/yfd/platform/system/mapper/SysRoleMapper.java index acb7a81..5e1f96c 100644 --- a/framework/src/main/java/com/yfd/platform/system/mapper/SysRoleMapper.java +++ b/framework/src/main/java/com/yfd/platform/system/mapper/SysRoleMapper.java @@ -25,6 +25,8 @@ public interface SysRoleMapper extends BaseMapper { ************************************/ List> isRoleUsersByroleid(String roleid); + List> countRoleUsersByRoleIds(@Param("roleIds") List roleIds); + /*********************************** * 用途说明:根据角色id查询是否存在权限 * 参数说明 diff --git a/framework/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java b/framework/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java index 01ea014..ab50293 100644 --- a/framework/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java +++ b/framework/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java @@ -86,7 +86,9 @@ public class SysOrganizationServiceImpl extends ServiceImpl impl ***********************************/ @Override public void deleteById(String id) { + if (StringUtils.isBlank(id)) { + return; + } String[] ids = id.split(","); + List roleIds = new ArrayList<>(); for (String roleId : ids) { + if (StringUtils.isBlank(roleId)) { + continue; + } + String trimmed = roleId.trim(); + if (StringUtils.isBlank(trimmed)) { + continue; + } + if (!roleIds.contains(trimmed)) { + roleIds.add(trimmed); + } + } + if (roleIds.isEmpty()) { + return; + } + List> blocks = + roleMapper.countRoleUsersByRoleIds(roleIds); + if (blocks != null && !blocks.isEmpty()) { + StringBuilder message = new StringBuilder(); + message.append("以下角色仍绑定用户,无法物理删除,请先解绑或转移用户:"); + for (int i = 0; i < blocks.size(); i++) { + Map block = blocks.get(i); + Object roleIdObj = block.get("roleid"); + if (roleIdObj == null) { + roleIdObj = block.get("roleId"); + } + Object roleNameObj = block.get("rolename"); + if (roleNameObj == null) { + roleNameObj = block.get("roleName"); + } + Object userCountObj = block.get("userCount"); + if (userCountObj == null) { + userCountObj = block.get("usercount"); + } + String roleId = roleIdObj == null ? "" : roleIdObj.toString(); + String roleName = + roleNameObj == null ? "" : roleNameObj.toString(); + String userCount = + userCountObj == null ? "0" : userCountObj.toString(); + if (i > 0) { + message.append(";"); + } + message.append(roleName).append("(角色ID=").append(roleId) + .append(") ").append(userCount).append("人"); + } + throw new RuntimeException(message.toString()); + } + for (String roleId : roleIds) { //根据id删除 角色 boolean isOk = this.removeById(roleId); if (!isOk) { diff --git a/framework/src/main/resources/mapper/system/SysRoleMapper.xml b/framework/src/main/resources/mapper/system/SysRoleMapper.xml index 4b37516..aac28a8 100644 --- a/framework/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/framework/src/main/resources/mapper/system/SysRoleMapper.xml @@ -33,6 +33,18 @@ select id,roleid,userid from sys_role_users where roleid=#{roleid} + +