This commit is contained in:
2026-08-08 15:05:33 +08:00
parent 102845874b
commit e395292cd5
11 changed files with 2771 additions and 8 deletions
@@ -21,7 +21,7 @@ public interface OverseasStorageFeeClient {
ApiResponse<Void> compensate(@RequestHeader("X-Internal-Service-Token") String token,
@RequestBody CompensationRequest request);
record InitializationRequest(long tenantId, long operatorId, String initializationKey) { }
record InitializationRequest(long tenantId, long operatorId, String initializationKey, String customerName) { }
record InitializationResponse(Long configId, boolean createdByThisInitialization) { }
record CompensationRequest(long tenantId, String initializationKey) { }
}
@@ -121,7 +121,7 @@ public class MerchantOnboardingService {
addressMapper.insert(address);
}
dimensionRuleInitialization.initialize(tenantId, request.authUserId());
overseasStorageFeeInitialization.initialize(tenantId, request.authUserId());
overseasStorageFeeInitialization.initialize(tenantId, request.authUserId(), tenant.getTenantName());
return new MerchantRegistrationResponse(tenantId, membershipId, tenant.getStatus());
}
@@ -22,13 +22,13 @@ public class OverseasStorageFeeInitializationService {
@Resource private OverseasStorageFeeClient client;
@Value("${baiyue.security.internal-service-token}") private String internalToken;
public InitializationResult initialize(long tenantId, long operatorId) {
public InitializationResult initialize(long tenantId, long operatorId, String customerName) {
String key = initializationKey(tenantId);
RuntimeException last = null;
for (int attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
try {
ApiResponse<OverseasStorageFeeClient.InitializationResponse> response = client.initialize(
internalToken, new OverseasStorageFeeClient.InitializationRequest(tenantId, operatorId, key));
internalToken, new OverseasStorageFeeClient.InitializationRequest(tenantId, operatorId, key, customerName));
if (response != null && response.successful() && response.data() != null) {
InitializationResult result = new InitializationResult(
response.data().createdByThisInitialization(), key);
@@ -182,7 +182,7 @@ public class TenantService {
tenant.setUpdatedBy(operatorId);
repository.insertTenant(tenant);
dimensionRuleInitialization.initialize(tenant.getId(), operatorId);
overseasStorageFeeInitialization.initialize(tenant.getId(), operatorId);
overseasStorageFeeInitialization.initialize(tenant.getId(), operatorId, tenant.getTenantName());
var administrator = administratorProvisioning.provisionPlatformCreatedTenant(tenant, operatorId);
return new CreationResponse(response(tenant), administrator.username(), administrator.temporaryPassword());
@@ -66,7 +66,7 @@ class MerchantOnboardingServiceTest {
verify(memberships).insert(membership.capture());
verify(membershipRoles).insert(roleGrant.capture());
verify(dimensionRuleInitialization).initialize(result.tenantId(), 9001L);
verify(overseasStorageFeeInitialization).initialize(result.tenantId(), 9001L);
verify(overseasStorageFeeInitialization).initialize(result.tenantId(), 9001L, "测试企业");
assertEquals("PROFILE_REQUIRED", result.tenantStatus());
assertEquals(result.tenantId(), tenant.getValue().getId());
@@ -34,7 +34,7 @@ class OverseasStorageFeeInitializationServiceTest {
@Test void retriesThreeTimesWithDeterministicKey() {
when(client.initialize(anyString(), any())).thenThrow(new RuntimeException("timeout"));
when(client.compensate(anyString(), any(OverseasStorageFeeClient.CompensationRequest.class))).thenReturn(ApiResponse.success(null));
BizException error = assertThrows(BizException.class, () -> service.initialize(208L, 9L));
BizException error = assertThrows(BizException.class, () -> service.initialize(208L, 9L, "客户"));
assertEquals(ResultCode.SERVICE_UNAVAILABLE, error.getResultCode());
verify(client, times(3)).initialize(anyString(), any(OverseasStorageFeeClient.InitializationRequest.class));
verify(client).compensate("internal-token", new OverseasStorageFeeClient.CompensationRequest(208L, "iam-customer-create-overseas-fee:208"));
@@ -0,0 +1,435 @@
{
"reportName": "后台管理测试环境 HTTP API 验收",
"marker": "ADMIN-API-20260808065359934",
"gateway": "http://8.163.30.128:9000",
"generatedAt": "2026-08-08T06:54:01.938Z",
"startedAt": "2026-08-08T06:53:59.934Z",
"success": false,
"fatal": null,
"summary": {
"total": 19,
"passed": 15,
"failed": 4
},
"modules": [
{
"name": "overseas-storage-fees",
"startedAt": "2026-08-08T06:54:00.315Z",
"finishedAt": "2026-08-08T06:54:01.938Z",
"success": false,
"passed": 14,
"failed": 4,
"fatal": null
}
],
"scenarios": [
{
"name": "customer-overseas-storage-fee-lifecycle",
"module": "overseas-storage-fees",
"success": false,
"deploymentBlocked": true,
"passed": 14,
"failed": 4
}
],
"deploymentBlockers": [
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "修改后币种、价格、9档及版本整体回显",
"evidence": "currency=EUR, version=1, tiers=9",
"code": "200",
"requestId": "1b3e9007-3bce-4dc5-8bcd-e2f622f698c0, f704cd04-0a0d-40e9-b9d4-4b6e171e95ce",
"traceId": "8cc5f4c572564f12b7ed16575880a7e2"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "冲突未造成部分更新",
"evidence": "version=1, unchanged=true",
"code": "200",
"requestId": "87016da5-09ad-423b-882d-d9e6f9bc8302, e1382b9c-31e6-43f2-a5b4-d4c87ada450b",
"traceId": "149a8ab4baec44f88b5e0aa2d24d1ced"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "恢复本轮客户费用原始配置",
"evidence": "restore=initial",
"code": "A0422",
"requestId": "e772de39-7242-48a8-9e4e-108c941e2281",
"traceId": "fe07e9fd7613495bb8ebaec4ce75d427"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "恢复后9档、USD、免费档和无上限档一致",
"evidence": "currency=EUR, version=1, tiers=9",
"code": "200",
"requestId": "121fdf43-c905-413b-b903-93761c4fbfa3, cd45037f-90e6-4393-ad4b-a1b9efc5e45a",
"traceId": "0aac3349fdba4446b5aab9835d45df50"
}
],
"createdResources": {
"overseasStorageFeeCustomer": {
"tenantId": "2085982841955012609",
"marker": "ADMIN-API-20260808065359934",
"ownedByModule": true
}
},
"excluded": [
{
"scope": "dashboard",
"reason": "首页为静态演示数据,不调用后端 API"
},
{
"scope": "hidden-prototypes",
"reason": "隐藏原型页面尚无已确认后端契约"
}
],
"securityNote": "报告不保存登录密码、Access Token、Refresh Token、图片二进制或 OCR 原文全文。",
"steps": [
{
"module": "authentication",
"scenario": null,
"name": "平台管理员登录",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/auth/login"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "0db4a44a-dbc6-4f84-b553-fbfee8ed8b8e, a432e66f-c1c7-47b1-8d4b-97d1c285352c",
"traceId": "3728103aab034b85b273b95ed105b46c",
"evidence": "",
"checkedAt": "2026-08-08T06:54:00.313Z"
},
{
"module": "overseas-storage-fees",
"scenario": null,
"name": "检查测试联系电话可用性",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/contact-phone-availability?contactPhone=16172040315"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "13d24ff8-ba69-48e3-8e4e-117c1d899ff4, 89009cea-52a6-44b3-afac-b9bcc77f7779",
"traceId": "51ea477f6a6c4c7bab8a8e22b8e267e8",
"evidence": "attempt=1",
"checkedAt": "2026-08-08T06:54:00.557Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "创建海外仓费用隔离客户",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/platform/v1/iam/tenants"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "fa4ded48-6b11-429b-8033-ed16100666a6, 707817b8-9ba3-4889-9f79-7c1a05546564",
"traceId": "39044aa3bef440b486e2fc61899321c5",
"evidence": "",
"checkedAt": "2026-08-08T06:54:01.244Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "海外仓费用隔离客户创建并带 marker",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/platform/v1/iam/tenants"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "fa4ded48-6b11-429b-8033-ed16100666a6, 707817b8-9ba3-4889-9f79-7c1a05546564",
"traceId": "39044aa3bef440b486e2fc61899321c5",
"evidence": "tenantId=2085982841955012609",
"checkedAt": "2026-08-08T06:54:01.245Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "查询客户海外仓费用配置",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "f803e78c-053a-4f8e-b59f-23c41982b470, 4237c9d5-cf92-4a38-82b7-a630df8e3c55",
"traceId": "27f6c77621c144ebb033cd7815e506fa",
"evidence": "tenantId=2085982841955012609",
"checkedAt": "2026-08-08T06:54:01.303Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "客户费用配置身份、默认 USD 与9档结构正确",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "f803e78c-053a-4f8e-b59f-23c41982b470, 4237c9d5-cf92-4a38-82b7-a630df8e3c55",
"traceId": "27f6c77621c144ebb033cd7815e506fa",
"evidence": "ruleId=2085982842560495618, customerId=2085982841955012609, currency=USD, tiers=9",
"checkedAt": "2026-08-08T06:54:01.303Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "请求体客户 ID 与路径不一致时安全失败",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "PUT",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "A0422",
"message": "customerName: must not be blank",
"requestId": "98f3e904-40ca-4e75-adcd-daac009061f4",
"traceId": "cec7ec0f388b41cca76da9d591bdedb2",
"evidence": "HTTP=200, code=A0422",
"checkedAt": "2026-08-08T06:54:01.439Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "整组修改客户海外仓费用",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "PUT",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "276938b8-b96d-4de5-bea5-887f62f179d6, 24d76e17-16c5-4323-8c62-942a791d03d7",
"traceId": "db7b40c4abd149f5b1f0d7c47126d84f",
"evidence": "tenantId=2085982841955012609, tiers=9",
"checkedAt": "2026-08-08T06:54:01.554Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "回查整组修改后的客户费用",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "1b3e9007-3bce-4dc5-8bcd-e2f622f698c0, f704cd04-0a0d-40e9-b9d4-4b6e171e95ce",
"traceId": "8cc5f4c572564f12b7ed16575880a7e2",
"evidence": "",
"checkedAt": "2026-08-08T06:54:01.601Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "修改后币种、价格、9档及版本整体回显",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "1b3e9007-3bce-4dc5-8bcd-e2f622f698c0, f704cd04-0a0d-40e9-b9d4-4b6e171e95ce",
"traceId": "8cc5f4c572564f12b7ed16575880a7e2",
"evidence": "currency=EUR, version=1, tiers=9",
"checkedAt": "2026-08-08T06:54:01.601Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "旧 version 整组保存返回并发冲突",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "PUT",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "A0409",
"message": "费用配置已被修改,请刷新后重试",
"requestId": "de8451f1-4154-4180-ab7c-bd8722a12ec3",
"traceId": "9959a565d9cf48ea8defb0a142ae1a20",
"evidence": "HTTP=200, code=A0409",
"checkedAt": "2026-08-08T06:54:01.657Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "冲突后回查费用配置",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "87016da5-09ad-423b-882d-d9e6f9bc8302, e1382b9c-31e6-43f2-a5b4-d4c87ada450b",
"traceId": "149a8ab4baec44f88b5e0aa2d24d1ced",
"evidence": "",
"checkedAt": "2026-08-08T06:54:01.693Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "冲突未造成部分更新",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "87016da5-09ad-423b-882d-d9e6f9bc8302, e1382b9c-31e6-43f2-a5b4-d4c87ada450b",
"traceId": "149a8ab4baec44f88b5e0aa2d24d1ced",
"evidence": "version=1, unchanged=true",
"checkedAt": "2026-08-08T06:54:01.694Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "恢复本轮客户费用原始配置",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "PUT",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "A0422",
"message": "customerName: must not be blank",
"requestId": "e772de39-7242-48a8-9e4e-108c941e2281",
"traceId": "fe07e9fd7613495bb8ebaec4ce75d427",
"evidence": "restore=initial",
"checkedAt": "2026-08-08T06:54:01.735Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "回查恢复后的客户费用",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "121fdf43-c905-413b-b903-93761c4fbfa3, cd45037f-90e6-4393-ad4b-a1b9efc5e45a",
"traceId": "0aac3349fdba4446b5aab9835d45df50",
"evidence": "",
"checkedAt": "2026-08-08T06:54:01.771Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "恢复后9档、USD、免费档和无上限档一致",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "121fdf43-c905-413b-b903-93761c4fbfa3, cd45037f-90e6-4393-ad4b-a1b9efc5e45a",
"traceId": "0aac3349fdba4446b5aab9835d45df50",
"evidence": "currency=EUR, version=1, tiers=9",
"checkedAt": "2026-08-08T06:54:01.771Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "错误客户 ID 查询安全失败",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/999999999999999999/overseas-storage-fees"
},
"http": 200,
"code": "A0404",
"message": "海外仓费用不存在",
"requestId": "453ac66a-a6c7-4d50-9077-1616fa5beba8",
"traceId": "12cc06d5762d4e1ca508b7d59236078a",
"evidence": "HTTP=200, code=A0404",
"checkedAt": "2026-08-08T06:54:01.812Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "清理费用隔离客户",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/archive"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "a6dffa51-b4df-451f-8bbf-7ed6c2d1c779, 77819f42-d164-4029-9ca6-fbb58408cfe4",
"traceId": "3523f77cb0394fe2b12974ef7222672a",
"evidence": "tenantId=2085982841955012609",
"checkedAt": "2026-08-08T06:54:01.938Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "费用隔离客户清理后停用",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/platform/v1/iam/tenants/2085982841955012609/archive"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "a6dffa51-b4df-451f-8bbf-7ed6c2d1c779, 77819f42-d164-4029-9ca6-fbb58408cfe4",
"traceId": "3523f77cb0394fe2b12974ef7222672a",
"evidence": "status=DISABLED",
"checkedAt": "2026-08-08T06:54:01.938Z"
}
]
}
@@ -0,0 +1,435 @@
{
"reportName": "后台管理测试环境 HTTP API 验收",
"marker": "ADMIN-API-20260808065918334",
"gateway": "http://8.163.30.128:9000",
"generatedAt": "2026-08-08T06:59:19.626Z",
"startedAt": "2026-08-08T06:59:18.334Z",
"success": false,
"fatal": null,
"summary": {
"total": 19,
"passed": 15,
"failed": 4
},
"modules": [
{
"name": "overseas-storage-fees",
"startedAt": "2026-08-08T06:59:18.713Z",
"finishedAt": "2026-08-08T06:59:19.626Z",
"success": false,
"passed": 14,
"failed": 4,
"fatal": null
}
],
"scenarios": [
{
"name": "customer-overseas-storage-fee-lifecycle",
"module": "overseas-storage-fees",
"success": false,
"deploymentBlocked": true,
"passed": 14,
"failed": 4
}
],
"deploymentBlockers": [
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "修改后币种、价格、9档及版本整体回显",
"evidence": "currency=EUR, version=1, tiers=9",
"code": "200",
"requestId": "98bd77a6-3aca-497c-ae3e-7c0d1813701a, a3bd16c8-2306-4c16-9b83-5307590f05f6",
"traceId": "a1ffdf71954f4d7c9e055a9f231763d6"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "冲突未造成部分更新",
"evidence": "version=1, unchanged=true",
"code": "200",
"requestId": "f1fc0661-7ff9-4909-a1ce-80f4cce23278, 02b01b87-38f7-4c4d-8ba1-171fd609ed94",
"traceId": "a54fcb6faf7f4ed1926239b7d8814e08"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "恢复本轮客户费用原始配置",
"evidence": "restore=initial",
"code": "A0422",
"requestId": "a3b0f559-bb7b-41e0-8bc2-a912ed17887f",
"traceId": "77a0aadebbd74a1aa6f5b9c052508f14"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "恢复后9档、USD、免费档和无上限档一致",
"evidence": "currency=EUR, version=1, tiers=9",
"code": "200",
"requestId": "6dd92676-a02c-4e34-a6ea-6b1552f980b9, c3197de5-acd8-46b4-8e3f-ebd904ba4e62",
"traceId": "4e603484f649499face24450f350fc4b"
}
],
"createdResources": {
"overseasStorageFeeCustomer": {
"tenantId": "2085984176263778306",
"marker": "ADMIN-API-20260808065918334",
"ownedByModule": true
}
},
"excluded": [
{
"scope": "dashboard",
"reason": "首页为静态演示数据,不调用后端 API"
},
{
"scope": "hidden-prototypes",
"reason": "隐藏原型页面尚无已确认后端契约"
}
],
"securityNote": "报告不保存登录密码、Access Token、Refresh Token、图片二进制或 OCR 原文全文。",
"steps": [
{
"module": "authentication",
"scenario": null,
"name": "平台管理员登录",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/auth/login"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "9052ad17-f00f-4295-822e-4bb685cbce7f, 874710e5-e85b-4583-81e7-5f71b89c5727",
"traceId": "85a2e60d23214e89bb6cd146cae95d10",
"evidence": "",
"checkedAt": "2026-08-08T06:59:18.712Z"
},
{
"module": "overseas-storage-fees",
"scenario": null,
"name": "检查测试联系电话可用性",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/contact-phone-availability?contactPhone=16172358714"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "0ea7bda7-9523-4344-988a-d9f1bec47907, cfcfd3d6-73f1-4fec-b263-422c02e0f46d",
"traceId": "7a56265ac56b40118510d04b58809db5",
"evidence": "attempt=1",
"checkedAt": "2026-08-08T06:59:18.764Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "创建海外仓费用隔离客户",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/platform/v1/iam/tenants"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "380f8d9d-e0f4-4462-928a-bda83aba0c6a, 42e42bef-9565-4498-972c-e5f5ebd90a78",
"traceId": "18e6db0461074e1984374b4105fe4f8e",
"evidence": "",
"checkedAt": "2026-08-08T06:59:19.160Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "海外仓费用隔离客户创建并带 marker",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/platform/v1/iam/tenants"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "380f8d9d-e0f4-4462-928a-bda83aba0c6a, 42e42bef-9565-4498-972c-e5f5ebd90a78",
"traceId": "18e6db0461074e1984374b4105fe4f8e",
"evidence": "tenantId=2085984176263778306",
"checkedAt": "2026-08-08T06:59:19.160Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "查询客户海外仓费用配置",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "49f8654a-ed79-48f5-81db-e1cf6cf2437d, d4cb71c3-bda1-4e89-829f-4345a81d3eb5",
"traceId": "003b950720fd49ebb258f12be1190b74",
"evidence": "tenantId=2085984176263778306",
"checkedAt": "2026-08-08T06:59:19.196Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "客户费用配置身份、默认 USD 与9档结构正确",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "49f8654a-ed79-48f5-81db-e1cf6cf2437d, d4cb71c3-bda1-4e89-829f-4345a81d3eb5",
"traceId": "003b950720fd49ebb258f12be1190b74",
"evidence": "ruleId=2085984176365944834, customerId=2085984176263778306, currency=USD, tiers=9",
"checkedAt": "2026-08-08T06:59:19.197Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "请求体客户 ID 与路径不一致时安全失败",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "PUT",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "A0422",
"message": "customerName: must not be blank",
"requestId": "92e8e381-052f-4460-aee3-e643aea91970",
"traceId": "0a9131c92a314625916c6dbb1fa8acf8",
"evidence": "HTTP=200, code=A0422",
"checkedAt": "2026-08-08T06:59:19.238Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "整组修改客户海外仓费用",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "PUT",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "3c87bce9-30bf-4af0-9d68-8ab5931dc70e, 5fbf59bc-8751-4b1d-afc7-cf4ee697cb43",
"traceId": "043f08f2b36e4de1a2d003dab1217b27",
"evidence": "tenantId=2085984176263778306, tiers=9",
"checkedAt": "2026-08-08T06:59:19.304Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "回查整组修改后的客户费用",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "98bd77a6-3aca-497c-ae3e-7c0d1813701a, a3bd16c8-2306-4c16-9b83-5307590f05f6",
"traceId": "a1ffdf71954f4d7c9e055a9f231763d6",
"evidence": "",
"checkedAt": "2026-08-08T06:59:19.348Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "修改后币种、价格、9档及版本整体回显",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "98bd77a6-3aca-497c-ae3e-7c0d1813701a, a3bd16c8-2306-4c16-9b83-5307590f05f6",
"traceId": "a1ffdf71954f4d7c9e055a9f231763d6",
"evidence": "currency=EUR, version=1, tiers=9",
"checkedAt": "2026-08-08T06:59:19.348Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "旧 version 整组保存返回并发冲突",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "PUT",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "A0409",
"message": "费用配置已被修改,请刷新后重试",
"requestId": "43c1ea00-38d1-4a12-933e-dfb32b51fa76",
"traceId": "234e50007d3446ddb5d6e67844c25bd5",
"evidence": "HTTP=200, code=A0409",
"checkedAt": "2026-08-08T06:59:19.387Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "冲突后回查费用配置",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "f1fc0661-7ff9-4909-a1ce-80f4cce23278, 02b01b87-38f7-4c4d-8ba1-171fd609ed94",
"traceId": "a54fcb6faf7f4ed1926239b7d8814e08",
"evidence": "",
"checkedAt": "2026-08-08T06:59:19.427Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "冲突未造成部分更新",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "f1fc0661-7ff9-4909-a1ce-80f4cce23278, 02b01b87-38f7-4c4d-8ba1-171fd609ed94",
"traceId": "a54fcb6faf7f4ed1926239b7d8814e08",
"evidence": "version=1, unchanged=true",
"checkedAt": "2026-08-08T06:59:19.427Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "恢复本轮客户费用原始配置",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "PUT",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "A0422",
"message": "customerName: must not be blank",
"requestId": "a3b0f559-bb7b-41e0-8bc2-a912ed17887f",
"traceId": "77a0aadebbd74a1aa6f5b9c052508f14",
"evidence": "restore=initial",
"checkedAt": "2026-08-08T06:59:19.451Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "回查恢复后的客户费用",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "6dd92676-a02c-4e34-a6ea-6b1552f980b9, c3197de5-acd8-46b4-8e3f-ebd904ba4e62",
"traceId": "4e603484f649499face24450f350fc4b",
"evidence": "",
"checkedAt": "2026-08-08T06:59:19.480Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "恢复后9档、USD、免费档和无上限档一致",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/overseas-storage-fees"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "6dd92676-a02c-4e34-a6ea-6b1552f980b9, c3197de5-acd8-46b4-8e3f-ebd904ba4e62",
"traceId": "4e603484f649499face24450f350fc4b",
"evidence": "currency=EUR, version=1, tiers=9",
"checkedAt": "2026-08-08T06:59:19.480Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "错误客户 ID 查询安全失败",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "GET",
"path": "/api/platform/v1/iam/tenants/999999999999999999/overseas-storage-fees"
},
"http": 200,
"code": "A0404",
"message": "海外仓费用不存在",
"requestId": "e6878682-5ab5-4c4a-91d0-e78a01db654b",
"traceId": "c2bd85464f4e42018837b501c659ce9d",
"evidence": "HTTP=200, code=A0404",
"checkedAt": "2026-08-08T06:59:19.517Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "清理费用隔离客户",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/archive"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "a15fbf86-29c5-4f9a-ab16-becbd38399c7, 9a621749-af84-459e-9a58-f7fb230de02c",
"traceId": "e02b8542476d4764886907d01ef887f1",
"evidence": "tenantId=2085984176263778306",
"checkedAt": "2026-08-08T06:59:19.626Z"
},
{
"module": "overseas-storage-fees",
"scenario": "customer-overseas-storage-fee-lifecycle",
"name": "费用隔离客户清理后停用",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/platform/v1/iam/tenants/2085984176263778306/archive"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "a15fbf86-29c5-4f9a-ab16-becbd38399c7, 9a621749-af84-459e-9a58-f7fb230de02c",
"traceId": "e02b8542476d4764886907d01ef887f1",
"evidence": "status=DISABLED",
"checkedAt": "2026-08-08T06:59:19.626Z"
}
]
}
File diff suppressed because it is too large Load Diff
+744
View File
@@ -0,0 +1,744 @@
{
"reportName": "后台管理测试环境 HTTP API 验收",
"marker": "ADMIN-API-20260808064712449",
"gateway": "http://8.163.30.128:9000",
"generatedAt": "2026-08-08T06:47:14.075Z",
"startedAt": "2026-08-08T06:47:12.449Z",
"success": false,
"fatal": null,
"summary": {
"total": 26,
"passed": 1,
"failed": 25
},
"modules": [
{
"name": "ocean-bookings",
"startedAt": "2026-08-08T06:47:12.837Z",
"finishedAt": "2026-08-08T06:47:13.606Z",
"success": false,
"passed": 0,
"failed": 10,
"fatal": null
},
{
"name": "truck-appointments",
"startedAt": "2026-08-08T06:47:13.607Z",
"finishedAt": "2026-08-08T06:47:14.075Z",
"success": false,
"passed": 0,
"failed": 15,
"fatal": null
}
],
"scenarios": [],
"deploymentBlockers": [
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱列表分页与 keyword 查询",
"evidence": "",
"code": "A0403",
"requestId": "ed457d91-872d-4e75-977d-9e0264534bd1",
"traceId": "69b0190b15604e25a3f61d983f6a575d"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱列表分页结构正确",
"evidence": "records=n/a",
"code": "A0403",
"requestId": "ed457d91-872d-4e75-977d-9e0264534bd1",
"traceId": "69b0190b15604e25a3f61d983f6a575d"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 DRAFT 状态筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "d54acdfd-59ca-42c6-9100-3fafbb58fed1",
"traceId": "cbedc0c382384c4e90f9017e1f0813b0"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 SUBMITTED 状态筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "bc6939bf-90b8-439c-8ab4-ea4b1f852334",
"traceId": "554ee600606a4014a0576fd6b947cb3f"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 CONFIRMED 状态筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "e7fdd888-8f70-4c14-9fd8-80295c13c21c",
"traceId": "d349a30924704b93a1f4f84a3d11821a"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 RELEASED 状态筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "8eeae8b2-f74f-4580-95a4-27c2766a6996",
"traceId": "25f7a45dbf504562bf0e304dda652657"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 FAILED 状态筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "88d7405d-76b3-49d7-9f2c-548681781d70",
"traceId": "455b1549cd1f4a2681629566fa4c70d7"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 CANCELLED 状态筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "2a42fa60-4488-4c30-a5d0-190d8344cde3",
"traceId": "26478125e9b94d0aa01675ec96d06684"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "创建隔离海运订舱",
"evidence": "key=ADMIN-API-20260808064712449-ocean-create",
"code": "A0403",
"requestId": "a256eec7-f568-42b3-b3a2-611c251586c6",
"traceId": "7b49626fca6a4b60979d70bf44863127"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 DTO 字段、DRAFT 和9类关联字段完整",
"evidence": "bookingId=missing, parties=n/a, requirements=n/a",
"code": "A0403",
"requestId": "a256eec7-f568-42b3-b3a2-611c251586c6",
"traceId": "7b49626fca6a4b60979d70bf44863127"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约分页 keyword 查询",
"evidence": "",
"code": "A0403",
"requestId": "743f537b-3993-456c-a7b4-6876d1a87bc2",
"traceId": "1ae0828a8f9a433598007c3b8d2faa93"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约分页结构正确",
"evidence": "records=n/a",
"code": "A0403",
"requestId": "743f537b-3993-456c-a7b4-6876d1a87bc2",
"traceId": "1ae0828a8f9a433598007c3b8d2faa93"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 DRAFT 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "4eacc68b-ff41-4a75-823e-8fa6de62cbe2",
"traceId": "3f6cbb9ee8fc4226938c8a518f0b92f8"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 PENDING_DISPATCH 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "b03a83c8-0a99-4acc-8fdc-d27076a3e1dc",
"traceId": "77f8f44501004f70adc1c1c79a6f9697"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 DISPATCHED 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "e4943121-2b35-4a0a-a41c-357c6f7eac1e",
"traceId": "db60390b02b1446189cba05b36c592ad"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 PICKUP_IN_PROGRESS 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "62aff6d2-13a9-4003-9e40-60cef827099c",
"traceId": "00d7851fcced446ebcb22b429c480dee"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 ARRIVED_WAREHOUSE 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "7dac2027-fff0-4d00-8259-6929107819dd",
"traceId": "7b4e355e6801472595a2744b21bea683"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 LOADING 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "6f197d56-55fb-43d6-bd3a-aa66aff41041",
"traceId": "e0bd0ea79d734d7b9293a065a4bd370d"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 DEPARTED 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "c66f4376-e53b-4237-860b-65d88837b302",
"traceId": "2edd2f5df58b4e008cc2ea4d036c30fb"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 COMPLETED 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "33d2ba0c-b9d9-4f86-86a9-979f3bcc30ee",
"traceId": "9c48a0c1cf6a45518e32daf025cf67f3"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 RESCHEDULED 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "e9be7958-1f40-4e35-923c-e4bccd1cdbd4",
"traceId": "31865c46cbf640f59eb358182ac569a9"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 EXCEPTION 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "e9880e54-cd81-4eaa-b400-a23906a7542e",
"traceId": "f2119d43632240a0b95f597c5908dacd"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 CANCELLED 筛选",
"evidence": "HTTP=200, code=A0403, records=n/a",
"code": "A0403",
"requestId": "4ba4b116-2f1c-48f4-90ab-d56bb26f11f6",
"traceId": "a5bc812ecefa4dcb94af96ea9dd7bae7"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "创建隔离拖车预约",
"evidence": "",
"code": "A0403",
"requestId": "35abb2b5-f631-46c5-850e-b2b63a370e18",
"traceId": "c730567af3554a6e834711383ab3a71c"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约费用、司机车辆和地址字段完整",
"evidence": "id=missing, status=missing",
"code": "A0403",
"requestId": "35abb2b5-f631-46c5-850e-b2b63a370e18",
"traceId": "c730567af3554a6e834711383ab3a71c"
}
],
"createdResources": {},
"excluded": [
{
"scope": "dashboard",
"reason": "首页为静态演示数据,不调用后端 API"
},
{
"scope": "hidden-prototypes",
"reason": "隐藏原型页面尚无已确认后端契约"
}
],
"securityNote": "报告不保存登录密码、Access Token、Refresh Token、图片二进制或 OCR 原文全文。",
"steps": [
{
"module": "authentication",
"scenario": null,
"name": "平台管理员登录",
"passed": true,
"deploymentBlocker": false,
"request": {
"method": "POST",
"path": "/api/auth/login"
},
"http": 200,
"code": "200",
"message": "success",
"requestId": "a800004d-edfa-40c3-833a-861b275f568a, ed4e7e33-25f6-42aa-80cf-2169bf716a8a",
"traceId": "8bb3e73ba9ca4d20b70c4648d9c301cb",
"evidence": "",
"checkedAt": "2026-08-08T06:47:12.836Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱列表分页与 keyword 查询",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/ocean-bookings?page=1&size=5&keyword=ADMIN-API-20260808064712449"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "ed457d91-872d-4e75-977d-9e0264534bd1",
"traceId": "69b0190b15604e25a3f61d983f6a575d",
"evidence": "",
"checkedAt": "2026-08-08T06:47:13.195Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱列表分页结构正确",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/ocean-bookings?page=1&size=5&keyword=ADMIN-API-20260808064712449"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "ed457d91-872d-4e75-977d-9e0264534bd1",
"traceId": "69b0190b15604e25a3f61d983f6a575d",
"evidence": "records=n/a",
"checkedAt": "2026-08-08T06:47:13.195Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 DRAFT 状态筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/ocean-bookings?page=1&size=5&status=DRAFT"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "d54acdfd-59ca-42c6-9100-3fafbb58fed1",
"traceId": "cbedc0c382384c4e90f9017e1f0813b0",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.240Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 SUBMITTED 状态筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/ocean-bookings?page=1&size=5&status=SUBMITTED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "bc6939bf-90b8-439c-8ab4-ea4b1f852334",
"traceId": "554ee600606a4014a0576fd6b947cb3f",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.285Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 CONFIRMED 状态筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/ocean-bookings?page=1&size=5&status=CONFIRMED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "e7fdd888-8f70-4c14-9fd8-80295c13c21c",
"traceId": "d349a30924704b93a1f4f84a3d11821a",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.334Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 RELEASED 状态筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/ocean-bookings?page=1&size=5&status=RELEASED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "8eeae8b2-f74f-4580-95a4-27c2766a6996",
"traceId": "25f7a45dbf504562bf0e304dda652657",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.376Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 FAILED 状态筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/ocean-bookings?page=1&size=5&status=FAILED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "88d7405d-76b3-49d7-9f2c-548681781d70",
"traceId": "455b1549cd1f4a2681629566fa4c70d7",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.421Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 CANCELLED 状态筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/ocean-bookings?page=1&size=5&status=CANCELLED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "2a42fa60-4488-4c30-a5d0-190d8344cde3",
"traceId": "26478125e9b94d0aa01675ec96d06684",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.465Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "创建隔离海运订舱",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "POST",
"path": "/api/platform/v1/ocean-bookings"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "a256eec7-f568-42b3-b3a2-611c251586c6",
"traceId": "7b49626fca6a4b60979d70bf44863127",
"evidence": "key=ADMIN-API-20260808064712449-ocean-create",
"checkedAt": "2026-08-08T06:47:13.606Z"
},
{
"module": "ocean-bookings",
"scenario": "ocean-booking-lifecycle",
"name": "订舱 DTO 字段、DRAFT 和9类关联字段完整",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "POST",
"path": "/api/platform/v1/ocean-bookings"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "a256eec7-f568-42b3-b3a2-611c251586c6",
"traceId": "7b49626fca6a4b60979d70bf44863127",
"evidence": "bookingId=missing, parties=n/a, requirements=n/a",
"checkedAt": "2026-08-08T06:47:13.606Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约分页 keyword 查询",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&keyword=ADMIN-API-20260808064712449"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "743f537b-3993-456c-a7b4-6876d1a87bc2",
"traceId": "1ae0828a8f9a433598007c3b8d2faa93",
"evidence": "",
"checkedAt": "2026-08-08T06:47:13.659Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约分页结构正确",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&keyword=ADMIN-API-20260808064712449"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "743f537b-3993-456c-a7b4-6876d1a87bc2",
"traceId": "1ae0828a8f9a433598007c3b8d2faa93",
"evidence": "records=n/a",
"checkedAt": "2026-08-08T06:47:13.659Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 DRAFT 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=DRAFT"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "4eacc68b-ff41-4a75-823e-8fa6de62cbe2",
"traceId": "3f6cbb9ee8fc4226938c8a518f0b92f8",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.697Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 PENDING_DISPATCH 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=PENDING_DISPATCH"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "b03a83c8-0a99-4acc-8fdc-d27076a3e1dc",
"traceId": "77f8f44501004f70adc1c1c79a6f9697",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.727Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 DISPATCHED 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=DISPATCHED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "e4943121-2b35-4a0a-a41c-357c6f7eac1e",
"traceId": "db60390b02b1446189cba05b36c592ad",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.758Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 PICKUP_IN_PROGRESS 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=PICKUP_IN_PROGRESS"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "62aff6d2-13a9-4003-9e40-60cef827099c",
"traceId": "00d7851fcced446ebcb22b429c480dee",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.793Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 ARRIVED_WAREHOUSE 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=ARRIVED_WAREHOUSE"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "7dac2027-fff0-4d00-8259-6929107819dd",
"traceId": "7b4e355e6801472595a2744b21bea683",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.823Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 LOADING 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=LOADING"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "6f197d56-55fb-43d6-bd3a-aa66aff41041",
"traceId": "e0bd0ea79d734d7b9293a065a4bd370d",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.851Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 DEPARTED 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=DEPARTED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "c66f4376-e53b-4237-860b-65d88837b302",
"traceId": "2edd2f5df58b4e008cc2ea4d036c30fb",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.885Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 COMPLETED 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=COMPLETED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "33d2ba0c-b9d9-4f86-86a9-979f3bcc30ee",
"traceId": "9c48a0c1cf6a45518e32daf025cf67f3",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.914Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 RESCHEDULED 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=RESCHEDULED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "e9be7958-1f40-4e35-923c-e4bccd1cdbd4",
"traceId": "31865c46cbf640f59eb358182ac569a9",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.944Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 EXCEPTION 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=EXCEPTION"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "e9880e54-cd81-4eaa-b400-a23906a7542e",
"traceId": "f2119d43632240a0b95f597c5908dacd",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:13.975Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约 CANCELLED 筛选",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "GET",
"path": "/api/platform/v1/truck-appointments?page=1&size=5&status=CANCELLED"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "4ba4b116-2f1c-48f4-90ab-d56bb26f11f6",
"traceId": "a5bc812ecefa4dcb94af96ea9dd7bae7",
"evidence": "HTTP=200, code=A0403, records=n/a",
"checkedAt": "2026-08-08T06:47:14.008Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "创建隔离拖车预约",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "POST",
"path": "/api/platform/v1/truck-appointments"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "35abb2b5-f631-46c5-850e-b2b63a370e18",
"traceId": "c730567af3554a6e834711383ab3a71c",
"evidence": "",
"checkedAt": "2026-08-08T06:47:14.075Z"
},
{
"module": "truck-appointments",
"scenario": "truck-appointment-lifecycle",
"name": "拖车预约费用、司机车辆和地址字段完整",
"passed": false,
"deploymentBlocker": true,
"request": {
"method": "POST",
"path": "/api/platform/v1/truck-appointments"
},
"http": 200,
"code": "A0403",
"message": "Access denied",
"requestId": "35abb2b5-f631-46c5-850e-b2b63a370e18",
"traceId": "c730567af3554a6e834711383ab3a71c",
"evidence": "id=missing, status=missing",
"checkedAt": "2026-08-08T06:47:14.075Z"
}
]
}
@@ -148,7 +148,8 @@ public class OverseasStorageFeeService {
throw new BizException(ResultCode.VALIDATION_FAILED, "费用类型和计费单位不匹配");
}
List<OverseasStorageFeeDtos.TierRequest> tiers = new ArrayList<>(source);
tiers.sort(Comparator.comparing(OverseasStorageFeeDtos.TierRequest::feeType)
tiers.sort(Comparator.comparingInt((OverseasStorageFeeDtos.TierRequest tier) ->
"STORAGE".equals(tier.feeType()) ? 0 : 1)
.thenComparingInt(OverseasStorageFeeDtos.TierRequest::startDay));
for (String feeType : List.of("STORAGE", "RETURN_STORAGE")) {
List<OverseasStorageFeeDtos.TierRequest> group = tiers.stream().filter(t -> feeType.equals(t.feeType())).toList();