first commit
This commit is contained in:
@@ -0,0 +1,240 @@
|
||||
-- ============================================================
|
||||
-- Olympus 电子游戏模块 全量建表 DDL
|
||||
-- 表前缀: game_olympus_ 游戏类型: OLYMPUS
|
||||
-- 设计对齐 sweet 体系,差异点:
|
||||
-- 1. 饰品桶最高 1000x(单局封顶 1000 倍基础下注)
|
||||
-- 2. step 表自带 accumulator_before/after(跨回合炸弹累计)与 win_capped
|
||||
-- 3. record 表自带结算/补发字段(settled 等),无需后期 ALTER
|
||||
-- 4. 模式仅三种: normal / ante / buy_fs(互斥,无 super 模式)
|
||||
-- ============================================================
|
||||
|
||||
-- 1. 箱子配置(模式 × 下注档位)
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_box (
|
||||
box_id BIGINT NOT NULL COMMENT 'PK',
|
||||
game_type VARCHAR(16) NOT NULL DEFAULT 'OLYMPUS',
|
||||
box_type VARCHAR(32) NOT NULL COMMENT 'normal|ante|buy_fs',
|
||||
bet DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '基础下注',
|
||||
name VARCHAR(50) DEFAULT NULL,
|
||||
price DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '实际扣费 = bet × CM (normal=1/ante=2/buy_fs=20)',
|
||||
total_ornaments INT NOT NULL DEFAULT '0' COMMENT '总回合数',
|
||||
rtp DECIMAL(5,4) NOT NULL DEFAULT '0.8000' COMMENT '目标返奖率',
|
||||
rtp_converge_ratio DECIMAL(4,3) NULL COMMENT '一轮收敛回合占比,空=默认0.15',
|
||||
sort INT DEFAULT '0',
|
||||
status VARCHAR(1) DEFAULT '1' COMMENT '1启用 0禁用',
|
||||
del_flag VARCHAR(1) DEFAULT '0',
|
||||
remark VARCHAR(200) DEFAULT NULL,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (box_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Olympus箱子配置';
|
||||
|
||||
-- 2. 饰品桶定义(0x ~ 1000x,共17档)
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_ornament (
|
||||
id BIGINT NOT NULL COMMENT 'PK 1-17',
|
||||
game_type VARCHAR(16) NOT NULL DEFAULT 'OLYMPUS',
|
||||
expect_mul DECIMAL(8,2) NOT NULL COMMENT '期望倍率(最高1000)',
|
||||
name VARCHAR(50) DEFAULT NULL,
|
||||
range_low DECIMAL(8,2) DEFAULT NULL COMMENT '落桶区间下限(含)',
|
||||
range_high DECIMAL(8,2) DEFAULT NULL COMMENT '落桶区间上限(含)',
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Olympus饰品桶定义';
|
||||
|
||||
-- 3. 箱子-饰品桶分布(库存配额,剩余 = count - used)
|
||||
-- audience 多身份爆率:每种身份(common/anchor/robot)一套独立分布,回合库存池共享
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_box_ornament (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
box_id BIGINT NOT NULL,
|
||||
ornament_id INT NOT NULL,
|
||||
audience VARCHAR(16) NOT NULL DEFAULT 'common' COMMENT '身份维度 common普通/anchor主播/robot机器人',
|
||||
count INT NOT NULL DEFAULT '0' COMMENT '分配回合数',
|
||||
used INT NOT NULL DEFAULT '0' COMMENT '已消耗回合数,剩余=count-used',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_box_ornament_aud (box_id, ornament_id, audience)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Olympus箱子饰品分布(多身份)';
|
||||
|
||||
-- 4. 预生成回合
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_round (
|
||||
round_id BIGINT NOT NULL COMMENT 'PK',
|
||||
box_id BIGINT NOT NULL,
|
||||
ornament_id INT NOT NULL COMMENT '落入的饰品桶 1-17',
|
||||
actual_mul DECIMAL(10,4) NOT NULL DEFAULT '0.0000' COMMENT '实际总倍率(≤1000)',
|
||||
free_spin_count INT NOT NULL DEFAULT '0' COMMENT '免费旋转总次数(15+重触发×5)',
|
||||
total_cascades INT NOT NULL DEFAULT '0' COMMENT '总步数',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (round_id),
|
||||
INDEX idx_box_ornament (box_id, ornament_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Olympus预生成回合';
|
||||
|
||||
-- 5. 回合步骤(级联/翻滚明细)
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_step (
|
||||
id BIGINT NOT NULL COMMENT 'PK',
|
||||
round_id BIGINT NOT NULL,
|
||||
free_spin_id INT NOT NULL DEFAULT '0' COMMENT '0=基础旋转, >0=第N次免费旋转',
|
||||
cascade_seq INT NOT NULL DEFAULT '0' COMMENT '本旋转内第几次翻滚',
|
||||
grid_state JSON DEFAULT NULL COMMENT '6×5网格最终状态',
|
||||
multiplier_detail JSON DEFAULT NULL COMMENT '炸弹符号 [{"pos":int,"val":int},...]',
|
||||
symbol_links JSON DEFAULT NULL COMMENT '中奖明细 [{"symbol","count","loc",...}]',
|
||||
accumulated_symbols JSON DEFAULT NULL COMMENT '本旋转累计消除符号 {"CROWN":9,...}',
|
||||
spin_winners JSON DEFAULT NULL COMMENT '获胜者面板:本旋逐波追加 [{"symbol","count","win"},...] 新旋清空',
|
||||
removed_positions JSON DEFAULT NULL COMMENT '消除位置 [pos,...]',
|
||||
drop_data JSON DEFAULT NULL COMMENT '下落数据 [{"from":int,"to":int,"symbol":"A"},...]',
|
||||
fill_data JSON DEFAULT NULL COMMENT '填充数据 [{"pos":int,"symbol":"A"},...]',
|
||||
scatter_trigger JSON DEFAULT NULL COMMENT '基础盘触发免费旋转 {scatterCount,freeSpins(15),scatterWin}',
|
||||
retrigger_info JSON DEFAULT NULL COMMENT '免费旋转重触发 {scatterCount,extraSpins(5),scatterWin}',
|
||||
base_score DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '本步基础分(未乘炸弹)',
|
||||
win_amount DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '本步赢额(回合末帧含炸弹结算)',
|
||||
accumulator_before DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '本步前累计炸弹倍数',
|
||||
accumulator_after DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '本步后累计炸弹倍数(跨回合传递)',
|
||||
spin_win DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '整局累计赢额',
|
||||
win_capped TINYINT NOT NULL DEFAULT '0' COMMENT '本步赢额被1000x封顶截断 0否1是',
|
||||
bigwin_level VARCHAR(16) DEFAULT NULL COMMENT '爆奖档位(小/中/大,只在免费旋转里判档,按单旋赢额盖在该旋末帧,同档可多次): small/middle/big',
|
||||
is_final TINYINT DEFAULT '0' COMMENT '本旋转末帧',
|
||||
PRIMARY KEY (id),
|
||||
INDEX idx_round (round_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Olympus回合步骤';
|
||||
|
||||
-- 6. 游戏记录(含结算/补发字段,建表即带全)
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_record (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
user_id BIGINT NOT NULL,
|
||||
box_id BIGINT NOT NULL,
|
||||
round_id BIGINT NOT NULL,
|
||||
cost DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '扣费 = bet × CM',
|
||||
total_win DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '总赢额(结算时填,≤bet×1000)',
|
||||
settled TINYINT NOT NULL DEFAULT '0' COMMENT '是否已结算 0未1已(幂等守卫)',
|
||||
mode_type VARCHAR(20) DEFAULT NULL COMMENT '游戏模式 normal/ante/buy_fs',
|
||||
auto_dismantle TINYINT DEFAULT 0 COMMENT '开局自动分解快照 0关1开',
|
||||
reward_type VARCHAR(10) DEFAULT NULL COMMENT '发放类型 gold/ornament',
|
||||
settled_win DECIMAL(10,2) DEFAULT 0.00 COMMENT '本局价值(金币金额=饰品价格)',
|
||||
prize_id BIGINT DEFAULT NULL COMMENT '饰品ID game_olympus_prize_ornament.id',
|
||||
prize_name VARCHAR(100) DEFAULT NULL COMMENT '饰品名称',
|
||||
prize_image_url VARCHAR(500) DEFAULT NULL COMMENT '饰品图片URL',
|
||||
prize_level_img VARCHAR(500) DEFAULT NULL COMMENT '品质图片URL',
|
||||
settle_source VARCHAR(20) DEFAULT NULL COMMENT '结算来源 start=开局已结算(动画还在播) / finish=末帧播完(已结束,进战绩列表)',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
INDEX idx_user_time (user_id, create_time),
|
||||
INDEX idx_box_time (box_id, create_time),
|
||||
INDEX idx_settled_time (settled, create_time)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Olympus游戏记录';
|
||||
|
||||
-- 7. 用户统计
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_user (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
user_id BIGINT NOT NULL,
|
||||
total_spins BIGINT NOT NULL DEFAULT '0',
|
||||
total_cost DECIMAL(12,2) NOT NULL DEFAULT '0.00',
|
||||
total_win DECIMAL(12,2) NOT NULL DEFAULT '0.00',
|
||||
total_free_spins INT NOT NULL DEFAULT '0',
|
||||
max_win_mul DECIMAL(10,4) NOT NULL DEFAULT '0.0000' COMMENT '历史最高倍率(≤1000)',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_user (user_id)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Olympus用户统计';
|
||||
|
||||
-- 8. 每日盈亏
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_win (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
date DATE NOT NULL,
|
||||
total_spins BIGINT NOT NULL DEFAULT '0',
|
||||
total_cost DECIMAL(14,2) NOT NULL DEFAULT '0.00',
|
||||
total_win DECIMAL(14,2) NOT NULL DEFAULT '0.00',
|
||||
net_profit DECIMAL(14,2) NOT NULL DEFAULT '0.00',
|
||||
player_count INT NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_date (date)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Olympus每日盈亏';
|
||||
|
||||
-- 9. 返奖饰品定义(展示用饰品,按赢额区间匹配)
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_prize_ornament (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
game_type VARCHAR(16) NOT NULL DEFAULT 'OLYMPUS',
|
||||
name VARCHAR(100) DEFAULT NULL COMMENT '饰品名称',
|
||||
image_url VARCHAR(500) DEFAULT NULL COMMENT '饰品图片URL',
|
||||
grade INT DEFAULT NULL COMMENT '品质等级 1-5',
|
||||
exterior_name VARCHAR(100) DEFAULT NULL COMMENT '品质名称 崭新出厂/略有磨损/久经沙场/破损不堪/战痕累累',
|
||||
sort INT DEFAULT '0',
|
||||
status VARCHAR(1) DEFAULT '1',
|
||||
is_fallback TINYINT DEFAULT '0' COMMENT '兜底饰品 1是(仅展示不覆盖金额) 0否',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Olympus返奖饰品';
|
||||
|
||||
-- 10. 返奖饰品区间(与 prize_ornament 一一对应,区间连续覆盖)
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_prize_range (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
prize_id BIGINT NOT NULL COMMENT 'game_olympus_prize_ornament.id',
|
||||
win_low DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '返奖区间下限(含)',
|
||||
win_high DECIMAL(10,2) NOT NULL DEFAULT '0.00' COMMENT '返奖区间上限(含)',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_prize (prize_id)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='Olympus返奖区间';
|
||||
|
||||
-- 11. 箱子饰品分布模板(抽干补桶依据,按身份区分)
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_box_template (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
box_id BIGINT NOT NULL COMMENT '所属箱子ID',
|
||||
audience VARCHAR(16) NOT NULL DEFAULT 'common' COMMENT '身份维度 common/anchor/robot',
|
||||
name VARCHAR(100) NOT NULL COMMENT '模板名称(同一箱子+身份内唯一)',
|
||||
total_rounds INT NOT NULL DEFAULT 0 COMMENT '总回合数 = items 各 count 之和',
|
||||
items_json TEXT NOT NULL COMMENT '饰品分布JSON: [{"ornamentId":1,"count":100},...]',
|
||||
is_active TINYINT NOT NULL DEFAULT 0 COMMENT '是否生效模板(抽干补桶依据) 1是 0否',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_box_aud_name (box_id, audience, name),
|
||||
KEY idx_box_aud_active (box_id, audience, is_active)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Olympus箱子饰品分布模板(多身份)';
|
||||
|
||||
-- 12. 奖池水位调整日志(注水/抽水/重置审计)
|
||||
CREATE TABLE IF NOT EXISTS game_olympus_reward_log (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
|
||||
box_id BIGINT DEFAULT NULL COMMENT '箱子ID(批量/重置为汇总,可空)',
|
||||
box_name VARCHAR(100) DEFAULT NULL COMMENT '箱子名/汇总描述',
|
||||
audience VARCHAR(16) NOT NULL DEFAULT 'common' COMMENT '身份 common/anchor/robot/white',
|
||||
type TINYINT NOT NULL COMMENT '1注水 2抽水 3重置',
|
||||
amount DECIMAL(14,2) NOT NULL DEFAULT '0.00' COMMENT '调整金额(绝对值)',
|
||||
balance_before DECIMAL(14,2) DEFAULT NULL COMMENT '调整前水位',
|
||||
balance_after DECIMAL(14,2) DEFAULT NULL COMMENT '调整后水位',
|
||||
pool_balance DECIMAL(14,2) DEFAULT NULL COMMENT '操作后总池余额',
|
||||
operator VARCHAR(64) DEFAULT NULL COMMENT '操作人',
|
||||
remark VARCHAR(200) DEFAULT NULL COMMENT '备注',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_create (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Olympus奖池水位调整日志';
|
||||
|
||||
-- ============================================================
|
||||
-- 种子数据:饰品桶 1-17(0x ~ 1000x)
|
||||
-- ============================================================
|
||||
INSERT INTO game_olympus_ornament (id, game_type, expect_mul, name, range_low, range_high) VALUES
|
||||
(1, 'OLYMPUS', 0.00, '0x', 0.00, 0.00),
|
||||
(2, 'OLYMPUS', 0.50, '0.5x', 0.01, 1.00),
|
||||
(3, 'OLYMPUS', 1.50, '1.5x', 1.00, 2.00),
|
||||
(4, 'OLYMPUS', 2.50, '2.5x', 2.00, 3.00),
|
||||
(5, 'OLYMPUS', 4.00, '4x', 3.00, 5.00),
|
||||
(6, 'OLYMPUS', 6.50, '6.5x', 5.00, 8.00),
|
||||
(7, 'OLYMPUS', 10.00, '10x', 8.00, 12.00),
|
||||
(8, 'OLYMPUS', 16.00, '16x', 12.00, 20.00),
|
||||
(9, 'OLYMPUS', 25.00, '25x', 20.00, 30.00),
|
||||
(10, 'OLYMPUS', 40.00, '40x', 30.00, 50.00),
|
||||
(11, 'OLYMPUS', 60.00, '60x', 50.00, 70.00),
|
||||
(12, 'OLYMPUS', 100.00, '100x', 70.00, 130.00),
|
||||
(13, 'OLYMPUS', 150.00, '150x', 130.00, 170.00),
|
||||
(14, 'OLYMPUS', 200.00, '200x', 170.00, 230.00),
|
||||
(15, 'OLYMPUS', 300.00, '300x', 230.00, 370.00),
|
||||
(16, 'OLYMPUS', 500.00, '500x', 370.00, 630.00),
|
||||
(17, 'OLYMPUS', 1000.00, '1000x', 630.00, 1370.00)
|
||||
ON DUPLICATE KEY UPDATE expect_mul=VALUES(expect_mul), name=VALUES(name),
|
||||
range_low=VALUES(range_low), range_high=VALUES(range_high);
|
||||
|
||||
-- ============================================================
|
||||
-- 附:Java 服务上线时执行(先不执行,接入后台时再放开)
|
||||
-- ============================================================
|
||||
-- 维护开关
|
||||
-- INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark)
|
||||
-- VALUES ('Olympus维护', 'olympusMaintenance', '0', 'Y', 'admin', NOW(), 'Olympus维护开关 0正常 1维护');
|
||||
|
||||
-- 未结算兜底补发定时任务(系统监控>定时任务)
|
||||
-- INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
-- VALUES ('Olympus未结算补发', 'OLYMPUS', 'olympusSettleTask.scheduledSettle()', '0 */10 * * * ?', '1', '0', '0', 'admin', NOW(), '每10分钟扫描超35分钟未结算记录并补发金币/饰品');
|
||||
Reference in New Issue
Block a user