feat:[REQ-3488] 优化协同关系,如果仅personId有值,则先根据personId查询
This commit is contained in:
parent
cb75d33e5a
commit
dfe9327c88
@ -61,6 +61,7 @@ public class CooperateShipQueryRepositoryImpl implements CooperateShipQueryRepos
|
|||||||
}
|
}
|
||||||
|
|
||||||
wrapper.eq("is_delete", 0);
|
wrapper.eq("is_delete", 0);
|
||||||
|
wrapper.last(" limit 10000");
|
||||||
return cooperateShipDao.list(wrapper)
|
return cooperateShipDao.list(wrapper)
|
||||||
.stream().map(e -> BeanUtil.toBean(e, SaasCooperateShip.class)).collect(Collectors.toList());
|
.stream().map(e -> BeanUtil.toBean(e, SaasCooperateShip.class)).collect(Collectors.toList());
|
||||||
|
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRep
|
|||||||
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipUpsertRepository;
|
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipUpsertRepository;
|
||||||
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;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||||
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
|
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
|
||||||
import cn.axzo.orgmanax.server.cooperateship.event.inner.CooperateShipEventType;
|
import cn.axzo.orgmanax.server.cooperateship.event.inner.CooperateShipEventType;
|
||||||
import cn.axzo.orgmanax.dto.cooperateship.event.CoopeateShipUpsertedPayload;
|
import cn.axzo.orgmanax.dto.cooperateship.event.CoopeateShipUpsertedPayload;
|
||||||
@ -25,7 +26,9 @@ import cn.axzo.orgmanax.server.cooperateship.foundation.dto.CooperateShipCreator
|
|||||||
import cn.axzo.orgmanax.server.cooperateship.service.CooperateShipService;
|
import cn.axzo.orgmanax.server.cooperateship.service.CooperateShipService;
|
||||||
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 cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.util.BooleanUtil;
|
import cn.hutool.core.util.BooleanUtil;
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
@ -35,6 +38,8 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@ -43,6 +48,7 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
|||||||
|
|
||||||
private final CooperateShipQueryRepository cooperateShipQueryRepository;
|
private final CooperateShipQueryRepository cooperateShipQueryRepository;
|
||||||
private final NodeQueryRepository nodeQueryRepository;
|
private final NodeQueryRepository nodeQueryRepository;
|
||||||
|
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||||
private final UnitQueryRepository unitQueryRepository;
|
private final UnitQueryRepository unitQueryRepository;
|
||||||
private final WorkspaceGateway workspaceGateway;
|
private final WorkspaceGateway workspaceGateway;
|
||||||
private final CooperateShipFoundationService cooperateShipFoundationService;
|
private final CooperateShipFoundationService cooperateShipFoundationService;
|
||||||
@ -87,12 +93,25 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
|||||||
// 全局变量定义:是否查询当前节点及以下节点的人员
|
// 全局变量定义:是否查询当前节点及以下节点的人员
|
||||||
boolean isFilterCurrentAndBelowByPerson = !isFilterCurrentNodeByPerson && ObjectUtil.isNotNull(req.getFilterByPersonId())
|
boolean isFilterCurrentAndBelowByPerson = !isFilterCurrentNodeByPerson && ObjectUtil.isNotNull(req.getFilterByPersonId())
|
||||||
&& Objects.equals(req.getFilterMethod(), ListOrgCooperateShipReq.FILTER_PERSON_TYPE_CURRENT_AND_BELOW_NODE);
|
&& Objects.equals(req.getFilterMethod(), ListOrgCooperateShipReq.FILTER_PERSON_TYPE_CURRENT_AND_BELOW_NODE);
|
||||||
|
List<Long> defaultNodeIds = new ArrayList<>();
|
||||||
if (Objects.nonNull(req.getFilterByPersonId()) && !isFilterCurrentNodeByPerson && !isFilterCurrentAndBelowByPerson) {
|
if (Objects.nonNull(req.getFilterByPersonId()) && !isFilterCurrentNodeByPerson && !isFilterCurrentAndBelowByPerson) {
|
||||||
Axssert.check(false, BizResultCode.INVALID_PARAM, "filterMethod的参数不正确");
|
Axssert.check(false, BizResultCode.INVALID_PARAM, "filterMethod的参数不正确");
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo 这里需要优化,先查nodeUser,防止数据库击穿
|
// 关键查询字段必须有值
|
||||||
|
checkAllNullValue(req::getIds, req::getOuIds, req::getWorkspaceIds, req::getFilterByPersonId, req::getOrganizationNodeIds, req::getOuIds);
|
||||||
|
|
||||||
|
// 如果personId有值, 则先将nodeUser查询来, 作为筛选条件
|
||||||
|
if (isFilterCurrentNodeByPerson) {
|
||||||
|
List<NodeUserQueryRepository.NodeUserResp> nodeUsers = nodeUserQueryRepository.list(NodeUserQueryRepository.ListReq.builder()
|
||||||
|
.personId(req.getFilterByPersonId())
|
||||||
|
.includeDeleted(req.getFilterIncludeExitPerson())
|
||||||
|
.build());
|
||||||
|
if (CollUtil.isNotEmpty(nodeUsers)) {
|
||||||
|
defaultNodeIds.addAll(nodeUsers.stream().map(NodeUserQueryRepository.NodeUserResp::getOrganizationalNodeId).filter(Objects::nonNull).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 构建查询条件
|
// 构建查询条件
|
||||||
CooperateShipQueryRepository.ListReq listReq = CooperateShipQueryRepository.ListReq.builder()
|
CooperateShipQueryRepository.ListReq listReq = CooperateShipQueryRepository.ListReq.builder()
|
||||||
@ -102,10 +121,11 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
|||||||
.ouIds(CollUtil.removeNull(req.getOuIds()))
|
.ouIds(CollUtil.removeNull(req.getOuIds()))
|
||||||
.includeCooperateTypes(CollUtil.removeNull(req.getIncludeCooperateTypes()))
|
.includeCooperateTypes(CollUtil.removeNull(req.getIncludeCooperateTypes()))
|
||||||
.excludeCooperateTypes(CollUtil.removeNull(req.getExcludeCooperateTypes()))
|
.excludeCooperateTypes(CollUtil.removeNull(req.getExcludeCooperateTypes()))
|
||||||
.organizationNodeIds(CollUtil.removeNull(req.getOrganizationNodeIds()))
|
.organizationNodeIds(CollUtil.removeNull(CollUtil.union(defaultNodeIds, req.getOrganizationNodeIds())))
|
||||||
.partnerShips(CollUtil.removeNull(req.getPartnerShips()))
|
.partnerShips(CollUtil.removeNull(req.getPartnerShips()))
|
||||||
.statuses(CollUtil.removeNull(req.getStatuses()))
|
.statuses(CollUtil.removeNull(req.getStatuses()))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// 根据入参查询数据
|
// 根据入参查询数据
|
||||||
List<SaasCooperateShip> currentNodeList = cooperateShipQueryRepository.list(listReq);
|
List<SaasCooperateShip> currentNodeList = cooperateShipQueryRepository.list(listReq);
|
||||||
log.info("【协同关系基础数据查询】 入参 {},结果:{}", JSONUtil.toJsonStr(listReq), JSONUtil.toJsonStr(currentNodeList));
|
log.info("【协同关系基础数据查询】 入参 {},结果:{}", JSONUtil.toJsonStr(listReq), JSONUtil.toJsonStr(currentNodeList));
|
||||||
@ -175,4 +195,32 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
|||||||
resultNodeList.sort(Comparator.comparing(SaasCooperateShip::getPath));
|
resultNodeList.sort(Comparator.comparing(SaasCooperateShip::getPath));
|
||||||
return BeanUtil.copyToList(CollUtil.distinct(resultNodeList, SaasCooperateShip::getId, true), OrgCooperateShipDTO.class);
|
return BeanUtil.copyToList(CollUtil.distinct(resultNodeList, SaasCooperateShip::getId, true), OrgCooperateShipDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验空值
|
||||||
|
* @param suppliers
|
||||||
|
*/
|
||||||
|
private void checkAllNullValue(Supplier<Object>... suppliers) {
|
||||||
|
boolean isAllNull = true;
|
||||||
|
for (Supplier<Object> supplier : suppliers) {
|
||||||
|
Object value = supplier.get();
|
||||||
|
|
||||||
|
if (value != null) {
|
||||||
|
if (value instanceof Collection) {
|
||||||
|
if (CollUtil.isNotEmpty((Collection<?>) value)) {
|
||||||
|
isAllNull = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value instanceof Long) {
|
||||||
|
Long longValue = Convert.toLong(value, 0L);
|
||||||
|
if (longValue > 0) {
|
||||||
|
isAllNull = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Axssert.check(!isAllNull, BizResultCode.INVALID_PARAM, "filterByPersonId,ids,workspaceIds,organizationNodeIds,ouIds至少要有一个不为空");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user