feat: enforce canonical container identity across regions
This commit is contained in:
+14
-3
@@ -1,5 +1,6 @@
|
||||
package com.baiyue.integration.service;
|
||||
|
||||
import com.baiyue.common.event.ContainerNumbers;
|
||||
import com.baiyue.integration.dto.CarrierScheduleDtos.QueryRequest;
|
||||
import com.baiyue.integration.dto.CarrierScheduleDtos.QueryResult;
|
||||
import com.baiyue.integration.provider.CarrierScheduleProviderAdapter;
|
||||
@@ -21,10 +22,20 @@ public class CarrierScheduleProviderService {
|
||||
}
|
||||
|
||||
public QueryResult query(QueryRequest request) {
|
||||
QueryResult result = adapters.stream().filter(adapter -> adapter.supports(request.carrierCode())).findFirst()
|
||||
if (!"CONTAINER_NO".equals(request.trackingType())) {
|
||||
throw new IllegalArgumentException("trackingType仅支持CONTAINER_NO");
|
||||
}
|
||||
String containerNo;
|
||||
try {
|
||||
containerNo = ContainerNumbers.requireCanonical(request.trackingNo());
|
||||
} catch (IllegalArgumentException exception) {
|
||||
throw new IllegalArgumentException("trackingNo必须是规范化真实集装箱号");
|
||||
}
|
||||
QueryRequest normalized = new QueryRequest(request.carrierCode(), "CONTAINER_NO", containerNo);
|
||||
QueryResult result = adapters.stream().filter(adapter -> adapter.supports(normalized.carrierCode())).findFirst()
|
||||
.orElseThrow(() -> new IllegalArgumentException(
|
||||
"没有支持该船司的轨迹供应商适配器:" + request.carrierCode()))
|
||||
.query(request);
|
||||
"没有支持该船司的轨迹供应商适配器:" + normalized.carrierCode()))
|
||||
.query(normalized);
|
||||
if (result == null || result.observations() == null || result.exceptions() == null
|
||||
|| !OUTCOMES.contains(result.outcome())) {
|
||||
throw new IllegalStateException("轨迹供应商返回空结果");
|
||||
|
||||
Reference in New Issue
Block a user