• 库存三层模型(中)


    我们以几个典型的业务场景来说明三层库存运用。

    库存模型自上而下变动场景:下单支付

    销售库存 调度层 WMS 物流公司 (1)下单,锁定销售库存 (2)支付,销售库存锁定转扣减 抛单 (3) 3.1 生成履约单。 3.2 定时任务调度。 如果仓库有货,锁定调度层库存,生成发货通知单 给wms 发货指令 (4)出库。生成出库单 (5)发货,生成物流运单 (5)ack ack (6) 冻结库存转扣减 销售库存 调度层 WMS 物流公司

    履约单:中央库存核心单据。买家支付后,订单模块派单给库存中心。 调度层先生成履约单。履约单的作用
    1 一个订单可能分多次履约。每一次履约生成一次发货单。可能存在部分有货的场景,分批次发货
    2 存在超卖的业务场景。买家支付后可能没有货发。先生成履约单,等有货后,再发货。
    3 削峰。双十一买家支付的并发很高,履约的业务流程很长,扛不住双十一的业务高峰。 先建履约单,再异步生成发货通知单。

    库存模型自下而上变动场景:调拨业务

    库存调拨就是两个仓库之间的货物相互调配。对于存在多个仓库或分支机构的企业来说,将货品在不同仓库之间进行调拨。

    • 发起调拨申请的时候,可能调出的仓库没货,要过几天有货了才会执行调拨。
    • 调出方可能要分批次出库。
    销售库存 调度层 WMS 物流公司 发起调拨申请单,并审批通过 (1) 锁定销售库存(?) 抛单 (2)3.1 生成履约单。 3.2 定时任务调度。 如果仓库有货,锁定调出方仓库库存, 生成调拨通知单 给wms 调拨指令 (3)出库。生成出库单 (4)发货,生成物流运单 ack ack (5)4.1 调出方仓库冻结的库存转扣减, 4.2 调入方仓库增加在途库存 销售库存 调度层 WMS 物流公司

    (1)锁定销售库存(?)
    是否要锁定销售库?取决于调拨是否对下单产生影响。取决于平台是否支持超卖(仓库没货也可以售卖),是否限定某区域买家只能从某个区域仓库发货,

    不锁定销售库存场景
    某平台全国有华南仓库和总仓。买家下单选择就近仓库发货,如果就近仓库无货从总仓发货。平台允许超卖。平台发起手机从总仓调出1000台到华南仓库。 在这种场景下,销售库存不需要锁定。

    调拨不锁定销售库存,物品导出仓库出库后不需要扣减销售库存,调入仓库签收入库后,也不需要增加销售。

    需要锁定销售库存场景
    某平台限制书籍类目仅支持区域库存发货,而且不允许超卖。某平台有华南仓库和北方仓库。平台从华南仓库调拨1000本书到北方仓库。发起调拨业务,需要锁定华南仓库对应的销售库存,华南仓库出库需要扣减对应的销售库存。 北方仓库签收入库需要增加北方仓库对应的销售库存。

    (2)履约
    需要履约单的原因:
    a 调拨单审批通过后仓库可能没货,需要等有货再给仓库发调拨指令。
    b 仓库可能货没有那么充足,需要分多次履约(出库)。

    (3-4). 【WMS】出库,生成出库单。发货生成物流运单。消息通知调度层:1 调出方仓库锁定的库存扣减出库的部分,增加调入方的在途库存。2 销售库存占用转扣减。
    (5). 【WMS】调入库存签收。做入库操作,增加实物库存的库存数。通知调度层。调度层处理:1 调入仓库在途减少。2 调入仓库库存增加。 (销售库存是否变动参考(1))

    统一语言

    业务对象英文概念解释
    销售库存sales_inventory销售库存层。
    履约单fullfillment_order调度层
    仓库库存inventory调度层
    在途库存调度层
    发货通知单delivery_order调度层.
    用来通知仓库执行出库操作的单据,是实物库存的单据。
    调拨通知单transfer_order调度层
    出库单waybillWMS
    运单WMS

    物理模型

    inventory in-transit_inventory fullfillment_order delivery_order delivery_order_detail transfer_order transfer_order_detail waybill 包含 包含 包含 包含 包含 包含

    1个履约单对应1到N个发货(通知)单
    存在从多个仓库的发货的场景,所以1个履约单对应1,n发货通知单。

    1个履约单对应1到N个调拨(通知)单
    存在调拨业务的时候,可能调出的仓库货物不足,允许分多次调拨。

    fullfillment_order (履约单)

    属性名数据类型说明
    idbigint主键非空
    codestring非空
    source_order_idbigint源订单号
    typestring销售订单,
    调拨单
    statusstring进行中,完成

    delivery_order (发货单)

    属性名数据类型说明
    idbigint主键非空
    codestring非空
    fullfillment_order_idbigint履约单id
    delivery_depot_idbigint发货仓库id
    delivery_addressstring收货地址。实际项目中需要对收货地址单独建模,因为不是核心模型,这里有string代替
    total_quantityint总数量
    outbound_quantityint累计出货数量
    delegate_typestring委托类型:0-普通,1-委托方,2-受托方。
    订单委托发货场景使用。当为委托方,仓库做虚拟发货处理,不会真实发货。
    statusstring状态:待发货 发货中 已完成 已关闭
  • 相关阅读:
    【LeetCode-SQL每日一练】——2. 第二高的薪水
    ArrayList、Vector和LinkedList比较
    华为高级技术专家多年经验分享微服务治理体系、架构及实践文档
    MySQL——DQL union合并、limit限制与DDL建表和删表
    《python》paramiko+paramiko实现远程通过ssh通道连接数据库
    【Redis】Java连接redis进行数据访问及项目的实例应用场景
    使用自开发的代理服务器解决 SAP UI5 FileUploader 上传文件时遇到的跨域访问错误试读版
    【SM6225】移动usb3 硬盘识别慢
    CodeTalker 踩坑实录
    SpringBoot第48讲:SpringBoot定时任务 - Spring Schedule实现方式
  • 原文地址:https://blog.csdn.net/u013603157/article/details/133519270