优惠券系统

优惠券系统 #

数据建模 #

表结构

  • 优惠券基本信息:优惠券名称、发放数量、有效时间、优惠券是否可叠加、每人限领张数、是否和其他促销同时使用(优惠优先级)、使用规则;
    • 使用规则可以包含在优惠券ID中,通过“位”表示具体规则。

优惠券发放 #

业务流程

  1. 运营创建优惠券后,由财务审核;
  2. 运营创建优惠券发放活动,关联优惠券并配置发放优惠券的活动页;
  3. 用户在活动页领券;
  4. 用户下单时使用优惠券完成支付,优惠券可以自动选择也可以由用户指定;
  5. 后台定时统计优惠券的使用情况,通过报表展示活动效果;

实现步骤

  1. 创建优惠券时,有n张券就往Redis队列塞入n条记录作为券池。可以将券池拆分为多个分区,降低并发量。
  2. 后台基于IP+用户ID的组合进行限流,为保证抢券公平性对请求进行排队。
  3. 用户在活动页领券,领券就是从队列中取出优惠券并和用户绑定。
  4. 券池数量定时同步到数据库中。
  5. 根据业务规则决定退回的优惠券是否还需参加发放。
  6. 全部发放完毕后可以在应用内缓存记录发放完毕,防止Redis热点。

优惠券退还规则

  • 用户下单未支付就取消订单,优惠券可退还;
  • 商家在订单未完成的情况下,发起退款操作,优惠券可退还;
  • 用户下单完成支付后申请退款,优惠券不退还。