From cbe5f28a80356ddb04e7075436812e201ec3fb35 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Sun, 11 Jun 2023 14:16:53 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.6.0=E3=80=91=E3=80=90sys=E3=80=91?= =?UTF-8?q?=E3=80=90org=E3=80=91=E6=9B=B4=E6=96=B0=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E6=9C=BA=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/callback/RemoveOrgCallbackApi.java | 33 +++++++++++++++++++ .../roses/kernel/sys/api/enums/DemoEnum.java | 33 ------------------- .../enums/HrOrganizationExceptionEnum.java | 9 +++-- .../impl/HrOrganizationServiceImpl.java | 28 ++++++++++++++-- 4 files changed, 65 insertions(+), 38 deletions(-) create mode 100644 kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/callback/RemoveOrgCallbackApi.java delete mode 100644 kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/enums/DemoEnum.java rename kernel-s-sys/{sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org => sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api}/enums/HrOrganizationExceptionEnum.java (70%) diff --git a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/callback/RemoveOrgCallbackApi.java b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/callback/RemoveOrgCallbackApi.java new file mode 100644 index 000000000..1f169fcaa --- /dev/null +++ b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/callback/RemoveOrgCallbackApi.java @@ -0,0 +1,33 @@ +package cn.stylefeng.roses.kernel.sys.api.callback; + +import java.util.Set; + +/** + * 删除组织机构的回调方法 + * + * @author fengshuonan + * @since 2023/6/11 13:49 + */ +public interface RemoveOrgCallbackApi { + + /** + * 校验置顶orgId集合是否有和业务的绑定关系 + *

+ * 如果有绑定关系直接抛出异常即可 + * + * @param beRemovedOrgIdList 被删除的组织机构id集合 + * @author fengshuonan + * @since 2023/6/11 14:04 + */ + void validateHaveOrgBind(Set beRemovedOrgIdList); + + /** + * 删除组织机构的回调,删除组织机构后自动触发 + * + * @param beRemovedOrgIdList 被删除的组织机构id集合 + * @author fengshuonan + * @since 2023/6/11 13:50 + */ + void removeOrgAction(Set beRemovedOrgIdList); + +} diff --git a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/enums/DemoEnum.java b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/enums/DemoEnum.java deleted file mode 100644 index 01eb1b9fc..000000000 --- a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/enums/DemoEnum.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.stylefeng.roses.kernel.sys.api.enums; - -import lombok.Getter; - -/** - * 一个示例 - * - * @author fengshuonan - * @date 2023-06-10 20:50:43 - */ -@Getter -public enum DemoEnum { - - /** - * markdown格式 - */ - MARKDOWN(1, "markdown格式"), - - /** - * 富文本格式 - */ - TEXT(2, "富文本格式"); - - private final Integer code; - - private final String message; - - DemoEnum(Integer code, String message) { - this.code = code; - this.message = message; - } - -} diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/enums/HrOrganizationExceptionEnum.java b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/enums/HrOrganizationExceptionEnum.java similarity index 70% rename from kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/enums/HrOrganizationExceptionEnum.java rename to kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/enums/HrOrganizationExceptionEnum.java index c415b8ee6..6fee19e4d 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/enums/HrOrganizationExceptionEnum.java +++ b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/enums/HrOrganizationExceptionEnum.java @@ -1,4 +1,4 @@ -package cn.stylefeng.roses.kernel.sys.modular.org.enums; +package cn.stylefeng.roses.kernel.sys.api.enums; import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum; @@ -16,7 +16,12 @@ public enum HrOrganizationExceptionEnum implements AbstractExceptionEnum { /** * 查询结果不存在 */ - HR_ORGANIZATION_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"); + HR_ORGANIZATION_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"), + + /** + * 删除机构失败,该机构下有绑定员工 + */ + DELETE_ORGANIZATION_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10002", "删除机构失败,该机构下有绑定员工"); /** * 错误编码 diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java index e73392963..5c805370f 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java @@ -3,13 +3,16 @@ package cn.stylefeng.roses.kernel.sys.modular.org.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; +import cn.stylefeng.roses.kernel.db.api.context.DbOperatorContext; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory; +import cn.stylefeng.roses.kernel.sys.api.callback.RemoveOrgCallbackApi; +import cn.stylefeng.roses.kernel.sys.api.enums.HrOrganizationExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.org.entity.HrOrganization; -import cn.stylefeng.roses.kernel.sys.modular.org.enums.HrOrganizationExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.org.factory.OrganizationFactory; import cn.stylefeng.roses.kernel.sys.modular.org.mapper.HrOrganizationMapper; import cn.stylefeng.roses.kernel.sys.modular.org.pojo.request.HrOrganizationRequest; @@ -18,9 +21,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -44,9 +49,26 @@ public class HrOrganizationServiceImpl extends ServiceImpl totalOrgIdSet = DbOperatorContext.me().findSubListByParentId("hr_organization", "org_pids", "org_id", hrOrganizationRequest.getOrgId()); + totalOrgIdSet.add(hrOrganizationRequest.getOrgId()); + + // 判断业务是否和组织机构有绑定关系 + Map callbackApiMap = SpringUtil.getBeansOfType(RemoveOrgCallbackApi.class); + for (RemoveOrgCallbackApi removeOrgCallbackApi : callbackApiMap.values()) { + removeOrgCallbackApi.validateHaveOrgBind(totalOrgIdSet); + } + + // 联动删除所有和本组织机构相关其他业务数据 + for (RemoveOrgCallbackApi removeOrgCallbackApi : callbackApiMap.values()) { + removeOrgCallbackApi.removeOrgAction(totalOrgIdSet); + } + + // 批量删除所有相关节点 + this.removeBatchByIds(totalOrgIdSet); } @Override