feature(REQ-3282): Node基于Processor方式写收口的方法demo step4
This commit is contained in:
parent
5172011d83
commit
f472e99396
@ -59,7 +59,8 @@ public class ProcessNodeReq {
|
||||
public enum Action {
|
||||
CREATE("创建", "createNodeProcessor"),
|
||||
UPDATE("普通更新", "updateNodeProcessor"),
|
||||
CHANGE_MANAGER("更换管理员", "changeNodeManagerProcessor");
|
||||
CHANGE_MANAGER("更换管理员", "changeNodeManagerProcessor"),
|
||||
CHANGE_TEAM_LEADER("更换班组长", "changeTeamLeaderProcessor");
|
||||
|
||||
private final String desc;
|
||||
private final String processor;
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
package cn.axzo.orgmanax.api.team;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.orgmanax.api.team.req.OrgCreateTeamReq;
|
||||
import cn.axzo.orgmanax.api.team.resp.OrgCreateTeamResp;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
/**
|
||||
* 班组相关API
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/2 15:40
|
||||
*/
|
||||
@FeignClient(
|
||||
value = "orgmanax",
|
||||
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
|
||||
public interface OrgTeamApi {
|
||||
|
||||
|
||||
/**
|
||||
* 创建项目班组
|
||||
* @param organizationalNodeCreateReq
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/org/project/create-team")
|
||||
ApiResult<OrgCreateTeamResp> createProjectTeam(@RequestBody OrgCreateTeamReq organizationalNodeCreateReq);
|
||||
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
package cn.axzo.orgmanax.api.team.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 创建班组请求实体
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/5 10:46
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class OrgCreateTeamReq {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long teamLeaderPersonId;
|
||||
|
||||
private Long inviteOuId;
|
||||
|
||||
private Long inviteWorkspaceId;
|
||||
|
||||
/**
|
||||
* 单位班组的节点ID
|
||||
*/
|
||||
private Long ouTeamNodeId;
|
||||
|
||||
|
||||
/**
|
||||
* 操作人ID: person id
|
||||
*/
|
||||
private Long operatorId;
|
||||
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
package cn.axzo.orgmanax.api.team.resp;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/5 10:55
|
||||
*/
|
||||
public class OrgCreateTeamResp {
|
||||
|
||||
private Long projectTeamId;
|
||||
|
||||
private String teamName;
|
||||
private Long organizationalNodeId;
|
||||
|
||||
}
|
||||
@ -29,6 +29,10 @@ public interface NodeQueryRepository {
|
||||
|
||||
PageResp<NodeResp> page(PageReq req);
|
||||
|
||||
default NodeResp one(OneReq req) {
|
||||
return oneOpt(req).orElse(null);
|
||||
}
|
||||
|
||||
default Optional<NodeResp> oneOpt(OneReq req) {
|
||||
req.check();
|
||||
PageReq page = BeanUtil.toBean(req, PageReq.class);
|
||||
|
||||
@ -2,6 +2,14 @@ package cn.axzo.orgmanax.infra.dao.node.repository;
|
||||
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
@ -11,4 +19,31 @@ public interface NodeUpsertRepository {
|
||||
OrganizationalNode create(OrganizationalNode node);
|
||||
|
||||
OrganizationalNode update(OrganizationalNode node);
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
class CreateReq {
|
||||
private OrganizationalNode node;
|
||||
/**
|
||||
* 场景描述,如 添加普通部门,添加班组 等
|
||||
*/
|
||||
private String scene;
|
||||
private Long operatorId;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
class UpdateReq {
|
||||
private Long id;
|
||||
private OrganizationalNode node;
|
||||
private String scene;
|
||||
/**
|
||||
* 由于updateById不支持将值设置为null,这里提供这个
|
||||
*/
|
||||
Set<SFunction<OrganizationalNode, ?>> setNullFields = new HashSet<>();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,21 +1,22 @@
|
||||
package cn.axzo.orgmanax.infra.dao.node.repository.impl;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.node.dao.NodeDao;
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.dao.NodeDao;
|
||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeUpsertRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/2 18:22
|
||||
*/
|
||||
|
||||
@Repository
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class NodeUpsertRepositoryImpl implements NodeUpsertRepository {
|
||||
|
||||
private final NodeDao nodeDao;
|
||||
|
||||
@Override
|
||||
public OrganizationalNode create(OrganizationalNode node) {
|
||||
nodeDao.save(node);
|
||||
|
||||
@ -46,4 +46,5 @@ public class NodeController implements OrgNodeApi {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.orgmanax.server.node.convert;
|
||||
|
||||
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
|
||||
import cn.axzo.orgmanax.server.node.foundation.node.entity.OrganizationalNodeCreate;
|
||||
import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@ -13,5 +13,5 @@ import org.mapstruct.factory.Mappers;
|
||||
public interface NodeApiConvert {
|
||||
|
||||
NodeApiConvert INSTANCE = Mappers.getMapper(NodeApiConvert.class);
|
||||
OrganizationalNodeCreate toFoundation(ProcessNodeReq req);
|
||||
NodeCreate toFoundation(ProcessNodeReq req);
|
||||
}
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation;
|
||||
|
||||
import cn.axzo.orgmanax.api.node.resp.ProcessOrgNodeResp;
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
public interface NodeFoundationService {
|
||||
/**
|
||||
* 创建部门
|
||||
*
|
||||
* @param nodeCreate
|
||||
* @return
|
||||
*/
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
OrganizationalNode create(NodeCreate nodeCreate);
|
||||
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation.node.convert;
|
||||
package cn.axzo.orgmanax.server.node.foundation.convert;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.server.node.foundation.node.entity.OrganizationalNodeCreate;
|
||||
import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@ -13,6 +13,6 @@ import org.mapstruct.factory.Mappers;
|
||||
public interface NodeConvert {
|
||||
NodeConvert INSTANCE = Mappers.getMapper(NodeConvert.class);
|
||||
|
||||
OrganizationalNode toDo(OrganizationalNodeCreate req);
|
||||
OrganizationalNode toDo(NodeCreate req);
|
||||
|
||||
}
|
||||
@ -1,11 +1,21 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation.node.entity;
|
||||
package cn.axzo.orgmanax.server.node.foundation.entity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 部门相关操作
|
||||
*
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/5 10:28
|
||||
*/
|
||||
public class OrganizationalNodeCreate {
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class NodeCreate {
|
||||
|
||||
|
||||
/**
|
||||
@ -36,7 +46,7 @@ public class OrganizationalNodeCreate {
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long crateBy;
|
||||
private Long operatorId;
|
||||
|
||||
|
||||
}
|
||||
@ -1,15 +1,12 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation.node.service;
|
||||
package cn.axzo.orgmanax.server.node.foundation.impl;
|
||||
|
||||
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.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 cn.axzo.orgmanax.server.node.foundation.NodeFoundationService;
|
||||
import cn.axzo.orgmanax.server.node.foundation.convert.NodeConvert;
|
||||
import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@ -22,7 +19,6 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
@RequiredArgsConstructor
|
||||
public class NodeFoundationServiceImpl implements NodeFoundationService {
|
||||
|
||||
private final NodeBasicCheck nodeBasicCheck;
|
||||
private final NodeQueryRepository nodeQueryRepository;
|
||||
private final NodeUpsertRepository nodeUpsertRepository;
|
||||
|
||||
@ -35,20 +31,16 @@ public class NodeFoundationServiceImpl implements NodeFoundationService {
|
||||
*/
|
||||
@Transactional
|
||||
@Override
|
||||
public ProcessOrgNodeResp create(OrganizationalNodeCreate organizationalNodeCreate) {
|
||||
|
||||
// 业务校验
|
||||
BizErrorInfo bizErrorInfo = nodeBasicCheck.createNodeCheck(organizationalNodeCreate);
|
||||
Assert.isTrue(bizErrorInfo.isSuccess(), bizErrorInfo.getErrorMsg());
|
||||
// 转换为领域对象
|
||||
// 持久化
|
||||
OrganizationalNode organizationalNode = NodeConvert.INSTANCE.toDo(organizationalNodeCreate);
|
||||
nodeUpsertRepository.create(organizationalNode);
|
||||
|
||||
public OrganizationalNode create(NodeCreate nodeCreate) {
|
||||
// 获取上级节点,为了重新计算path、topNodeId等数据
|
||||
OrganizationalNode parentNode = nodeQueryRepository
|
||||
.oneOpt(NodeQueryRepository.OneReq.builder().id(organizationalNode.getParentId()).build())
|
||||
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("父级部门不存在"));
|
||||
OrganizationalNode parentNode = nodeCreate.getParentId() == null || nodeCreate.getParentId() <= 0L ? null :
|
||||
nodeQueryRepository.oneOpt(NodeQueryRepository.OneReq.builder().id(nodeCreate.getParentId()).build())
|
||||
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("父级部门不存在"));
|
||||
|
||||
// 转换为领域对象
|
||||
// 持久化 -> mapstruct?
|
||||
OrganizationalNode organizationalNode = NodeConvert.INSTANCE.toDo(nodeCreate);
|
||||
nodeUpsertRepository.create(organizationalNode);
|
||||
|
||||
// 重新计算path、topNodeId等数据。 未来也可以添加workspaceId等信息
|
||||
organizationalNode.calcPath(parentNode);
|
||||
@ -60,10 +52,7 @@ public class NodeFoundationServiceImpl implements NodeFoundationService {
|
||||
// eventProducer.send(null);
|
||||
|
||||
// 返回结果
|
||||
return ProcessOrgNodeResp.builder()
|
||||
.id(organizationalNode.getId())
|
||||
// ....
|
||||
.build();
|
||||
return nodeQueryRepository.one(NodeQueryRepository.OneReq.builder().id(organizationalNode.getId()).build());
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation.node.check;
|
||||
|
||||
import cn.axzo.orgmanax.common.entity.BizErrorInfo;
|
||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||
import cn.axzo.orgmanax.server.node.foundation.node.entity.OrganizationalNodeCreate;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/2 20:17
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class NodeBasicCheck {
|
||||
|
||||
private final NodeQueryRepository nodeQueryRepository;
|
||||
|
||||
/** 返回值也可以封装成对象
|
||||
* @param organizationalNode
|
||||
* @return
|
||||
*/
|
||||
public BizErrorInfo createNodeCheck(OrganizationalNodeCreate organizationalNode) {
|
||||
// 重名校验
|
||||
// nodeQueryGateway.find(organizationalNode.getOrganizationalNodeName());
|
||||
|
||||
return BizErrorInfo.builder()
|
||||
.isSuccess(true)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@ -1,10 +0,0 @@
|
||||
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);
|
||||
}
|
||||
@ -20,10 +20,14 @@ public class ChangeTeamLeaderProcessor extends ChangeNodeManagerProcessor {
|
||||
|
||||
// 3. 老 班组长移除班组长角色,权限。 新班组长添加角色、权限
|
||||
|
||||
// 3.5 xxx
|
||||
|
||||
// 4. 更换项目内班组的班组长。(可异步处理)
|
||||
|
||||
// 5. 发送 业务MQ消息 - 「更换班组长」
|
||||
|
||||
// 6.
|
||||
|
||||
// 返回处理结果,可按需封装
|
||||
return nodeChangeManagerResult;
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@ import cn.axzo.foundation.event.support.producer.EventProducer;
|
||||
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.server.node.foundation.node.service.NodeFoundationService;
|
||||
import cn.axzo.orgmanax.server.node.foundation.NodeFoundationService;
|
||||
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@ -4,7 +4,7 @@ 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.foundation.NodeFoundationService;
|
||||
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user