From 25e66a64d575f53704e2cc82c4c86a31160bd059 Mon Sep 17 00:00:00 2001 From: wanxiaoli Date: Fri, 31 Jul 2026 16:19:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=84=E7=BB=87=E6=9C=BA=E6=9E=84=E5=88=A0?= =?UTF-8?q?=E9=99=A4=EF=BC=88=E7=BB=84=E7=BB=87=E6=88=96=E5=85=B6=E4=B8=8B?= =?UTF-8?q?=E7=BA=A7=E7=BB=84=E7=BB=87=E5=AD=98=E5=9C=A8=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=88=99=E6=8B=92=E7=BB=9D=E5=88=A0=E9=99=A4=E5=B9=B6=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SysOrganizationController.java | 76 ++++++++++++++++++- .../service/impl/SysRoleServiceImpl.java | 2 +- 2 files changed, 73 insertions(+), 5 deletions(-) diff --git a/framework/src/main/java/com/yfd/platform/system/controller/SysOrganizationController.java b/framework/src/main/java/com/yfd/platform/system/controller/SysOrganizationController.java index 9f51b71..e76e0b0 100644 --- a/framework/src/main/java/com/yfd/platform/system/controller/SysOrganizationController.java +++ b/framework/src/main/java/com/yfd/platform/system/controller/SysOrganizationController.java @@ -14,6 +14,8 @@ import com.yfd.platform.system.service.ISysOrganizationService; import com.yfd.platform.system.service.IUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import org.apache.commons.lang3.StringUtils; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; @@ -180,29 +182,95 @@ public class SysOrganizationController { /*********************************** * 用途说明:根据id删除系统组织框架 * 参数说明 - * id 系统组织框架id - * 返回值说明: 是否删除成功 + * id 组织ID(支持逗号分隔批量) + * 返回值说明: 成功返回 success;若组织或其下级组织存在用户则拒绝删除并返回错误信息(Fail-Fast:批量中只要有一个组织存在用户则全部不删除) ***********************************/ @Log(module = "系统组织框架", value = "根据ID删除企业或者部门!") @PostMapping("/deleteById") @Operation(summary = "根据id删除系统组织框架") @ResponseBody + @Transactional(rollbackFor = Exception.class) public ResponseResult deleteById(@RequestParam String id) { + if (StringUtils.isBlank(id)) { + return ResponseResult.success(); + } String[] orgIds = id.split(","); + List uniqueOrgIds = new ArrayList<>(); for (String orgId : orgIds) { + if (StringUtils.isBlank(orgId)) { + continue; + } + String trimmed = orgId.trim(); + if (StringUtils.isBlank(trimmed)) { + continue; + } + if (!uniqueOrgIds.contains(trimmed)) { + uniqueOrgIds.add(trimmed); + } + } + if (uniqueOrgIds.isEmpty()) { + return ResponseResult.success(); + } + Map> childIdsByOrgId = new LinkedHashMap<>(); + for (String orgId : uniqueOrgIds) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); List list = organizationService.list(queryWrapper.eq(SysOrganization::getParentid, orgId)); List ids = list.stream().map(SysOrganization::getId).collect(Collectors.toList()); - boolean isOk = organizationService.removeById(orgId); - if (!isOk) { + childIdsByOrgId.put(orgId, ids); + } + Map blocks = new LinkedHashMap<>(); + for (String orgId : uniqueOrgIds) { + SysOrganization org = organizationService.getById(orgId); + if (org == null) { continue; } + List scopeIds = new ArrayList<>(); + scopeIds.add(orgId); + List childIds = childIdsByOrgId.get(orgId); + if (childIds != null && !childIds.isEmpty()) { + scopeIds.addAll(childIds); + } + long userCount = + userService.count(new LambdaQueryWrapper().in( + SysUser::getOrgid, scopeIds)); + if (userCount > 0) { + blocks.put(orgId, userCount); + } + } + if (!blocks.isEmpty()) { + StringBuilder message = new StringBuilder(); + message.append("操作无法完成:该组织及其下级组织有用户关联,请先解绑用户:"); + int i = 0; + for (Map.Entry entry : blocks.entrySet()) { + String orgId = entry.getKey(); + SysOrganization org = organizationService.getById(orgId); + if (org == null) { + continue; + } + if (i > 0) { + message.append(";"); + } + message.append(org.getOrgname()).append("(组织ID=").append(orgId) + .append(") ").append(entry.getValue()).append("人"); + i++; + } + throw new RuntimeException(message.toString()); + } + for (String orgId : uniqueOrgIds) { + List ids = childIdsByOrgId.get(orgId); + if (ids == null || ids.isEmpty()) { + ids = Collections.emptyList(); + } for (String oid : ids) { organizationService.removeById(oid); } + boolean isOk = organizationService.removeById(orgId); + if (!isOk) { + continue; + } } return ResponseResult.success(); } diff --git a/framework/src/main/java/com/yfd/platform/system/service/impl/SysRoleServiceImpl.java b/framework/src/main/java/com/yfd/platform/system/service/impl/SysRoleServiceImpl.java index e948966..2085946 100644 --- a/framework/src/main/java/com/yfd/platform/system/service/impl/SysRoleServiceImpl.java +++ b/framework/src/main/java/com/yfd/platform/system/service/impl/SysRoleServiceImpl.java @@ -116,7 +116,7 @@ public class SysRoleServiceImpl extends ServiceImpl impl roleMapper.countRoleUsersByRoleIds(roleIds); if (blocks != null && !blocks.isEmpty()) { StringBuilder message = new StringBuilder(); - message.append("以下角色仍绑定用户,无法物理删除,请先解绑或转移用户:"); + message.append("操作无法完成:以下角色仍绑定用户,请先解绑用户:"); for (int i = 0; i < blocks.size(); i++) { Map block = blocks.get(i); Object roleIdObj = block.get("roleid");