Files
pk10/XOCDIA_集成完成报告.md
T

9.8 KiB
Executable File
Raw Blame History

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 期号

  1. 访问 /admin/periods
  2. 选择游戏:"Xóc Đĩa"
  3. 点击"开始新期号"
  4. 验证期号格式:G{GameID}{YYYYMMDD}{NNNN}

3.2 开奖测试

  1. 在期号列表找到"待开奖"的 Xóc Đĩa 期号
  2. 点击"开奖"
  3. 选择开奖方式:
    • 手动开奖:选择 4 个硬币的颜色(红/白)
    • 自动开奖:系统随机生成
  4. 验证结果字段:
    • coin1, coin2, coin3, coin4 = 0 或 1
    • red_count = 0-4
    • result = "even" 或 "odd"

3.3 结算测试

  1. 确认开奖结果无误
  2. 点击"结算"
  3. 验证:
    • 投注记录状态更新(win/lose
    • 赢家余额增加
    • 交易流水记录正确
    • 期号状态变为 "settled"

步骤 4:前台用户测试

4.1 游戏大厅

  1. 访问 /xocdia
  2. 验证:
    • 显示 Xóc Đĩa 游戏卡片
    • 显示当前期号
    • 显示赔率信息

4.2 游戏房间

  1. 点击"进入房间"
  2. 验证:
    • 直播流播放(如已配置)
    • 当前期号显示
    • 6 种投注类型可选
    • 赔率显示正确

4.3 投注流程

  1. 选择投注类型(双/单/4红/4白/3红1白/1红3白)
  2. 输入金额(10 - 10000
  3. 点击"投注"
  4. 验证:
    • 余额实时扣除
    • 投注记录显示
    • 返回成功消息

4.4 开奖结果

  1. 等待开奖
  2. 验证:
    • 显示 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: 如何修改赔率?

  1. 访问 /admin/games
  2. 找到 Xóc Đĩa 游戏,点击"配置赔率"
  3. 修改对应投注类型的赔率值
  4. 保存

注意:修改赔率只影响新投注,已下注订单使用下注时的赔率(快照机制)。

Q3: 如何添加新的 Xóc Đĩa 游戏房间?

  1. /admin/games 创建新游戏
  2. 游戏类型选择 xocdia
  3. 配置该游戏的赔率(可以与现有游戏不同)
  4. 前台 /xocdia 会自动显示所有 Xóc Đĩa 游戏

Q4: 如何配置直播流?

  1. /admin/games 编辑 Xóc Đĩa 游戏
  2. 填写 stream_url 字段(支持 HLS/FLV/MPEGTS
  3. 保存后,前台游戏房间会自动播放

七、技术支持

日志位置

  • 错误日志: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
  • 当前期号缓存(Redis60秒过期)

前台优化

  • 使用 WebSocket 推送开奖结果(避免轮询)
  • 投注记录分页加载
  • 开奖历史延迟加载

集成完成日期: 2026-01-08 文档版本: 1.0.0 负责人: Claude AI 状态: 代码集成完成,待数据库初始化和测试


下一步: 执行数据库迁移脚本,按照"步骤 1"开始验证