diff --git a/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/mapper/WarehouseResourceLockMapper.java b/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/mapper/WarehouseResourceLockMapper.java index 7bd67e1a1..a478eb37b 100644 --- a/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/mapper/WarehouseResourceLockMapper.java +++ b/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/mapper/WarehouseResourceLockMapper.java @@ -46,7 +46,7 @@ public interface WarehouseResourceLockMapper extends BaseMapper() + .eq(WarehouseLocationEntity::getCustomerId, WarehouseResourceService.PUBLIC_RESOURCE_SCOPE) + .eq(WarehouseLocationEntity::getWarehouseId, warehouseId) + .notIn(WarehouseLocationEntity::getLocationType, "VIRTUAL", "SHARED_OVERFLOW") + .in(WarehouseLocationEntity::getStatus, "ACTIVE", "IDLE") + .orderByAsc(WarehouseLocationEntity::getLocationCode) + .last("LIMIT 1")); + } + public WarehouseLocationEntity findSharedOverflowLocation(long warehouseId) { return locations.selectOne(new LambdaQueryWrapper() .eq(WarehouseLocationEntity::getCustomerId, 0L) diff --git a/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/service/WarehousePalletBatchService.java b/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/service/WarehousePalletBatchService.java index 0672f1689..1f3c97c40 100644 --- a/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/service/WarehousePalletBatchService.java +++ b/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/service/WarehousePalletBatchService.java @@ -91,9 +91,11 @@ public class WarehousePalletBatchService { WarehousePalletEntity createdPallet = resources.reusablePublicPallet( normalized.warehouseId(), requested.palletCode()); if (createdPallet == null) { + var autoLocation = repository.findFirstAutoAssignableLocation(normalized.warehouseId()); + Long locationId = autoLocation == null ? null : autoLocation.getId(); Long palletId = resources.createPallet(WarehouseResourceService.PUBLIC_RESOURCE_SCOPE, normalized.warehouseId(), new PalletRequests.SaveRequest(requested.palletCode(), "WOOD", - AUTO_PALLET_CAPACITY_CBM, AUTO_PALLET_UNIT_PRICE_USD, "IDLE", null, AUTO_PALLET_REMARK, + AUTO_PALLET_CAPACITY_CBM, AUTO_PALLET_UNIT_PRICE_USD, "IDLE", locationId, AUTO_PALLET_REMARK, requested.fbaWarehouseCode())); createdPallet = resources.pallet(WarehouseResourceService.PUBLIC_RESOURCE_SCOPE, normalized.warehouseId(), palletId); diff --git a/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/service/WarehouseResourceLockService.java b/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/service/WarehouseResourceLockService.java index 3f0be9c31..d07fd44b9 100644 --- a/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/service/WarehouseResourceLockService.java +++ b/warehouse-overseas-service/src/main/java/com/baiyue/warehouse/service/WarehouseResourceLockService.java @@ -16,6 +16,7 @@ import jakarta.annotation.Resource; import java.time.LocalDateTime; import java.util.Objects; +import java.util.Set; @Service public class WarehouseResourceLockService { @@ -35,7 +36,11 @@ public class WarehouseResourceLockService { throw new BizException(ResultCode.NOT_FOUND, "Pallet or location does not belong to the tenant warehouse"); } boolean nonExclusiveLocation = isNonExclusive(location); - boolean locationAvailable = nonExclusiveLocation ? "ACTIVE".equals(location.getStatus()) : "IDLE".equals(location.getStatus()); + // ACTIVE is the UI-facing enabled/unused state; IDLE is retained for + // locations created by the older lifecycle. + boolean locationAvailable = nonExclusiveLocation + ? "ACTIVE".equals(location.getStatus()) + : Set.of("ACTIVE", "IDLE").contains(location.getStatus()); if (!"IDLE".equals(pallet.getStatus()) || !locationAvailable) { WarehouseResourceLockEntity concurrent = repository.findByReservationKey(request.customerId(), request.reservationKey());