feature(REQ-3282): Node基于Processor方式写收口的方法demo step3
This commit is contained in:
parent
b540bf0919
commit
f4d1687219
@ -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);
|
||||
}
|
||||
@ -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()
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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, "操作人不能为空");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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, "班组长不能为空");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user