320 lines
6.4 KiB
Markdown
Executable File
320 lines
6.4 KiB
Markdown
Executable File
# 期号问题快速修复指南
|
||
|
||
## 问题描述
|
||
|
||
用户报告:
|
||
1. **新游戏显示老游戏的开奖信息** - Xóc Đĩa 显示骰子游戏的历史记录
|
||
2. **无法正常下注** - 投注时提示错误
|
||
|
||
## 根本原因
|
||
|
||
1. **历史开奖记录是硬编码的** - 前台页面使用固定的示例数据
|
||
2. **期号状态可能不正确** - 需要确认期号是否处于 `pending` 状态
|
||
|
||
---
|
||
|
||
## 解决方案
|
||
|
||
### 1. 修改的文件
|
||
|
||
已修改以下文件以支持动态历史记录:
|
||
|
||
#### `App/Controllers/Web/HomeController.php`
|
||
- 添加获取历史开奖记录的代码
|
||
- 传递 `recentPeriods` 变量到视图
|
||
|
||
#### `App/Views/Web/live.php`
|
||
- 将硬编码的历史记录改为动态生成
|
||
- 根据游戏类型显示不同的历史记录格式
|
||
|
||
---
|
||
|
||
### 2. 验证步骤
|
||
|
||
#### 步骤1:检查数据库中的期号
|
||
|
||
```sql
|
||
-- 查看所有期号
|
||
SELECT id, period_number, game_id, status, created_at
|
||
FROM periods
|
||
ORDER BY id DESC
|
||
LIMIT 10;
|
||
|
||
-- 应该看到:
|
||
-- 骰子游戏(game_id=1)和 Xóc Đĩa(game_id=2)的期号分开
|
||
```
|
||
|
||
#### 步骤2:检查当前期号状态
|
||
|
||
```sql
|
||
-- 查看 Xóc Đĩa 的当前期号
|
||
SELECT id, period_number, game_id, status, start_time
|
||
FROM periods
|
||
WHERE game_id = 2
|
||
ORDER BY id DESC
|
||
LIMIT 1;
|
||
|
||
-- 状态应该是 'pending'
|
||
-- start_time 应该是最近的时间
|
||
```
|
||
|
||
#### 步骤3:如果期号状态不对
|
||
|
||
```sql
|
||
-- 如果状态是 'locked' 或其他,重置为 'pending'
|
||
UPDATE periods
|
||
SET status = 'pending', start_time = NOW()
|
||
WHERE id = [期号ID];
|
||
```
|
||
|
||
#### 步骤4:检查游戏配置
|
||
|
||
```sql
|
||
-- 确认游戏类型正确
|
||
SELECT id, name, code, type, status
|
||
FROM games;
|
||
|
||
-- 应该看到:
|
||
-- 1 | Tài Xỉu | dice | dice | 1
|
||
-- 2 | Xóc Đĩa | xocdia | xocdia | 1
|
||
```
|
||
|
||
---
|
||
|
||
### 3. 投注失败的常见原因
|
||
|
||
#### 原因1:期号状态不是 pending
|
||
|
||
**检查**:
|
||
```sql
|
||
SELECT id, period_number, status FROM periods WHERE game_id = 2 ORDER BY id DESC LIMIT 1;
|
||
```
|
||
|
||
**修复**:
|
||
```sql
|
||
UPDATE periods SET status = 'pending' WHERE id = [期号ID];
|
||
```
|
||
|
||
#### 原因2:投注时间超过60秒
|
||
|
||
**检查**:
|
||
```sql
|
||
SELECT id, period_number, start_time,
|
||
TIMESTAMPDIFF(SECOND, start_time, NOW()) as elapsed_seconds
|
||
FROM periods
|
||
WHERE game_id = 2
|
||
ORDER BY id DESC
|
||
LIMIT 1;
|
||
|
||
-- 如果 elapsed_seconds > 60,说明已经超时
|
||
```
|
||
|
||
**修复**:
|
||
```sql
|
||
-- 重置开始时间
|
||
UPDATE periods SET start_time = NOW() WHERE id = [期号ID];
|
||
```
|
||
|
||
#### 原因3:期号不存在
|
||
|
||
**检查**:
|
||
```sql
|
||
-- 查看是否有 Xóc Đĩa 的期号
|
||
SELECT COUNT(*) FROM periods WHERE game_id = 2;
|
||
```
|
||
|
||
**修复**:
|
||
- 进入后台 → 期号管理
|
||
- 选择"Xóc Đĩa"游戏
|
||
- 点击"开始下注"
|
||
|
||
---
|
||
|
||
### 4. 完整的重置流程
|
||
|
||
如果问题仍然存在,执行以下完整重置:
|
||
|
||
```sql
|
||
-- 1. 删除 Xóc Đĩa 的所有旧期号(可选,谨慎操作)
|
||
-- DELETE FROM periods WHERE game_id = 2;
|
||
|
||
-- 2. 确认游戏配置正确
|
||
UPDATE games SET type = 'xocdia', code = 'xocdia' WHERE name LIKE '%Xóc%';
|
||
|
||
-- 3. 通过后台创建新期号
|
||
-- 进入后台 → 期号管理 → 选择 Xóc Đĩa → 开始下注
|
||
```
|
||
|
||
---
|
||
|
||
### 5. 前台测试
|
||
|
||
#### 测试1:访问游戏页面
|
||
|
||
```bash
|
||
# 访问 Xóc Đĩa 游戏
|
||
http://yourdomain.com/live?game_id=2
|
||
|
||
# 应该看到:
|
||
# - 期号显示(例如:G220260108001)
|
||
# - 倒计时(60秒)
|
||
# - 历史记录为空或显示 Xóc Đĩa 的历史
|
||
```
|
||
|
||
#### 测试2:投注
|
||
|
||
1. 选择筹码金额
|
||
2. 点击投注区域(双/单 或 精确组合)
|
||
3. 点击"ĐẶT CƯỢC"确认
|
||
4. 应该看到"Đặt cược thành công!"提示
|
||
|
||
#### 测试3:查看投注记录
|
||
|
||
```sql
|
||
-- 查看最新的投注记录
|
||
SELECT id, user_id, period_id, bet_type, bet_value, amount, status
|
||
FROM bets
|
||
ORDER BY id DESC
|
||
LIMIT 5;
|
||
|
||
-- 应该看到刚才的投注记录
|
||
```
|
||
|
||
---
|
||
|
||
### 6. 浏览器控制台调试
|
||
|
||
打开浏览器开发者工具(F12),查看 Console 和 Network 标签:
|
||
|
||
#### Console 错误
|
||
|
||
如果看到错误信息,记录下来:
|
||
```
|
||
Poll error: ...
|
||
Bet error: ...
|
||
```
|
||
|
||
#### Network 请求
|
||
|
||
查看以下请求是否成功:
|
||
|
||
1. **期号轮询**:`/api/period/current?game_id=2`
|
||
- 应该返回:`{"success":true,"data":{...}}`
|
||
- 如果返回 `success: false`,说明期号不存在
|
||
|
||
2. **投注请求**:`/api/bet`
|
||
- 应该返回:`{"success":true,"new_balance":...}`
|
||
- 如果返回 `success: false`,查看 `message` 字段
|
||
|
||
---
|
||
|
||
### 7. 后台日志
|
||
|
||
如果问题仍然存在,检查后台日志:
|
||
|
||
```bash
|
||
# 查看 PHP 错误日志
|
||
tail -f /path/to/touzi/Storage/log/error.log
|
||
|
||
# 或者查看宝塔面板的日志
|
||
# 宝塔 → 网站 → 日志 → PHP错误日志
|
||
```
|
||
|
||
---
|
||
|
||
## 常见错误信息
|
||
|
||
### "Kỳ quay không tồn tại"(期号不存在)
|
||
|
||
**原因**:数据库中没有该游戏的 pending 期号
|
||
|
||
**解决**:
|
||
1. 进入后台期号管理
|
||
2. 选择游戏
|
||
3. 点击"开始下注"
|
||
|
||
---
|
||
|
||
### "Kỳ quay đã đóng hoặc đang xử lý"(期号已关闭)
|
||
|
||
**原因**:期号状态不是 `pending`
|
||
|
||
**解决**:
|
||
```sql
|
||
UPDATE periods SET status = 'pending' WHERE id = [期号ID];
|
||
```
|
||
|
||
---
|
||
|
||
### "Đã hết thời gian đặt cược"(投注时间已过)
|
||
|
||
**原因**:距离开始时间超过60秒
|
||
|
||
**解决**:
|
||
```sql
|
||
UPDATE periods SET start_time = NOW() WHERE id = [期号ID];
|
||
```
|
||
|
||
---
|
||
|
||
### "Dữ liệu không hợp lệ"(数据无效)
|
||
|
||
**原因**:前端发送的数据格式不正确
|
||
|
||
**解决**:
|
||
1. 检查浏览器 Console 是否有 JavaScript 错误
|
||
2. 确认 `currentGameId` 变量是否正确
|
||
3. 刷新页面重试
|
||
|
||
---
|
||
|
||
## 预防措施
|
||
|
||
### 1. 定期检查期号状态
|
||
|
||
```sql
|
||
-- 查看所有未结算的期号
|
||
SELECT id, period_number, game_id, status, start_time
|
||
FROM periods
|
||
WHERE status IN ('pending', 'locked', 'drawn')
|
||
ORDER BY id DESC;
|
||
```
|
||
|
||
### 2. 自动封盘机制
|
||
|
||
前台已经实现自动封盘:
|
||
- 60秒后自动将 `pending` 改为 `locked`
|
||
- 但需要有用户访问页面触发
|
||
|
||
### 3. 后台操作流程
|
||
|
||
标准流程:
|
||
1. 开始下注(创建 pending 期号)
|
||
2. 等待60秒或手动封盘
|
||
3. 录入开奖结果(状态变为 drawn)
|
||
4. 确认结算(状态变为 settled)
|
||
5. 重复步骤1
|
||
|
||
---
|
||
|
||
## 联系支持
|
||
|
||
如果以上步骤都无法解决问题,请提供:
|
||
|
||
1. **数据库查询结果**:
|
||
```sql
|
||
SELECT * FROM periods WHERE game_id = 2 ORDER BY id DESC LIMIT 3;
|
||
SELECT * FROM games WHERE id = 2;
|
||
```
|
||
|
||
2. **浏览器 Console 错误**:截图或复制错误信息
|
||
|
||
3. **Network 请求详情**:
|
||
- `/api/period/current?game_id=2` 的响应
|
||
- `/api/bet` 的请求和响应
|
||
|
||
---
|
||
|
||
**最后更新**: 2026-01-08
|
||
**适用版本**: TM68 投注平台
|