package com.baiyue.integration.provider; import com.baiyue.integration.dto.CarrierScheduleDtos.QueryRequest; import com.baiyue.integration.dto.CarrierScheduleDtos.QueryResult; import com.baiyue.integration.dto.ProviderStatus; import org.springframework.stereotype.Component; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import java.time.LocalDateTime; import java.util.List; import java.util.Locale; import java.util.Set; /** * Safe fallback for the six confirmed carriers. It never scrapes captcha/dynamic pages and returns * an explicit provider-unavailable outcome until a documented provider API adapter is configured. */ @Component @Order(Ordered.LOWEST_PRECEDENCE) public class CompliantCarrierScheduleProviderAdapter implements CarrierScheduleProviderAdapter, IntegrationProviderAdapter { private static final Set CARRIERS = Set.of("MATSON", "SML", "ZIM", "COSCO", "EMC", "HEDE"); @Override public boolean supports(String carrierCode) { return carrierCode != null && CARRIERS.contains(carrierCode.trim().toUpperCase(Locale.ROOT)); } @Override public QueryResult query(QueryRequest request) { return new QueryResult("COMPLIANT_MANUAL_FALLBACK", "MANUAL_REQUIRED", List.of(), List.of(), "PROVIDER_API_NOT_CONFIGURED", "未配置可审计的结构化轨迹供应商接口,不执行网页抓取", LocalDateTime.now()); } @Override public ProviderStatus status() { return ProviderStatus.of("CARRIER_SCHEDULE_FALLBACK", true, false); } }