角色删除(若角色仍绑定用户则拒绝删除并返回错误信息);适配了组织机构树返回时orgscope为空时,默认全量可见。

This commit is contained in:
wanxiaoli 2026-07-31 14:14:15 +08:00
parent a6791810c1
commit ca1a0254b3
5 changed files with 71 additions and 3 deletions

View File

@ -289,8 +289,8 @@ public class SysRoleController {
/*********************************** /***********************************
* 用途说明根据id删除角色 * 用途说明根据id删除角色
* 参数说明 * 参数说明
*id 角色id * id 角色id支持逗号分隔批量
* 返回值说明: 是否删除成功 * 返回值说明: 成功返回 success若角色仍绑定用户则拒绝删除并返回错误信息Fail-Fast批量中只要有一个绑定则全部不删除
***********************************/ ***********************************/
@PostMapping("/deleteById") @PostMapping("/deleteById")
@Operation(summary = "根据id删除角色") @Operation(summary = "根据id删除角色")

View File

@ -25,6 +25,8 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
************************************/ ************************************/
List<Map<String, String>> isRoleUsersByroleid(String roleid); List<Map<String, String>> isRoleUsersByroleid(String roleid);
List<Map<String, Object>> countRoleUsersByRoleIds(@Param("roleIds") List<String> roleIds);
/*********************************** /***********************************
* 用途说明根据角色id查询是否存在权限 * 用途说明根据角色id查询是否存在权限
* 参数说明 * 参数说明

View File

@ -86,7 +86,9 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
ids.addAll(stringList); ids.addAll(stringList);
ids.addAll(set); ids.addAll(set);
} }
queryWrapper.in("id", ids); if (ObjectUtil.isNotEmpty(ids)) {
queryWrapper.in("id", ids);
}
} }
listMap = this.listMaps(queryWrapper.orderByAsc("orgcode")); listMap = this.listMaps(queryWrapper.orderByAsc("orgcode"));
for (int i = 0; i < listMap.size(); i++) { for (int i = 0; i < listMap.size(); i++) {

View File

@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Transactional;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -91,8 +92,59 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
***********************************/ ***********************************/
@Override @Override
public void deleteById(String id) { public void deleteById(String id) {
if (StringUtils.isBlank(id)) {
return;
}
String[] ids = id.split(","); String[] ids = id.split(",");
List<String> roleIds = new ArrayList<>();
for (String roleId : ids) { 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<Map<String, Object>> blocks =
roleMapper.countRoleUsersByRoleIds(roleIds);
if (blocks != null && !blocks.isEmpty()) {
StringBuilder message = new StringBuilder();
message.append("以下角色仍绑定用户,无法物理删除,请先解绑或转移用户:");
for (int i = 0; i < blocks.size(); i++) {
Map<String, Object> 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删除 角色 //根据id删除 角色
boolean isOk = this.removeById(roleId); boolean isOk = this.removeById(roleId);
if (!isOk) { if (!isOk) {

View File

@ -33,6 +33,18 @@
select id,roleid,userid from sys_role_users where roleid=#{roleid} select id,roleid,userid from sys_role_users where roleid=#{roleid}
</select> </select>
<select id="countRoleUsersByRoleIds" resultType="java.util.Map">
select r.id roleid, r.rolename rolename, count(ru.userid) userCount
from sys_role r
left join sys_role_users ru on ru.roleid = r.id
where r.id in
<foreach collection="roleIds" item="roleId" open="(" close=")" separator=",">
#{roleId}
</foreach>
group by r.id, r.rolename
having count(ru.userid) > 0
</select>
<!--根据角色id查询该角色下的所有权限--> <!--根据角色id查询该角色下的所有权限-->
<select id="isRoleMenuByRoleId" resultType="java.util.Map"> <select id="isRoleMenuByRoleId" resultType="java.util.Map">
select id,roleid,menuid from sys_role_menu where roleid=#{roleid} select id,roleid,menuid from sys_role_menu where roleid=#{roleid}