Files
henan-backend/docs/updata_sql.md
T

95 lines
6.2 KiB
Markdown
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.
# 数据库变更台账
> **数据库改动只写这里**:中文标题 + 完整可执行 SQL。不再单独建 `docs/*.sql`(全量基线除外)。
> 只记**变更 SQL**;**不写回滚 SQL** —— 已执行的条目即为既成事实,要撤销请从本文件的 git 历史取旧版本。
> 若某条变更依赖**尚未执行**的前置对象(建表、种子数据等),必须在条目标注清楚,别让后来者踩空。
---
## 新增「麻将胡了」(mahjong 玩法)的后台菜单、角色授权与维护开关
**背景**:麻将胡了以「**新游戏**」类型接入,复用原玫瑰女郎(olympus 玩法)的整套统计口径
—— 消费流水 `source=68`、奖励流水 `source=69`、开箱产出 `source=15`、新游戏返佣费率字段
`tt_user.newGameCommissionRate`。代码层改动(后端统计链路 + 两个前端)见 `docs/修改记录.md`;
本条目**只记数据库变更**。
**本次数据库变更 3 张表、共 17 行**(2026-09-22 已在库 `henan` 执行):
| 表 | 变更 | 说明 |
|---|---|---|
| `sys_config` | 新增 **1 行** | `config_id=154`、`config_key='mahjongMaintenance'`,即「麻将胡了维护」开关 |
| `sys_menu` | 新增 **8 行** | 顶级目录 `mahjong`(`menu_id=3200`)+ 7 个子页面(`3201`~`3207`) |
| `sys_role_menu` | 新增 **8 行** | 全部授权给 `role_id=103` |
> **为什么 `menu_id` 用 `3200~3207`**:`3130~3137` 是已下架的奥林匹斯旧号段,不复用,
> 免得数据里「哪段 ID 属于哪个玩法」的对应关系失真。
**变更 SQL**:
```sql
INSERT INTO `sys_menu`
(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES
(3200, '麻将胡了', 0, 6, 'mahjong', '', NULL, 1, 0, 'M', '0', '0', '', 'star', 'admin', NOW(), '', NULL, '麻将胡了游戏后台管理目录'),
(3201, '箱子配置', 3200, 1, 'box', 'game/mahjong/box/index', NULL, 1, 0, 'C', '0', '0', 'game:mahjong:box', 'shopping', 'admin', NOW(), '', NULL, '麻将胡了·箱子配置(11 档投注,price ≡ bet)'),
(3202, '饰品列表', 3200, 2, 'bucket', 'game/mahjong/bucket/index', NULL, 1, 0, 'C', '0', '0', 'game:mahjong:bucket', 'star', 'admin', NOW(), '', NULL, '麻将胡了·16 档饰品桶定义(0x~500x,只读)'),
(3203, '回合管理', 3200, 3, 'round', 'game/mahjong/round/index', NULL, 1, 0, 'C', '0', '0', 'game:mahjong:round', 'documentation', 'admin', NOW(), '', NULL, '麻将胡了·预生成回合池(只读)'),
(3204, '奖池水位', 3200, 4, 'rewardPool', 'game/mahjong/rewardPool/index', NULL, 1, 0, 'C', '0', '0', 'game:mahjong:pool', 'money', 'admin', NOW(), '', NULL, '麻将胡了·奖池水位(3 身份:普通/主播/白号)'),
(3205, '玩家记录', 3200, 5, 'record', 'game/mahjong/record/index', NULL, 1, 0, 'C', '0', '0', 'game:mahjong:record', 'list', 'admin', NOW(), '', NULL, '麻将胡了·玩家游玩记录'),
(3206, '每日统计', 3200, 6, 'dailywin', 'game/mahjong/dailywin/index', NULL, 1, 0, 'C', '0', '0', 'game:mahjong:win', 'chart', 'admin', NOW(), '', NULL, '麻将胡了·每日投注/赢奖/RTP 统计'),
(3207, '奖品管理', 3200, 7, 'prize', 'game/mahjong/prize/index', NULL, 1, 0, 'C', '0', '0', 'game:mahjong:prize', 'guide', 'admin', NOW(), '', NULL, '麻将胡了·返奖饰品与返奖区间');
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES
(103, 3200), (103, 3201), (103, 3202), (103, 3203),
(103, 3204), (103, 3205), (103, 3206), (103, 3207);
INSERT INTO `sys_config`
(`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES
(154, '麻将胡了维护', 'mahjongMaintenance', '0', 'Y', 'admin', NOW(), '', NULL, '麻将胡了维护开关 0正常 1维护');
```
**验证**(2026-09-22 实测结果):
```sql
SELECT COUNT(*) FROM sys_menu WHERE menu_id BETWEEN 3200 AND 3207; -- 期望 8,实测 8
SELECT COUNT(*) FROM sys_role_menu WHERE menu_id BETWEEN 3200 AND 3207; -- 期望 8,实测 8
SELECT COUNT(*) FROM sys_config WHERE config_key = 'mahjongMaintenance'; -- 期望 1,实测 1
```
后台左侧出现「麻将胡了」目录(`order_num=6`),下辖 7 个子页面;
「网站设置」页出现「麻将胡了维护」下拉框(0 正常 / 1 维护)。
**前置依赖:麻将胡了的 11 张游戏表**(`game_mahjong_box` / `_bucket` / `_box_bucket` /
`_round` / `_step` / `_record` / `_user` / `_box_template` / `_reward_log` / `_prize_ornament` / `_prize_range`)。
**DDL 与种子数据的权威出处是 `mahjong-py/schema.sql`,不抄进本台账**(已拍板:建表只以该文件为权威、直接对库执行)。
该文件**可重复执行**(`CREATE TABLE IF NOT EXISTS` + `ON DUPLICATE KEY UPDATE`),无任何 `DROP` / `DELETE`。
执行方式(**2026-09-22 已执行**):
```bash
docker exec -i henan_mysql_db mysql -uroot -p123456 --default-character-set=utf8mb4 -D henan < mahjong-py/schema.sql
```
落库结果(实测):
| 表 | 行数 | 说明 |
|---|---|---|
| `game_mahjong_box` | 11 | 11 档投注,`price ≡ bet` |
| `game_mahjong_bucket` | 16 | 0x ~ 500x |
| `game_mahjong_prize_ornament` | 12 | 返奖饰品(沿用玫瑰女郎 id 以维持区间映射) |
| `game_mahjong_prize_range` | 12 | 连续覆盖 0.01 ~ 99,999,999 |
| `_box_bucket` / `_round` / `_step` / `_record` / `_user` / `_box_template` / `_reward_log` | 0 | 空表,等运行期数据 |
```sql
SELECT COUNT(*) FROM information_schema.tables
WHERE table_schema = 'henan' AND table_name LIKE 'game\_mahjong\_%'; -- 期望 11,实测 11
```
**仍需后台操作生成的运行期数据**(不是建表,别当成漏建):
1. `game_mahjong_box_bucket` 的 **528 行配比**(16 桶 × 11 箱 × 3 身份)—— 后台
「麻将胡了 → 箱子配置 → 一键重算」(`POST /admin/mahjong/box/recalc_all`)。**空表时挑不到回合。**
2. **每箱×身份的初始奖池水位** —— 后台「奖池水位 → 注水」(`¥300` / `¥500` 两档需单独注)。