2026-06-18 17:13:56 +08:00

1626 lines
106 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.

SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 使用 utf8mb4 连接字符集,保证中文注释、中文名称和 emoji 在导入时不被降级。
CREATE DATABASE IF NOT EXISTS hyapp_activity DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE hyapp_activity;
CREATE TABLE IF NOT EXISTS activities (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
activity_id VARCHAR(96) NOT NULL COMMENT '活动 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, activity_id),
KEY idx_activities_status (app_code, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动实例表';
CREATE TABLE IF NOT EXISTS activity_event_consumption (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
event_id VARCHAR(96) NOT NULL COMMENT '事件幂等 ID',
event_type VARCHAR(96) NOT NULL COMMENT '事件类型',
source VARCHAR(64) NOT NULL COMMENT '来源',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
failure_reason VARCHAR(255) NULL COMMENT '失败原因',
consumed_at_ms BIGINT NULL COMMENT '消费时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, event_id),
KEY idx_activity_event_consumption_status (app_code, status),
KEY idx_activity_event_consumption_updated_at (app_code, updated_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动事件消费位点表';
CREATE TABLE IF NOT EXISTS activity_outbox (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
outbox_id VARCHAR(96) NOT NULL COMMENT '发件箱 ID',
event_type VARCHAR(96) NOT NULL COMMENT '事件类型',
payload BLOB NOT NULL COMMENT '业务负载快照',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
retry_count INT NOT NULL DEFAULT 0 COMMENT '重试次数',
next_retry_at_ms BIGINT NOT NULL COMMENT '下一次重试时间UTC epoch ms',
locked_by VARCHAR(128) NOT NULL DEFAULT '' COMMENT '当前锁定 worker',
lock_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT '锁过期时间UTC epoch ms',
last_error VARCHAR(512) NOT NULL DEFAULT '' COMMENT '最后一次失败原因',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, outbox_id),
KEY idx_activity_outbox_status_retry (app_code, status, next_retry_at_ms),
KEY idx_activity_outbox_lucky_retry (app_code, event_type, status, next_retry_at_ms, created_at_ms, outbox_id),
KEY idx_activity_outbox_lucky_lock (app_code, event_type, status, lock_until_ms, created_at_ms, outbox_id),
KEY idx_activity_outbox_retention (app_code, status, updated_at_ms, outbox_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动事件 outbox 表';
CREATE TABLE IF NOT EXISTS lucky_gift_rule_versions (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
pool_id VARCHAR(96) NOT NULL COMMENT '幸运礼物奖池 ID',
rule_version BIGINT NOT NULL COMMENT '不可变规则版本',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否启用',
target_rtp_ppm BIGINT NOT NULL COMMENT '基础返奖目标ppm',
pool_rate_ppm BIGINT NOT NULL COMMENT '每笔扣费进入基础奖池比例ppm',
settlement_window_wager BIGINT NOT NULL COMMENT 'RTP 结算窗口流水,单位金币',
control_band_ppm BIGINT NOT NULL COMMENT '正常波动带ppm',
gift_price_reference BIGINT NOT NULL COMMENT '配置参考礼物价格',
novice_max_equivalent_draws BIGINT NOT NULL DEFAULT 2000 COMMENT '新手阶段截止等价抽数,按累计金币/参考价格折算',
normal_max_equivalent_draws BIGINT NOT NULL DEFAULT 20000 COMMENT '正常阶段截止等价抽数,超过后进入高阶阶段',
max_single_payout BIGINT NOT NULL DEFAULT 50000 COMMENT '单次基础返奖上限,按参考价格配置',
user_hourly_payout_cap BIGINT NOT NULL DEFAULT 34200 COMMENT '单用户每小时基础返奖上限,按参考价格配置',
user_daily_payout_cap BIGINT NOT NULL DEFAULT 615600 COMMENT '单用户每日基础返奖上限,按参考价格配置',
device_daily_payout_cap BIGINT NOT NULL DEFAULT 1026000 COMMENT '单设备每日基础返奖上限,按参考价格配置',
room_hourly_payout_cap BIGINT NOT NULL DEFAULT 684000 COMMENT '单房间每小时基础返奖上限,按参考价格配置',
anchor_daily_payout_cap BIGINT NOT NULL DEFAULT 12312000 COMMENT '单主播每日基础返奖上限,按参考价格配置',
effective_from_ms BIGINT NOT NULL COMMENT '生效时间UTC epoch ms',
created_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '发布人',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, pool_id, rule_version),
KEY idx_lucky_gift_rule_versions_latest (app_code, pool_id, rule_version),
KEY idx_lucky_gift_rule_versions_enabled (app_code, enabled, created_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物 v2 规则版本表';
CREATE TABLE IF NOT EXISTS lucky_gift_stage_tiers (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
pool_id VARCHAR(96) NOT NULL COMMENT '幸运礼物奖池 ID',
rule_version BIGINT NOT NULL COMMENT '规则版本',
stage VARCHAR(32) NOT NULL COMMENT 'novice/normal/advanced',
tier_id VARCHAR(96) NOT NULL COMMENT '奖档 ID',
multiplier_ppm BIGINT NOT NULL COMMENT '倍率1x = 1000000',
base_weight_ppm BIGINT NOT NULL COMMENT '正常模式基础概率ppm',
reward_source VARCHAR(32) NOT NULL COMMENT 'base_rtp/activity_subsidy/presentation_only',
high_water_only TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否高水位才开放',
broadcast_level VARCHAR(32) NOT NULL DEFAULT 'none' COMMENT 'none/room/region/global',
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
PRIMARY KEY (app_code, pool_id, rule_version, stage, tier_id),
KEY idx_lucky_gift_stage_tiers_stage (app_code, pool_id, rule_version, stage)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物 v2 阶段奖档表';
CREATE TABLE IF NOT EXISTS lucky_rtp_windows (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
scope_type VARCHAR(32) NOT NULL COMMENT 'global 或 gift',
scope_id VARCHAR(96) NOT NULL COMMENT 'global 或规则作用域',
window_index BIGINT NOT NULL COMMENT 'RTP 窗口序号',
target_rtp_ppm INT NOT NULL COMMENT '窗口目标 RTP',
control_window_draws BIGINT NOT NULL COMMENT '窗口抽数',
paid_draws BIGINT NOT NULL DEFAULT 0 COMMENT '窗口已抽次数',
wager_coins BIGINT NOT NULL DEFAULT 0 COMMENT '窗口消耗金币',
target_payout_coins BIGINT NOT NULL COMMENT '窗口目标基础返奖',
actual_base_payout_coins BIGINT NOT NULL DEFAULT 0 COMMENT '窗口实际基础返奖',
carry_ppm BIGINT NOT NULL DEFAULT 0 COMMENT '整数除法余数',
status VARCHAR(32) NOT NULL DEFAULT 'open' COMMENT 'open/closed/underpaid',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, scope_type, scope_id, window_index),
KEY idx_lucky_rtp_windows_open (app_code, scope_type, scope_id, status, window_index)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物 RTP 控制窗口';
CREATE TABLE IF NOT EXISTS lucky_pools (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
scope_type VARCHAR(32) NOT NULL COMMENT 'platform/room/gift',
scope_id VARCHAR(96) NOT NULL COMMENT 'global/room_id/规则作用域',
balance BIGINT NOT NULL DEFAULT 0 COMMENT '当前可用水位',
reserve_floor BIGINT NOT NULL DEFAULT 0 COMMENT '安全水位',
total_in BIGINT NOT NULL DEFAULT 0 COMMENT '累计入池',
total_out BIGINT NOT NULL DEFAULT 0 COMMENT '累计基础返奖支出',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, scope_type, scope_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物三层基础奖池';
CREATE TABLE IF NOT EXISTS lucky_room_atmosphere_pools (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
room_id VARCHAR(96) NOT NULL COMMENT '房间 ID',
balance BIGINT NOT NULL DEFAULT 0 COMMENT '房间气氛可用预算',
reserve_floor BIGINT NOT NULL DEFAULT 0 COMMENT '安全水位',
total_in BIGINT NOT NULL DEFAULT 0 COMMENT '累计入池',
total_out BIGINT NOT NULL DEFAULT 0 COMMENT '累计气氛支出',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, room_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物房间气氛池';
CREATE TABLE IF NOT EXISTS lucky_activity_budgets (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
gift_id VARCHAR(96) NOT NULL COMMENT '奖池 ID当前列名沿用旧内部作用域名',
budget_day VARCHAR(32) NOT NULL COMMENT 'UTC 预算日__total__ 表示活动总预算',
budget_coins BIGINT NOT NULL DEFAULT 0 COMMENT '总补贴预算',
spent_coins BIGINT NOT NULL DEFAULT 0 COMMENT '已支出补贴',
daily_limit BIGINT NOT NULL DEFAULT 0 COMMENT '日支出上限',
daily_spent_coins BIGINT NOT NULL DEFAULT 0 COMMENT '当日已支出',
status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT 'active/paused/exhausted',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, gift_id, budget_day)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物活动补贴预算';
CREATE TABLE IF NOT EXISTS lucky_user_states (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
user_id BIGINT NOT NULL COMMENT '用户 ID',
gift_id VARCHAR(96) NOT NULL COMMENT '奖池 ID当前列名沿用旧内部作用域名',
paid_draws BIGINT NOT NULL DEFAULT 0 COMMENT '该用户幸运礼物累计付费抽数',
cumulative_wager_coins BIGINT NOT NULL DEFAULT 0 COMMENT '该用户在当前奖池累计消耗金币',
equivalent_draws BIGINT NOT NULL DEFAULT 0 COMMENT '累计金币按规则参考价格折算后的等价抽数',
loss_streak BIGINT NOT NULL DEFAULT 0 COMMENT '连续未获得可见奖励次数,中奖后清零',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, user_id, gift_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物用户体验池状态';
CREATE TABLE IF NOT EXISTS lucky_risk_counters (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
scope_type VARCHAR(32) NOT NULL COMMENT 'user/device/room/anchor',
scope_id VARCHAR(128) NOT NULL COMMENT '风控主体 ID',
window_type VARCHAR(32) NOT NULL COMMENT 'hour/day',
bucket_key VARCHAR(32) NOT NULL COMMENT 'UTC 窗口键',
payout_coins BIGINT NOT NULL DEFAULT 0 COMMENT '窗口内已支出可见奖励',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, scope_type, scope_id, window_type, bucket_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物风控窗口计数';
CREATE TABLE IF NOT EXISTS lucky_draw_records (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
draw_id VARCHAR(128) NOT NULL COMMENT '抽奖 ID',
command_id VARCHAR(128) NOT NULL COMMENT '幂等命令 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
device_id VARCHAR(128) NOT NULL COMMENT '设备 ID',
room_id VARCHAR(96) NOT NULL COMMENT '房间 ID',
anchor_id VARCHAR(96) NOT NULL COMMENT '主播关联 ID',
visible_region_id BIGINT NOT NULL DEFAULT 0 COMMENT '房间可见区域 ID',
pool_id VARCHAR(96) NOT NULL COMMENT '幸运礼物奖池 ID',
gift_id VARCHAR(96) NOT NULL COMMENT '礼物 ID',
coin_spent BIGINT NOT NULL COMMENT '消耗金币',
rule_version BIGINT NOT NULL COMMENT '规则版本',
experience_pool VARCHAR(32) NOT NULL COMMENT '体验池',
rtp_window_index BIGINT NOT NULL COMMENT '全站 RTP 窗口',
gift_rtp_window_index BIGINT NOT NULL COMMENT '礼物 RTP 窗口',
selected_tier_id VARCHAR(96) NOT NULL COMMENT '命中奖档',
base_reward_coins BIGINT NOT NULL DEFAULT 0 COMMENT '基础 RTP 返奖',
room_atmosphere_reward_coins BIGINT NOT NULL DEFAULT 0 COMMENT '房间气氛支出',
activity_subsidy_coins BIGINT NOT NULL DEFAULT 0 COMMENT '活动补贴支出',
effective_reward_coins BIGINT NOT NULL DEFAULT 0 COMMENT '用户可见总奖励',
budget_sources_json JSON NOT NULL COMMENT '预算来源',
stage_feedback TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否阶段反馈',
high_multiplier TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否高倍命中',
candidate_tiers_json JSON NOT NULL COMMENT '候选过滤快照',
pool_snapshot_json JSON NOT NULL COMMENT '奖池快照',
rtp_snapshot_json JSON NOT NULL COMMENT 'RTP 快照',
reward_status VARCHAR(32) NOT NULL COMMENT 'pending/granted/failed',
reward_transaction_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '返奖钱包交易 ID',
reward_failure_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '返奖失败原因',
paid_at_ms BIGINT NOT NULL COMMENT '扣费时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, draw_id),
UNIQUE KEY uk_lucky_draw_command (app_code, command_id),
KEY idx_lucky_draw_pool (app_code, pool_id, created_at_ms),
KEY idx_lucky_draw_user (app_code, user_id, created_at_ms),
KEY idx_lucky_draw_gift (app_code, gift_id, created_at_ms),
KEY idx_lucky_draw_room (app_code, room_id, created_at_ms),
KEY idx_lucky_draw_region_created (app_code, visible_region_id, created_at_ms, draw_id),
KEY idx_lucky_draw_status (app_code, reward_status, updated_at_ms),
KEY idx_lucky_draw_created (app_code, created_at_ms, draw_id),
KEY idx_lucky_draw_pool_status_summary (app_code, pool_id, reward_status, created_at_ms, draw_id),
KEY idx_lucky_draw_gift_status_summary (app_code, pool_id, gift_id, reward_status, created_at_ms, draw_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物抽奖事实';
CREATE TABLE IF NOT EXISTS lucky_draw_pool_stats (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
pool_id VARCHAR(96) NOT NULL COMMENT '幸运礼物奖池 ID',
gift_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '礼物 ID空值表示奖池汇总',
total_draws BIGINT NOT NULL DEFAULT 0 COMMENT '抽奖次数',
unique_users BIGINT NOT NULL DEFAULT 0 COMMENT '参与用户数',
unique_rooms BIGINT NOT NULL DEFAULT 0 COMMENT '参与房间数',
total_spent_coins BIGINT NOT NULL DEFAULT 0 COMMENT '消耗金币',
total_reward_coins BIGINT NOT NULL DEFAULT 0 COMMENT '返还金币',
base_reward_coins BIGINT NOT NULL DEFAULT 0 COMMENT '基础 RTP 返奖',
room_atmosphere_reward_coins BIGINT NOT NULL DEFAULT 0 COMMENT '房间气氛支出',
activity_subsidy_coins BIGINT NOT NULL DEFAULT 0 COMMENT '活动补贴支出',
pending_draws BIGINT NOT NULL DEFAULT 0 COMMENT '待发放数量',
granted_draws BIGINT NOT NULL DEFAULT 0 COMMENT '已发放数量',
failed_draws BIGINT NOT NULL DEFAULT 0 COMMENT '发放失败数量',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, pool_id, gift_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物池级汇总统计';
CREATE TABLE IF NOT EXISTS lucky_draw_pool_day_stats (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
stat_day DATE NOT NULL COMMENT 'UTC 统计日',
visible_region_id BIGINT NOT NULL DEFAULT 0 COMMENT '房间可见区域 ID',
pool_id VARCHAR(96) NOT NULL COMMENT '幸运礼物奖池 ID',
gift_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '礼物 ID空值表示奖池汇总',
draw_count BIGINT NOT NULL DEFAULT 0 COMMENT '抽奖次数',
turnover_coin BIGINT NOT NULL DEFAULT 0 COMMENT '消耗金币',
payout_coin BIGINT NOT NULL DEFAULT 0 COMMENT '用户可见返奖金币',
base_reward_coin BIGINT NOT NULL DEFAULT 0 COMMENT '基础 RTP 返奖',
room_atmosphere_reward_coin BIGINT NOT NULL DEFAULT 0 COMMENT '房间气氛支出',
activity_subsidy_coin BIGINT NOT NULL DEFAULT 0 COMMENT '活动补贴支出',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, stat_day, visible_region_id, pool_id, gift_id),
KEY idx_lucky_draw_pool_day_overview (app_code, stat_day, pool_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物 Databi 日维度汇总';
CREATE TABLE IF NOT EXISTS lucky_draw_pool_stat_users (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
pool_id VARCHAR(96) NOT NULL COMMENT '幸运礼物奖池 ID',
gift_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '礼物 ID空值表示奖池汇总',
user_id BIGINT NOT NULL COMMENT '用户 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, pool_id, gift_id, user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物汇总用户去重';
CREATE TABLE IF NOT EXISTS lucky_draw_pool_stat_rooms (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
pool_id VARCHAR(96) NOT NULL COMMENT '幸运礼物奖池 ID',
gift_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '礼物 ID空值表示奖池汇总',
room_id VARCHAR(96) NOT NULL COMMENT '房间 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, pool_id, gift_id, room_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物汇总房间去重';
CREATE TABLE IF NOT EXISTS lucky_draw_pool_stat_cursors (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
cursor_name VARCHAR(64) NOT NULL COMMENT '游标名称',
last_draw_created_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '最后已聚合 draw 创建时间',
last_draw_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '同一毫秒内最后已聚合 draw ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, cursor_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='幸运礼物后台统计快照游标';
CREATE TABLE IF NOT EXISTS wheel_rule_versions (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
wheel_id VARCHAR(96) NOT NULL COMMENT '转盘 ID',
rule_version BIGINT NOT NULL COMMENT '不可变规则版本',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否启用',
draw_price_coins BIGINT NOT NULL COMMENT '单抽价格,金币',
target_rtp_ppm BIGINT NOT NULL COMMENT '金币和礼物 RTP 目标ppm',
pool_rate_ppm BIGINT NOT NULL COMMENT '每笔消耗进入转盘基础奖池比例ppm',
settlement_window_draws BIGINT NOT NULL COMMENT 'RTP 观察窗口抽数',
initial_pool_coins BIGINT NOT NULL DEFAULT 0 COMMENT '初始奖池水位',
pool_reserve_coins BIGINT NOT NULL DEFAULT 0 COMMENT '奖池安全水位',
max_single_rtp_payout BIGINT NOT NULL DEFAULT 0 COMMENT '单次计入 RTP 的最大返奖',
effective_from_ms BIGINT NOT NULL COMMENT '生效时间UTC epoch ms',
created_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '发布人',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, wheel_id, rule_version),
KEY idx_wheel_rule_versions_latest (app_code, wheel_id, rule_version),
KEY idx_wheel_rule_versions_enabled (app_code, enabled, created_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转盘规则版本表';
CREATE TABLE IF NOT EXISTS wheel_prize_tiers (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
wheel_id VARCHAR(96) NOT NULL COMMENT '转盘 ID',
rule_version BIGINT NOT NULL COMMENT '规则版本',
tier_id VARCHAR(96) NOT NULL COMMENT '奖档 ID',
display_name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '展示名称快照',
reward_type VARCHAR(32) NOT NULL COMMENT 'coin/gift/prop/dress',
reward_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '礼物或道具资源 ID',
reward_count BIGINT NOT NULL DEFAULT 1 COMMENT '奖励数量',
reward_coins BIGINT NOT NULL DEFAULT 0 COMMENT '金币奖励金额',
rtp_value_coins BIGINT NOT NULL DEFAULT 0 COMMENT '计入 RTP 的奖励价值;道具装扮强制为 0',
weight_ppm BIGINT NOT NULL COMMENT '随机权重ppm 口径',
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
metadata_json JSON NOT NULL COMMENT '奖品展示和发放扩展快照',
PRIMARY KEY (app_code, wheel_id, rule_version, tier_id),
KEY idx_wheel_prize_tiers_rule (app_code, wheel_id, rule_version)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转盘奖档表';
CREATE TABLE IF NOT EXISTS wheel_rtp_windows (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
wheel_id VARCHAR(96) NOT NULL COMMENT '转盘 ID',
window_index BIGINT NOT NULL COMMENT 'RTP 窗口序号',
target_rtp_ppm BIGINT NOT NULL COMMENT '窗口目标 RTP',
control_window_draws BIGINT NOT NULL COMMENT '窗口抽数',
paid_draws BIGINT NOT NULL DEFAULT 0 COMMENT '已抽次数',
wager_coins BIGINT NOT NULL DEFAULT 0 COMMENT '消耗金币',
target_payout_coins BIGINT NOT NULL DEFAULT 0 COMMENT '目标返奖',
actual_rtp_value_coins BIGINT NOT NULL DEFAULT 0 COMMENT '实际计入 RTP 的返奖',
carry_ppm BIGINT NOT NULL DEFAULT 0 COMMENT '整数除法余数',
status VARCHAR(32) NOT NULL DEFAULT 'open' COMMENT 'open/closed',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, wheel_id, window_index),
KEY idx_wheel_rtp_windows_open (app_code, wheel_id, status, window_index)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转盘 RTP 观察窗口';
CREATE TABLE IF NOT EXISTS wheel_pools (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
wheel_id VARCHAR(96) NOT NULL COMMENT '转盘 ID',
balance BIGINT NOT NULL DEFAULT 0 COMMENT '当前可用水位',
reserve_floor BIGINT NOT NULL DEFAULT 0 COMMENT '安全水位',
total_in BIGINT NOT NULL DEFAULT 0 COMMENT '累计入池',
total_out BIGINT NOT NULL DEFAULT 0 COMMENT '累计 RTP 价值支出',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, wheel_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转盘基础奖池';
CREATE TABLE IF NOT EXISTS wheel_draw_records (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
draw_id VARCHAR(128) NOT NULL COMMENT '抽奖 ID',
command_id VARCHAR(128) NOT NULL COMMENT '幂等命令 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
device_id VARCHAR(128) NOT NULL COMMENT '设备 ID',
visible_region_id BIGINT NOT NULL DEFAULT 0 COMMENT '可见区域 ID',
wheel_id VARCHAR(96) NOT NULL COMMENT '转盘 ID',
coin_spent BIGINT NOT NULL COMMENT '消耗金币',
rule_version BIGINT NOT NULL COMMENT '规则版本',
rtp_window_index BIGINT NOT NULL COMMENT 'RTP 窗口',
selected_tier_id VARCHAR(96) NOT NULL COMMENT '命中奖档',
reward_type VARCHAR(32) NOT NULL COMMENT 'coin/gift/prop/dress',
reward_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '礼物或道具资源 ID',
reward_count BIGINT NOT NULL DEFAULT 0 COMMENT '奖励数量',
reward_coins BIGINT NOT NULL DEFAULT 0 COMMENT '金币奖励金额',
rtp_value_coins BIGINT NOT NULL DEFAULT 0 COMMENT '计入 RTP 的奖励价值',
candidate_tiers_json JSON NOT NULL COMMENT '候选过滤快照',
rtp_snapshot_json JSON NOT NULL COMMENT 'RTP 快照',
prize_metadata_json JSON NOT NULL COMMENT '奖品扩展快照',
reward_status VARCHAR(32) NOT NULL COMMENT 'pending/granted/failed',
reward_transaction_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '钱包或资产发放交易 ID',
reward_failure_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '发放失败原因',
paid_at_ms BIGINT NOT NULL COMMENT '扣费时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, draw_id),
UNIQUE KEY uk_wheel_draw_command (app_code, command_id),
KEY idx_wheel_draw_wheel (app_code, wheel_id, created_at_ms),
KEY idx_wheel_draw_user (app_code, user_id, created_at_ms),
KEY idx_wheel_draw_status (app_code, reward_status, updated_at_ms),
KEY idx_wheel_draw_created (app_code, created_at_ms, draw_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转盘抽奖事实';
CREATE TABLE IF NOT EXISTS wheel_draw_stats (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
wheel_id VARCHAR(96) NOT NULL COMMENT '转盘 ID',
total_draws BIGINT NOT NULL DEFAULT 0 COMMENT '抽奖次数',
unique_users BIGINT NOT NULL DEFAULT 0 COMMENT '参与用户数',
total_spent_coins BIGINT NOT NULL DEFAULT 0 COMMENT '消耗金币',
total_rtp_value_coins BIGINT NOT NULL DEFAULT 0 COMMENT '计入 RTP 的返奖价值',
pending_draws BIGINT NOT NULL DEFAULT 0 COMMENT '待发放数量',
granted_draws BIGINT NOT NULL DEFAULT 0 COMMENT '已发放数量',
failed_draws BIGINT NOT NULL DEFAULT 0 COMMENT '发放失败数量',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, wheel_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转盘后台汇总统计';
CREATE TABLE IF NOT EXISTS wheel_draw_stat_users (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
wheel_id VARCHAR(96) NOT NULL COMMENT '转盘 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, wheel_id, user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转盘统计用户去重';
CREATE TABLE IF NOT EXISTS im_broadcast_outbox (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
event_id VARCHAR(128) NOT NULL COMMENT '事件幂等 ID',
scope VARCHAR(32) NOT NULL COMMENT '范围',
group_id VARCHAR(64) NOT NULL COMMENT '分组 ID',
broadcast_type VARCHAR(64) NOT NULL COMMENT '广播类型',
payload_json JSON NOT NULL COMMENT '业务负载 JSON 快照',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
attempt_count INT NOT NULL DEFAULT 0 COMMENT '尝试次数',
next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一次重试时间UTC epoch ms',
last_error VARCHAR(512) NOT NULL DEFAULT '' COMMENT '最后一次失败原因',
locked_by VARCHAR(128) NOT NULL DEFAULT '' COMMENT '当前锁定 worker',
locked_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT '锁定截止时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, event_id),
KEY idx_im_broadcast_outbox_pending (app_code, status, next_retry_at_ms, created_at_ms, event_id),
KEY idx_im_broadcast_outbox_lock (app_code, status, locked_until_ms, created_at_ms, event_id),
KEY idx_im_broadcast_outbox_retention (app_code, status, updated_at_ms, event_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='IM 广播发件箱表';
CREATE TABLE IF NOT EXISTS task_definitions (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
task_id VARCHAR(96) NOT NULL COMMENT '任务 ID',
task_type VARCHAR(32) NOT NULL COMMENT '任务类型',
category VARCHAR(32) NOT NULL COMMENT '分类',
metric_type VARCHAR(64) NOT NULL COMMENT '指标类型',
title VARCHAR(160) NOT NULL COMMENT '标题',
description VARCHAR(512) NOT NULL DEFAULT '' COMMENT '描述信息',
audience_type VARCHAR(32) NOT NULL DEFAULT 'all' COMMENT '适用人群all/newbie',
icon_key VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'App 任务图标键',
icon_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'App 任务图标 URL',
action_type VARCHAR(64) NOT NULL DEFAULT 'none' COMMENT 'App 跳转类型',
action_param VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'App 跳转参数',
action_payload_json JSON NULL COMMENT 'App 跳转扩展 JSON',
dimension_filter_json JSON NULL COMMENT '任务事件维度过滤 JSON',
target_value BIGINT NOT NULL COMMENT '目标值',
target_unit VARCHAR(32) NOT NULL COMMENT '目标单位',
reward_coin_amount BIGINT NOT NULL COMMENT '奖励金币数量',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序权重,数值越小越靠前',
version BIGINT NOT NULL COMMENT '版本号',
current_task_version_id BIGINT NOT NULL DEFAULT 0 COMMENT '当前任务版本 ID',
effective_from_ms BIGINT NOT NULL DEFAULT 0 COMMENT '生效开始时间UTC epoch ms',
effective_to_ms BIGINT NOT NULL DEFAULT 0 COMMENT '生效结束时间UTC epoch ms',
created_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '创建管理员 ID',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, task_id),
KEY idx_task_definitions_visible (app_code, task_type, status, sort_order),
KEY idx_task_definitions_metric (app_code, metric_type, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务定义表';
CREATE TABLE IF NOT EXISTS task_definition_versions (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
task_version_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '任务版本 ID',
task_id VARCHAR(96) NOT NULL COMMENT '任务 ID',
version BIGINT NOT NULL COMMENT '版本号',
snapshot_json JSON NOT NULL COMMENT '配置快照 JSON',
effective_from_cycle VARCHAR(32) NOT NULL COMMENT '生效源周期',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
UNIQUE KEY uk_task_definition_versions_version (app_code, task_id, version),
KEY idx_task_definition_versions_task (app_code, task_id, task_version_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务定义版本表';
CREATE TABLE IF NOT EXISTS user_task_progress (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
user_id BIGINT NOT NULL COMMENT '用户 ID',
task_id VARCHAR(96) NOT NULL COMMENT '任务 ID',
task_version_id BIGINT NOT NULL COMMENT '任务版本 ID',
cycle_key VARCHAR(32) NOT NULL COMMENT '周期键',
progress_value BIGINT NOT NULL COMMENT '进度值',
target_value BIGINT NOT NULL COMMENT '目标值',
reward_coin_amount BIGINT NOT NULL COMMENT '奖励金币数量',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
completed_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '完成时间UTC epoch ms',
claimed_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '领取时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, user_id, task_id, cycle_key),
KEY idx_user_task_progress_user_cycle (app_code, user_id, cycle_key, status),
KEY idx_user_task_progress_task_cycle (app_code, task_id, cycle_key, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户任务进度表';
CREATE TABLE IF NOT EXISTS task_event_consumption (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
event_id VARCHAR(128) NOT NULL COMMENT '事件幂等 ID',
event_type VARCHAR(96) NOT NULL COMMENT '事件类型',
source_service VARCHAR(64) NOT NULL COMMENT '来源服务',
user_id BIGINT NOT NULL COMMENT '用户 ID',
task_day VARCHAR(32) NOT NULL COMMENT '任务天',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
metric_type VARCHAR(64) NOT NULL DEFAULT '' COMMENT '任务指标类型',
value_delta BIGINT NOT NULL DEFAULT 0 COMMENT '本次事件进度增量',
dimensions_json JSON NULL COMMENT '事件维度快照 JSON',
skip_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '跳过原因',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
consumed_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '消费时间UTC epoch ms',
PRIMARY KEY (app_code, event_id),
KEY idx_task_event_consumption_status (app_code, status, consumed_at_ms),
KEY idx_task_event_consumption_user_day (app_code, user_id, task_day)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务事件消费位点表';
CREATE TABLE IF NOT EXISTS task_reward_claims (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
claim_id VARCHAR(96) NOT NULL COMMENT '领取 ID',
command_id VARCHAR(128) NOT NULL COMMENT '业务命令幂等 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
task_id VARCHAR(96) NOT NULL COMMENT '任务 ID',
task_type VARCHAR(32) NOT NULL COMMENT '任务类型',
cycle_key VARCHAR(32) NOT NULL COMMENT '周期键',
reward_coin_amount BIGINT NOT NULL COMMENT '奖励金币数量',
wallet_command_id VARCHAR(128) NOT NULL COMMENT '钱包命令 ID',
wallet_transaction_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '钱包交易 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
failure_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '失败原因',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, claim_id),
UNIQUE KEY uk_task_reward_claim_command (app_code, command_id),
UNIQUE KEY uk_task_reward_claim_once (app_code, user_id, task_id, cycle_key),
KEY idx_task_reward_claim_status (app_code, status, updated_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务奖励领取表';
CREATE TABLE IF NOT EXISTS registration_reward_configs (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '启用',
reward_type VARCHAR(32) NOT NULL DEFAULT 'coin' COMMENT '奖励类型',
coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '金币数量',
resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT '资源分组 ID',
daily_limit BIGINT NOT NULL DEFAULT 0 COMMENT '每日限制',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='注册奖励配置表';
CREATE TABLE IF NOT EXISTS registration_reward_claims (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
claim_id VARCHAR(96) NOT NULL COMMENT '领取 ID',
command_id VARCHAR(128) NOT NULL COMMENT '业务命令幂等 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
reward_day VARCHAR(32) NOT NULL COMMENT '奖励天',
reward_type VARCHAR(32) NOT NULL COMMENT '奖励类型',
coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '金币数量',
resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT '资源分组 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
wallet_command_id VARCHAR(128) NOT NULL COMMENT '钱包命令 ID',
wallet_transaction_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '钱包交易 ID',
resource_grant_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '资源发放 ID',
failure_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '失败原因',
claimed_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '领取时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, claim_id),
UNIQUE KEY uk_registration_reward_command (app_code, command_id),
UNIQUE KEY uk_registration_reward_user_once (app_code, user_id),
KEY idx_registration_reward_list (app_code, created_at_ms, claim_id),
KEY idx_registration_reward_status (app_code, status, updated_at_ms),
KEY idx_registration_reward_day (app_code, reward_day, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='注册奖励领取表';
CREATE TABLE IF NOT EXISTS registration_reward_daily_counters (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
reward_day VARCHAR(32) NOT NULL COMMENT '奖励天',
reserved_count BIGINT NOT NULL DEFAULT 0 COMMENT '预留数量',
granted_count BIGINT NOT NULL DEFAULT 0 COMMENT '发放数量',
failed_count BIGINT NOT NULL DEFAULT 0 COMMENT '失败数量',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, reward_day)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='注册奖励每日计数表';
CREATE TABLE IF NOT EXISTS first_recharge_reward_configs (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '启用',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='首冲奖励配置表';
CREATE TABLE IF NOT EXISTS first_recharge_reward_tiers (
tier_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '首冲奖励档位 ID',
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
tier_code VARCHAR(64) NOT NULL COMMENT '档位编码',
tier_name VARCHAR(96) NOT NULL COMMENT '档位名称',
min_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '历史字段:最小充值金币数量',
max_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '最大充值金币数量0 表示无上限',
usd_minor_amount BIGINT NOT NULL DEFAULT 0 COMMENT 'Google 商品美元美分档位',
google_product_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Google Play 商品 ID',
discount_percent INT NOT NULL DEFAULT 0 COMMENT '展示优惠百分比,不参与结算',
resource_group_id BIGINT NOT NULL COMMENT '奖励资源分组 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序权重,数值越小越靠前',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
UNIQUE KEY uk_first_recharge_reward_tier_code (app_code, tier_code),
UNIQUE KEY uk_first_recharge_reward_google_product (app_code, google_product_id),
KEY idx_first_recharge_reward_tier_active (app_code, status, sort_order, usd_minor_amount)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='首冲奖励档位表';
CREATE TABLE IF NOT EXISTS first_recharge_reward_claims (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
claim_id VARCHAR(96) NOT NULL COMMENT '领取 ID',
event_id VARCHAR(128) NOT NULL COMMENT 'wallet_outbox 事件 ID',
transaction_id VARCHAR(96) NOT NULL COMMENT '充值交易 ID',
command_id VARCHAR(128) NOT NULL COMMENT '充值命令 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
tier_id BIGINT NOT NULL COMMENT '命中奖励档位 ID',
tier_code VARCHAR(64) NOT NULL COMMENT '命中奖励档位编码',
resource_group_id BIGINT NOT NULL COMMENT '奖励资源分组 ID',
tier_usd_minor_amount BIGINT NOT NULL DEFAULT 0 COMMENT '命中档位美元美分',
google_product_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '命中 Google Play 商品 ID',
recharge_coin_amount BIGINT NOT NULL COMMENT '充值金币数量',
recharge_usd_minor BIGINT NOT NULL DEFAULT 0 COMMENT '本次充值美元美分',
recharge_sequence BIGINT NOT NULL COMMENT '该用户充值序号',
recharge_type VARCHAR(64) NOT NULL DEFAULT '' COMMENT '充值来源类型',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
wallet_command_id VARCHAR(128) NOT NULL COMMENT '钱包发奖命令 ID',
wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '钱包资源发放 ID',
failure_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '失败原因',
recharged_at_ms BIGINT NOT NULL COMMENT '充值发生时间UTC epoch ms',
granted_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '发放时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, claim_id),
UNIQUE KEY uk_first_recharge_reward_event (app_code, event_id),
UNIQUE KEY uk_first_recharge_reward_transaction (app_code, transaction_id),
UNIQUE KEY uk_first_recharge_reward_user_tier (app_code, user_id, tier_id),
KEY idx_first_recharge_reward_list (app_code, created_at_ms, claim_id),
KEY idx_first_recharge_reward_status (app_code, status, updated_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='首冲奖励领取表';
CREATE TABLE IF NOT EXISTS cumulative_recharge_reward_configs (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '启用',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='累充奖励配置表';
CREATE TABLE IF NOT EXISTS cumulative_recharge_reward_tiers (
tier_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '累充奖励档位 ID',
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
tier_code VARCHAR(64) NOT NULL COMMENT '档位编码',
tier_name VARCHAR(96) NOT NULL COMMENT '档位名称',
threshold_usd_minor BIGINT NOT NULL COMMENT '达标美元金额,美分',
resource_group_id BIGINT NOT NULL COMMENT '奖励资源分组 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序权重,数值越小越靠前',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
UNIQUE KEY uk_cumulative_recharge_reward_tier_code (app_code, tier_code),
KEY idx_cumulative_recharge_reward_tier_sort (app_code, status, sort_order, threshold_usd_minor)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='累充奖励档位表';
CREATE TABLE IF NOT EXISTS cumulative_recharge_reward_events (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
event_id VARCHAR(128) NOT NULL COMMENT 'wallet_outbox 事件 ID',
cycle_key VARCHAR(16) NOT NULL COMMENT 'UTC 自然周',
user_id BIGINT NOT NULL COMMENT '用户 ID',
transaction_id VARCHAR(128) NOT NULL COMMENT '钱包交易 ID',
command_id VARCHAR(128) NOT NULL COMMENT '钱包命令 ID',
recharge_type VARCHAR(64) NOT NULL DEFAULT '' COMMENT '充值来源类型',
recharge_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '本次到账金币',
qualifying_usd_minor BIGINT NOT NULL DEFAULT 0 COMMENT '本次计入累充的美元美分',
payload_json JSON NULL COMMENT 'wallet 事件 payload',
occurred_at_ms BIGINT NOT NULL COMMENT '充值发生时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, event_id),
KEY idx_cumulative_recharge_reward_event_user_cycle (app_code, cycle_key, user_id, occurred_at_ms),
KEY idx_cumulative_recharge_reward_event_transaction (app_code, transaction_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='累充奖励充值事件幂等表';
CREATE TABLE IF NOT EXISTS cumulative_recharge_reward_progress (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
cycle_key VARCHAR(16) NOT NULL COMMENT 'UTC 自然周',
user_id BIGINT NOT NULL COMMENT '用户 ID',
total_usd_minor BIGINT NOT NULL DEFAULT 0 COMMENT '周期累计美元美分',
total_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '周期累计到账金币',
first_recharged_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '周期首笔充值时间',
last_recharged_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '周期最近充值时间',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, cycle_key, user_id),
KEY idx_cumulative_recharge_reward_progress_total (app_code, cycle_key, total_usd_minor)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='累充奖励用户周期累计表';
CREATE TABLE IF NOT EXISTS cumulative_recharge_reward_grants (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
grant_id VARCHAR(128) NOT NULL COMMENT '发放 ID',
cycle_key VARCHAR(16) NOT NULL COMMENT 'UTC 自然周',
user_id BIGINT NOT NULL COMMENT '用户 ID',
event_id VARCHAR(128) NOT NULL COMMENT '触发发放的 wallet_outbox 事件 ID',
transaction_id VARCHAR(128) NOT NULL COMMENT '触发发放的钱包交易 ID',
command_id VARCHAR(128) NOT NULL COMMENT '触发发放的钱包命令 ID',
tier_id BIGINT NOT NULL COMMENT '命中奖励档位 ID',
tier_code VARCHAR(64) NOT NULL COMMENT '命中奖励档位编码',
threshold_usd_minor BIGINT NOT NULL COMMENT '命中档位门槛,美分',
resource_group_id BIGINT NOT NULL COMMENT '奖励资源分组 ID',
reached_usd_minor BIGINT NOT NULL COMMENT '命中时累计金额,美分',
qualifying_usd_minor BIGINT NOT NULL DEFAULT 0 COMMENT '触发事件计入金额,美分',
recharge_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '触发事件到账金币',
recharge_type VARCHAR(64) NOT NULL DEFAULT '' COMMENT '触发事件充值来源类型',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
wallet_command_id VARCHAR(128) NOT NULL COMMENT '钱包发奖命令 ID',
wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '钱包资源发放 ID',
failure_reason VARCHAR(512) NOT NULL DEFAULT '' COMMENT '失败原因',
granted_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '发放时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, grant_id),
UNIQUE KEY uk_cumulative_recharge_reward_user_tier (app_code, cycle_key, user_id, tier_id),
UNIQUE KEY uk_cumulative_recharge_reward_wallet_command (app_code, wallet_command_id),
KEY idx_cumulative_recharge_reward_grant_event (app_code, event_id, status),
KEY idx_cumulative_recharge_reward_grant_user (app_code, cycle_key, user_id, created_at_ms),
KEY idx_cumulative_recharge_reward_grant_status (app_code, status, created_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='累充奖励发放表';
CREATE TABLE IF NOT EXISTS seven_day_checkin_configs (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '启用',
config_version BIGINT NOT NULL DEFAULT 0 COMMENT '配置版本',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='七日签到配置表';
CREATE TABLE IF NOT EXISTS seven_day_checkin_rewards (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
day_index INT NOT NULL COMMENT '天序号',
config_version BIGINT NOT NULL COMMENT '配置版本',
resource_group_id BIGINT NOT NULL COMMENT '资源分组 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, day_index),
KEY idx_seven_day_checkin_rewards_version (app_code, config_version)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='七日签到奖励表';
CREATE TABLE IF NOT EXISTS seven_day_checkin_config_versions (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
config_version BIGINT NOT NULL COMMENT '配置版本',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '启用',
snapshot_json JSON NOT NULL COMMENT '配置快照 JSON',
created_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '创建管理员 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, config_version)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='七日签到配置版本表';
CREATE TABLE IF NOT EXISTS user_seven_day_checkin_accounts (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
user_id BIGINT NOT NULL COMMENT '用户 ID',
cycle_no BIGINT NOT NULL COMMENT '周期编号',
cycle_start_day VARCHAR(32) NOT NULL COMMENT '周期开始天',
last_checkin_day VARCHAR(32) NOT NULL COMMENT '最后签到天',
last_day_index INT NOT NULL COMMENT '最后天序号',
config_version BIGINT NOT NULL COMMENT '配置版本',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, user_id),
KEY idx_user_seven_day_checkin_accounts_day (app_code, last_checkin_day)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户七日签到账户表';
CREATE TABLE IF NOT EXISTS seven_day_checkin_claims (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
claim_id VARCHAR(96) NOT NULL COMMENT '领取 ID',
command_id VARCHAR(128) NOT NULL COMMENT '业务命令幂等 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
cycle_no BIGINT NOT NULL COMMENT '周期编号',
checkin_day VARCHAR(32) NOT NULL COMMENT '签到天',
day_index INT NOT NULL COMMENT '天序号',
config_version BIGINT NOT NULL COMMENT '配置版本',
resource_group_id BIGINT NOT NULL COMMENT '资源分组 ID',
wallet_command_id VARCHAR(128) NOT NULL COMMENT '钱包命令 ID',
wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '钱包资源发放 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
failure_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '失败原因',
signed_at_ms BIGINT NOT NULL COMMENT '签收时间UTC epoch ms',
granted_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '发放时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, claim_id),
UNIQUE KEY uk_seven_day_checkin_command (app_code, command_id),
UNIQUE KEY uk_seven_day_checkin_user_day (app_code, user_id, checkin_day),
UNIQUE KEY uk_seven_day_checkin_user_cycle_day (app_code, user_id, cycle_no, day_index),
KEY idx_seven_day_checkin_claims_list (app_code, created_at_ms, claim_id),
KEY idx_seven_day_checkin_claims_status (app_code, status, updated_at_ms),
KEY idx_seven_day_checkin_claims_day (app_code, checkin_day, day_index)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='七日签到领取表';
CREATE TABLE IF NOT EXISTS growth_level_tracks (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
track VARCHAR(32) NOT NULL COMMENT '赛道',
name VARCHAR(96) NOT NULL COMMENT '名称',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序权重,数值越小越靠前',
display_config_json JSON NULL COMMENT '展示配置 JSON 配置或快照',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, track),
KEY idx_growth_level_tracks_status_sort (app_code, status, sort_order)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成长等级赛道表';
CREATE TABLE IF NOT EXISTS growth_level_rules (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
track VARCHAR(32) NOT NULL COMMENT '赛道',
level INT NOT NULL COMMENT '等级',
required_value BIGINT NOT NULL COMMENT '要求值',
name VARCHAR(96) NOT NULL COMMENT '名称',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
reward_resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT '奖励资源分组 ID',
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序权重,数值越小越靠前',
display_config_json JSON NULL COMMENT '展示配置 JSON 配置或快照',
created_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '创建管理员 ID',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, track, level),
KEY idx_growth_level_rules_active (app_code, track, status, level),
KEY idx_growth_level_rules_required (app_code, track, status, required_value)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成长等级规则表';
CREATE TABLE IF NOT EXISTS growth_level_tiers (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
tier_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '档位 ID',
track VARCHAR(32) NOT NULL COMMENT '赛道',
min_level INT NOT NULL COMMENT '最小等级',
max_level INT NOT NULL COMMENT '最大等级',
name VARCHAR(96) NOT NULL COMMENT '名称',
display_avatar_frame_resource_id BIGINT NOT NULL DEFAULT 0 COMMENT '展示头像框资源 ID',
display_badge_resource_id BIGINT NOT NULL DEFAULT 0 COMMENT '展示徽章资源 ID',
reward_resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT '奖励资源分组 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
display_config_json JSON NULL COMMENT '展示配置 JSON 配置或快照',
created_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '创建管理员 ID',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
UNIQUE KEY uk_growth_level_tiers_track_range (app_code, track, min_level, max_level),
KEY idx_growth_level_tiers_active (app_code, track, status, min_level, max_level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成长等级档位表';
CREATE TABLE IF NOT EXISTS user_growth_level_accounts (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
user_id BIGINT NOT NULL COMMENT '用户 ID',
track VARCHAR(32) NOT NULL COMMENT '赛道',
total_value BIGINT NOT NULL DEFAULT 0 COMMENT '总值',
current_level INT NOT NULL DEFAULT 0 COMMENT '当前等级',
current_tier_id BIGINT NOT NULL DEFAULT 0 COMMENT '当前档位 ID',
level_updated_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '等级更新时间UTC epoch ms',
tier_updated_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '档位更新时间UTC epoch ms',
version BIGINT NOT NULL DEFAULT 0 COMMENT '版本号',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, user_id, track),
KEY idx_user_growth_level_accounts_track_level (app_code, track, current_level, total_value)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户成长等级账户表';
CREATE TABLE IF NOT EXISTS growth_level_value_events (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
value_event_id VARCHAR(160) NOT NULL COMMENT '值事件 ID',
source_event_id VARCHAR(128) NOT NULL COMMENT '来源事件 ID',
source_service VARCHAR(64) NOT NULL COMMENT '来源服务',
source_event_type VARCHAR(96) NOT NULL COMMENT '来源事件类型',
user_id BIGINT NOT NULL COMMENT '用户 ID',
track VARCHAR(32) NOT NULL COMMENT '赛道',
metric_type VARCHAR(64) NOT NULL COMMENT '指标类型',
value_delta BIGINT NOT NULL COMMENT '值变动',
occurred_at_ms BIGINT NOT NULL COMMENT '业务发生时间UTC epoch ms',
dimensions_json JSON NULL COMMENT '维度 JSON 配置或快照',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, value_event_id),
KEY idx_growth_value_user_track (app_code, user_id, track, occurred_at_ms),
KEY idx_growth_value_source (app_code, source_service, source_event_type, source_event_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成长等级值事件表';
CREATE TABLE IF NOT EXISTS user_growth_level_history (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
history_id VARCHAR(96) NOT NULL COMMENT '历史 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
track VARCHAR(32) NOT NULL COMMENT '赛道',
previous_level INT NOT NULL COMMENT '原等级',
new_level INT NOT NULL COMMENT '新等级',
previous_tier_id BIGINT NOT NULL DEFAULT 0 COMMENT '原档位 ID',
new_tier_id BIGINT NOT NULL DEFAULT 0 COMMENT '新档位 ID',
total_value BIGINT NOT NULL COMMENT '总值',
value_event_id VARCHAR(160) NOT NULL COMMENT '值事件 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, history_id),
KEY idx_growth_history_user_track (app_code, user_id, track, created_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户成长等级历史表';
CREATE TABLE IF NOT EXISTS growth_level_reward_jobs (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
reward_job_id VARCHAR(96) NOT NULL COMMENT '奖励任务 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
track VARCHAR(32) NOT NULL COMMENT '赛道',
reward_source_type VARCHAR(32) NOT NULL COMMENT '奖励来源类型',
reward_source_id VARCHAR(96) NOT NULL COMMENT '奖励来源 ID',
resource_group_id BIGINT NOT NULL COMMENT '资源分组 ID',
wallet_command_id VARCHAR(128) NOT NULL COMMENT '钱包命令 ID',
wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '钱包资源发放 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
attempt_count INT NOT NULL DEFAULT 0 COMMENT '尝试次数',
next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一次重试时间UTC epoch ms',
locked_by VARCHAR(128) NOT NULL DEFAULT '' COMMENT '当前锁定 worker',
locked_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT '锁定截止时间UTC epoch ms',
failure_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '失败原因',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, reward_job_id),
UNIQUE KEY uk_growth_level_reward_once (app_code, user_id, track, reward_source_type, reward_source_id),
KEY idx_growth_level_reward_pending (app_code, status, next_retry_at_ms, created_at_ms),
KEY idx_growth_level_reward_user (app_code, user_id, track, created_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成长等级奖励任务表';
CREATE TABLE IF NOT EXISTS user_level_display_profiles (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
user_id BIGINT NOT NULL COMMENT '用户 ID',
wealth_level INT NOT NULL DEFAULT 0 COMMENT '财富等级',
wealth_tier_id BIGINT NOT NULL DEFAULT 0 COMMENT '财富档位 ID',
wealth_avatar_frame_resource_id BIGINT NOT NULL DEFAULT 0 COMMENT '财富头像框资源 ID',
wealth_badge_resource_id BIGINT NOT NULL DEFAULT 0 COMMENT '财富徽章资源 ID',
wealth_badge_source_level INT NOT NULL DEFAULT 0 COMMENT '财富徽章来源等级',
game_level INT NOT NULL DEFAULT 0 COMMENT '游戏等级',
game_tier_id BIGINT NOT NULL DEFAULT 0 COMMENT '游戏档位 ID',
game_avatar_frame_resource_id BIGINT NOT NULL DEFAULT 0 COMMENT '游戏头像框资源 ID',
game_badge_resource_id BIGINT NOT NULL DEFAULT 0 COMMENT '游戏徽章资源 ID',
game_badge_source_level INT NOT NULL DEFAULT 0 COMMENT '游戏徽章来源等级',
charm_level INT NOT NULL DEFAULT 0 COMMENT '魅力等级',
charm_tier_id BIGINT NOT NULL DEFAULT 0 COMMENT '魅力档位 ID',
charm_avatar_frame_resource_id BIGINT NOT NULL DEFAULT 0 COMMENT '魅力头像框资源 ID',
charm_badge_resource_id BIGINT NOT NULL DEFAULT 0 COMMENT '魅力徽章资源 ID',
charm_badge_source_level INT NOT NULL DEFAULT 0 COMMENT '魅力徽章来源等级',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户等级展示资料表';
SET @ddl := IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_level_display_profiles' AND COLUMN_NAME = 'wealth_badge_source_level') = 0,
'ALTER TABLE user_level_display_profiles ADD COLUMN wealth_badge_source_level INT NOT NULL DEFAULT 0 COMMENT ''财富徽章来源等级'' AFTER wealth_badge_resource_id',
'SELECT 1'
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @ddl := IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_level_display_profiles' AND COLUMN_NAME = 'game_badge_source_level') = 0,
'ALTER TABLE user_level_display_profiles ADD COLUMN game_badge_source_level INT NOT NULL DEFAULT 0 COMMENT ''游戏徽章来源等级'' AFTER game_badge_resource_id',
'SELECT 1'
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @ddl := IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'user_level_display_profiles' AND COLUMN_NAME = 'charm_badge_source_level') = 0,
'ALTER TABLE user_level_display_profiles ADD COLUMN charm_badge_source_level INT NOT NULL DEFAULT 0 COMMENT ''魅力徽章来源等级'' AFTER charm_badge_resource_id',
'SELECT 1'
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
INSERT INTO growth_level_tracks (app_code, track, name, status, sort_order, display_config_json, created_at_ms, updated_at_ms)
VALUES
('lalu', 'wealth', '财富等级', 'active', 10, JSON_OBJECT(), 0, 0),
('lalu', 'game', '游戏等级', 'active', 20, JSON_OBJECT(), 0, 0),
('lalu', 'charm', '魅力等级', 'active', 30, JSON_OBJECT(), 0, 0)
ON DUPLICATE KEY UPDATE
name = VALUES(name),
status = VALUES(status),
sort_order = VALUES(sort_order),
updated_at_ms = VALUES(updated_at_ms);
CREATE TABLE IF NOT EXISTS achievement_definitions (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
achievement_id VARCHAR(96) NOT NULL COMMENT '成就 ID',
collection_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '集合 ID',
collection_type VARCHAR(32) NOT NULL COMMENT '集合类型',
achievement_type VARCHAR(32) NOT NULL COMMENT '成就类型',
title VARCHAR(160) NOT NULL COMMENT '标题',
description VARCHAR(512) NOT NULL DEFAULT '' COMMENT '描述信息',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
version BIGINT NOT NULL DEFAULT 1 COMMENT '版本号',
primary_badge_resource_id BIGINT NOT NULL DEFAULT 0 COMMENT '主徽章资源 ID',
reward_resource_group_id BIGINT NOT NULL DEFAULT 0 COMMENT '奖励资源分组 ID',
auto_pin_policy VARCHAR(32) NOT NULL DEFAULT 'none' COMMENT '自动置顶策略',
honor_visibility TINYINT(1) NOT NULL DEFAULT 1 COMMENT '荣誉可见性',
effective_from_ms BIGINT NOT NULL DEFAULT 0 COMMENT '生效开始时间UTC epoch ms',
effective_to_ms BIGINT NOT NULL DEFAULT 0 COMMENT '生效结束时间UTC epoch ms',
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序权重,数值越小越靠前',
display_config_json JSON NULL COMMENT '展示配置 JSON 配置或快照',
created_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '创建管理员 ID',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, achievement_id),
KEY idx_achievement_definitions_visible (app_code, collection_type, status, sort_order),
KEY idx_achievement_definitions_effective (app_code, status, effective_from_ms, effective_to_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成就定义表';
CREATE TABLE IF NOT EXISTS achievement_conditions (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
condition_id VARCHAR(96) NOT NULL COMMENT '条件 ID',
achievement_id VARCHAR(96) NOT NULL COMMENT '成就 ID',
version BIGINT NOT NULL COMMENT '版本号',
metric_type VARCHAR(64) NOT NULL COMMENT '指标类型',
target_value BIGINT NOT NULL COMMENT '目标值',
target_unit VARCHAR(32) NOT NULL COMMENT '目标单位',
dimension_filter_json JSON NULL COMMENT '维度过滤 JSON 配置或快照',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, condition_id),
KEY idx_achievement_conditions_achievement (app_code, achievement_id, version),
KEY idx_achievement_conditions_metric (app_code, metric_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成就条件表';
CREATE TABLE IF NOT EXISTS user_achievement_progress (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
user_id BIGINT NOT NULL COMMENT '用户 ID',
achievement_id VARCHAR(96) NOT NULL COMMENT '成就 ID',
condition_id VARCHAR(96) NOT NULL COMMENT '条件 ID',
cycle_key VARCHAR(96) NOT NULL COMMENT '周期键',
progress_value BIGINT NOT NULL DEFAULT 0 COMMENT '进度值',
target_value BIGINT NOT NULL COMMENT '目标值',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, user_id, achievement_id, condition_id, cycle_key),
KEY idx_user_achievement_progress_user (app_code, user_id, cycle_key, status),
KEY idx_user_achievement_progress_achievement (app_code, achievement_id, cycle_key, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户成就进度表';
CREATE TABLE IF NOT EXISTS user_achievement_unlocks (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
user_id BIGINT NOT NULL COMMENT '用户 ID',
achievement_id VARCHAR(96) NOT NULL COMMENT '成就 ID',
cycle_key VARCHAR(96) NOT NULL COMMENT '周期键',
version BIGINT NOT NULL COMMENT '版本号',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
unlocked_at_ms BIGINT NOT NULL COMMENT '解锁时间UTC epoch ms',
reward_job_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '奖励任务 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, user_id, achievement_id, cycle_key),
KEY idx_user_achievement_unlocks_user (app_code, user_id, unlocked_at_ms),
KEY idx_user_achievement_unlocks_reward (app_code, reward_job_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户成就解锁表';
CREATE TABLE IF NOT EXISTS achievement_event_consumption (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
event_id VARCHAR(128) NOT NULL COMMENT '事件幂等 ID',
event_type VARCHAR(96) NOT NULL COMMENT '事件类型',
source_service VARCHAR(64) NOT NULL COMMENT '来源服务',
user_id BIGINT NOT NULL COMMENT '用户 ID',
metric_type VARCHAR(64) NOT NULL COMMENT '指标类型',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
skip_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '跳过原因',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
consumed_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '消费时间UTC epoch ms',
PRIMARY KEY (app_code, event_id),
KEY idx_achievement_event_status (app_code, status, consumed_at_ms),
KEY idx_achievement_event_user (app_code, user_id, metric_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成就事件消费位点表';
CREATE TABLE IF NOT EXISTS achievement_reward_jobs (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
reward_job_id VARCHAR(96) NOT NULL COMMENT '奖励任务 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
achievement_id VARCHAR(96) NOT NULL COMMENT '成就 ID',
cycle_key VARCHAR(96) NOT NULL COMMENT '周期键',
resource_group_id BIGINT NOT NULL COMMENT '资源分组 ID',
wallet_command_id VARCHAR(128) NOT NULL COMMENT '钱包命令 ID',
wallet_grant_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '钱包资源发放 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
attempt_count INT NOT NULL DEFAULT 0 COMMENT '尝试次数',
next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一次重试时间UTC epoch ms',
locked_by VARCHAR(128) NOT NULL DEFAULT '' COMMENT '当前锁定 worker',
locked_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT '锁定截止时间UTC epoch ms',
failure_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '失败原因',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, reward_job_id),
UNIQUE KEY uk_achievement_reward_once (app_code, user_id, achievement_id, cycle_key),
KEY idx_achievement_reward_pending (app_code, status, next_retry_at_ms, created_at_ms),
KEY idx_achievement_reward_user (app_code, user_id, created_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成就奖励任务表';
CREATE TABLE IF NOT EXISTS user_badge_display_slots (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
user_id BIGINT NOT NULL COMMENT '用户 ID',
slot VARCHAR(32) NOT NULL COMMENT '槽位',
position INT NOT NULL COMMENT '位置',
badge_form VARCHAR(32) NOT NULL COMMENT '徽章形态',
resource_id BIGINT NOT NULL COMMENT '资源 ID',
entitlement_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '权益 ID',
source_type VARCHAR(32) NOT NULL COMMENT '来源类型',
source_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '来源 ID',
pin_mode VARCHAR(32) NOT NULL DEFAULT '' COMMENT '置顶模式',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, user_id, slot, position),
UNIQUE KEY uk_user_badge_display_resource (app_code, user_id, slot, resource_id),
KEY idx_user_badge_display_user (app_code, user_id, slot, updated_at_ms),
KEY idx_user_badge_display_resource (app_code, resource_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户徽章展示槽位表';
CREATE TABLE IF NOT EXISTS message_templates (
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
template_id VARCHAR(96) NOT NULL COMMENT '模板 ID',
template_version VARCHAR(64) NOT NULL COMMENT '模板版本',
message_type VARCHAR(32) NOT NULL COMMENT '消息类型',
locale VARCHAR(32) NOT NULL DEFAULT '' COMMENT '本地化语言',
title VARCHAR(160) NOT NULL COMMENT '标题',
summary VARCHAR(512) NOT NULL COMMENT '摘要',
body VARCHAR(2048) NOT NULL DEFAULT '' COMMENT '正文',
icon_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '图标 URL',
image_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '图片 URL',
action_type VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作类型',
action_param VARCHAR(1024) NOT NULL DEFAULT '' COMMENT '操作参数',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
created_by VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, template_id, template_version),
KEY idx_message_templates_type_status (app_code, message_type, status),
KEY idx_message_templates_template_status (app_code, template_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消息模板表';
CREATE TABLE IF NOT EXISTS user_inbox_messages (
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
inbox_message_id VARCHAR(96) NOT NULL COMMENT '站内信消息 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
message_type VARCHAR(32) NOT NULL COMMENT '消息类型',
producer VARCHAR(64) NOT NULL COMMENT '生产者',
producer_event_id VARCHAR(128) NOT NULL COMMENT '生产者事件 ID',
producer_event_type VARCHAR(96) NOT NULL DEFAULT '' COMMENT '生产者事件类型',
aggregate_type VARCHAR(64) NOT NULL DEFAULT '' COMMENT '聚合类型',
aggregate_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '聚合 ID',
template_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '模板 ID',
template_version VARCHAR(64) NOT NULL DEFAULT '' COMMENT '模板版本',
title VARCHAR(160) NOT NULL COMMENT '标题',
summary VARCHAR(512) NOT NULL COMMENT '摘要',
body VARCHAR(2048) NOT NULL DEFAULT '' COMMENT '正文',
icon_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '图标 URL',
image_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '图片 URL',
action_type VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作类型',
action_param VARCHAR(1024) NOT NULL DEFAULT '' COMMENT '操作参数',
priority INT NOT NULL DEFAULT 0 COMMENT '优先级',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
read_at_ms BIGINT NULL COMMENT '读取时间UTC epoch ms',
deleted_at_ms BIGINT NULL COMMENT '删除时间UTC epoch ms',
sent_at_ms BIGINT NOT NULL COMMENT '发送时间UTC epoch ms',
expire_at_ms BIGINT NULL COMMENT '过期时间UTC epoch ms',
metadata_json JSON NULL COMMENT '扩展元数据 JSON',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, inbox_message_id),
UNIQUE KEY uk_user_inbox_producer_event (app_code, user_id, producer, producer_event_id),
KEY idx_user_inbox_list (app_code, user_id, message_type, deleted_at_ms, status, sent_at_ms, inbox_message_id),
KEY idx_user_inbox_unread (app_code, user_id, message_type, read_at_ms, deleted_at_ms, status, expire_at_ms),
KEY idx_user_inbox_aggregate (app_code, user_id, aggregate_type, aggregate_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户站内信消息表';
CREATE TABLE IF NOT EXISTS message_fanout_jobs (
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
job_id VARCHAR(96) NOT NULL COMMENT '任务 ID',
command_id VARCHAR(128) NOT NULL COMMENT '业务命令幂等 ID',
message_type VARCHAR(32) NOT NULL COMMENT '消息类型',
target_scope VARCHAR(64) NOT NULL COMMENT '目标范围',
target_filter_json JSON NOT NULL COMMENT '目标过滤 JSON 配置或快照',
template_snapshot_json JSON NOT NULL COMMENT '模板快照 JSON 配置或快照',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
attempt_count INT NOT NULL DEFAULT 0 COMMENT '尝试次数',
cursor_user_id BIGINT NOT NULL DEFAULT 0 COMMENT '游标用户 ID',
total_count BIGINT NOT NULL DEFAULT 0 COMMENT '总数量',
success_count BIGINT NOT NULL DEFAULT 0 COMMENT '成功数量',
failure_count BIGINT NOT NULL DEFAULT 0 COMMENT '失败数量',
batch_size INT NOT NULL DEFAULT 500 COMMENT '批次大小',
next_run_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一个运行时间UTC epoch ms',
locked_by VARCHAR(96) NOT NULL DEFAULT '' COMMENT '当前锁定 worker',
locked_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT '锁定截止时间UTC epoch ms',
error_message VARCHAR(512) NOT NULL DEFAULT '' COMMENT '错误消息',
created_by VARCHAR(64) NOT NULL COMMENT '创建人',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, job_id),
UNIQUE KEY uk_message_fanout_command (app_code, command_id),
KEY idx_message_fanout_status (app_code, status, next_run_at_ms, updated_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消息分发任务表';
-- 本地开发必须开箱即可验证幸运礼物 v2 链路INSERT IGNORE 只补缺省奖池,不覆盖后台已发布版本。
SET @lucky_seed_now_ms := 1779259000000;
INSERT IGNORE INTO lucky_gift_rule_versions (
app_code, pool_id, rule_version, enabled, target_rtp_ppm, pool_rate_ppm,
settlement_window_wager, control_band_ppm, gift_price_reference,
novice_max_equivalent_draws, normal_max_equivalent_draws,
max_single_payout, user_hourly_payout_cap, user_daily_payout_cap, device_daily_payout_cap,
room_hourly_payout_cap, anchor_daily_payout_cap, effective_from_ms, created_by_admin_id, created_at_ms
) VALUES
('lalu', 'lucky', 1, true, 950000, 960000, 1000000, 10000, 100, 2000, 20000, 50000, 34200, 615600, 1026000, 684000, 12312000, @lucky_seed_now_ms, 0, @lucky_seed_now_ms),
('lalu', 'super_lucky', 1, true, 950000, 960000, 1000000, 10000, 100, 2000, 20000, 50000, 34200, 615600, 1026000, 684000, 12312000, @lucky_seed_now_ms, 0, @lucky_seed_now_ms);
INSERT IGNORE INTO lucky_gift_stage_tiers (
app_code, pool_id, rule_version, stage, tier_id, multiplier_ppm, base_weight_ppm,
reward_source, high_water_only, broadcast_level, enabled
) VALUES
('lalu', 'lucky', 1, 'novice', 'novice_none', 0, 100000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'novice', 'novice_0_5x', 500000, 200000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'novice', 'novice_1x', 1000000, 550000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'novice', 'novice_2x', 2000000, 150000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'normal', 'normal_none', 0, 100000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'normal', 'normal_0_5x', 500000, 200000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'normal', 'normal_1x', 1000000, 550000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'normal', 'normal_2x', 2000000, 150000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'advanced', 'advanced_none', 0, 270000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'advanced', 'advanced_1x', 1000000, 600000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'advanced', 'advanced_2x', 2000000, 100000, 'base_rtp', false, 'none', true),
('lalu', 'lucky', 1, 'advanced', 'advanced_5x', 5000000, 30000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'novice', 'novice_none', 0, 100000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'novice', 'novice_0_5x', 500000, 200000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'novice', 'novice_1x', 1000000, 550000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'novice', 'novice_2x', 2000000, 150000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'normal', 'normal_none', 0, 100000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'normal', 'normal_0_5x', 500000, 200000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'normal', 'normal_1x', 1000000, 550000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'normal', 'normal_2x', 2000000, 150000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'advanced', 'advanced_none', 0, 270000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'advanced', 'advanced_1x', 1000000, 600000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'advanced', 'advanced_2x', 2000000, 100000, 'base_rtp', false, 'none', true),
('lalu', 'super_lucky', 1, 'advanced', 'advanced_5x', 5000000, 30000, 'base_rtp', false, 'none', true);
CREATE TABLE IF NOT EXISTS room_turnover_reward_configs (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
enabled TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否启用',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '最后更新管理员',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间流水奖励配置表';
CREATE TABLE IF NOT EXISTS room_turnover_reward_tiers (
tier_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '档位 ID',
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
tier_code VARCHAR(64) NOT NULL COMMENT '档位编码',
tier_name VARCHAR(128) NOT NULL COMMENT '档位名称',
threshold_coin_spent BIGINT NOT NULL COMMENT '命中该档需要的房间送礼金币流水',
reward_coin_amount BIGINT NOT NULL COMMENT '奖励房主金币数',
status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT 'active/inactive',
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (tier_id),
UNIQUE KEY uk_room_turnover_reward_tier_code (app_code, tier_code),
KEY idx_room_turnover_reward_tiers_match (app_code, status, threshold_coin_spent)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间流水奖励档位表';
CREATE TABLE IF NOT EXISTS room_turnover_reward_event_consumption (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
event_id VARCHAR(128) NOT NULL COMMENT 'room-service outbox event_id',
event_type VARCHAR(96) NOT NULL COMMENT '事件类型',
room_id VARCHAR(96) NOT NULL COMMENT '房间 ID',
period_start_ms BIGINT NOT NULL COMMENT 'UTC 周期开始',
coin_spent BIGINT NOT NULL COMMENT '本事件送礼金币消耗',
status VARCHAR(32) NOT NULL COMMENT '消费状态',
consumed_at_ms BIGINT NOT NULL COMMENT '消费时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, event_id),
KEY idx_room_turnover_reward_event_period (app_code, period_start_ms, room_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间流水奖励事件消费幂等表';
CREATE TABLE IF NOT EXISTS room_turnover_reward_progress (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
room_id VARCHAR(96) NOT NULL COMMENT '房间 ID',
period_start_ms BIGINT NOT NULL COMMENT 'UTC 周期开始',
period_end_ms BIGINT NOT NULL COMMENT 'UTC 周期结束',
coin_spent BIGINT NOT NULL DEFAULT 0 COMMENT '本周期房间送礼金币流水',
last_event_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '最后事件时间',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, room_id, period_start_ms),
KEY idx_room_turnover_reward_progress_period (app_code, period_start_ms, coin_spent)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间流水奖励周期聚合表';
CREATE TABLE IF NOT EXISTS room_turnover_reward_settlements (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
settlement_id VARCHAR(96) NOT NULL COMMENT '结算 ID',
room_id VARCHAR(96) NOT NULL COMMENT '房间 ID',
owner_user_id BIGINT NOT NULL DEFAULT 0 COMMENT '结算收款房主',
period_start_ms BIGINT NOT NULL COMMENT 'UTC 周期开始',
period_end_ms BIGINT NOT NULL COMMENT 'UTC 周期结束',
coin_spent BIGINT NOT NULL DEFAULT 0 COMMENT '周期房间流水',
tier_id BIGINT NOT NULL DEFAULT 0 COMMENT '命中档位 ID',
tier_code VARCHAR(64) NOT NULL DEFAULT '' COMMENT '命中档位编码',
threshold_coin_spent BIGINT NOT NULL DEFAULT 0 COMMENT '命中档位阈值',
reward_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '发放金币',
status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT 'pending/granted/failed',
wallet_command_id VARCHAR(160) NOT NULL DEFAULT '' COMMENT 'wallet-service 幂等命令 ID',
wallet_transaction_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '钱包交易 ID',
failure_reason VARCHAR(512) NOT NULL DEFAULT '' COMMENT '失败原因',
settled_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '成功发放时间',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, settlement_id),
UNIQUE KEY uk_room_turnover_reward_settlement_room_period (app_code, room_id, period_start_ms),
KEY idx_room_turnover_reward_settlement_status (app_code, status, period_start_ms, created_at_ms),
KEY idx_room_turnover_reward_settlement_owner (app_code, owner_user_id, period_start_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='房间流水奖励每周结算表';
CREATE TABLE IF NOT EXISTS weekly_star_cycles (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
cycle_id VARCHAR(96) NOT NULL COMMENT '周星周期 ID',
activity_code VARCHAR(64) NOT NULL DEFAULT 'weekly_star' COMMENT '活动编码',
region_id BIGINT NOT NULL DEFAULT 0 COMMENT '区域 ID0 表示默认配置',
title VARCHAR(128) NOT NULL DEFAULT '' COMMENT '周期标题',
status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '状态',
start_ms BIGINT NOT NULL COMMENT 'UTC epoch ms 生效开始,包含',
end_ms BIGINT NOT NULL COMMENT 'UTC epoch ms 生效结束,不包含',
created_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '创建管理员',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员',
settled_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '结算完成时间',
locked_by VARCHAR(96) NOT NULL DEFAULT '' COMMENT '结算 worker 锁',
lock_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT '结算锁过期时间',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, cycle_id),
KEY idx_weekly_star_cycle_current (app_code, activity_code, status, region_id, start_ms, end_ms),
KEY idx_weekly_star_cycle_due (app_code, activity_code, status, end_ms, lock_until_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='周星指定礼物积分周期';
CREATE TABLE IF NOT EXISTS weekly_star_cycle_gifts (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
cycle_id VARCHAR(96) NOT NULL COMMENT '周星周期 ID',
gift_id VARCHAR(96) NOT NULL COMMENT '参与计分礼物 ID',
sort_order INT NOT NULL DEFAULT 0 COMMENT '展示顺序',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, cycle_id, gift_id),
KEY idx_weekly_star_gift_match (app_code, gift_id, cycle_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='周星周期指定礼物';
CREATE TABLE IF NOT EXISTS weekly_star_cycle_rewards (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
cycle_id VARCHAR(96) NOT NULL COMMENT '周星周期 ID',
rank_no INT NOT NULL COMMENT '排名1/2/3',
resource_group_id BIGINT NOT NULL COMMENT '奖励资源组 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, cycle_id, rank_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='周星周期 Top 奖励';
CREATE TABLE IF NOT EXISTS weekly_star_user_scores (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
cycle_id VARCHAR(96) NOT NULL COMMENT '周星周期 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
score BIGINT NOT NULL DEFAULT 0 COMMENT '累计积分,等于活动礼物消耗金币',
first_scored_at_ms BIGINT NOT NULL COMMENT '首次得分时间',
last_scored_at_ms BIGINT NOT NULL COMMENT '最近得分时间',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, cycle_id, user_id),
KEY idx_weekly_star_score_rank (app_code, cycle_id, score, first_scored_at_ms, user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='周星用户积分榜';
CREATE TABLE IF NOT EXISTS weekly_star_score_events (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
source_event_id VARCHAR(128) NOT NULL COMMENT 'room-service outbox event_id',
cycle_id VARCHAR(96) NOT NULL COMMENT '周星周期 ID',
user_id BIGINT NOT NULL COMMENT '送礼用户 ID',
gift_id VARCHAR(96) NOT NULL COMMENT '礼物 ID',
score_delta BIGINT NOT NULL COMMENT '本次增加积分',
occurred_at_ms BIGINT NOT NULL COMMENT '事件发生时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, source_event_id),
KEY idx_weekly_star_score_event_cycle (app_code, cycle_id, user_id, occurred_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='周星送礼积分事件幂等表';
CREATE TABLE IF NOT EXISTS weekly_star_settlements (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
settlement_id VARCHAR(96) NOT NULL COMMENT '周星结算 ID',
cycle_id VARCHAR(96) NOT NULL COMMENT '周星周期 ID',
rank_no INT NOT NULL COMMENT '排名1/2/3',
user_id BIGINT NOT NULL COMMENT '获奖用户 ID',
score BIGINT NOT NULL DEFAULT 0 COMMENT '结算积分',
resource_group_id BIGINT NOT NULL COMMENT '奖励资源组 ID',
wallet_command_id VARCHAR(128) NOT NULL COMMENT 'wallet 幂等命令',
wallet_grant_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'wallet grant ID',
status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT '发放状态',
failure_reason VARCHAR(512) NOT NULL DEFAULT '' COMMENT '失败原因',
attempt_count INT NOT NULL DEFAULT 0 COMMENT '尝试次数',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, settlement_id),
UNIQUE KEY uk_weekly_star_settlement_rank (app_code, cycle_id, rank_no),
UNIQUE KEY uk_weekly_star_wallet_command (app_code, wallet_command_id),
KEY idx_weekly_star_settlement_cycle (app_code, cycle_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='周星 Top 奖励结算';
CREATE TABLE IF NOT EXISTS cp_weekly_rank_configs (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
activity_code VARCHAR(64) NOT NULL DEFAULT 'cp_weekly_rank' COMMENT '活动编码',
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
relation_type VARCHAR(32) NOT NULL DEFAULT 'cp' COMMENT '关系类型,当前固定 cp',
top_count INT NOT NULL DEFAULT 3 COMMENT '结算 Top 数量',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '最后更新管理员',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CP 周榜配置表';
CREATE TABLE IF NOT EXISTS cp_weekly_rank_rewards (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
rank_no INT NOT NULL COMMENT '名次',
resource_group_id BIGINT NOT NULL COMMENT '奖励资源组 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, rank_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CP 周榜名次奖励资源组表';
CREATE TABLE IF NOT EXISTS cp_weekly_rank_settlements (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
settlement_id VARCHAR(96) NOT NULL COMMENT '发奖记录 ID',
period_start_ms BIGINT NOT NULL COMMENT '周周期开始UTC epoch ms',
period_end_ms BIGINT NOT NULL COMMENT '周周期结束UTC epoch ms',
rank_no INT NOT NULL COMMENT '名次',
relationship_id VARCHAR(128) NOT NULL COMMENT '获奖 CP 关系 ID',
user_id BIGINT NOT NULL COMMENT '获奖用户 ID',
score BIGINT NOT NULL DEFAULT 0 COMMENT '关系周榜分数',
resource_group_id BIGINT NOT NULL COMMENT '发放资源组 ID',
wallet_command_id VARCHAR(192) NOT NULL COMMENT 'wallet 发奖幂等键',
wallet_grant_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'wallet grant ID',
status VARCHAR(32) NOT NULL COMMENT 'pending/running/granted/failed',
failure_reason VARCHAR(512) NOT NULL DEFAULT '' COMMENT '失败原因',
attempt_count INT NOT NULL DEFAULT 0 COMMENT '尝试次数',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, settlement_id),
UNIQUE KEY uk_cp_weekly_rank_period_user (app_code, period_start_ms, rank_no, relationship_id, user_id),
UNIQUE KEY uk_cp_weekly_rank_wallet_command (app_code, wallet_command_id),
KEY idx_cp_weekly_rank_pending (app_code, period_start_ms, period_end_ms, status, updated_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CP 周榜发奖事实表';
CREATE TABLE IF NOT EXISTS agency_opening_cycles (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
cycle_id VARCHAR(96) NOT NULL COMMENT '代理开业周期 ID',
activity_code VARCHAR(64) NOT NULL DEFAULT 'agency_opening' COMMENT '活动编码',
title VARCHAR(128) NOT NULL DEFAULT '' COMMENT '周期标题',
status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT 'draft/active/disabled/settling/settled',
start_ms BIGINT NOT NULL COMMENT 'UTC epoch ms 开始,包含',
end_ms BIGINT NOT NULL COMMENT 'UTC epoch ms 结束,不包含',
min_host_count INT NOT NULL DEFAULT 10 COMMENT '申请要求的有效主播数',
max_agency_age_days INT NOT NULL DEFAULT 7 COMMENT '代理创建后允许申请的最大天数0 表示不限制',
created_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '创建管理员',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '更新管理员',
settled_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '结算完成时间',
locked_by VARCHAR(96) NOT NULL DEFAULT '' COMMENT '结算 worker 锁',
lock_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT '结算锁过期时间',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, cycle_id),
KEY idx_agency_opening_cycle_current (app_code, activity_code, status, start_ms, end_ms),
KEY idx_agency_opening_cycle_due (app_code, activity_code, status, end_ms, lock_until_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代理开业活动周期';
CREATE TABLE IF NOT EXISTS agency_opening_cycle_rewards (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
cycle_id VARCHAR(96) NOT NULL COMMENT '代理开业周期 ID',
rank_no INT NOT NULL COMMENT '档位序号',
threshold_coin_spent BIGINT NOT NULL DEFAULT 0 COMMENT '命中该档需要的代理房间流水金币',
reward_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '奖励金币',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, cycle_id, rank_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代理开业流水奖励档位';
CREATE TABLE IF NOT EXISTS agency_opening_applications (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
application_id VARCHAR(96) NOT NULL COMMENT '申请 ID',
cycle_id VARCHAR(96) NOT NULL COMMENT '代理开业周期 ID',
agency_id BIGINT NOT NULL COMMENT '代理 ID',
agency_owner_user_id BIGINT NOT NULL COMMENT '代理 owner 用户 ID',
agency_name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '代理名称快照',
host_count INT NOT NULL DEFAULT 0 COMMENT '申请时有效主播数快照',
agency_created_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '代理创建时间快照',
status VARCHAR(32) NOT NULL DEFAULT 'applied' COMMENT 'applied/approved/pending/granted/failed/expired',
score_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '周期内开业流水金币',
reward_rank_no INT NOT NULL DEFAULT 0 COMMENT '结算榜单名次',
reward_threshold_coin_spent BIGINT NOT NULL DEFAULT 0 COMMENT '结算命中的流水阈值',
reward_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '结算奖励金币',
wallet_command_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '钱包幂等命令',
wallet_transaction_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '钱包交易 ID',
failure_reason VARCHAR(512) NOT NULL DEFAULT '' COMMENT '失败原因',
applied_at_ms BIGINT NOT NULL COMMENT '申请时间',
approved_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '后台同意时间',
score_start_ms BIGINT NOT NULL DEFAULT 0 COMMENT '计分开始时间',
score_end_ms BIGINT NOT NULL DEFAULT 0 COMMENT '计分截止时间',
reviewed_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '审核管理员',
granted_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '发奖时间',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, application_id),
UNIQUE KEY uk_agency_opening_owner_once (app_code, agency_owner_user_id),
KEY idx_agency_opening_wallet_command (app_code, wallet_command_id),
KEY idx_agency_opening_application_owner (app_code, agency_owner_user_id, applied_at_ms),
KEY idx_agency_opening_agency_cycle (app_code, cycle_id, agency_id),
KEY idx_agency_opening_application_rank (app_code, cycle_id, score_coin_amount, applied_at_ms, agency_id),
KEY idx_agency_opening_application_status (app_code, cycle_id, status, updated_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代理开业申请和结算事实';
CREATE TABLE IF NOT EXISTS agency_opening_score_events (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
source_event_id VARCHAR(128) NOT NULL COMMENT 'room-service outbox event_id',
cycle_id VARCHAR(96) NOT NULL COMMENT '代理开业周期 ID',
application_id VARCHAR(96) NOT NULL COMMENT '命中的申请 ID',
agency_id BIGINT NOT NULL COMMENT '代理 ID',
target_user_id BIGINT NOT NULL COMMENT '收礼主播用户 ID',
score_delta BIGINT NOT NULL COMMENT '本次流水金币',
occurred_at_ms BIGINT NOT NULL COMMENT '事件发生时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, source_event_id),
KEY idx_agency_opening_score_event_application (app_code, application_id, occurred_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代理开业流水事件幂等表';
CREATE TABLE IF NOT EXISTS invite_activity_reward_configs (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
enabled BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用邀请活动',
per_invite_inviter_reward_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '每邀请一人邀请人即时奖励金币',
per_invite_invitee_reward_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '每邀请一人被邀请人即时奖励金币',
updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '最近更新管理员',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请活动配置';
CREATE TABLE IF NOT EXISTS invite_activity_reward_tiers (
tier_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '档位自增 ID',
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
reward_type VARCHAR(32) NOT NULL COMMENT 'recharge/valid_invite',
tier_code VARCHAR(64) NOT NULL COMMENT '档位编码',
tier_name VARCHAR(128) NOT NULL COMMENT '档位展示名称',
threshold_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '累计充值金币门槛',
threshold_valid_invite_count BIGINT NOT NULL DEFAULT 0 COMMENT '有效邀请人数门槛',
reward_coin_amount BIGINT NOT NULL COMMENT '奖励金币数量',
status VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT 'active/inactive',
sort_order INT NOT NULL DEFAULT 0 COMMENT '展示排序',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (tier_id),
UNIQUE KEY uk_invite_activity_reward_tier_code (app_code, tier_code),
KEY idx_invite_activity_reward_tier_sort (app_code, reward_type, status, sort_order)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请活动奖励档位';
CREATE TABLE IF NOT EXISTS invite_activity_reward_events (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
event_id VARCHAR(128) NOT NULL COMMENT '上游 outbox event_id',
event_type VARCHAR(64) NOT NULL COMMENT 'WalletRechargeRecorded/UserInvited/UserInviteBecameValid',
cycle_key VARCHAR(16) NOT NULL COMMENT 'UTC 自然月,如 2026-06',
invited_user_id BIGINT NOT NULL DEFAULT 0 COMMENT '被邀请人用户 ID',
inviter_user_id BIGINT NOT NULL DEFAULT 0 COMMENT '邀请人用户 ID',
transaction_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '充值钱包交易 ID',
command_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '充值钱包命令 ID',
recharge_type VARCHAR(64) NOT NULL DEFAULT '' COMMENT '充值来源',
recharge_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '本次充值金币',
status VARCHAR(32) NOT NULL DEFAULT 'consumed' COMMENT 'consumed/skipped',
skip_reason VARCHAR(128) NOT NULL DEFAULT '' COMMENT '跳过原因',
payload_json JSON NULL COMMENT '原始上游 payload',
occurred_at_ms BIGINT NOT NULL COMMENT '事件发生时间UTC epoch ms',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, event_id),
KEY idx_invite_activity_reward_event_inviter (app_code, cycle_key, inviter_user_id, occurred_at_ms),
KEY idx_invite_activity_reward_event_invited (app_code, invited_user_id, occurred_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请活动事件幂等表';
CREATE TABLE IF NOT EXISTS invite_activity_reward_progress (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
cycle_key VARCHAR(16) NOT NULL COMMENT 'UTC 自然月,如 2026-06',
user_id BIGINT NOT NULL COMMENT '邀请人用户 ID',
total_recharge_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '本月邀请用户累计充值金币',
valid_invite_count BIGINT NOT NULL DEFAULT 0 COMMENT '本月新增有效邀请人数',
claimed_reward_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '本月已领取奖励金币',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, cycle_key, user_id),
KEY idx_invite_activity_reward_progress_recharge (app_code, cycle_key, total_recharge_coin_amount),
KEY idx_invite_activity_reward_progress_valid (app_code, cycle_key, valid_invite_count)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请活动用户月度进度';
CREATE TABLE IF NOT EXISTS invite_activity_reward_claims (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
claim_id VARCHAR(128) NOT NULL COMMENT '领取 ID',
cycle_key VARCHAR(16) NOT NULL COMMENT 'UTC 自然月,如 2026-06',
user_id BIGINT NOT NULL COMMENT '邀请人用户 ID',
reward_type VARCHAR(32) NOT NULL COMMENT 'recharge/valid_invite/invite_inviter/invite_invitee',
command_id VARCHAR(128) NOT NULL COMMENT 'H5 领取或系统即时发奖命令 ID',
tier_id BIGINT NOT NULL COMMENT '领取档位 ID即时邀请奖励使用对方用户 ID 做幂等维度',
tier_code VARCHAR(64) NOT NULL COMMENT '领取档位编码或即时奖励类型',
tier_name VARCHAR(128) NOT NULL COMMENT '领取档位名称或即时奖励名称',
threshold_coin_amount BIGINT NOT NULL DEFAULT 0 COMMENT '累计充值金币门槛',
threshold_valid_invite_count BIGINT NOT NULL DEFAULT 0 COMMENT '有效邀请人数门槛',
reached_value BIGINT NOT NULL DEFAULT 0 COMMENT '领取时已达成值',
reward_coin_amount BIGINT NOT NULL COMMENT '本次实际发放金币',
status VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT 'pending/granted/failed',
wallet_command_id VARCHAR(128) NOT NULL COMMENT '钱包发奖命令 ID',
wallet_transaction_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '钱包交易 ID',
failure_reason VARCHAR(512) NOT NULL DEFAULT '' COMMENT '失败原因',
granted_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '发放成功时间',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, claim_id),
UNIQUE KEY uk_invite_activity_reward_user_tier (app_code, cycle_key, user_id, reward_type, tier_id),
UNIQUE KEY uk_invite_activity_reward_wallet_command (app_code, wallet_command_id),
KEY idx_invite_activity_reward_claim_user (app_code, cycle_key, user_id, created_at_ms),
KEY idx_invite_activity_reward_claim_status (app_code, status, created_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请活动金币领取记录';