库存处理详细逻辑流程图
2022-01-01 11:41:17 0 举报
库存处理详细逻辑流程图,支持高并发占用库存
作者其他创作
大纲/内容
接收MQ,转化为占用库存的对象
否
将可用库存扣成负数的记录进行还锁定库存
同步调用
更新后查询可用、缺货库存
JITX的订单类型设置为不可缺货占用库存
是
以入参uuid为key加redis锁
异步调用:1.如果状态为处理成功,则继续查询处理明细,将处理结果以及明细发送MQ2.如果状态为处理中或者处理失败,则发送处理成功和处理失败的MQ,明细为空的集合
是否是JIT订单而且是正常占用库存
计算返回结果(1.正常占用库存;2.解除缺货;3.强制解除缺货);此处需要注意,1.是否可缺货发货;2.解除缺货必须有可用库存且有缺货库存才允许解除缺货;3.强制解除缺货不要求有可用库存,但是必须有缺货库存才允许解除缺货;4.允许缺货发货的订单解除缺货时可部分解除,如:需要解除的缺货数量大于缺货库存且小于可用库存,那么只允许解除缺货库存的数量,5.强制解除缺货同4类似,必须有缺货库存才允许解除缺货;6.不允许缺货的订单是不产生缺货库存的,故在强制解除缺货和解除缺货的时候不关注缺货库存
往数据库插入锁定结果明细(明细表)
同步调用:抛出异常
多仓的SKU占用库存(同一个单需要多仓占用库存的SKU的仓库顺序都是一样的,且仓库一样)
如果是异步调用需要发送mq
同步调用:1.如果状态为处理成功,则继续查询处理明细,将处理结果以及明细返回2.如果状态为处理中或者处理失败,则抛出处理中或者处理失败的异常
处理请求的SKU重所有无库存记录的SKU
不允许缺货的订单强制解除缺货无库存记录记录锁定增加的流水
占用库存成功的生成库存流水
更新库存表的锁定数量
如果是同步调用直接返回结果
异步调用:发送MQ(锁定库存处理状态:处理失败)
将需要在多仓占用库存的SKU逐个在多仓进行占用库存,记录占用成功的记录以及缺货记录(如最后还是缺货,将缺货库存记录在第一个仓)
记录占用库存的结果
处理结果是否为null
异步调用:发送MQ(锁定库存处理状态:处理中)
记录缺货单据、给第一个仓库增加缺货库存
是否所有SKU都无库存记录
将无库存记录的生成空的库存记录
将单仓的需要增加缺货库存的集合与多仓需要增加缺货库存的集合合并
入参是否正确
合并处理后的明细
以uuid查询处理结果
记录缺货增加/减少的单据记录
同步调用:抛出-10086(订单正在处理中,请稍后再试!)的异常,-10086编码不能随意更改,与调用方协议的编码
记录无库存的SKU
结束
不允许缺货的订单强制解除缺货无库存记录也让其强制解除缺货成功
往数据库插入一条锁定记录(主表)
查询入参中所有SKU的库存
根据计算结果,如有缺货的SKU,需要增加缺货数量、减少锁定数量
异步调用
记录操作后的流水
将有库存记录的SKU进行排序
单仓的SKU占用库存,记录占用库存成功的、缺货的占用记录
是否加锁成功
将请求参数分为两部分(单仓的SKU,多仓的SKU)
如有无库存的记录则调用外部接口获取仓库类型,无库存记录的插入空的库存
0 条评论
下一页