YMS 外部 WMS 对接指南
概述
YMS 系统支持通过 HTTP 回调方式与外部 WMS 系统集成。当 YMS 中发生任务操作(创建、更新、取消)时,系统会同步调用外部 WMS 提供的回调接口,将任务信息推送给外部 WMS。
核心流程:YMS 负责生成 taskId,通过回调接口通知外部 WMS,外部 WMS 可返回操作人信息。
1. 配置说明
对接前需要在 YMS 系统中配置以下两个参数(由 YMS 运维人员在后台配置):
| 参数编号 | 参数名称 | 类型 | 说明 | 示例 |
|---|---|---|---|---|
| SP-53 | External WMS Callback URL | STRING | 外部 WMS 回调地址 | https://your-wms.com/api/yms/task |
| SP-54 | External WMS Request Headers | DICTIONARY | 自定义请求头(JSON 格式) | {"X-API-Key": "sk-xxx"} |
- 配置了 SP-53 回调地址后,该租户的任务操作将自动推送到外部 WMS
- SP-54 中配置的请求头会附加到每次回调请求中,可用于鉴权
2. 回调接口规范
2.1 接口信息
- 请求方式:POST
- 请求地址:由 SP-53 配置的回调 URL(CREATE / UPDATE / CANCEL 共用同一地址)
- Content-Type:application/json
2.2 请求头
每次回调请求会携带以下请求头:
| Header | 说明 | 来源 |
|---|---|---|
| Content-Type | 固定为 application/json | 系统自动 |
| Authorization | YMS 当前用户的认证 Token | 系统自动 |
| X-Tenant-Id | 租户 ID | 系统自动 |
| X-Yard-Id | 园区 ID | 系统自动 |
| Item-Time-Zone | 当前时区 | 系统自动 |
| 自定义 Header | SP-54 中配置的自定义请求头 | 用户配置 |
注意:如果 SP-54 中配置了
Authorization,系统自动生成的 Authorization 不会覆盖用户配置的值。
2.3 请求体(Request Body)
{
"taskId": "TASK-20260403-0001",
"entryId": "ENT-20260403-0001",
"taskType": "OFFLOAD",
"receiptIds": ["REC-001", "REC-002"],
"loadIds": ["LOAD-001"],
"operate": "CREATE",
"dockId": "LOC-DOCK-01",
"equipmentNo": "CNTR1234567",
"equipmentType": "CONTAINER",
"loadMode": "LIVE_LOAD",
"assigneeUserId": "user-001"
}字段说明:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务 ID,由 YMS 系统生成,全局唯一 |
| entryId | String | 否 | 入场记录 ID |
| taskType | String | 是 | 任务类型,见下方枚举 |
| receiptIds | List<String> | 否 | 关联的收货单 ID 列表 |
| loadIds | List<String> | 否 | 关联的装货单 ID 列表 |
| operate | String | 是 | 操作类型:CREATE / UPDATE / CANCEL |
| dockId | String | 否 | 分配的 Dock(库门)位置 ID |
| equipmentNo | String | 否 | 设备编号(如集装箱号、拖车号) |
| equipmentType | String | 否 | 设备类型,见下方枚举 |
| loadMode | String | 否 | 装载模式,见下方枚举 |
| assigneeUserId | String | 否 | 分配的操作人 ID |
taskType 枚举值:
| 值 | 说明 |
|---|---|
| OFFLOAD | 卸货任务 |
| LOAD | 装货任务 |
| SHUTTLE | 移车任务 |
equipmentType 枚举值:
| 值 | 说明 |
|---|---|
| CONTAINER | 集装箱 |
| TRAILER | 拖车 |
| CHASSIS | 底盘车 |
loadMode 枚举值:
| 值 | 说明 |
|---|---|
| LIVE_LOAD | 现场装货 |
| PRE_LOAD | 预装货 |
2.4 响应体(Response Body)
外部WMS需返回以下格式的 JSON 响应, 以下参数仅在创建task时可选返回,若返回则task使用外部返回的 assignee作为task的操作人员:
{
"code": 200,
"success": true,
"msg": "OK",
"data": {
"assigneeUserId": "wms-user-001",
"assigneeUserName": "张三"
}
}字段说明:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| code | Integer | 否 | 业务状态码 |
| success | Boolean | 是 | 操作是否成功,YMS 以此判断回调结果 |
| msg | String | 否 | 错误信息(失败时返回) |
| data | Object | 否 | 业务数据 |
| data.assigneeUserId | String | 否 | WMS 分配的操作人 ID |
| data.assigneeUserName | String | 否 | WMS 分配的操作人姓名 |
重要:
success字段为false或响应为空时,YMS 会认为回调失败并阻塞当前业务操作(任务创建/更新/取消将失败)。
3. 操作类型说明
3.1 CREATE — 任务创建
触发时机:司机在 YMS 系统完成登记(Check-In)后,系统自动创建任务时触发。
业务场景:
- 卸货任务(OFFLOAD):司机到达园区,需要卸货
- 装货任务(LOAD):司机到达园区,需要装货 外部 WMS 处理建议:
- 接收 YMS 生成的
taskId,在 WMS 侧建立关联 - 可返回
assigneeUserId和assigneeUserName,YMS 会将其作为任务的操作人
3.2 UPDATE — 任务更新
触发时机:任务信息发生变更时触发,例如:
- 重新分配 Dock 位置
- 变更操作人
- 更新关联的收货单/装货单
外部 WMS 处理建议:
- 根据
taskId找到对应任务,更新相关信息
3.3 CANCEL — 任务取消
触发时机:任务被取消时触发。
外部 WMS 处理建议:
- 根据
taskId找到对应任务,执行取消操作 - 释放相关资源(如 Dock 占用、操作人分配等)
4. 错误处理
| 场景 | YMS 行为 |
|---|---|
外部 WMS 返回 success: false | 阻塞当前操作,向用户提示错误信息(msg 字段内容) |
| 网络超时或连接失败 | 阻塞当前操作,向用户提示网络异常 |
| 外部 WMS 返回空响应 | 阻塞当前操作,提示 "Empty response" |
建议外部 WMS 在处理失败时,在
msg字段中返回有意义的错误描述,便于排查问题。
5. 对接流程
- 外部 WMS 实现回调接口:按照上述规范实现一个 POST 接口
- 提供回调地址和鉴权信息:将接口 URL 和所需的鉴权 Header 提供给 YMS 运维
- YMS 配置参数:运维在 YMS 后台配置 SP-53(回调 URL)和 SP-54(自定义 Header)
- 联调测试:在测试环境进行 CREATE / UPDATE / CANCEL 全流程验证
6. 请求示例
CREATE 请求示例
curl -X POST 'https://your-wms.com/api/yms/task' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer xxx' \
-H 'X-Tenant-Id: tenant-001' \
-H 'X-Yard-Id: yard-001' \
-H 'X-Facility-Id: yard-001' \
-H 'X-API-Key: sk-xxx' \
-d '{
"taskId": "TASK-20260403-0001",
"entryId": "ENT-20260403-0001",
"taskType": "OFFLOAD",
"receiptIds": ["REC-001"],
"operate": "CREATE",
"dockId": "LOC-DOCK-01",
"equipmentNo": "CNTR1234567",
"equipmentType": "CONTAINER",
"loadMode": "LIVE_OFFLOAD"
}'成功响应示例
{
"code": 200,
"success": true,
"msg": "OK",
"data": {
"taskId": "TASK-20260403-0001",
"assigneeUserId": "wms-user-001",
"assigneeUserName": "张三"
}
}失败响应示例
{
"code": 500,
"success": false,
"msg": "Dock LOC-DOCK-01 is not available",
"data": null
}