feature(REQ-3282): Node基于Processor方式写收口的方法demo step3

This commit is contained in:
周敏 2024-12-09 11:01:01 +08:00
parent b540bf0919
commit f4d1687219
5 changed files with 115 additions and 29 deletions

View File

@ -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);
}

View File

@ -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);
// 获取上级节点为了重新计算pathtopNodeId等数据
OrganizationalNode parentNode = nodeQueryRepository.findById(organizationalNode.getParentId());
OrganizationalNode parentNode = nodeQueryRepository
.oneOpt(NodeQueryRepository.OneReq.builder().id(organizationalNode.getParentId()).build())
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("父级部门不存在"));
// 重新计算pathtopNodeId等数据 未来也可以添加workspaceId等信息
organizationalNode.calcPath(parentNode);
@ -52,8 +56,8 @@ public class NodeFoundationServiceImpl {
//更新数据
nodeUpsertRepository.update(organizationalNode);
// 发送消息
// 发送数据变更基础MQ
// eventProducer.send(null);
// 返回结果
return ProcessOrgNodeResp.builder()

View File

@ -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;
}
}

View File

@ -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, "操作人不能为空");
}
}
}

View File

@ -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, "班组长不能为空");
}
}
}