WES 重构系列(二):领域划分之理货业务上浮
文末时序图与重构前后对比图需要科学上网才能流畅查看,图床直接用了 GitHub。
一、为什么要做业务上浮(收拢到 WES)?
早期 WES 的单据调度逻辑都在 WCS 服务里,但这样的领域划分其实存在一些问题:
-
WCS 的业务领域应该是车辆调度相关的,不应该涉及到单据调度的业务。
-
WCS 的代码与单据调度的代码都在一个服务里,两个团队开发起来,会互相影响发版。
-
WCS 代码量 40 多万行,代码复杂度高,单据调度的代码如果抽出去,能减少 WCS 的代码复杂度,提升编译和启动速度。
二、业务上浮的规划
2.8 版本和 2.9 版本下游硬件和车辆调度集群都是不兼容的,WES 也不要求做兼容设计,所以总体的可操作度会大许多。
原先 WES 内部存在理货单与理货作业单,WES 生成理货单后,将 WES 的理货单通过Feign 接口同步到 WCS,WCS 通过一些定时任务根据商品库存状况将理货单生成理货作业单,再生成理货下架与上架任务,最终将任务流转到WCS 的搬运层相关状态,分车、顶升、搬运到工作站。
先确定一下 WES 和 WCS 负责的业务领域:
WES: 商品、批次、包装、库存、单据(出库、入库、盘点、理货)……
WCS: 车辆、路径、地图……
所以我们可以把库存、单据调度相关的都上浮到 WES,改造内容具体包括:
-
数据表迁移
-
代码迁移
-
WES 与 WCS 的任务对接格式
三、数据表迁移
以货架到人理货业务为例,涉及到的表包括:
-
理货单
-
理货作业单(上架、下架共用)
-
理货作业单明细
-
理货作业单状态变更表
-
理货任务表
-
任务转态变更表
因为是跨版本升级,会重新开仓,所以这次升级无需考虑数据迁移的问题,直接迁移表结构就行,从 WCS 迁移至 WES 的库中。
四、代码迁移
4.1 理货作业单同步接口
WCS 接口废弃,测试完成后,相关代码删除
4.2 定时器迁移
主要涉及到以下几个定时器:
-
计算并生成理货作业单定时器
-
计算理货待下架库位,创建下架任务定时器
-
计算理货待上架库位,创建上架任务定时器
4.3 搬运信息推送逻辑
主要涉及:
-
货架搬运状态信息上报:顶升、开始搬运以及距离相关信息
-
实操推送逻辑:WES 收到到站 MQ 消息,WES 记录到站信息,并按业务分类推送实操到工作站,更新任务信息。
4.4 MQ 消息监听
主要涉及:
-
工作站下线消息监听
-
理货下架实操反馈消息监听
-
理货上架实操反馈消息监听
五、WES 与 WCS 的任务对接格式
使用 Feign 接口下发理货下架、上架任务。
不过这样的话就需要增加一个任务状态——WAITING_WCS:代表这个任务在 WES 的前置流程已经处理完毕,等待 WCS 调度搬运车辆。
六、业务上浮后系统数据链路时序图

七、DDD 视角下的重构前后对比
从 DDD 的角度分析,虽然我们没有用 DDD~
