Skip to content

中控

获取盘型池数据

  • 接口路径:/centralControl/getTodoPalletList
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
voyageIdqueryString航次ID,不传则查询当前作业航次的数据
  • 接口说明:返回指定航次的托盘数据;返回数据按 pinnedFlag 置顶状态降序排列,置顶托盘按 pinnedTime 置顶时间升序排列,非置顶托盘按 recordTime 创建时间升序排列。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    {
      "palletTypeId": "2f50d4c1-8792-4b71-a1a3-7344327b6b7e",
      "palletType": "20GP标准托盘",
      "palletWorkType": "SUITCASE",
      "palletSize": 20,
      "workStatus": "PENDING",
      "voyageId": "V2026050801",
      "recordTime": "2026-05-08T10:30:00+08:00",
      "sequence": 1,
      "bindForkliftNo": "FORKLIFT-001",
      "bindInternalTrailerFlag": "Y",
      "bindInternalTrailerNo": "IT-001",
      "bindContainerInfoFlag": "N",
      "bindContainerInfoList": [],
      "bindReachStackerNo": "RS-01",
      "bindContainerInfoList": [
        {
          "id": "YARD-001",
          "cntrIso": "MSCU1234567",
          "workStatus": "NONE",
          "voyageId": "V2026050801",
          "updatedOn": "2026-05-08T10:30:00+08:00",
          "createdOn": "2026-05-08T10:00:00+08:00",
          "createdBy": "admin",
          "updatedBy": "admin",
          "remark": null,
          "laneNumber": 6,
          "cntrType": "GP",
          "cntrSize": 20,
          "manifestWeight": 22000,
          "bridgeWeight": 22350
        }
      ],
      "pinnedFlag": "Y",
      "pinnedTime": "2026-05-09T14:30:00+08:00"
    },
    {
      "palletTypeId": "3a7b8c9d-1234-5678-abcd-ef1234567890",
      "palletType": "40HC标准托盘",
      "palletWorkType": "SHIPMENT",
      "palletSize": 40,
      "workStatus": "NONE",
      "voyageId": "V2026050801",
      "recordTime": "2026-05-08T11:00:00+08:00",
      "sequence": 2,
      "bindForkliftNo": "",
      "bindInternalTrailerFlag": "N",
      "bindInternalTrailerNo": "",
      "bindContainerInfoFlag": "N",
      "bindContainerInfoList": [],
      "bindReachStackerNo": "",
      "bindContainerInfoList": [],
      "pinnedFlag": "N",
      "pinnedTime": null
    }
  ]
}
  • 响应字段说明:
字段类型含义
data[].palletTypeIdString盘型池记录唯一标识
data[].palletTypeString托盘类型名称(如:20GP标准托盘、40HC标准托盘)
data[].palletWorkTypeString托盘作业类型,SHIPMENT 表示直接装船,SUITCASE 表示等待拉箱
data[].palletSizeInteger托盘尺寸(柜型),对应 CPallet 表的 palletSize 字段,如 20、40 等
data[].workStatusString托盘池记录作业状态,常见值:NONE 待作业、PENDING 作业中、DONE 已完成
data[].voyageIdString绑定的航次ID
data[].recordTimeDate/String盘型加入盘型池的时间
data[].sequenceInteger盘型序号,同一托盘池中从1开始递增
data[].bindForkliftNoString签收该托盘的叉车终端号/编号,未签收时为空
data[].bindInternalTrailerFlagString是否已绑定内拖车,Y 表示已绑定,N 表示未绑定
data[].bindInternalTrailerNoString绑定的内拖车号,未绑定时为空
data[].bindContainerInfoFlagString是否已绑定箱信息(历史字段),Y 表示已绑定,N 表示未绑定
data[].bindContainerInfoListArray已绑定箱信息列表(历史字段),未绑定时为空数组
data[].bindReachStackerNoString绑定的正面吊名称/账号,未绑定时为空
data[].bindContainerInfoListArray已绑定的箱信息列表,未放箱时为空数组,元素结构同 CYardCntr 实体类
data[].pinnedFlagString是否置顶,Y 表示已置顶,N 表示未置顶
data[].pinnedTimeDate/String置顶时间,未置顶时为 null

取消添加盘型到盘型池中

  • 接口路径:/centralControl/cancelAddPalletToPool
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString盘型池记录 ID
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示删除成功

置顶托盘

  • 接口路径:/centralControl/pinPallet
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString盘型池记录 ID
  • 接口说明:置顶时会记录 pinnedTime(置顶时间),用于 getTodoPalletList 接口排序。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示置顶成功

取消置顶托盘

  • 接口路径:/centralControl/unpinPallet
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString盘型池记录 ID
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示取消置顶成功

添加盘型到盘型池中

  • 接口路径:/centralControl/addPalletToPool
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypequeryString盘型名称
palletWorkTypequeryString托盘作业类型,SHIPMENT 表示直接装船,SUITCASE 表示等待拉箱
  • 备注:新增成功后会向所有叉车终端(terminalType=FORKLIFT)推送一条 WebSocket 消息,提示刷新托盘池列表。新增时会自动绑定当前作业航次(通过 agCommon.selectLatestWorkingVoyage 获取)。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": "2f50d4c1-8792-4b71-a1a3-7344327b6b7e"
}
  • 响应字段说明:
字段类型含义
dataString新加入盘型池后生成的 palletTypeId

批量添加盘型到盘型池中

  • 接口路径:/centralControl/batchAddPalletToPool
  • Method:POST
  • 请求参数:
参数名位置类型必填含义
palletListbodyArray盘型列表
palletList[].palletTypebodyString盘型名称
palletList[].palletWorkTypebodyString托盘作业类型,SHIPMENT 表示直接装船,SUITCASE 表示等待拉箱
  • 请求示例:
json
{
  "palletList": [
    {
      "palletType": "20GP标准托盘",
      "palletWorkType": "SHIPMENT"
    },
    {
      "palletType": "40HC标准托盘",
      "palletWorkType": "SUITCASE"
    }
  ]
}
  • 备注:批量添加成功后会向所有叉车终端(terminalType=FORKLIFT)推送 WebSocket 消息,提示刷新托盘池列表。每个盘型都会自动绑定当前作业航次。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    "2f50d4c1-8792-4b71-a1a3-7344327b6b7e",
    "3a7b8c9d-1234-5678-abcd-ef1234567890"
  ]
}
  • 响应字段说明:
字段类型含义
dataArray<String>批量加入盘型池后生成的 palletTypeId 列表,顺序与请求一致

切换是否手动配载

  • 接口路径:/centralControl/toggleManualLoadingFlag
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
manualLoadingFlagqueryString手动配载开关,Y 表示开启,N 表示关闭
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示切换成功

中控手动配载完成接口

  • 接口路径:/centralControl/completeManualLoading
  • Method:POST
  • 请求参数:
参数名位置类型必填含义
palletTypeIdbodyString托盘类型 ID
coordinateXbodyBigDecimal作业位置 X 坐标
coordinateYbodyBigDecimal作业位置 Y 坐标
coordinateZbodyBigDecimal作业位置 Z 坐标
lengthbodyBigDecimal长度
widthbodyBigDecimal宽度
laneIdbodyString车道 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": [...]
    }
  ]
}
  • 响应字段说明:
字段类型含义
dataArray船上放箱详情列表,元素结构同 getShipPlacementDetailByDeck 接口响应

中控取消配载接口

  • 接口路径:/centralControl/cancelManualLoading
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString托盘池ID
  • 备注:
    • 该接口是 completeManualLoading 接口的逆向操作。
    • 前置条件:托盘必须已完成配载(即存在对应的 C_LANE_CNTR 记录),否则接口会直接报错:该托盘未进行配载,无法取消
    • 作业状态检查:如果配载数据的作业状态为 DONE(已完成),则无法取消配载,接口会报错:作业已完成,无法取消配载
    • 接口会删除配载时插入的 C_LANE_CNTR 记录,恢复托盘池和内拖车的状态为 WAITING_FOR_SHIPMENT(等待装船),并发送消息通知相关终端。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示取消配载成功

作业前配置修改

  • 接口路径:/centralControl/setConfiguration
  • Method:POST
  • 请求参数:
参数名位置类型必填含义
voyageIdbodyString航次 ID
templateIdbodyString模板 ID
minusoneTeubodyString负一甲装箱量
oneTeubodyString一甲装箱量
twoTeubodyString二甲装箱量
threeTeubodyString三甲装箱量
fourTeubodyString四甲装箱量
fiveTeubodyString五甲装箱量
minusoneTeuTruckNumbodyString负一甲作业车数
oneTruckNumbodyString一甲作业车数
twoTruckNumbodyString二甲作业车数
threeTruckNumbodyString三甲作业车数
fourTruckNumbodyString四甲作业车数
fiveTruckNumbodyString五甲作业车数
emptyPallet20bodyString20尺空托盘
emptyPallet40bodyString40尺空托盘
planTotlTeubodyStringTEU计划总量
planDc20bodyString20尺干柜
planLf20bodyString20尺活鱼
planRf20bodyString20尺冷柜
planOw20bodyString20尺超重(铁件、石材)
planDc40bodyString40尺干柜
planRf40bodyString40尺冷柜
plan45bodyString45尺
  • 请求示例:
json
{
  "voyageId": "V2026050801",
  "templateId": "TEMPLATE-001",
  "minusoneTeu": "10",
  "oneTeu": "20",
  "twoTeu": "25",
  "threeTeu": "30",
  "fourTeu": "25",
  "fiveTeu": "20",
  "minusoneTeuTruckNum": "2",
  "oneTruckNum": "4",
  "twoTruckNum": "5",
  "threeTruckNum": "6",
  "fourTruckNum": "5",
  "fiveTruckNum": "4",
  "emptyPallet20": "5",
  "emptyPallet40": "3",
  "planTotlTeu": "500",
  "planDc20": "100",
  "planLf20": "50",
  "planRf20": "80",
  "planOw20": "30",
  "planDc40": "120",
  "planRf40": "100",
  "plan45": "20"
}
  • 接口说明:保存作业前配置,包含航次模板、各甲板装箱量、各甲板作业车数、空托盘数量及计划箱量信息。配置保存成功后,返回完整的配置信息(与 getConfiguration 接口返回值结构一致)。

  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": {
    "voyageId": "V2026050801",
    "templateId": "TEMPLATE-001",
    "vesselCode": "NGP",
    "vesselName": "新金桥7",
    "line": "威海-韩国",
    "bVyg": "2026001E",
    "ieType": "E",
    "phase": "YDG",
    "goal": "韩国仁川",
    "isXc": "0",
    "iscomfire": "1",
    "eta": "2026-05-08 08:00:00",
    "etd": "2026-05-08 18:00:00",
    "ata": "2026-05-08 08:15:00",
    "atd": null,
    "etstartwork": "2026-05-08 09:00:00",
    "etendwork": "2026-05-08 17:00:00",
    "startwork": "2026-05-08 09:10:00",
    "endwork": null,
    "minusoneTeu": "10",
    "oneTeu": "20",
    "twoTeu": "25",
    "threeTeu": "30",
    "fourTeu": "25",
    "fiveTeu": "20",
    "minusoneTeuTruckNum": "2",
    "oneTruckNum": "4",
    "twoTruckNum": "5",
    "threeTruckNum": "6",
    "fourTruckNum": "5",
    "fiveTruckNum": "4",
    "emptyPallet20": "5",
    "emptyPallet40": "3",
    "planTotlTeu": "500",
    "planDc20": "100",
    "planLf20": "50",
    "planRf20": "80",
    "planOw20": "30",
    "planDc40": "120",
    "planRf40": "100",
    "plan45": "20"
  }
}
  • 响应字段说明:

返回的 data 字段为 SetConfigurationRespVO 对象,包含船舶航次信息和配置信息。字段说明与 getConfiguration 接口一致,具体如下:

字段类型含义
data.voyageIdString航次 ID
data.templateIdString模板 ID
船舶航次信息
data.vesselCodeString船舶编码
data.vesselNameString船名
data.lineString航线
data.bVygString出口航次号
data.ieTypeString进出标志(E:出口 I:进口)
data.phaseString作业阶段
data.goalString目标港
data.isXcString是否卸箱(0:否 1:是)
data.iscomfireString是否确认作业
data.etaString预计到港时间
data.etdString预计离港时间
data.ataString实际到港时间
data.atdString实际离港时间
data.etstartworkString计划开工时间
data.etendworkString计划完工时间
data.startworkString实际开工时间
data.endworkString实际完工时间
data.xhdString卸货港代码
data.impMnftDateString进口装船计划日期
data.expMnftDateString出口装船计划日期
data.beginreceiveString进口入港凭单日期
data.drycutoffString干柜截止日期
data.hazcutoffString危险品截止日期
data.reefcutoffString冷藏截止日期
data.pilotonboardString引水员上船时间
data.pilotoffboardString引水员下船时间
data.laboronboardString劳工上船时间
data.laboroffboardString劳工下船时间
data.opaString实际开始靠泊时间
data.opdString实际离泊时间
data.startdiscString开始卸货时间
data.completediscString完成卸货时间
data.startloadString开始装货时间
data.completeloadString完成装货时间
data.loadNoteString装货备注
data.discNoteString卸货备注
data.restowNoteString移位备注
data.shiftNoteString换船备注
data.iShipNoString内部船号
data.foreBollardString船首系缆柱
data.aftBollardString船尾系缆柱
data.foreOffsetString船首偏移量
data.aftOffsetString船尾偏移量
data.notesString备注
data.isQgString是否起隔
data.isSdString是否扫底
data.isSbString是否绑扎
data.isPfString是否配积
data.inZlString入闸方式
data.inBzString入闸备注
data.inBjString入闸标记
data.workRoRoString是否RoRo作业
data.createdManString创建人
data.createdOnString创建时间
data.updatedManString更新人
data.updatedOnString更新时间
配置信息
data.minusoneTeuString负一甲装箱量
data.oneTeuString一甲装箱量
data.twoTeuString二甲装箱量
data.threeTeuString三甲装箱量
data.fourTeuString四甲装箱量
data.fiveTeuString五甲装箱量
data.minusoneTeuTruckNumString负一甲作业车数
data.oneTruckNumString一甲作业车数
data.twoTruckNumString二甲作业车数
data.threeTruckNumString三甲作业车数
data.fourTruckNumString四甲作业车数
data.fiveTruckNumString五甲作业车数
data.emptyPallet20String20尺空托盘
data.emptyPallet40String40尺空托盘
data.planTotlTeuStringTEU计划总量
data.planDc20String20尺干柜
data.planLf20String20尺活鱼
data.planRf20String20尺冷柜
data.planOw20String20尺超重(铁件、石材)
data.planDc40String40尺干柜
data.planRf40String40尺冷柜
data.plan45String45尺

查询开工配置信息

  • 接口路径:/centralControl/getConfiguration
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
voyageIdqueryString航次ID,不传则查询当前开工航次
  • 接口说明:根据航次ID查询开工配置信息;若不传 voyageId,则查询当前开工航次的配置信息。响应实体为 SetConfigurationRespVO,包含船舶航次信息和配置信息。

  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": {
    "voyageId": "V2026050801",
    "templateId": "TEMPLATE-001",
    "vesselCode": "NGP",
    "vesselName": "新金桥7",
    "line": "威海-韩国",
    "bVyg": "2026001E",
    "ieType": "E",
    "phase": "YDG",
    "goal": "韩国仁川",
    "isXc": "0",
    "iscomfire": "1",
    "eta": "2026-05-08 08:00:00",
    "etd": "2026-05-08 18:00:00",
    "ata": "2026-05-08 08:15:00",
    "atd": null,
    "etstartwork": "2026-05-08 09:00:00",
    "etendwork": "2026-05-08 17:00:00",
    "startwork": "2026-05-08 09:10:00",
    "endwork": null,
    "minusoneTeu": "10",
    "oneTeu": "20",
    "twoTeu": "25",
    "threeTeu": "30",
    "fourTeu": "25",
    "fiveTeu": "20",
    "minusoneTeuTruckNum": "2",
    "oneTruckNum": "4",
    "twoTruckNum": "5",
    "threeTruckNum": "6",
    "fourTruckNum": "5",
    "fiveTruckNum": "4",
    "emptyPallet20": "5",
    "emptyPallet40": "3",
    "planTotlTeu": "500",
    "planDc20": "100",
    "planLf20": "50",
    "planRf20": "80",
    "planOw20": "30",
    "planDc40": "120",
    "planRf40": "100",
    "plan45": "20"
  }
}
  • 响应字段说明:
字段类型含义
data.voyageIdString航次 ID
data.templateIdString模板 ID
船舶航次信息
data.vesselCodeString船舶编码
data.vesselNameString船名
data.lineString航线
data.bVygString出口航次号
data.ieTypeString进出标志(E:出口 I:进口)
data.phaseString作业阶段
data.goalString目标港
data.isXcString是否卸箱(0:否 1:是)
data.iscomfireString是否确认作业
data.etaString预计到港时间
data.etdString预计离港时间
data.ataString实际到港时间
data.atdString实际离港时间
data.etstartworkString计划开工时间
data.etendworkString计划完工时间
data.startworkString实际开工时间
data.endworkString实际完工时间
data.xhdString卸货港代码
data.impMnftDateString进口装船计划日期
data.expMnftDateString出口装船计划日期
data.beginreceiveString进口入港凭单日期
data.drycutoffString干柜截止日期
data.hazcutoffString危险品截止日期
data.reefcutoffString冷藏截止日期
data.pilotonboardString引水员上船时间
data.pilotoffboardString引水员下船时间
data.laboronboardString劳工上船时间
data.laboroffboardString劳工下船时间
data.opaString实际开始靠泊时间
data.opdString实际离泊时间
data.startdiscString开始卸货时间
data.completediscString完成卸货时间
data.startloadString开始装货时间
data.completeloadString完成装货时间
data.loadNoteString装货备注
data.discNoteString卸货备注
data.restowNoteString移位备注
data.shiftNoteString换船备注
data.iShipNoString内部船号
data.foreBollardString船首系缆柱
data.aftBollardString船尾系缆柱
data.foreOffsetString船首偏移量
data.aftOffsetString船尾偏移量
data.notesString备注
data.isQgString是否起隔
data.isSdString是否扫底
data.isSbString是否绑扎
data.isPfString是否配积
data.inZlString入闸方式
data.inBzString入闸备注
data.inBjString入闸标记
data.workRoRoString是否RoRo作业
data.createdManString创建人
data.createdOnString创建时间
data.updatedManString更新人
data.updatedOnString更新时间
配置信息
data.minusoneTeuString负一甲装箱量
data.oneTeuString一甲装箱量
data.twoTeuString二甲装箱量
data.threeTeuString三甲装箱量
data.fourTeuString四甲装箱量
data.fiveTeuString五甲装箱量
data.minusoneTeuTruckNumString负一甲作业车数
data.oneTruckNumString一甲作业车数
data.twoTruckNumString二甲作业车数
data.threeTruckNumString三甲作业车数
data.fourTruckNumString四甲作业车数
data.fiveTruckNumString五甲作业车数
data.emptyPallet20String20尺空托盘
data.emptyPallet40String40尺空托盘
data.planTotlTeuStringTEU计划总量
data.planDc20String20尺干柜
data.planLf20String20尺活鱼
data.planRf20String20尺冷柜
data.planOw20String20尺超重(铁件、石材)
data.planDc40String40尺干柜
data.planRf40String40尺冷柜
data.plan45String45尺

中控开工

  • 接口路径:/centralControl/beginWork
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
vesselVisitIdqueryString航次 ID
  • 接口说明:

    • 调用前会检查是否有其他船舶正在作业,若有则返回错误:有船舶未作业完成,请先将其完船后再开工!
    • 成功后会更新航次状态为开工状态
  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示开工成功

中控开工取消

  • 接口路径:/centralControl/cancelBeginWork
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
vesselVisitIdqueryString航次 ID
  • 接口说明:

    • 若船舶已完工(WORK_RO_RO=2),返回错误:选择的船舶已完工,无法进行取消!
    • 若船舶未开工(WORK_RO_RO!=1),返回错误:选择的船舶未开工,无法进行取消!
  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示开工取消成功

中控完工

  • 接口路径:/centralControl/endWork
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
vesselVisitIdqueryString航次 ID
  • 接口说明:

    • 若船舶未开工(STARTWORK 为空),返回错误:当前船舶未开工,无法设置为完工!
  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示完工成功

中控完工取消

  • 接口路径:/centralControl/cancelEndWork
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
vesselVisitIdqueryString航次 ID
  • 接口说明:

    • 若船舶未完工(WORK_RO_RO!=2),返回错误:选择的船舶未完工,无法进行取消!
  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示完工取消成功

中控添加/修改计划

  • 接口路径:/centralControl/updatePlan
  • Method:POST
  • 请求参数:
参数名位置类型必填含义
voyageIdbodyString航次 ID
templateIdbodyString模板 ID
minusoneTeubodyString负一甲装箱量
oneTeubodyString一甲装箱量
twoTeubodyString二甲装箱量
threeTeubodyString三甲装箱量
fourTeubodyString四甲装箱量
fiveTeubodyString五甲装箱量
minusoneTeuTruckNumbodyString负一甲作业车数
oneTruckNumbodyString一甲作业车数
twoTruckNumbodyString二甲作业车数
threeTruckNumbodyString三甲作业车数
fourTruckNumbodyString四甲作业车数
fiveTruckNumbodyString五甲作业车数
emptyPallet20bodyString20尺空托盘
emptyPallet40bodyString40尺空托盘
planTotlTeubodyStringTEU计划总量
planDc20bodyString20尺干柜
planLf20bodyString20尺活鱼
planRf20bodyString20尺冷柜
planOw20bodyString20尺超重(铁件、石材)
planDc40bodyString40尺干柜
planRf40bodyString40尺冷柜
plan45bodyString45尺
  • 请求示例:
json
{
  "voyageId": "V2026050801",
  "templateId": "TEMPLATE-001",
  "minusoneTeu": "10",
  "oneTeu": "20",
  "twoTeu": "25",
  "threeTeu": "30",
  "fourTeu": "25",
  "fiveTeu": "20",
  "minusoneTeuTruckNum": "2",
  "oneTruckNum": "4",
  "twoTruckNum": "5",
  "threeTruckNum": "6",
  "fourTruckNum": "5",
  "fiveTruckNum": "4",
  "emptyPallet20": "5",
  "emptyPallet40": "3",
  "planTotlTeu": "500",
  "planDc20": "100",
  "planLf20": "50",
  "planRf20": "80",
  "planOw20": "30",
  "planDc40": "120",
  "planRf40": "100",
  "plan45": "20"
}
  • 接口说明:

    • 根据航次ID添加或修改计划信息、模板信息、各甲板装箱量、各甲板作业车数及空托盘数量
    • 若该航次已存在计划记录,则更新;否则新增
  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示计划更新成功

查询航次列表

  • 接口路径:/centralControl/getVesselVisitList

  • Method:GET

  • 请求参数:无

  • 接口说明:查询出口航次列表,筛选条件为 IE_TYPE = 'E'VESSEL_CODE IN ('NGP','NEW GOLDEN BRIDGVII'),按创建时间倒序排列。

  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    {
      "id": "VID-001",
      "vesselCode": "NGP",
      "vesselName": "新金桥",
      "voyageId": "V2026050801",
      "eta": "2026-05-08 14:00:00",
      "etd": "2026-05-09 10:00:00",
      "createdOn": "2026-05-07 09:00:00",
      "createdMan": "admin"
    }
  ]
}
  • 响应字段说明:
字段类型含义
data[].idString航次记录 ID
data[].vesselCodeString船舶代码
data[].vesselNameString船舶名称
data[].voyageIdString航次号
data[].etaString预计到港时间
data[].etdString预计离港时间
data[].createdOnDate/String创建时间
data[].createdManString创建人

获取车道区域状态字典

  • 接口路径:/centralControl/getLaneAreaStatusDict

  • Method:GET

  • 请求参数:无

  • 接口说明:获取车道区域状态字典,共四个状态,未来会将这个状态设置到 C_LANE_CNTR 表的 workStatus 字段中。

  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    {
      "code": "PENDING",
      "label": "作业中"
    },
    {
      "code": "DONE",
      "label": "已完成"
    },
    {
      "code": "CARGO",
      "label": "件货"
    },
    {
      "code": "TEMP",
      "label": "临时区域"
    }
  ]
}
  • 响应字段说明:
字段类型含义
data[].codeString状态编码
data[].labelString状态显示名称
  • 状态说明:
编码显示名称说明
PENDING作业中正在进行作业的区域
DONE已完成作业已完成的区域
CARGO件货存放件货的区域
TEMP临时区域临时使用的区域

新增临时区域或件货区域

  • 接口路径:/centralControl/insertTemporaryArea
  • Method:POST
  • 请求参数:请求体为单个 CLaneCntr 对象
参数名位置类型必填含义
coordXbodyBigDecimalX 坐标,对应 C_LANE_CNTR.COORD_X
coordYbodyBigDecimalY 坐标,对应 C_LANE_CNTR.COORD_Y
coordZbodyBigDecimalZ 坐标,对应 C_LANE_CNTR.COORD_Z
lengthbodyBigDecimal长度,对应 C_LANE_CNTR.LENGTH
widthbodyBigDecimal宽度,对应 C_LANE_CNTR.WIDTH
workStatusbodyString作业状态,只允许 CARGOTEMP,对应 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
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示插入成功

删除临时区域或件货区域

  • 接口路径:/centralControl/deleteTemporaryArea
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryStringC_LANE_CNTR 表的主键 ID,临时区域未与托盘池数据绑定,在获取配载数据时,此表的 ID 会被赋值到 palletTypeId
  • 接口说明:根据 C_LANE_CNTR 表的主键 ID 删除指定的临时区域或件货区域记录。

  • 响应示例:

json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示删除成功

中控移箱

  • 接口路径:/centralControl/moveContainer
  • Method:POST
  • 请求参数:
参数名位置类型必填含义
palletTypeIdbodyString托盘池 ID,用于定位需要移位的托盘及其放箱记录
coordinateXbodyBigDecimal目标位置 X 坐标
coordinateYbodyBigDecimal目标位置 Y 坐标
coordinateZbodyBigDecimal目标位置 Z 坐标
trailerNobodyString拖车号,hasDone 为 true 时优先使用此字段通知拖车
sendNotificationbodyString是否发送通知,仅当值为 "Y" 时发送通知
laneIdbodyString车道 ID
  • 接口说明:

    • 通过 palletTypeId 获取托盘池信息,并根据当前最新作业航次定位该托盘对应的 C_LANE_CNTR 放箱记录。
    • 当放箱记录为 workStatus=PENDING 时,仅更新 C_LANE_CNTR 的目标坐标,并通知该记录绑定的内拖车作业位置已调整。
    • 当放箱记录为 workStatus=DONE 时:
      • 如果请求参数中提供了 trailerNo,则优先使用该拖车号进行通知;
      • 如果未提供 trailerNo,则使用托盘池已绑定的内拖车号(若托盘池未绑定内拖车则报错);
      • 系统会将放箱记录重置为 PENDING 并绑定到指定的内拖车,同时按航次+箱号把 C_YARD_CNTR.workStatus 重置为 PENDING,并通过 WebSocket 下发新的移箱任务。
    • 不支持同时移位 PENDINGDONE 的记录(需要分批操作)。
  • 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
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示移箱处理成功

按甲板查询船上放箱详情

  • 接口路径:/centralControl/getShipPlacementDetailByDeck
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
deckListqueryList甲板层级集合,常见值:1/3/5;不传、传 null 或空数组则查询所有甲板
voyageIdqueryString航次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[].coordXBigDecimalX 坐标
data[].coordYBigDecimalY 坐标
data[].coordZBigDecimalZ 坐标/甲板层级
data[].workStatusString当前坐标分组的作业状态
data[].palletTypeIdString托盘池 ID
data[].lengthBigDecimal托盘长度
data[].widthBigDecimal托盘宽度
data[].containersArray该坐标下存在箱号的放箱记录列表,元素字段结构同 C_LANE_CNTR

按甲板查询船上放箱详情(含托盘信息)

  • 接口路径:/centralControl/getShipPlacementDetailWithPalletByDeck
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
deckListqueryList甲板层级集合,常见值:1/3/5;不传、传 null 或空数组则查询所有甲板
voyageIdqueryString航次ID,不传则查询当前作业航次
  • 接口说明:该接口与 getShipPlacementDetailByDeck 类似,但只查询非临时区域和件货区域的数据(即排除 workStatusCARGOTEMP 的记录),这类数据一定会有托盘信息,因此返回结果中会同步返回 C_PALLET 表的完整数据。C_LANE_CNTR 表的 palletId 字段对应 C_PALLET 表的 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
        }
      ],
      "pallet": {
        "id": "PALLET-001",
        "name": "20GP标准托盘",
        "length": 12.2,
        "width": 2.44,
        "height": 1.2,
        "weight": 0.5,
        "palletSize": 20,
        "quantity": 100,
        "createdOn": "2026-05-01T09:00:00+08:00",
        "createdBy": "admin",
        "updatedOn": "2026-05-08T10:00:00+08:00",
        "updatedBy": "admin",
        "remark": null
      }
    }
  ]
}
  • 响应字段说明:
字段类型含义
data[].coordXBigDecimalX 坐标
data[].coordYBigDecimalY 坐标
data[].coordZBigDecimalZ 坐标/甲板层级
data[].workStatusString当前坐标分组的作业状态
data[].palletTypeIdString托盘池 ID
data[].lengthBigDecimal托盘长度
data[].widthBigDecimal托盘宽度
data[].containersArray该坐标下存在箱号的放箱记录列表,元素字段结构同 C_LANE_CNTR
data[].palletObject托盘信息,字段结构同 C_PALLET 实体类
data[].pallet.idString托盘 ID(主键)
data[].pallet.nameString托盘名称
data[].pallet.lengthBigDecimal托盘长度
data[].pallet.widthBigDecimal托盘宽度
data[].pallet.heightBigDecimal托盘高度
data[].pallet.weightBigDecimal托盘重量
data[].pallet.palletSizeInteger托盘尺寸(柜型)
data[].pallet.quantityInteger托盘数量
data[].pallet.createdOnDate/String创建时间
data[].pallet.createdByString创建人
data[].pallet.updatedOnDate/String更新时间
data[].pallet.updatedByString更新人
data[].pallet.remarkString备注

根据托盘池ID查询船上放箱详情

  • 接口路径:/centralControl/getShipPlacementDetailByPalletTypeId
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString托盘池 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.coordXBigDecimalX 坐标
data.coordYBigDecimalY 坐标
data.coordZBigDecimalZ 坐标/甲板层级
data.workStatusString当前坐标分组的作业状态
data.palletTypeIdString托盘池 ID
data.lengthBigDecimal托盘长度
data.widthBigDecimal托盘宽度
data.containersArray该坐标下存在箱号的放箱记录列表,元素字段结构同 C_LANE_CNTR

根据船舶代码关联查询甲板和车道信息

  • 接口路径:/centralControl/getDeckAndLaneByVesselCode
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
vesselCodequeryString船舶代码
  • 接口说明:根据船舶代码关联查询 C_DECKC_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[].idString甲板ID
data[].vesselCodeString船舶代码
data[].deckNoInteger甲板号
data[].widthInteger甲板宽度
data[].lengthInteger甲板长度
data[].offsetXIntegerX偏移量
data[].offsetYIntegerY偏移量
data[].urlStringURL
data[].roadListArray车道列表
data[].roadList[].idString车道ID
data[].roadList[].deckIdString所属甲板ID
data[].roadList[].xIntegerX坐标
data[].roadList[].yIntegerY坐标
data[].roadList[].wInteger宽度
data[].roadList[].hInteger高度
data[].roadList[].lineNoString车道号
data[].roadList[].descriptionString描述
data[].roadList[].remarkString备注
data[].roadList[].fillColorString填充颜色
data[].roadList[].strokeColorString描边颜色
data[].roadList[].strokeWidthInteger描边宽度

叉车

叉车叫车,让内拖前往托盘场地

  • 接口路径:/forklift/requireInternalTrailer
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
internalTrailerNoqueryString目标内拖车号
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 备注:接口会通过 WebSocket 向目标内拖车(terminalName=internalTrailerNo)推送提示消息:叉车叫车,请前往托盘场地
  • 响应字段说明:
字段类型含义
datanull当前实现无业务返回值,仅返回成功包装

获取空拖头状态下的拖车列表

  • 接口路径:/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[].sessionIdStringWebSocket 会话 ID
data[].terminalNameString内拖车号(终端名称)
data[].terminalTypeString拖车类型:DRIVER(有人拖车)、DRIVERLESS(无人拖车)
data[].workStatusString拖车作业状态,固定为 WAITING_FOR_PALLET
data[].connectTimeDateTime/String建连时间

取消绑定内拖车和托盘

  • 接口路径:/forklift/unbindInternalTrailerAndPallet
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString盘型池记录 ID
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 备注:接口会重置托盘池绑定关系并更新内拖车在线会话 workStatus,同时通过 WebSocket 向目标内拖车推送提示:已解绑托盘,请等待叉车重新绑定托盘
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示解绑成功

绑定内拖车和托盘

  • 接口路径:/forklift/bindInternalTrailerAndPallet
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
internalTrailerNoqueryString内拖车号
palletTypeIdqueryString盘型池记录 ID
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 备注:
    • 接口会写托盘池绑定关系(bindInternalTrailerFlag/bindInternalTrailerNo),并更新内拖车在线会话 workStatus
    • 接口会通过 WebSocket 向目标内拖车推送 workStatus 与提示文案:
      • 非直装船(palletWorkType != SHIPMENT):已绑定托盘,请到等待区排队等待正面吊放箱
      • 直装船(palletWorkType = SHIPMENT):已绑定托盘,可直接装船
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示绑定成功

叉车签收托盘

  • 接口路径:/forklift/signPallet
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString盘型池记录 ID
forkliftNoqueryString叉车终端号/编号
  • 备注:
    • 同一叉车签收新托盘时,会自动取消其名下其他未完成且 bindInternalTrailerFlag 为空或 "N" 的托盘的签收绑定(清空托盘的 bindForkliftNo),避免重复作业;已绑定内拖车(bindInternalTrailerFlag="Y")的托盘不受影响。
    • 接口采用分布式锁机制,避免多个叉车同时签收同一个托盘。若托盘正在被其他叉车操作,会返回错误:当前托盘正在被其他叉车操作,请稍后重试
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示签收成功

叉车取消签收托盘

  • 接口路径:/forklift/cancelSignPallet
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString盘型池记录 ID
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示取消签收成功

船舶配载

获取当前航次在场箱

  • 接口路径:/cLaneCntr/list
  • Method:GET
  • 请求参数:无
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    {
      "id": "f3e1b8f2-53b1-4b1f-a43f-72e2f7e7f6df",
      "laneId": "LANE-A01",
      "coordX": 1.2,
      "coordY": 3.4,
      "coordZ": 0.8,
      "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",
      "voyageId": "V2026050801",
      "workStatus": "PENDING",
      "status": "NORMAL",
      "trailerNo": "IT-001",
      "cntrType": "GP",
      "cntrSize": 20,
      "palletId": "PALLET-001",
      "cntrWeight": 24.5
    }
  ]
}
  • 响应字段说明:
字段类型含义
data[].idString车道箱作业记录 ID
data[].laneIdString车道 ID
data[].coordXBigDecimal作业位置 X 坐标
data[].coordYBigDecimal作业位置 Y 坐标
data[].coordZBigDecimal作业位置 Z 坐标
data[].cntrString箱号
data[].updatedOnDate更新时间
data[].createdOnDate创建时间
data[].createdByString创建人
data[].updatedByString更新人
data[].remarkString备注
data[].actCoordXBigDecimal无人拖车作业回调 X 坐标
data[].actCoordYBigDecimal无人拖车作业回调 Y 坐标
data[].actCoordZBigDecimal无人拖车作业回调 Z 坐标
data[].workModeString作业方式:DRIVER(内拖车)、DRIVERLESS(无人驾驶)
data[].voyageIdString当前作业航次
data[].workStatusString作业状态:PENDING(进行中)、DONE(已完成)、CANCELED(取消)
data[].statusString数据状态:NORMAL(正常)、DISABLED(作废)
data[].trailerNoString拖车号(内拖车号)
data[].cntrTypeString箱型
data[].cntrSizeInteger箱尺寸,如 2040
data[].palletIdString关联托盘 ID
data[].cntrWeightBigDecimal箱重,单位吨

堆场箱

置底在场箱

  • 接口路径:/yard/bottomContainer
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
containerNoqueryString箱号
  • 接口说明:将指定箱号的在场箱置底,通过更新 updatedOn 字段为当前时间实现。查询时按 updatedOn 升序排列,被置底的箱子会排在后面。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示置底成功

托盘

获取场内托盘

  • 接口路径:/cPallet/getAllPallets
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
voyageIdqueryString航次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[].idString托盘主键
data[].nameString托盘名称
data[].lengthBigDecimal托盘长度
data[].widthBigDecimal托盘宽度
data[].heightBigDecimal托盘高度
data[].updatedOnDate/String更新时间
data[].createdOnDate/String创建时间
data[].createdByString创建人
data[].updatedByString更新人
data[].quantityInteger托盘数量
data[].remarkString备注
data[].weightBigDecimal托盘重量
data[].palletSizeInteger托盘尺寸,主要用于前端校验是否允许放箱

正面吊

查询在线终端会话

  • 接口路径:/reachStacker/test
  • Method:GET
  • 请求参数:无
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    {
      "sessionId": "ws-001",
      "username": "admin",
      "terminalType": "DRIVER",
      "terminalName": "IT-001",
      "workStatus": "WAITING_FOR_CONTAINER",
      "connectTime": "2026-05-08T10:00:00",
      "lastActiveTime": "2026-05-08T10:30:00"
    }
  ]
}
  • 响应字段说明:
字段类型含义
data[].sessionIdStringWebSocket 会话 ID
data[].usernameString登录用户名
data[].terminalTypeString终端类型,常见值:DRIVERREACH_STACKERFORKLIFTCONTROL
data[].terminalNameString终端名称,如内拖车号或设备名
data[].workStatusString拖车当前作业状态;非拖车终端可能为空
data[].connectTimeDateTime/String建连时间
data[].lastActiveTimeDateTime/String最后活跃时间

取消正面吊叫车

  • 接口路径:/reachStacker/cancelRequireInternalTrailer
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
internalTrailerNamequeryString被取消叫车的内拖车名称/车号
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示取消成功
  • 备注:
    • 接口会清空托盘池中目标内拖车绑定的 bindReachStackerNo
    • 内拖车在线时:通过 WebSocket 向该内拖车推送提示:正面吊取消叫车,请回等待区等待
    • 内拖车离线时:消息会被压入延迟队列,后续补发。

正面吊叫车

  • 接口路径:/reachStacker/requireInternalTrailer
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
reachStackerNamequeryString发起叫车的正面吊名称
internalTrailerNamequeryString被叫的内拖车名称/车号
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示叫车请求已受理
  • 备注:
    • 接口采用分布式锁机制,避免多个正面吊同时叫一辆车。若拖车已被其他正面吊预约,会返回错误:当前拖车已被其他正面吊预约,请稍后重试
    • 接口会更新托盘池中目标内拖车绑定的 bindReachStackerNo(记录哪个正面吊叫的车)。
    • 内拖车在线时:通过 WebSocket 向该内拖车推送提示:请到{reachStackerName}下等待作业
    • 内拖车离线时:消息会被压入延迟队列,后续补发。

正面吊签收托盘

  • 接口路径:/reachStacker/signPallet
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString盘型池记录 ID
reachStackerNoqueryString正面吊终端号/编号
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示签收成功

获取在场箱列表

  • 接口路径:/reachStacker/getYardContainerList
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
voyageIdqueryString航次ID,不传则查询当前作业航次的数据
  • 接口说明:返回数据按 updatedOn(更新时间)倒序排列。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    {
      "id": "YARD-001",
      "cntrIso": "MSCU1234567",
      "workStatus": "NONE",
      "voyageId": "V2026050801",
      "updatedOn": "2026-05-08T10:30:00+08:00",
      "createdOn": "2026-05-08T10:00:00+08:00",
      "createdBy": "admin",
      "updatedBy": "admin",
      "remark": null,
      "laneNumber": 6,
      "cntrType": "GP",
      "cntrSize": 20,
      "manifestWeight": 22000,
      "bridgeWeight": 22350,
      "taskId": "TASK-001",
      "passGateTime": "2026-05-08T09:15:00+08:00",
      "passGateTruck": "TRUCK-001"
    }
  ]
}
  • 响应字段说明:
字段类型含义
data[].idString堆场箱记录主键
data[].cntrIsoString箱号
data[].workStatusString作业状态,NONE 待作业,PENDING 作业中,DONE 已完成,DROP 甩箱
data[].voyageIdString航次
data[].updatedOnDate/String更新时间
data[].createdOnDate/String创建时间
data[].createdByString创建人
data[].updatedByString更新人
data[].remarkString备注
data[].laneNumberInteger车道号
data[].cntrTypeString箱型
data[].cntrSizeInteger箱尺寸
data[].manifestWeightBigDecimal预配舱单重量
data[].bridgeWeightBigDecimal过磅重量(毛重)
data[].taskIdString关联任务 ID
data[].passGateTimeDate/String过闸时间
data[].passGateTruckString外集卡车号

获取内拖车列表

  • 接口路径:/reachStacker/getInternalTrailerList
  • Method:GET
  • 请求参数:无
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": {
    "idleList": [
      {
        "internalTrailerNo": "IT-001",
        "terminalType": "DRIVER",
        "palletInfo": {
          "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
        },
        "bindContainerInfoList": [],
        "requester": "RS-01"
      },
      {
        "internalTrailerNo": "IT-003",
        "terminalType": "DRIVERLESS",
        "palletInfo": {},
        "bindContainerInfoList": [],
        "requester": ""
      }
    ],
    "assembleList": [],
    "workingList": [
      {
        "internalTrailerNo": "IT-002",
        "terminalType": "DRIVERLESS",
        "palletInfo": {
          "id": "PALLET-002",
          "name": "40HC标准托盘",
          "length": 13.8,
          "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": 1,
          "remark": null,
          "weight": 2.8,
          "palletSize": 40
        },
        "bindContainerInfoList": [
          {
            "id": "YARD-001",
            "cntrIso": "MSCU1234567",
            "workStatus": "NONE",
            "voyageId": "V2026050801",
            "updatedOn": "2026-05-08T10:30:00+08:00",
            "createdOn": "2026-05-08T10:00:00+08:00",
            "createdBy": "admin",
            "updatedBy": "admin",
            "remark": null,
            "laneNumber": 6,
            "cntrType": "GP",
            "cntrSize": 20,
            "manifestWeight": 22000,
            "bridgeWeight": 22350
          },
          {
            "id": "YARD-002",
            "cntrIso": "MSCU7654321",
            "workStatus": "PENDING",
            "voyageId": "V2026050801",
            "updatedOn": "2026-05-08T11:00:00+08:00",
            "createdOn": "2026-05-08T10:00:00+08:00",
            "createdBy": "admin",
            "updatedBy": "admin",
            "remark": "Second container",
            "laneNumber": 6,
            "cntrType": "HC",
            "cntrSize": 40,
            "manifestWeight": 28000,
            "bridgeWeight": 28500
          }
        ],
        "requester": "RS-02"
      }
    ]
  }
}
  • 响应字段说明:
字段类型含义
data.idleListArray空闲拖车列表,包含未绑托盘或已绑托盘但未放箱的拖车
data.assembleListArray预留的“组装中”列表,当前实现始终为空数组
data.workingListArray作业中的拖车列表,通常已关联托盘和箱信息
data.*[].internalTrailerNoString内拖车号
data.*[].terminalTypeString拖车类型:DRIVER(有人拖车)、DRIVERLESS(无人拖车)
data.*[].palletInfoObject关联托盘信息,字段结构同 CPallet 实体类
data.*[].bindContainerInfoListArray已关联箱信息列表,字段结构同 CYardCntr 实体类
data.*[].requesterString当前叫车或预约该拖车的正面吊名称;无则为空

获取只拉取托盘没有拉集装箱的拖车列表

  • 接口路径:/reachStacker/getPalletOnlyTrailerList
  • Method:GET
  • 请求参数:无
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    {
      "internalTrailerNo": "IT-001",
      "terminalType": "DRIVER",
      "palletInfo": {
        "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
      },
      "bindContainerInfoList": [],
      "requester": "RS-01",
      "voyageId": "V2026050801"
    },
    {
      "internalTrailerNo": "IT-004",
      "terminalType": "DRIVERLESS",
      "palletInfo": {
        "id": "PALLET-003",
        "name": "40GP标准托盘",
        "length": 12.2,
        "width": 2.8,
        "height": 1.6,
        "updatedOn": "2026-05-08T10:45:00+08:00",
        "createdOn": "2026-05-08T10:00:00+08:00",
        "createdBy": "admin",
        "updatedBy": "admin",
        "quantity": 2,
        "remark": "无人拖车专用",
        "weight": 3.0,
        "palletSize": 40
      },
      "bindContainerInfoList": [],
      "requester": "RS-03",
      "voyageId": "V2026050801"
    }
  ]
}
  • 响应字段说明:
字段类型含义
data[].internalTrailerNoString内拖车号
data[].terminalTypeString拖车类型:DRIVER(有人拖车)、DRIVERLESS(无人拖车)
data[].palletInfoObject关联托盘信息,字段结构同 CPallet 实体类
data[].bindContainerInfoListArray已关联箱信息列表,此接口固定为空数组
data[].requesterString当前叫车或预约该拖车的正面吊名称;无则为空
data[].voyageIdString当前作业航次

获取已拉取托盘但未放箱的拖车列表

  • 接口路径:/reachStacker/getEmptyTrailerList
  • Method:GET
  • 请求参数:无
  • 接口说明:返回 workStatus=WAITING_FOR_CONTAINER 的拖车会话信息,数据直接来自 Redis 会话存储。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    {
      "sessionId": "session-uuid-abc",
      "terminalName": "IT-001",
      "terminalType": "DRIVER",
      "workStatus": "WAITING_FOR_CONTAINER",
      "connectTime": "2026-05-08T10:00:00"
    },
    {
      "sessionId": "session-uuid-def",
      "terminalName": "IT-004",
      "terminalType": "DRIVERLESS",
      "workStatus": "WAITING_FOR_CONTAINER",
      "connectTime": "2026-05-08T10:45:00"
    }
  ]
}
  • 响应字段说明:
字段类型含义
data[].sessionIdStringWebSocket 会话 ID
data[].terminalNameString内拖车号(终端名称)
data[].terminalTypeString拖车类型:DRIVER(有人拖车)、DRIVERLESS(无人拖车)
data[].workStatusString作业状态,固定为 WAITING_FOR_CONTAINER
data[].connectTimeDateTime/String建连时间

取消将集装箱放置到内拖车的操作

  • 接口路径:/reachStacker/cancelContainerPlacement
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString盘型池记录 ID
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示取消成功
  • 备注:
    • 接口通过 palletTypeId 获取绑定的拖车号,然后取消相关的车道箱作业记录。
    • 若存在任一作业记录已完成(workStatus=DONE),则不允许取消,接口会直接报错:箱已完成作业,无法解除绑定
    • 取消成功后会将对应 CLaneCntr 记录置为:workStatus=CANCELEDstatus=DISABLED,并清空托盘池中该拖车的 bindContainerInfoList,同时更新拖车在线会话 workStatus
    • 内拖车在线时:通过 WebSocket 推送提示:取消放箱,请回等待区等待;离线时消息进入延迟队列补发。

完成将集装箱放置到内拖车的操作

  • 接口路径:/reachStacker/completeContainerPlacement
  • Method:POST
  • 请求参数:
参数名位置类型必填含义
palletTypeIdbodyString盘型池记录 ID
containerNoListbodyArray<String>箱号列表(已按前后顺序排列,最多2个,最少1个)
  • 请求示例:
json
{
  "palletTypeId": "2f50d4c1-8792-4b71-a1a3-7344327b6b7e",
  "containerNoList": ["MSCU1234567", "MSCU7654321"]
}
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": [
    "f3e1b8f2-53b1-4b1f-a43f-72e2f7e7f6df"
  ]
}
  • 响应字段说明:
字段类型含义
dataArray<String>生成的车道箱作业记录 ID 列表
data[]String单个 CLaneCntr 作业记录主键
  • 备注:
    • 前置条件:托盘池记录必须存在,且已绑定内拖车,否则接口会直接报错:托盘池记录不存在,请刷新后重试当前托盘未绑定拖车,无法执行放箱
    • 接口会根据 palletTypeId 查找绑定的托盘池信息,获取关联的内拖车号。
    • 接口会写托盘池字段:bindContainerInfoList(本次放箱的箱信息列表)、bindReachStackerNo(当前操作人/正面吊标识),并更新拖车在线会话 workStatus
    • manual_loading_flag=Y(开启手动配载):不会生成 CLaneCntr 作业记录,而是向中控终端(terminalType=CONTROL)推送“请手动配载”的 WebSocket 消息,此时接口返回的 data 通常为空数组。
    • manual_loading_flag!=Y:会生成 CLaneCntr 作业记录并返回 cLaneCntrIdList;内拖车在线时通过 WebSocket 下发 cLaneCntrIdList,离线则消息进入延迟队列补发。

向叉车预约托盘

  • 接口路径:/reachStacker/requirePalletType
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
terminalNamequeryString发起预约的终端名称,通常为正面吊名称
palletTypequeryString预约的盘型名称
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示预约通知已发出

修改箱信息

  • 接口路径:/reachStacker/updateContainerInfo
  • Method:POST
  • 请求参数:
参数名位置类型必填含义
cYardCntrbodyCYardCntr堆场箱实体对象
  • 请求示例:
json
{
  "id": "YARD-001",
  "cntrIso": "MSCU1234567",
  "workStatus": "NONE",
  "voyageId": "V2026050801",
  "cntrType": "GP",
  "cntrSize": 20,
  "manifestWeight": 22000,
  "bridgeWeight": 22350
}
  • 接口说明:此接口仅更新 C_YARD_CNTR 表的数据,不涉及其他操作。传入的 CYardCntr 实体必须包含 id 字段用于标识要更新的记录。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示修改成功

添加箱信息

  • 接口路径:/reachStacker/addContainerInfo
  • Method:POST
  • 请求参数:
参数名位置类型必填含义
cYardCntrbodyCYardCntr堆场箱实体对象
  • 请求示例:
json
{
  "cntrIso": "MSCU1234567",
  "cntrType": "GP",
  "cntrSize": 20,
  "manifestWeight": 22000,
  "bridgeWeight": 22350
}
  • 接口说明:此接口用于新增堆场箱记录,仅操作 C_YARD_CNTR 表。系统会自动生成 id(UUID格式)、设置 workStatus=NONE、绑定当前作业航次,并设置 updatedOn 时间。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示添加成功

内拖车

获取内拖车作业状态

  • 接口路径:/internalTrailer/getWorkStatus
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
terminalNamequeryString内拖车名称/车号
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": "WAITING_FOR_CONTAINER"
}
  • 响应字段说明:
字段类型含义
dataString当前内拖车作业状态,常见值:WAITING_FOR_PALLET 等待拉托盘、WAITING_FOR_CONTAINER 等待正面吊放箱、WAITING_FOR_SHIPMENT 等待装船、PENDING 作业中、DONE 已完成

更新内拖车作业状态

  • 接口路径:/internalTrailer/updateWorkStatus
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
terminalNamequeryString内拖车名称/车号
workStatusqueryString新的作业状态,取值见上一接口说明
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示状态更新成功

结束作业

  • 接口路径:/internalTrailer/endAssignment
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString托盘池ID
headOrientationqueryString车头朝向枚举(可选值:BOW-船头、STERN-船尾)
  • 备注:
    • 前置条件:托盘必须存在于托盘池中,否则接口会直接报错:托盘不存在,无法结束作业
    • 接口会根据 palletTypeId 查询托盘池信息,批量更新作业相关记录为完成状态,并将托盘池记录 workStatus 更新为 DONE
    • 如果托盘已绑定内拖车,内拖车在线会话 workStatus 会被更新为 WAITING_FOR_PALLET
    • 通知所有终端刷新船图数据和托盘列表。
  • 响应示例:
json
{
  "code": 0,
  "message": "请求成功",
  "data": null
}
  • 响应字段说明:
字段类型含义
datanull无业务返回值,表示结束作业成功

查询内拖车当前目的地

  • 接口路径:/internalTrailer/getDestination
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
terminalNamequeryString内拖车名称/车号
  • 接口说明:根据内拖车的作业状态,结合Redis缓存和数据库数据,判断内拖车当前需要去往的目的地。响应中包含当前作业航次信息,便于终端展示完整的作业上下文。新增语音提示字段 voicePrompt,用于终端语音播报。

  • 响应示例(等待拉托盘):

json
{
  "code": 0,
  "message": "请求成功",
  "data": {
    "workStatus": "WAITING_FOR_PALLET",
    "description": "等待拉托盘",
    "voicePrompt": "等待拉托盘",
    "terminalName": "IT-001",
    "voyageInfo": {
      "id": "V2026050801",
      "vesselCode": "NGP",
      "vesselName": "新金桥7",
      "line": "威海-韩国",
      "serviceName": "中韩航线",
      "bVyg": "2026001E",
      "lbVyg": "2026001I",
      "eta": "2026-05-08 08:00:00",
      "etd": "2026-05-08 18:00:00",
      "ata": "2026-05-08 08:15:00",
      "goal": "韩国仁川",
      "ieType": "E",
      "phase": "YDG",
      "workRoRo": "1",
      "startWork": "2026-05-08 09:10:00",
      "etStartWork": "2026-05-08 09:00:00",
      "etEndWork": "2026-05-08 17:00:00"
    }
  }
}
  • 响应示例(等待正面吊放箱,被正面吊呼叫):
json
{
  "code": 0,
  "message": "请求成功",
  "data": {
    "workStatus": "WAITING_FOR_CONTAINER",
    "description": "请前往RS-01号正面吊前作业",
    "voicePrompt": "请前往RS-01号正面吊前作业",
    "terminalName": "IT-001",
    "reachStackerName": "RS-01",
    "palletInfo": {
      "palletTypeId": "PALLET-001",
      "palletType": "20GP标准托盘",
      "palletWorkType": "SUITCASE",
      "workStatus": "PENDING",
      "voyageId": "V2026050801",
      "bindInternalTrailerFlag": "Y",
      "bindInternalTrailerNo": "IT-001",
      "bindForkliftNo": "FORKLIFT-001",
      "bindReachStackerNo": "RS-01",
      "bindContainerInfoFlag": "N",
      "bindContainerInfoList": [],
      "pinnedFlag": "N",
      "pinnedTime": null,
      "recordTime": "2026-05-08T10:30:00+08:00",
      "sequence": 1
    },
    "voyageInfo": {
      "id": "V2026050801",
      "vesselCode": "NGP",
      "vesselName": "新金桥7",
      "line": "威海-韩国",
      "serviceName": "中韩航线",
      "bVyg": "2026001E",
      "lbVyg": "2026001I",
      "eta": "2026-05-08 08:00:00",
      "etd": "2026-05-08 18:00:00",
      "ata": "2026-05-08 08:15:00",
      "goal": "韩国仁川",
      "ieType": "E",
      "phase": "YDG",
      "workRoRo": "1",
      "startWork": "2026-05-08 09:10:00",
      "etStartWork": "2026-05-08 09:00:00",
      "etEndWork": "2026-05-08 17:00:00"
    }
  }
}
  • 响应示例(前往船舱装船):
json
{
  "code": 0,
  "message": "请求成功",
  "data": {
    "workStatus": "WAITING_FOR_SHIPMENT",
    "description": "/MSCU1234567 20GP /MSCU1234568 20GP 1甲一号车道",
    "terminalName": "IT-001",
    "deck": "1甲",
    "voyageInfo": {
      "id": "V2026050801",
      "vesselCode": "NGP",
      "vesselName": "新金桥7",
      "line": "威海-韩国",
      "serviceName": "中韩航线",
      "bVyg": "2026001E",
      "lbVyg": "2026001I",
      "eta": "2026-05-08 08:00:00",
      "etd": "2026-05-08 18:00:00",
      "ata": "2026-05-08 08:15:00",
      "goal": "韩国仁川",
      "ieType": "E",
      "phase": "YDG",
      "workRoRo": "1",
      "startWork": "2026-05-08 09:10:00",
      "etStartWork": "2026-05-08 09:00:00",
      "etEndWork": "2026-05-08 17:00:00"
    }
  }
}
  • 响应示例(内拖车离线或状态未知):
json
{
  "code": 0,
  "message": "请求成功",
  "data": {
    "workStatus": "UNKNOWN",
    "description": "内拖车离线或状态未知",
    "terminalName": "IT-001"
  }
}
  • 响应字段说明:
字段类型含义
data.workStatusString作业状态,常见值:WAITING_FOR_PALLET 等待拉托盘、WAITING_FOR_CONTAINER 等待正面吊放箱、WAITING_FOR_SHIPMENT 装船作业中、LOADING_ASSIGNED 配载完成待上船、DONE 已完成、NONE 空闲、UNKNOWN 离线或状态未知
data.descriptionString目的地描述,包含具体的作业指引信息;装船作业时格式为 /箱号1 尺寸类型/箱号2 尺寸类型 甲板号甲车道描述
data.voicePromptString语音提示内容,用于终端语音播报,不同状态对应不同提示语
data.terminalNameString内拖车名称/车号
data.voyageInfoObject当前作业航次信息,结构同 agCommon.selectVesselVisitByIdCamel 查询结果,包含完整的船舶航次数据
data.voyageInfo.idString航次记录ID
data.voyageInfo.vesselCodeString船舶代码
data.voyageInfo.vesselNameString船舶名称
data.voyageInfo.lineString航线
data.voyageInfo.serviceNameString服务名称
data.voyageInfo.bVygString出口航次号
data.voyageInfo.lbVygString进口航次号
data.voyageInfo.etaString预计到港时间
data.voyageInfo.etdString预计离港时间
data.voyageInfo.ataString实际到港时间
data.voyageInfo.atdString实际离港时间
data.voyageInfo.goalString目标港
data.voyageInfo.ieTypeString进出标志(E:出口 I:进口)
data.voyageInfo.phaseString作业阶段
data.voyageInfo.workRoRoString作业状态(0:未开工 1:开工中 2:已完工)
data.voyageInfo.startWorkString实际开工时间
data.voyageInfo.endWorkString实际完工时间
data.voyageInfo.etStartWorkString计划开工时间
data.voyageInfo.etEndWorkString计划完工时间
data.reachStackerNameString正面吊名称,仅当被正面吊呼叫时返回(workStatus=WAITING_FOR_CONTAINER 且存在呼叫记录)
data.palletInfoObject托盘池信息,当内拖车绑定托盘时返回,包含完整的托盘池数据
data.palletInfo.palletTypeIdString托盘池记录唯一标识
data.palletInfo.palletTypeString托盘类型名称(如:20GP标准托盘、40HC标准托盘)
data.palletInfo.palletWorkTypeString托盘作业类型,SHIPMENT 表示直接装船,SUITCASE 表示等待拉箱
data.palletInfo.workStatusString托盘池作业状态,常见值:NONE 待作业、PENDING 作业中、DONE 已完成
data.palletInfo.voyageIdString绑定的航次ID
data.palletInfo.bindInternalTrailerFlagString是否已绑定内拖车,Y 表示已绑定,N 表示未绑定
data.palletInfo.bindInternalTrailerNoString绑定的内拖车号,未绑定时为空
data.palletInfo.bindForkliftNoString签收该托盘的叉车终端号/编号,未签收时为空
data.palletInfo.bindReachStackerNoString绑定的正面吊名称/账号,未绑定时为空
data.palletInfo.bindContainerInfoFlagString是否已绑定箱信息,Y 表示已绑定,N 表示未绑定
data.palletInfo.bindContainerInfoListArray已绑定的箱信息列表,未绑定时为空数组
data.palletInfo.bindContainerInfoList[].cntrIsoString集装箱ISO编号
data.palletInfo.bindContainerInfoList[].cntrTypeString箱型(如:GP、HC、RF等)
data.palletInfo.bindContainerInfoList[].cntrSizeInteger箱尺寸(如:20、40、45)
data.palletInfo.bindContainerInfoList[].manifestWeightInteger申报重量
data.palletInfo.pinnedFlagString是否置顶,Y 表示已置顶,N 表示未置顶
data.palletInfo.pinnedTimeDate/String置顶时间,未置顶时为 null
data.palletInfo.recordTimeDate/String盘型加入盘型池的时间
data.palletInfo.sequenceInteger盘型序号,同一托盘池中从1开始递增
data.deckInteger目标甲板层级,仅当装船作业时返回,数值类型(如 1、3、5)

手动终止任务(已作废)

  • 接口已作废:请使用 /internalTrailer/endAssignment 接口替代。
  • 接口路径:/centralControl/manualEndAssignment
  • Method:GET
  • 请求参数:
参数名位置类型必填含义
palletTypeIdqueryString托盘池ID
  • 备注:
    • 该接口已作废,内部会调用 endAssignment 方法实现拖车、中控结束配载的逻辑。
    • 建议前端直接调用 /internalTrailer/endAssignment 接口。

STOMP 消息通信

连接配置

  • 连接端点: ws://{host}:{port}/stomp
  • 协议: STOMP over WebSocket,使用 SockJS 降级
  • 心跳: 客户端发送心跳间隔 10 秒,服务端发送心跳间隔 8 秒
  • 连接参数: 连接时需在 header 中携带 terminalType(终端类型)和 terminalName(终端名称)

终端类型说明

类型说明
中控CONTROL中控终端
叉车FORKLIFT叉车终端
正面吊REACH_STACKER正面吊终端
有人拖车DRIVER有人内拖车
无人拖车DRIVERLESS无人拖车

连接示例代码

javascript
import SockJS from 'sockjs-client';
import Stomp from 'stompjs';

// 连接 STOMP
const socket = new SockJS('/stomp');
const stompClient = Stomp.over(socket);

// 配置心跳(可选,默认已配置)
stompClient.heartbeat.incoming = 10000;
stompClient.heartbeat.outgoing = 10000;

// 连接时携带身份信息(仅需 terminalType 和 terminalName)
const headers = {
    terminalType: 'DRIVER',
    terminalName: 'IT-001'
};

stompClient.connect(headers, function(frame) {
    console.log('Connected: ' + frame);
    // 订阅消息...
}, function(error) {
    console.error('Connection error:', error);
});

订阅地址列表及示例

订阅地址说明适用终端订阅示例
/topic/all广播消息,所有终端都能收到所有终端见下方示例1
/topic/terminal.CONTROL中控终端消息中控见下方示例2
/topic/terminal.FORKLIFT叉车终端消息叉车见下方示例3
/topic/terminal.REACH_STACKER正面吊终端消息正面吊见下方示例4
/topic/terminal.DRIVER内拖车终端消息有人拖车见下方示例5
/topic/terminal.DRIVERLESS无人拖车终端消息无人拖车见下方示例6
/topic/terminal.name.{terminalName}指定终端名称的消息所有终端见下方示例7
/topic/user.{username}指定用户的消息所有终端见下方示例8
/topic/pong心跳响应消息所有终端见下方示例9

订阅示例1:广播消息

订阅地址: /topic/all

订阅代码:

javascript
stompClient.subscribe('/topic/all', function(message) {
    const data = JSON.parse(message.body);
    console.log('Broadcast message:', data);
});

订阅示例2:中控终端消息

订阅地址: /topic/terminal.CONTROL

订阅代码:

javascript
stompClient.subscribe('/topic/terminal.CONTROL', function(message) {
    const data = JSON.parse(message.body);
    console.log('Control terminal message:', data);
});

订阅示例3:叉车终端消息

订阅地址: /topic/terminal.FORKLIFT

订阅代码:

javascript
stompClient.subscribe('/topic/terminal.FORKLIFT', function(message) {
    const data = JSON.parse(message.body);
    console.log('Forklift message:', data);
});

订阅示例4:正面吊终端消息

订阅地址: /topic/terminal.REACH_STACKER

订阅代码:

javascript
stompClient.subscribe('/topic/terminal.REACH_STACKER', function(message) {
    const data = JSON.parse(message.body);
    console.log('Reach stacker message:', data);
});

订阅示例5:内拖车终端消息

订阅地址: /topic/terminal.DRIVER

订阅代码:

javascript
stompClient.subscribe('/topic/terminal.DRIVER', function(message) {
    const data = JSON.parse(message.body);
    console.log('Trailer message:', data);
});

订阅示例6:无人拖车终端消息

订阅地址: /topic/terminal.DRIVERLESS

订阅代码:

javascript
stompClient.subscribe('/topic/terminal.DRIVERLESS', function(message) {
    const data = JSON.parse(message.body);
    console.log('Driverless trailer message:', data);
});

订阅示例7:指定终端名称的消息

订阅地址: /topic/terminal.name.{terminalName}

订阅代码(以 IT-001 为例):

javascript
const terminalName = 'IT-001';
stompClient.subscribe('/topic/terminal.name.' + terminalName, function(message) {
    const data = JSON.parse(message.body);
    console.log('Terminal ' + terminalName + ' message:', data);
});

订阅示例8:指定用户的消息

订阅地址: /topic/user.{username}

订阅代码(以 IT-001 为例):

javascript
const username = 'IT-001';
stompClient.subscribe('/topic/user.' + username, function(message) {
    const data = JSON.parse(message.body);
    console.log('User ' + username + ' message:', data);
});

订阅示例9:心跳响应消息

订阅地址: /topic/pong

订阅代码:

javascript
stompClient.subscribe('/topic/pong', function(message) {
    const data = JSON.parse(message.body);
    console.log('Pong received:', data);
});

消息格式

所有消息均为 JSON 格式,包含以下通用字段:

字段类型含义
eventTypeString事件类型(大写英文,下划线分隔),如 PALLET_POOL_ADDTRAILER_REQUIRE
descriptionString事件描述
dataObject事件数据,包含该事件需要的具体业务信息
timestampLong消息时间戳(毫秒)

消息类型说明

1. 刷新船图数据消息(SHIP_MAP_REFRESH)

订阅地址: /topic/all

触发场景: 中控手动配载成功或车辆作业完毕,刷新所有叉车和中控端的船图数据

消息示例:

json
{
  "eventType": "SHIP_MAP_REFRESH",
  "description": "刷新船图数据",
  "data": {
    "voyageId": "V2026050801",
    "triggerType": "LOADING_COMPLETE"
  },
  "timestamp": 1715115000000
}

data 字段说明:

字段类型含义
voyageIdString当前作业航次ID
triggerTypeString触发类型:LOADING_COMPLETE/WORK_DONE

2. 刷新可用拖车列表消息(TRAILER_LIST_REFRESH)

订阅地址: /topic/terminal.REACH_STACKER

触发场景: 叉车绑定内拖车和托盘后,通知正面吊刷新可用拖车列表

消息示例:

json
{
  "eventType": "TRAILER_LIST_REFRESH",
  "description": "刷新可用拖车列表",
  "data": {
    "internalTrailerNo": "IT-001",
    "terminalType": "DRIVER",
    "palletTypeId": "2f50d4c1-8792-4b71-a1a3-7344327b6b7e",
    "palletType": "20GP标准托盘"
  },
  "timestamp": 1715115000000
}

data 字段说明:

字段类型含义
internalTrailerNoString内拖车号
terminalTypeString拖车类型:DRIVER/DRIVERLESS
palletTypeIdString绑定的托盘池记录 ID
palletTypeString绑定的托盘类型名称

3. 刷新箱列表消息(CONTAINER_LIST_REFRESH)

订阅地址: /topic/all(广播)、/topic/terminal.CONTROL(中控)

触发场景:

  • 正面吊新增箱信息
  • 正面吊修改箱信息
  • 预配舱单同步处理成功

消息示例:

json
{
  "eventType": "CONTAINER_LIST_REFRESH",
  "description": "刷新箱列表",
  "data": {
    "containerNo": "MSCU1234567"
  },
  "timestamp": 1715115000000
}

data 字段说明:

字段类型含义
containerNoString新增或修改的箱号(可选,预配舱单同步时可能为空)

4. 刷新托盘池列表消息(PALLET_LIST_REFRESH)

订阅地址: /topic/all(广播)

触发场景:

  • 叉车绑定/解绑内拖车和托盘
  • 取消放箱操作

消息示例:

json
{
  "eventType": "PALLET_LIST_REFRESH",
  "description": "刷新托盘池列表",
  "data": {},
  "timestamp": 1715115000000
}

data 字段说明: 无额外数据字段

5. 待配载列表刷新消息(PENDING_LOADING_LIST_REFRESH)

订阅地址: /topic/all(广播)

触发场景: 正面吊完成放箱(绑定箱和托盘)后,通知所有终端刷新待配载列表

消息示例:

json
{
  "eventType": "PENDING_LOADING_LIST_REFRESH",
  "description": "刷新待配载列表",
  "data": {},
  "timestamp": 1715115000000
}

data 字段说明: 无额外数据字段

6. 场内托盘列表刷新消息(YARD_PALLET_REFRESH)

订阅地址: /topic/all(广播)

触发场景: 正面吊完成放箱或取消放箱操作后,通知所有终端刷新场内托盘列表

消息示例:

json
{
  "eventType": "YARD_PALLET_REFRESH",
  "description": "刷新场内托盘列表",
  "data": {},
  "timestamp": 1715115000000
}

data 字段说明: 无额外数据字段

7. 内拖车消息通知(TRAILER_MESSAGE_NOTIFY)

订阅地址: /topic/terminal.name.{terminalName}

触发场景: 向内拖车终端发送通用消息通知

消息示例:

json
{
  "eventType": "TRAILER_MESSAGE_NOTIFY",
  "description": "内拖车消息通知",
  "data": {},
  "timestamp": 1715115000000
}

data 字段说明: 无额外数据字段,消息内容通过 description 字段传递

7. 叉车消息通知(FORKLIFT_MESSAGE_NOTIFY)

订阅地址: /topic/terminal.FORKLIFT

触发场景: 向叉车终端发送通用消息通知

消息示例:

json
{
  "eventType": "FORKLIFT_MESSAGE_NOTIFY",
  "description": "叉车消息通知",
  "data": {},
  "timestamp": 1715115000000
}

data 字段说明: 无额外数据字段,消息内容通过 description 字段传递


前端发送消息示例

发送心跳

javascript
// 发送 PING 心跳
stompClient.send('/app/ping', {
    terminalType: 'DRIVER',
    terminalName: 'IT-001'
}, JSON.stringify({ type: 'PING' }));

发送其他消息

javascript
// 向服务端发送消息(需以 /app 开头)
stompClient.send('/app/message', {}, JSON.stringify({
    terminalType: 'DRIVER',
    action: 'STATUS_UPDATE',
    workStatus: 'PENDING'
}));

心跳检测机制

前端需要定期发送心跳消息给服务端,服务端返回 PONG 响应,并更新终端的活跃时间到 Redis。

发送心跳(前端 → 服务端)

javascript
// 发送 PING 心跳
stompClient.send('/app/ping', {
    terminalType: 'DRIVER',
    terminalName: 'IT-001'
}, JSON.stringify({ type: 'PING' }));

接收响应(服务端 → 前端)

订阅地址:/topic/pong

响应格式:

json
{
  "type": "PONG",
  "timestamp": "2026-05-19T10:30:00",
  "sessionId": "session-uuid-123",
  "terminalType": "DRIVER",
  "terminalName": "IT-001"
}

会话管理说明

系统会将会话信息维护到 Redis 中,不依赖内存中的会话维持在线状态:

Redis Key 前缀说明
terminal:session:{sessionId}终端会话详情(JSON 格式)
terminal:type:{terminalType}按终端类型分组的会话 ID 集合
terminal:name:{terminalName}终端名称到会话 ID 的映射
terminal:DRIVER:{terminalName}拖车终端专用映射
terminal:DRIVER_type:{terminalName}拖车类型标识(DRIVER/DRIVERLESS)
terminal:all所有在线终端会话 ID 集合

会话数据结构

json
{
  "sessionId": "session-uuid-123",
  "username": "IT-001",
  "terminalType": "DRIVER",
  "terminalName": "IT-001",
  "workStatus": "WAITING_FOR_PALLET",
  "connectTime": "2026-05-19T10:00:00",
  "lastActiveTime": "2026-05-19T10:30:00"
}

终端类型说明

类型说明
中控CONTROL中控终端
叉车FORKLIFT叉车终端
正面吊REACH_STACKER正面吊终端
有人拖车DRIVER有人内拖车
无人拖车DRIVERLESS无人拖车

无人拖车队列消息

队列配置

无人拖车系统会将状态信息推送到 RabbitMQ 队列中,系统监听该队列并同步会话状态到 Redis。

配置项
Exchangeunmanned_trailer_exchange
Queueunmanned_trailer_status_queue
Routing Keyunmanned.trailer.status.key

消息格式

无人拖车系统推送的消息为 JSON 格式:

字段类型必填含义
terminalNameString无人拖车名称/车号
usernameString无人拖车系统用户名
workStatusString当前作业状态

消息示例:

json
{
  "terminalName": "UT-001",
  "username": "unmanned_system",
  "workStatus": "WAITING_FOR_PALLET"
}

状态值说明

状态值含义
WAITING_FOR_PALLET等待拉托盘
WAITING_FOR_CONTAINER等待正面吊放箱
WAITING_FOR_SHIPMENT等待装船
PENDING作业中
DONE已完成

无人拖车会话标识

无人拖车的会话 ID 以 unmanned: 前缀开头,用于与有人拖车区分。

  • 有人拖车会话 ID 示例:session-uuid-123
  • 无人拖车会话 ID 示例:unmanned:UT-001

消息发送(后端 → 前端)

无人拖车的消息同样通过 STOMP 协议发送到前端,订阅地址与有人拖车一致:

订阅地址说明
/topic/terminal/DRIVER所有内拖车(包含有人和无人)
/topic/terminal/name/{terminalName}指定终端名称的消息

MIT版权,未经许可禁止任何形式的转载