diff --git a/doc/【0202002】物流调度系统(RCS)V4.1对外任务接口文档_20240726.pdf b/doc/【0202002】物流调度系统(RCS)V4.1对外任务接口文档_20240726.pdf deleted file mode 100644 index 8492df7..0000000 --- a/doc/【0202002】物流调度系统(RCS)V4.1对外任务接口文档_20240726.pdf +++ /dev/null @@ -1,4607 +0,0 @@ - 文档类别 - -杭州海康机器人股份有限公司 - - 文档编号 - - 厂内物流机器人控制系统 - RCS-2000 V4.1 接口文档 - - 杭 州 海 康 机 器 人 股 份 有 限 公 司 版权所有 - RCS-2000 V4.1 接口协议 对外发布 - -版权声明 - -本文档由海康机器人公司开发,其版权受中华人民共和国版权法保护。海康 - -机器人拥有本文的全部版权,未经本公司许可,任何单位及个人不得对本文中的 - -任何部分进行转印、影印或复印。 - -信息反馈 - - 海康机器人尽最大的努力保证本手册的准确性和完整性。如果您在使用中发 -现问题,希望及时将情况反馈给我们以完善产品,我们将非常感谢您的支持。 - -总公司联系方式 -公司总机:0571-88967998 -技术支持电话:0571-86611880(工作日9:30-17:30) -传真:0571-88805843 -地址:中国杭州市滨江区东流路700号 -邮编:310052 -公司E-mail:hikrobot@hikrobotics.com -公司网站:www.hikrobotics.com - RCS-2000 V4.1 接口协议 对外发布 - -目录 - -1 协议概述 .......................................................................................................................................4 - - 1.1 请求首部字段....................................................................................................................4 - 1.2 请求报文消息体................................................................................................................4 - 1.3 加密签名............................................................................................................................5 - 1.4 响应首部字段....................................................................................................................6 - 1.5 响应报文消息体................................................................................................................7 - 1.6 响应状态码........................................................................................................................8 - 1.7 响应报文消息体通用 code...............................................................................................8 - -2 业务接口说明 ...............................................................................................................................9 - - 2.1 机器人调度 API 接口说明 ................................................................................................9 - 2.1.1 任务组接口...........................................................................................................9 - 2.1.2 任务下发接口.....................................................................................................12 - 2.1.3 任务继续执行接口.............................................................................................18 - 2.1.4 任务取消接口.....................................................................................................22 - 2.1.5 任务优先级设置接口.........................................................................................26 - 2.1.6 区域暂停与恢复机器人接口.............................................................................28 - 2.1.7 区域归巢机器人接口.........................................................................................30 - 2.1.8 区域驱离机器人接口.........................................................................................32 - 2.1.9 区域封锁与恢复接口.........................................................................................34 - 2.1.10 载具与站点绑定接口.......................................................................................36 - 2.1.11 载具与站点解绑定接口...................................................................................38 - 2.1.12 存储对象与搬运对象绑定解绑接口...............................................................40 - 2.1.13 载具禁用与启用...............................................................................................42 - 2.1.14 站点禁用与启用...............................................................................................44 - 2.1.15 外设执行通知接口 WCS....................................................................................46 - 2.1.16 预调度任务下发接口.......................................................................................49 - 2.1.17 通用接口...........................................................................................................51 - 2.1.18 查询任务状态接口...........................................................................................53 - 2.1.19 查询机器人状态接口.......................................................................................58 - 2.1.20 查询载具状态接口...........................................................................................61 - - 2.2 反馈接收 SPI 接口说明..................................................................................................63 - 2.2.1 任务执行过程回馈接口.....................................................................................63 - 2.2.2 交管区域申请和释放接口.................................................................................66 - 2.2.3 请求资源接口-WMS.............................................................................................68 - 2.2.4 请求外设接口-WCS.............................................................................................71 - 2.2.5 机器人归巢完成回馈接口.................................................................................74 - 2.2.6 区域驱离机器人完成回馈接口.........................................................................76 - 2.2.7 机器人异常告警上报接口.................................................................................79 - 2.2.8 任务异常告警上报接口.....................................................................................81 - -3.任务下发接口调用示例 .............................................................................................................83 - RCS-2000 V4.1 接口协议 对外发布 - -3.1 潜伏车通用流程...............................................................................................................83 -3.2 潜伏车指定载具初始化流程...........................................................................................84 -3.3 探测载具搬运流程...........................................................................................................85 -3.4CTU 通用流程....................................................................................................................86 -3.5CTU 工作站入库流程........................................................................................................87 -3.6CTU 分拨墙出库流程........................................................................................................88 -3.7CTU 分拨墙入库流程........................................................................................................89 -3.8CTU 输送线探测入库流程................................................................................................90 -3.9CTU 输送线入库流程........................................................................................................91 -3.10 叉车通用流程.................................................................................................................92 -3.11 滚筒车通用流程.............................................................................................................93 - -4.更新说明 .....................................................................................................................................93 - -1 协议概述 - -海康调度系统调用上层系统的接口,获取连接超时时间默认为 30 秒,数据返回超时时间默 -认为 60 秒,超时情况下,调度系统会返回连接失败。 - -1.1 请求首部字段 - -默认请求首部字段如下: - -字段名 数据类型 最大字节数 是否必需 说明 - - 固 定 格 式 : - -Authorization 字符串 N/A 是 nonce="wab1tkh",method="HMAC- - - SHA256",timestamp="2021-01-01T0 - - 0:00:00+08:00" - -Content-Type 字符串 N/A 固定取值: - 否 - - application/json;charset=UTF-8 - -X-lr-appkey 字符串 32 是 由调度系统颁发给业务系统的唯一标识 - -X-lr-request-id 字符串 16 是 业务请求的唯一标识。 - -X-lr-version 字符串 12 是 API 接口版本,为了保证接口的向下兼容, - - 同样的 API 接口可能存在多个版本实现。 - -X-lr-trace-id 字符串 32 全链路追踪标识,用于协查上下游故障,需 - 否 - - 要在响应中原样返回。建议使用 UUID。 - -X-lr-source 字符串 32 否 指令的来源。便于调试和故障定位。 - -1.2 请求报文消息体 - -只能使用JSON格式(UTF-8编码方式)或空字符串(无字符)。不能使用JSON对象数组或其 -他格式。业务请求的参数信息应当放在请求报文消息体当中。 - RCS-2000 V4.1 接口协议 对外发布 - -请求报文样例: - - POST /api/robot/controller/tasks HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - Content-Length: 512 - Date: Fri, 26 Mar 2021 06:46:14 GMT - -{"warehouseId":"371****b108",……,"zoneCode":"c7a6****371b"} - -1.3 加密签名 - -应用注册中的第三方应用,如开启加密,请求时需带上签名。下文中的appSecret为应 - -用注册中的私钥。请求完整示例如上所示,其中只有请求行、特定的首部字段、空行、报文 - -消息体参与签名,即需要从请求报文原文中去除不参与签名的首部字段,将参与签名的首部 - -字段名按下表编号的顺序排序,同时首部字段名改为大写。 - -参与签名的首部字段为: - -编号 参与签名的首部字段 是否必填 - -1 AUTHOTIZATION 是 - -2 HOST 是 - -3 X-LR-APPKEY 是 - -4 X-LR-REQUEST-ID 是 - -5 X-LR-SOURCE 否 - -6 X-LR-TRACE-ID 否 - -7 X-LR-VERSION 是 - -上例中的请求经过处理,参与签名的原串为: - -POST /api/robot/controller/tasks HTTP/1.1 -AUTHORIZATION: -nonce="wab1tkh",method="HMAC-SHA256",timestamp="2021-01-01T00:0 -0:00+08:00" -HOST: 10.10.10.10:1010 -X-LR-APPKEY: 75ddbd3e78e64a91a3e68dc7b79ec485 -X-LR-REQUEST-ID: d8cdc42a82a3470bb3af766c017703ba -X-LR-SOURCE: wms -X-LR-TRACE-ID: fb09af3e14cc42d48eba1457590da6ac -X-LR-VERSION: v1.0 - -{"warehouseId":" b1d5fc3663f448ea8be4067dd57a0134"} - 签名的生成方式应遵循如下定义: - RCS-2000 V4.1 接口协议 对外发布 - - 签名 = MD5(加盐哈希算法(appSecret,请求报文拼接后的原串)) - -其中,加盐哈希算法应使用: - - 1) HMAC-SHA256(推荐) - - 2) HMAC-SHA512 - -使用MD5对加盐哈希算法的散列值再次哈希,产生128(16字节)的散列值。 - -例如,当appSecret为”c000aada00554a47aeb988eb05af3153”时,上述请求报文生成的 - -加盐哈希算法散列值应 - -为”a3cfe11d74b01973087cb6d3ead49847a9d20a8f4721e40897b2a8b49c361f68”,经MD5处理 - -后最终签名为”56560ebdf1102a5b”。 - -请求的签名应当携带在查询参数的最后,参数名为”sign”,如下所示: - -POST /api/robot/controller/tasks?sign=56560ebdf1102a5b HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: -nonce="wab1tkh",method="HMAC-SHA256",timestamp="2021-01-01T00:0 -0:00+08:00" -X-lr-appkey: 75ddbd3e78e64a91a3e68dc7b79ec485 -X-lr-version: v1.0 -X-lr-trace-id: fb09af3e14cc42d48eba1457590da6ac -X-lr-request-id: d8cdc42a82a3470bb3af766c017703ba -X-lr-source: wms -Content-Type: application/json;charset=UTF-8 -Content-Length: 51 - -{"warehouseId":" b1d5fc3663f448ea8be4067dd57a0134"} - -首部字段Authorization中各参数的说明如下: - -参数名 数据类型 字节数 是否必须 说明 - -nonce 字符串 8 是 随机数。建议每次请求都不同,以便于更有效的抵御 - - 彩虹表的攻击;也可以定时更换。 - -method 字符串 N/A 是 加盐哈希算法。固定枚举值: - - HMAC-SHA256 - - HMAC-SHA512 - -timestamp 字符串 N/A 是 请求发出的时间。 - - 遵循本文档关于时间格式秒精度的定义。 - - 验证签名阶段,服务端应当首先取出查询参数中的签名信息,然后使用加签过程中相同 -的步骤,生成签名,并比较两者是否相同。 - - 重放攻击验证阶段,服务端应当利用首部字段Authorization中timestamp参数,加上业 -务允许的合法请求时间,得出请求合法超时时间,再比较请求合法超时时间是否已经超出服 -务器当前时间。建议服务端对合法请求时间的设置不要超过120秒。 - -1.4 响应首部字段 - -响应的安全信息和技术类信息,需要放在响应首部字段中,避免与业务类参数耦合。 - RCS-2000 V4.1 接口协议 对外发布 - -默认响应首部字段如下: - - 字段名 数据类型 最大字节数 是否必须 说明 - -Content-Type 字符串 N/A 固定取值: - 是 - - application/json;charset=UTF-8 - -X-lr-request-id 字符串 16 是 业务请求的唯一标识。 - -X-lr-version 字符串 12 是 API 接口版本,为了保证接口的向下兼容, - - 同样的 API 接口可能存在多个版本实现。 - -X-lr-trace-id 字符串 32 全链路追踪标识,用于协查上下游故障,需 - 是 - - 要在响应中原样返回。建议使用 UUID。 - -1.5 响应报文消息体 -当 HTTP 响应状态码为 200 时,响应报文消息体的 JSON 对象格式如下: - -中文名称 字段名 数据类型 最大字节数 是否必须 说明 - -消息码 code 字符串 32 是 参见 1.6 章节通用响应 code 定义和各接口 - - 的消息码定义 - -提示消息 message 字符串 256 否 异常描述。 - -业务数据 data JSON 对象 10MB 否 返回的业务属性对象 - -正常响应报文消息体的样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - X-lr-timestamp: 2021-01-01T00:00:00+08:00 - - {"code":"SUCCESS","message":"成功","data": {"robotTaskCode": - "abc**13"}} - -业务异常响应报文消息体的样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -X-lr-timestamp: 2021-01-01T00:00:00+08:00 - -{"code":"Err_Internal","message":"内部未知错误","data":null} - -请求异常响应报文消息体的样例: - -HTTP/1.1 403 Forbidden -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -X-lr-timestamp: 2021-01-01T00:00:00+08:00 - -1.6 响应状态码 - -状态码 说明 -200 HTTP协议层面的处理成功,但是仍可能出现业务异常,需要根据响应报文消息 - 体的消息码判断 -401 签名认证失败。原因可能是签名无效、签名过期、appKey和appSecret失效,需 - 要重新更新请求时间后加签,或需要调度系统重新颁发appKey和appSecret。 -403 权限不足。例如业务系统试图取消不由其创建的任务。 -406 请求的Content-Type不符合要求 -400 其他由于客户端请求错误导致的异常,无法通过重试解决,需要检查请求的格 - 式是否符合要求。 -500 服务端的异常,可以通过重试请求解决。具体重试次数与间隔需要根据业务实 - 际情况设定。 - -其余未列出状态码均按照标准HTTP协议处理即可 -1.7 响应报文消息体通用 code - -Code message -SUCCESS 成功 -Err_Internal 内部未知错误 -Err_DataValidationFailed 数据格式验证失败 -Err_RequestDuplicate 请求重复 -Err_InvalidVersion 请求版本不合法 - RCS-2000 V4.1 接口协议 对外发布 - -2 业务接口说明 - -2.1 机器人调度 API 接口说明 - -2.1.1 任务组接口 - -接口名称 任务组接口 -接口说明 1、任务组是任务的集合,当任务间有相互关系时,需要先调用任务组接口,描述任务组的策略,任务间 - 的关系组合,再调用任务下发接口。 - 2、任务策略包括按组顺序出库策略、按组分配策略。 - 3、顺序出库下发规则,上层系统将 groupSeq 从小到大下发给 RCS-2000,上层系统需要控制下发顺序, - 不支持先调接口发 groupSeq 大的,再调接口发 groupSeq 小的执行顺序出库。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - - 路径 /api/robot/controller/task/group -幂等性 是 - -请求方式 POST 数据类型 最大字节数 是否必须 说明 -查询参数 参数名 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - groupCode 字符串 32 否 任务组编号,全局唯一 - - strategy 字符串 16 是 执行策略。可扩展枚举值。 - 预置枚举值: - - GROUP_SEQ - 按组顺序出库 - -请求报文消息体 GROUP_ASSIGN - 按组分配任务 (WCS CTU 工作站任务专 - 用) - - strategyValue 字符串 32 GROUP_CARRIER_ADJUST - 载具整理(CTU 专用,将载具整理到合适的 - 仓位) - 否 GROUP_SEQ 枚举时采用如下策略,必填: - 顺序出库类型 - - 0:组件无序,组内无序,按组出库 - 1:组间及组内都有序 - 2:组间有序,组内无序 - RCS-2000 V4.1 接口协议 对外发布 - - groupSeq 整数 8 否 3:组间无序,组内有序 - targetRoute CTU 理库采用如下策略,必填: - JSON 对象 N/A 是 3:组间无序,组内有序 - data 组顺序(数字),从 1 到 9999999999 - - 执行任务的下一个目标位置必须要传,通过 - 这个值来控制同一工作台的顺序如果没有, - 只能针对全局顺序控制 - - JSON 对象数 N/A 是 - - 组 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - code -响应报文消息体 字符串 N/A 是 消息码 - 业务数据 message - - 字符串 N/A 是 消息内容 - - code 含义 - - Err_ TaskNotStart 任务尚未开始 -专用消息码 任务已结束 - - Err_ TaskFinished - - Err_ TaskNotFound 任务找不到 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 -targetRoute type - code 字符串 16 是 SITE:站点别名 ZONE:目标所处区域编号 - data - robotTaskCode 字符串 256 是 - sequence - 字符串 64 是 任务号,全局唯一 - - 数字 N/A 否 任务顺序(数字),从 1 开始到 9999 - -请求样例: - RCS-2000 V4.1 接口协议 对外发布 - -POST /api/robot/controller/task/group HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - -{ - "groupCode": "2e0d1ae0481f48b78b6a217ac2b54eb4", - "strategy": "GROUP_SEQ", - "strategyValue": "1", - "groupSeq": 10, - "targetRoute": { - "type": "ZONE", - "code": "A2" - }, - "data": [ - { - "robotTaskCode": "0a17e361eb5248bfab0508e4709f085e", - "sequence": 1 - }, - { - "robotTaskCode": "1b30143f32914155ab194d55a95d54da", - "sequence": 2 - }, - { - "robotTaskCode": "6541e925d1de4c448188068fcee75de5", - "sequence": 3 - }, - { - "robotTaskCode": "b48bf9fd96ef46b2a495328a88a4bf8a", - "sequence": 4 - } - ] - -} - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - -} - - 2.1.2 任务下发接口 - -接口名称 任务下发接口 -接口说明 业务系统发送任务请求, 物流机器人调度系统生成任务执行单,并下发执行。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - -路径 /api/robot/controller/task/submit - -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - 任务类型 - - 在物流机器人调度系统配置,封装了与业务 - - 系统无关的内部调度逻辑。 - - taskType 字符串 16 是 可扩展的枚举值。 - 预制枚举值: - -请求报文消息体 TRANSPORT - 搬运,一至数个执行步骤。 - - targetRoute 对象数组 N/A 执行步骤集合。本次任务机器人需要执行的 - 是 - - 关键路径,如货架起点 A 至出库工作台 B - 任务执行的初始优先顺序,数值越大,优先 - - initPriority 整数 8 否 级越高。但机器人调度系统会根据任务繁忙 - 程度,机器人的工作状态,以及其他优先级 - RCS-2000 V4.1 接口协议 对外发布 - - deadline 时间 N/A 否 修正条件,进行综合判定后,实时动态调整 - 任务实际的优先级数值。范围:1~120 - robotType 字符串 N/A 否 任务截止时间,任务优先级修正条件之一。 - 截止时间之前需要任务执行完成, 超过时 - robotCode 字符串数组 N/A 否 间后,系统会将任务单做出超时提示。格式: - interrupt 秒精度。 - robotTaskCode 整数 1 否 要求调度系统仅在当前指定的范围内选择 - groupCode 机器人执行该任务。可能出现任务与机器人 - 字符串 64 否 类型不匹配的异常,需要业务系统确保任务 - extra 与机器人类型的匹配。如果不指定,则调度 - 字符串 32 否 系统会在所有可用机器人的范围内寻找最 - 优方案。 - JSON 对象 N/A 否 固定枚举值: - GROUPS - 机器人资源组编号 - ROBOTS - 机器人编号 - 与 robotType 匹配的资源类型唯一标识。 - - 能否打断, - 1:可打断 - 该货架中途有其他任务时,打断当前任务。 - 0:不可打断 - 该货架中途有其他任务时,不能打断当前任 - 务。默认不可打断。 - 外部任务唯一编号,如果为空,系统生成任 - 务号并返回。 - 任务组编号,全局唯一 - - 自定义扩展字段,结构同 targetRoute 中的 - extra, 需 结 合 具 体 的 流 程 使 用 。 如 - WMS-PF-DETECT-CARRIER 举升车探测搬运 - 流程中,运行数据-输入中默认会使用 - submit.extra.carrierInfo[0].carrierTy - pe 作为载具类型,即上层下发该类型的任 - 务时必须要传递该值,如果 carrierType - 的参数类型选择脚本,可不传该值 - -响应状态码 响应部分 - 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - -响应报文消息体 字段名 数据类型 最大字节数 是否必须 说明 - 业务数据 code - 字符串 N/A 是 消息码 - RCS-2000 V4.1 接口协议 对外发布 - - message 字符串 N/A 是 消息内容 - 是 任务号,全局唯一 - robotTaskCode 字符串 64 否 自定义扩展字段[预留字段,暂未赋值] - - data - - extra JSON 对象 N/A - - code 含义 - Err_TaskTypeNotSupport - 任务类型不支持 - -专用消息码 Err_RobotGroupsNotMatch 机器人资源组编号与任务不匹配,无法调度 - Err_RobotCodeNotMatch 机器人编号与任务不匹配,无法调度 - Err_TargetRouteError 任务路径参数有误 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 -targetRoute seq - 整数 32 是 目标路径序列。从 0 开始。 - type - 目标类型。可扩展枚举值。 - 预制枚举值: - - ZONE - 目标所处区域编号 - - SITE - 站点别名 - STORAGE - 仓位别名 - - MAT_LABEL - 物料标签 - - CARRIER - 载具编号 - - STACK - 巷道编号 - - 字符串 16 是 STACK_LABEL - - 巷道特征值 - - CHANNEL - 巷道 - - EQPT - 外部设备 - - PTL_WALL - 分播墙 - - CARRIER_TYPE - 载具类型 - - BIN_TYPE - 仓位类型 - - AREA_STATION - 区域工作台 - - PILE_COUNT - 一次搬几个 - RCS-2000 V4.1 接口协议 对外发布 - - 字符串 MIX_CONDITION - 条件组合 - code (JSON 数组) 256 DEGREE -operation 热度 - MULTI_BIN_GROUP -robotType 多深位组号 -robotCode 与 type 对应的目标编号 - 枚举为 ZONE 时:支持多个区域,以逗号 - extra 隔开,从前往后,依次查找,例如: - ZONE1,ZONE2 - 是 - 枚举为 STRATEGY_GROUP 时,格式如下: - [{"type":"ZONE","code":"SF2"},{"type":" - CARRIER_TYPE","code":"P1"}] - - 字符串 8 机器人到达目标位置后的操作。可扩展的枚 - 举值。 - 字符串 N/A 预制枚举值: - COLLECT - 字符串数组 N/A 否 取货 - JSON 对象 N/A DELIVERY - 送货 - ROTATE - 旋转 - 要求调度系统仅在当前指定的范围内选择 - 机器人执行该步骤。可能出现任务步骤与机 - 器人类型不匹配的异常,需要业务系统确保 - 任务与机器人类型的匹配。如果指定当前步 - 骤的机器人选择范围,则调度系统无视任务 - 中设定的机器人选择范围;如果任务中也没 - 否 有指定机器人选择范围,则调度系统会在所 - 有可用机器人的范围内寻找最优方案。 - 固定枚举值: - GROUPS - 机器人资源组编号 - ROBOTS - 机器人编号 - 否 与 robotType 匹配的资源类型唯一标识。 - - targetRoute 自定义扩展项,需结合具体的 - 流程使用。如 WMS-PF-LMR-INT-CARRIER 举 - 升车指定载具初始化流程中,业务参数-基 - 否 本属性中,终点载具角度默认会使用 - submit.targetRoute[1].extra.angleInfo - .code 作为终点角度,即上层下发该类型的 - 任务时必须要传递该值,选择固定值时可不 - RCS-2000 V4.1 接口协议 对外发布 - - 下发该参数。 - - angleInfo JSON 对象 N/A 否 角度信息,包含角度类型与角度值。 - - carrierInfo JSON 对象数 N/A 载具的信息,包含载具编号、层号。 - 使用场景: - 组 否 1.装卸机或输送线专用 - 2.载具与站点没有绑定,但需要传入载具的 - 场景。 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - - type 字符串 32 角度类型。可扩展枚举值。 -angleInfo 预制枚举值: - 字符串 64 是 - code 绝对角度(与工作站的方向有关) - carrierType 字符串 16 ABSOLUTE - 与 type 对应的值 - 是 角度值 - [0, 90, 180, -90, 360] - 是 载具类型 - -carrierInfo carrierCode 字符串 16 是 载具编号 - - layer 整数 N/A 是 层号: 从 0 开始、从下往上编号 - -请求样例: - RCS-2000 V4.1 接口协议 对外发布 - -POST /api/robot/controller/task/submit HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - -{ - "taskType": "TRANSPORT", - "targetRoute": [ - { - "seq": 0, - "type": "ZONE", - "code": "7256****7a12", - "autoStart": 0, - "operation": "COLLECT", - "extra": null - "robotType": "GROUPS", - "robotCode": ["a361****f1b8"] - },{ - "seq": 1, - "type": "SITE", - "code": "c9a1****3a1c", - "autoStart": 0, - "operation": "DELIVERY", - "extra": { - "angleInfo": { - "type": "RELATIVE", - "code": "90", - }, - "carrierInfo": [{ - "carrierType": "1", - "carrierCode": "7256****7a12", - "layer": "0" - }] - } - } - ], - "initPriority": 99, - "deadline": "2021-04-04T12:23:55Z", - "robotType": "GROUPS", - "robotCode": ["c3a1****e7bb"], - "extra": { - RCS-2000 V4.1 接口协议 对外发布 - - "carrierInfo": [{ - "carrierType": "1", - "carrierCode": "7256****7a12", - "layer": "0" - - }] - } -} - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "robotTaskCode": "27e****ba08", - "extra": null - } - - } - -2.1.3 任务继续执行接口 - -接口名称 任务继续执行接口 - - 一个任务包含多个步骤,每个执行步骤完成后,都需要业务系统通过任务继续执行接口,来驱动下一个 - - 阶段的执行。第一个步骤也需要通过此接口启动执行。 - -接口说明 如果任务下发时,该步骤设置为自动开始,则该接口不是必须调用的,但如果调度系统收到该步骤的继 - 续执行调用指令,应该按照幂等原则处理。 - - 对于正在执行的步骤,发生重复的调用时,应按照幂等原则处理。 - - 对于已经完成或跳过步骤的指令,应予以错误提示。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - 服务前缀 /rcs/rtas - RCS-2000 V4.1 接口协议 对外发布 - - 路径 /api/robot/controller/task/extend/continue -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - robotTaskCode 字符串 64 否 任务链编号 - 触发类型: - -请求报文消息体 triggerType 字符串 32 SITE 站点编号触发 - 是 CARRIER 载具编号触发 - triggerCode 字符串 64 - targetRoute ROBOT 车号触发 - 对象 N/A TASK 任务链编号触发 - 是 与 triggerType 对应的触发编号 - 否 执行任务的下一个目标位置 - - extra 对象 N/A 否 自定义扩展参数 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - code -响应报文消息体 字符串 N/A 是 消息码 - 业务数据 message - - 字符串 N/A 是 消息内容 - - code 含义 - - Err_ TaskNotStart 任务尚未开始 -专用消息码 任务已结束 - 任务找不到 - Err_ TaskFinished - - Err_ TaskNotFound - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 -targetRoute seq - 整数 32 是 目标路径序列。从 0 开始。 - type - 目标类型。可扩展枚举值。 - 预制枚举值: - - 字符串 16 ZONE - 是 目标所处区域编号 - - SITE - 站点别名 - STORAGE - RCS-2000 V4.1 接口协议 对外发布 - - code 字符串 仓位别名 -operation 256 MAT_LABEL -robotType 物料标签 - (JSON 数组) CARRIER - 载具编号 - STACK - 巷道编号 - STACK_LABEL - 巷道特征值 - EQPT - 外部设备 - PTL_WALL - 分播墙 - CARRIER_TYPE - 载具类型 - BIN_TYPE - 仓位类型 - AREA_STATION - 区域工作台 - PILE_LAYER - 堆叠层号 - PILE_COUNT - 一次搬几个 - MIX_CONDITION - 条件组合 - 与 type 对应的目标编号 - 枚举为 ZONE 时:支持多个区域,以逗号 - 隔开,从前往后,依次查找,例如: - ZONE1,ZONE2 - 是 - 枚举为 STRATEGY_GROUP 时,格式如下: - [{"type":"ZONE","code":"SF2"},{"type":" - CARRIER_TYPE","code":"P1"}] - - 字符串 8 机器人到达目标位置后的操作。可扩展的枚 - 举值。 - 字符串 N/A 预制枚举值: - COLLECT - 否 取货 - DELIVERY - 送货 - ROTATE - 旋转 - 要求调度系统仅在当前指定的范围内选择 - 否 - 机器人执行该步骤。可能出现任务步骤与机 - RCS-2000 V4.1 接口协议 对外发布 - - robotCode 字符串数组 N/A 器人类型不匹配的异常,需要业务系统确保 - extra JSON 对象 N/A 任务与机器人类型的匹配。如果指定当前步 - 骤的机器人选择范围,则调度系统无视任务 -请求样例: 中设定的机器人选择范围;如果任务中也没 - 有指定机器人选择范围,则调度系统会在所 - 有可用机器人的范围内寻找最优方案。 - 固定枚举值: - GROUPS - 机器人资源组编号 - ROBOTS - 机器人编号 - 否 与 robotType 匹配的资源类型唯一标识。 - - targetRoute 自定义扩展项,需结合具体的 - 流程使用。如 WMS-PF-LMR-INT-CARRIER 举 - 升车指定载具初始化流程中,业务参数-基 - 本属性中,终点载具角度默认会使用 - 否 - submit.targetRoute[1].extra.angleInfo - .code 作为终点角度,即上层下发该类型的 - 任务时必须要传递该值,选择固定值时可不 - 下发该参数。 - RCS-2000 V4.1 接口协议 对外发布 - -POST /api/robot/controller/task/extend/continue HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - -{ - "triggerType":"TASK", - "robotTaskCode": "1a17e361eb5248bfab0508e4709f085f5", - "triggerCode": "1a17e361eb5248bfab0508e4709f085f5", - "targetRoute": { - "seq":0, - "type":"ZONE", - "code":"D1", - "autoStart": 1, - "operation": "COLLECT" - } - - } - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "robotTaskCode": "27e****ba08", - "nextSeq": 1, - "extra": null - } - - } - -2.1.4 任务取消接口 - RCS-2000 V4.1 接口协议 对外发布 - -接口名称 任务取消接口 -接口说明 业务系统发送任务取消请求,物流机器人调度系统取消当前任务并返回取消结果。在取消当前任务的同 - 时,还可以通过该接口给正在执行该任务的机器人下发一个全新的任务。若该任务仍处于待分配状态, - 则同样会创建一个待调度的任务,并沿用之前任务的优先级和机器人选取范围。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - -路径 /api/robot/controller/task/cancel - -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 说明 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - robotTaskCode - 字符串 64 是 任务号,全局唯一 - - cancelType 字符串 16 是 任务取消类型 - 取消 - -请求报文消息体 CANCEL - 人工介入 - carrierCode 字符串 16 DROP - 否 回库的载具编号 - - reason 字符串 64 否 取消原因 - 否 软取消的回库任务类型 - returnTaskType 字符串 N/A - - targetRoute JSON 对象 N/A 否 - - extra JSON 对象 N/A 否 自定义扩展字段 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - - code 字符串 N/A 是 消息码 - -响应报文消息体 message 字符串 N/A 是 消息内容 - 业务数据 - robotTaskC 字符串 64 是 被取消的任务唯一标识 - 专用消息码 - data ode - - extra JSON 对象 N/A 否 自定义扩展字段 - - code 含义 - RCS-2000 V4.1 接口协议 对外发布 - - Err_ TaskFinished 任务已结束 - Err_ TaskNotFound 任务找不到 - - Err_TaskModifyReject 任务当前无法变更 - - Err_ TaskTypeNotSupport 新任务任务类型不支持 - Err_ RobotGroupsNotMatch 机器人资源组编号与新任务不匹配,无法调度 - - Err_ RobotCodesNotMatch 机器人编号与新任务不匹配,无法调度 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 -targetRoute type - code 字符串 16 是 预制类型:ZONE 区域 - - 只能在区域中挑选位置 - - 字符串 256 是 type 对应的目标编号 - -请求样例: - RCS-2000 V4.1 接口协议 对外发布 - - POST /api/robot/controller/task/modify HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "robotTaskCode": "27e****ba08", - "reason": "更紧急的任务", - "newTask": { - "taskType": "TRANSPORT", - "targetRoute": [ - { - "seq": 0, - "type": "ZONE", - "code": "7256****7a12", - "autoStart": 1 - "operation": "COLLECT", - "extra": null - },{ - "seq": 1, - "type": "POINT", - "code": "c9a1****3a1c", - "autoStart": 0, - "operation": "DELIVERY", - "extra": null - } - ], - "extra": null - } - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "robotTaskCode": "27e****ba08", - "extra": null - } - -} - -2.1.5 任务优先级设置接口 - -接口名称 任务优先级设置接口 -接口说明 任务创建之后、结束之前,可以随时调整任务优先级相关参数,包括任务执行的初始优先顺序和任务截 - 止时间,以及其他任务优先级修正条件。修改优先级只能影响调度系统的优先级判定依据,但机器人调 - 度系统会根据任务繁忙程度,机器人的工作状态,以及优先级修正条件,进行综合判定后,实时动态调 - 整任务实际的优先级数值。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/task/priority - 幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 数据类型 最大字节数 是否必须 说明 - -请求首部字段 字段名 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - robotTaskCode - 字符串 64 是 任务号,全局唯一 - -请求报文消息体 任务执行的初始优先顺序,数值越大,优先 - 级越高。但机器人调度系统会根据任务繁忙 - initPriority 整数 8 是 - 程度,机器人的工作状态,以及其他优先级 - 修正条件,进行综合判定后,实时动态调整 - RCS-2000 V4.1 接口协议 对外发布 - - 任务实际的优先级数值。范围:1~120 - - deadline 时间 N/A 任务截止时间,任务优先级修正条件之一。 - extra 否 截止时间之前需要任务执行完成。格式:秒 - JSON 对象 N/A - 精度。 - 否 自定义扩展字段 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - - code 字符串 N/A 是 消息码 - 是 消息内容 -响应报文消息体 message 字符串 N/A 是 任务号,全局唯一 - -业务数据 robotTaskC 字符串 64 否 自定义扩展字段 - - data ode - - extra JSON 对象 N/A - - code 含义 -专用消息码 Err_ TaskFinished - 任务已结束 - - Err_ TaskNotFound 任务找不到 - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - -POST /api/robot/controller/task/priority HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "robotTaskCode": "27e****ba08", - "initPriority": 19, - "deadline": "2021-04-05T12:23:55Z", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "robotTaskCode": "27e****ba08" - "extra": null - } - -} - -2.1.6 区域暂停与恢复机器人接口 - -接口名称 按区域暂停与恢复机器人接口 -接口说明 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - -路径 /api/robot/controller/zone/pause - -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - zoneCode 字符串 32 是 指定的区域编号,全局唯一 - -请求报文消息体 invoke 字符串 N/A 固定枚举值: - FREEZE - 是 运行急停 - RUN - - 恢复 - - extra JSON 对象 N/A 否 自定义扩展字段 - - posUpLeft JSON 对象 N/A 否 左上坐标,invoke 为 FREEZE 生效 - - posDownRight JSON 对象 N/A 否 右下坐标,invoke 为 FREEZE 生效 - RCS-2000 V4.1 接口协议 对外发布 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - -响应报文消息体 code 字符串 N/A 是 消息码 - 业务数据 message 是 消息内容 - 字符串 N/A 否 自定义扩展字段 - - extra JSON 对象 N/A - - code 含义 -专用消息码 - 状态转换异常。不能从机器人当前状态转换到目标状态。 - Err_StatusNotMatch - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - - cooX 字符串 32 是 区域左上 x 坐标 - cooY 是 区域左上 y 坐标 - posUpLeft cooX 字符串 32 是 区域右下 x 坐标 - cooY 是 区域右下 y 坐标 -posDownRight 字符串 32 - - 请求样例: 字符串 32 - -POST /api/robot/controller/zone/pause HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "zoneCode": "27e****ba08", - "invoke": "FREEZE", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - -} - -2.1.7 区域归巢机器人接口 - -接口名称 机器人归巢接口 -接口说明 让指定区域内的机器人前往预定的停放区域。可支持在停放区域即时关机,按照预设的时间点执行自动 - 开机,适应工厂长时间休假的情况。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/zone/homing - 幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - zoneCode 字符串 32 是 指定的区域编号(需要归巢的区域),全局唯 - - 一 - - 机器人归巢后是否关机。 - -请求报文消息体 固定枚举值: - YES - autoShutdown 字符串 N/A 是 - 关机 - - NO - 不关机 - - bootTime 时间 N/A 否 预设开机时间点,分钟精度 - RCS-2000 V4.1 接口协议 对外发布 - - expireTime 时间 N/A 否 归巢执行超时时间点,秒精度 - extra 自定义扩展字段 - JSON 对象 N/A 否 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - -响应报文消息体 homingCode 字符串 32 是 归巢指令编号 - 是 接受到归巢指令的机器人数量。 -业务数据 robotCount 整数 32 - - extra JSON 对象 N/A 否 自定义扩展字段 - -专用消息码 code 含义 - 预设开机时间点小于当前时间点 - Err_TimeMachineRequired - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - -POST /api/robot/controller/zone/homing HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "zoneCode": "821****8ac7", - "autoShutdown": "YES", - "bootTime": "2021-04-06T08:00:00+8:00", - "expireTime": "2021-04-05T12:30:00Z", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "homingCode": "545****8b0e", - "robotCount": 20, - "extra": null, - } - -} - -2.1.8 区域驱离机器人接口 - -接口名称 机器人驱离接口 -接口说明 由于业务需要,将区域内的机器人驱离,但并不禁止其他机器人通过这片区域。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/zone/banish - 幂等性 是 - -请求方式 POST 数据类型 最大字节数 是否必须 说明 -查询参数 参数名 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - zoneCode 字符串 32 是 需要驱离的区域编号,全局唯一 - -请求报文消息体 targetZoneCode 字符串 32 需要机器人前往的目标区域,为空时,自由 - 否 - - 选择 - - expireTime 时间 N/A 否 驱离执行超时时间点,秒精度。 - - extra JSON 对象 N/A 否 自定义扩展字段 - - 响应部分 - -响应状态码 含义 - RCS-2000 V4.1 接口协议 对外发布 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - - code 字符串 N/A 是 消息码 - message 是 消息内容 -响应报文消息体 banishCode 字符串 N/A 是 驱离指令编号 - 业务数据 - - 字符串 32 - - extra JSON 对象 N/A 否 自定义扩展字段 - - code 含义 -专用消息码 - 找不到驱离区域 - Err_ZoneCodeNotFound - - Err_TargetZoneCodeNotFound 找不到目标区域 - - Err_NoTargeMatch 找不到可以前往的目标点(未指定目标点情况下) - - Err_NoPathMatch 目标点不可达 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - -POST /api/robot/controller/zone/banish HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "zoneCode": "27e****ba08", - "targetCode": "27e****ba08", - "expireTime": "2021-04-05T12:30:00Z", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "banishCode": "27e****ba08" - "extra": null - } - -} - -2.1.9 区域封锁与恢复接口 - -接口名称 区域封锁与恢复接口 -接口说明 - 只对正在指定区域外的机器人生效,这些机器人不能进入该区域,但并不要求该区域内的 - 机器人离开。解除封锁后限制取消 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - -路径 /api/robot/controller/zone/blockade - -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - zoneCode 字符串 32 是 需要封锁的区域编号,全局唯一 - - mapCode 字符串 16 地图编号,临时区域时,需要地图编号 - 否 - - 监控客户端使用。 - -请求报文消息体 区域状态。 - 固定枚举值: - - invoke 字符串 N/A BLOCKADE - 是 - - 封锁 - - OPENUP - 解封 - RCS-2000 V4.1 接口协议 对外发布 - - extra JSON 对象 N/A 否 自定义扩展字段 - 否 左上坐标,invoke 为 BLOCKADE 生效 - posUpLeft JSON 对象 N/A 否 右下坐标,invoke 为 BLOCKADE 生效 - - posDownRight JSON 对象 N/A - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - -响应报文消息体 code 字符串 N/A 是 消息码 - 业务数据 message 是 消息内容 - 字符串 N/A 否 自定义扩展字段 - extra - JSON 对象 N/A - - code 含义 -专用消息码 - 找不到封锁区域 - Err_ZoneCodeNotFound - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - - cooX 字符串 32 是 区域左上 x 坐标 - cooY 是 区域左上 y 坐标 -posUpLeft 字符串 - - 32 - - cooX 字符串 32 是 区域右下 x 坐标 - cooY 是 区域右下 y 坐标 -posDownRight 字符串 32 - - 请求样例: - -POST /api/robot/controller/zone/blockade HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - -{ - "zoneCode": "27e****ba08", - "invoke": "BLOCKADE", - "extra": null - -} - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - -} - -2.1.10 载具与站点绑定接口 - -接口名称 载具与站点绑定接口 -接口说明 载具与站点的绑定代表载具放置在该站点上,与双方是否禁用无关。绑定的前提条件是载具与站点均没 - 有被任务占用 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/carrier/bind - 幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 数据类型 最大字节数 是否必须 说明 - -请求首部字段 字段名 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - carrierCode 字符串 16 是 载具编号 - - siteCode 字符串 64 是 站点编号 - -请求报文消息体 取 值范 围 [0,90,180,-90,360] 货架 方向 设 - 置,横竖向与站点保持一致,站点为全向时, - carrierDir 整数 4 否 - 接口需指定方向,正方形货架不设置货架方 - extra JSON 对象 N/A 向。 - 否 自定义扩展字段 - - 响应部分 - RCS-2000 V4.1 接口协议 对外发布 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - -响应报文消息体 code 字符串 N/A 是 消息码 - 业务数据 message 是 消息内容 - 字符串 N/A 否 自定义扩展字段 - extra - JSON 对象 N/A - - code 含义 - -专用消息码 Err_TaskFound 载具或站点已存在任务,不能做绑定解绑操作。 - Err_Bound 载具或站点已与其他对象建立绑定关系。 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - -POST /api/robot/controller/carrier/bind HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "carrierCode": "f51c****ba08", - "siteCode": "ba46****ec31", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - -} - -2.1.11 载具与站点解绑定接口 - -接口名称 载具与站点绑定解绑接口 -接口说明 载具与站点的解绑定意味着载具不再放置在该站点上,与双方是否禁用无关。载具或站点的编号至少需 - 要传入一个。如果都传了值, 站点绑定了其他的载具,将报错;站点未绑定载具按照重复解绑处理 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/carrier/unbind - 幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - carrierCode 字符串 16 是 载具编号 - siteCode 是 站点编号 -请求报文消息体 字符串 - - 64 - - extra JSON 对象 N/A 否 自定义扩展字段 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - RCS-2000 V4.1 接口协议 对外发布 - - 字段名 数据类型 最大字节数 是否必须 说明 - code -响应报文消息体 字符串 N/A 是 消息码 - 业务数据 message - extra 字符串 N/A 是 消息内容 - - JSON 对象 N/A 否 自定义扩展字段 - - code 含义 -专用消息码 - - 无 - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - -POST /api/robot/controller/carrier/unbind HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "carrierCode": "f51c****ba08", - "siteCode": "ba46****ec31", - "extra": null - - } - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - -} - RCS-2000 V4.1 接口协议 对外发布 - -2.1.12 存储对象与搬运对象绑定解绑接口 - -接口名称 存储对象与搬运对象绑定接口 -接口说明 存储对象与搬运对象的绑定代表搬运对象放置在存储对象上,与双方是否禁用无关。绑定的前提条件是 - 搬运对象没有被任务占用,存储对象没有被任务占用。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/site/bind - -幂等性 是 - -请求方式 POST 数据类型 最大字节数 是否必须 说明 -查询参数 参数名 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - 存储对象种类类型 - 预制枚举值: - - slotCategory 字符串 16 是 SITE - - 站点 - - BIN - 仓位 - - slotCode 字符串 64 是 与 slotCategory 对应的编号 - 搬运对象种类类型 - 预制枚举值: - - POD - 货架 - -请求报文消息体 字符串 16 PALLET - carrierCategory 否 - - 托盘 - - BOX - 料箱 - - MAT - 物料标签 - - carrierType 字符串 16 否 载具类型 - - carrierCode 字符串 64 否 载具编号 - - temporary 整数 2 是否临时载具,临时载具不在调度系统的载 - 否 - - 具表中管理。 - - carrierDir 整数 4 货 架 相 对 于 站 点 的 方 向 , 取 值 范 围 [0, - 否 90,-90,180,360]。货架方向设置,横竖向与 - - 站点保持一致,站点为全向时,接口需指定 - RCS-2000 V4.1 接口协议 对外发布 - - 方向,正方形货架不设置货架方向。 - - invoke 字符串 N/A 绑定解绑的变更。 - 固定枚举值: - colCount 整数 4 BIND - extra 是 - JSON 对象 N/A 绑定 - UNBIND - 解绑 - 否 堆叠使用,表示绑定到第几层 - 否 自定义扩展字段 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - -响应报文消息体 code 字符串 N/A 是 消息码 - 业务数据 message 是 消息内容 - 字符串 N/A 否 自定义扩展字段 - extra - JSON 对象 N/A - - code 含义 - -专用消息码 Err_TaskFound 载具已存在任务,不能做绑定解绑操作。 - Err_Bound 载具已与其他对象建立绑定关系。 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - RCS-2000 V4.1 接口协议 对外发布 - - POST /api/robot/controller/site/bind HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "slotCategory": "SITE", - "slotCode": "000010AA000100", - "invoke": "UNBIND", - "extra": null - - } - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - - } - -2.1.13 载具禁用与启用 - -接口名称 载具禁用与启用接口 -接口说明 禁用载具后,该载具和载具所处的站点不会被任务分配,已分配的任务需要执行完成; - 启用是禁用的逆操作。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/carrier/lock - 幂等性 是 - RCS-2000 V4.1 接口协议 对外发布 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - carrierCode 字符串 64 是 载具编号 - -请求报文消息体 载具禁用启用的变更。 - 固定枚举值: - - invoke 字符串 N/A LOCK - 是 - - 禁用 - - UNLOCK - 启用 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - code -响应报文消息体 字符串 N/A 是 消息码 - 业务数据 message - extra 字符串 N/A 是 消息内容 - 专用消息码 code - 无 JSON 对象 N/A 否 自定义扩展字段 - - 含义 - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - RCS-2000 V4.1 接口协议 对外发布 - - POST /api/robot/controller/carrier/lock HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "carrierCode": "f51c****ba08", - "invoke": "LOCK", - "extra": null - - } - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - - } - -2.1.14 站点禁用与启用 - -接口名称 站点禁用与启用接口 -接口说明 禁用站点后,该站点和站点的载具不会被任务分配,已分配的任务需要执行完成; - 启用是禁用的逆操作。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/site/lock - 幂等性 是 - RCS-2000 V4.1 接口协议 对外发布 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - siteCode 字符串 64 是 站点编号 - -请求报文消息体 站点禁用启用的变更。 - 固定枚举值: - - invoke 字符串 N/A LOCK - 是 - - 禁用 - - UNLOCK - 启用 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - code -响应报文消息体 字符串 N/A 是 消息码 - 业务数据 message - extra 字符串 N/A 是 消息内容 - 专用消息码 code - 无 JSON 对象 N/A 否 自定义扩展字段 - - 含义 - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - RCS-2000 V4.1 接口协议 对外发布 - - POST /api/robot/controller/site/lock HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "siteCode": "ba46****ec31", - "invoke": "LOCK", - "extra": null - - } - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - - } - -2.1.15 外设执行通知接口 WCS - -接口名称 外设执行通知接口 -接口说明 外设执行完成后的消息通知,与 2.2.4 请求外设接口相对应。 - 发生重复的调用时,应按照幂等原则处理。 - 场景示例: - 1.调度系统向 WCS 请求电梯资源。 - 2.电梯到位后,通过该接口通知调度系统。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - 服务前缀 /rcs/rtas - RCS-2000 V4.1 接口协议 对外发布 - -路径 /spi/wcs/robot/eqpt/notify - -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - eqptCode 字符串 64 是 设备编号 - - taskCode 字符串 64 是 任务号为唯一编号,可使用 UUID - - 任务执行状态:可扩展枚举值。 - - actionStatus 字符串 16 预制枚举值: - -请求报文消息体 1. 自动门,风淋门 - "1"-开门到位 - "2"-关门到位 - 2. 电梯 - 是 "3"-开门到位 - "4"-物料到达目标楼层 - 3. 装卸机 - "5"-取货 - "6"-放货 - "7"-到达 - - siteCode 字符串 64 是 分配的站点编号,电梯多拖场景使用。 - carrierInfo 载具的信息,包含载具编号、层号。 - 对象数组 N/A - extra 否 - JSON 对象 N/A (CTU 装卸机使用) - - 否 自定义扩展字段 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - taskCode -响应报文消息体 字符串 64 是 任务号,全局唯一 - 业务数据 extra - - JSON 对象 N/A 否 自定义扩展字段 - - code 含义 - - Err_ TaskNotStart 任务尚未开始 -专用消息码 任务已结束 - - Err_ TaskFinished - - Err_ TaskNotFound 任务找不到 - RCS-2000 V4.1 接口协议 对外发布 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 -carrierInfo carrierType - carrierCode 字符串 16 是 载具类型 - - 字符串 64 是 载具编号 - -请求样例: - - POST /spi/wcs/robot/eqpt/notify HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - -{ - "eqptCode": "101", - "taskCode": "180*****", - "actionStatus": "1", - "siteCode": "101", - "extra": null - -} - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "robotTaskCode": "27e****ba08", - "nextSeq": 1, - "extra": null - } - - } - RCS-2000 V4.1 接口协议 对外发布 - -2.1.16 预调度任务下发接口 - -接口名称 预调度任务下发接口 -接口说明 业务系统发送预调度请求,提前调度机器人到达指定位置。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/task/pretask - 幂等性 是 - -请求方式 POST 数据类型 最大字节数 是否必须 说明 -查询参数 参数名 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - siteCode 字符串 64 是 站点别名 - - nextTaskTime 字符串 64 预调度时间,表示真实任务预计多久后生成 - 是 范围:0~3600 - robotType 字符串 N/A - 0 表示清空点位上所有预调度任务 - 否 机器人类型,多个以逗号隔开 - - priority 整数 8 任务执行的优先顺序,数值越大,优先级越 - 高。但机器人调度系统会根据任务繁忙程 -请求报文消息体 否 度,机器人的工作状态,以及其他优先级修 - 正条件,进行综合判定后,实时动态调整任 - - 务实际的优先级数值。范围:1~127 - - taskCount 整数 N/A 否 预调度任务数 - - capacityCount 整数 4 一辆车最小空储格数. 与 taskCount 结合使 - 否 用, 表明有多少个任务,单个任务需要的 - - 最小空储格数。 - - amrDir 字符串 N/A 否 预调度目标角度:0,90,180,-180,999 - - 999 为不限制目标角度 - - extra JSON 对象 N/A 否 自定义扩展字段 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - -响应报文消息体 字段名 数据类型 最大字节数 是否必须 说明 - RCS-2000 V4.1 接口协议 对外发布 - -业务数据 code 字符串 N/A 是 消息码 - 消息内容 - message 字符串 N/A 是 任务号,全局唯一 - 自定义扩展字段 - taskCode 字符串 64 是 - 含义 - data - - extra JSON 对象 N/A 否 - - code 任务尚未开始 - 任务已结束 - Err_ TaskNotStart 任务找不到 -专用消息码 - - Err_ TaskFinished - - Err_ TaskNotFound - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - - POST /api/robot/controller/task/pretask HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "siteCode": "27e****ba08", - "nextTaskTime": "27e****ba08", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "robotTaskCode": "27e****ba08", - "nextSeq": 1, - "extra": null - } - -} - -2.1.17 通用接口 - -接口名称 通用接口 -接口说明 用于自定义场景下的接口调用。 - 目前的两个使用场景: - 1.载具进入装卸机前,WCS 调用此接口询问料箱是否可以入库。 - 2.输送线满料时,调用此接口通知算法,进行分配优化,防止死锁等。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/custom/normal - 幂等性 是 - -请求方式 POST 数据类型 最大字节数 是否必须 说明 -查询参数 参数名 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - taskCode 字符串 64 是 任务号为唯一编号,可使用 UUID - -请求报文消息体 通知类型,可扩展枚举值。 - 预制枚举值: - notifyType 字符串 32 是 CHECK - 校验 - - FULL_NOTIFY - RCS-2000 V4.1 接口协议 对外发布 - - 满料通知 - - extra JSON 对象 N/A 否 自定义扩展字段,根据不同的通知类型,传 - 递不同的消息。 - carrierInfo JSON 对象数 N/A 否 载具的信息,包含载具编号、层号。 - - 组 出库口站点集合 - 使用场景:通知类型为 FULL_NOTIFY - siteInfo 字符串数组 128 否 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - - code 字符串 N/A 是 消息码 - 是 消息内容 -响应报文消息体 message 字符串 N/A 是 任务号,全局唯一 - 业务数据 否 自定义扩展字段 - - taskCode 字符串 64 - - data - extra JSON 对象 N/A - - code 含义 - - Err_ TaskNotStart 任务尚未开始 -专用消息码 任务已结束 - - Err_ TaskFinished - - Err_ TaskNotFound 任务找不到 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - - carrierType 字符串 16 是 载具类型 - carrierCode -carrierInfo 字符串 64 是 载具编号 - extra layer - 字符串 4 是 层号,从 0 开始,从下往上数 - result - 字符串 64 否 校验结果:"1"-可以入库,"0"-不可以入库 - - 使用场景:通知类型为 CHECK - -请求样例: - RCS-2000 V4.1 接口协议 对外发布 - - POST /api/robot/controller/custom/normal HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskCode": "27e****ba08", - "notifyType": " FULL_NOTIFY", - "extra": { - "siteInfo": ["101"] - } - - } - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "taskCode": "27e****ba08", - } - - } - -2.1.18 查询任务状态接口 - -接口名称 查询任务状态接口 -接口说明 查询任务当前执行状态。根据任务单号查询单条任务的状态。 - - 请求部分 - RCS-2000 V4.1 接口协议 对外发布 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/task/query - 幂等性 是 - -请求方式 POST 数据类型 最大字节数 是否必须 说明 -查询参数 参数名 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - robotTaskCode -请求报文消息体 字符串 是 任务号,全局唯一 - - 64 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - robotTaskCode - 字符串 64 是 任务号,全局唯一 - taskType - 字符串 16 任务类型 - 在物流机器人调度系统配置,封装了与业务 - targetRoute 对象数组 N/A 系统无关的内部调度逻辑。 - 是 可扩展的枚举值。 -响应报文消息体 预制枚举值: - 业务数据 TRANSPORT - 搬运,一至数个执行步骤。 - initPriority 整数 8 执行步骤集合。每个执行步骤完成后,都需 - 是 要业务系统通过任务继续执行接口,来驱动 - deadline 时间 N/A 下一个阶段的执行。 - taskStatus 任务执行的初始优先顺序,数值越大,优先 - 字符串 N/A 级越高。但机器人调度系统会根据任务繁忙 - 否 程度,机器人的工作状态,以及其他优先级 - 修正条件,进行综合判定后,实时动态调整 - 任务实际的优先级数值。 - 任务截止时间,任务优先级修正条件之一。 - 否 截止时间之前需要任务执行完成。格式:秒 - 精度。 - 任务状态。固定枚举值: - QUEUE - 是 - 队列中 - WAIT - RCS-2000 V4.1 接口协议 对外发布 - - 等待步骤执行 - EXECUTING - 步骤运行中 - MANUALED - 人工完成 - FINISHED - 已完成 - CANCELLED - 已取消 - - waring JSON 对象 1 是 正在发生的告警 - - singleRobotCode String 32 是 执行任务的机器人编号 - - currentSeq 整数 32 是 当前目标路径序列。 - - extra JSON 对象 N/A 否 自定义扩展字段 - - code 含义 -专用消息码 - 任务不存在 - Err_TaskCodeNotFound - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - - seq 整数 32 是 目标路径序列。从 0 开始。 - - 目标类型。可扩展枚举值。 - - 预制枚举值: - - ZONE - 目标所处区域编号 - - type 字符串 16 是 SITE - - 站点位置编号 - - OPERAT - 工位编号 - - STORAGE - 仓位编号 - -targetRoute code 字符串 64 是 与 type 对应的目标编号 - 该步骤是否自动开始。固定枚举值。 - autoStart 整数 1 预制枚举值: - 0 - operation 字符串 8 - 是 - 否 - 1 - 是 - 机器人到达目标位置后的操作。可扩展的枚 - 举值。 - 预制枚举值: - - 否 - COLLECT - 取货 - DELIVERY - RCS-2000 V4.1 接口协议 对外发布 - - robotType 字符串 N/A 送货 - - robotCode 字符串数组 N/A 要求调度系统仅在当前指定的范围内选择 - 机器人执行该步骤。可能出现任务步骤与机 - extra JSON 对象 N/A 器人类型不匹配的异常,需要业务系统确保 - 任务与机器人类型的匹配。如果指定当前步 - taskWarnCode 字符串 16 骤的机器人选择范围,则调度系统无视任务 - 中设定的机器人选择范围;如果任务中也没 - startTime 时间 N/A 否 有指定机器人选择范围,则调度系统会在所 - 有可用机器人的范围内寻找最优方案。 -waring singleRobotCode 字符串 16 固定枚举值: - GROUPS - errorCode 字符串 32 机器人资源组编号 - ROBOTS - errorMsg 字符串 256 机器人编号 - 否 与 robotType 匹配的资源类型唯一标识。 -请求样例: - 否 targetRoute 自定义扩展项 - - 是 任务异常告警单号 - 是 初次出现故障的时间 - 否 正在执行任务的机器人唯一标识。 - 是 自定义故障码 - 否 自定义故障消息 - -POST /api/robot/controller/task/query HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - -{ - "robotTaskCode": "27e****ba08", - -} - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "robotTaskCode": "27e****ba08", - "taskType": "TRANSPORT", - "targetRoute": [ - { - "seq": 0, - "type": "ZONE", - "code": "7256****7a12", - "autoStart": 1, - "operation": "COLLECT" - },{ - "seq": 1, - "type": "SITE", - "code": "c9a1****3a1c", - "autoStart": 0, - "operation": "DELIVERY" - } - ], - "initPriority": 53, - "deadline": "2021-04-04T12:23:55Z", - "taskStatus": "WAIT", - "singleRobotCode": "f81***653", - "currentSeq": 1, - "waring": { - "taskWarnCode": "20210404UNICODE9", - "singleRobotCode": "f81***653", - "startTime": "2021-04-04T12:23:55Z", - "errorCode": "ABCDXYZ-12345678", - "errorMsg": "遇到障碍物" - }, - "extra": null - } - -} - RCS-2000 V4.1 接口协议 对外发布 - -2.1.19 查询机器人状态接口 - -接口名称 查询机器人状态接口 -接口说明 查询机器人当前执行状态。根据机器人编号查询,每次查询一台机器人的状态。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - 路径 /api/robot/controller/robot/query - 幂等性 是 - -请求方式 POST 数据类型 最大字节数 是否必须 说明 -查询参数 参数名 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - singleRobotCode 字符串 -请求报文消息体 是 单个机器人唯一标识。 - - 16 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - - singleRobotCode 字符串 16 是 机器人编号 - - robotDir 整数 32 是 机器人方向,取值范围 [0, 360) - - robotIp 字符串 16 否 机器人 IP 地址 - - battery 整数 32 是 机器人电量, 范围: 0-100 - x 是 机器人当前位置 x 坐标 -响应报文消息体 y 字符串 32 是 机器人当前位置 y 坐标 - 业务数据 - 字符串 32 - - speed 整数 32 是 机器人当前速度, 单位: mm/s - robotStatus 是 机器人当前的状态 - JSON 对象 N/A - - carrierCode 字符串 16 否 机器人携带的载具编号 - - warnings JSON 对象数组 N/A 否 正在发生的告警列表 - extra 否 自定义扩展字段 - JSON 对象 N/A - - code 含义 -专用消息码 - - 无 - RCS-2000 V4.1 接口协议 对外发布 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 -robotStatus abnormal - warnings 异常状态。固定枚举值。 - charging - 字符串 N/A YES - network 是是 - 字符串 N/A - taskable NO - 否 - manual 充电状态。固定枚举值。 - YES - emergency 是是 - extra NO - 否 - taskWarnCode 网络状态。固定枚举值。 - singleRobotCode - 字符串 N/A ONLINE - startTime 在线 - errorCode 是 OFFLINE - 离线 - 离线状态下其他字段信息如电量,坐标等 - 信息不准确,忽略这些字段的信息 - 执行任务状态,与机器人状态图中的状态 - 保持一致。固定枚举值。 - - 字符串 N/A IDLE - - 空闲 - 是 - - WORKING - - 执行任务 - - PAUSE - 暂停 - 手动状态。固定枚举值。 - - 字符串 N/A MANUAL - 是 手动 - - AUTO - 自动 - 急停状态。固定枚举值。 - - 字符串 N/A EMERGENCY - 是 急停 - - NORMAL - 正常 - - JSON 对象 N/A 否 自定义扩展字段 - - 字符串 16 是 任务异常告警单号 - - 字符串 16 否 机器人唯一标识。 - - 时间 N/A 是 初次出现故障的时间 - - 字符串 32 是 自定义故障码 - RCS-2000 V4.1 接口协议 对外发布 - - errorMsg 字符串 256 否 自定义故障消息 - -请求样例: - -POST /api/robot/controller/robot/query HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - -{ - "singleRobotCode": "27e****ba08", - -} - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "singleRobotCode": "f81***653", - "robotDir": 180, - "robotIp": "10.10.53.123", - "battery": 56, - "x": "1010.123", - "y": "2301.225678", - "speed": 1200,S - "robotStatus": {, - "abnormal": "NO", - "charging": "YES", - "network": "ONLINE", - "taskable": "IDLE", - "manual": "AUTO", - "emergency": "NORMAL", - "extra": null - }, - "waring": [ - { - "taskWarnCode": "20210404UNICODE9", - "singleRobotCode": "f81***653", - "startTime": "2021-04-04T12:23:55Z", - "errorCode": "ABCDXYZ-12345678", - "errorMsg": "遇到障碍物", - "extra": null - } - ], - "extra": null - } - -} - -2.1.20 查询载具状态接口 - RCS-2000 V4.1 接口协议 对外发布 - -接口名称 查询载具状态接口 -接口说明 查询载具当前状态。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 /rcs/rtas - -路径 /api/robot/controller/carrier/query - -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 说明 - 说明 -请求首部字段 字段名 数据类型 最大字节数 是否必须 - 无 - - 参数名 数据类型 最大字节数 是否必须 - carrierCode -请求报文消息体 字符串 16 是 载具编号 - - 响应部分 - -响应状态码 含义 - 数据类型 最大字节数 是否必须 -200 正常响应 - - 字段名 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - carrierCode - robotTaskCode 字符串 16 是 载具编号 - - siteCode 字符串 64 否 载具当前的任务编号,无任务为空。 - x - y 字符串 32 否 与载具绑定的站点的编号。无绑定为空 - - carrierDir 字符串 32 是 载具的 X 坐标 - -响应报文消息体 字符串 32 是 载具的 Y 坐标 - 业务数据 - 整数 32 是 货架相对于站点的方向,取值范围 [0, 360) - 载具状态。固定枚举值: - carrierStatus 整数 4 NORMAL - - 是 正常 - LOCKED - 禁用 - - extra JSON 对象 N/A 否 自定义扩展字段 - code - 含义 - -专用消息码 - 无 - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - RCS-2000 V4.1 接口协议 对外发布 - -请求样例: - - POST /api/robot/controller/carrier/query HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "carrierCode": "27e****ba08", - - } - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "carrierCode": "c51***3e8", - "robotTaskCode": "27e****ba08", - "siteCode": "ba46****ec31", - "x": "2048.1024", - "y": "1024.9854", - "carrierDir": 270, - "carrierStatus": "NORMAL", - "extra": null - } - - } - -2.2 反馈接收 SPI 接口说明 - -2.2.1 任务执行过程回馈接口 - RCS-2000 V4.1 接口协议 对外发布 - -接口名称 任务执行过程回馈接口 -接口说明 任务执行过程中的消息反馈给业务系统,包括任务开始,载具搬出储位,任务完成等消息反馈。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 - - 路径 /api/robot/reporter/task -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 数据类型 最大字节数 是否必须 说明 - -请求首部字段 字段名 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - robotTaskCode 字符串 64 是 任务号 - -请求报文消息体 singleRobotCode 字符串 16 是 当前执行任务的机器人唯一标识。 - - currentSeq 整数 32 是 当前目标路径序列。 - - extra JSON 对象 N/A 否 自定义扩展字段 - - values JSON 对象数 N/A 否 - - 组 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - robotTaskCode -响应报文消息体 字符串 64 是 任务号,全局唯一 - 业务数据 extra - - JSON 对象 N/A 否 自定义扩展字段 - - code 含义 -专用消息码 - - 无 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - mapCode - 字符串 16 是 地图编号 - - 任务执行过程中消息上报的方法名 - -values 默认使用方式: - 是 - method 字符串 16 - start : 任务开始 - - outbin : 走出储位 - RCS-2000 V4.1 接口协议 对外发布 - - end : 任务完成 - -carrierCode 字符串 16 是 载具编号 - -carrierType 字符串 16 是 载具类型 - -carrierCategory 字符串 16 是 载具种类 - -carrierDir 字符串 4 否 载具角度 - 否 当前站点编号 -slotCode 字符串 32 - 站点别名 -slotName 字符串 32 否 1.走出储位:起点 - -slotCategory 字符串 32 2. 任务完成:目标点 - 存储类型,枚举值: -x 字符串 32 BIN - 否 仓位 -y 字符串 32 SITE - 站点 -amrCategory 字符串 32 否 机器人当前位置 x 坐标 - - 否 机器人当前位置 y 坐标 - - 否 机器人种类 - -amrType 字符串 32 否 机器人类型 - - zoneCode 字符串 16 否 区域编号 - -请求样例: - -POST /api/robot/reporter/task HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: 542a*****8b15 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "robotTaskCode": "27e****ba08", - "singleRobotCode": "f81***653", - "currentSeq": 1, - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "robotTaskCode": "27e****ba08", - "extra": null - } - -} - -2.2.2 交管区域申请和释放接口 - -接口名称 交管申请和释放接口 -接口说明 机器人申请下一段区域是否可以通行,返回成功则认为可以通行,或释放机器人已经通过的区域。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 - -路径 /api/robot/reporter/zone - -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - singleRobotCode 字符串 16 是 当前执行任务的机器人唯一标识。 - - zoneCode 字符串 16 是 交管区域编号 - -请求报文消息体 申请状态。固定枚举值: - APPLY - - invoke 字符串 N/A 是 申请使用 - RELEASE - 释放 - - extra JSON 对象 N/A 否 自定义扩展字段 - RCS-2000 V4.1 接口协议 对外发布 - -响应状态码 响应部分 - 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - zoneCode -响应报文消息体 字符串 16 是 交管区域编号 - 业务数据 extra - code JSON 对象 N/A 否 自定义扩展字段 - 专用消息码 - 无 含义 - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - -POST /api/robot/reporter/zone HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "singleRobotCode": "f81***653", - "zoneCode": "27e****ba08", - "invoke": "APPLY", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "zoneCode": "27e****ba08", - "extra": null - } - -} - -2.2.3 请求资源接口-WMS - -接口名称 请求资源接口 -接口说明 因调度业务的需要,向业务系统请求资源。如:向 WMS 请求指定一个货架到达目的地的站点策略。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 - -路径 /api/robot/reporter/resource - -幂等性 是 - -请求方式 POST 数据类型 最大字节数 是否必须 说明 -查询参数 参数名 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - robotTaskCode 字符串 64 是 任务号,全局唯一 - -请求报文消息体 请求类型。可扩展枚举值。 - 预制枚举值: - applyType 字符串 64 APPLY_SITE - 是 申请存储位置 - - APPLY_BIN - 申请仓位 - - APPLY_PTL_BIN - RCS-2000 V4.1 接口协议 对外发布 - - resourceType 字符串 64 是 申请分播位 - APPLY_CARRIER - resourceCode 字符串 64 是 申请载具 - 发起申请资源类型。可扩展枚举值。 - label 字符串 64 否 预制枚举值: - 载具 - relationCount 字符串 32 否 CARRIER - amrCategory 字符串 站点 - 字符串 32 否 SITE - amrType 字符串 与 type 对应的编号 - amrCode JSON 对象 32 否 相关的标注,由上层系统判断申请资源的相 - 关性。 - extra 16 否 相关个数 - 机器人种类 - N/A 否 机器人类型 - 机器人编号 - 自定义扩展字段 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - - 字段名 数据类型 最大字节数 是否必须 说明 - - data JSON 对象 N/A 否 自定义扩展字段 - - 目标类型。可扩展枚举值。 - 预制枚举值: - - ZONE - 目标所处区域编号 - - SITE - 站点编号 - -响应报文消息体 type 字符串 16 STORAGE - 是 -业务数据 - 仓位编号 - - CARRIER - 载具 - - CARRIER_TYPE - 载具类型 - - MIX_CONDITION - 条件组合 - - code 字符串 32 与 type 对应的目标编号 - 是 枚举为 ZONE 时:支持多个区域,以逗号 - - 隔开,例如: ZONE1,ZONE2 - RCS-2000 V4.1 接口协议 对外发布 - - code 枚举为 MIX_CONDITION -专用消息码 时,格式如下: - [{"type":"ZONE","code":"SF2"},{"type":" - 无 CARRIER_TYPE","code":"P1"}] - - 含义 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - -extra groupCode 字符串 32 否 组编号 - -请求样例: - -POST /api/robot/reporter/zone HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "singleRobotCode": "f81***653", - "applyType": "APPLY_SITE ", - "resourceType": "SITE", - "resourceCode": "27****08", - "lable": "27****08", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "type": "SITE", - "code": "27****08" - } - -} - -2.2.4 请求外设接口-WCS - -接口名称 请求外设接口 -接口说明 因调度业务需要,向外设服务请求外设控制,如:向 WCS 申请电梯资源。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 - -路径 /api/robot/reporter/eqpt - -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - eqptCode 字符串 64 是 设备编号 - - taskCode 字符串 64 是 任务号为唯一编号,可使用 UUID - -请求报文消息体 任务执行方法,与设备相关,可扩展枚举值。 - 预制枚举值: - - method 字符串 64 CANCEL - - 是 - - 任务取消 - - APPLY_TO_AGV - AGV 申请接料 - RCS-2000 V4.1 接口协议 对外发布 - - APPLY_FROM_AGV - AGV 申请送料 - ARRIVED - AGV 到达 - RELEASE - AGV 离开 - - (以下为自动门预制枚举) - APPLY_LOCK - 申请自动门开门 - - RELEASE_EQPT - 释放自动门 - - (以下为电梯预制枚举) - APPLY_RESOURCE - 电梯申请资源 - EXECUTE_TASK - 电梯执行到目标楼层, - RELEASE_RESOURCE - 释放电梯资源 - - carrierInfo 对象数组 N/A 否 载具信息,包含载具编号、层数 - srcCode 字符串 - dstCode 字符串 64 否 起始位置编号,电梯则为起始楼层 - 风淋门的门编号 1:前门,2:后门 - srcPathDir 整数 64 否 目标位置编号,电梯则为目标楼层 - - 整数 32 否 自动门通过方向: - 1:[-180, 0) - dstPathDir 32 否 2:(0, 180] - 电梯朝向 - 1:前门 - 2:后门 - 电梯朝向 - 1:前门 - 2:后门 - TAS 根据等待点获取门的朝向 - -响应状态码 响应部分 - 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - -响应报文消息体 字段名 数据类型 最大字节数 是否必须 说明 - 业务数据 extra - JSON 对象 N/A 否 自定义扩展字段 - RCS-2000 V4.1 接口协议 对外发布 - - code 含义 -专用消息码 - - 无 - - JSON 对象结构 - -对象类型 参数名 数据类型 最大字节数 是否必须 说明 - - carrierType 字符串 16 是 载具类型 - -carrierInfo carrierCode 字符串 64 是 载具编号 - - layer 字符串 4 是 层号,从 0 开始,从下往上数 - -请求样例: - -POST /api/robot/reporter/zone HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - -{ - "eqptCode": "101", - "taskCode": "27e****ba08", - "method": "APPLY_TO_AGV" - -} - -响应样例: - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - - } - RCS-2000 V4.1 接口协议 对外发布 - -2.2.5 机器人归巢完成回馈接口 - -接口名称 机器人归巢完成回馈接口 -接口说明 机器人归巢完成后,反馈给业务系统。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 - - 路径 /api/robot/reporter/zone/homing -幂等性 是 - -请求方式 POST 数据类型 最大字节数 是否必须 说明 -查询参数 参数名 说明 - 无 说明 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 - 无 - - 参数名 数据类型 最大字节数 是否必须 - - homingCode 字符串 32 是 归巢指令编号 - - mapCode 字符串 16 是 地图编号 - - mode 字符串 N/A 是 是否关机:0.不关机,1.关机 - 是 关机时间,单位分钟。0 表示永久关机 -请求报文消息体 - - shutDownTime 整数 8 - - timeToLive 整数 8 是 超时时间,单位分钟 - homingZone 是 归巢任务执行状态。 - JSON 对象数 N/A - 组 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - -响应报文消息体 字段名 数据类型 最大字节数 是否必须 说明 - 业务数据 extra - JSON 对象 N/A 否 自定义扩展字段 - -专用消息码 code 含义 - - 无 - - JSON 对象结构 - - 对象类型 参数名 数据类型 最大字节数 是否必须 说明 -homingZone areaCode - string 32 是 区域编号 - areaId - posUpLeft string 32 是 算法使用的整形序号 - - JSON 对象 N/A 是 左上坐标 - RCS-2000 V4.1 接口协议 对外发布 - - posDownRight JSON 对象 N/A 是 右下坐标 - 是 区域左上 x 坐标 - cooX 字符串 32 是 区域左上 y 坐标 - cooY 是 区域右下 x 坐标 -posUpLeft 是 区域右下 y 坐标 - - 字符串 32 - - cooX 字符串 32 - cooY -posDownRight 字符串 32 - - 请求样例: - -POST /api/robot/reporter/zone/homing HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 61c5****0cf7 -X-lr-appkey: b4f********f324 -X-lr-version: v1.0 -X-lr-trace-id: 665****8a0b -X-lr-request-id: 363****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "homingCode": "821****8ac7", - "mapCode": "AA", - "mode": "0", - "shutDownTime": "5", - "timeToLive": "5", - "homingZone": [{ - "areaCode": "A1", - "areaId": "1**1", - "posUpLeft": { - "cooX": "2**1", - "cooY": "2**1" - }, - "posDownRight": { - "cooX": "4**1", - "cooY": "1**1" - }, - }], - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - -} - -2.2.6 区域驱离机器人完成回馈接口 - -接口名称 机器人驱离完成回馈接口 -接口说明 所有机器人全部驱离成功,或到达超时时间仍未全部完成时,反馈给业务系统。 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 - -路径 /api/robot/reporter/zone/banish - -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 说明 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - banishCode - 字符串 32 是 驱离指令编号 - - mapCode 字符串 16 是 地图编号 - - invoke 整数 2 是 操作类型 - - report 0.驱离,1.恢复 - pause -请求报文消息体 是否上报 invoke 为 1 时有效 - - 字符串 2 否 0.不上报,1.上报 - - 字符串 2 是 是否暂停 invoke 为 1 时有效 - - 0.不暂停,1.暂停 - - controlMode 字符串 2 是 控制模式 - 0 调度到区域外 - RCS-2000 V4.1 接口协议 对外发布 - - data JSON 对象 N/A 是 1 调度到区域外暂住区 - targetZoneCode 2 调度到指定区域 - JSON 对象 N/A 是 区域信息 - status - 字符串 64 是 目标区域信息 - - 归巢任务执行状态 - SUCCESS 全部成功 - FAIL 到达超时时间仍未全部完成 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - -响应报文消息体 字段名 数据类型 最大字节数 是否必须 说明 - 业务数据 extra - JSON 对象 N/A 否 自定义扩展字段 - 专用消息码 code - 无 含义 - - JSON 对象结构 - - 对象类型 参数名 数据类型 最大字节数 是否必须 说明 - data areaCode - string 32 是 区域编号 -targetZoneCode areaId - posUpLeft posUpLeft string 32 是 算法使用的整形序号 - posDownRight 是 左上坐标 - areaCode JSON 对象 N/A 是 右下坐标 - 是 区域编号 - areaId JSON 对象 N/A 是 算法使用的整形序号 - posUpLeft - posDownRight string 32 - - cooX string 32 - cooY - JSON 对象 N/A 是 左上坐标 - JSON 对象 N/A 是 右下坐标 - - 字符串 32 是 区域左上 x 坐标 - - 字符串 32 是 区域左上 y 坐标 - - cooX 字符串 32 是 区域右下 x 坐标 - cooY 是 区域右下 y 坐标 -posDownRight 字符串 32 - - 请求样例: - RCS-2000 V4.1 接口协议 对外发布 - - POST /api/robot/reporter/zone/banish HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "banishCode": "27e****ba08", - "mapCode": "AA", - "invoke": "0", - "pause": "0", - "controlMode": "0", - "controlMode": "0", - "data": [{ - "areaCode": "A1", - "areaId": "1**1", - "posUpLeft": { - "cooX": "2**1", - "cooY": "2**1" - }, - "posDownRight": { - "cooX": "4**1", - "cooY": "1**1" - }, - }], - "status": "FAIL", - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - -} - -2.2.7 机器人异常告警上报接口 - -接口名称 机器人告警上报接口 -接口说明 调度系统将导致机器人停止运行的严重告警推送给上层系统。 - 只推送一次 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 - - 路径 /api/robot/reporter/robot/warning -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - singleRobotCode 字符串 16 是 出现异常的机器人唯一标识。 - 是 任务异常告警单号 - taskWarnCode 字符串 16 - - startTime 时间 N/A 是 初次出现故障的时间 - -请求报文消息体 robotTaskCode 字符串 64 否 机器人正在执行的任务编号 - 是 机器人当前位置 x 坐标 - x 字符串 32 是 机器人当前位置 y 坐标 - - y 字符串 32 - - errorCode 字符串 32 是 自定义故障码 - - errorMsg 字符串 256 否 自定义故障消息 - - extra JSON 对象 N/A 否 自定义扩展字段 - RCS-2000 V4.1 接口协议 对外发布 - - 响应部分 - -响应状态码 含义 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - -响应报文消息体 字段名 数据类型 最大字节数 是否必须 说明 - 业务数据 extra - JSON 对象 N/A 否 自定义扩展字段 - 专用消息码 code - 无 含义 - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - -POST /api/robot/reporter/robot/warning HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "taskWarnCode": "20210404UNICODE9", - "singleRobotCode": "f81***653", - "startTime": "2021-04-04T12:23:55Z", - "x": "1010.123", - "y": "2301.225678", - "errorCode": "ABCDXYZ-12345678", - "errorMsg": "遇到障碍物", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - -HTTP/1.1 200 OK -Content-Type: application/json;charset=UTF-8 -X-lr-request-id: 393****a6c1 -X-lr-trace-id: 605****8a0b -X-lr-version: v1.0 -Date: Fri, 26 Mar 2021 06:46:18 GMT - -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - -} - -2.2.8 任务异常告警上报接口 - -接口名称 任务异常告警上报接口 -接口说明 调度系统将导致任务运行中的严重告警推送给上层系统。 - 只推送一次 - - 请求部分 - -主机地址端口 物流机器人调度系统 - -服务前缀 - - 路径 /api/robot/reporter/task/warning -幂等性 是 - -请求方式 POST - -查询参数 参数名 数据类型 最大字节数 是否必须 说明 - 无 - -请求首部字段 字段名 数据类型 最大字节数 是否必须 说明 - 无 - - 参数名 数据类型 最大字节数 是否必须 说明 - - robotTaskCode 字符串 64 是 出现异常的任务唯一标识。 - 是 任务异常告警单号 - taskWarnCode 字符串 16 - -请求报文消息体 startTime 时间 N/A 是 初次出现故障的时间 - 否 正在执行任务的机器人唯一标识。 - singleRobotCode 字符串 16 是 自定义故障码 - 否 自定义故障消息 - errorCode 字符串 32 - - errorMsg 字符串 256 - - extra JSON 对象 N/A 否 自定义扩展字段 - - 响应部分 - -响应状态码 含义 - RCS-2000 V4.1 接口协议 对外发布 - -200 正常响应 - - 字段名 数据类型 最大字节数 是否必须 说明 - 无 -响应首部字段 - -响应报文消息体 字段名 数据类型 最大字节数 是否必须 说明 - 业务数据 extra - JSON 对象 N/A 否 自定义扩展字段 - 专用消息码 code - 无 含义 - -对象类型 参数名 JSON 对象结构 - 数据类型 最大字节数 是否必须 说明 - -无 - -请求样例: - - POST /api/robot/reporter/task/warning HTTP/1.1 -Host: 10.10.10.10:1010 -Authorization: Bearer 62c5****0af7 -X-lr-appkey: a4f********b324 -X-lr-version: v1.0 -X-lr-trace-id: 605****8a0b -X-lr-request-id: 393****a6c1 -Content-Type: application/json;charset=UTF-8 - - { - "taskWarnCode": "20210404UNICODE9", - "robotTaskCode": "27e****ba08", - "singleRobotCode": "f81***653", - "startTime": "2021-04-04T12:23:55Z", - "errorCode": "ABCDXYZ-12345678", - "errorMsg": "遇到障碍物", - "extra": null - - } - -响应样例: - RCS-2000 V4.1 接口协议 对外发布 - - HTTP/1.1 200 OK - Content-Type: application/json;charset=UTF-8 - X-lr-request-id: 393****a6c1 - X-lr-trace-id: 605****8a0b - X-lr-version: v1.0 - Date: Fri, 26 Mar 2021 06:46:18 GMT - - { - "code": "SUCCESS", - "message": "成功", - "data": { - "extra": null - } - - } - -3.任务下发接口调用示例 - -3.1 潜伏车通用流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "PF-CTU-COMMON", - "targetRoute": [{ - "type": "CARRIER", - "code": "jieb1" - }, { - "type": "STORAGE", - "code": "R900002A04011" - }], - "initPriority": 1 - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.2 潜伏车指定载具初始化流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "PF-LMR-INIT-CARRIER", - "targetRoute": [ - { - "type": "ZONE", - "code": "SL2", - }, - { - "type": "ZONE", - "code": "SL2", - "extra": { - "angleInfo": { - "code": "90" - } - } - } - ], - "initPriority": 10, - "extra": { - "carrierInfo": [{ - "carrierType": "5", - "carrierCode": "100004" - }] - }, - "interrupt": 0 - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.3 探测载具搬运流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "PF-DETECT-CARRIER", - "targetRoute": [ - { - "type": "ZONE", - "code": "SL2", - }, - { - "type": "ZONE", - "code": "SL2", - } - ], - "initPriority": 10, - "extra": { - "carrierInfo": [{ - "carrierType": "66" - }] - }, - "interrupt": 0 - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.4CTU 通用流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "PF-DETECT-CARRIER", - "targetRoute": [ - { - "type": "ZONE", - "code": "SL2", - }, - { - "type": "ZONE", - "code": "SL2", - } - ], - "initPriority": 10, - "extra": { - "carrierInfo": [{ - "carrierType": "66" - }] - }, - "interrupt": 0 - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.5CTU 工作站入库流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "PF-CTU-LOADER-IN", - "targetRoute": [{ - "type": "EQPT", - "code": "222" - }], - "initPriority": 1, - "extra": { - "carrierInfo": [{ - "carrierType": "3", - "carrierCode": "jieb1", - "layer": 0 - }, { - "carrierType": "3", - "carrierCode": "jieb2", - "layer": 1 - }, { - "carrierType": "3", - "carrierCode": "jieb3", - "layer": 2 - }, { - "carrierType": "3", - "carrierCode": "jieb4", - "layer": 3 - }] - } - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.6CTU 分拨墙出库流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "WMS-PF-CTU-ALLOC-WALL-OUT", - "targetRoute": [{ - "type": "CARRIER", - "code": "jieb1" - }, { - "type": "PTL_WALL", - "code": "900003" - }], - "initPriority": 1 - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.7CTU 分拨墙入库流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "WMS-PF-CTU-ALLOC-WALL-IN", - "targetRoute": [{ - "type": "STORAGE", - "code": "R900003A03021" - }], - "extra": { - "carrierInfo": [{ - "carrierType": "3", - "carrierCode": "jieb1" - }] - } - "initPriority": 1 - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.8CTU 输送线探测入库流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "PF-CTU-CONVEYOR-IN-DETECT", - "targetRoute": [{ - "type": "EQPT", - "code": "777" - }], - "initPriority": 1 - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.9CTU 输送线入库流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "PF-CTU-CONVEYOR-IN", - "targetRoute": [{ - "type": "EQPT", - "code": "777" - }], - "initPriority": 1, - "extra": { - "carrierInfo": [{ - "carrierType": "3", - "carrierCode": "901" - }] - } - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.10 叉车通用流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "PF-FMR-COMMON", - "targetRoute": [ - { - "type": "ZONE", - "code": "SL1", - }, - { - "type": "ZONE", - "code": "SL2", - } - ], - "initPriority": 10, - "interrupt": 0 - - } - RCS-2000 V4.1 接口协议 对外发布 - -3.11 滚筒车通用流程 - - POST /api/robot/controller/task/submit HTTP/1.1 - Host: 10.10.10.10:1010 - Authorization: Bearer 62c5****0af7 - X-lr-appkey: a4f********b324 - X-lr-version: v1.0 - X-lr-trace-id: 605****8a0b - X-lr-request-id: 393****a6c1 - Content-Type: application/json;charset=UTF-8 - - { - "taskType": "PF-CMR-COMMON", - "targetRoute": [ - { - "type": "SITE", - "code": "SL1", - }, - { - "type": "SITE", - "code": "SL2", - } - ], - "initPriority": 10, - "interrupt": 0 - - } - -4.更新说明 - -1.增加任务继续执行增强接口,支持多种触发方式 -2.增加任务下发接口示例 - diff --git a/wms-admin/src/main/resources/application-druid.yml b/wms-admin/src/main/resources/application-druid.yml index 2cb8449..95c31d7 100644 --- a/wms-admin/src/main/resources/application-druid.yml +++ b/wms-admin/src/main/resources/application-druid.yml @@ -8,7 +8,7 @@ spring: master: url: jdbc:mysql://localhost:3306/wms_chongqing_kafu?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root - password: root + password: 21#nS@NjJK20 # 从库数据源 slave: # 从数据源开关/默认关闭 diff --git a/wms-admin/src/main/resources/application.yml b/wms-admin/src/main/resources/application.yml index 69044d5..d972ac8 100644 --- a/wms-admin/src/main/resources/application.yml +++ b/wms-admin/src/main/resources/application.yml @@ -56,6 +56,7 @@ spring: basename: i18n/messages profiles: active: druid +# active: test # 文件上传 servlet: multipart: diff --git a/wms-basic/src/main/java/com/wms/basic/controller/TbArticleController.java b/wms-basic/src/main/java/com/wms/basic/controller/TbArticleController.java index c869481..1d84208 100644 --- a/wms-basic/src/main/java/com/wms/basic/controller/TbArticleController.java +++ b/wms-basic/src/main/java/com/wms/basic/controller/TbArticleController.java @@ -5,14 +5,12 @@ import com.wms.basic.domain.TbArticle; import com.wms.basic.domain.TbArticleExt; import com.wms.basic.domain.result.BasicArticle; import com.wms.basic.mapper.TbArticleMapper; -import com.wms.basic.service.ITbArticleExtService; import com.wms.basic.service.ITbArticleService; import com.wms.common.annotation.Log; import com.wms.common.core.controller.BaseController; import com.wms.common.core.domain.AjaxResult; import com.wms.common.core.page.TableDataInfo; import com.wms.common.enums.BusinessType; -import com.wms.common.utils.DateUtils; import com.wms.common.utils.StringUtils; import com.wms.common.utils.poi.ExcelUtil; import io.swagger.annotations.Api; @@ -23,10 +21,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; -import java.util.Date; import java.util.List; /** @@ -43,8 +39,7 @@ public class TbArticleController extends BaseController { private final ITbArticleService tbArticleService; private final TbArticleMapper articleMapper; - @Resource - private ITbArticleExtService articleExtService; + /** * 查询商品档案列表 @@ -105,17 +100,7 @@ public class TbArticleController extends BaseController { @PreAuthorize("@ss.hasPermi('basic:article:query')") @GetMapping(value = "/{articleId}") public AjaxResult getInfo(@ApiParam(value = "主键", required = true) @PathVariable("articleId") String articleId) { - final TbArticle tbArticle = tbArticleService.getById(articleId); - final TbArticleExt articleExt = articleExtService.getById(articleId); - tbArticle.setData1(articleExt.getData1()); - tbArticle.setData2(articleExt.getData2()); - tbArticle.setData3(articleExt.getData3()); - tbArticle.setData4(articleExt.getData4()); - tbArticle.setData5(articleExt.getData5()); - tbArticle.setData6(articleExt.getData6()); - tbArticle.setData7(articleExt.getData7()); - tbArticle.setData8(articleExt.getData8()); - return AjaxResult.success(tbArticle); + return AjaxResult.success(tbArticleService.getById(articleId)); } /** @@ -126,18 +111,6 @@ public class TbArticleController extends BaseController { @Log(title = "商品档案", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody TbArticle tbArticle) { - final TbArticleExt articleExt = TbArticleExt.builder().articleId(tbArticle.getArticleId()) - .data1(tbArticle.getData1()) - .data2(tbArticle.getData2()) - .data3(tbArticle.getData3()) - .data4(tbArticle.getData4()) - .data5(tbArticle.getData5()) - .data6(tbArticle.getData6()) - .data7(tbArticle.getData7()) - .data8(tbArticle.getData8()) - .data9(DateUtils.getNowDate()) - .build(); - articleExtService.save(articleExt); return toAjax(tbArticleService.save(tbArticle)); } diff --git a/wms-basic/src/main/java/com/wms/basic/domain/TbArticle.java b/wms-basic/src/main/java/com/wms/basic/domain/TbArticle.java index cc90a3b..9d47664 100644 --- a/wms-basic/src/main/java/com/wms/basic/domain/TbArticle.java +++ b/wms-basic/src/main/java/com/wms/basic/domain/TbArticle.java @@ -18,7 +18,7 @@ import java.util.Date; /** * 商品档案对象 tb_basic_article - * + * * @author zf * @date 2024-01-10 */ @@ -52,20 +52,12 @@ public class TbArticle extends BaseEntityPlus implements Serializable{ @Excel(name = "备注") private String remark; - /** 计量单位 */ - @ApiModelProperty("计量单位") - @TableField(exist = false) - private String data1; /** 物料分组 */ @ApiModelProperty("物料分组") @TableField(exist = false) private String data2; - /** 规格 */ - @ApiModelProperty("规格") - @TableField(exist = false) - private String data3; /** 物料类型 */ @ApiModelProperty("物料类型") @@ -77,20 +69,5 @@ public class TbArticle extends BaseEntityPlus implements Serializable{ @TableField(exist = false) private String data5; - /** 安全库存 */ - @ApiModelProperty("安全库存") - @TableField(exist = false) - private BigDecimal data6; - - /** 包装单位 */ - @ApiModelProperty("包装单位") - @TableField(exist = false) - private String data7; - - /** 包装容量 */ - @ApiModelProperty("包装容量") - @TableField(exist = false) - private BigDecimal data8; - } diff --git a/wms-basic/src/main/java/com/wms/basic/domain/TbArticleExt.java b/wms-basic/src/main/java/com/wms/basic/domain/TbArticleExt.java index d05b5bd..59420c5 100644 --- a/wms-basic/src/main/java/com/wms/basic/domain/TbArticleExt.java +++ b/wms-basic/src/main/java/com/wms/basic/domain/TbArticleExt.java @@ -19,7 +19,7 @@ import java.util.Date; /** * 物料扩展对象 tb_basic_article_ext - * + * * @author wms * @date 2024-01-10 */ diff --git a/wms-basic/src/main/java/com/wms/basic/domain/TbDeliveryDetail.java b/wms-basic/src/main/java/com/wms/basic/domain/TbDeliveryDetail.java index e0637ef..7522520 100644 --- a/wms-basic/src/main/java/com/wms/basic/domain/TbDeliveryDetail.java +++ b/wms-basic/src/main/java/com/wms/basic/domain/TbDeliveryDetail.java @@ -126,7 +126,7 @@ public class TbDeliveryDetail extends BaseEntityPlus implements Serializable{ /** 拣选状态::10-待拣, 20-已检 */ @ApiModelProperty("拣选状态::10-待拣, 20-已检") @Excel(name = "拣选状态::10-待拣, 20-已检") - private String data4 = "10"; + private String data4; /** 标识::0-未下发, 10-已下发 */ @ApiModelProperty("标识::0-未下发, 10-已下发") diff --git a/wms-basic/src/main/java/com/wms/basic/service/impl/TbArticleServiceImpl.java b/wms-basic/src/main/java/com/wms/basic/service/impl/TbArticleServiceImpl.java index 8f73b07..09aabeb 100644 --- a/wms-basic/src/main/java/com/wms/basic/service/impl/TbArticleServiceImpl.java +++ b/wms-basic/src/main/java/com/wms/basic/service/impl/TbArticleServiceImpl.java @@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.wms.basic.domain.TbArticle; +import com.wms.basic.domain.TbArticleExt; import com.wms.basic.domain.TbLabelCode; import com.wms.basic.domain.TbSku; import com.wms.basic.domain.vo.TbArticleVo; +import com.wms.basic.mapper.TbArticleExtMapper; import com.wms.basic.mapper.TbArticleMapper; import com.wms.basic.mapper.TbLabelCodeMapper; import com.wms.basic.mapper.TbSkuMapper; @@ -18,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -36,6 +39,9 @@ public class TbArticleServiceImpl extends ServiceImpl tbLabelCodes = tbLabelCodeMapper.selectList(Wrappers.lambdaQuery().eq(TbLabelCode::getData2, articleId)); - List specList = tbLabelCodes.stream() - .map(TbLabelCode::getData5) - .distinct() - .collect(Collectors.toList()); + List specList = new ArrayList<>(); + TbArticleExt tbArticleExt = tbArticleExtMapper.selectById(articleId); + String data4 = tbArticleExt.getData4(); + if ("成品".equals(data4)){ + specList.add(tbArticleExt.getData3()); + } else { + List tbLabelCodes = tbLabelCodeMapper.selectList(Wrappers.lambdaQuery().eq(TbLabelCode::getData2, articleId)); + specList = tbLabelCodes.stream() + .map(TbLabelCode::getData5) + .distinct() + .collect(Collectors.toList()); + } return AjaxResult.success(specList); } } diff --git a/wms-basic/src/main/java/com/wms/basic/service/impl/TbWarehouseStockServiceImpl.java b/wms-basic/src/main/java/com/wms/basic/service/impl/TbWarehouseStockServiceImpl.java index d446f35..634e7c6 100644 --- a/wms-basic/src/main/java/com/wms/basic/service/impl/TbWarehouseStockServiceImpl.java +++ b/wms-basic/src/main/java/com/wms/basic/service/impl/TbWarehouseStockServiceImpl.java @@ -56,54 +56,59 @@ public class TbWarehouseStockServiceImpl extends MPJBaseServiceImpl getStockList(TbWarehouseStock tbWarehouseStock) { - //和Mybatis plus一致,MPJLambdaWrapper的泛型必须是主表的泛型,并且要用主表的Mapper来调用 MPJLambdaWrapper wrapper = new MPJLambdaWrapper() - //查询主表全部字段 .selectAll(TbWarehouseStock.class) - //查询外表字段 .select(TbArticle::getArticleName) .select(TbArticle::getArticleId) .select(TbArticleExt::getData1) .select(TbArticleExt::getData7) .select(TbWarehouse::getDisplayName) .select(TbSku::getBatch) - //别名 - .selectAs(TbLabelCode::getData5, TbWarehouseStockVo::getSpec) - .selectAs(TbArticle::getArticleName, TbWarehouseStockVo::getArticleName) - .selectAs(TbArticleExt::getData1, TbWarehouseStockVo::getUnit) - .selectAs(TbArticleExt::getData7, TbWarehouseStockVo::getPackagingUnit) - .selectAs(TbWarehouse::getDisplayName, TbWarehouseStockVo::getWarehouseName) - .leftJoin(TbSku.class, TbSku::getSku, TbWarehouseStock::getSku) - .leftJoin(TbArticle.class, TbArticle::getArticleId, TbSku::getArticleId) - .leftJoin(TbArticleExt.class, TbArticleExt::getArticleId, TbSku::getArticleId) - .leftJoin(TbWarehouse.class, TbWarehouse::getWarehouseId, TbWarehouseStock::getWarehouseId) - .leftJoin(TbLabelCode.class, TbLabelCode::getLabelCodeId, TbWarehouseStock::getData7) - .eq(StringUtils.isNotEmpty(tbWarehouseStock.getWarehouseId()), TbWarehouseStock::getWarehouseId, tbWarehouseStock.getWarehouseId()) - .eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsExpired()), TbWarehouseStock::getIsExpired, tbWarehouseStock.getIsExpired()) - .eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsTemporary()), TbWarehouseStock::getIsTemporary, tbWarehouseStock.getIsTemporary()) - .eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsSluggish()), TbWarehouseStock::getIsSluggish, tbWarehouseStock.getIsSluggish()) - .like(StringUtils.isNotEmpty(tbWarehouseStock.getArticleId()), TbArticle::getArticleId, tbWarehouseStock.getArticleId()) - .and(StringUtils.isNotEmpty(tbWarehouseStock.getSku()), - MPJLambdaWrapper -> MPJLambdaWrapper.like(TbWarehouseStock::getSku, tbWarehouseStock.getSku()) - .or().like(TbArticle::getArticleName, tbWarehouseStock.getSku()) - .or().like(TbArticle::getArticleId, tbWarehouseStock.getSku())) - .like(StringUtils.isNotEmpty(tbWarehouseStock.getContainer()), TbWarehouseStock::getContainer, tbWarehouseStock.getContainer()) - .like(StringUtils.isNotEmpty(tbWarehouseStock.getEntryNo()), TbWarehouseStock::getEntryNo, tbWarehouseStock.getEntryNo()) - .like(StringUtils.isNotEmpty(tbWarehouseStock.getDeliveryNo()), TbWarehouseStock::getDeliveryNo, tbWarehouseStock.getDeliveryNo()) + // CASE WHEN 使用 alias:ext 与 lc + .select("CASE WHEN ext.data4 = '成品' THEN ext.data3 ELSE lc.data5 END AS spec") + .selectAs(TbArticle::getArticleName, TbWarehouseStockVo::getArticleName) + .selectAs(TbArticleExt::getData1, TbWarehouseStockVo::getUnit) + .selectAs(TbArticleExt::getData7, TbWarehouseStockVo::getPackagingUnit) + .selectAs(TbWarehouse::getDisplayName, TbWarehouseStockVo::getWarehouseName) + // 使用带 alias 的 join + .leftJoin(TbSku.class, TbSku::getSku, TbWarehouseStock::getSku) + .leftJoin(TbArticle.class, TbArticle::getArticleId, TbSku::getArticleId) + .leftJoin(TbArticleExt.class, "ext", TbArticleExt::getArticleId, TbSku::getArticleId) + .leftJoin(TbLabelCode.class, "lc", TbLabelCode::getLabelCodeId, TbWarehouseStock::getData7) + .leftJoin(TbWarehouse.class, TbWarehouse::getWarehouseId, TbWarehouseStock::getWarehouseId) + // dynamic where + .eq(StringUtils.isNotEmpty(tbWarehouseStock.getWarehouseId()), TbWarehouseStock::getWarehouseId, tbWarehouseStock.getWarehouseId()) + .eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsExpired()), TbWarehouseStock::getIsExpired, tbWarehouseStock.getIsExpired()) + .eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsTemporary()), TbWarehouseStock::getIsTemporary, tbWarehouseStock.getIsTemporary()) + .eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsSluggish()), TbWarehouseStock::getIsSluggish, tbWarehouseStock.getIsSluggish()) + .like(StringUtils.isNotEmpty(tbWarehouseStock.getArticleId()), TbArticle::getArticleId, tbWarehouseStock.getArticleId()) + .and(StringUtils.isNotEmpty(tbWarehouseStock.getSku()), wrapper2 -> wrapper2 + .like(TbWarehouseStock::getSku, tbWarehouseStock.getSku()) + .or().like(TbArticle::getArticleName, tbWarehouseStock.getSku()) + .or().like(TbArticle::getArticleId, tbWarehouseStock.getSku()) + ) + .like(StringUtils.isNotEmpty(tbWarehouseStock.getContainer()), TbWarehouseStock::getContainer, tbWarehouseStock.getContainer()) + .like(StringUtils.isNotEmpty(tbWarehouseStock.getEntryNo()), TbWarehouseStock::getEntryNo, tbWarehouseStock.getEntryNo()) + .like(StringUtils.isNotEmpty(tbWarehouseStock.getDeliveryNo()), TbWarehouseStock::getDeliveryNo, tbWarehouseStock.getDeliveryNo()) .like(StringUtils.isNotEmpty(tbWarehouseStock.getStorageBinId()), TbWarehouseStock::getStorageBinId, tbWarehouseStock.getStorageBinId()) - .like(StringUtils.isNotEmpty(tbWarehouseStock.getContainer()), TbWarehouseStock::getContainer, tbWarehouseStock.getContainer()) - .like(StringUtils.isNotEmpty(tbWarehouseStock.getSpec()), TbLabelCode::getData5, tbWarehouseStock.getSpec()) - .eq(StringUtils.isNotEmpty(tbWarehouseStock.getStockStatus()), TbWarehouseStock::getStockStatus, tbWarehouseStock.getStockStatus()) - .eq(Objects.nonNull(tbWarehouseStock.getPriority()), TbWarehouseStock::getPriority, tbWarehouseStock.getPriority()); + .and(StringUtils.isNotEmpty(tbWarehouseStock.getSpec()), wrapper2 -> wrapper2.like(TbLabelCode::getData5,tbWarehouseStock.getSpec()) + .or().like(TbArticleExt::getData3,tbWarehouseStock.getSpec())) + .eq(StringUtils.isNotEmpty(tbWarehouseStock.getStockStatus()), TbWarehouseStock::getStockStatus, tbWarehouseStock.getStockStatus()) + .eq(Objects.nonNull(tbWarehouseStock.getPriority()), TbWarehouseStock::getPriority, tbWarehouseStock.getPriority()); + if (Objects.nonNull(tbWarehouseStock.getParams())) { - wrapper.ge(Objects.nonNull(tbWarehouseStock.getParams().get("beginTime")), TbWarehouseStock::getCreateTime, tbWarehouseStock.getParams().get("beginTime")); - wrapper.le(Objects.nonNull(tbWarehouseStock.getParams().get("endTime")), TbWarehouseStock::getCreateTime, tbWarehouseStock.getParams().get("endTime")); + wrapper.ge(tbWarehouseStock.getParams().get("beginTime") != null, + TbWarehouseStock::getCreateTime, + tbWarehouseStock.getParams().get("beginTime")); + wrapper.le(tbWarehouseStock.getParams().get("endTime") != null, + TbWarehouseStock::getCreateTime, + tbWarehouseStock.getParams().get("endTime")); } - //连表查询 return this.selectJoinList(TbWarehouseStockVo.class, wrapper); } + @Override public List articleNumStatistics(String curDate, String oneMonth) { return this.baseMapper.articleNumStatistics(curDate, oneMonth); @@ -212,6 +217,11 @@ public class TbWarehouseStockServiceImpl extends MPJBaseServiceImpl tbLabelCodes = tbLabelCodeMapper.selectList(Wrappers.lambdaQuery() .eq(TbLabelCode::getData2, articleId) .eq(TbLabelCode::getData5, spec) @@ -222,10 +232,14 @@ public class TbWarehouseStockServiceImpl extends MPJBaseServiceImpl EnumStockStatus.NORMAL.getCode().equals(tbWarehouseStock.getStockStatus())); + boolean allNormal = tbWarehouseStocks.stream() + .allMatch(tbWarehouseStock -> EnumStockStatus.NORMAL.getCode() + .equals(tbWarehouseStock.getStockStatus())); // 全冻结库存 - boolean allFreeze = tbWarehouseStocks.stream().allMatch(tbWarehouseStock -> EnumStockStatus.FREEZE.getCode().equals(tbWarehouseStock.getStockStatus())); + boolean allFreeze = tbWarehouseStocks.stream() + .allMatch(tbWarehouseStock -> EnumStockStatus.FREEZE.getCode() + .equals(tbWarehouseStock.getStockStatus())); String stockStatus = ""; if (allNormal){ diff --git a/wms-message/src/main/java/com/wms/message/mail/domain/vo/MailLogRespVO.java b/wms-message/src/main/java/com/wms/message/mail/domain/vo/MailLogRespVO.java old mode 100644 new mode 100755 diff --git a/wms-pda/src/main/java/com/wms/pda/service/impl/PdaPickingServiceImpl.java b/wms-pda/src/main/java/com/wms/pda/service/impl/PdaPickingServiceImpl.java index 103069a..f13ac6e 100644 --- a/wms-pda/src/main/java/com/wms/pda/service/impl/PdaPickingServiceImpl.java +++ b/wms-pda/src/main/java/com/wms/pda/service/impl/PdaPickingServiceImpl.java @@ -4,14 +4,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.wms.basic.domain.*; import com.wms.basic.domain.vo.BasicSkuInfoVo; import com.wms.basic.mapper.*; +import com.wms.basic.service.ITbContainerService; import com.wms.basic.service.ITbSkuService; import com.wms.basic.service.ITbWarehouseStockLogService; import com.wms.basic.utils.ParameterValidationUtils; import com.wms.common.core.domain.AjaxResult; -import com.wms.common.enums.basic.EnumInUsing; -import com.wms.common.enums.basic.EnumLock; -import com.wms.common.enums.basic.EnumSceneMode; -import com.wms.common.enums.basic.EnumSceneType; +import com.wms.common.enums.basic.*; import com.wms.common.enums.basic.delivery.EnumDeliveryType; import com.wms.common.enums.basic.delivery.detail.EnumDeliveryDetailCarryStatus; import com.wms.common.enums.basic.stock.EnumStockStatus; @@ -92,6 +90,9 @@ public class PdaPickingServiceImpl implements IPdaPickingService { @Resource private TbDeliveryMapper tbDeliveryMapper; + @Resource + private ITbContainerService containerService; + /** * 拣货详情 * @@ -138,6 +139,7 @@ public class PdaPickingServiceImpl implements IPdaPickingService { */ @Override public AjaxResult pickingConfirm(String deliveryDetailId) { + //2025-2-15 变动 TbDeliveryDetail tbDeliveryDetail = tbDeliveryDetailMapper.selectById(deliveryDetailId); TbDelivery tbDelivery = tbDeliveryMapper.selectById(tbDeliveryDetail.getDeliveryNo()); if (EnumPickingStatus.B.getCode().equals(tbDeliveryDetail.getData4())){ @@ -153,29 +155,37 @@ public class PdaPickingServiceImpl implements IPdaPickingService { // 更新出库单数量表的已出库数量 Integer numId = tbDeliveryDetail.getNumId(); TbDeliveryNumber tbDeliveryNumber = tbDeliveryNumberMapper.selectById(numId); - BigDecimal alreadyOutNum = tbDeliveryNumber.getAlreadyOutNum(); - BigDecimal actualPickNum = tbDeliveryDetail.getData7(); - alreadyOutNum = alreadyOutNum.add(actualPickNum); - tbDeliveryNumberMapper.update( - new TbDeliveryNumber(), Wrappers.lambdaUpdate() - .set(TbDeliveryNumber::getAlreadyOutNum, alreadyOutNum) - .eq(TbDeliveryNumber::getNumId, numId) - ); + String container = tbDeliveryDetail.getContainer(); +// BigDecimal alreadyOutNum = tbDeliveryNumber.getAlreadyOutNum(); +// BigDecimal actualPickNum = tbDeliveryDetail.getData7(); +// alreadyOutNum = alreadyOutNum.add(actualPickNum); +// tbDeliveryNumberMapper.update( +// new TbDeliveryNumber(), Wrappers.lambdaUpdate() +// .set(TbDeliveryNumber::getAlreadyOutNum, alreadyOutNum) +// .eq(TbDeliveryNumber::getNumId, numId) +// ); // 更新或删除 库存 TbWarehouseStock tbWarehouseStock = tbWarehouseStockMapper.selectById(tbDeliveryDetail.getSequenceNo()); + if (tbDeliveryDetail.getDetailOutNum().compareTo(tbDeliveryDetail.getData7()) == 0){ - // 实发和实拣数量相同,删除库存,添加库存日志 + // 出库数量和实拣数量相同,删除库存,添加库存日志,容器空闲 tbWarehouseStockMapper.deleteById(tbWarehouseStock.getSequenceNo()); tbWarehouseStockLogService.addStockLog(tbWarehouseStock, EnumStockLogBizType.A.getCode(), EnumDeliveryType.getValue(tbDelivery.getDeliveryType()), tbWarehouseStock.getStockNum().negate(), tbDeliveryDetail.getDeliveryNo()); - // 更新明细拣货状态为无需回库 + + // 更新明细拣货状态为无需回库,搬运状态为已拣 tbDeliveryDetailMapper.update( new TbDeliveryDetail(), Wrappers.lambdaUpdate() .set(TbDeliveryDetail::getData4, EnumPickingStatus.D.getCode()) + .set(TbDeliveryDetail::getDetailCarryStatus, EnumDeliveryDetailCarryStatus.E.getCode()) .eq(TbDeliveryDetail::getDeliveryDetailId, deliveryDetailId) ); + //修改料箱(容器)状态 + containerService.update(new TbContainer(), Wrappers.lambdaUpdate().eq(TbContainer::getContainer, container).set(TbContainer::getContainerStatus, EnumContainerStatus.EMPTY.getCode())); + } else if (tbDeliveryDetail.getDetailOutNum().compareTo(tbDeliveryDetail.getData7()) > 0){ - // 实发小于实拣数量,更新库存,添加库存日志 + // 出库数量大于实拣数量,容器存储 + // 更新库存,添加库存日志,剩余库存数为出库数减实拣数 tbWarehouseStockMapper.update( new TbWarehouseStock(), Wrappers.lambdaUpdate() .set(TbWarehouseStock::getStockNum, tbDeliveryDetail.getDetailOutNum().subtract(tbDeliveryDetail.getReceiveQty())) @@ -184,9 +194,24 @@ public class PdaPickingServiceImpl implements IPdaPickingService { ); tbWarehouseStockLogService.addStockLog(tbWarehouseStock, EnumStockLogBizType.A.getCode(), EnumDeliveryType.getValue(tbDelivery.getDeliveryType()), tbDeliveryDetail.getReceiveQty().negate(), tbDeliveryDetail.getDeliveryNo()); - // 打印标签 + // 打印标签, pdaPrintService.printLabels(tbDeliveryDetail.getDetailOutNum().subtract(tbDeliveryDetail.getData7()), tbWarehouseStock); } + //更新出库单数量 + List tbDeliveryDetails = tbDeliveryDetailMapper. + selectList(Wrappers.lambdaQuery() + .eq(TbDeliveryDetail::getNumId,numId )); + + BigDecimal alreadyOutNum = BigDecimal.ZERO; + for (TbDeliveryDetail tbDeliveryDetail1 : tbDeliveryDetails) { + alreadyOutNum = alreadyOutNum.add(tbDeliveryDetail1.getReceiveQty()); + } + + tbDeliveryNumberMapper.update( + new TbDeliveryNumber(), Wrappers.lambdaUpdate() + .set(TbDeliveryNumber::getAlreadyOutNum, alreadyOutNum) + .eq(TbDeliveryNumber::getNumId, numId) + ); return AjaxResult.success(); } @@ -200,6 +225,7 @@ public class PdaPickingServiceImpl implements IPdaPickingService { */ @Override public AjaxResult reportProfitAndLoss(String deliveryDetailId, String type, BigDecimal number) { + //2025-2-15 变动 TbDeliveryDetail tbDeliveryDetail = tbDeliveryDetailMapper.selectById(deliveryDetailId); String sequenceNo = tbDeliveryDetail.getSequenceNo(); TbWarehouseStock tbWarehouseStock = tbWarehouseStockMapper.selectById(sequenceNo); @@ -225,16 +251,23 @@ public class PdaPickingServiceImpl implements IPdaPickingService { .set(TbWarehouseStock::getStockNum, physicalInventory) .eq(TbWarehouseStock::getSequenceNo, sequenceNo) ); - BigDecimal receiveQty = tbDeliveryDetail.getReceiveQty(); - if (physicalInventory.compareTo(receiveQty) < 0){ - receiveQty = physicalInventory; - } tbDeliveryDetailMapper.update( new TbDeliveryDetail(), Wrappers.lambdaUpdate() .set(TbDeliveryDetail::getDetailOutNum, physicalInventory) + .eq(TbDeliveryDetail::getDeliveryDetailId, deliveryDetailId) + ); + BigDecimal receiveQty = tbDeliveryDetail.getReceiveQty(); + if (physicalInventory.compareTo(receiveQty) < 0){ + receiveQty = physicalInventory; + + tbDeliveryDetailMapper.update( + new TbDeliveryDetail(), Wrappers.lambdaUpdate() + .set(TbDeliveryDetail::getReceiveQty, physicalInventory) .set(TbDeliveryDetail::getData7, receiveQty) .eq(TbDeliveryDetail::getDeliveryDetailId, deliveryDetailId) ); + } + tbErpStockDifference.setBreakeven("2"); } // 插入差异表数据 diff --git a/wms-third-party/src/main/java/com/wms/third/service/impl/TbThirdPartyOpenServiceImpl.java b/wms-third-party/src/main/java/com/wms/third/service/impl/TbThirdPartyOpenServiceImpl.java index 4fc5559..a9f5971 100644 --- a/wms-third-party/src/main/java/com/wms/third/service/impl/TbThirdPartyOpenServiceImpl.java +++ b/wms-third-party/src/main/java/com/wms/third/service/impl/TbThirdPartyOpenServiceImpl.java @@ -253,8 +253,12 @@ public class TbThirdPartyOpenServiceImpl implements ITbThirdPartyOpenService { ); // 添加库存日志 TbEntry tbEntry = tbEntryMapper.selectById(tbThirdPartyCarryTask.getBizNo()); + String taskType = "多余退库"; + if (Objects.nonNull(tbEntry)){ + taskType = EnumEntryType.getValue(tbEntry.getEntryType()); + } TbWarehouseStock tbWarehouseStock = tbWarehouseStockMapper.selectById(tbThirdPartyCarryTaskDetail.getSequenceNo()); - tbWarehouseStockLogService.addStockLog(tbWarehouseStock, EnumStockLogBizType.B.getCode(), EnumEntryType.getValue(tbEntry.getEntryType()), tbWarehouseStock.getStockNum(), tbThirdPartyCarryTask.getBizNo()); + tbWarehouseStockLogService.addStockLog(tbWarehouseStock, EnumStockLogBizType.B.getCode(), taskType, tbWarehouseStock.getStockNum(), tbThirdPartyCarryTask.getBizNo()); //如果是退料入库 调用关闭入库单接口 if (EnumCarryTaskBizType.IN_STORAGE_A.getCode().equals(tbThirdPartyCarryTask.getBizType())){ erpService.entryClose(tbThirdPartyCarryTask.getBizNo());