Merge remote-tracking branch 'refs/remotes/origin/feature/REQ-3282' into feature/REQ-3282-zhh
This commit is contained in:
commit
7d36020e60
@ -1,16 +1,16 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.node.repository;
|
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.foundation.page.PageResp;
|
||||||
import cn.axzo.orgmanax.dto.node.req.ListNodeReq;
|
import cn.axzo.orgmanax.dto.node.req.ListNodeReq;
|
||||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.*;
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -23,9 +23,9 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public interface NodeQueryRepository {
|
public interface NodeQueryRepository {
|
||||||
|
|
||||||
PageResp<NodeResp> page(ListNodeReq req);
|
PageResp<NodeResp> page(ListReq req);
|
||||||
|
|
||||||
default List<NodeResp> list(ListNodeReq req) {
|
default List<NodeResp> list(ListReq req) {
|
||||||
return page(req).getData();
|
return page(req).getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ public interface NodeQueryRepository {
|
|||||||
|
|
||||||
default Optional<NodeResp> oneOpt(OneReq req) {
|
default Optional<NodeResp> oneOpt(OneReq req) {
|
||||||
req.check();
|
req.check();
|
||||||
ListNodeReq page = BeanUtil.toBean(req, ListNodeReq.class);
|
ListReq page = BeanUtil.toBean(req, ListReq.class);
|
||||||
page.setPage(1);
|
page.setPage(1);
|
||||||
page.setPageSize(1);
|
page.setPageSize(1);
|
||||||
return page(page).getData().stream().findFirst();
|
return page(page).getData().stream().findFirst();
|
||||||
@ -68,4 +68,76 @@ public interface NodeQueryRepository {
|
|||||||
private NodeResp parentNode;
|
private NodeResp parentNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
class ListReq extends PageReqV2 {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ids
|
||||||
|
*/
|
||||||
|
@CriteriaField(field = "id", operator = Operator.IN)
|
||||||
|
private Set<Long> ids;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组织单位ids
|
||||||
|
*/
|
||||||
|
@CriteriaField(field = "ouId", operator = Operator.IN)
|
||||||
|
private Set<Long> ouIds;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目id集合
|
||||||
|
*/
|
||||||
|
private Set<Long> workspaceIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 指定部门类型
|
||||||
|
*/
|
||||||
|
@CriteriaField(field = "nodeType", operator = Operator.IN)
|
||||||
|
private Set<Integer> includeOrgNodeTypes;
|
||||||
|
/**
|
||||||
|
* 排除部门类型
|
||||||
|
*/
|
||||||
|
@CriteriaField(field = "nodeType", operator = Operator.NOT_IN)
|
||||||
|
private Set<Integer> excludeOrgNodeTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 顶级节点ID集合
|
||||||
|
*/
|
||||||
|
@CriteriaField(field = "topNodeId", operator = Operator.IN)
|
||||||
|
private Set<Long> topNodeIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否查询删除的
|
||||||
|
*/
|
||||||
|
private Boolean includeDelete;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 只返回topNode节点
|
||||||
|
*/
|
||||||
|
private Boolean isSelectTopNodeOnly;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据workspace和ouId组合查询
|
||||||
|
*/
|
||||||
|
private Set<ListNodeReq.WorkspaceOuPair> workspaceOuPairs;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
class WorkspaceOuPair {
|
||||||
|
private Long workspaceId;
|
||||||
|
private Long ouId;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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.converter.PageConverter;
|
||||||
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
|
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
|
||||||
import cn.axzo.foundation.page.PageResp;
|
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.dao.NodeDao;
|
||||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
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;
|
||||||
@ -34,9 +33,14 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository {
|
|||||||
private final NodeDao nodeDao;
|
private final NodeDao nodeDao;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResp<NodeResp> page(ListNodeReq req) {
|
public PageResp<NodeResp> page(ListReq req) {
|
||||||
IPage<OrganizationalNode> page = PageConverter.toMybatis(req, OrganizationalNode.class);
|
IPage<OrganizationalNode> page = PageConverter.toMybatis(req, OrganizationalNode.class);
|
||||||
QueryWrapper<OrganizationalNode> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNode.class);
|
QueryWrapper<OrganizationalNode> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNode.class);
|
||||||
|
|
||||||
|
if (req.getIsSelectTopNodeOnly()) {
|
||||||
|
wrapper.apply(" top_node_id = id ");
|
||||||
|
}
|
||||||
|
|
||||||
IPage<NodeResp> results = nodeDao.page(page, wrapper)
|
IPage<NodeResp> results = nodeDao.page(page, wrapper)
|
||||||
.convert(e -> BeanUtil.toBean(e, NodeResp.class));
|
.convert(e -> BeanUtil.toBean(e, NodeResp.class));
|
||||||
PageResp<NodeResp> resp = PageConverter.toResp(results);
|
PageResp<NodeResp> resp = PageConverter.toResp(results);
|
||||||
@ -50,19 +54,19 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository {
|
|||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assembleParentNode(ListNodeReq req, List<NodeResp> records) {
|
private void assembleParentNode(ListReq req, List<NodeResp> records) {
|
||||||
if (!BooleanUtil.isTrue(req.getIncludeAncestors())) {
|
// if (!BooleanUtil.isTrue(req.getIncludeAncestors())) {
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
Map<Long, NodeResp> nodesById = records.stream().collect(Collectors.toMap(NodeResp::getId, Function.identity()));
|
// Map<Long, NodeResp> nodesById = records.stream().collect(Collectors.toMap(NodeResp::getId, Function.identity()));
|
||||||
// assemble parentNode
|
// // assemble parentNode
|
||||||
Set<Long> parentNodeIds = records.stream().map(OrganizationalNode::getParentId).collect(Collectors.toSet());
|
// Set<Long> parentNodeIds = records.stream().map(OrganizationalNode::getParentId).collect(Collectors.toSet());
|
||||||
Set<Long> needQueryDbParentNodeIds = Sets.difference(nodesById.keySet(), parentNodeIds);
|
// Set<Long> needQueryDbParentNodeIds = Sets.difference(nodesById.keySet(), parentNodeIds);
|
||||||
Stream<NodeResp> queryDbParentNodes = needQueryDbParentNodeIds.isEmpty() ? Stream.of()
|
// Stream<NodeResp> queryDbParentNodes = needQueryDbParentNodeIds.isEmpty() ? Stream.of()
|
||||||
: nodeDao.listByIds(needQueryDbParentNodeIds).stream().map(e -> BeanUtil.toBean(e, NodeResp.class));
|
// : nodeDao.listByIds(needQueryDbParentNodeIds).stream().map(e -> BeanUtil.toBean(e, NodeResp.class));
|
||||||
Map<Long, NodeResp> parentNodeByParentId = Stream.concat(records.stream().filter(s -> parentNodeIds.contains(s.getId())), queryDbParentNodes)
|
// Map<Long, NodeResp> parentNodeByParentId = Stream.concat(records.stream().filter(s -> parentNodeIds.contains(s.getId())), queryDbParentNodes)
|
||||||
.collect(Collectors.toMap(OrganizationalNode::getId, Function.identity()));
|
// .collect(Collectors.toMap(OrganizationalNode::getId, Function.identity()));
|
||||||
records.forEach(r -> r.setParentNode(parentNodeByParentId.get(r.getParentId())));
|
// records.forEach(r -> r.setParentNode(parentNodeByParentId.get(r.getParentId())));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,10 +9,7 @@ import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
|
|||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.*;
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@ -95,7 +95,7 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository {
|
|||||||
}
|
}
|
||||||
Set<Long> nodeIds = records.stream().map(NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet());
|
Set<Long> nodeIds = records.stream().map(NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet());
|
||||||
// assemble parentNode
|
// assemble parentNode
|
||||||
Map<Long, NodeQueryRepository.NodeResp> nodesById = nodeQueryRepository.list(ListNodeReq.builder()
|
Map<Long, NodeQueryRepository.NodeResp> nodesById = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder()
|
||||||
.ids(nodeIds)
|
.ids(nodeIds)
|
||||||
.build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity()));
|
.build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity()));
|
||||||
|
|
||||||
|
|||||||
@ -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.req.ProcessNodeReq;
|
||||||
import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO;
|
import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO;
|
||||||
import cn.axzo.orgmanax.common.config.BizResultCode;
|
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.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.repository.NodeQueryRepository;
|
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||||
@ -67,18 +68,19 @@ public class NodeServiceImpl implements NodeService {
|
|||||||
@Override
|
@Override
|
||||||
public PageResp<OrgNodeDTO> page(ListNodeReq req) {
|
public PageResp<OrgNodeDTO> page(ListNodeReq req) {
|
||||||
|
|
||||||
List<NodeUserQueryRepository.NodeUserResp> nodeUsers;
|
List<NodeUserQueryRepository.NodeUserResp> nodeUsers = Collections.emptyList();
|
||||||
|
List<Long> topNodeIds;
|
||||||
|
PageResp<OrgNodeDTO> emptyPageResp = PageResp.<OrgNodeDTO>builder()
|
||||||
|
.current(req.getPage())
|
||||||
|
.size(req.getPageSize())
|
||||||
|
.total(0)
|
||||||
|
.build();
|
||||||
// 获取部门用户信息, 若获取不到直接返回
|
// 获取部门用户信息, 若获取不到直接返回
|
||||||
if (Objects.nonNull(req.getPersonId())) {
|
if (Objects.nonNull(req.getPersonId())) {
|
||||||
nodeUsers = nodeUserQueryRepository.list(ListNodeUserReq
|
nodeUsers = nodeUserQueryRepository.list(ListNodeUserReq
|
||||||
.builder().build());
|
.builder().build());
|
||||||
if (CollUtil.isEmpty(nodeUsers)) {
|
if (CollUtil.isEmpty(nodeUsers)) {
|
||||||
return PageResp.<OrgNodeDTO>builder()
|
return emptyPageResp;
|
||||||
.current(req.getPage())
|
|
||||||
.size(req.getPageSize())
|
|
||||||
.total(0)
|
|
||||||
.build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取岗位信息
|
// 获取岗位信息
|
||||||
@ -89,18 +91,32 @@ public class NodeServiceImpl implements NodeService {
|
|||||||
.build());
|
.build());
|
||||||
nodeUserFoundationService.filterByJobs(nodeUsers, orgJobs);
|
nodeUserFoundationService.filterByJobs(nodeUsers, orgJobs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CollUtil.isEmpty(nodeUsers)) {
|
||||||
|
return emptyPageResp;
|
||||||
|
}
|
||||||
|
// 设置ids
|
||||||
|
req.setIds(nodeUsers.stream().map(OrganizationalNodeUser::getOrganizationalNodeId).collect(Collectors.toSet()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 项目ID
|
// 项目ID
|
||||||
if (CollUtil.isNotEmpty(req.getWorkspaceIds())) {
|
if (CollUtil.isNotEmpty(req.getWorkspaceIds())) {
|
||||||
cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder()
|
topNodeIds = CollUtil.map(cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder()
|
||||||
.workspaceIds(req.getWorkspaceIds())
|
.workspaceIds(req.getWorkspaceIds())
|
||||||
.workspaceOuPairs(BeanUtil.copyToList(req.getWorkspaceIds(), CooperateShipQueryRepository.WorkspaceOuPair.class))
|
.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<NodeQueryRepository.NodeResp> page = nodeQueryRepository.page(NodeQueryRepository.ListReq.builder()
|
||||||
|
.build());
|
||||||
|
|
||||||
PageResp<NodeQueryRepository.NodeResp> page = nodeQueryRepository.page(req);
|
|
||||||
List<OrgNodeDTO> records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeDTO.class)).collect(Collectors.toList());
|
List<OrgNodeDTO> records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeDTO.class)).collect(Collectors.toList());
|
||||||
// assemble data if needed
|
// assemble data if needed
|
||||||
return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records);
|
return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user