fix(lastleg): inspect occupied pallets for PDA queries

This commit is contained in:
2026-09-08 23:34:12 +08:00
parent 3e15ad6b5b
commit 0c984e8f5f
7 changed files with 68 additions and 12 deletions
@@ -117,6 +117,17 @@ public class HttpWarehouseResourceGateway implements WarehouseResourceGateway {
@Override
public WarehousePalletReference resolvePallet(String palletCode) {
WarehousePalletData data = palletData(palletCode);
requireReservable(data);
return pallet(data);
}
@Override
public WarehousePalletReference inspectPallet(String palletCode) {
return pallet(palletData(palletCode));
}
private WarehousePalletData palletData(String palletCode) {
WarehousePalletResponse response = client.get()
.uri("/internal/v1/warehouse-pallets/resolve/{palletCode}", palletCode)
.header("X-Internal-Service-Token", internalToken)
@@ -130,10 +141,12 @@ public class HttpWarehouseResourceGateway implements WarehouseResourceGateway {
throw new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE,
"Warehouse pallet service returned no usable response");
}
requireReservable(response.data());
return new WarehousePalletReference(response.data().id(), response.data().palletCode(),
response.data().warehouseId(), response.data().locationId(), response.data().status(),
response.data().fbaWarehouseCode(), response.data().unitPrice(), response.data().version());
return response.data();
}
private WarehousePalletReference pallet(WarehousePalletData data) {
return new WarehousePalletReference(data.id(), data.palletCode(), data.warehouseId(), data.locationId(),
data.status(), data.fbaWarehouseCode(), data.unitPrice(), data.version());
}
@Override
@@ -9,6 +9,9 @@ public interface WarehouseResourceGateway {
void scrapPallet(String customerId, long palletId);
WarehousePalletReference resolvePallet(String palletCode);
WarehousePalletReference resolvePallet(long palletId);
default WarehousePalletReference inspectPallet(String palletCode) {
return resolvePallet(palletCode);
}
default WarehouseLocationReference resolveLocation(long warehouseId, String locationCode) {
throw new UnsupportedOperationException("Warehouse location resolution is not configured");
}
@@ -41,7 +41,7 @@ public class PdaWarehouseService {
}
public PdaWarehouseResponses.Pallet pallet(long warehouseId, PdaWarehouseRequests.Scan request) {
WarehouseResourceGateway.WarehousePalletReference pallet = warehouse.resolvePallet(code(request.code()));
WarehouseResourceGateway.WarehousePalletReference pallet = warehouse.inspectPallet(code(request.code()));
if (pallet == null) throw notFound("Warehouse pallet was not found");
if (pallet.warehouseId() != warehouseId) throw conflict("Pallet belongs to another overseas warehouse");
WarehouseResourceGateway.WarehouseLocationReference location = warehouse.resolveLocation(warehouseId,