Files
pk10/Docs/PERIOD_ISSUE_FIX.md

6.4 KiB
Executable File
Raw Permalink Blame History

期号问题快速修复指南

问题描述

用户报告:

  1. 新游戏显示老游戏的开奖信息 - Xóc Đĩa 显示骰子游戏的历史记录
  2. 无法正常下注 - 投注时提示错误

根本原因

  1. 历史开奖记录是硬编码的 - 前台页面使用固定的示例数据
  2. 期号状态可能不正确 - 需要确认期号是否处于 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 Đĩagame_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:投注

  1. 选择筹码金额
  2. 点击投注区域(双/单 或 精确组合)
  3. 点击"ĐẶT CƯỢC"确认
  4. 应该看到"Đặ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 请求

查看以下请求是否成功:

  1. 期号轮询/api/period/current?game_id=2

    • 应该返回:{"success":true,"data":{...}}
    • 如果返回 success: false,说明期号不存在
  2. 投注请求/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 期号

解决

  1. 进入后台期号管理
  2. 选择游戏
  3. 点击"开始下注"

"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ệ"(数据无效)

原因:前端发送的数据格式不正确

解决

  1. 检查浏览器 Console 是否有 JavaScript 错误
  2. 确认 currentGameId 变量是否正确
  3. 刷新页面重试

预防措施

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. 后台操作流程

标准流程:

  1. 开始下注(创建 pending 期号)
  2. 等待60秒或手动封盘
  3. 录入开奖结果(状态变为 drawn
  4. 确认结算(状态变为 settled
  5. 重复步骤1

联系支持

如果以上步骤都无法解决问题,请提供:

  1. 数据库查询结果
SELECT * FROM periods WHERE game_id = 2 ORDER BY id DESC LIMIT 3;
SELECT * FROM games WHERE id = 2;
  1. 浏览器 Console 错误:截图或复制错误信息

  2. Network 请求详情

    • /api/period/current?game_id=2 的响应
    • /api/bet 的请求和响应

最后更新: 2026-01-08 适用版本: TM68 投注平台