第14节:抽奖活动订单流程设计

  • 操作总流程

┌──────────────────────────────────────────────────┐
│  raffle_activity (活动表)                          │
│  activity_id = 100301  活动名 = "双11抽奖"          │
│  stock_count = 10000   剩余库存 = 8723              │
│  activity_count_id = 1   strategy_id = 100006      │
│  state = "create"                                  │
└──────────────────┬───────────────────────────────┘
                   │
    ┌──────────────┼──────────────┐
    ▼              ▼              ▼
┌─────────────┐ ┌──────────────┐ ┌────────────────────┐
│raffle_activi│ │raffle_activi │ │raffle_activity_sku │
│ty_count     │ │ty_account    │ │                     │
│(次数配置)    │ │(用户账户)     │ │(SKU商品)             │
│             │ │              │ │                     │
│count_id=1   │ │userId=       │ │sku=9011             │
│total=100次  │ │  xiaofuge    │ │activity_id=100301   │
│day=2次/天   │ │total=100     │ │count_id=1           │
│month=60次/月│ │  剩余=97     │ │stock=5000            │
│             │ │day=2         │ │  剩余=4897           │
│             │ │  剩余=1      │ │                     │
│             │ │month=60      │ │                     │
│             │ │  剩余=58     │ │                     │
└─────────────┘ └──────┬───────┘ └────────────────────┘
                       │
          ┌────────────┼────────────┐
          ▼            ▼            ▼
    ┌───────────┐ ┌──────────┐ ┌──────────────┐
    │订单表      │ │账户流水表 │ │抽奖记录...     │
    │(分库分表)  │ │(分库分表) │ │              │
    └───────────┘ └──────────┘ └──────────────┘

 

  • 用户操作流程

    Step 1:买抽奖次数

    xiaofuge 看到活动,花积分买了 SKU 9011(一次购买 = 获得活动次数包):

    raffle_activity_order (订单表,按 userId hash 落到 db01/table_000)
    ┌────┬──────────┬──────────┬─────────────┬──────────────┬──────────────┬──────────┐
    │ id │ user_id  │ order_id │ activity_id │ strategy_id  │ order_time   │ state    │
    ├────┼──────────┼──────────┼─────────────┼──────────────┼──────────────┼──────────┤
    │  1 │ xiaofuge │382877096 │ 100301      │ 100006       │ 2024-03-09   │ used     │
    │    │          │    957   │             │              │  14:24:15    │          │
    │  2 │ xiaofuge │912345678 │ 100301      │ 100006       │ 2024-03-10   │ not_used │
    │    │          │    901   │             │              │  09:15:30    │          │
    └────┴──────────┴──────────┴─────────────┴──────────────┴──────────────┴──────────┘

    订单状态:not_used → 下单但还没领取次数 / used → 已领取 / expire → 过期

    Step 2:订单履约,次数到账

    第 1 笔订单变为 used 后,次数加到 xiaofuge 的账户:

    raffle_activity_account (账户表,同样按 userId hash)
    ┌────┬──────────┬──────────┬───────┬──────┬──────┬──────┬────────┬────────┐
    │ id │ user_id  │activity_id│total │剩余  │day   │剩余  │month   │剩余    │
    ├────┼──────────┼──────────┼───────┼──────┼──────┼──────┼────────┼────────┤
    │  1 │ xiaofuge │ 100301   │ 100  │  97  │  2   │  1   │  60    │  58    │
    └────┴──────────┴──────────┴───────┴──────┴──────┴──────┴────────┴────────┘

    解读:xiaofuge 总共拿了 100 次抽奖机会,今天已经用了 1 次(剩 1 次),本月用了 2 次(剩 58 次)。

    Step 3:账户流水

    每次账户变动都记流水:

    raffle_activity_account_flow_000 (流水表,分表)
    ┌────┬──────────┬──────────┬──────────┬──────────────┬──────────┐
    │ id │ user_id  │ flow_id  │flow_channel│  biz_id     │total_cnt │
    ├────┼──────────┼──────────┼──────────────┼──────────┼──────────┤
    │  1 │ xiaofuge │ F20240309│ activity    │ 382877096957│ +100    │
    │    │          │ 001      │ (活动领取)   │ (关联订单)   │         │
    │  2 │ xiaofuge │ F20240310│ activity    │ -            │ -1      │
    │    │          │ 002      │ (抽奖消耗)   │             │         │
    └────┴──────────┴──────────┴──────────────┴──────────┴──────────┘

posted @ 2026-08-05 11:19  超级无敌大帅比  阅读(4)  评论(0)    收藏  举报