活动玩法 - 集签活动设计

1,226 阅读3分钟

集签玩法介绍

集签活动周期分为集签期和开奖期,集签期消耗抽签次数进行抽签,开奖期在集齐所有签后进行抽大奖:

  • 获取抽签次数途径:每日签到、邀请好友助力和浏览专区;
  • 获取签的途径:抽签、交换签(赠送和索取签)。

image.png

集签功能模块梳理

  • B端活动、签和大奖信息配置
  • 签到、浏览会场
  • 邀请助力
  • 抽签
  • 交换签(赠送和索取签)
  • 抽大奖

需求细节:

  1. 签到:每日签到一次,抽签次数+1,累加签到3、5天抽签次数+2;
  2. 浏览会场:每日浏览一次,抽签次数+1;
  3. 邀请助力:被助力后抽签次数+1,每个用户每天可被助力3次,已参与活动的用户不可进行助力;
  4. 抽签:每个用户抽到的前两张签不能重复,且只能抽到属于自己分组的签(用户和签有AB分组,刺激用户交换签);
  5. 交换签:用户单个签数量>=2时才能进行赠送签,一次只能赠送一张;用户缺少某个签时才能进行索取签;
  6. 抽大奖:用户集签所有签在抽奖期内进行抽大奖。

集签表结构设计

image.png

集签核心功能设计

邀请助力

  1. 用户A发起助力时,生成一条 '用户id<->分享码' 的映射纪录;
  2. 发到站外助力链接:http:xxxx/code={分享码};
  3. 用户B站外点击助力时,根据分享码查到对应的助力用户A,生成一条助力任务纪录,同时用户A的抽奖机会次数+1。

抽签

抽签时进行AB分组限制+概率限制+库存限制;

# 扣库存逻辑
update draw_info
set draw_send_number = draw_send_number + #{number}
where activity_id = #{activityId}
    and draw_id = #{drawId}
    and draw_send_number + #{number} <= draw_total_stock

交换签

1)赠送签

用户A赠送签x:

  1. check用户A签x的可用数量>=2;
  2. 生成一条交换签纪录(活动id,用户A,?,签x,赠送,交换码); 用户B领取签x:
  3. 根据交换码解析出一条交换纪录,判断是否完成;
  4. check用户A签x的可用数量>=2;
  5. 更新用户A的一条签x信息为不可用;
  6. 插入一条用户B签x信息;
  7. 更新交换纪录为已完成;

2)索取签

用户A索取签x:

  1. check用户A签x的可用数量=0;
  2. 生成一条交换签纪录(活动id,用户A,?,签x,索取,交换码);

用户B赠予签x:

  1. 根据交换码解析出一条交换纪录,判断是否完成;
  2. check用户B签x的可用数量>=2;
  3. 更新用户B的一条签x信息为不可用;
  4. 插入一条用户A签x信息。
  5. 更新交换纪录为已完成;

赠送/领取功能和索取/赠予功能可以分别合并为两个方法,增加参数type:标识是赠送或索取、领取或赠予。

抽大奖

同抽签逻辑;外加兜底奖品(阳光普照奖)

集签后记

  1. 分享码和交换码存在原因:暴露用户id到站外是很危险的事情;
  2. 所有的写操作都要加分布式锁,目的防重:key=活动id+用户id;
  3. 如果B端没有集签配置后台,预留后门接口,用于修改配置信息;
  4. 集签系统还涉及对接风控部门、财务部门和触达消息系统等,没有指出。