作者:王博文
部门:同城零售/运营支撑
一、背景
在一个实体商家的生产经营活动过程中,供应链是一个不可回避的话题。供应链贯穿了整个商家的生产销售环节,一个好的供应链,能够让商家的经营活动效率提升、成本降低。而有赞作为SaaS服务公司,在为零售商家提供服务的过程中,自然接收到了商家对供应链管理相关的诉求,为达成帮助每一位重视产品和服务的商家成功的使命,供应链也是我们要为商家提供的功能之一。
二、供应链业务模型
供应链业务的特点是重流程,业务链路比较复杂,举一个要货链路整体的业务流程 如上图是以角色为划分的一个从要货发起到要货满足的全业务流程图,基于商家不同的业务需求,在制定配货任务这里会执行不同的流程分支。同时在管理过程中不同的商家也会在业务节点的确认和执行的过程中有不同的要求,从这里可以看到供应链所体现出的长流程和复杂性。
三、供应链架构
3.1 供应链业务架构
库存需求计划:用于商家制定供应链计划以及对计划制定做辅助业务的数据信息。
库存需求:主要负责商家业务活动过程中的流程,通常是存在多方的交互,如采购订单包含供应商和入库仓库,调拨/配销包含出库方和入库方。
仓库作业:负责商家不需要进行外部协调的库内操作。
供应链主数据:用于管理基础主数据信息,如仓库信息,供应商数据,仓库库存,唯一码。
3.2 供应链应用间关系
接入层:接入的展示交互终端。
网关层:提供外部接口和内部接口的映射,对用户信息和权限做基础校验。
查询搜索:基于CQRS拆分出来的单据搜索查询模块。
业务系统:提供具体的业务功能
retail-stock:目前承载着库存主数据和库存需求的业务功能,随着后续业务功能和规模的发展,会从中继续拆分出其他系统。 retail-stock-purchase:承载着库存需求层的业务功能。 retail-stock-scm:用于负载供应链向销售端铺货关系和收发货的入口。
基础服务:提供基础设施。
3.3 供应链应用架构
库存系统: 采配系统: 展现层:负责数据信息展示和操作的入口。
服务聚合层:用来对接展现层,主要负责对公共服务的编排和数据信息的组装,来完成一次完整的业务操作。
公共服务层:业务流程的核心,用来提供领域模型和领域服务。
基础设施:提供通用的技术能力。
四、复杂性的解决方案
4.1 分而治之,梳理清楚各个业务的边界
针对供应链这种复杂业务场景,领域驱动设计是能比较好的能将其复杂度做一个拆解,将供应链划分为一个个子域并明确边界,这样做一是能够解决系统的复杂流程,后续不同行业的业务链路差异,也可以很好的通过串联各个领域进行组合,可以做到业务代码的复用。按照领域划分后,对整个要货链路的梳理如下:
4.2 流程编排,处理业务流程的差异
针对于不同商家的不同流程,我们会将每个业务操作原子化,每次操作完成后会发送一个事件消息,流程编排接收到事件消息后基于商家的配置来选择并执行下一个操作,这样每个操作更加纯粹,不会耦合业务编排的逻辑
4.3 操作内部功能抽象,解决操作内部的差异
上边的处理措施主要是解决商家流程的不同差异,那么对于商家一个业务操作本身的差异,也会对每个内部的业务操作进行抽象,通过策略模式来加载每个步骤要做的事情。
五、供应端与销售端之间的关系
5.1 业务模型
在传统的电商场景,电商对于商家来说只是一个销售渠道,那么销售库存也是直接设置在销售渠道上的一个数值,不过实际的零售商家使用场景来说,销售库存更多是基于他本身的库存信息,由于有赞本身提供供应链的业务,那么我们也会去做供应链库存向销售库存的一个转化:目前有赞库存的业务模型如图:
仓库库存层:供应链的库存模型,包含实物库存,占用库存,在途库存,计划库存。
调度库存层:调度库存层通过库存资源和供货关系计算来确定销售库存的数量。
1.库存资源:承接仓库库存的库存数量,会屏蔽掉仓库库存的很多库存类型,只会感知这个仓库可以使用的库存有哪些; 2.供货关系包含两个角色,分别是供货仓库(有仓储能力的单元,如仓库,门店)和销售渠道(有销售能力的单元,如门店,网店)。
销售库存层:各个销售渠道可以售卖的库存数量。
5.2下单扣减库存流程
由于存在一个仓库给多个渠道供货的场景,如果直接扣减销售库存的话,会为商家带来超卖的问题,所以在做交易库存扣减的时候,是直接扣减到调度库存的库存资源,然后触发销售库存的更新,销售库存更多是一个展示的功能
交易下单扣减库存的大致流程:
用户发起下单之后,由履约系统来查询调度层的供货关系和对应仓库的资源数据,再根据本身的一些路由规则,综合选择出哪个仓库来履约,确认好履约仓库后,交易侧携带着派单结果进行库存的扣减。在生单成功后,创建对应的履约单,由履约单来供应链创建发货任务。
六、总结与思考
本文整体介绍了一下供应链业务的复杂度,应对其复杂度的挑战所考虑的解决措施,以及供应链库存与销售库存的关系。不过目前对于供应链的业务编排上目前还是采用的异步事件消息的方式,这种方式目前带来比较大的问题就是对业务流程执行可读性较差,难以理解,目前也在对接有赞内部的流程引擎,通过流程的可视化来解决以上问题。
最后,有赞数据中台,长期招聘 数据仓库、数据产品、数据算法、基础组件、平台研发等方面的人才。欢迎加入我们,一起enjoy~ 简历投递邮箱:[email protected]。
招募优秀的你加入👇