feat:[REQ-3488] 修改为collection类, 集合处理不关心子类

This commit is contained in:
liuyang 2025-01-06 20:49:44 +08:00
parent ae91917153
commit b7343d92a9
4 changed files with 63 additions and 34 deletions

View File

@ -2,6 +2,7 @@ package cn.axzo.orgmanax.server.cooperateship.foundation;
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
@ -14,7 +15,7 @@ public interface CooperateShipFoundationService {
* @param nodeIds
* @param includeExitPerson
*/
void filterNodeIdsByPerson(Long filterPersonId, List<Long> nodeIds, Boolean includeExitPerson, List<String> excludeJobCodes);
void filterNodeIdsByPerson(Long filterPersonId, Collection<Long> nodeIds, Boolean includeExitPerson, Collection<String> excludeJobCodes);
/**
* 通过person进行过滤
@ -22,14 +23,14 @@ public interface CooperateShipFoundationService {
* @param nodeIds
* @param includeExitPerson
*/
void filterNodeIdsByPerson(Long filterPersonId, List<Long> nodeIds, Boolean includeExitPerson);
void filterNodeIdsByPerson(Long filterPersonId, Collection<Long> nodeIds, Boolean includeExitPerson);
/**
* 提取祖级的数据
* @param list
* @return
*/
Set<Long> extractAncestorIds(List<SaasCooperateShip> list);
Collection<Long> extractAncestorIds(Collection<SaasCooperateShip> list);
/**
* 提取path数据
@ -37,14 +38,22 @@ public interface CooperateShipFoundationService {
* @param suffix 后缀
* @return
*/
Set<String> extractPaths(List<SaasCooperateShip> list, String suffix);
Collection<String> extractPaths(Collection<SaasCooperateShip> list, String suffix);
/**
* 提取父级id
* @param currentNodeList
* @return
*/
Set<Long> extractParentIds(List<SaasCooperateShip> currentNodeList);
Collection<Long> extractParentIds(Collection<SaasCooperateShip> currentNodeList);
/**
* 提取id
* @param currentNodeList
* @return
*/
Collection<Long> extractIds(Collection<SaasCooperateShip> currentNodeList);
/**
* 提取集合中的字段值
@ -52,6 +61,6 @@ public interface CooperateShipFoundationService {
* @param function
* @return
*/
<T> Set<T> extract(List<SaasCooperateShip> currentNodeList, Function<SaasCooperateShip, T> function);
<T> Collection<T> extract(Collection<SaasCooperateShip> currentNodeList, Function<SaasCooperateShip, T> function);
}

View File

@ -0,0 +1,16 @@
package cn.axzo.orgmanax.server.cooperateship.foundation.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 协同关系入参查询
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class CooperateShipListReq {
}

View File

@ -15,10 +15,7 @@ import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
@ -33,7 +30,7 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
private final OrgJobQueryRepository jobQueryRepository;
@Override
public void filterNodeIdsByPerson(Long filterPersonId, List<Long> nodeIds, Boolean includeExitPerson, List<String> excludeJobCodes) {
public void filterNodeIdsByPerson(Long filterPersonId, Collection<Long> nodeIds, Boolean includeExitPerson, Collection<String> excludeJobCodes) {
if (filterPersonId == null) {
return;
}
@ -72,29 +69,34 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
}
@Override
public void filterNodeIdsByPerson(Long filterPersonId, List<Long> nodeIds, Boolean includeExitPerson) {
public void filterNodeIdsByPerson(Long filterPersonId, Collection<Long> nodeIds, Boolean includeExitPerson) {
filterNodeIdsByPerson(filterPersonId, nodeIds, includeExitPerson, Collections.emptyList());
}
@Override
public Set<Long> extractAncestorIds(List<SaasCooperateShip> list) {
public Collection<Long> extractAncestorIds(Collection<SaasCooperateShip> list) {
return list.stream()
.flatMap(e -> e.parseAncestorIdsFromPath().stream())
.collect(Collectors.toSet());
}
@Override
public Set<String> extractPaths(List<SaasCooperateShip> list, String suffix) {
public Collection<String> extractPaths(Collection<SaasCooperateShip> list, String suffix) {
return list.stream().map(t -> StrUtil.isNotBlank(suffix) ? StrUtil.concat(true, t.getPath(), suffix) : t.getPath()).collect(Collectors.toSet());
}
@Override
public Set<Long> extractParentIds(List<SaasCooperateShip> list) {
public Collection<Long> extractParentIds(Collection<SaasCooperateShip> list) {
return list.stream().map(SaasCooperateShip::getParentId).filter(parentId -> parentId != 0).collect(Collectors.toSet());
}
@Override
public <T> Set<T> extract(List<SaasCooperateShip> currentNodeList, Function<SaasCooperateShip, T> function) {
public Collection<Long> extractIds(Collection<SaasCooperateShip> currentNodeList) {
return extract(currentNodeList, SaasCooperateShip::getId);
}
@Override
public <T> Collection<T> extract(Collection<SaasCooperateShip> currentNodeList, Function<SaasCooperateShip, T> function) {
return currentNodeList.stream().map(function).collect(Collectors.toSet());
}

View File

@ -28,6 +28,7 @@ import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.google.common.collect.ImmutableSet;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -135,26 +136,27 @@ public class CooperateShipServiceImpl implements CooperateShipService {
boolean isFilterCurrentAndBelowByPerson = !isFilterCurrentNodeByPerson && ObjectUtil.isNotNull(req.getFilterByPersonId())
&& Objects.equals(req.getFilterMethod(), ListOrgCooperateShipReq.FILTER_PERSON_TYPE_CURRENT_AND_BELOW_NODE);
// 构建查询条件
CooperateShipQueryRepository.ListReq listReq = CooperateShipQueryRepository.ListReq.builder()
.ids(req.getIds())
.workspaceIds(req.getWorkspaceIds())
.workspaceTypes(req.getWorkspaceTypes())
.ouIds(req.getOuIds())
.includeCooperateTypes(req.getIncludeCooperateTypes())
.excludeCooperateTypes(req.getExcludeCooperateTypes())
.organizationNodeIds(req.getOrganizationNodeIds())
.partnerShips(req.getPartnerShips())
.statuses(req.getStatuses())
.build();
// 根据入参查询数据
List<SaasCooperateShip> currentNodeList = cooperateShipQueryRepository.list(
CooperateShipQueryRepository.ListReq.builder()
.ids(req.getIds())
.workspaceIds(req.getWorkspaceIds())
.workspaceTypes(req.getWorkspaceTypes())
.ouIds(req.getOuIds())
.includeCooperateTypes(req.getIncludeCooperateTypes())
.excludeCooperateTypes(req.getExcludeCooperateTypes())
.organizationNodeIds(req.getOrganizationNodeIds())
.partnerShips(req.getPartnerShips())
.statuses(req.getStatuses())
.build());
List<SaasCooperateShip> currentNodeList = cooperateShipQueryRepository.list(listReq);
log.info("【协同关系基础数据查询】 入参 {},结果:{}", JSONUtil.toJsonStr(listReq), JSONUtil.toJsonStr(currentNodeList));
if (CollUtil.isEmpty(currentNodeList)) {
return Collections.emptyList();
}
// 协同关系id集合
List<Long> cooperateShipNodeIds = CollUtil.map(currentNodeList, SaasCooperateShip::getOrganizationalNodeId, true);
Collection<Long> cooperateShipNodeIds = cooperateShipFoundationService.extractIds(currentNodeList);
// 根据person过滤当前节点
if (isFilterCurrentNodeByPerson) {
// 根据personId过滤节点
@ -171,20 +173,20 @@ public class CooperateShipServiceImpl implements CooperateShipService {
// 是否查询祖先节点
if (BooleanUtil.isTrue(req.getIncludeParent())) {
Set<Long> parentIds = cooperateShipFoundationService.extractParentIds(currentNodeList);
Collection<Long> parentIds = cooperateShipFoundationService.extractParentIds(currentNodeList);
List<SaasCooperateShip> ancestorShipNodes = cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder().ids(parentIds).build());
resultNodeList.addAll(ancestorShipNodes);
}
// 是否查询父级节点
if (BooleanUtil.isTrue(req.getIncludeAncestors())) {
Set<Long> ancestorIds = cooperateShipFoundationService.extractAncestorIds(currentNodeList);
Collection<Long> ancestorIds = cooperateShipFoundationService.extractAncestorIds(currentNodeList);
List<SaasCooperateShip> ancestorShipNodes = cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder().ids(ancestorIds).statuses(req.getStatuses()).build());
resultNodeList.addAll(ancestorShipNodes);
}
// 是否查询子节点
if (BooleanUtil.isTrue(req.getIncludeDescendants())) {
Set<String> paths = cooperateShipFoundationService.extractPaths(currentNodeList, ",");
Collection<String> paths = cooperateShipFoundationService.extractPaths(currentNodeList, ",");
List<SaasCooperateShip> descendantShipNodes = cooperateShipQueryRepository.list(
CooperateShipQueryRepository.ListReq.builder()
.statuses(req.getStatuses())
@ -199,7 +201,7 @@ public class CooperateShipServiceImpl implements CooperateShipService {
// 是否查询子孙节点
if (BooleanUtil.isTrue(req.getIncludeChildren())) {
Set<Long> ids = cooperateShipFoundationService.extract(currentNodeList, SaasCooperateShip::getId);
Collection<Long> ids = cooperateShipFoundationService.extract(currentNodeList, SaasCooperateShip::getId);
List<SaasCooperateShip> childrenShipNodes = cooperateShipQueryRepository.list(
CooperateShipQueryRepository.ListReq.builder()
.statuses(req.getStatuses())