一、需求背景
1、线上测试时,订单预占库存导致“平衡库存”的2类策略,执行“调整可售数”时不准确
2、成因:前期JD对接人未说明“库存数量、订单预占”的关系、接口对应的参数,故为了避免影响上线,仅考虑了“库存数量”
3、现状:通过线上数据,验证了数据关系
二、已验证
(一)JD参数关系&业务含义:库存数量(改listing所有库存)=订单预占(listing出单锁定的库存)+锁定库存+可销售库存
1、考虑到业务中、API中,未出现参数“锁定库存”(JD未回复用途),预计是非业务情况,则暂时不考虑此参数
(二)API&页面的参数对应关系、业务含义
1、instockNum=库存数量
2、preLockNum=订单预占
(三)SKU有多个仓库,API出参格式是
-1,instockNum=4,preLockNum=2
-2,instockNum=5,preLockNum=5

三、补偿逻辑
(一)自动补货策略:条件-可售数
1、获取该listing所有可发货仓库的可售数,求和,得出listing总可售数【即,页面上的可销售库存】
2、各仓库可售数=instockNum-preLockNum【变更点】
E.g.下方listing的总可售数=(4-2)+(5-5)=2

(二)自动补货、防超卖策略:策略执行环节“调用API-调整可售数”。【为了保证listing总可售数=目标可售数(定义:策略执行的目标值)】【可接口调整的是instockNum;即,执行目标值=参数instockNum】
1、确认该listing的可售数差值=目标可售数-所有仓库可售数之和【仓库可售数=instockNum-preLockNum】
1.1“可售数差值”【后称差值】≥0
1.1.1以“中国默认仓”、storecode“-1”为“执行目标仓(定义:要修改的仓库)”
1.1.2以“差值+当前instock”【变动点;此场景未改动其他仓】为执行目标值
1.1.3以上述2者执行策略
E.g.按上述例子
策略目标可售数=20
差值=20-(4-2)-(5-5)=18
接口可调整的只有instockNum
当前instockNum=4,那么调用API的值=18+4=22
验证可售数:(22-2)-(5-5)=20
1.2“可售数差值”<0
1.2.1以“差值”遍历仓库(非“中国默认仓”优先),与仓库可售数做加法;
1.2.2新差值=旧差值+仓库可售数【仓库可售数=instockNum-preLockNum】
1.2.3新差值<0,记录“计算过的仓库”的“可售数=0”,以新值循环“1.2.2”
1.2.4新差值N≥0,停止,记录本轮循环的仓库、使“新差值N≥0”的前一个“差值M”【定义:≥0的新差值是新差值N,新差值N前一个差值是新差值M】
1.2.5以“计算过的仓库”为“执行目标仓”(可能有N个)
①记录“可售数=0”的仓库【当前instockNum-preLockNum=0】,以当前该仓库的“preLockNum”【变更点】为执行目标值,执行策略
②“触发1.2.4”的仓库,以“差值M+当前instock”【变更点】为执行目标值,执行策略
E.g.假设instockNum=24(-1仓)、25(-2仓),prolockNum=2、5
策略目标可售数=20
差值=20-(24-2)-(25-5)=-22
1、新差值M=-22+(25-5)=-2
2、新差值N=-2+(24-2)=20
那么调用API的值
1、-2仓:5
2、-1仓:当前instock+差值+=24+(-2)=22
验证可售数:(22-2)-(5-5)=20