fix(firstleg): hide provider framework errors

This commit is contained in:
2026-09-09 01:20:08 +08:00
parent e7cbe98766
commit 8452f1410f
2 changed files with 18 additions and 1 deletions
@@ -21,6 +21,7 @@ import java.util.UUID;
@Component
@ConditionalOnProperty(prefix = "baiyue.carrier-schedule.scheduler", name = "enabled", havingValue = "true")
public class CarrierScheduleQueryScheduler {
static final String PROVIDER_TEMPORARILY_UNAVAILABLE = "轨迹供应商暂时不可用,请稍后重试或人工补录节点";
private final CarrierScheduleQueryRepository repository;
private final CarrierScheduleQueryService service;
private final CarrierScheduleIntegrationClient integration;
@@ -96,7 +97,7 @@ public class CarrierScheduleQueryScheduler {
result.errorMessage());
} catch (RuntimeException exception) {
service.completeScheduledAttempt(candidate.getId(), "RETRYABLE_FAILURE", "PROVIDER_CALL_FAILED",
exception.getClass().getSimpleName());
PROVIDER_TEMPORARILY_UNAVAILABLE);
}
}
}
@@ -158,6 +158,22 @@ class CarrierScheduleQuerySchedulerTest {
verify(service).completeScheduledAttempt(1L, "RETRYABLE_FAILURE", "HTTP_503", "unavailable");
}
@Test
void providerClientFailurePersistsBusinessSafeMessageInsteadOfFrameworkExceptionName() {
CarrierScheduleQueryRepository repository = mock(CarrierScheduleQueryRepository.class);
CarrierScheduleQueryService service = mock(CarrierScheduleQueryService.class);
CarrierScheduleIntegrationClient integration = mock(CarrierScheduleIntegrationClient.class);
CarrierScheduleQueryScheduler scheduler = new CarrierScheduleQueryScheduler(repository, service, integration);
CarrierScheduleQueryEntity task = task(1L);
when(repository.claimLease(anyLong(), anyString(), any(), any())).thenReturn(true);
when(integration.query(any(), any())).thenThrow(new RuntimeException("NoFallbackAvailableException"));
scheduler.execute(task, LocalDateTime.of(2026, 9, 9, 9, 0));
verify(service).completeScheduledAttempt(1L, "RETRYABLE_FAILURE", "PROVIDER_CALL_FAILED",
CarrierScheduleQueryScheduler.PROVIDER_TEMPORARILY_UNAVAILABLE);
}
private static CarrierScheduleQueryEntity task(long id) {
CarrierScheduleQueryEntity value = new CarrierScheduleQueryEntity(); value.setId(id); return value;
}