文内的图示需要科学上网才能流畅查看,图床直接用了 GitHub。

一、WES 的出库是什么?

以电商履约链路为例,WES 在 WMS 的下游。
WES 的业务链路位置大致参考下图(做了一些简化):

那出库是什么呢?
简单来说就是把商品(货物)从仓库里面取出来去发货。
传统的仓储是人去仓库里面寻找货物并取货物,智能仓储(WES)是机器小车把仓库里面的货自动取出来给到人。
前者是人到货,后者是货到人。

那问题来了:

  1. WES 如何知道上游想要出库哪些商品呢?涉及到与上游系统交互
  2. WES 如何知道库内有哪些商品呢?涉及到商品模块
  3. WES 如何知道商品在仓库内的存放位置呢?设计到库存模块,仓储中有多级库存
  4. WES 如何去通知调度小车把商品取出来呢?涉及到调度模块,与车辆调度系统对接
  5. 如何更快速地完成出库呢?涉及到调度模块,与算法服务对接
  6. 最终如何把出库结果反馈给上游呢?涉及到与上游的交互
  7. 如果商品库存不足,缺货了,又该怎么办?涉及到内部异常机制处理,规则引擎
  8. ……

我们逐一来捋捋,内容非常多,有业务上的,也有技术上的。

本文我们先来梳理一下出库链路,后面再聊聊如何优化。

出库链路又分为正向链路和逆向链路,先说正向链路。

二、出库正向链路

我画了一张出库正向链路图,如下所示:

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

除此之外,出库链路一般还会有热度移位、静态组播、动态组播、超 A 不返库、QuickPick等等,比较垂直,有机会再聊。