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} + +