aslan-server/rc-service/lottery_system_init.sql
2025-10-21 17:34:07 +08:00

126 lines
5.7 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SQL
## 1.
```sql
CREATE TABLE lottery_activity (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
activity_code VARCHAR(50) UNIQUE NOT NULL COMMENT '活动编码',
activity_name VARCHAR(100) NOT NULL COMMENT '活动名称',
activity_desc VARCHAR(500) COMMENT '活动描述',
start_time DATETIME NOT NULL COMMENT '开始时间',
end_time DATETIME NOT NULL COMMENT '结束时间',
status TINYINT DEFAULT 0 COMMENT '状态0-未开始1-进行中2-已结束3-已关闭',
total_stock INT DEFAULT 0 COMMENT '总奖品库存',
consumed_stock INT DEFAULT 0 COMMENT '已消耗库存',
draw_count_limit INT DEFAULT 0 COMMENT '每人抽奖次数限制0为不限制',
draw_count_cycle VARCHAR(20) COMMENT '次数限制周期DAILY-每天TOTAL-总计',
need_ticket TINYINT DEFAULT 0 COMMENT '是否需要抽奖券0-否1-是',
ticket_cost INT DEFAULT 1 COMMENT '每次消耗抽奖券数量',
sort_order INT DEFAULT 0 COMMENT '排序',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_status_time (status, start_time, end_time),
INDEX idx_code (activity_code)
) COMMENT '抽奖活动表';
```
## 2.
```sql
CREATE TABLE lottery_prize (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
activity_id BIGINT NOT NULL COMMENT '活动ID',
prize_code VARCHAR(50) NOT NULL COMMENT '奖品编码',
prize_name VARCHAR(100) NOT NULL COMMENT '奖品名称',
prize_type TINYINT NOT NULL COMMENT '奖品类型1-实物2-虚拟币3-优惠券4-积分5-谢谢参与',
prize_value DECIMAL(10,2) COMMENT '奖品价值/数量',
prize_image VARCHAR(200) COMMENT '奖品图片',
prize_level TINYINT COMMENT '奖品等级1-特等奖2-一等奖3-二等奖...',
total_stock INT NOT NULL COMMENT '总库存',
remaining_stock INT NOT NULL COMMENT '剩余库存',
daily_stock INT DEFAULT 0 COMMENT '每日库存限制0为不限制',
probability DECIMAL(10,6) NOT NULL COMMENT '中奖概率0-1之间',
sort_order INT DEFAULT 0 COMMENT '排序(九宫格位置)',
is_display TINYINT DEFAULT 1 COMMENT '是否展示0-否1-是',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_activity (activity_id),
INDEX idx_code (prize_code),
UNIQUE KEY uk_activity_code (activity_id, prize_code)
) COMMENT '奖品配置表';
```
## 3.
```sql
CREATE TABLE lottery_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
record_no VARCHAR(50) UNIQUE NOT NULL COMMENT '记录编号',
user_id BIGINT NOT NULL COMMENT '用户ID',
activity_id BIGINT NOT NULL COMMENT '活动ID',
prize_id BIGINT COMMENT '奖品ID未中奖为NULL',
prize_name VARCHAR(100) COMMENT '奖品名称快照',
prize_type TINYINT COMMENT '奖品类型快照',
is_win TINYINT NOT NULL COMMENT '是否中奖0-未中奖1-中奖',
draw_time DATETIME NOT NULL COMMENT '抽奖时间',
prize_status TINYINT DEFAULT 0 COMMENT '奖品状态0-待发放1-已发放2-发放失败',
deliver_time DATETIME COMMENT '发放时间',
remark VARCHAR(500) COMMENT '备注',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_activity (user_id, activity_id),
INDEX idx_draw_time (draw_time),
INDEX idx_activity_win (activity_id, is_win),
INDEX idx_record_no (record_no)
) COMMENT '中奖记录表';
```
## 4.
```sql
CREATE TABLE lottery_ticket (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
ticket_source VARCHAR(50) COMMENT '来源SYSTEM-系统发放ACTIVITY-活动赠送PURCHASE-购买',
source_id VARCHAR(50) COMMENT '来源ID',
total_count INT NOT NULL COMMENT '总数量',
used_count INT DEFAULT 0 COMMENT '已使用数量',
remaining_count INT NOT NULL COMMENT '剩余数量',
expire_time DATETIME COMMENT '过期时间',
status TINYINT DEFAULT 1 COMMENT '状态0-已失效1-正常',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_status (user_id, status),
INDEX idx_expire (expire_time)
) COMMENT '抽奖券表';
```
## 5. 使
```sql
CREATE TABLE lottery_ticket_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
ticket_id BIGINT NOT NULL COMMENT '抽奖券ID',
change_count INT NOT NULL COMMENT '变动数量(正数增加,负数减少)',
change_type TINYINT NOT NULL COMMENT '变动类型1-发放2-消耗3-过期4-退回',
lottery_record_id BIGINT COMMENT '关联的抽奖记录ID',
remark VARCHAR(200) COMMENT '备注',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user (user_id),
INDEX idx_ticket (ticket_id),
INDEX idx_lottery_record (lottery_record_id)
) COMMENT '抽奖券使用记录表';
```
## 6.
```sql
CREATE TABLE lottery_user_count (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
activity_id BIGINT NOT NULL COMMENT '活动ID',
draw_date DATE NOT NULL COMMENT '统计日期',
draw_count INT DEFAULT 0 COMMENT '抽奖次数',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_activity_date (user_id, activity_id, draw_date),
INDEX idx_user_activity (user_id, activity_id)
) COMMENT '用户抽奖次数统计表';
```