From 52fad8505bd8f579c2905492694f03473851c9f2 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Wed, 23 Sep 2026 09:59:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/UnifiedOrderQueryService.java | 19 +++++++++++++++---- .../service/UnifiedOrderQueryServiceTest.java | 16 ++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/order/src/main/java/com/baiyue/order/service/UnifiedOrderQueryService.java b/order/src/main/java/com/baiyue/order/service/UnifiedOrderQueryService.java index 71cdef183..2b9c264ca 100644 --- a/order/src/main/java/com/baiyue/order/service/UnifiedOrderQueryService.java +++ b/order/src/main/java/com/baiyue/order/service/UnifiedOrderQueryService.java @@ -18,6 +18,8 @@ import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.math.BigDecimal; import java.util.ArrayList; @@ -36,6 +38,7 @@ import java.util.stream.Collectors; /** Product-level read façade. Existing Order and Firstleg state machines stay unchanged. */ @Service public class UnifiedOrderQueryService { + private static final Logger LOGGER = LoggerFactory.getLogger(UnifiedOrderQueryService.class); private static final Set MAIN_STATUSES = Set.of( "PENDING_REVIEW", "WAIT_MEASURE", "WAIT_PALLETIZE", "INBOUNDED", "WAIT_SPLIT", "LOADING", "LOADED", "DELIVERED", "COMPLETED"); @@ -251,10 +254,18 @@ public class UnifiedOrderQueryService { private Map coLoadGroups( List orderIds, boolean includeCoLoadGroups) { if (!includeCoLoadGroups || orderIds.isEmpty()) return Map.of(); - List data = require( - call(() -> coloadGroups.batchQuery(internalToken, - new FirstlegColoadGroupClient.BatchQueryRequest(orderIds.stream().distinct().toList()))), - "同柜组摘要响应无效"); + List data; + try { + data = require( + call(() -> coloadGroups.batchQuery(internalToken, + new FirstlegColoadGroupClient.BatchQueryRequest(orderIds.stream().distinct().toList()))), + "同柜组摘要响应无效"); + } catch (BizException exception) { + // Co-load data is a supplementary list decoration. A temporary Firstleg/token/schema + // failure must not make the authoritative Order list unavailable. + LOGGER.warn("读取同柜组摘要失败,继续返回订单列表: orderCount={}", orderIds.size(), exception); + return Map.of(); + } List memberOrderIds = data.stream().filter(Objects::nonNull) .map(FirstlegColoadGroupClient.OrderGroupInfo::group).filter(Objects::nonNull) .flatMap(group -> safeMembers(group).stream()) diff --git a/order/src/test/java/com/baiyue/order/service/UnifiedOrderQueryServiceTest.java b/order/src/test/java/com/baiyue/order/service/UnifiedOrderQueryServiceTest.java index 272ed6f56..f65377b3d 100644 --- a/order/src/test/java/com/baiyue/order/service/UnifiedOrderQueryServiceTest.java +++ b/order/src/test/java/com/baiyue/order/service/UnifiedOrderQueryServiceTest.java @@ -462,6 +462,22 @@ class UnifiedOrderQueryServiceTest { pageOrders.stream().map(OrderEntity::getId).toList()); } + @Test + void platformPageKeepsOrderListAvailableWhenColoadSummaryIsUnavailable() { + UnifiedOrderQuery query = query("PENDING_REVIEW"); + OrderEntity order = order(OrderStatus.SUBMITTED); + when(orders.unifiedPage(eq(10001L), eq(query), eq(List.of(OrderStatus.SUBMITTED)))) + .thenReturn(new PageResult<>(List.of(order), 1, 20, 1, 1)); + when(coloadGroups.batchQuery(eq("internal-token"), any())) + .thenThrow(new RuntimeException("firstleg unavailable")); + + assertThat(service.platformPage(10001L, query).records()) + .singleElement().satisfies(row -> { + assertThat(row.orderId()).isEqualTo(order.getId()); + assertThat(row.coLoadGroup()).isNull(); + }); + } + @Test void platformDetailIncludesColoadBusinessSummary() { OrderEntity order = order(OrderStatus.APPROVED);