修复删除机构时判断子机构可以删除

This commit is contained in:
albed 2021-12-06 17:02:47 +08:00
parent ab065f31a2
commit ca199ce3bc
2 changed files with 26 additions and 22 deletions

View File

@ -56,7 +56,7 @@ public enum SysOrgExceptionEnum implements AbstractBaseExceptionEnum {
/**
* 该机构下有员工
*/
ORG_CANNOT_DELETE(4, "该机构下有员工,无法删除"),
ORG_CANNOT_DELETE(4, "该机构或子机构下有员工,无法删除"),
/**
* 父节点不能和本节点一致请重新选择父节点

View File

@ -206,31 +206,35 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
SysOrg sysOrg = this.querySysOrg(sysOrgParam);
Long id = sysOrg.getId();
boolean superAdmin = LoginContextHolder.me().isSuperAdmin();
if (!superAdmin) {
List<Long> dataScope = LoginContextHolder.me().getLoginUserDataScopeIdList();
//数据范围为空
if (ObjectUtil.isEmpty(dataScope)) {
throw new PermissionException(PermissionExceptionEnum.NO_PERMISSION_OPERATE);
} else if (!dataScope.contains(id)) {
//所操作的数据不在自己的数据范围内
throw new PermissionException(PermissionExceptionEnum.NO_PERMISSION_OPERATE);
}
}
// 该机构下有员工则不能删
boolean hasOrgEmp = sysEmpService.hasOrgEmp(id);
if (hasOrgEmp) {
throw new ServiceException(SysOrgExceptionEnum.ORG_CANNOT_DELETE);
}
// 该附属机构下若有员工则不能删除
boolean hasExtOrgEmp = sysEmpExtOrgPosService.hasExtOrgEmp(id);
if (hasExtOrgEmp) {
throw new ServiceException(SysOrgExceptionEnum.ORG_CANNOT_DELETE);
}
// 级联删除子节点
List<Long> childIdList = this.getChildIdListById(id);
childIdList.add(id);
childIdList.forEach(item ->{
if (!superAdmin) {
List<Long> dataScope = LoginContextHolder.me().getLoginUserDataScopeIdList();
//数据范围为空
if (ObjectUtil.isEmpty(dataScope)) {
throw new PermissionException(PermissionExceptionEnum.NO_PERMISSION_OPERATE);
} else if (!dataScope.contains(item)) {
//所操作的数据不在自己的数据范围内
throw new PermissionException(PermissionExceptionEnum.NO_PERMISSION_OPERATE);
}
}
// 该机构下有员工则不能删
boolean hasOrgEmp = sysEmpService.hasOrgEmp(item);
if (hasOrgEmp) {
throw new ServiceException(SysOrgExceptionEnum.ORG_CANNOT_DELETE);
}
// 该附属机构下若有员工则不能删除
boolean hasExtOrgEmp = sysEmpExtOrgPosService.hasExtOrgEmp(item);
if (hasExtOrgEmp) {
throw new ServiceException(SysOrgExceptionEnum.ORG_CANNOT_DELETE);
}
});
LambdaUpdateWrapper<SysOrg> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(SysOrg::getId, childIdList)
.set(SysOrg::getStatus, CommonStatusEnum.DELETED.getCode());