船图对接文档
中控模块接口
获取场内托盘
- 接口路径:
/cPallet/getAllPallets - Method:
GET - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| voyageId | query | String | 否 | 航次ID,不传则查询当前作业航次的数据 |
- 响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": [
{
"id": "PALLET-001",
"name": "20GP标准托盘",
"length": 12.5,
"width": 2.8,
"height": 1.6,
"updatedOn": "2026-05-08T10:30:00+08:00",
"createdOn": "2026-05-08T10:00:00+08:00",
"createdBy": "admin",
"updatedBy": "admin",
"quantity": 3,
"remark": "标准作业托盘",
"weight": 2.3,
"palletSize": 20
}
]
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data[].id | String | 托盘主键 |
| data[].name | String | 托盘名称 |
| data[].length | BigDecimal | 托盘长度 |
| data[].width | BigDecimal | 托盘宽度 |
| data[].height | BigDecimal | 托盘高度 |
| data[].updatedOn | Date/String | 更新时间 |
| data[].createdOn | Date/String | 创建时间 |
| data[].createdBy | String | 创建人 |
| data[].updatedBy | String | 更新人 |
| data[].quantity | Integer | 托盘数量 |
| data[].remark | String | 备注 |
| data[].weight | BigDecimal | 托盘重量 |
| data[].palletSize | Integer | 托盘尺寸,主要用于前端校验是否允许放箱 |
获取等待装船列表
- 接口路径:
/centralControl/getWaitingForShipmentList - Method:
GET - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| voyageId | query | String | 否 | 航次ID,不传则查询当前作业航次 |
- 响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": [
{
"palletTypeId": "PALLET-TYPE-001",
"internalTrailerNo": "IT-001",
"palletInfo": {
"id": "PALLET-001",
"name": "40GP-2",
"length": 12.192,
"width": 2.438,
"height": 2.591
},
"length": 14.0
}
]
}- 响应字段说明:
palletTypeId:托盘类型IDinternalTrailerNo:内拖车号palletInfo:托盘信息对象length:托盘或托盘加箱的总长度(用于显示)
添加直装船托盘到盘型池
- 接口路径:
/centralControl/addPalletToPool - Method:
GET - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| palletType | query | String | 是 | 盘型名称 |
| palletWorkType | query | String | 是 | 托盘作业类型,仅支持 SHIPMENT(表示直装船) |
接口说明:将指定的托盘类型添加到盘型池中,用于直装船作业场景。新增成功后会向所有叉车终端(
terminalType=FORKLIFT)推送一条 WebSocket 消息,提示刷新托盘池列表。新增时会自动绑定当前作业航次。响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": "2f50d4c1-8792-4b71-a1a3-7344327b6b7e"
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data | String | 新加入盘型池后生成的 palletTypeId |
中控手动配载完成接口
- 接口路径:
/centralControl/completeManualLoading - Method:
POST - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| palletTypeId | body | String | 是 | 托盘类型 ID |
| coordinateX | body | BigDecimal | 是 | 作业位置 X 坐标 |
| coordinateY | body | BigDecimal | 是 | 作业位置 Y 坐标 |
| coordinateZ | body | BigDecimal | 是 | 作业位置 Z 坐标 |
| length | body | BigDecimal | 是 | 长度 |
| width | body | BigDecimal | 是 | 宽度 |
| laneId | body | String | 是 | 车道 ID |
- 请求示例:
json
{
"palletTypeId": "PALLET-TYPE-001",
"coordinateX": 1.2,
"coordinateY": 3.4,
"coordinateZ": 1,
"length": 12.2,
"width": 2.44,
"laneId": "LANE-A01"
}- 响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": [
{
"coordX": 1.2,
"coordY": 3.4,
"coordZ": 1,
"workStatus": "PENDING",
"palletTypeId": "PALLET-TYPE-001",
"length": 12.2,
"width": 2.44,
"containers": [...]
}
]
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data | Array | 船上放箱详情列表,元素结构同 getShipPlacementDetailByDeck 接口响应 |
中控取消配载接口
- 接口路径:
/centralControl/cancelManualLoading - Method:
GET - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| palletTypeId | query | String | 是 | 托盘池ID |
- 备注:
- 该接口是
completeManualLoading接口的逆向操作。 - 前置条件:托盘必须已完成配载(即存在对应的
C_LANE_CNTR记录),否则接口会直接报错:该托盘未进行配载,无法取消。 - 作业状态检查:如果配载数据的作业状态为
DONE(已完成),则无法取消配载,接口会报错:作业已完成,无法取消配载。 - 接口会删除配载时插入的
C_LANE_CNTR记录,恢复托盘池和内拖车的状态为WAITING_FOR_SHIPMENT(等待装船),并发送消息通知相关终端。
- 该接口是
- 响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": null
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data | null | 无业务返回值,表示取消配载成功 |
中控移箱
- 接口路径:
/centralControl/moveContainer - Method:
POST - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| palletTypeId | body | String | 是 | 托盘池 ID,用于定位需要移位的托盘及其放箱记录 |
| coordinateX | body | BigDecimal | 是 | 目标位置 X 坐标 |
| coordinateY | body | BigDecimal | 是 | 目标位置 Y 坐标 |
| coordinateZ | body | BigDecimal | 是 | 目标位置 Z 坐标 |
| trailerNo | body | String | 否 | 拖车号,hasDone 为 true 时优先使用此字段通知拖车 |
| sendNotification | body | String | 否 | 是否发送通知,仅当值为 "Y" 时发送通知 |
| laneId | body | String | 是 | 车道 ID |
接口说明:
- 通过
palletTypeId获取托盘池信息,并根据当前最新作业航次定位该托盘对应的C_LANE_CNTR放箱记录。 - 当放箱记录为
workStatus=PENDING时,仅更新C_LANE_CNTR的目标坐标,并通知该记录绑定的内拖车作业位置已调整。 - 当放箱记录为
workStatus=DONE时:- 如果请求参数中提供了
trailerNo,则优先使用该拖车号进行通知; - 如果未提供
trailerNo,则使用托盘池已绑定的内拖车号(若托盘池未绑定内拖车则报错); - 系统会将放箱记录重置为
PENDING并绑定到指定的内拖车,同时按航次+箱号把C_YARD_CNTR.workStatus重置为PENDING,并通过 WebSocket 下发新的移箱任务。
- 如果请求参数中提供了
- 不支持同时移位
PENDING与DONE的记录(需要分批操作)。
- 通过
WebSocket 推送(内拖车,示例):
- 进行中移箱(记录含
workStatus=PENDING):description="作业位置已调整,请按新位置执行作业" - 已完成移箱(记录均为
workStatus=DONE,会下发移箱任务):description="中控已下发移箱任务,请按新位置执行作业"
- 进行中移箱(记录含
json
{
"eventType": "MOVE_CONTAINER",
"description": "作业位置已调整,请按新位置执行作业",
"data": {
"palletTypeId": "PALLET-TYPE-001",
"cLaneCntrIdList": ["f3e1b8f2-53b1-4b1f-a43f-72e2f7e7f6df"],
"coordinateX": 2.5,
"coordinateY": 6.8,
"coordinateZ": 1
}
}- 请求示例:
json
{
"palletTypeId": "PALLET-TYPE-001",
"coordinateX": 2.5,
"coordinateY": 6.8,
"coordinateZ": 1,
"laneId": "LANE-A01"
}- 响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": null
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data | null | 无业务返回值,表示移箱处理成功 |
按甲板查询船上放箱详情
- 接口路径:
/centralControl/getShipPlacementDetailByDeck - Method:
GET - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| deckList | query | List | 否 | 甲板层级集合,常见值:1/3/5;不传、传 null 或空数组则查询所有甲板 |
| voyageId | query | String | 否 | 航次ID,不传则查询当前作业航次 |
- 响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": [
{
"coordX": 1.2,
"coordY": 3.4,
"coordZ": 1,
"workStatus": "PENDING",
"palletTypeId": "PALLET-TYPE-001",
"length": 12.2,
"width": 2.44,
"containers": [
{
"id": "f3e1b8f2-53b1-4b1f-a43f-72e2f7e7f6df",
"laneId": "LANE-A01",
"coordX": 1.2,
"coordY": 3.4,
"coordZ": 1,
"cntr": "MSCU1234567",
"updatedOn": "2026-05-08T10:30:00+08:00",
"createdOn": "2026-05-08T10:00:00+08:00",
"createdBy": "admin",
"updatedBy": "admin",
"remark": null,
"actCoordX": null,
"actCoordY": null,
"actCoordZ": null,
"workMode": "DRIVER",
"voyage": "V2026050801",
"workStatus": "PENDING",
"status": "NORMAL",
"trailerNo": "IT-001",
"cntrType": "GP",
"cntrSize": 20,
"palletId": "PALLET-001",
"cntrWeight": 24.5
}
]
}
]
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data[].coordX | BigDecimal | X 坐标 |
| data[].coordY | BigDecimal | Y 坐标 |
| data[].coordZ | BigDecimal | Z 坐标/甲板层级 |
| data[].workStatus | String | 当前坐标分组的作业状态 |
| data[].palletTypeId | String | 托盘池 ID |
| data[].length | BigDecimal | 托盘长度 |
| data[].width | BigDecimal | 托盘宽度 |
| data[].containers | Array | 该坐标下存在箱号的放箱记录列表,元素字段结构同 C_LANE_CNTR |
根据托盘池ID查询船上放箱详情
- 接口路径:
/centralControl/getShipPlacementDetailByPalletTypeId - Method:
GET - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| palletTypeId | query | String | 是 | 托盘池 ID |
接口说明:根据托盘池ID查询该托盘在船上的放箱详情,返回单个放箱位置信息。
响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": {
"coordX": 1.2,
"coordY": 3.4,
"coordZ": 1,
"workStatus": "PENDING",
"palletTypeId": "PALLET-TYPE-001",
"length": 12.2,
"width": 2.44,
"containers": [
{
"id": "f3e1b8f2-53b1-4b1f-a43f-72e2f7e7f6df",
"laneId": "LANE-A01",
"coordX": 1.2,
"coordY": 3.4,
"coordZ": 1,
"cntr": "MSCU1234567",
"updatedOn": "2026-05-08T10:30:00+08:00",
"createdOn": "2026-05-08T10:00:00+08:00",
"createdBy": "admin",
"updatedBy": "admin",
"remark": null,
"actCoordX": null,
"actCoordY": null,
"actCoordZ": null,
"workMode": "DRIVER",
"voyage": "V2026050801",
"workStatus": "PENDING",
"status": "NORMAL",
"trailerNo": "IT-001",
"cntrType": "GP",
"cntrSize": 20,
"palletId": "PALLET-001",
"cntrWeight": 24.5
}
]
}
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data.coordX | BigDecimal | X 坐标 |
| data.coordY | BigDecimal | Y 坐标 |
| data.coordZ | BigDecimal | Z 坐标/甲板层级 |
| data.workStatus | String | 当前坐标分组的作业状态 |
| data.palletTypeId | String | 托盘池 ID |
| data.length | BigDecimal | 托盘长度 |
| data.width | BigDecimal | 托盘宽度 |
| data.containers | Array | 该坐标下存在箱号的放箱记录列表,元素字段结构同 C_LANE_CNTR |
获取车道区域状态字典
接口路径:
/centralControl/getLaneAreaStatusDictMethod:
GET请求参数:无
接口说明:获取车道区域状态字典,共四个状态,未来会将这个状态设置到
C_LANE_CNTR表的workStatus字段中。响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": [
{
"code": "PENDING",
"label": "作业中"
},
{
"code": "DONE",
"label": "已完成"
},
{
"code": "CARGO",
"label": "件货"
},
{
"code": "TEMP",
"label": "临时区域"
}
]
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data[].code | String | 状态编码 |
| data[].label | String | 状态显示名称 |
- 状态说明:
| 编码 | 显示名称 | 说明 |
|---|---|---|
| PENDING | 作业中 | 正在进行作业的区域 |
| DONE | 已完成 | 作业已完成的区域 |
| CARGO | 件货 | 存放件货的区域 |
| TEMP | 临时区域 | 临时使用的区域 |
新增临时区域或件货区域
- 接口路径:
/centralControl/insertTemporaryArea - Method:
POST - 请求参数:请求体为单个
CLaneCntr对象
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| coordX | body | BigDecimal | 是 | X 坐标,对应 C_LANE_CNTR.COORD_X |
| coordY | body | BigDecimal | 是 | Y 坐标,对应 C_LANE_CNTR.COORD_Y |
| coordZ | body | BigDecimal | 是 | Z 坐标,对应 C_LANE_CNTR.COORD_Z |
| length | body | BigDecimal | 是 | 长度,对应 C_LANE_CNTR.LENGTH |
| width | body | BigDecimal | 是 | 宽度,对应 C_LANE_CNTR.WIDTH |
| workStatus | body | String | 是 | 作业状态,只允许 CARGO、TEMP,对应 C_LANE_CNTR.WORK_STATUS |
接口说明:插入单条临时区域或件货区域数据到
C_LANE_CNTR表,系统会自动生成主键并补充创建时间、更新时间、创建人、更新人和正常数据状态。请求示例:
json
{
"coordX": 1,
"coordY": 2,
"coordZ": 3,
"length": 12.2,
"width": 2.44,
"workStatus": "TEMP"
}- 响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": null
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data | null | 无业务返回值,表示插入成功 |
删除临时区域或件货区域
- 接口路径:
/centralControl/deleteTemporaryArea - Method:
GET - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| palletTypeId | query | String | 是 | C_LANE_CNTR 表的主键 ID,临时区域未与托盘池数据绑定,在获取配载数据时,此表的 ID 会被赋值到 palletTypeId |
接口说明:根据
C_LANE_CNTR表的主键 ID 删除指定的临时区域或件货区域记录。响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": null
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data | null | 无业务返回值,表示删除成功 |
根据船舶代码关联查询甲板和车道信息
- 接口路径:
/centralControl/getDeckAndLaneByVesselCode - Method:
GET - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| vesselCode | query | String | 是 | 船舶代码 |
接口说明:根据船舶代码关联查询
C_DECK和C_LANE表的数据,C_DECK的 ID 就是C_LANE表的deckId。返回每个甲板信息及其关联的车道列表。响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": [
{
"id": "DECK-001",
"vesselCode": "NGP",
"deckNo": 1,
"width": 30,
"length": 100,
"offsetX": 0,
"offsetY": 0,
"url": null,
"roadList": [
{
"id": "LANE-001",
"deckId": "DECK-001",
"x": 10,
"y": 5,
"w": 5,
"h": 3,
"lineNo": "L01",
"description": "一号车道",
"remark": null,
"fillColor": "#FFFFFF",
"strokeColor": "#000000",
"strokeWidth": 1
},
{
"id": "LANE-002",
"deckId": "DECK-001",
"x": 10,
"y": 15,
"w": 5,
"h": 3,
"lineNo": "L02",
"description": "二号车道",
"remark": null,
"fillColor": "#FFFFFF",
"strokeColor": "#000000",
"strokeWidth": 1
}
]
},
{
"id": "DECK-002",
"vesselCode": "NGP",
"deckNo": 2,
"width": 30,
"length": 100,
"offsetX": 0,
"offsetY": 50,
"url": null,
"roadList": [
{
"id": "LANE-003",
"deckId": "DECK-002",
"x": 10,
"y": 5,
"w": 5,
"h": 3,
"lineNo": "L01",
"description": "一号车道",
"remark": null,
"fillColor": "#FFFFFF",
"strokeColor": "#000000",
"strokeWidth": 1
}
]
}
]
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data[].id | String | 甲板ID |
| data[].vesselCode | String | 船舶代码 |
| data[].deckNo | Integer | 甲板号 |
| data[].width | Integer | 甲板宽度 |
| data[].length | Integer | 甲板长度 |
| data[].offsetX | Integer | X偏移量 |
| data[].offsetY | Integer | Y偏移量 |
| data[].url | String | URL |
| data[].roadList | Array | 车道列表 |
| data[].roadList[].id | String | 车道ID |
| data[].roadList[].deckId | String | 所属甲板ID |
| data[].roadList[].x | Integer | X坐标 |
| data[].roadList[].y | Integer | Y坐标 |
| data[].roadList[].w | Integer | 宽度 |
| data[].roadList[].h | Integer | 高度 |
| data[].roadList[].lineNo | String | 车道号 |
| data[].roadList[].description | String | 描述 |
| data[].roadList[].remark | String | 备注 |
| data[].roadList[].fillColor | String | 填充颜色 |
| data[].roadList[].strokeColor | String | 描边颜色 |
| data[].roadList[].strokeWidth | Integer | 描边宽度 |
内拖车模块接口
结束作业
- 接口路径:
/internalTrailer/endAssignment - Method:
GET - 请求参数:
| 参数名 | 位置 | 类型 | 必填 | 含义 |
|---|---|---|---|---|
| palletTypeId | query | String | 是 | 托盘池ID |
| headOrientation | query | String | 否 | 车头朝向枚举(BOW-船头/STERN-船尾) |
接口说明:
- 前置条件:托盘必须存在于托盘池中,否则接口会直接报错:
托盘不存在,无法结束作业。 - 接口会根据
palletTypeId查询托盘池信息,批量更新作业相关记录为完成状态,并将托盘池记录workStatus更新为DONE。 - 如果托盘已绑定内拖车,内拖车在线会话
workStatus会被更新为WAITING_FOR_PALLET。 - 通知所有终端刷新船图数据和托盘列表。
- 前置条件:托盘必须存在于托盘池中,否则接口会直接报错:
响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": null
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data | null | 无业务返回值,表示结束作业成功 |
叉车模块接口
获取空拖头状态下的拖车列表
- 接口路径:
/forklift/getEmptyTrailerList - Method:
GET - 请求参数:无
- 接口说明:返回
workStatus=WAITING_FOR_PALLET的拖车会话信息,数据直接来自 Redis 会话存储。 - 响应示例:
json
{
"code": 0,
"message": "请求成功",
"data": [
{
"sessionId": "session-uuid-123",
"terminalName": "IT-001",
"terminalType": "DRIVER",
"workStatus": "WAITING_FOR_PALLET",
"connectTime": "2026-05-08T10:00:00"
},
{
"sessionId": "session-uuid-456",
"terminalName": "IT-003",
"terminalType": "DRIVERLESS",
"workStatus": "WAITING_FOR_PALLET",
"connectTime": "2026-05-08T10:15:00"
},
{
"sessionId": "session-uuid-789",
"terminalName": "IT-005",
"terminalType": "DRIVER",
"workStatus": "WAITING_FOR_PALLET",
"connectTime": "2026-05-08T10:30:00"
}
]
}- 响应字段说明:
| 字段 | 类型 | 含义 |
|---|---|---|
| data[].sessionId | String | WebSocket 会话 ID |
| data[].terminalName | String | 内拖车号(终端名称) |
| data[].terminalType | String | 拖车类型:DRIVER(有人拖车)、DRIVERLESS(无人拖车) |
| data[].workStatus | String | 拖车作业状态,固定为 WAITING_FOR_PALLET |
| data[].connectTime | DateTime/String | 建连时间 |