feat:[REQ-3488] 优化foundation创建节点和协同关系方法

This commit is contained in:
liuyang 2025-01-20 14:49:34 +08:00
parent cc932426ae
commit e3630e50ef
5 changed files with 57 additions and 16 deletions

View File

@ -73,7 +73,7 @@ public interface CooperateShipFoundationService {
<T> Collection<T> extract(Collection<SaasCooperateShip> currentNodeList, Function<SaasCooperateShip, T> function);
/**
* 创建协同关系
* 创建协同关系通用方法
*/
SaasCooperateShip create(CooperateShipCreator creator);
}

View File

@ -21,12 +21,36 @@ public class CooperateShipCreator {
@NotNull(message = "工作台ID为空")
private Long workspaceId;
/**
* 工作台名称
*/
@NotBlank(message = "工作台名称为空")
private String workspaceName;
/**
* 工作台类型
*/
@NotNull(message = "工作台类型为空")
private Integer workspaceType;
/**
* 组织节点ID
*/
@NotNull(message = "组织节点ID为空")
private Long organizationalNodeId;
/**
* 组织单位ID
*/
@NotNull(message = "组织单位ID为空")
private Long organizationalUnitId;
/**
* 组织单位名称
*/
@NotBlank(message = "组织单位名称为空")
private String organizationalUnitName;
/**
* 父级协同节点ID
*/

View File

@ -168,15 +168,6 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
Axssert.check(validationResult.isSuccess(), BizResultCode.INVALID_PARAM,
validationResult.getErrorMessages().stream().map(BeanValidationResult.ErrorMessage::getMessage).findFirst().orElse(""));
// 获取当前nodeId
OrganizationalNode node = nodeQueryRepository.getById(creator.getOrganizationalNodeId());
Axssert.check(node != null, BizResultCode.ENTITY_NOT_FOUND, "部门不存在", creator.getOrganizationalNodeId());
Axssert.check(node.isTopNode(), BizResultCode.INVALID_PARAM, "只有顶级节点才能添加协同关系");
// 单位校验
UnitQueryRepository.UnitResp unit = unitQueryRepository.getById(node.getOrganizationalUnitId());
Axssert.check(unit!= null, BizResultCode.ENTITY_NOT_FOUND, "组织单位不存在{}", node.getOrganizationalUnitId());
// 工作台校验
WorkspaceDetailResp workspace = workspaceGateway.getDetail(WorkspaceDetailReq.builder().id(creator.getWorkspaceId()).build());
Axssert.check(workspace!= null, BizResultCode.ENTITY_NOT_FOUND, "工作台不存在{}", creator.getWorkspaceId());
@ -197,8 +188,8 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
.workspaceName(workspace.getName())
.status(CooperateShipStatusEnum.PRESENT.getCode())
.joinAt(DateUtil.date())
.organizationalUnitId(node.getOrganizationalUnitId())
.organizationalUnitName(unit.getName())
.organizationalUnitId(creator.getOrganizationalUnitId())
.organizationalUnitName(creator.getOrganizationalUnitName())
.cooperateType(creator.getCooperateType())
.organizationalNodeId(creator.getOrganizationalNodeId())
.partnerShip(creator.getPartnerShip())

View File

@ -59,10 +59,21 @@ public class CooperateShipServiceImpl implements CooperateShipService {
@Override
public SaasCooperateShip create(CreateOrgCooperateShipReq req) {
// 获取当前nodeId
OrganizationalNode node = nodeQueryRepository.getById(req.getOrganizationalNodeId());
Axssert.check(node != null, BizResultCode.ENTITY_NOT_FOUND, "部门不存在", req.getOrganizationalNodeId());
Axssert.check(node.isTopNode(), BizResultCode.INVALID_PARAM, "只有顶级节点才能添加协同关系");
// 单位校验
UnitQueryRepository.UnitResp unit = unitQueryRepository.getById(node.getOrganizationalUnitId());
Axssert.check(unit != null, BizResultCode.ENTITY_NOT_FOUND, "组织单位不存在{}", node.getOrganizationalUnitId());
// 创建协同关系
return cooperateShipFoundationService.create(CooperateShipCreator.builder()
.workspaceId(req.getWorkspaceId())
.organizationalNodeId(req.getOrganizationalNodeId())
.organizationalUnitId(unit.getId())
.organizationalUnitName(unit.getName())
.parentId(req.getParentId())
.cooperateType(req.getCooperateType())
.partnerShip(req.getPartnerShip())

View File

@ -12,12 +12,14 @@ import cn.axzo.orgmanax.infra.client.workspace.WorkspaceGateway;
import cn.axzo.orgmanax.infra.client.workspace.dto.Workspace;
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
import cn.axzo.orgmanax.server.cooperateship.foundation.CooperateShipFoundationService;
import cn.axzo.orgmanax.server.cooperateship.foundation.dto.CooperateShipCreator;
import cn.axzo.orgmanax.server.cooperateship.service.CooperateShipService;
import cn.axzo.orgmanax.server.node.foundation.NodeFoundationService;
import cn.axzo.orgmanax.server.node.foundation.req.NodeCreate;
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -36,21 +38,30 @@ public class CreateNodeProcessor implements NodeProcessor {
private final NodeFoundationService nodeFoundationService;
private final CooperateShipFoundationService cooperateShipFoundationService;
private final WorkspaceGateway workspaceGateway;
private final UnitQueryRepository unitQueryRepository;
@Override
public ProcessResult process(ProcessContext context) {
// 转成该处理器关注的参数对象
NodeCreate nodeCreate = context.getParams().toJavaObject(NodeCreate.class);
// 保存node节点
OrganizationalNode savedNode = nodeFoundationService.create(nodeCreate);
// 初始化协同关系
initCooperateShipIfNeeded(savedNode, nodeCreate);
initCooperateShipIfNeeded(savedNode, nodeCreate.getOperatorId());
// 返回数据
return ProcessResult.success((JSONObject) JSONObject.toJSON(savedNode));
return ProcessResult.success((JSONObject) JSON.toJSON(savedNode));
}
protected void initCooperateShipIfNeeded(OrganizationalNode node, NodeCreate nodeCreate) {
/**
* 初始化协同关系
* @param node
* @param operatorId
*/
protected void initCooperateShipIfNeeded(OrganizationalNode node, Long operatorId) {
if (node == null) {
return;
}
@ -70,6 +81,8 @@ public class CreateNodeProcessor implements NodeProcessor {
.organizationUnitId(node.getOrganizationalUnitId())
.build()).stream().findFirst().orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("没有企业工作台"));
UnitQueryRepository.UnitResp unit = unitQueryRepository.getById(node.getOrganizationalUnitId());
// 创建协同关系
cooperateShipFoundationService.create(CooperateShipCreator.builder()
.workspaceId(workspace.getId())
@ -77,7 +90,9 @@ public class CreateNodeProcessor implements NodeProcessor {
.partnerShip(SaasCooperateShip.ParterShipEnum.OWNED.getCode())
.organizationalNodeId(node.getTopNodeId())
.parentId(0L)
.operatorId(nodeCreate.getOperatorId())
.operatorId(operatorId)
.organizationalUnitId(node.getOrganizationalUnitId())
.organizationalUnitName(unit.getName())
.build());
}
}