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