From 0b6ca636f502e2efff299dc7edde2cf1f6bc3354 Mon Sep 17 00:00:00 2001 From: liuyang Date: Tue, 24 Dec 2024 09:54:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:[REQ-3282]=20=E6=9A=82=E6=97=B6?= =?UTF-8?q?=E6=8F=90=E4=BA=A4,=E5=AE=8C=E6=88=90=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../node/repository/NodeQueryRepository.java | 17 ++++++ .../impl/NodeQueryRepositoryImpl.java | 12 ++++- .../foundation/NodeFoundationService.java | 2 +- .../impl/NodeFoundationServiceImpl.java | 2 +- .../node/service/impl/NodeServiceImpl.java | 52 ++++++++++--------- 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java index 8e25c31..be80205 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java @@ -114,15 +114,32 @@ public interface NodeQueryRepository { @CriteriaField(field = "topNodeId", operator = Operator.IN) private Collection topNodeIds = Collections.emptySet(); + /** + * path右值 + */ + @CriteriaField(ignore = true) + @Builder.Default + private Set pathsRight = Collections.emptySet(); + + /** + * path右值 + */ + @CriteriaField(field = "parentId", operator = Operator.IN) + @Builder.Default + private Set parentIds = Collections.emptySet(); + + /** * 是否查询删除的 */ + @CriteriaField(ignore = true) @Builder.Default private Boolean includeDelete = false; /** * 只返回topNode节点 */ + @CriteriaField(ignore = true) @Builder.Default private Boolean isSelectTopNodeOnly = false; diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeQueryRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeQueryRepositoryImpl.java index fe183ad..f8ec562 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeQueryRepositoryImpl.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeQueryRepositoryImpl.java @@ -37,10 +37,20 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository { IPage page = PageConverter.toMybatis(req, OrganizationalNode.class); QueryWrapper wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNode.class); - if (req.getIsSelectTopNodeOnly()) { + if (BooleanUtil.isTrue(req.getIsSelectTopNodeOnly())) { wrapper.apply(" top_node_id = id "); } + // 查询子集 + if (CollUtil.isNotEmpty(req.getPathsRight())) { + // 遍历pathsRight转换成wrapper + wrapper.and(w -> { + for (String pathRight : req.getPathsRight()) { + w.or().likeRight("path", pathRight); + } + }); + } + IPage results = nodeDao.page(page, wrapper) .convert(e -> BeanUtil.toBean(e, NodeResp.class)); PageResp resp = PageConverter.toResp(results); diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/NodeFoundationService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/NodeFoundationService.java index 8fea06f..44bb9e4 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/NodeFoundationService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/NodeFoundationService.java @@ -59,6 +59,6 @@ public interface NodeFoundationService { * @param function * @return */ - Set extract(List currentNodeList, Function function); + Set extract(List currentNodeList, Function function); } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/impl/NodeFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/impl/NodeFoundationServiceImpl.java index 5985bbd..ca9d213 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/impl/NodeFoundationServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/impl/NodeFoundationServiceImpl.java @@ -116,7 +116,7 @@ public class NodeFoundationServiceImpl implements NodeFoundationService { } @Override - public Set extract(List list, Function function) { + public Set extract(List list, Function function) { return list.stream().map(function).collect(Collectors.toSet()); } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java index ef199d2..d31a386 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java @@ -135,36 +135,40 @@ public class NodeServiceImpl implements NodeService { return emptyPageResp; } - // 是否查询祖父节点 + // 是否查询父级节点 if (BooleanUtil.isTrue(req.getIncludeParent())) { - nodeFoundationService.extractParentIds(page.getData()); + Set parentIds = nodeFoundationService.extractParentIds(page.getData()); + List parentNodes = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder().ids(parentIds).build()); + page.getData().addAll(parentNodes); } + // 是否查询祖父节点 + if (BooleanUtil.isTrue(req.getIncludeAncestors())) { + Set ancestorIds = nodeFoundationService.extractAncestorIds(page.getData()); + List parentNodes = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder().ids(ancestorIds).build()); + page.getData().addAll(parentNodes); + } + + // 是否查询子孙节点 + if (BooleanUtil.isTrue(req.getIncludeDescendants())) { + Set paths = nodeFoundationService.extractPaths(page.getData(), ","); + List descendantsNodes = nodeQueryRepository.list( + NodeQueryRepository.ListReq.builder() + .pathsRight(paths).build()); + page.getData().addAll(descendantsNodes); + } + + // 是否查询子节点 + if (BooleanUtil.isTrue(req.getIncludeChildren())) { + Set ids = nodeFoundationService.extract(page.getData(), NodeQueryRepository.NodeResp::getId); + List descendantShipNodes = nodeQueryRepository.list( + NodeQueryRepository.ListReq.builder() + .parentIds(ids).build()); + page.getData().addAll(descendantShipNodes); + } List records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeDTO.class)).collect(Collectors.toList()); return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records); } -// private void assembleCooperateShip(List nodes) { -// List nodeTopNodeIds = nodes.stream().map(OrganizationalNodeResp::getTopNodeId).distinct().collect(Collectors.toList()); -// Map cooperateShips = saasCooperateShipDao.listByBO(SaasCooperateShipBO.builder() -// .organizationalNodeIds(nodeTopNodeIds) -// .build()).stream().collect(Collectors.toMap(SaasCooperateShip::getOrganizationalNodeId, Function.identity())); -// // 补充 workspaceId 和 cooperateType -// nodes.forEach(node -> { -// SaasCooperateShip cooperateShip = cooperateShips.get(node.getTopNodeId()); -// if (cooperateShip != null) { -// node.setWorkspaceId(cooperateShip.getWorkspaceId()); -// // 平台班组类型,找到的是 平台班组所属的企业 -// if (Objects.equals(node.getNodeType(), OrganizationalNodeTypeEnum.TEAM.getValue())) { -// node.setCooperateType(SaasCooperateShipCooperateTypeEnum.ENT_TEAM.getCode()); -// node.setCooperateStatus(SaasCooperateShipStatusEnum.ACTIVE.getStatus()); -// } else { -// node.setCooperateType(cooperateShip.getCooperateType()); -// node.setCooperateStatus(cooperateShip.getStatus()); -// } -// } -// }); -// } - } From 1c02b74730c440927df3e37bfd3196f0f79e77c6 Mon Sep 17 00:00:00 2001 From: liuyang Date: Tue, 24 Dec 2024 10:12:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:[REQ-3282]=20=E7=AE=80=E5=8D=95?= =?UTF-8?q?=E8=87=AA=E6=B5=8B,=E4=BF=AE=E5=A4=8DBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java index d31a386..e83be83 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java @@ -121,7 +121,7 @@ public class NodeServiceImpl implements NodeService { if (CollUtil.isNotEmpty(req.getWorkspaceIds())) { List topNodeIds = CollUtil.map(cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder() .workspaceIds(req.getWorkspaceIds()) - .workspaceOuPairs(BeanUtil.copyToList(req.getWorkspaceIds(), CooperateShipQueryRepository.WorkspaceOuPair.class)) + .workspaceOuPairs(BeanUtil.copyToList(req.getWorkspaceOuPairs(), CooperateShipQueryRepository.WorkspaceOuPair.class)) .build()), SaasCooperateShip::getOrganizationalNodeId, true); if (CollUtil.isEmpty(topNodeIds)) { return emptyPageResp;