C 端抽奖 UI 效果:
一、抽奖活动模型
上图是大概的抽奖活动模型,可能一个抽奖活动会持续很多天,这里活动抽奖规则、奖励库存都采用的都是当日的概念,当然也可以采用活动持续时长的概念,具体看产品的意愿,毕竟产品大大说了算。
二、抽奖算法
2.1 随机概率
在奖励池随机一个作为用户奖励,这种方式实现起来很简单,但是产品不允许。为了吸引用户参与抽奖,一般会设置一些成本较高的奖励,这些成本较高的奖励肯定不希望被用户大概率抽到。
2.2 库存计算概率
奖励库存与中奖概率成正比,在很多场景下根据库存计算中奖概率也是一种比较好的选择。普通的奖励一般在后台会设置大量的库存,而成本较高的奖励可能只会设置个位数的库存。毕竟项目上线时不是由开发配置抽奖活动,不排除运营人员不清楚规则胡乱配置的可能,导致与预期不符。
2.3 指定中奖概率
用户能不能中奖严格按照后台各奖励的中奖概率计算,便于各业务线人员理解。
三、抽奖算法简单实现
随机概率比较简单,一行代码完事,这里就不说了。重点说下剩下两种算法的实现方式,实现细节是在”0 - 总库存“范围内生成一个随机数,然后把奖励库存分段,分段区间与奖励一一对应,随机数落在的那个分段区间对应的奖励为用户抽中的奖励。
下面是根据库存计算中奖概率的 demo,根据中奖概率计算同理。
public class LotteryDemo {
public static Random random = new Random();
public static List<LotteryRewardSku> rewardSkuList;
static {
rewardSkuList = Arrays.asList(new LotteryRewardSku(1L, 10), new