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.last(" limit 10000");
|
||||
return cooperateShipDao.list(wrapper)
|
||||
.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.node.entity.OrganizationalNode;
|
||||
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.server.cooperateship.event.inner.CooperateShipEventType;
|
||||
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.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
@ -35,6 +38,8 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@ -43,6 +48,7 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
|
||||
private final CooperateShipQueryRepository cooperateShipQueryRepository;
|
||||
private final NodeQueryRepository nodeQueryRepository;
|
||||
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||
private final UnitQueryRepository unitQueryRepository;
|
||||
private final WorkspaceGateway workspaceGateway;
|
||||
private final CooperateShipFoundationService cooperateShipFoundationService;
|
||||
@ -87,12 +93,25 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
// 全局变量定义:是否查询当前节点及以下节点的人员
|
||||
boolean isFilterCurrentAndBelowByPerson = !isFilterCurrentNodeByPerson && ObjectUtil.isNotNull(req.getFilterByPersonId())
|
||||
&& Objects.equals(req.getFilterMethod(), ListOrgCooperateShipReq.FILTER_PERSON_TYPE_CURRENT_AND_BELOW_NODE);
|
||||
|
||||
List<Long> defaultNodeIds = new ArrayList<>();
|
||||
if (Objects.nonNull(req.getFilterByPersonId()) && !isFilterCurrentNodeByPerson && !isFilterCurrentAndBelowByPerson) {
|
||||
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()
|
||||
@ -102,10 +121,11 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
.ouIds(CollUtil.removeNull(req.getOuIds()))
|
||||
.includeCooperateTypes(CollUtil.removeNull(req.getIncludeCooperateTypes()))
|
||||
.excludeCooperateTypes(CollUtil.removeNull(req.getExcludeCooperateTypes()))
|
||||
.organizationNodeIds(CollUtil.removeNull(req.getOrganizationNodeIds()))
|
||||
.organizationNodeIds(CollUtil.removeNull(CollUtil.union(defaultNodeIds, req.getOrganizationNodeIds())))
|
||||
.partnerShips(CollUtil.removeNull(req.getPartnerShips()))
|
||||
.statuses(CollUtil.removeNull(req.getStatuses()))
|
||||
.build();
|
||||
|
||||
// 根据入参查询数据
|
||||
List<SaasCooperateShip> currentNodeList = cooperateShipQueryRepository.list(listReq);
|
||||
log.info("【协同关系基础数据查询】 入参 {},结果:{}", JSONUtil.toJsonStr(listReq), JSONUtil.toJsonStr(currentNodeList));
|
||||
@ -175,4 +195,32 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
resultNodeList.sort(Comparator.comparing(SaasCooperateShip::getPath));
|
||||
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