fix: close inbound hold bypass paths

This commit is contained in:
2026-09-07 12:10:11 +08:00
parent 6b479d1a68
commit 41582fe17b
28 changed files with 899 additions and 11 deletions
@@ -162,7 +162,9 @@ public class UnifiedOrderQueryService {
query.page(), query.size());
PageResult<FirstlegUnifiedOrderClient.Summary> source = require(
call(() -> firstleg.page(internalToken, request)), "统一订单履约查询响应无效");
List<Long> orderIds = source.records().stream().map(item -> item.inbound().orderId()).toList();
List<FirstlegUnifiedOrderClient.Summary> summaries = validateSummaries(
source.records(), "统一订单履约查询响应无效");
List<Long> orderIds = summaries.stream().map(item -> item.inbound().orderId()).toList();
Map<Long, OrderEntity> orderById = orders.findByIds(tenantId, orderIds).stream()
.collect(Collectors.toMap(OrderEntity::getId, Function.identity(), (left, right) -> left));
Map<Long, String> latestNotes = latestNotes(tenantId, orderIds);
@@ -170,7 +172,7 @@ public class UnifiedOrderQueryService {
Map<Long, Integer> childCounts = childCounts(List.copyOf(orderById.values()));
Map<Long, UnifiedOrderResponse.CoLoadGroupSummary> coLoadByOrder = coLoadGroups(
orderIds, includeCoLoadGroups);
List<UnifiedOrderResponse.Row> records = source.records().stream()
List<UnifiedOrderResponse.Row> records = summaries.stream()
.map(summary -> row(summary, orderById.get(summary.inbound().orderId()),
latestNotes.get(summary.inbound().orderId()), childCounts,
cargoSummaries.get(summary.inbound().orderId()),
@@ -185,13 +187,33 @@ public class UnifiedOrderQueryService {
call(() -> firstleg.summaries(internalToken,
new FirstlegUnifiedOrderClient.BatchRequest(tenantId, orderIds))),
"统一订单履约摘要响应无效");
return data.stream().collect(Collectors.toMap(item -> item.inbound().orderId(),
return validateSummaries(data, "统一订单履约摘要响应无效").stream()
.collect(Collectors.toMap(item -> item.inbound().orderId(),
Function.identity(), (left, right) -> left));
}
private FirstlegUnifiedOrderClient.Detail firstlegDetail(long tenantId, long orderId) {
return requireNullable(call(() -> firstleg.detail(internalToken,
FirstlegUnifiedOrderClient.Detail detail = requireNullable(call(() -> firstleg.detail(internalToken,
new FirstlegUnifiedOrderClient.DetailRequest(tenantId, orderId))), "统一订单履约详情响应无效");
if (detail != null) validateSummary(detail.summary(), "统一订单履约详情响应无效");
return detail;
}
private List<FirstlegUnifiedOrderClient.Summary> validateSummaries(
List<FirstlegUnifiedOrderClient.Summary> summaries, String message) {
return summaries.stream().map(summary -> validateSummary(summary, message)).toList();
}
private FirstlegUnifiedOrderClient.Summary validateSummary(
FirstlegUnifiedOrderClient.Summary summary, String message) {
FirstlegUnifiedOrderClient.Inbound inbound = summary == null ? null : summary.inbound();
if (inbound == null || inbound.id() == null || inbound.tenantId() == null
|| inbound.orderId() == null || inbound.holdFlag() == null
|| (Boolean.TRUE.equals(inbound.holdFlag()) && !StringUtils.hasText(inbound.currentHoldReason()))
|| (Boolean.FALSE.equals(inbound.holdFlag()) && inbound.currentHoldReason() != null)) {
throw new BizException(ResultCode.SERVICE_UNAVAILABLE, message);
}
return summary;
}
private Map<Long, String> latestNotes(Long tenantId, List<Long> orderIds) {