From 9a211bfa7d62ef5395c80f99dc66f1eb4901f43e Mon Sep 17 00:00:00 2001 From: liuyang Date: Mon, 23 Dec 2024 17:44:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:[REQ-3282]=20=E8=A7=A3=E5=86=B3=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../node/repository/NodeQueryRepository.java | 86 +++++++++++++++++-- .../impl/NodeQueryRepositoryImpl.java | 34 ++++---- .../repository/NodeUserQueryRepository.java | 5 +- .../impl/NodeUserQueryRepositoryImpl.java | 2 +- .../node/service/impl/NodeServiceImpl.java | 36 +++++--- 5 files changed, 126 insertions(+), 37 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 8414a42..da9a2d3 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 @@ -1,16 +1,16 @@ package cn.axzo.orgmanax.infra.dao.node.repository; +import cn.axzo.foundation.dao.support.wrapper.CriteriaField; +import cn.axzo.foundation.dao.support.wrapper.Operator; +import cn.axzo.foundation.page.PageReqV2; import cn.axzo.foundation.page.PageResp; import cn.axzo.orgmanax.dto.node.req.ListNodeReq; import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.google.common.base.Preconditions; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; +import lombok.*; import lombok.experimental.SuperBuilder; import java.util.List; @@ -23,9 +23,9 @@ import java.util.Set; */ public interface NodeQueryRepository { - PageResp page(ListNodeReq req); + PageResp page(ListReq req); - default List list(ListNodeReq req) { + default List list(ListReq req) { return page(req).getData(); } @@ -35,7 +35,7 @@ public interface NodeQueryRepository { default Optional oneOpt(OneReq req) { req.check(); - ListNodeReq page = BeanUtil.toBean(req, ListNodeReq.class); + ListReq page = BeanUtil.toBean(req, ListReq.class); page.setPage(1); page.setPageSize(1); return page(page).getData().stream().findFirst(); @@ -68,4 +68,76 @@ public interface NodeQueryRepository { private NodeResp parentNode; } + + + @EqualsAndHashCode(callSuper = true) + @NoArgsConstructor + @AllArgsConstructor + @Data + @SuperBuilder + class ListReq extends PageReqV2 { + + /** + * ids + */ + @CriteriaField(field = "id", operator = Operator.IN) + private Set ids; + + /** + * 组织单位ids + */ + @CriteriaField(field = "ouId", operator = Operator.IN) + private Set ouIds; + + + /** + * 项目id集合 + */ + private Set workspaceIds; + + /** + * 指定部门类型 + */ + @CriteriaField(field = "nodeType", operator = Operator.IN) + private Set includeOrgNodeTypes; + /** + * 排除部门类型 + */ + @CriteriaField(field = "nodeType", operator = Operator.NOT_IN) + private Set excludeOrgNodeTypes; + + /** + * 顶级节点ID集合 + */ + @CriteriaField(field = "topNodeId", operator = Operator.IN) + private Set topNodeIds; + + /** + * 是否查询删除的 + */ + private Boolean includeDelete; + + /** + * 只返回topNode节点 + */ + private Boolean isSelectTopNodeOnly; + + + /** + * 根据workspace和ouId组合查询 + */ + private Set workspaceOuPairs; + + } + + + @NoArgsConstructor + @AllArgsConstructor + @Data + @Builder + class WorkspaceOuPair { + private Long workspaceId; + private Long ouId; + } + } 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 5833935..fe183ad 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 @@ -3,7 +3,6 @@ package cn.axzo.orgmanax.infra.dao.node.repository.impl; import cn.axzo.foundation.dao.support.converter.PageConverter; import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; import cn.axzo.foundation.page.PageResp; -import cn.axzo.orgmanax.dto.node.req.ListNodeReq; import cn.axzo.orgmanax.infra.dao.node.dao.NodeDao; import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; @@ -34,9 +33,14 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository { private final NodeDao nodeDao; @Override - public PageResp page(ListNodeReq req) { + public PageResp page(ListReq req) { IPage page = PageConverter.toMybatis(req, OrganizationalNode.class); QueryWrapper wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNode.class); + + if (req.getIsSelectTopNodeOnly()) { + wrapper.apply(" top_node_id = id "); + } + IPage results = nodeDao.page(page, wrapper) .convert(e -> BeanUtil.toBean(e, NodeResp.class)); PageResp resp = PageConverter.toResp(results); @@ -50,19 +54,19 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository { return resp; } - private void assembleParentNode(ListNodeReq req, List records) { - if (!BooleanUtil.isTrue(req.getIncludeAncestors())) { - return; - } - Map nodesById = records.stream().collect(Collectors.toMap(NodeResp::getId, Function.identity())); - // assemble parentNode - Set parentNodeIds = records.stream().map(OrganizationalNode::getParentId).collect(Collectors.toSet()); - Set needQueryDbParentNodeIds = Sets.difference(nodesById.keySet(), parentNodeIds); - Stream queryDbParentNodes = needQueryDbParentNodeIds.isEmpty() ? Stream.of() - : nodeDao.listByIds(needQueryDbParentNodeIds).stream().map(e -> BeanUtil.toBean(e, NodeResp.class)); - Map parentNodeByParentId = Stream.concat(records.stream().filter(s -> parentNodeIds.contains(s.getId())), queryDbParentNodes) - .collect(Collectors.toMap(OrganizationalNode::getId, Function.identity())); - records.forEach(r -> r.setParentNode(parentNodeByParentId.get(r.getParentId()))); + private void assembleParentNode(ListReq req, List records) { +// if (!BooleanUtil.isTrue(req.getIncludeAncestors())) { +// return; +// } +// Map nodesById = records.stream().collect(Collectors.toMap(NodeResp::getId, Function.identity())); +// // assemble parentNode +// Set parentNodeIds = records.stream().map(OrganizationalNode::getParentId).collect(Collectors.toSet()); +// Set needQueryDbParentNodeIds = Sets.difference(nodesById.keySet(), parentNodeIds); +// Stream queryDbParentNodes = needQueryDbParentNodeIds.isEmpty() ? Stream.of() +// : nodeDao.listByIds(needQueryDbParentNodeIds).stream().map(e -> BeanUtil.toBean(e, NodeResp.class)); +// Map parentNodeByParentId = Stream.concat(records.stream().filter(s -> parentNodeIds.contains(s.getId())), queryDbParentNodes) +// .collect(Collectors.toMap(OrganizationalNode::getId, Function.identity())); +// records.forEach(r -> r.setParentNode(parentNodeByParentId.get(r.getParentId()))); } } diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/NodeUserQueryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/NodeUserQueryRepository.java index 9cd4158..52c4fad 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/NodeUserQueryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/NodeUserQueryRepository.java @@ -9,10 +9,7 @@ import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.google.common.base.Preconditions; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; +import lombok.*; import lombok.experimental.SuperBuilder; import java.util.List; diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/impl/NodeUserQueryRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/impl/NodeUserQueryRepositoryImpl.java index 31ff474..9588f7f 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/impl/NodeUserQueryRepositoryImpl.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/impl/NodeUserQueryRepositoryImpl.java @@ -95,7 +95,7 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository { } Set nodeIds = records.stream().map(NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet()); // assemble parentNode - Map nodesById = nodeQueryRepository.list(ListNodeReq.builder() + Map nodesById = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder() .ids(nodeIds) .build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity())); 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 1a8707d..e86d12c 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 @@ -6,6 +6,7 @@ import cn.axzo.orgmanax.dto.node.req.ListNodeReq; import cn.axzo.orgmanax.dto.node.req.ProcessNodeReq; import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO; import cn.axzo.orgmanax.common.config.BizResultCode; +import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip; import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; @@ -67,18 +68,19 @@ public class NodeServiceImpl implements NodeService { @Override public PageResp page(ListNodeReq req) { - List nodeUsers; - + List nodeUsers = Collections.emptyList(); + List topNodeIds; + PageResp emptyPageResp = PageResp.builder() + .current(req.getPage()) + .size(req.getPageSize()) + .total(0) + .build(); // 获取部门用户信息, 若获取不到直接返回 if (Objects.nonNull(req.getPersonId())) { nodeUsers = nodeUserQueryRepository.list(ListNodeUserReq .builder().build()); if (CollUtil.isEmpty(nodeUsers)) { - return PageResp.builder() - .current(req.getPage()) - .size(req.getPageSize()) - .total(0) - .build(); + return emptyPageResp; } // 获取岗位信息 @@ -89,18 +91,32 @@ public class NodeServiceImpl implements NodeService { .build()); nodeUserFoundationService.filterByJobs(nodeUsers, orgJobs); } + + if (CollUtil.isEmpty(nodeUsers)) { + return emptyPageResp; + } + // 设置ids + req.setIds(nodeUsers.stream().map(OrganizationalNodeUser::getOrganizationalNodeId).collect(Collectors.toSet())); } // 项目ID if (CollUtil.isNotEmpty(req.getWorkspaceIds())) { - cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder() + topNodeIds = CollUtil.map(cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder() .workspaceIds(req.getWorkspaceIds()) .workspaceOuPairs(BeanUtil.copyToList(req.getWorkspaceIds(), CooperateShipQueryRepository.WorkspaceOuPair.class)) - .build()); + .build()), SaasCooperateShip::getOrganizationalNodeId, true); } + NodeQueryRepository.ListReq.ListReqBuilder builder = NodeQueryRepository.ListReq.builder(); + builder.page(req.getPage()).pageSize(req.getPageSize()); + + if (CollUtil.isNotEmpty(nodeUsers)) { + builder.ids(nodeUsers.stream().map(OrganizationalNodeUser::getOrganizationalNodeId).collect(Collectors.toSet())); + } + + PageResp page = nodeQueryRepository.page(NodeQueryRepository.ListReq.builder() + .build()); - PageResp page = nodeQueryRepository.page(req); List records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeDTO.class)).collect(Collectors.toList()); // assemble data if needed return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records);