Files
baiyue-firstleg/warehouse/docs/国内仓整柜业务前端接口交接单.md
T
2026-08-13 11:57:33 +08:00

101 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 国内仓整柜业务前端接口交接单
## 通用约定
- Base path:`/api/platform/v1/domestic-containers`
- 浏览器继续使用 `/api` 前缀,不写死 Gateway 地址。
- 所有接口仅允许平台端登录态,公共作用域固定为 `tenant_id=0`;前端不传客户/租户字段。
- 成功响应统一为 `{ code: "200", message, data, requestId, traceId, timestamp }`。
- 时间字段使用 ISO-8601 `LocalDateTime`,例如 `2026-08-12T09:30:00`。
- `warehouseId` 必须对应平台公共、启用且 `warehouseType=DOMESTIC` 的国内仓;响应同时返回 `warehouseName` 快照。
- OpenAPI:`warehouse/src/main/resources/openapi/domestic-container-v1.yaml`。
- Warehouse 表迁移:`warehouse/src/main/resources/db/domestic-container-business.sql`。
- IAM 权限迁移:`iam/src/main/resources/db/domestic-container-permissions.sql`,最终权限 ID 固定为 `5103070`、`5103071`、`5103072`。
- 测试环境验收模块:`scripts/admin-test-env-modules/domestic-container.mjs`;合同测试:同目录 `domestic-container-contract.test.mjs`。
## 接口清单
| 用途 | 方法 | 路径 | 权限 |
|---|---|---|---|
| 入库单列表 | GET | `/inbounds` | `platform:domestic-container:list` |
| 新建入库单 | POST | `/inbounds` | `platform:domestic-container:inbound:create` |
| 出库单列表 | GET | `/outbounds` | `platform:domestic-container:list` |
| 新建出库单 | POST | `/outbounds` | `platform:domestic-container:outbound:create` |
| 库存列表及汇总 | GET | `/inventories` | `platform:domestic-container:list` |
| 库存详情/交易记录 | GET | `/inventories/{inventoryId}` | `platform:domestic-container:list` |
## 列表筛选
入库单与出库单使用相同查询参数:`page`(默认 1)、`size`(默认 20,最大 200)、`warehouseId`、`orderNo`、`containerNo`、`cargoName`、`status`。字符串按包含匹配,`status` 为精确匹配。
库存列表参数:`page`、`size`、`warehouseId`、`containerNo`、`cargoName`、`status`。库存响应的 `summary` 是当前全部筛选结果的汇总,不只汇总当前页。
## 新建入库
请求字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `warehouseId` | int64 | 是 | 平台国内仓 ID |
| `cargoName` | string | 是 | 货物名称,最长 128 |
| `containerNo` | string | 是 | 集装箱号,服务端转大写 |
| `boxCount` | integer | 是 | 入库箱数,大于 0 |
| `volumeCbm` | decimal | 是 | 入库体积,大于等于 0.0001,最多 4 位小数 |
| `inboundTime` | datetime | 是 | 入库操作时间 |
| `status` | enum | 是 | `PENDING` 或 `COMPLETED` |
| `remark` | string | 否 | 最长 500 |
| `idempotencyKey` | string | 是 | 每次用户提交生成的稳定唯一键,最长 128 |
`COMPLETED` 会在同一事务内增加库存并写入一条入库交易流水;`PENDING` 只创建待入库单,不影响库存。当前原型没有待单后续确认动作,本契约不提供确认/取消接口。
## 新建出库
请求字段:`warehouseId`、`containerNo`、`boxCount`、`outboundTime`、`status`、可选 `remark`、`idempotencyKey`、可选 `inventoryVersion`。
- 集装箱必须已在该国内仓形成库存;货物名称由库存快照带出,前端不提交。
- `COMPLETED` 会锁定库存、校验版本与可用箱数、原子扣减并写出库流水。
- `PENDING` 创建待出库单但不扣库存;`inventoryVersion` 可不传。
- 已读取库存详情时,`COMPLETED` 请求应回传其 `version`。版本过期返回 `A0409`,前端刷新库存后由用户重试。
- 出库数量小于可用库存后状态为 `PARTIALLY_OUTBOUND`;等于可用库存后为 `OUTBOUND`。
## 响应字段
创建响应 `data`:`id`、`orderNo`、`replayed`。`replayed=true` 表示同一幂等键及相同请求已处理,本次返回首次结果。
单据 `records[]`:`id`、`businessType`、`orderNo`、`warehouseId`、`warehouseName`、`containerNo`、`cargoName`、`boxCount`、`volumeCbm`、`operationTime`、`status`、`remark`、`version`、`createdAt`。出库单 `volumeCbm` 固定为 0,前端可不展示。
库存 `records[]`:`id`、`warehouseId`、`warehouseName`、`containerNo`、`cargoName`、`inboundBoxes`、`outboundBoxes`、`availableBoxes`、`inboundVolumeCbm`、`inventoryStatus`、`version`、`updatedAt`。
详情 `data`:`inventory`、`inboundOrderCount`、`outboundOrderCount`、`transactions[]`。交易字段为 `id`、`businessType`、`orderNo`、`quantity`、`operationTime`、`remark`,按操作时间倒序。
## 状态映射
| 后端枚举 | 页面文案 |
|---|---|
| `PENDING` | 待入库 / 待出库(按当前页签) |
| `COMPLETED` | 已入库 / 已出库(按当前页签) |
| `IN_STOCK` | 在库 |
| `PARTIALLY_OUTBOUND` | 部分出库 |
| `OUTBOUND` | 已出库 |
| `INBOUND` | 入库(交易类型) |
| `OUTBOUND` | 出库(交易类型) |
## 幂等与错误处理
- `idempotencyKey` 必须在同一操作类型内唯一。相同键、相同请求返回首次结果;相同键、不同请求返回 `A0409`。
- 前端在网络超时后必须使用原键重试,不要生成新键;用户主动再次创建时生成新键。
- 业务响应以 body `code` 判断:`200` 成功;`A0403` 无平台端身份或无权限;`A0404` 国内仓/整柜库存不存在或仓库未启用;`A0409` 幂等键冲突、处理中、库存不足或库存版本已变化;`A0422`/`A0400` 为字段格式或校验失败;`S0500`/`S0503` 为服务或基础设施异常。
- 出错时记录 `requestId`、`traceId` 和服务端 `message`,不要模拟成功或本地扣减库存。
## 权限与验收接入
Warehouse Controller 强制校验上述三条权限码。独立 IAM 迁移会幂等注册权限并授予 `PLATFORM_ADMIN`,同时检查权限 ID/编码冲突、权限数量和管理员授权数量。国内整柜保留 `5103070..5103072`;供应商权限不得复用该区间。
验收模块不会在导入时访问环境,也不包含网关或账号。只有获得测试环境写 API 授权后,由总编排显式调用:
```powershell
node scripts/admin-test-env-acceptance.mjs --modules domestic-container --output reports/admin-domestic-container.json
```
模块已安全加入 `admin-test-env-acceptance.mjs` 的 `DEFAULT_MODULES`,正式全量验收默认调用;动态模块加载逻辑无需修改。