抽奖开发思路

抽奖开发思路

先中奖,然后再抽奖品。

0、整个代码外包加分布式锁,开始抽奖

1、参数检查

  • 是否满足活动时间和场次
  • 是否满足抽奖次数
  • 是否满足库存校验

2、先拿到抽奖的配置参数,包括中奖率

  • 人工配置中奖率直接返回
  • 系统中奖率,则要计算总库存和总时间比
BigDecimal initStockTimeRatio = properties.getInitStockTimeRatio(); //初始库存时间比
BigDecimal nowStockTimeRatio = new BigDecimal(totalRestInventory / totalRestMinute);
BigDecimal dynamicWaveValue = nowStockTimeRatio.divide(initStockTimeRatio, 3, BigDecimal.ROUND_HALF_UP);//动态波动值
BigDecimal systemWinPrizeRate = dynamicWaveValue.multiply(new BigDecimal(properties.getWinPrizeRate()));

3、进行抽奖,取[1-100]随机数,看是否在中奖率范围内。

4、插入”抽奖日志”,只是记录中奖了,并没有记录什么奖品。

5、分配奖品,根据奖品配置为用户分配奖品。

  • 奖品总剩余库存检查
  • 用户该奖品已中奖次数超过设置的可中奖次数,或者对应奖品无库存则选择默认奖品,以对应乐观锁锁不住的情况

6、插入”中奖日志”,记录中了什么奖品

7、更新奖品库存总库存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值