feat:[REQ-3282] 暂时提交

This commit is contained in:
liuyang 2024-12-24 15:03:30 +08:00
parent 9cba45b82d
commit 9404a4b845
4 changed files with 122 additions and 9 deletions

View File

@ -101,8 +101,26 @@ public class OrgNodeDTO implements Serializable {
private Long updateBy; private Long updateBy;
private Long isDelete = 0L; private Long isDelete = 0L;
/**
* 父级节点
*/
private OrgNodeDTO parentNode; private OrgNodeDTO parentNode;
/**
* 祖父节点
*/
private List<OrgNodeDTO> ancestorNodes;
/**
* 子节点
*/
private List<OrgNodeDTO> childrenNode;
/**
* 子孙节点
*/
private List<OrgNodeDTO> descendantNodes;
/** /**
* 协同关系信息 * 协同关系信息
*/ */

View File

@ -60,5 +60,4 @@ public interface NodeFoundationService {
* @return * @return
*/ */
<R, T extends OrganizationalNode> Set<R> extract(List<T> currentNodeList, Function<T, R> function); <R, T extends OrganizationalNode> Set<R> extract(List<T> currentNodeList, Function<T, R> function);
} }

View File

@ -14,13 +14,15 @@ import cn.axzo.orgmanax.server.node.foundation.NodeFoundationService;
import cn.axzo.orgmanax.server.node.foundation.req.NodeCreate; import cn.axzo.orgmanax.server.node.foundation.req.NodeCreate;
import cn.axzo.orgmanax.server.node.foundation.req.NodeUpdate; import cn.axzo.orgmanax.server.node.foundation.req.NodeUpdate;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.*;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;

View File

@ -13,6 +13,7 @@ import cn.axzo.orgmanax.infra.client.tyr.dto.BatchSuperAdminListResp;
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip; import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository; import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository;
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser; import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository; import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
@ -29,6 +30,7 @@ import cn.hutool.core.util.BooleanUtil;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -119,7 +121,7 @@ public class NodeServiceImpl implements NodeService {
// 根据项目ID获取topNodeId进行组织节点过滤 // 根据项目ID获取topNodeId进行组织节点过滤
if (CollUtil.isNotEmpty(req.getWorkspaceIds())) { if (CollUtil.isNotEmpty(req.getWorkspaceIds())) {
List<Long> topNodeIds = CollUtil.map(cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder() List<Long> topNodeIds = CollUtil.map(cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder()
.workspaceIds(req.getWorkspaceIds()) .workspaceIds(req.getWorkspaceIds())
.workspaceOuPairs(BeanUtil.copyToList(req.getWorkspaceOuPairs(), CooperateShipQueryRepository.WorkspaceOuPair.class)) .workspaceOuPairs(BeanUtil.copyToList(req.getWorkspaceOuPairs(), CooperateShipQueryRepository.WorkspaceOuPair.class))
.build()), SaasCooperateShip::getOrganizationalNodeId, true); .build()), SaasCooperateShip::getOrganizationalNodeId, true);
@ -135,23 +137,29 @@ public class NodeServiceImpl implements NodeService {
return emptyPageResp; return emptyPageResp;
} }
// 转换为DTO
List<OrgNodeDTO> records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeDTO.class)).collect(Collectors.toList());
// 是否查询父级节点 // 是否查询父级节点
if (BooleanUtil.isTrue(req.getIncludeParent())) { if (BooleanUtil.isTrue(req.getIncludeParent())) {
Set<Long> parentIds = nodeFoundationService.extractParentIds(page.getData()); Set<Long> parentIds = nodeFoundationService.extractParentIds(page.getData());
List<NodeQueryRepository.NodeResp> parentNodes = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder().ids(parentIds).build()); List<NodeQueryRepository.NodeResp> parentNodes = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder().ids(parentIds).build());
page.getData().addAll(parentNodes); assembleParentNodes(records, parentNodes);
} }
// 是否查询祖父节点 // 是否查询祖父节点
if (BooleanUtil.isTrue(req.getIncludeAncestors())) { if (BooleanUtil.isTrue(req.getIncludeAncestors())) {
Set<Long> ancestorIds = nodeFoundationService.extractAncestorIds(page.getData()); Set<Long> ancestorIds = nodeFoundationService.extractAncestorIds(page.getData());
List<NodeQueryRepository.NodeResp> parentNodes = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder().ids(ancestorIds).build()); List<NodeQueryRepository.NodeResp> parentNodes = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder().ids(ancestorIds).build());
page.getData().addAll(parentNodes); if (CollUtil.isNotEmpty(parentNodes)) {
assembleParentNodes(records, parentNodes);
assembleAncestorNodes(records, parentNodes);
}
} }
// 是否查询子孙节点 // 是否查询子孙节点
if (BooleanUtil.isTrue(req.getIncludeDescendants())) { if (BooleanUtil.isTrue(req.getIncludeDescendants())) {
Set<String> paths = nodeFoundationService.extractPaths(page.getData(), ","); Set<String> paths = nodeFoundationService.extractPaths(page.getData(), ",");
List<NodeQueryRepository.NodeResp> descendantsNodes = nodeQueryRepository.list( List<NodeQueryRepository.NodeResp> descendantsNodes = nodeQueryRepository.list(
NodeQueryRepository.ListReq.builder() NodeQueryRepository.ListReq.builder()
.pathsRight(paths).build()); .pathsRight(paths).build());
@ -164,11 +172,97 @@ public class NodeServiceImpl implements NodeService {
List<NodeQueryRepository.NodeResp> descendantShipNodes = nodeQueryRepository.list( List<NodeQueryRepository.NodeResp> descendantShipNodes = nodeQueryRepository.list(
NodeQueryRepository.ListReq.builder() NodeQueryRepository.ListReq.builder()
.parentIds(ids).build()); .parentIds(ids).build());
page.getData().addAll(descendantShipNodes); assembleChildrenNodes(records, descendantShipNodes);
} }
List<OrgNodeDTO> records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeDTO.class)).collect(Collectors.toList());
return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records); return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records);
} }
/**
* 聚合祖父节点
*
* @param nodes
* @param ancestorNodes
*/
public void assembleAncestorNodes(List<OrgNodeDTO> nodes, List<NodeQueryRepository.NodeResp> ancestorNodes) {
if (CollUtil.isEmpty(nodes) || CollUtil.isEmpty(ancestorNodes)) {
return;
}
Map<Long, NodeQueryRepository.NodeResp> parentNodeMap = ancestorNodes.stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity()));
nodes.forEach(e -> {
String[] parentIds = e.getPath().split(",");
e.setAncestorNodes(Arrays.stream(parentIds)
.map(Long::valueOf)
.map(parentNodeMap::get)
.map(t -> BeanUtil.copyProperties(t, OrgNodeDTO.class))
.filter(Objects::nonNull)
.collect(Collectors.toList()));
});
}
/**
* 聚合祖父节点
*
* @param nodes
* @param parentNodes
*/
public void assembleParentNodes(List<OrgNodeDTO> nodes, List<NodeQueryRepository.NodeResp> parentNodes) {
if (CollUtil.isEmpty(nodes) || CollUtil.isEmpty(parentNodes)) {
return;
}
Map<Long, NodeQueryRepository.NodeResp> parentNodeMap = parentNodes.stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity()));
nodes.forEach(e -> {
Long parentId = e.getParentId();
if (Objects.isNull(parentId) || parentId == 0) {
return;
}
NodeQueryRepository.NodeResp nodeResp = parentNodeMap.get(parentId);
e.setParentNode(BeanUtil.copyProperties(nodeResp, OrgNodeDTO.class));
});
}
/**
* 聚合祖父节点
*
* @param nodes
* @param childrenNodes
*/
public void assembleChildrenNodes(List<OrgNodeDTO> nodes, List<NodeQueryRepository.NodeResp> childrenNodes) {
if (CollUtil.isEmpty(nodes) || CollUtil.isEmpty(childrenNodes)) {
return;
}
Map<Long, NodeQueryRepository.NodeResp> childrenNodeMap = childrenNodes.stream()
.filter(t -> t.getParentId() != null && t.getParentId() != 0)
.collect(Collectors.toMap(NodeQueryRepository.NodeResp::getParentId, Function.identity()));
nodes.forEach(e -> {
NodeQueryRepository.NodeResp nodeResp = childrenNodeMap.get(e.getId());
e.setParentNode(BeanUtil.copyProperties(nodeResp, OrgNodeDTO.class));
});
}
/**
* 聚合祖父节点
*
* @param nodes
* @param descendantNodes
*/
// public void assembleDescendantNodes(List<OrgNodeDTO> nodes, List<NodeQueryRepository.NodeResp> descendantNodes) {
// if (CollUtil.isEmpty(nodes) || CollUtil.isEmpty(descendantNodes)) {
// return;
// }
// Map<Long, NodeQueryRepository.NodeResp> childrenNodeMap = descendantNodes.stream()
// .filter(t -> t.getParentId() != null && t.getParentId() != 0)
// .collect(Collectors.toMap(NodeQueryRepository.NodeResp::getParentId, Function.identity()));
// nodes.forEach(e -> {
// NodeQueryRepository.NodeResp nodeResp = childrenNodeMap.get(e.getId());
// e.setDescendantNodes(Arrays.stream(parentIds)
// .map(Long::valueOf)
// .map(parentNodeMap::get)
// .map(t -> BeanUtil.copyProperties(t, OrgNodeDTO.class))
// .filter(Objects::nonNull)
// .collect(Collectors.toList()));
// });
// }
} }