feat:[REQ-3488] cooperateShip 创建方法,将通用创建能力下沉到foundation层中
This commit is contained in:
parent
fe1d733c66
commit
6e23456512
@ -46,7 +46,10 @@
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>event-support-lib</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.orgmanax.server.cooperateship.event.inner.payload;
|
||||
package cn.axzo.orgmanax.dto.cooperateship.event;
|
||||
|
||||
import cn.axzo.foundation.event.support.AbstractDiffablePayload;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -12,8 +12,8 @@ import lombok.NoArgsConstructor;
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class CoopeateShipUpsertedPayload extends AbstractDiffablePayload<SaasCooperateShip> {
|
||||
private SaasCooperateShip oldValue;
|
||||
private SaasCooperateShip newValue;
|
||||
public class CoopeateShipUpsertedPayload extends AbstractDiffablePayload<OrgCooperateShipDTO> {
|
||||
private OrgCooperateShipDTO oldValue;
|
||||
private OrgCooperateShipDTO newValue;
|
||||
private JSONObject ext;
|
||||
}
|
||||
@ -22,7 +22,7 @@ public class CreateOrgCooperateShipReq {
|
||||
private Long organizationalNodeId;
|
||||
|
||||
/**
|
||||
* 上级节点
|
||||
* 上级节点(非顶级节点时必填)
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package cn.axzo.orgmanax.server.cooperateship.foundation;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.server.cooperateship.foundation.dto.CooperateShipCreator;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@ -71,4 +72,8 @@ public interface CooperateShipFoundationService {
|
||||
*/
|
||||
<T> Collection<T> extract(Collection<SaasCooperateShip> currentNodeList, Function<SaasCooperateShip, T> function);
|
||||
|
||||
/**
|
||||
* 创建协同关系
|
||||
*/
|
||||
SaasCooperateShip create(CooperateShipCreator creator);
|
||||
}
|
||||
|
||||
@ -0,0 +1,66 @@
|
||||
package cn.axzo.orgmanax.server.cooperateship.foundation.dto;
|
||||
|
||||
import cn.axzo.apollo.workspace.api.v2.workspace.resp.WorkspaceDetailResp;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class CooperateShipCreator {
|
||||
|
||||
/**
|
||||
* 工作台ID
|
||||
*/
|
||||
private Long workspaceId;
|
||||
|
||||
/**
|
||||
* 工作台名称
|
||||
*/
|
||||
private String workspaceName;
|
||||
|
||||
/**
|
||||
* 工作台类型
|
||||
*/
|
||||
private Integer workspaceType;
|
||||
|
||||
/**
|
||||
* 组织节点ID
|
||||
*/
|
||||
private Long organizationalNodeId;
|
||||
|
||||
/**
|
||||
* 组织单位ID
|
||||
*/
|
||||
private Long organizationalUnitId;
|
||||
|
||||
/**
|
||||
* 组织单位名称
|
||||
*/
|
||||
private String organizationalUnitName;
|
||||
|
||||
/**
|
||||
* 父级协同节点ID
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 协同类型
|
||||
*/
|
||||
private Integer cooperateType;
|
||||
|
||||
/**
|
||||
* 协作关系
|
||||
*/
|
||||
private Integer partnerShip;
|
||||
|
||||
/**
|
||||
* 操作人ID
|
||||
*/
|
||||
private Long operatorId;
|
||||
|
||||
|
||||
}
|
||||
@ -1,25 +1,37 @@
|
||||
package cn.axzo.orgmanax.server.cooperateship.foundation.impl;
|
||||
|
||||
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO;
|
||||
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
|
||||
import cn.axzo.foundation.event.support.Event;
|
||||
import cn.axzo.foundation.event.support.producer.EventProducer;
|
||||
import cn.axzo.foundation.exception.Axssert;
|
||||
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
|
||||
import cn.axzo.orgmanax.dto.cooperateship.enums.CooperateShipStatusEnum;
|
||||
import cn.axzo.orgmanax.dto.cooperateship.enums.CooperateShipTypeEnum;
|
||||
import cn.axzo.orgmanax.infra.client.workspace.WorkspaceGateway;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipUpsertRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJob;
|
||||
import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository;
|
||||
import cn.axzo.orgmanax.server.cooperateship.event.inner.CooperateShipEventType;
|
||||
import cn.axzo.orgmanax.dto.cooperateship.event.CoopeateShipUpsertedPayload;
|
||||
import cn.axzo.orgmanax.server.cooperateship.foundation.CooperateShipFoundationService;
|
||||
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
|
||||
import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobFoundationService;
|
||||
import cn.axzo.orgmanax.server.cooperateship.foundation.dto.CooperateShipCreator;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollStreamUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@ -28,6 +40,24 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
|
||||
|
||||
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||
private final OrgJobQueryRepository jobQueryRepository;
|
||||
private final CooperateShipQueryRepository cooperateShipQueryRepository;
|
||||
private final CooperateShipUpsertRepository cooperateShipUpsertRepository;
|
||||
private final EventProducer eventProducer;
|
||||
private final WorkspaceGateway workspaceGateway;
|
||||
|
||||
/**
|
||||
* 顶级协同关系类型
|
||||
*/
|
||||
private static final Set<Integer> ALLOWED_TOP_COOPERATE_TYPES = ImmutableSet.of(
|
||||
CooperateShipTypeEnum.PROJ_PRIMARY_CONTRACTING_UNIT.getCode(),
|
||||
CooperateShipTypeEnum.PROJ_CONSTRUCTION_UNIT.getCode(),
|
||||
CooperateShipTypeEnum.PROJ_SUPERVISION_UNIT.getCode(),
|
||||
CooperateShipTypeEnum.OMS.getCode(),
|
||||
CooperateShipTypeEnum.ENT_COMMON.getCode(),
|
||||
CooperateShipTypeEnum.SURVEY_UNIT.getCode(),
|
||||
CooperateShipTypeEnum.DESIGN_UNIT.getCode(),
|
||||
CooperateShipTypeEnum.OTHER.getCode()
|
||||
);
|
||||
|
||||
@Override
|
||||
public void filterNodeIdsByPerson(Long filterPersonId, Collection<SaasCooperateShip> cooperateShips, Boolean includeExitPerson, Collection<String> excludeJobCodes) {
|
||||
@ -109,4 +139,58 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
|
||||
return currentNodeList.stream().map(function).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public SaasCooperateShip create(CooperateShipCreator creator) {
|
||||
|
||||
// 如果parentId不为空, 查询父级协同节点
|
||||
SaasCooperateShip parentCooperateShip = null;
|
||||
if (Objects.nonNull(creator.getParentId()) && creator.getParentId() > 0) {
|
||||
parentCooperateShip = cooperateShipQueryRepository
|
||||
.oneOpt(CooperateShipQueryRepository.OneReq.builder().id(creator.getParentId()).build())
|
||||
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("父级协同部门不存在{}", creator.getOrganizationalNodeId()));
|
||||
Axssert.check(Objects.equals(parentCooperateShip.getWorkspaceId(), creator.getWorkspaceId()), BizResultCode.INVALID_PARAM, "父级协同部门和要加入部门不是同一个工作台");
|
||||
}
|
||||
|
||||
// 创建协同关系
|
||||
SaasCooperateShip cooperateShip = SaasCooperateShip.builder()
|
||||
.parentId(creator.getParentId())
|
||||
.workspaceId(creator.getWorkspaceId())
|
||||
.workspaceType(creator.getWorkspaceType())
|
||||
.workspaceName(creator.getWorkspaceName())
|
||||
.status(CooperateShipStatusEnum.PRESENT.getCode())
|
||||
.joinAt(new Date())
|
||||
.organizationalUnitId(creator.getOrganizationalUnitId())
|
||||
.organizationalUnitName(creator.getOrganizationalUnitName())
|
||||
.cooperateType(creator.getCooperateType())
|
||||
.organizationalNodeId(creator.getOrganizationalNodeId())
|
||||
.partnerShip(creator.getPartnerShip())
|
||||
.createBy(creator.getOperatorId())
|
||||
.build();
|
||||
SaasCooperateShip savedCooperateShip = cooperateShipUpsertRepository.create(cooperateShip);
|
||||
|
||||
|
||||
// 更新协同关系路径
|
||||
savedCooperateShip.calcPath(parentCooperateShip);
|
||||
SaasCooperateShip saved = cooperateShipUpsertRepository.update(CooperateShipUpsertRepository.UpdateReq.builder()
|
||||
.id(savedCooperateShip.getId())
|
||||
.path(savedCooperateShip.getPath())
|
||||
.build());
|
||||
|
||||
// 发送领域事件
|
||||
eventProducer.send(Event.builder()
|
||||
.eventCode(CooperateShipEventType.COOPERATE_SHIP_UPSERTED.getEventCode())
|
||||
.operatorId(Convert.toStr(creator.getOperatorId()))
|
||||
.operatorType(getClass().getSimpleName())
|
||||
.targetType("cooperate_ship_id")
|
||||
.targetId(cooperateShip.getId() + "")
|
||||
.shardingKey(saved.getOrganizationalNodeId() + "")
|
||||
.data(CoopeateShipUpsertedPayload.builder()
|
||||
.newValue(BeanUtil.copyProperties(saved, OrgCooperateShipDTO.class))
|
||||
.oldValue(null)
|
||||
.build())
|
||||
.build());
|
||||
// 返回结果
|
||||
return cooperateShipQueryRepository.one(CooperateShipQueryRepository.OneReq.builder().id(saved.getId()).build());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -19,8 +19,9 @@ import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
|
||||
import cn.axzo.orgmanax.server.cooperateship.event.inner.CooperateShipEventType;
|
||||
import cn.axzo.orgmanax.server.cooperateship.event.inner.payload.CoopeateShipUpsertedPayload;
|
||||
import cn.axzo.orgmanax.dto.cooperateship.event.CoopeateShipUpsertedPayload;
|
||||
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.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
@ -63,69 +64,33 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
@Override
|
||||
public SaasCooperateShip create(CreateOrgCooperateShipReq req) {
|
||||
|
||||
// node check
|
||||
// 获取组织节点
|
||||
OrganizationalNode node = nodeQueryRepository.oneOpt(NodeQueryRepository.OneReq.builder().id(req.getOrganizationalNodeId()).build())
|
||||
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("部门不存在{}", req.getOrganizationalNodeId()));
|
||||
Axssert.check(node.isTopNode(), BizResultCode.INVALID_PARAM, "只有顶级节点才能添加协同关系");
|
||||
|
||||
// workspace check
|
||||
// 获取工作台信息
|
||||
WorkspaceDetailResp workspace = workspaceGateway.getDetail(WorkspaceDetailReq.builder().id(req.getWorkspaceId()).build());
|
||||
Axssert.checkNonNull(workspace, "工作台不存在{}", req.getWorkspaceId());
|
||||
|
||||
// cooperate check
|
||||
SaasCooperateShip parentShip = null;
|
||||
if (!ALLOWED_TOP_COOPERATE_TYPES.contains(req.getCooperateType())) {
|
||||
Axssert.check(req.getParentId() > 0L, BizResultCode.INVALID_PARAM, "父级协同类型不能为空");
|
||||
parentShip = cooperateShipQueryRepository
|
||||
.oneOpt(CooperateShipQueryRepository.OneReq.builder().id(req.getParentId()).build())
|
||||
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("父级协同部门不存在{}", req.getOrganizationalNodeId()));
|
||||
Axssert.check(Objects.equals(parentShip.getWorkspaceId(), req.getWorkspaceId()), BizResultCode.INVALID_PARAM, "父级协同部门和要加入部门不是同一个工作台");
|
||||
}
|
||||
|
||||
// unit check
|
||||
// 获取组织单位
|
||||
UnitQueryRepository.UnitResp unit = unitQueryRepository.oneOpt(UnitQueryRepository.OneReq.builder()
|
||||
.id(node.getId())
|
||||
.build()).orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("单位不存在{}", node.getOrganizationalUnitId()));
|
||||
SaasCooperateShip cooperateShip = SaasCooperateShip.builder()
|
||||
.parentId(req.getParentId())
|
||||
.workspaceId(workspace.getId())
|
||||
.workspaceType(workspace.getWorkspaceType())
|
||||
|
||||
// 创建协同关系
|
||||
return cooperateShipFoundationService.create(CooperateShipCreator.builder()
|
||||
.workspaceId(req.getWorkspaceId())
|
||||
.workspaceName(workspace.getName())
|
||||
.status(CooperateShipStatusEnum.PRESENT.getCode())
|
||||
.joinAt(new Date())
|
||||
.organizationalUnitId(node.getOrganizationalUnitId())
|
||||
.workspaceType(workspace.getWorkspaceType())
|
||||
.organizationalNodeId(req.getOrganizationalNodeId())
|
||||
.organizationalUnitId(unit.getId())
|
||||
.organizationalUnitName(unit.getName())
|
||||
.parentId(req.getParentId())
|
||||
.cooperateType(req.getCooperateType())
|
||||
.organizationalNodeId(node.getId())
|
||||
.partnerShip(req.getPartnerShip())
|
||||
.createBy(req.getOperatorId())
|
||||
.build();
|
||||
|
||||
SaasCooperateShip savedCooperateShip = cooperateShipUpsertRepository.create(cooperateShip);
|
||||
|
||||
// update path
|
||||
savedCooperateShip.calcPath(parentShip);
|
||||
SaasCooperateShip saved = cooperateShipUpsertRepository.update(CooperateShipUpsertRepository.UpdateReq.builder()
|
||||
.id(savedCooperateShip.getId())
|
||||
.path(savedCooperateShip.getPath())
|
||||
.operatorId(req.getOperatorId())
|
||||
.build());
|
||||
|
||||
// 发送数据变更基础MQ
|
||||
eventProducer.send(Event.builder()
|
||||
.eventCode(CooperateShipEventType.COOPERATE_SHIP_UPSERTED.getEventCode())
|
||||
.operatorId(req.getOperatorId() + "")
|
||||
.operatorType(getClass().getSimpleName())
|
||||
.targetType("cooperate_ship_id")
|
||||
.targetId(cooperateShip.getId() + "")
|
||||
.shardingKey(saved.getOrganizationalNodeId() + "")
|
||||
.data(CoopeateShipUpsertedPayload.builder()
|
||||
.newValue(saved)
|
||||
.oldValue(null)
|
||||
.build())
|
||||
.build());
|
||||
|
||||
// 返回结果
|
||||
return cooperateShipQueryRepository.one(CooperateShipQueryRepository.OneReq.builder().id(saved.getId()).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -202,7 +167,7 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
|
||||
// 是否查询子孙节点
|
||||
if (BooleanUtil.isTrue(req.getIncludeChildren())) {
|
||||
Collection<Long> ids = cooperateShipFoundationService.extract(currentNodeList, SaasCooperateShip::getId);
|
||||
Collection<Long> ids = CollUtil.map(currentNodeList, SaasCooperateShip::getId, true);
|
||||
List<SaasCooperateShip> childrenShipNodes = cooperateShipQueryRepository.list(
|
||||
CooperateShipQueryRepository.ListReq.builder()
|
||||
.statuses(req.getStatuses())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user