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