feat: 部门删除前校验是否有用户,有用户则拒绝删除

This commit is contained in:
OpenCode
2026-07-09 17:21:39 +08:00
parent 5116128355
commit fdf88ffa8a
@@ -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<Long> 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<Long> result) {
List<BaseSysDepartmentEntity> children = list(
QueryWrapper.create().eq(BaseSysDepartmentEntity::getParentId, parentId));
for (BaseSysDepartmentEntity child : children) {
result.add(child.getId());
collectChildDeptIds(child.getId(), result);
}
return false;
}
}