Merge remote-tracking branch 'origin/feature/REQ-3488' into feature/REQ-3488-zhh
This commit is contained in:
commit
b2fd79efdf
@ -6,6 +6,7 @@ import cn.axzo.foundation.page.PageReqV2;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@ -89,18 +90,33 @@ public class ListOrgUserReq extends PageReqV2 {
|
||||
@CriteriaField(field = "status", operator = Operator.IN)
|
||||
private Set<Integer> statuses;
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
@Builder.Default
|
||||
private Integer page = 1;
|
||||
/**
|
||||
* 最大支持1000条数据,不支持单页超过1000的查询,接入方按需分页
|
||||
*/
|
||||
@Builder.Default
|
||||
@CriteriaField(ignore = true)
|
||||
private Integer pageSize = 1000;
|
||||
@CriteriaField(ignore = true)
|
||||
private List<String> sort;
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean needPersonProfile;
|
||||
|
||||
/**
|
||||
* 关键字查询:
|
||||
* 1、用户名称模糊匹配;
|
||||
* 2、手机号、身份证号精确匹配;
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private String keyword;
|
||||
|
||||
|
||||
/**
|
||||
* 离职时间筛选起始
|
||||
*/
|
||||
@CriteriaField(field = "transferTime", operator = Operator.GE)
|
||||
private Date leaveAtStart;
|
||||
|
||||
/**
|
||||
* 离职时间筛选结束
|
||||
*/
|
||||
@CriteriaField(field = "transferTime", operator = Operator.LE)
|
||||
private Date leaveAtEnd;
|
||||
|
||||
/**
|
||||
* 是都包含删除(默认走查询未删除)
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean includeDeleted;
|
||||
}
|
||||
|
||||
@ -10,14 +10,18 @@ import cn.axzo.orgmanax.infra.client.profile.dto.ProfilePersonResp;
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.dao.OrgUserDao;
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.entity.OrgUser;
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.repository.OrgUserQueryRepository;
|
||||
import cn.axzo.trade.datasecurity.core.util.DataSecurityHelper;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -36,7 +40,22 @@ public class OrgUserQueryRepositoryImpl implements OrgUserQueryRepository {
|
||||
@Override
|
||||
public PageResp<OrgUserResp> page(ListOrgUserReq req) {
|
||||
IPage<OrgUser> page = PageConverter.toMybatis(req, OrgUser.class);
|
||||
QueryWrapper<OrgUser> wrapper = QueryWrapperHelper.fromBean(req, OrgUser.class);
|
||||
LambdaQueryWrapper<OrgUser> wrapper = QueryWrapperHelper.fromBean(req, OrgUser.class).lambda();
|
||||
|
||||
// 处理删除标记
|
||||
if (!BooleanUtil.isTrue(req.getIncludeDeleted())) {
|
||||
wrapper.eq(OrgUser::getIsDelete, 0);
|
||||
}
|
||||
|
||||
//处理关键词查询
|
||||
if (ObjectUtil.isNotEmpty(req.getKeyword())) {
|
||||
// 关键字加密(手机号与身份证需要精确匹配)
|
||||
String encryptStr = DataSecurityHelper.encrypt(req.getKeyword());
|
||||
wrapper.and(w -> w.like(OrgUser::getRealName, req.getKeyword())
|
||||
.or().eq(OrgUser::getPhone, encryptStr)
|
||||
.or().eq(OrgUser::getIdNumber, encryptStr));
|
||||
}
|
||||
|
||||
IPage<OrgUserResp> results = orgUserDao.page(page, wrapper)
|
||||
.convert(e -> BeanUtil.toBean(e, OrgUserResp.class));
|
||||
PageResp<OrgUserResp> resp = PageConverter.toResp(results);
|
||||
|
||||
@ -12,18 +12,19 @@ public interface CooperateShipFoundationService {
|
||||
/**
|
||||
* 通过person进行过滤
|
||||
* @param filterPersonId
|
||||
* @param nodeIds
|
||||
* @param cooperateShips
|
||||
* @param includeExitPerson
|
||||
*/
|
||||
void filterNodeIdsByPerson(Long filterPersonId, Collection<Long> nodeIds, Boolean includeExitPerson, Collection<String> excludeJobCodes);
|
||||
void filterNodeIdsByPerson(Long filterPersonId, Collection<SaasCooperateShip> cooperateShips, Boolean includeExitPerson, Collection<String> excludeJobCodes);
|
||||
|
||||
|
||||
/**
|
||||
* 通过person进行过滤
|
||||
* @param filterPersonId
|
||||
* @param nodeIds
|
||||
* @param cooperateShips
|
||||
* @param includeExitPerson
|
||||
*/
|
||||
void filterNodeIdsByPerson(Long filterPersonId, Collection<Long> nodeIds, Boolean includeExitPerson);
|
||||
void filterNodeIdsByPerson(Long filterPersonId, Collection<SaasCooperateShip> cooperateShips, Boolean includeExitPerson);
|
||||
|
||||
/**
|
||||
* 提取祖级的数据
|
||||
@ -47,6 +48,13 @@ public interface CooperateShipFoundationService {
|
||||
*/
|
||||
Collection<Long> extractParentIds(Collection<SaasCooperateShip> currentNodeList);
|
||||
|
||||
/**
|
||||
* 提取id
|
||||
* @param currentNodeList
|
||||
* @return
|
||||
*/
|
||||
Collection<Long> extractNodeIds(Collection<SaasCooperateShip> currentNodeList);
|
||||
|
||||
/**
|
||||
* 提取id
|
||||
* @param currentNodeList
|
||||
|
||||
@ -30,10 +30,12 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
|
||||
private final OrgJobQueryRepository jobQueryRepository;
|
||||
|
||||
@Override
|
||||
public void filterNodeIdsByPerson(Long filterPersonId, Collection<Long> nodeIds, Boolean includeExitPerson, Collection<String> excludeJobCodes) {
|
||||
public void filterNodeIdsByPerson(Long filterPersonId, Collection<SaasCooperateShip> cooperateShips, Boolean includeExitPerson, Collection<String> excludeJobCodes) {
|
||||
if (filterPersonId == null) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
Collection<Long> nodeIds = extractNodeIds(cooperateShips);
|
||||
List<NodeUserQueryRepository.NodeUserResp> nodeUsers = nodeUserQueryRepository.list(NodeUserQueryRepository.ListReq.builder()
|
||||
.personId(filterPersonId)
|
||||
.organizationalNodeIds(nodeIds)
|
||||
@ -61,16 +63,21 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
|
||||
if (job == null) {
|
||||
return true;
|
||||
}
|
||||
return !excludeJobCodes.contains(job.getCode());
|
||||
return excludeJobCodes.contains(job.getCode());
|
||||
}).map(OrganizationalNodeUser::getOrganizationalNodeId).collect(Collectors.toList());
|
||||
nodeIds.removeIf(t -> !jobNodeIds.contains(t));
|
||||
}
|
||||
|
||||
// 删除原协同关系节点
|
||||
if (CollUtil.size(cooperateShips) != CollUtil.size(nodeIds)) {
|
||||
cooperateShips.removeIf(t ->!nodeIds.contains(t.getOrganizationalNodeId()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void filterNodeIdsByPerson(Long filterPersonId, Collection<Long> nodeIds, Boolean includeExitPerson) {
|
||||
filterNodeIdsByPerson(filterPersonId, nodeIds, includeExitPerson, Collections.emptyList());
|
||||
public void filterNodeIdsByPerson(Long filterPersonId, Collection<SaasCooperateShip> cooperateShips, Boolean includeExitPerson) {
|
||||
filterNodeIdsByPerson(filterPersonId, cooperateShips, includeExitPerson, Collections.emptyList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -90,6 +97,11 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
|
||||
return list.stream().map(SaasCooperateShip::getParentId).filter(parentId -> parentId != 0).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Long> extractNodeIds(Collection<SaasCooperateShip> currentNodeList) {
|
||||
return extract(currentNodeList, SaasCooperateShip::getOrganizationalNodeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Long> extractIds(Collection<SaasCooperateShip> currentNodeList) {
|
||||
return extract(currentNodeList, SaasCooperateShip::getId);
|
||||
|
||||
@ -164,14 +164,10 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// 协同关系id集合
|
||||
Collection<Long> cooperateShipNodeIds = cooperateShipFoundationService.extractIds(currentNodeList);
|
||||
// 根据person过滤当前节点
|
||||
if (isFilterCurrentNodeByPerson) {
|
||||
// 根据personId过滤节点
|
||||
cooperateShipFoundationService.filterNodeIdsByPerson(req.getFilterByPersonId(), cooperateShipNodeIds, req.getFilterIncludeExitPerson());
|
||||
// 删除不存在的节点
|
||||
CollUtil.removeWithAddIf(currentNodeList, t ->!cooperateShipNodeIds.contains(t.getOrganizationalNodeId()));
|
||||
cooperateShipFoundationService.filterNodeIdsByPerson(req.getFilterByPersonId(), currentNodeList, req.getFilterIncludeExitPerson(), req.getFilterByJobCodeExclusion());
|
||||
if (CollUtil.isEmpty(currentNodeList)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
@ -193,6 +189,7 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
List<SaasCooperateShip> ancestorShipNodes = cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder().ids(ancestorIds).statuses(req.getStatuses()).build());
|
||||
resultNodeList.addAll(ancestorShipNodes);
|
||||
}
|
||||
|
||||
// 是否查询子节点
|
||||
if (BooleanUtil.isTrue(req.getIncludeDescendants())) {
|
||||
Collection<String> paths = cooperateShipFoundationService.extractPaths(currentNodeList, ",");
|
||||
@ -201,9 +198,7 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
.statuses(req.getStatuses())
|
||||
.pathsRight(paths).build());
|
||||
if (isFilterCurrentAndBelowByPerson) {
|
||||
List<Long> nodeIds = CollUtil.map(descendantShipNodes, SaasCooperateShip::getOrganizationalNodeId, true);
|
||||
cooperateShipFoundationService.filterNodeIdsByPerson(req.getFilterByPersonId(), nodeIds, req.getFilterIncludeExitPerson(), req.getFilterByJobCodeExclusion());
|
||||
descendantShipNodes.removeIf(t -> !nodeIds.contains(t.getOrganizationalNodeId()));
|
||||
cooperateShipFoundationService.filterNodeIdsByPerson(req.getFilterByPersonId(), descendantShipNodes, req.getFilterIncludeExitPerson(), req.getFilterByJobCodeExclusion());
|
||||
}
|
||||
CollUtil.addAll(resultNodeList, descendantShipNodes);
|
||||
}
|
||||
@ -217,16 +212,12 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
.parentIds(ids).build());
|
||||
// 是否查询当前节点及以下节点的人员
|
||||
if (isFilterCurrentAndBelowByPerson) {
|
||||
List<Long> nodeIds = CollUtil.map(childrenShipNodes, SaasCooperateShip::getOrganizationalNodeId, true);
|
||||
cooperateShipFoundationService.filterNodeIdsByPerson(req.getFilterByPersonId(), nodeIds, req.getFilterIncludeExitPerson());
|
||||
childrenShipNodes.removeIf(t -> !nodeIds.contains(t.getOrganizationalNodeId()));
|
||||
cooperateShipFoundationService.filterNodeIdsByPerson(req.getFilterByPersonId(), childrenShipNodes, req.getFilterIncludeExitPerson(), req.getFilterByJobCodeExclusion());
|
||||
}
|
||||
resultNodeList.addAll(childrenShipNodes);
|
||||
}
|
||||
|
||||
// resultNodeList 根据path进行正序
|
||||
List<Long> resultCooperateNodeIds = CollUtil.map(resultNodeList, SaasCooperateShip::getId, true);
|
||||
resultNodeList.sort(Comparator.comparing(SaasCooperateShip::getPath));
|
||||
return BeanUtil.copyToList(resultNodeList.stream().filter(t -> resultCooperateNodeIds.contains(t.getId())).collect(Collectors.toSet()), OrgCooperateShipDTO.class);
|
||||
return BeanUtil.copyToList(CollUtil.distinct(resultNodeList, SaasCooperateShip::getId, true), OrgCooperateShipDTO.class);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user