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

386 lines
9.8 KiB
Markdown
Executable File
Raw Permalink 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.
# Xóc Đĩa 游戏集成完成报告
**日期**: 2026-01-08
**集成方式**: 方案 A(扩展 periods 表字段)
**状态**: ✅ 代码集成已完成,待数据库初始化
---
## 一、集成完成清单
### ✅ 数据库层
- [x] 创建数据库迁移脚本 `Db/xocdia_integration.sql`
- 扩展 periods 表(添加 coin1-4, red_count 字段)
- 插入 Xóc Đĩa 游戏记录
- 配置 6 种投注类型赔率
### ✅ 控制器层
- [x] `App/Controllers/Admin/PeriodController.php` - 扩展支持 Xóc Đĩa
- 新增 `drawXocdia()` 方法(开奖)
- 新增 `checkWinXocdia()` 方法(中奖判断)
- 修改 `draw()` 方法(游戏类型分发)
- 修改 `checkWin()` 方法(游戏类型分发)
- [x] `App/Controllers/Web/XocdiaController.php` - 适配使用现有表
- 修改 `index()` - 查询 games 表
- 修改 `room()` - 使用 periods 表
- 修改 `placeBet()` - 使用 bets 和 transactions 表
- 修改 API 方法 - 使用 periods 表字段
### ✅ 路由层
- [x] 清理 `routes.php`
- 删除独立后台路由 (`/admin/xocdia/*`)
- 保留前台路由 (`/xocdia/*`)
### ✅ 视图层
- [x] 删除独立后台视图
- 删除 `App/Views/Admin/xocdia_rooms.php`
- 删除 `App/Views/Admin/xocdia_periods.php`
- 删除后台菜单中的独立菜单项
- [x] 保留前台视图
- `App/Views/Web/xocdia_rooms.php` - 游戏大厅
- `App/Views/Web/xocdia_room.php` - 游戏房间
### ✅ 文档层
- [x] 创建 `XOCDIA_INTEGRATION_GUIDE.md`
- 数据库变更说明
- 代码变更说明
- 管理流程文档
- 前台访问流程
- 常见问题 FAQ
### ✅ 清理工作
- [x] 删除 `App/Controllers/Admin/XocdiaRoomController.php`
- [x] 删除 `App/Controllers/Admin/XocdiaPeriodController.php`
- [x] 删除 `Db/xocdia_schema.sql`(旧版独立 schema
---
## 二、验证结果
### 文件存在性检查
```bash
✅ Db/xocdia_integration.sql (2292 字节)
✅ App/Controllers/Admin/PeriodController.php (973 行,包含 drawXocdia 和 checkWinXocdia 方法)
✅ App/Controllers/Web/XocdiaController.php (462)
✅ XOCDIA_INTEGRATION_GUIDE.md (388)
```
### 独立后台组件清理检查
```bash
✅ 无独立后台控制器 (App/Controllers/Admin/Xocdia*.php)
✅ 无独立后台视图 (App/Views/Admin/xocdia_*.php)
✅ 无旧版 schema (Db/xocdia_schema.sql)
```
### 代码集成检查
```bash
✅ PeriodController.php 包含 drawXocdia 方法 (304)
✅ PeriodController.php 包含 checkWinXocdia 方法 (900)
✅ PeriodController.php draw() 方法调用 drawXocdia (226)
✅ PeriodController.php checkWin() 方法调用 checkWinXocdia (752)
```
---
## 三、下一步操作指引
### 步骤 1:执行数据库迁移 ⚠️ 必须执行
```bash
# 备份数据库(重要!)
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:验证数据库变更
```sql
-- 检查 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` | - | - | 全部字段(通用) |
### 游戏类型识别
```php
// 通过 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);
}
```
### 中奖判断逻辑
#### 骰子游戏
```php
private function checkWinDice($bet, $period, $oddsConfig) {
$total = $period['total']; // dice1 + dice2 + dice3
// 根据 bet_type 判断...
}
```
#### Xóc Đĩa
```php
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` 开启调试:
```php
error_reporting(E_ALL);
ini_set('display_errors', 1);
```
### 数据库工具
```bash
# 查看最后执行的 SQL
$sql = $db->medoo->last();
echo $sql;
# 查看错误信息
$error = $db->medoo->error();
print_r($error);
```
---
## 八、回滚方案
如果需要回滚集成:
```sql
-- 删除 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;
```
---
## 九、性能优化建议
### 数据库索引
```sql
-- 为常用查询添加索引
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"开始验证