Initial commit: 投注游戏平台初始化

This commit is contained in:
li
2026-02-25 01:26:58 +08:00
commit 77ca2cc8b3
275 changed files with 237479 additions and 0 deletions
+319
View File
@@ -0,0 +1,319 @@
# 期号问题快速修复指南
## 问题描述
用户报告:
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 Đĩagame_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 投注平台