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

6.3 KiB
Raw Blame History

国内仓整柜业务前端接口交接单

通用约定

  • 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 授权后,由总编排显式调用:

node scripts/admin-test-env-acceptance.mjs --modules domestic-container --output reports/admin-domestic-container.json

模块已安全加入 admin-test-env-acceptance.mjs 的 DEFAULT_MODULES,正式全量验收默认调用;动态模块加载逻辑无需修改。