WES 重构系列(四):出库调度正向链路梳理
文内的图示需要科学上网才能流畅查看,图床直接用了 GitHub。
一、WES 的出库是什么?
以电商履约链路为例,WES 在 WMS 的下游。
WES 的业务链路位置大致参考下图(做了一些简化):

那出库是什么呢?
简单来说就是把商品(货物)从仓库里面取出来去发货。
传统的仓储是人去仓库里面寻找货物并取货物,智能仓储(WES)是机器小车把仓库里面的货自动取出来给到人。
前者是人到货,后者是货到人。
那问题来了:
- WES 如何知道上游想要出库哪些商品呢?涉及到与上游系统交互
- WES 如何知道库内有哪些商品呢?涉及到商品模块
- WES 如何知道商品在仓库内的存放位置呢?设计到库存模块,仓储中有多级库存
- WES 如何去通知调度小车把商品取出来呢?涉及到调度模块,与车辆调度系统对接
- 如何更快速地完成出库呢?涉及到调度模块,与算法服务对接
- 最终如何把出库结果反馈给上游呢?涉及到与上游的交互
- 如果商品库存不足,缺货了,又该怎么办?涉及到内部异常机制处理,规则引擎
- ……
我们逐一来捋捋,内容非常多,有业务上的,也有技术上的。
本文我们先来梳理一下出库链路,后面再聊聊如何优化。
出库链路又分为正向链路和逆向链路,先说正向链路。
二、出库正向链路
我画了一张出库正向链路图,如下所示:

- 上游服务会通过商品同步接口,告知 WES 需要维护的商品内容。
- 之后会组箱(以料箱业务为例)、上架,此时库内会存在该商品的库存。
- 接着正式来到出库单链路:出库单提交,预占二级库存,生成出库作业单。
- 分三级库存与工作站槽位定时器:定时捞取待分配工作站的出库作业单,组装算法参数(三级库存、单据、工作站槽位信息、地图巷道……),调用算法接口,拿到库存分配与工作站分配结果,创建出库任务,预占三级库存
- 任务下发定时器:捞取出库任务表,组转调度任务信息,下发给服务 WCS,并更新出库任务表信息
- WCS 和下游车辆调度系统:调度车辆和货架,搬运信息上报给 WES,WES 根据搬运上报信息更新出库任务表
- 车辆和货架到达工作站:WES 根据到站消息,组装实操推送数据(商品、批次、任务、货架、库位、点位……)到 服务 STATION, 如果推送异常则按规则做回滚操作(调度小车离站、出库任务回滚、出库作业单回滚,生成新的出库作业单、解锁三级库存预占锁定……)
- STATION 加载任务,页面弹出出库实操
- STATION工作站拣选人员根据页面提示,扫码、拣货、封箱……全部分播完成,
- STATION 实操完毕,发送实操反馈消息给 WES
- WES 实操反馈监听收到 STATION 发来的实操反馈消息后,完结任务,通知下游车辆调度系统小车离站
- WCS 和下游车辆调度系统:收到离站通知,调度小车离站,并 mq 反馈料箱位置变更事件
- WCS 收到容器变更 mq 消息,更新库存信息
- WES 定时捞取出库单,按规则生成单据反馈信息,按单、按箱反馈上游,至此,正向链路完成数据闭环。
除此之外,出库链路一般还会有热度移位、静态组播、动态组播、超 A 不返库、QuickPick等等,比较垂直,有机会再聊。