Merge remote-tracking branch 'origin/feature/REQ-3282' into feature/REQ-3282
This commit is contained in:
commit
729c1b0adc
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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。用 idNumber,phone,jobNumber精确匹配,或者realName模糊匹配
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private String keyword;
|
||||
|
||||
// ~ 后置过滤的字段
|
||||
/**
|
||||
* 包含的单位类型
|
||||
@ -360,4 +369,5 @@ public class ListNodeUserReq extends PageReqV2 {
|
||||
|
||||
private Boolean personProfile;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -46,6 +46,10 @@ public class ListUnitReq extends PageReqV2 {
|
||||
private Set<Integer> types;
|
||||
@CriteriaField(field = "tempSourceId", operator = Operator.IN)
|
||||
private Set<Long> sourceIds;
|
||||
@CriteriaField(field = "identityId", operator = Operator.IN)
|
||||
private Set<Long> identityIds;
|
||||
@CriteriaField(field = "legalIdCard", operator = Operator.IN)
|
||||
private Set<String> legalIdCards;
|
||||
/**
|
||||
* TODO: 待实现
|
||||
* 查询返回数据包含,逻辑删除数据,即查询未删除和已删除的数据。
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
* 是否返回祖先节点 TODO:liuyang
|
||||
*/
|
||||
private Boolean needAncestorNode;
|
||||
|
||||
/**
|
||||
* 根据workspace和ouId组合查询
|
||||
*/
|
||||
private Set<cn.axzo.orgmanax.dto.common.WorkspaceOuPair> workspaceOuPairs;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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())));
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -104,6 +104,10 @@ public interface UnitQueryRepository {
|
||||
private Set<Integer> types;
|
||||
@CriteriaField(field = "tempSourceId", operator = Operator.IN)
|
||||
private Set<Long> sourceIds;
|
||||
@CriteriaField(field = "identityId", operator = Operator.IN)
|
||||
private Set<Long> identityIds;
|
||||
@CriteriaField(field = "legalIdCard", operator = Operator.IN)
|
||||
private Set<String> legalIdCards;
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user