203 lines
12 KiB
SQL
203 lines
12 KiB
SQL
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
||
|
||
-- 使用 utf8mb4 连接字符集,保证中文注释、中文名称和 emoji 在导入时不被降级。
|
||
CREATE DATABASE IF NOT EXISTS hyapp_game DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
||
USE hyapp_game;
|
||
|
||
CREATE TABLE IF NOT EXISTS game_platforms (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
platform_code VARCHAR(64) NOT NULL COMMENT '平台编码',
|
||
platform_name VARCHAR(128) NOT NULL COMMENT '平台名称',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
api_base_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'API 基准 URL',
|
||
adapter_type VARCHAR(64) NOT NULL DEFAULT '' COMMENT '适配器类型',
|
||
callback_secret_ciphertext VARCHAR(1024) NOT NULL DEFAULT '' COMMENT '回调密钥密文',
|
||
callback_ip_whitelist JSON NULL COMMENT '回调IP白名单',
|
||
adapter_config JSON 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',
|
||
PRIMARY KEY(app_code, platform_code)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏平台表';
|
||
|
||
CREATE TABLE IF NOT EXISTS game_catalog (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
game_id VARCHAR(96) NOT NULL COMMENT '游戏 ID',
|
||
platform_code VARCHAR(64) NOT NULL COMMENT '平台编码',
|
||
provider_game_id VARCHAR(128) NOT NULL COMMENT '提供方游戏 ID',
|
||
game_name VARCHAR(128) NOT NULL COMMENT '游戏名称',
|
||
category VARCHAR(64) NOT NULL DEFAULT '' COMMENT '分类',
|
||
icon_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '图标 URL',
|
||
cover_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '封面 URL',
|
||
launch_mode VARCHAR(32) NOT NULL DEFAULT 'h5_popup' COMMENT '启动模式',
|
||
orientation VARCHAR(32) NOT NULL DEFAULT 'portrait' COMMENT '屏幕方向',
|
||
safe_height INT NOT NULL DEFAULT 0 COMMENT '游戏安全高',
|
||
min_coin BIGINT NOT NULL DEFAULT 0 COMMENT '最小金币',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
sort_order INT NOT NULL DEFAULT 0 COMMENT '排序权重,数值越小越靠前',
|
||
tags JSON 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, game_id),
|
||
UNIQUE KEY uk_game_provider(app_code, platform_code, provider_game_id),
|
||
KEY idx_game_platform_status(app_code, platform_code, status, sort_order)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏目录表';
|
||
|
||
CREATE TABLE IF NOT EXISTS game_display_rules (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
rule_id VARCHAR(96) NOT NULL COMMENT '规则 ID',
|
||
game_id VARCHAR(96) NOT NULL COMMENT '游戏 ID',
|
||
scene VARCHAR(64) NOT NULL COMMENT '场景',
|
||
region_id BIGINT NOT NULL DEFAULT 0 COMMENT '区域 ID',
|
||
language VARCHAR(32) NOT NULL DEFAULT '' COMMENT '语言',
|
||
platform VARCHAR(16) NOT NULL DEFAULT '' COMMENT '平台',
|
||
visible TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否可见',
|
||
enabled TINYINT(1) NOT NULL DEFAULT 1 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',
|
||
PRIMARY KEY(app_code, rule_id),
|
||
KEY idx_game_display(app_code, scene, region_id, visible, sort_order)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏展示规则表';
|
||
|
||
CREATE TABLE IF NOT EXISTS game_launch_sessions (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
session_id VARCHAR(96) NOT NULL COMMENT '会话 ID',
|
||
user_id BIGINT NOT NULL COMMENT '用户 ID',
|
||
display_user_id VARCHAR(32) NOT NULL COMMENT '展示用户 ID',
|
||
room_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '房间 ID',
|
||
region_id BIGINT NOT NULL DEFAULT 0 COMMENT '用户启动游戏时的区域 ID',
|
||
scene VARCHAR(64) NOT NULL COMMENT '场景',
|
||
platform_code VARCHAR(64) NOT NULL COMMENT '平台编码',
|
||
game_id VARCHAR(96) NOT NULL COMMENT '游戏 ID',
|
||
provider_game_id VARCHAR(128) NOT NULL COMMENT '提供方游戏 ID',
|
||
launch_token_hash VARCHAR(128) NOT NULL COMMENT '启动令牌哈希值',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
expires_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, session_id),
|
||
KEY idx_game_launch_user(app_code, user_id, created_at_ms),
|
||
KEY idx_game_launch_recent(app_code, user_id, scene, created_at_ms, game_id),
|
||
KEY idx_game_launch_token(app_code, launch_token_hash)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏启动会话表';
|
||
|
||
CREATE TABLE IF NOT EXISTS game_orders (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
order_id VARCHAR(96) NOT NULL COMMENT '订单 ID',
|
||
platform_code VARCHAR(64) NOT NULL COMMENT '平台编码',
|
||
provider_order_id VARCHAR(160) NOT NULL COMMENT '提供方订单 ID',
|
||
provider_round_id VARCHAR(160) NOT NULL DEFAULT '' COMMENT '提供方轮次 ID',
|
||
game_id VARCHAR(96) NOT NULL COMMENT '游戏 ID',
|
||
provider_game_id VARCHAR(128) NOT NULL COMMENT '提供方游戏 ID',
|
||
user_id BIGINT NOT NULL COMMENT '用户 ID',
|
||
room_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '房间 ID',
|
||
region_id BIGINT NOT NULL DEFAULT 0 COMMENT '用户启动游戏时的区域 ID',
|
||
op_type VARCHAR(32) NOT NULL COMMENT 'op类型',
|
||
coin_amount BIGINT NOT NULL COMMENT '金币数量',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
wallet_transaction_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '钱包交易 ID',
|
||
wallet_balance_after BIGINT NOT NULL DEFAULT 0 COMMENT '钱包余额后',
|
||
request_hash VARCHAR(128) NOT NULL COMMENT '请求哈希值',
|
||
raw_payload_ref VARCHAR(256) NOT NULL DEFAULT '' COMMENT '原始负载外部引用',
|
||
failure_code VARCHAR(64) NOT NULL DEFAULT '' COMMENT '失败编码',
|
||
failure_message VARCHAR(256) 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, order_id),
|
||
UNIQUE KEY uk_game_provider_order(app_code, platform_code, provider_order_id),
|
||
KEY idx_game_order_user_time(app_code, user_id, created_at_ms),
|
||
KEY idx_game_order_round(app_code, platform_code, provider_round_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏钱包订单表';
|
||
|
||
CREATE TABLE IF NOT EXISTS game_callback_logs (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
callback_id VARCHAR(96) NOT NULL COMMENT '回调 ID',
|
||
platform_code VARCHAR(64) NOT NULL COMMENT '平台编码',
|
||
operation VARCHAR(64) NOT NULL COMMENT '操作',
|
||
request_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '链路请求 ID,用于排查问题',
|
||
provider_request_id VARCHAR(160) NOT NULL DEFAULT '' COMMENT '提供方请求 ID',
|
||
signature_valid TINYINT(1) NOT NULL DEFAULT 0 COMMENT '签名有效',
|
||
request_hash VARCHAR(128) NOT NULL COMMENT '请求哈希值',
|
||
response_code VARCHAR(64) NOT NULL DEFAULT '' COMMENT '响应编码',
|
||
response_body_hash VARCHAR(128) NOT NULL DEFAULT '' COMMENT '响应正文哈希值',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
PRIMARY KEY(app_code, callback_id),
|
||
KEY idx_game_callback_platform_time(app_code, platform_code, created_at_ms)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏回调日志表';
|
||
|
||
CREATE TABLE IF NOT EXISTS game_repair_orders (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
repair_id VARCHAR(96) NOT NULL COMMENT '修复 ID',
|
||
platform_code VARCHAR(64) NOT NULL COMMENT '平台编码',
|
||
provider_order_id VARCHAR(160) NOT NULL COMMENT '提供方订单 ID',
|
||
reason VARCHAR(128) NOT NULL COMMENT '原因',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
operator_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '操作管理员 ID',
|
||
attempts INT NOT NULL DEFAULT 0 COMMENT '尝试次数',
|
||
next_run_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一个运行时间,UTC epoch ms',
|
||
last_error_code 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, repair_id),
|
||
UNIQUE KEY uk_game_repair_provider_order(app_code, platform_code, provider_order_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏修复订单表';
|
||
|
||
CREATE TABLE IF NOT EXISTS game_level_event_outbox (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
event_id VARCHAR(160) NOT NULL COMMENT '事件幂等 ID',
|
||
order_id VARCHAR(96) NOT NULL COMMENT '订单 ID',
|
||
user_id BIGINT NOT NULL COMMENT '用户 ID',
|
||
game_id VARCHAR(96) NOT NULL COMMENT '游戏 ID',
|
||
provider_order_id VARCHAR(160) NOT NULL COMMENT '提供方订单 ID',
|
||
provider_round_id VARCHAR(160) NOT NULL DEFAULT '' COMMENT '提供方轮次 ID',
|
||
coin_amount BIGINT NOT NULL COMMENT '金币数量',
|
||
wallet_transaction_id VARCHAR(96) NOT NULL COMMENT '钱包交易 ID',
|
||
payload_json JSON 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',
|
||
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 '失败原因',
|
||
occurred_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),
|
||
UNIQUE KEY uk_game_level_event_order(app_code, order_id),
|
||
KEY idx_game_level_event_pending(app_code, status, next_retry_at_ms, created_at_ms),
|
||
KEY idx_game_level_event_claim(app_code, status, locked_until_ms, next_retry_at_ms, created_at_ms, event_id),
|
||
KEY idx_game_level_event_claim_order(app_code, status, locked_until_ms, created_at_ms, event_id, next_retry_at_ms),
|
||
KEY idx_game_level_event_retention(app_code, status, updated_at_ms, event_id),
|
||
KEY idx_game_level_event_user(app_code, user_id, created_at_ms)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏等级事件 outbox 表';
|
||
|
||
CREATE TABLE IF NOT EXISTS game_outbox (
|
||
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
|
||
event_id VARCHAR(160) NOT NULL COMMENT '事件幂等 ID',
|
||
event_type VARCHAR(64) NOT NULL COMMENT '事件类型',
|
||
order_id VARCHAR(96) NOT NULL COMMENT '订单 ID',
|
||
user_id BIGINT NOT NULL COMMENT '用户 ID',
|
||
platform_code VARCHAR(64) NOT NULL COMMENT '平台编码',
|
||
game_id VARCHAR(96) NOT NULL COMMENT '游戏 ID',
|
||
op_type VARCHAR(32) NOT NULL COMMENT '游戏改账方向',
|
||
coin_amount BIGINT NOT NULL COMMENT '金币数量',
|
||
payload_json JSON NOT NULL COMMENT '业务负载 JSON 快照',
|
||
status VARCHAR(32) NOT NULL COMMENT '业务状态',
|
||
worker_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'MQ 投递 worker ID',
|
||
lock_until_ms BIGINT NOT NULL DEFAULT 0 COMMENT 'MQ 投递锁过期时间,UTC epoch ms',
|
||
retry_count INT NOT NULL DEFAULT 0 COMMENT '重试次数',
|
||
next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '下一次 MQ 投递重试时间,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, event_id),
|
||
KEY idx_game_outbox_status_created(app_code, status, next_retry_at_ms, created_at_ms, event_id),
|
||
KEY idx_game_outbox_lock(app_code, status, lock_until_ms, created_at_ms, event_id),
|
||
KEY idx_game_outbox_retention(app_code, status, updated_at_ms, event_id),
|
||
KEY idx_game_outbox_order(app_code, order_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='游戏统计事件 outbox 表';
|