feat(REQ-3282): WorkspaceOuPair放到dto.common包。

This commit is contained in:
周敏 2024-12-24 10:27:31 +08:00
parent b5f89e591b
commit 6bc3228b00
6 changed files with 100 additions and 13 deletions

View File

@ -0,0 +1,15 @@
package cn.axzo.orgmanax.dto.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class WorkspaceOuPair {
private Long workspaceId;
private Long ouId;
}

View File

@ -1,6 +1,7 @@
package cn.axzo.orgmanax.dto.node.req;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.common.WorkspaceOuPair;
import lombok.*;
import lombok.experimental.SuperBuilder;
@ -118,13 +119,4 @@ public class ListNodeReq extends PageReqV2 {
private Long personId;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class WorkspaceOuPair {
private Long workspaceId;
private Long ouId;
}
}

View File

@ -3,8 +3,11 @@ package cn.axzo.orgmanax.dto.nodeuser.req;
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.common.DistinctRule;
import cn.axzo.orgmanax.dto.common.IdentityPair;
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO;
import com.google.common.collect.ImmutableList;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -239,6 +242,12 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField(ignore = true)
private Integer nodeState; // TODO: 待实现
/**
* keyword idNumberphonejobNumber精确匹配或者realName模糊匹配
*/
@CriteriaField(ignore = true)
private String keyword;
// ~ 后置过滤的字段
/**
* 包含的单位类型
@ -360,4 +369,5 @@ public class ListNodeUserReq extends PageReqV2 {
private Boolean personProfile;
}
}

View File

@ -72,7 +72,6 @@ public interface NodeQueryRepository {
}
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@ -143,6 +142,16 @@ public interface NodeQueryRepository {
@Builder.Default
private Boolean isSelectTopNodeOnly = false;
/**
* 是否返回祖先节点 TODOliuyang
*/
private Boolean needAncestorNode;
/**
* 根据workspace和ouId组合查询
*/
private Set<cn.axzo.orgmanax.dto.common.WorkspaceOuPair> workspaceOuPairs;
}
}

View File

@ -3,21 +3,24 @@ package cn.axzo.orgmanax.infra.dao.nodeuser.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.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
import cn.axzo.orgmanax.infra.dao.nodeuser.dao.NodeUserDao;
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJob;
import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository;
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.collect.ImmutableList;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
@ -39,8 +42,50 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository {
@Override
public PageResp<NodeUserResp> page(ListNodeUserReq req) {
IPage<OrganizationalNodeUser> page = PageConverter.toMybatis(req, OrganizationalNodeUser.class);
PageResp<NodeUserResp> emptyPage = PageResp.<NodeUserResp>builder().size(req.getPageSize()).current(req.getPage()).total(0L).data(ImmutableList.of()).build();
QueryWrapper<OrganizationalNodeUser> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNodeUser.class);
// 查询参数过滤
// 查询参数处理 ~
// keyword
if (StrUtil.isNotBlank(req.getKeyword())) {
wrapper.and(w -> {
w.like("real_name", req.getKeyword())
.or().eq("phone", req.getKeyword())
.or().eq("job_number", req.getKeyword())
.or().eq("phone", req.getKeyword());
});
}
// 处理删除标记
if (BooleanUtil.isTrue(req.getDeletedOnly())) {
wrapper.ne("is_delete", 0);
}
if (!BooleanUtil.isTrue(req.getIncludeDeleted())) {
wrapper.eq("is_delete", 0);
}
// jobIds查询 - 这里可以合并对orgJob的查询后续优化
if (CollUtil.isNotEmpty(req.getOrganizationalJobCodes())) {
Set<Long> jobIds = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder().codes(req.getOrganizationalJobCodes()).build())
.stream().map(OrgJob::getId).collect(Collectors.toSet());
if (jobIds.isEmpty()) {
return emptyPage;
}
wrapper.in("organizational_job_id", jobIds);
}
if (StrUtil.isNotBlank(req.getOrganizationalJobCode())) {
Set<Long> jobIds = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder().codes(req.getOrganizationalJobCodes()).build())
.stream().map(OrgJob::getId).collect(Collectors.toSet());
if (jobIds.isEmpty()) {
return emptyPage;
}
wrapper.eq("organizational_job_id", jobIds);
}
if (StringUtils.isNotBlank(req.getOrganizationalJobNameLike())) {
Set<Long> jobIds = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder().nameLike(req.getOrganizationalJobNameLike()).build())
.stream().map(OrgJob::getId).collect(Collectors.toSet());
if (jobIds.isEmpty()) {
return emptyPage;
}
wrapper.in("organizational_job_id", jobIds);
}
IPage<NodeUserResp> results = nodeUserDao.page(page, wrapper)
.convert(e -> BeanUtil.toBean(e, NodeUserResp.class));
@ -90,13 +135,14 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository {
if (CollUtil.isEmpty(records) || req.getNeeds() == null) {
return;
}
if (!BooleanUtil.isTrue(req.getNeeds().getNode())) {
if (!BooleanUtil.isTrue(req.getNeeds().getNode()) && !BooleanUtil.isTrue(req.getNeeds().getAncestorNode())) {
return;
}
Set<Long> nodeIds = records.stream().map(NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet());
// assemble parentNode
Map<Long, NodeQueryRepository.NodeResp> nodesById = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder()
.ids(nodeIds)
.needAncestorNode(BooleanUtil.isTrue(req.getNeeds().getAncestorNode()))
.build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity()));
records.forEach(r -> r.setNode(nodesById.get(r.getOrganizationalNodeId())));

View File

@ -16,6 +16,17 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.Collection;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public interface OrgJobQueryRepository {
@ -23,6 +34,7 @@ public interface OrgJobQueryRepository {
/**
* 列表查询
*
* @param req
* @return
*/
@ -63,6 +75,9 @@ public interface OrgJobQueryRepository {
*/
@CriteriaField(ignore = true)
private String keyword;
@CriteriaField(field = "name", operator = Operator.LIKE)
private String nameLike;
}
@EqualsAndHashCode(callSuper = true)