forked from github/cool-admin-java
feat: 部门删除前校验是否有用户,有用户则拒绝删除
This commit is contained in:
+17
-15
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user