yumi-golang/migrations/023_voice_room_red_packet.sql
2026-05-08 18:55:47 +08:00

108 lines
7.2 KiB
SQL
Raw Permalink 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.

SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS voice_room_red_packet_config (
id BIGINT NOT NULL COMMENT '主键ID' PRIMARY KEY,
sys_origin VARCHAR(32) NOT NULL COMMENT '系统来源',
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用语音房红包',
daily_send_limit INT NOT NULL DEFAULT 10 COMMENT '用户每日发红包次数上限',
delay_seconds INT NOT NULL DEFAULT 300 COMMENT '延迟红包可领取等待秒数',
refund_after_seconds INT NOT NULL DEFAULT 7200 COMMENT '红包领取开始后多少秒过期退款',
timezone VARCHAR(64) NOT NULL DEFAULT 'Asia/Riyadh' COMMENT '业务时区,用于每日限额统计',
amount_options VARCHAR(255) NOT NULL DEFAULT '15000,30000,70000,100000' COMMENT '可选红包总金额列表,逗号分隔',
count_options VARCHAR(255) NOT NULL DEFAULT '5,10,20,50' COMMENT '可选红包份数列表,逗号分隔',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_voice_room_red_packet_config (sys_origin)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='语音房红包配置表';
CREATE TABLE IF NOT EXISTS voice_room_region_country (
id BIGINT NOT NULL COMMENT '主键ID' PRIMARY KEY,
sys_origin VARCHAR(32) NOT NULL COMMENT '系统来源',
region_code VARCHAR(32) NOT NULL COMMENT '区域编码',
country_code VARCHAR(32) NOT NULL COMMENT '国家编码',
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用该国家区域映射',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_voice_room_region_country (sys_origin, country_code),
KEY idx_voice_room_region_country_region (sys_origin, region_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='语音房国家区域映射表';
CREATE TABLE IF NOT EXISTS voice_room_red_packet (
id BIGINT NOT NULL COMMENT '主键ID' PRIMARY KEY,
packet_no VARCHAR(64) NOT NULL COMMENT '红包业务编号',
request_id VARCHAR(128) NOT NULL COMMENT '客户端幂等请求ID',
sys_origin VARCHAR(32) NOT NULL COMMENT '系统来源',
room_id BIGINT NOT NULL COMMENT '语音房ID',
sender_user_id BIGINT NOT NULL COMMENT '发红包用户ID',
sender_region_code VARCHAR(32) NOT NULL COMMENT '发红包用户区域编码',
packet_mode VARCHAR(16) NOT NULL COMMENT '红包模式IMMEDIATE立即DELAYED延迟',
amount_mode VARCHAR(16) NOT NULL DEFAULT 'RANDOM' COMMENT '金额分配模式RANDOM随机',
total_amount BIGINT NOT NULL COMMENT '红包总金额,单位金币',
total_count INT NOT NULL COMMENT '红包总份数',
remain_amount BIGINT NOT NULL COMMENT '剩余未领取金额,单位金币',
remain_count INT NOT NULL COMMENT '剩余未领取份数',
claim_start_time DATETIME NOT NULL COMMENT '可开始领取时间',
expire_time DATETIME NOT NULL COMMENT '过期退款时间',
status VARCHAR(32) NOT NULL COMMENT '红包状态INIT/ACTIVE/FINISHED/EXPIRED/REFUNDED/REFUND_FAILED/FAILED',
send_wallet_event_id VARCHAR(128) NOT NULL COMMENT '发红包扣款钱包事件ID',
refund_wallet_event_id VARCHAR(128) DEFAULT NULL COMMENT '退款钱包事件ID',
refund_amount BIGINT NOT NULL DEFAULT 0 COMMENT '退款金额,单位金币',
refund_status VARCHAR(32) NOT NULL DEFAULT 'NONE' COMMENT '退款状态NONE/PENDING/SUCCESS/FAILED',
error_message VARCHAR(1024) DEFAULT NULL COMMENT '异常信息',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_voice_room_red_packet_no (packet_no),
UNIQUE KEY uk_voice_room_red_packet_request (request_id),
UNIQUE KEY uk_voice_room_red_packet_send_event (send_wallet_event_id),
KEY idx_voice_room_red_packet_room (sys_origin, room_id, create_time),
KEY idx_voice_room_red_packet_sender_day (sys_origin, sender_user_id, create_time),
KEY idx_voice_room_red_packet_expire (status, expire_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='语音房红包主表';
CREATE TABLE IF NOT EXISTS voice_room_red_packet_slice (
id BIGINT NOT NULL COMMENT '主键ID' PRIMARY KEY,
packet_id BIGINT NOT NULL COMMENT '红包主表ID',
packet_no VARCHAR(64) NOT NULL COMMENT '红包业务编号',
sort_no INT NOT NULL COMMENT '红包份额序号',
amount BIGINT NOT NULL COMMENT '份额金额,单位金币',
status VARCHAR(32) NOT NULL DEFAULT 'UNCLAIMED' COMMENT '份额状态UNCLAIMED/CLAIMING/CLAIMED/RELEASED',
claim_user_id BIGINT DEFAULT NULL COMMENT '领取用户ID',
claim_record_id BIGINT DEFAULT NULL COMMENT '领取记录ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_voice_room_red_packet_slice (packet_id, sort_no),
KEY idx_voice_room_red_packet_slice_claim (packet_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='语音房红包份额表';
CREATE TABLE IF NOT EXISTS voice_room_red_packet_claim (
id BIGINT NOT NULL COMMENT '主键ID' PRIMARY KEY,
packet_id BIGINT NOT NULL COMMENT '红包主表ID',
packet_no VARCHAR(64) NOT NULL COMMENT '红包业务编号',
slice_id BIGINT NOT NULL COMMENT '红包份额ID',
sys_origin VARCHAR(32) NOT NULL COMMENT '系统来源',
room_id BIGINT NOT NULL COMMENT '语音房ID',
user_id BIGINT NOT NULL COMMENT '领取用户ID',
user_region_code VARCHAR(32) NOT NULL COMMENT '领取用户区域编码',
amount BIGINT NOT NULL COMMENT '领取金额,单位金币',
wallet_event_id VARCHAR(128) NOT NULL COMMENT '领取入账钱包事件ID',
wallet_status VARCHAR(32) NOT NULL COMMENT '钱包入账状态PENDING/SUCCESS/FAILED',
error_message VARCHAR(1024) DEFAULT NULL COMMENT '异常信息',
claim_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '领取时间',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_voice_room_red_packet_claim_user (packet_id, user_id),
UNIQUE KEY uk_voice_room_red_packet_claim_event (wallet_event_id),
KEY idx_voice_room_red_packet_claim_packet (packet_id, claim_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='语音房红包领取记录表';
CREATE TABLE IF NOT EXISTS voice_room_red_packet_daily_counter (
id BIGINT NOT NULL COMMENT '主键ID' PRIMARY KEY,
sys_origin VARCHAR(32) NOT NULL COMMENT '系统来源',
user_id BIGINT NOT NULL COMMENT '用户ID',
day_key VARCHAR(16) NOT NULL COMMENT '统计日期格式yyyyMMdd',
send_count INT NOT NULL DEFAULT 0 COMMENT '当日已发送红包次数',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_voice_room_red_packet_daily (sys_origin, user_id, day_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='语音房红包每日发送计数表';