04-砍价系统核心流程设计
参考资料:-
1. 砍价核心数据流程
2. 砍价规则生成流程
1 |
|
砍价活动示例:
每人最多砍 1 个商品(发起人)
每人最多帮砍 1 个商品(帮砍人)
前 10%位帮砍者,砍掉商品帮砍金额的 80%(活动砍价规则)
砍价商品示例:
商品原价 200、商品底价 19.9
固定模式(不校验附加规则):固定 10 人帮砍,发起人砍价成功
随机模式(需校验附加规则):
默认 10 人帮砍,发起人砍价成功
其中每有 5 人发起砍价:
2.1 随机出现 2 次,3 人进行帮砍,发起人砍价成功(用于生成砍价明细)
砍价规则 - 与商品1对1:
原价200、底价19.9、前10%砍掉帮砍金额的80%、10人帮砍可以砍价成功
附加规则 - 与商品1对1:
配置的循环次数10、每 5 人发起砍价、随机2次3人帮砍可以砍价成功(可多个)
砍价规则表:砍价金额明细
roleAmountdetails-> 商品添加时使用随机模式,即附加规则,会生成该砍价金额明细
核心算法:
- 通过配置文件配置的循环次数默认x,每y人发起砍价,生成1个递增倍数的数组(长度x+1,元素值y值倍数递增) array
如循环默认10次,每5人发起砍价:[1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
- 通过附加规则(随机x次y人帮砍,发起人砍价成功),生成1个人次列表(长度x,元素值均为y) list
如随机2次,3人帮砍,发起人砍价成功:{3, 3}
- 通过双重循环+随机数组生成random.ints()方法,生成砍价规则金额明细(长度(array.length-1) * list.size()) map
如array.length-1=10, list.size()=2, 生成的砍价规则金额明细 map 为{“22”:”3”,”44”:”3”,”34”:”3”,”13”:”3”,”46”:”3”,”14”:”3”,”36”:”3”,”37”:”3”,”16”:”3”,”49”:”3”,”28”:”3”,”18”:”3”,”29”:”3”,”1”:”3”,”3”:”3”,”7”:”3”,”8”:”3”,”41”:”3”,”31”:”3”,”21”:”3”}
用户砍价表:砍价金额明细
ubAmountdetails-> 在用户发起砍价时生成通过砍价规则表里的砍价金额明细,生成当前商品的砍价明细存入用户砍价表,帮砍时去查询取出对应值
核心算法:(模拟砍价)
- 计算金额 price
第1部分 list 为前面配置一定比例帮砍者可砍掉帮砍金额的百分比 * 帮砍金额
第2部分 list 剩余需要帮砍的金额
如帮砍金额=200-19.9=180.1,第1部分 (200-19.9)*80%=144, 第2部分 (200-19.9)-144=36.1, 即 144+36.1=180.1
- 生成随机数组 array
第1部分的帮砍金额,以1.5倍和0.5倍作为上下限通过 random.ints() 生成随机数组,长度为默认帮砍成功人数 * 该帮砍人次百分比(即这部分比例的人数)
第2部分的帮砍金额,同样方式生成数组,长度为默认帮砍成功人数 - 第1部分人数(即剩余人数)
如 第1部分 1人,72~256之间的随机数数组, 如 [109]
如 第2部分 9人,18~54之间的随机数数组,如 [46, 30, 50, 46, 30, 50, 51, 19, 51]
- 将数组转为 list,经过模拟砍价后,生成list,拼接第1部分和第2部分的总 list
如默认10人帮砍,发起人砍价成功时的 用户帮砍金额明细 list = {14408, 382, 358, 363, 350, 325, 421, 545, 527, 331}, 总=18010
如随机x次3人帮砍,发起人砍价成功时的 用户帮砍金额明细 list = {14408, 1984, 1618}, 总=18010
3. 砍价发起 & 帮砍
4. 砍价成功下单
5. 仿拼多多砍价算法
1 |
|
砍价分配结果:
1 |
|