This commit is contained in:
2026-09-11 11:51:26 +08:00
parent d60689ce02
commit d2cff49b9e
45 changed files with 569 additions and 66 deletions
+1 -1
View File
@@ -12,7 +12,7 @@
| 目标 | 入口 |
|---|---|
| 仓库/地址/能力 | `controller/PlatformWarehouseController.java`、`MerchantWarehouseController.java`、`service/WarehouseApplicationService.java` |
| 仓库/地址/能力 | `controller/PlatformWarehouseController.java`、`MerchantWarehouseController.java`、`service/WarehouseApplicationService.java`;国内 PDA 仓库目录由 `InternalWarehouseController.java` 的 `/internal/warehouses/domestic` 提供给 Firstleg |
| FBA 目的仓公共主数据与 Admin 候选 | 权威表 `wh_warehouse` 的 `tenant_id=0 + warehouse_type=FBA` 记录;Admin 直接调用 `GET /api/platform/v1/warehouse-admin?warehouseType=FBA&status=ACTIVE&page=1&size=200`,权限 `platform:warehouse:list`,DTO `WarehouseSummaryResponse` 的 `id/warehouseCode/warehouseName/status/countryCode/primaryAddress.stateProvince` 分别作为 ID/编码/名称/状态/国家/区域 |
| FBA 目的仓内部校验 | `InternalWarehouseController.java` 的 `GET /internal/warehouses/0/{warehouseId}/active`,使用内部服务令牌返回 `WarehouseDetailResponse`;调用方仍须校验 `warehouseType=FBA` 及 ID/编码/名称一致,不得把 `OVERSEAS` 实际收货仓或 `DOMESTIC` 中转仓当作 FBA 目的仓 |
| 公共海外收货仓内部目录 | `controller/InternalWarehouseController.java` 的 `/internal/warehouses/shared-overseas`、`/shared-overseas/{warehouseId}`,响应 `dto/SharedOverseasWarehouseResponse.java`;只返回平台公共 `OVERSEAS + ACTIVE + RECEIVING` 仓,供海外资源服务按 warehouseId 引用 |
@@ -4,6 +4,7 @@ import com.baiyue.common.core.api.ApiResponse;
import com.baiyue.common.core.api.ResultCode;
import com.baiyue.common.core.exception.BizException;
import com.baiyue.warehouse.dto.WarehouseDetailResponse;
import com.baiyue.warehouse.dto.DomesticWarehouseOptionResponse;
import com.baiyue.warehouse.dto.OverseasPartnerWarehouseResponse;
import com.baiyue.warehouse.dto.SharedOverseasWarehouseResponse;
import com.baiyue.warehouse.service.WarehouseApplicationService;
@@ -49,6 +50,13 @@ public class InternalWarehouseController {
return ApiResponse.success(service.activeOverseasPartners());
}
@GetMapping("/domestic")
public ApiResponse<List<DomesticWarehouseOptionResponse>> domesticWarehouses(
@RequestHeader(value="X-Internal-Service-Token", required=false) String token) {
verifyToken(token);
return ApiResponse.success(service.activeDomesticWarehouses());
}
@GetMapping("/shared-overseas")
public ApiResponse<List<SharedOverseasWarehouseResponse>> sharedOverseasWarehouses(
@RequestHeader(value="X-Internal-Service-Token", required=false) String token) {
@@ -0,0 +1,11 @@
package com.baiyue.warehouse.dto;
import com.baiyue.warehouse.entity.WarehouseEntity;
/** 国内 PDA 可选择的启用仓库主档。 */
public record DomesticWarehouseOptionResponse(Long id, String warehouseCode, String warehouseName) {
public static DomesticWarehouseOptionResponse of(WarehouseEntity warehouse) {
return new DomesticWarehouseOptionResponse(
warehouse.getId(), warehouse.getWarehouseCode(), warehouse.getWarehouseName());
}
}
@@ -6,6 +6,7 @@ import com.baiyue.common.core.api.PageResult;
import com.baiyue.common.core.api.ResultCode;
import com.baiyue.common.core.exception.BizException;
import com.baiyue.warehouse.dto.WarehouseDetailResponse;
import com.baiyue.warehouse.dto.DomesticWarehouseOptionResponse;
import com.baiyue.warehouse.dto.WarehouseRequests;
import com.baiyue.warehouse.dto.OverseasPartnerWarehouseResponse;
import com.baiyue.warehouse.dto.WarehouseSummaryResponse;
@@ -96,6 +97,14 @@ public class WarehouseApplicationService {
.toList();
}
public List<DomesticWarehouseOptionResponse> activeDomesticWarehouses() {
return repository.findActiveByType(WarehouseSaveNormalizer.PUBLIC_TENANT_ID,
WarehouseSaveNormalizer.TYPE_DOMESTIC)
.stream()
.map(DomesticWarehouseOptionResponse::of)
.toList();
}
public List<SharedOverseasWarehouseResponse> activeSharedOverseasWarehouses() {
return repository.findActiveByType(WarehouseSaveNormalizer.PUBLIC_TENANT_ID,
WarehouseSaveNormalizer.TYPE_OVERSEAS)
@@ -3,6 +3,7 @@ package com.baiyue.warehouse.controller;
import com.baiyue.common.core.api.ResultCode;
import com.baiyue.common.core.exception.BizException;
import com.baiyue.warehouse.dto.WarehouseDetailResponse;
import com.baiyue.warehouse.dto.DomesticWarehouseOptionResponse;
import com.baiyue.warehouse.dto.OverseasPartnerWarehouseResponse;
import com.baiyue.warehouse.dto.SharedOverseasWarehouseResponse;
import com.baiyue.warehouse.entity.WarehouseEntity;
@@ -85,6 +86,17 @@ class InternalWarehouseControllerTest {
verify(service).activeOverseasPartners();
}
@Test
void listsActiveDomesticWarehouseOptionsForInternalCallers() {
var option = new DomesticWarehouseOptionResponse(200001L, "CN-DONGGUAN-01", "东莞仓");
when(service.activeDomesticWarehouses()).thenReturn(List.of(option));
var response = controller.domesticWarehouses(INTERNAL_TOKEN);
assertThat(response.data()).containsExactly(option);
verify(service).activeDomesticWarehouses();
}
@Test
void exposesSharedOverseasReceivingDirectoryOnlyWithInternalToken() {
var warehouse = new SharedOverseasWarehouseResponse(200003L, "US-LAX-01",