一个简单抽奖功能的业务逻辑

本文介绍了产品经理关于抽奖功能的需求,包括每种奖品的中奖概率、保证中奖及奖品数量限制。在数据库设计上,涉及了奖品表的字段,并提出了一个初步的业务逻辑实现方案,通过查询剩余奖品并利用JavaScript的Math.random()生成随机数来确定中奖。然而,最初的方法存在处理相同中奖率奖品的问题,故提出按概率累计的方式确保准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

产品经理的业务需求是这样的:

抽奖界面:

 

需求:

1.其中每种奖品都有自己的中奖概率,可以相同,可以不同;

2.不会有不中奖的情况,最低奖品可以是积分;

3.每种奖品(除了最低奖品)的数量都是一定的,提前设定好;


设计:

数据库表设计(这些字段可能存在于多张表中):

id   percent   total_num(总数量)   remain_num(剩余数量)   。。。。

假设数据为:

1 0.001 10 10
2 0.005 50 50
3 0.100 100 100
4 1 null null

业务逻辑简单设计:

在数据库中取出所有还有余量的奖品信息,sql的过滤条件是:where remain_num != 0 or total_num is null order by percent asc;

使用js Math.random()随机数方法,获得一个0-1之间的随机数字:num;

定义一个变量:totalPercent,初始值为0,即总概率;<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值