-- ===================================================================== -- 「36字花」数据库 DDL V1 -- 字符集:utf8mb4 | 引擎:InnoDB | 金额:DECIMAL(18,4)(游戏币) -- 执行前请全库备份。若库中已存在同名列/表,请按需删减对应语句后执行。 -- ===================================================================== SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- --------------------------------------------------------------------- -- 一、新渠道表:channel(替代 game_channel) -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `channel`; CREATE TABLE `channel` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `top_admin_id` int(10) unsigned DEFAULT NULL COMMENT '顶级代理管理员ID(admin.id)', `code` varchar(255) NOT NULL DEFAULT '' COMMENT '渠道标识', `invite_code` varchar(64) DEFAULT NULL COMMENT '渠道主邀请码', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '渠道名', `agent_mode` varchar(32) NOT NULL DEFAULT 'turnover' COMMENT '代理模式:turnover=普通刷水代理 affiliate=联营代理', `user_count` int(10) DEFAULT NULL COMMENT '用户数', `profit_amount` decimal(18,4) DEFAULT NULL COMMENT '渠道当期利润快照(游戏币)', `total_profit_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '渠道累计总利润(游戏币)', `commission_pool_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '可分红资金池(游戏币)', `turnover_share_rate` decimal(9,6) DEFAULT NULL COMMENT '普通刷水代理分红比例(按流水分桶后再乘该比例)', `affiliate_share_rate` decimal(9,6) DEFAULT NULL COMMENT '联营代理占成比例', `affiliate_fee_rate` decimal(9,6) DEFAULT NULL COMMENT '联营代理成本扣除比例', `carryover_balance` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '联营负结转余额(可负)', `status` tinyint(1) unsigned NOT NULL DEFAULT 1 COMMENT '状态:0=禁用,1=启用', `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注', `admin_id` int(10) unsigned DEFAULT NULL COMMENT '创建管理员', `admin_group_id` int(10) unsigned DEFAULT NULL COMMENT '渠道角色组ID(admin_group.id)', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_code` (`code`), UNIQUE KEY `uk_invite_code` (`invite_code`), KEY `idx_agent_mode` (`agent_mode`), KEY `idx_top_admin_id` (`top_admin_id`), KEY `idx_admin_group_id` (`admin_group_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='渠道表(替代game_channel)'; -- 可选数据迁移(仅当历史存在 game_channel 且字段兼容时执行) -- INSERT INTO `channel` (`id`,`code`,`name`,`user_count`,`profit_amount`,`status`,`remark`,`admin_id`,`admin_group_id`,`create_time`,`update_time`) -- SELECT `id`,`code`,`name`,`user_count`,CAST(`profit_amount` AS DECIMAL(18,4)),`status`,`remark`,`admin_id`,`admin_group_id`,`create_time`,`update_time` -- FROM `game_channel`; -- --------------------------------------------------------------------- -- 二、既有表适配:game_user(C 端用户) -- --------------------------------------------------------------------- ALTER TABLE `game_user` MODIFY COLUMN `coin` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '游戏币余额', ADD COLUMN `email` varchar(255) NOT NULL DEFAULT '' COMMENT '邮箱,可与手机号二选一注册' AFTER `phone`, ADD COLUMN `channel_id` int(10) unsigned DEFAULT NULL COMMENT '所属渠道ID(channel.id)' AFTER `game_channel_id`, ADD COLUMN `register_invite_code` varchar(64) NOT NULL DEFAULT '' COMMENT '注册时使用的邀请码快照' AFTER `channel_id`, ADD COLUMN `total_deposit_coin` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '累计充值入账游戏币(提现流水校验分子/分母用)' AFTER `register_invite_code`, ADD COLUMN `total_valid_bet_coin` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '累计有效投注游戏币' AFTER `total_deposit_coin`, ADD COLUMN `risk_flags` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '风控位标记:可按位表示禁止登录/下注/提现等' AFTER `total_valid_bet_coin`, ADD COLUMN `current_streak` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '当前连胜场次(DB兜底,权威状态可放Redis)' AFTER `risk_flags`, ADD COLUMN `last_bet_period_no` varchar(64) NOT NULL DEFAULT '' COMMENT '上一笔有效下注所在期号,用于连胜连续期校验' AFTER `current_streak`; ALTER TABLE `game_user` ADD KEY `idx_channel_id` (`channel_id`), ADD KEY `idx_register_invite_code` (`register_invite_code`), ADD KEY `idx_last_bet_period_no` (`last_bet_period_no`); -- --------------------------------------------------------------------- -- 三、既有表适配:admin(子代理管理) -- --------------------------------------------------------------------- ALTER TABLE `admin` ADD COLUMN `parent_admin_id` int(11) unsigned DEFAULT NULL COMMENT '上级代理管理员ID,顶级为空' AFTER `id`, ADD COLUMN `channel_id` int(10) unsigned DEFAULT NULL COMMENT '所属渠道ID(channel.id)' AFTER `parent_admin_id`, ADD COLUMN `invite_code` varchar(64) DEFAULT NULL COMMENT '子代理邀请码(用于发展玩家)' AFTER `mobile`, ADD COLUMN `agent_role` varchar(32) NOT NULL DEFAULT 'sub_agent' COMMENT 'agent_admin|sub_agent|staff(均无开奖权限)' AFTER `status`; ALTER TABLE `admin` ADD UNIQUE KEY `uk_invite_code` (`invite_code`), ADD KEY `idx_parent_admin_id` (`parent_admin_id`), ADD KEY `idx_channel_id` (`channel_id`); -- --------------------------------------------------------------------- -- 四、既有表适配:admin_group(角色组按渠道隔离) -- --------------------------------------------------------------------- ALTER TABLE `admin_group` ADD COLUMN `channel_id` int(10) unsigned DEFAULT NULL COMMENT '所属渠道ID(channel.id),NULL表示系统级角色组' AFTER `pid`, ADD COLUMN `commission_rate` decimal(6,2) NOT NULL DEFAULT 0.00 COMMENT '角色组分红比例(百分比)' AFTER `channel_id`; ALTER TABLE `admin_group` ADD KEY `idx_channel_id` (`channel_id`); -- --------------------------------------------------------------------- -- 五、系统参数(KV,禁止业务写死) -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `game_config`; CREATE TABLE `game_config` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `config_key` varchar(64) NOT NULL DEFAULT '' COMMENT '参数键,全局唯一', `config_value` text COMMENT '参数值,可为JSON', `value_type` varchar(16) NOT NULL DEFAULT 'string' COMMENT 'string|int|decimal|json', `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '说明', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_config_key` (`config_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='游戏/平台动态参数'; -- --------------------------------------------------------------------- -- 四、期号与状态机 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `game_period`; CREATE TABLE `game_period` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `period_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务期号,唯一,如 20260414-123045', `period_start_at` bigint(16) unsigned NOT NULL DEFAULT 0 COMMENT '本期开始时间戳', `status` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=下注开放 1=已封盘 2=算票中 3=派彩中 4=已结束 5=已作废', `draw_mode` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=自动AI 1=手动预设', `preset_number` tinyint(3) unsigned DEFAULT NULL COMMENT '手动模式预设开奖号码 1-36', `result_number` tinyint(3) unsigned DEFAULT NULL COMMENT '实际开奖号码 1-36', `void_reason` varchar(255) NOT NULL DEFAULT '' COMMENT '作废原因', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_period_no` (`period_no`), KEY `idx_status_start` (`status`,`period_start_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='游戏期号与状态'; -- --------------------------------------------------------------------- -- 五、注单 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `game_bet_order`; CREATE TABLE `game_bet_order` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `period_id` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '关联 game_period.id', `period_no` varchar(64) NOT NULL DEFAULT '' COMMENT '冗余期号,便于对账与查询', `user_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'game_user.id', `channel_id` int(10) unsigned DEFAULT NULL COMMENT '下单时归属渠道', `pick_numbers` json DEFAULT NULL COMMENT '选中号码 JSON 数组,如 [1,8,16]', `unit_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '单号金额(各号一致)', `pick_count` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '选中号码个数', `total_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '本单总金额', `streak_at_bet` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '下注时连胜次数(用于派彩倍率)', `is_auto` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=手动 1=托管', `win_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '常规派彩金额(含连赢倍率后)', `jackpot_extra_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT 'Jackpot 额外派彩', `status` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '1=已扣款待开奖 2=已结算 3=已作废已退款', `idempotency_key` varchar(64) DEFAULT NULL COMMENT '幂等键,防重复下单;未使用则为NULL(允许多条NULL)', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_idempotency` (`idempotency_key`), KEY `idx_period_user` (`period_id`,`user_id`), KEY `idx_user_ctime` (`user_id`,`create_time`), KEY `idx_period_no` (`period_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='游戏注单'; -- --------------------------------------------------------------------- -- 六、自动托管 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `game_bet_auto`; CREATE TABLE `game_bet_auto` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'game_user.id', `remaining_rounds` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '剩余托管局数', `pick_numbers` json DEFAULT NULL COMMENT '选号 JSON', `unit_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '单号金额', `status` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=停止 1=运行中', `next_trigger_before` bigint(16) unsigned NOT NULL DEFAULT 0 COMMENT '下次允许自动下注前的时间戳上界(配合0-10秒抖动)', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), KEY `idx_user_status` (`user_id`,`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='自动托管任务'; -- --------------------------------------------------------------------- -- 七、用户钱包流水账 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `user_wallet_ledger`; CREATE TABLE `user_wallet_ledger` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'game_user.id', `biz_type` varchar(32) NOT NULL DEFAULT '' COMMENT '业务类型:deposit|bet|payout|withdraw_freeze|withdraw|fee|manual|void_refund 等', `direction` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '1=入金 2=出金', `amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '变动额,恒正', `balance_after` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '变动后余额', `ref_type` varchar(32) NOT NULL DEFAULT '' COMMENT '关联类型:period|bet_order|deposit_order|withdraw_order', `ref_id` bigint(20) unsigned DEFAULT NULL COMMENT '关联主键', `remark` varchar(500) NOT NULL DEFAULT '' COMMENT '备注', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_user_ctime` (`user_id`,`create_time`), KEY `idx_ref` (`ref_type`,`ref_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户游戏币账本流水'; -- --------------------------------------------------------------------- -- 八、充值订单 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `deposit_order`; CREATE TABLE `deposit_order` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `order_no` varchar(64) NOT NULL DEFAULT '' COMMENT '内部订单号', `user_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'game_user.id', `fiat_currency` varchar(16) NOT NULL DEFAULT '' COMMENT '法币币种代码', `fiat_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '法币金额', `fx_rate` decimal(18,8) NOT NULL DEFAULT 0.00000000 COMMENT '成交汇率', `coin_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '入账游戏币', `gateway` varchar(32) NOT NULL DEFAULT '' COMMENT '支付网关标识', `gateway_trade_no` varchar(128) NOT NULL DEFAULT '' COMMENT '第三方流水号', `status` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=待支付 1=成功 2=失败 3=关闭', `paid_at` bigint(16) unsigned DEFAULT NULL COMMENT '支付成功时间', `notify_payload` mediumtext COMMENT '回调原文存档', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_order_no` (`order_no`), KEY `idx_user_ctime` (`user_id`,`create_time`), KEY `idx_gateway_trade` (`gateway`,`gateway_trade_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='充值订单'; -- --------------------------------------------------------------------- -- 九、提现订单 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `withdraw_order`; CREATE TABLE `withdraw_order` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `order_no` varchar(64) NOT NULL DEFAULT '' COMMENT '内部订单号', `user_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'game_user.id', `apply_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '申请提现游戏币', `fee_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '手续费游戏币', `actual_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '应出账游戏币(扣费后)', `fiat_currency` varchar(16) NOT NULL DEFAULT '' COMMENT '出款法币币种', `need_audit` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=免审 1=人工审核', `audit_status` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=待审 1=通过 2=驳回', `from_jackpot` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=否 1=Jackpot相关拦截', `reject_reason` varchar(500) NOT NULL DEFAULT '' COMMENT '驳回原因', `paid_at` bigint(16) unsigned DEFAULT NULL COMMENT '出款完成时间', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_order_no` (`order_no`), KEY `idx_user_ctime` (`user_id`,`create_time`), KEY `idx_audit` (`need_audit`,`audit_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='提现订单'; -- --------------------------------------------------------------------- -- 十、代理钱包(每渠道/代理线一条) -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `game_agent_wallet`; CREATE TABLE `game_agent_wallet` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `channel_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'channel.id,一对一', `balance` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '可用佣金余额', `frozen` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '冻结', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_channel` (`channel_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='代理佣金钱包'; -- --------------------------------------------------------------------- -- 十一、代理钱包流水 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `game_agent_wallet_ledger`; CREATE TABLE `game_agent_wallet_ledger` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `channel_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'channel.id', `biz_type` varchar(32) NOT NULL DEFAULT '' COMMENT 'commission_payout|withdraw|manual 等', `direction` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '1=入金 2=出金', `amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '变动额,恒正', `balance_after` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '变动后余额', `ref_type` varchar(32) NOT NULL DEFAULT '' COMMENT '关联类型', `ref_id` bigint(20) unsigned DEFAULT NULL COMMENT '关联主键', `remark` varchar(500) NOT NULL DEFAULT '' COMMENT '备注', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_channel_ctime` (`channel_id`,`create_time`), KEY `idx_ref` (`ref_type`,`ref_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='代理钱包流水'; -- --------------------------------------------------------------------- -- 十二、代理结算周期(大盘快照) -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `agent_settlement_period`; CREATE TABLE `agent_settlement_period` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `period_type` varchar(16) NOT NULL DEFAULT '' COMMENT 'daily|weekly|monthly', `period_key` varchar(32) NOT NULL DEFAULT '' COMMENT '周期唯一键,如 2026-W16', `platform_ggr` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '平台当期总客损/毛利(可负)', `platform_turnover` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '全网有效投注流水', `status` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=未结算 1=已计算 2=已发放', `start_at` bigint(16) unsigned NOT NULL DEFAULT 0 COMMENT '周期开始时间戳', `end_at` bigint(16) unsigned NOT NULL DEFAULT 0 COMMENT '周期结束时间戳', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_period` (`period_type`,`period_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='代理结算周期'; -- --------------------------------------------------------------------- -- 十三、代理佣金明细(级差按行记录) -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `agent_commission_record`; CREATE TABLE `agent_commission_record` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `settlement_period_id` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT 'agent_settlement_period.id', `channel_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '获得佣金的渠道', `commission_mode` varchar(16) NOT NULL DEFAULT 'turnover' COMMENT 'turnover=流水占比 affiliate=联营', `line_turnover` decimal(18,4) DEFAULT NULL COMMENT '该线当期流水(turnover 模式用)', `line_turnover_ratio` decimal(18,8) DEFAULT NULL COMMENT '占全网比例', `pool_amount` decimal(18,4) DEFAULT NULL COMMENT '该线分桶基数', `rate_snapshot` decimal(9,6) DEFAULT NULL COMMENT '当期有效拨比/级差快照', `commission_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '本笔应发佣金', `status` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=待入账 1=已入账', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_period_channel` (`settlement_period_id`,`channel_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='代理佣金明细'; -- --------------------------------------------------------------------- -- 十四、联营契约 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `affiliate_contract`; CREATE TABLE `affiliate_contract` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `channel_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '联营代理 channel.id', `title` varchar(128) NOT NULL DEFAULT '' COMMENT '契约标题', `share_rate` decimal(9,6) NOT NULL DEFAULT 0.000000 COMMENT '客损占成比例', `admin_fee_rate` decimal(9,6) NOT NULL DEFAULT 0.000000 COMMENT '平台双降费等成本比例快照', `tier_json` json DEFAULT NULL COMMENT '阶梯条件 JSON,可选', `effective_from` bigint(16) unsigned NOT NULL DEFAULT 0 COMMENT '生效时间', `effective_to` bigint(16) unsigned DEFAULT NULL COMMENT '失效时间,空为长期', `status` tinyint(3) unsigned NOT NULL DEFAULT 1 COMMENT '0=停用 1=有效', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), KEY `idx_channel_time` (`channel_id`,`effective_from`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='联营契约'; -- --------------------------------------------------------------------- -- 十五、联营负结转(按代理线 + 周期) -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `affiliate_carryover`; CREATE TABLE `affiliate_carryover` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `settlement_period_id` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT 'agent_settlement_period.id', `channel_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '联营代理线', `opening_carryover` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '期初结转(常为负)', `period_net_ggr` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '当期辖区净客损', `period_net_after_fee` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '扣费后净利润基数', `commission_amount` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '本期应发联营佣金', `closing_carryover` decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '期末结转至下期', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_period_channel` (`settlement_period_id`,`channel_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='联营负结转'; -- --------------------------------------------------------------------- -- 十六、运营公告 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `operation_notice`; CREATE TABLE `operation_notice` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `title` varchar(255) NOT NULL DEFAULT '' COMMENT '标题', `content` mediumtext COMMENT '正文,可富文本', `notice_type` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=静默信箱 1=强弹窗', `status` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '0=草稿 1=发布', `publish_at` bigint(16) unsigned DEFAULT NULL COMMENT '发布时间', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', `update_time` bigint(16) unsigned DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`), KEY `idx_type_status` (`notice_type`,`status`,`publish_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='运营公告'; -- --------------------------------------------------------------------- -- 十七、用户公告已读/确认 -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `user_notice_read`; CREATE TABLE `user_notice_read` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'game_user.id', `notice_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'operation_notice.id', `read_at` bigint(16) unsigned DEFAULT NULL COMMENT '阅读时间', `confirmed` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT '强弹窗是否已勾选确认 0/1', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_notice` (`user_id`,`notice_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户公告阅读与确认'; -- --------------------------------------------------------------------- -- 十八、站内信(与公告分离的个性化通知) -- --------------------------------------------------------------------- DROP TABLE IF EXISTS `user_site_message`; CREATE TABLE `user_site_message` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'game_user.id', `title` varchar(255) NOT NULL DEFAULT '' COMMENT '标题', `body` mediumtext COMMENT '内容', `category` varchar(32) NOT NULL DEFAULT 'system' COMMENT '分类', `read_at` bigint(16) unsigned DEFAULT NULL COMMENT '已读时间,空未读', `create_time` bigint(16) unsigned DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_user_read` (`user_id`,`read_at`,`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户站内信'; SET FOREIGN_KEY_CHECKS = 1; -- ===================================================================== -- 可选:game_config 初始键(按需导入,值由运营最终确定) -- INSERT INTO game_config (config_key, config_value, value_type, remark, create_time, update_time) VALUES -- ('period_seconds','30','int','单局总时长秒', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()), -- ('bet_seconds','20','int','下注开放秒数', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); -- =====================================================================