抽奖活动的设计技术方案

发布于:2025-06-27 ⋅ 阅读:(11) ⋅ 点赞:(0)

1.前言

本文章是紧接着上一篇文章《简易版抽奖活动的设计技术方案-CSDN博客》中内容进行扩展,包含数据库模块的扩展,抽奖接口逻辑的设计进行扩展设计。

2.数据库设计的补充

在上一篇文章中,数据库结构我们进行设计,增加奖池表,奖项规则表,奖品发放表

a.奖池表

 奖池表中的主要字段如下所示,以前活动跟奖项是直接关联的,现在活动跟奖项是没有关联关系了,活动跟奖池有关联关系,奖池跟奖项有关联关系,1个活动对应多个奖池信息,1个奖池对应多个奖项信息

字段名 说明
id 主键id
name 奖池名字
activity_id 活动id

用户命中奖池的规则,可以在活动的规则表中进行设置。也可以有单独奖池规则的表,本人觉得可以方法放到活动的规则表中。

b.奖项规则表

在上一篇文章中活动有自己的活动规则表,那么奖项是不是也可以有自己的奖项规则,这些奖项规则可以跟奖项进行绑定,那么这个奖项规则表的主要数据结构可以是下面这种结构:

字段名 说明
id 主键id
prize_id 奖项id
rule_type 活动奖项规则
rule_value 活动奖项规则的值

c.奖项的发放记录表 

   当用户参与活动进行中奖之后,后面就要进行奖品信息的发放,因为奖品的不同,发放的形式不同。其主要的数据结构如下:

字段名 说明
id 主键id
record_id 中奖记录id
send_way

发放方式:线上发放 线下发放

send_result 发放结果:成功/失败
third_id 关联的第三方id

这里的third_id,如果是线下发放的话,那么可以存放物流编号等物流信息,如果是线上发放,线上发放的话,如果是发放如京豆,积分等虚拟资产的时候,那么这个三方id可以设置为京豆,积分等虚拟资产的三方id。

3.抽奖的主要逻辑

抽奖接口的流程图

3.1 请求参数的合法性校验

这里面包含:活动的有效性校验,传入的活动信息是否正确,活动的时间是否有效等活动的基础信息的校验,也包含用户参与活动的合法性校验,当前用户是否有资格参与这个活动,以及接口的风控校验,对用户的防刷等操作

3.2 活动规则的校验

这个节点的主要作用:通过活动id查询活动的规则,根据活动的规则进行校验用户是否可以有参与活动的权限,如果一个活动有多个规则的话,就需要对活动规则的列表进行遍历,只有所有的活动规则都校验成功之后才能进行下一步。

3.3获取奖池信息

这里是根据活动信息和用户信息进行获取活动对应的奖池信息,这里有可能会获取不到对应的奖池信息,如果获取不到奖池信息,那么可以直接返回未中奖的信息

3.4 获取奖项信息

 根据奖池信息获取奖项的列表,这里获取的奖项列表都是有库存的奖项,可以提前将奖项的库存给设置到redis缓存中,提升速度。如果有库存的奖项列表为空的话,则直接返回未中奖的信息

3.5 调用抽奖的算法

  此时就可以采用抽奖的算法进行抽奖,每个活动可以有不同的抽奖的算法,这个也是存放到活动的规则列表,也可以进行细化到奖池维度,每个奖池有自己的抽奖算法也是可以。这个就看自己的业务需求了。

3.6 奖项规则的判断

  在流程图中是先根据奖项规则筛选出哪些奖项可以进行参与抽奖,我们也可以在抽完奖之后,针对中奖的奖项,进行判断用户是否符合这个奖项的中奖规则。

3.7 奖项库存的更新

   这个在流程图中是没有体现出来的,这个奖项库存的扣减,可以先对redis中的库存进行扣减,然后通过MQ进行扣减数据库中的奖项库存。针对这个MQ要做好幂等操作,防止重复扣减。

3.8 奖品发放

这个是完全是可以进行异步发放的,但是异步的时候记得保证数据的一致性,别造成了重复发放的问题。


网站公告

今日签到

点亮在社区的每一天
去签到