9.8 KiB
Executable File
9.8 KiB
Executable File
Xóc Đĩa 游戏集成完成报告
日期: 2026-01-08 集成方式: 方案 A(扩展 periods 表字段) 状态: ✅ 代码集成已完成,待数据库初始化
一、集成完成清单
✅ 数据库层
- 创建数据库迁移脚本
Db/xocdia_integration.sql- 扩展 periods 表(添加 coin1-4, red_count 字段)
- 插入 Xóc Đĩa 游戏记录
- 配置 6 种投注类型赔率
✅ 控制器层
-
App/Controllers/Admin/PeriodController.php- 扩展支持 Xóc Đĩa- 新增
drawXocdia()方法(开奖) - 新增
checkWinXocdia()方法(中奖判断) - 修改
draw()方法(游戏类型分发) - 修改
checkWin()方法(游戏类型分发)
- 新增
-
App/Controllers/Web/XocdiaController.php- 适配使用现有表- 修改
index()- 查询 games 表 - 修改
room()- 使用 periods 表 - 修改
placeBet()- 使用 bets 和 transactions 表 - 修改 API 方法 - 使用 periods 表字段
- 修改
✅ 路由层
- 清理
routes.php- 删除独立后台路由 (
/admin/xocdia/*) - 保留前台路由 (
/xocdia/*)
- 删除独立后台路由 (
✅ 视图层
-
删除独立后台视图
- 删除
App/Views/Admin/xocdia_rooms.php - 删除
App/Views/Admin/xocdia_periods.php - 删除后台菜单中的独立菜单项
- 删除
-
保留前台视图
App/Views/Web/xocdia_rooms.php- 游戏大厅App/Views/Web/xocdia_room.php- 游戏房间
✅ 文档层
- 创建
XOCDIA_INTEGRATION_GUIDE.md- 数据库变更说明
- 代码变更说明
- 管理流程文档
- 前台访问流程
- 常见问题 FAQ
✅ 清理工作
- 删除
App/Controllers/Admin/XocdiaRoomController.php - 删除
App/Controllers/Admin/XocdiaPeriodController.php - 删除
Db/xocdia_schema.sql(旧版独立 schema)
二、验证结果
文件存在性检查
✅ Db/xocdia_integration.sql (2292 字节)
✅ App/Controllers/Admin/PeriodController.php (973 行,包含 drawXocdia 和 checkWinXocdia 方法)
✅ App/Controllers/Web/XocdiaController.php (462 行)
✅ XOCDIA_INTEGRATION_GUIDE.md (388 行)
独立后台组件清理检查
✅ 无独立后台控制器 (App/Controllers/Admin/Xocdia*.php)
✅ 无独立后台视图 (App/Views/Admin/xocdia_*.php)
✅ 无旧版 schema (Db/xocdia_schema.sql)
代码集成检查
✅ PeriodController.php 包含 drawXocdia 方法 (第 304 行)
✅ PeriodController.php 包含 checkWinXocdia 方法 (第 900 行)
✅ PeriodController.php draw() 方法调用 drawXocdia (第 226 行)
✅ PeriodController.php checkWin() 方法调用 checkWinXocdia (第 752 行)
三、下一步操作指引
步骤 1:执行数据库迁移 ⚠️ 必须执行
# 备份数据库(重要!)
mysqldump -u tm68 -p tm68 > backup_$(date +%Y%m%d_%H%M%S).sql
# 执行迁移脚本
mysql -u tm68 -p tm68 < Db/xocdia_integration.sql
预期输出:
✅ Xóc Đĩa 游戏集成完成!
game_id: [新游戏 ID]
game_code: xocdia
步骤 2:验证数据库变更
-- 检查 periods 表新字段
SHOW COLUMNS FROM periods LIKE 'coin%';
-- 预期返回 5 行:coin1, coin2, coin3, coin4, red_count
-- 检查 Xóc Đĩa 游戏
SELECT * FROM games WHERE type = 'xocdia';
-- 预期返回 1 行游戏记录
-- 检查赔率配置
SELECT g.name, go.type, go.odds
FROM game_odds go
JOIN games g ON go.game_id = g.id
WHERE g.code = 'xocdia';
-- 预期返回 6 行赔率记录
步骤 3:后台管理测试
3.1 创建 Xóc Đĩa 期号
- 访问
/admin/periods - 选择游戏:"Xóc Đĩa"
- 点击"开始新期号"
- 验证期号格式:
G{GameID}{YYYYMMDD}{NNNN}
3.2 开奖测试
- 在期号列表找到"待开奖"的 Xóc Đĩa 期号
- 点击"开奖"
- 选择开奖方式:
- 手动开奖:选择 4 个硬币的颜色(红/白)
- 自动开奖:系统随机生成
- 验证结果字段:
coin1,coin2,coin3,coin4= 0 或 1red_count= 0-4result= "even" 或 "odd"
3.3 结算测试
- 确认开奖结果无误
- 点击"结算"
- 验证:
- 投注记录状态更新(win/lose)
- 赢家余额增加
- 交易流水记录正确
- 期号状态变为 "settled"
步骤 4:前台用户测试
4.1 游戏大厅
- 访问
/xocdia - 验证:
- 显示 Xóc Đĩa 游戏卡片
- 显示当前期号
- 显示赔率信息
4.2 游戏房间
- 点击"进入房间"
- 验证:
- 直播流播放(如已配置)
- 当前期号显示
- 6 种投注类型可选
- 赔率显示正确
4.3 投注流程
- 选择投注类型(双/单/4红/4白/3红1白/1红3白)
- 输入金额(10 - 10000)
- 点击"投注"
- 验证:
- 余额实时扣除
- 投注记录显示
- 返回成功消息
4.4 开奖结果
- 等待开奖
- 验证:
- 显示 4 个硬币结果(红色/白色)
- 显示红色硬币数量
- 显示单双结果
- 中奖投注显示奖金
步骤 5:边界情况测试
测试用例
- 期号关闭后投注(应拒绝)
- 余额不足投注(应拒绝)
- 赔率配置缺失(应报错)
- 并发投注(同一用户多次下注)
- 骰子游戏和 Xóc Đĩa 共存(互不干扰)
四、集成架构说明
数据库表共享策略
| 表名 | 骰子游戏使用字段 | Xóc Đĩa 使用字段 | 共享字段 |
|---|---|---|---|
games |
- | - | id, name, code, type, status |
periods |
dice1, dice2, dice3, total | coin1, coin2, coin3, coin4, red_count | id, game_id, period_number, status, result |
bets |
- | - | 全部字段(通用) |
game_odds |
- | - | 全部字段(通用) |
transactions |
- | - | 全部字段(通用) |
游戏类型识别
// 通过 games.type 字段区分
$game = $db->get('games', ['type'], ['id' => $gameId]);
if ($game['type'] === 'xocdia') {
// 使用 coin1-4 字段
$this->drawXocdia($db, $id, $data);
} else {
// 使用 dice1-3 字段
$this->drawDice($db, $id, $data);
}
中奖判断逻辑
骰子游戏
private function checkWinDice($bet, $period, $oddsConfig) {
$total = $period['total']; // dice1 + dice2 + dice3
// 根据 bet_type 判断...
}
Xóc Đĩa
private function checkWinXocdia($bet, $period, $oddsConfig) {
$redCount = $period['red_count']; // coin1 + coin2 + coin3 + coin4
switch ($bet['bet_type']) {
case 'even': // 双
return ($redCount % 2 == 0);
case 'four_red': // 4 红
return ($redCount == 4);
case 'three_red': // 3 红 1 白
return ($redCount == 3);
// ...
}
}
五、Xóc Đĩa 投注类型说明
| 投注类型 | bet_type | 中奖条件 | 赔率 | 示例 |
|---|---|---|---|---|
| 双(Chẵn) | even | 红色硬币数量为 0, 2, 4 | 1:0.97 | 投 100,赢 97 |
| 单(Lẻ) | odd | 红色硬币数量为 1, 3 | 1:0.97 | 投 100,赢 97 |
| 4 红 | four_red | 4 个红色硬币 | 1:8.00 | 投 100,赢 800 |
| 4 白 | four_white | 0 个红色硬币(即 4 白) | 1:8.00 | 投 100,赢 800 |
| 3 红 1 白 | three_red | 3 个红色硬币 | 1:1.90 | 投 100,赢 190 |
| 1 红 3 白 | three_white | 1 个红色硬币 | 1:1.90 | 投 100,赢 190 |
六、常见问题解答
Q1: 骰子游戏会受影响吗?
答:不会。两种游戏使用不同的字段,通过 games.type 区分,互不干扰。
Q2: 如何修改赔率?
答:
- 访问
/admin/games - 找到 Xóc Đĩa 游戏,点击"配置赔率"
- 修改对应投注类型的赔率值
- 保存
注意:修改赔率只影响新投注,已下注订单使用下注时的赔率(快照机制)。
Q3: 如何添加新的 Xóc Đĩa 游戏房间?
答:
- 在
/admin/games创建新游戏 - 游戏类型选择
xocdia - 配置该游戏的赔率(可以与现有游戏不同)
- 前台
/xocdia会自动显示所有 Xóc Đĩa 游戏
Q4: 如何配置直播流?
答:
- 在
/admin/games编辑 Xóc Đĩa 游戏 - 填写
stream_url字段(支持 HLS/FLV/MPEGTS) - 保存后,前台游戏房间会自动播放
七、技术支持
日志位置
- 错误日志:
Storage/log/error.log - 数据库查询日志:Medoo 不记录日志,可通过
$db->medoo->last()查看最后执行的 SQL
调试模式
在 index.php 开启调试:
error_reporting(E_ALL);
ini_set('display_errors', 1);
数据库工具
# 查看最后执行的 SQL
$sql = $db->medoo->last();
echo $sql;
# 查看错误信息
$error = $db->medoo->error();
print_r($error);
八、回滚方案
如果需要回滚集成:
-- 删除 Xóc Đĩa 游戏记录
DELETE FROM games WHERE code = 'xocdia';
-- 删除赔率配置
DELETE FROM game_odds WHERE game_id = (SELECT id FROM games WHERE code = 'xocdia');
-- 删除扩展字段(可选,不影响骰子游戏)
ALTER TABLE periods
DROP COLUMN coin1,
DROP COLUMN coin2,
DROP COLUMN coin3,
DROP COLUMN coin4,
DROP COLUMN red_count;
九、性能优化建议
数据库索引
-- 为常用查询添加索引
CREATE INDEX idx_periods_game_status ON periods(game_id, status);
CREATE INDEX idx_bets_period_user ON bets(period_id, user_id);
缓存策略
- 游戏列表缓存(Redis)
- 赔率配置缓存(Redis)
- 当前期号缓存(Redis,60秒过期)
前台优化
- 使用 WebSocket 推送开奖结果(避免轮询)
- 投注记录分页加载
- 开奖历史延迟加载
集成完成日期: 2026-01-08 文档版本: 1.0.0 负责人: Claude AI 状态: ✅ 代码集成完成,待数据库初始化和测试
下一步: 执行数据库迁移脚本,按照"步骤 1"开始验证