From f4d1687219e27238dfc0548fa3a9a280db14b3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=95=8F?= Date: Mon, 9 Dec 2024 11:01:01 +0800 Subject: [PATCH] =?UTF-8?q?feature(REQ-3282):=20Node=E5=9F=BA=E4=BA=8EProc?= =?UTF-8?q?essor=E6=96=B9=E5=BC=8F=E5=86=99=E6=94=B6=E5=8F=A3=E7=9A=84?= =?UTF-8?q?=E6=96=B9=E6=B3=95demo=20step3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../node/service/NodeFoundationService.java | 10 ++++ .../service/NodeFoundationServiceImpl.java | 14 +++-- .../impl/ChangeTeamLeaderProcessor.java | 35 +++++++++++++ .../processor/impl/CreateNodeProcessor.java | 33 ++++-------- .../processor/impl/CreateTeamProcessor.java | 52 ++++++++++++++++++- 5 files changed, 115 insertions(+), 29 deletions(-) create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/node/service/NodeFoundationService.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/ChangeTeamLeaderProcessor.java diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/node/service/NodeFoundationService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/node/service/NodeFoundationService.java new file mode 100644 index 0000000..dcca1ac --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/node/service/NodeFoundationService.java @@ -0,0 +1,10 @@ +package cn.axzo.orgmanax.server.node.foundation.node.service; + +import cn.axzo.orgmanax.api.node.resp.ProcessOrgNodeResp; +import cn.axzo.orgmanax.server.node.foundation.node.entity.OrganizationalNodeCreate; +import org.springframework.transaction.annotation.Transactional; + +public interface NodeFoundationService { + @Transactional + ProcessOrgNodeResp create(OrganizationalNodeCreate organizationalNodeCreate); +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/node/service/NodeFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/node/service/NodeFoundationServiceImpl.java index 3864bf2..ca775fd 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/node/service/NodeFoundationServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/node/service/NodeFoundationServiceImpl.java @@ -1,12 +1,13 @@ package cn.axzo.orgmanax.server.node.foundation.node.service; import cn.axzo.orgmanax.api.node.resp.ProcessOrgNodeResp; +import cn.axzo.orgmanax.common.config.BizResultCode; import cn.axzo.orgmanax.common.entity.BizErrorInfo; import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.axzo.orgmanax.infra.dao.node.repository.NodeUpsertRepository; -import cn.axzo.orgmanax.server.node.foundation.node.convert.NodeConvert; import cn.axzo.orgmanax.server.node.foundation.node.check.NodeBasicCheck; +import cn.axzo.orgmanax.server.node.foundation.node.convert.NodeConvert; import cn.axzo.orgmanax.server.node.foundation.node.entity.OrganizationalNodeCreate; import cn.hutool.core.lang.Assert; import lombok.RequiredArgsConstructor; @@ -19,7 +20,7 @@ import org.springframework.transaction.annotation.Transactional; */ @Service @RequiredArgsConstructor -public class NodeFoundationServiceImpl { +public class NodeFoundationServiceImpl implements NodeFoundationService { private final NodeBasicCheck nodeBasicCheck; private final NodeQueryRepository nodeQueryRepository; @@ -33,6 +34,7 @@ public class NodeFoundationServiceImpl { * @return */ @Transactional + @Override public ProcessOrgNodeResp create(OrganizationalNodeCreate organizationalNodeCreate) { // 业务校验 @@ -44,7 +46,9 @@ public class NodeFoundationServiceImpl { nodeUpsertRepository.create(organizationalNode); // 获取上级节点,为了重新计算path、topNodeId等数据 - OrganizationalNode parentNode = nodeQueryRepository.findById(organizationalNode.getParentId()); + OrganizationalNode parentNode = nodeQueryRepository + .oneOpt(NodeQueryRepository.OneReq.builder().id(organizationalNode.getParentId()).build()) + .orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("父级部门不存在")); // 重新计算path、topNodeId等数据。 未来也可以添加workspaceId等信息 organizationalNode.calcPath(parentNode); @@ -52,8 +56,8 @@ public class NodeFoundationServiceImpl { //更新数据 nodeUpsertRepository.update(organizationalNode); - // 发送消息 - + // 发送数据变更基础MQ + // eventProducer.send(null); // 返回结果 return ProcessOrgNodeResp.builder() diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/ChangeTeamLeaderProcessor.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/ChangeTeamLeaderProcessor.java new file mode 100644 index 0000000..75c1c13 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/ChangeTeamLeaderProcessor.java @@ -0,0 +1,35 @@ +package cn.axzo.orgmanax.server.node.service.processor.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ChangeTeamLeaderProcessor extends ChangeNodeManagerProcessor { + + @Override + public ProcessResult process(ProcessContext context) { + // 1. additional pre check + // 新班组长 不能已经是其他班组的班组长 等 + + // 2. master data update -> change node manager + ProcessContext nodeProcessContext = toChangeNodeManagerContext(context); + ProcessResult nodeChangeManagerResult = super.process(nodeProcessContext); + + // 3. 老 班组长移除班组长角色,权限。 新班组长添加角色、权限 + + // 4. 更换项目内班组的班组长。(可异步处理) + + // 5. 发送 业务MQ消息 - 「更换班组长」 + + // 返回处理结果,可按需封装 + return nodeChangeManagerResult; + } + + ProcessContext toChangeNodeManagerContext(ProcessContext processContext) { + // TODO:转化成changeNodeManagerContext需要的参数 + return null; + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateNodeProcessor.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateNodeProcessor.java index 3aa6934..395557d 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateNodeProcessor.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateNodeProcessor.java @@ -1,11 +1,10 @@ package cn.axzo.orgmanax.server.node.service.processor.impl; import cn.axzo.foundation.event.support.producer.EventProducer; -import cn.axzo.framework.domain.data.AssertUtil; +import cn.axzo.foundation.exception.Axssert; +import cn.axzo.orgmanax.api.node.resp.ProcessOrgNodeResp; import cn.axzo.orgmanax.common.config.BizResultCode; -import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode; -import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; -import cn.axzo.orgmanax.infra.dao.node.repository.NodeUpsertRepository; +import cn.axzo.orgmanax.server.node.foundation.node.service.NodeFoundationService; import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; @@ -16,8 +15,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.util.Optional; - /** * 创建普通部门 */ @@ -25,8 +22,7 @@ import java.util.Optional; @Slf4j @RequiredArgsConstructor public class CreateNodeProcessor implements NodeProcessor { - private final NodeQueryRepository nodeQueryRepository; - private final NodeUpsertRepository nodeUpsertRepository; + private final NodeFoundationService nodeFoundationService; private final EventProducer eventProducer; @Override @@ -35,25 +31,14 @@ public class CreateNodeProcessor implements NodeProcessor { Param param = context.getParams().toJavaObject(Param.class); // basic check param.check(); - - // additional check - if (param.getParentId() != null && param.getParentId() > 0) { - // check parent exists and other restrictions - NodeQueryRepository.NodeResp parentNode = nodeQueryRepository.oneOpt(NodeQueryRepository.OneReq.builder() - .id(param.getParentId()) - .build()).orElseThrow(BizResultCode.ENTITY_NOT_FOUND::toException); - // other restrictions -// AssertUtil.isTrue(xxx,xx); - } - // 创建普通部门数据 - OrganizationalNode organizationalNode = nodeUpsertRepository.create(null); + ProcessOrgNodeResp processOrgNodeResp = nodeFoundationService.create(null); - // 发送部门创建MQ消息 - eventProducer.send(null); + // 发送部门创建MQ消息 - 业务事件 +// eventProducer.send(null); // 返回数据 - return ProcessResult.success((JSONObject) JSONObject.toJSON(organizationalNode)); + return ProcessResult.success((JSONObject) JSONObject.toJSON(processOrgNodeResp)); } @NoArgsConstructor @@ -62,9 +47,11 @@ public class CreateNodeProcessor implements NodeProcessor { @Builder public static class Param { private Long parentId; + private Long operatorId; public void check() { // checks + Axssert.notNull(operatorId, BizResultCode.INVALID_PARAM, "操作人不能为空"); } } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateTeamProcessor.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateTeamProcessor.java index f92ed58..9dab49e 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateTeamProcessor.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateTeamProcessor.java @@ -1,6 +1,16 @@ package cn.axzo.orgmanax.server.node.service.processor.impl; +import cn.axzo.foundation.exception.Axssert; +import cn.axzo.orgmanax.api.node.resp.ProcessOrgNodeResp; +import cn.axzo.orgmanax.common.config.BizResultCode; +import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; +import cn.axzo.orgmanax.server.node.foundation.node.service.NodeFoundationService; import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor; +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -9,8 +19,48 @@ import org.springframework.stereotype.Component; @Slf4j @RequiredArgsConstructor public class CreateTeamProcessor implements NodeProcessor { + private final NodeFoundationService nodeFoundationService; + private final NodeQueryRepository nodeQueryRepository; + @Override public ProcessResult process(ProcessContext context) { - return null; + // 转成该处理器关注的参数对象 + Param param = context.getParams().toJavaObject(Param.class); + // basic check + param.check(); + + // 班组长 check ,如 不能是其他班组的班组长 等 + + // 1. 创建普通部门 + ProcessOrgNodeResp processOrgNodeResp = nodeFoundationService.create(null); + + // 2. 创建班组长nodeUser + // nodeUserFoundationService.create(null); + + // 3. 给班组长设置角色 权限等操作 + + // 4. 其他行为 + + // 5. 发送部门创建MQ消息 - 「班组创建事件」 +// eventProducer.send(null); + + // 返回数据 + return ProcessResult.success((JSONObject) JSONObject.toJSON(processOrgNodeResp)); + } + + @NoArgsConstructor + @AllArgsConstructor + @Data + @Builder + public static class Param { + private Long parentId; + private Long teamLeaderPersonId; + private Long operatorId; + + public void check() { + // checks + Axssert.notNull(operatorId, BizResultCode.INVALID_PARAM, "操作人不能为空"); + Axssert.notNull(teamLeaderPersonId, BizResultCode.INVALID_PARAM, "班组长不能为空"); + } } }