From fdf88ffa8a80e297b8e19d9bd57f43b5622baf6a Mon Sep 17 00:00:00 2001 From: OpenCode Date: Thu, 9 Jul 2026 17:21:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=83=A8=E9=97=A8=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=89=8D=E6=A0=A1=E9=AA=8C=E6=98=AF=E5=90=A6=E6=9C=89=E7=94=A8?= =?UTF-8?q?=E6=88=B7=EF=BC=8C=E6=9C=89=E7=94=A8=E6=88=B7=E5=88=99=E6=8B=92?= =?UTF-8?q?=E7=BB=9D=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/BaseSysDepartmentServiceImpl.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/cool/modules/base/service/sys/impl/BaseSysDepartmentServiceImpl.java b/src/main/java/com/cool/modules/base/service/sys/impl/BaseSysDepartmentServiceImpl.java index 2c284cd..6f20ab2 100644 --- a/src/main/java/com/cool/modules/base/service/sys/impl/BaseSysDepartmentServiceImpl.java +++ b/src/main/java/com/cool/modules/base/service/sys/impl/BaseSysDepartmentServiceImpl.java @@ -2,6 +2,7 @@ package com.cool.modules.base.service.sys.impl; import cn.hutool.json.JSONObject; import com.cool.core.base.BaseServiceImpl; +import com.cool.core.exception.CoolPreconditions; import com.cool.core.util.CoolSecurityUtil; import com.cool.modules.base.entity.sys.BaseSysDepartmentEntity; import com.cool.modules.base.entity.sys.BaseSysUserEntity; @@ -64,21 +65,22 @@ public class BaseSysDepartmentServiceImpl extends @Override public boolean delete(JSONObject requestParams, Long... ids) { - super.delete(ids); - // 是否删除对应用户 否则移动到顶层部门 - if (requestParams.getBool("deleteUser")) { - return baseSysUserMapper - .deleteByQuery( - QueryWrapper.create().in(BaseSysUserEntity::getDepartmentId, (Object) ids)) > 0; - } else { - BaseSysDepartmentEntity topDepartment = getOne( - QueryWrapper.create().isNull(BaseSysDepartmentEntity::getParentId)); - if (topDepartment != null) { - UpdateChain.of(BaseSysUserEntity.class) - .set(BaseSysUserEntity::getDepartmentId, topDepartment.getId()) - .in(BaseSysUserEntity::getDepartmentId, (Object) ids).update(); - } + List allDeptIds = new ArrayList<>(List.of(ids)); + for (Long id : ids) { + collectChildDeptIds(id, allDeptIds); + } + long userCount = baseSysUserMapper.selectCountByQuery( + QueryWrapper.create().in(BaseSysUserEntity::getDepartmentId, allDeptIds)); + CoolPreconditions.check(userCount > 0, "该部门或其子部门下存在用户,无法删除"); + return super.delete(ids); + } + + private void collectChildDeptIds(Long parentId, List result) { + List children = list( + QueryWrapper.create().eq(BaseSysDepartmentEntity::getParentId, parentId)); + for (BaseSysDepartmentEntity child : children) { + result.add(child.getId()); + collectChildDeptIds(child.getId(), result); } - return false; } } \ No newline at end of file