465 lines
10 KiB
Markdown
Executable File
465 lines
10 KiB
Markdown
Executable File
# Xóc Đĩa 游戏 - 后台管理系统
|
||
|
||
## 📋 项目概述
|
||
|
||
这是为 TM68 在线娱乐平台开发的 **Xóc Đĩa(色碟)** 游戏后台管理系统。
|
||
|
||
Xóc Đĩa 是越南传统赌博游戏,使用 4 枚双色硬币(红/白),玩家根据硬币颜色组合进行投注。
|
||
|
||
---
|
||
|
||
## 🎮 游戏规则
|
||
|
||
### 基本玩法
|
||
|
||
1. 荷官摇动碗盘,展示 4 枚硬币的结果
|
||
2. 每枚硬币有两面:**红色 (Đen)** 或 **白色 (Trắng)**
|
||
3. 玩家提前押注结果组合
|
||
|
||
### 投注类型与赔率
|
||
|
||
| 投注类型 | 说明 | 默认赔率 |
|
||
|---------|------|---------|
|
||
| **Chẵn (双)** | 4红 / 4白 / 2红2白 | 1:1 |
|
||
| **Lẻ (单)** | 3红1白 / 1红3白 | 1:1 |
|
||
| **4 Đen (4红)** | 4枚全红 | 10:1 |
|
||
| **4 Trắng (4白)** | 4枚全白 | 10:1 |
|
||
| **3 Đen (3红1白)** | 3红1白 | 3.5:1 |
|
||
| **3 Trắng (3白1红)** | 1红3白 | 3.5:1 |
|
||
|
||
### 房间类型
|
||
|
||
#### 1. Bàn Thu Phế (抽水台)
|
||
- 庄家对赢家抽取佣金(默认 5%)
|
||
- 标准玩法
|
||
|
||
#### 2. Bàn Xâu 3 Đen (免水台)
|
||
- 免抽水(1赔1)
|
||
- **特殊规则**:出现"3红1白"时,押"单"的玩家退款(可配置)
|
||
- 庄家通过特殊规则保持优势
|
||
|
||
---
|
||
|
||
## 🗂️ 系统架构
|
||
|
||
### 目录结构
|
||
|
||
```
|
||
touzi/
|
||
├── App/
|
||
│ ├── Controllers/
|
||
│ │ └── Admin/
|
||
│ │ ├── XocdiaRoomController.php # 房间配置管理
|
||
│ │ └── XocdiaPeriodController.php # 期号管理
|
||
│ └── Views/
|
||
│ └── Admin/
|
||
│ ├── xocdia_rooms.php # 房间管理界面
|
||
│ └── xocdia_periods.php # 期号管理界面
|
||
├── Db/
|
||
│ └── xocdia_schema.sql # 数据库表结构
|
||
├── Docs/
|
||
│ └── XOCDIA_ADMIN_GUIDE.md # 详细使用指南
|
||
└── routes.php # 路由配置
|
||
```
|
||
|
||
### 数据库表
|
||
|
||
| 表名 | 用途 |
|
||
|-----|------|
|
||
| `xd_room_config` | 房间配置(赔率、限红、规则) |
|
||
| `xd_periods` | 期号记录(状态、结果、配置快照) |
|
||
| `xd_bets` | 投注记录 |
|
||
| `xd_settlements` | 结算汇总 |
|
||
| `xd_bet_stats` | 实时投注统计 |
|
||
|
||
---
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 步骤1:初始化数据库
|
||
|
||
```bash
|
||
# 登录 MySQL
|
||
mysql -u your_username -p
|
||
|
||
# 使用现有数据库
|
||
USE touzi_database;
|
||
|
||
# 导入表结构
|
||
SOURCE /path/to/touzi/Db/xocdia_schema.sql;
|
||
```
|
||
|
||
**验证**:
|
||
```sql
|
||
SHOW TABLES LIKE 'xd_%';
|
||
-- 应该看到 5 个表
|
||
|
||
SELECT * FROM xd_room_config;
|
||
-- 应该看到 2 个默认房间
|
||
```
|
||
|
||
### 步骤2:访问后台
|
||
|
||
1. 登录后台:`http://yourdomain.com/admin/login`
|
||
2. 访问房间管理:`http://yourdomain.com/admin/xocdia/rooms`
|
||
3. 访问期号管理:`http://yourdomain.com/admin/xocdia/periods`
|
||
|
||
### 步骤3:配置房间
|
||
|
||
1. 在房间列表点击"编辑"
|
||
2. 修改赔率、限红、抽水比例等
|
||
3. 保存配置
|
||
|
||
### 步骤4:开始第一期游戏
|
||
|
||
1. 访问期号管理页面
|
||
2. 选择房间
|
||
3. 点击"开始新期号"
|
||
4. 等待用户下注(或手动点击"封盘")
|
||
5. 点击"开奖",选择 4 枚硬币的结果
|
||
6. 系统自动结算并更新用户余额
|
||
|
||
---
|
||
|
||
## 🎯 管理流程
|
||
|
||
### 完整流程图
|
||
|
||
```
|
||
┌────────────┐
|
||
│ 开始新期号 │ → 自动生成期号、快照配置
|
||
└──────┬─────┘
|
||
↓
|
||
┌────────────┐
|
||
│ 下注阶段 │ → 用户可以投注(30-60秒)
|
||
└──────┬─────┘
|
||
↓
|
||
┌────────────┐
|
||
│ 封盘 │ → 停止接受新投注
|
||
└──────┬─────┘
|
||
↓
|
||
┌────────────┐
|
||
│ 开奖 │ → 管理员选择 4 枚硬币结果
|
||
└──────┬─────┘
|
||
↓
|
||
┌────────────┐
|
||
│ 自动结算 │ → 判断输赢、计算赔付、更新余额
|
||
└──────┬─────┘
|
||
↓
|
||
┌────────────┐
|
||
│ 展示结果 │ → 显示开奖结果和赔付明细
|
||
└────────────┘
|
||
```
|
||
|
||
### 关键操作
|
||
|
||
#### 1. 配置赔率
|
||
|
||
**方式 A:通过界面**
|
||
- 访问 `/admin/xocdia/rooms`
|
||
- 点击"编辑"按钮
|
||
- 修改赔率配置
|
||
- 保存
|
||
|
||
**方式 B:直接修改数据库**
|
||
```sql
|
||
UPDATE xd_room_config
|
||
SET odds = JSON_OBJECT(
|
||
'even', 1.0,
|
||
'odd', 1.0,
|
||
'four_red', 15.0, -- 修改为 15 倍
|
||
'four_white', 15.0,
|
||
'three_red', 5.0,
|
||
'three_white', 5.0
|
||
),
|
||
version = version + 1
|
||
WHERE room_id = 1;
|
||
```
|
||
|
||
#### 2. 开始期号
|
||
|
||
**API 调用**:
|
||
```javascript
|
||
fetch('/admin/xocdia/periods/start', {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({ room_id: 1 })
|
||
})
|
||
```
|
||
|
||
#### 3. 开奖
|
||
|
||
**API 调用**:
|
||
```javascript
|
||
fetch('/admin/xocdia/periods/draw', {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({
|
||
period_id: 123,
|
||
coins: [1, 1, 1, 0] // 3红1白
|
||
})
|
||
})
|
||
```
|
||
|
||
**开奖结果映射**:
|
||
```
|
||
[1, 1, 1, 1] → 4_red (4红)
|
||
[1, 1, 1, 0] → 3_red_1_white (3红1白)
|
||
[1, 1, 0, 0] → 2_red_2_white (2红2白)
|
||
[1, 0, 0, 0] → 1_red_3_white (1红3白)
|
||
[0, 0, 0, 0] → 4_white (4白)
|
||
```
|
||
|
||
---
|
||
|
||
## 💰 结算逻辑
|
||
|
||
### 基础结算(抽水台)
|
||
|
||
```
|
||
1. 判断输赢
|
||
- 投注"双",结果是 4红 → 赢
|
||
- 投注"单",结果是 3红1白 → 赢
|
||
|
||
2. 计算赔付
|
||
- 赢得金额 = 投注金额 × 赔率
|
||
- 佣金 = 赢得金额 × 佣金率 (5%)
|
||
- 净盈亏 = 赢得金额 - 佣金
|
||
|
||
3. 更新余额
|
||
- 用户余额 += 净盈亏
|
||
|
||
示例:
|
||
投注 100 元押"单",赔率 1.0,结果 3红1白
|
||
→ 赢得金额 = 100 × 1.0 = 100
|
||
→ 佣金 = 100 × 0.05 = 5
|
||
→ 净盈亏 = 100 - 5 = 95
|
||
→ 用户实际获得 95 元利润
|
||
```
|
||
|
||
### 特殊规则结算(免水台)
|
||
|
||
```
|
||
配置示例:
|
||
{
|
||
"trigger_result": "3_red_1_white", // 触发条件
|
||
"affected_bet_types": ["odd"], // 影响的投注类型
|
||
"action": "refund", // 动作:退款
|
||
"refund_percentage": 1.0 // 100% 退款
|
||
}
|
||
|
||
结算流程:
|
||
1. 检查结果是否为 "3_red_1_white"
|
||
2. 如果是,检查投注类型是否为 "odd"
|
||
3. 如果匹配,执行退款动作:
|
||
- 赢得金额 = 投注金额 × 100% = 投注金额
|
||
- 净盈亏 = 0(不赚不赔)
|
||
- 状态 = 'refund'
|
||
|
||
示例:
|
||
投注 100 元押"单",结果 3红1白
|
||
→ 触发特殊规则
|
||
→ 退款 100 元
|
||
→ 净盈亏 = 0
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 数据查询
|
||
|
||
### 查看房间盈亏
|
||
|
||
```sql
|
||
-- 今日盈亏
|
||
SELECT
|
||
room_id,
|
||
SUM(house_profit) as total_profit,
|
||
SUM(total_bets_amount) as total_bets,
|
||
COUNT(*) as period_count
|
||
FROM xd_settlements
|
||
WHERE settled_at >= CURDATE()
|
||
GROUP BY room_id;
|
||
|
||
-- 历史盈亏(按日)
|
||
SELECT
|
||
DATE(settled_at) as date,
|
||
room_id,
|
||
SUM(house_profit) as daily_profit,
|
||
COUNT(*) as period_count
|
||
FROM xd_settlements
|
||
WHERE room_id = 1
|
||
GROUP BY DATE(settled_at), room_id
|
||
ORDER BY date DESC
|
||
LIMIT 30;
|
||
```
|
||
|
||
### 查看用户投注记录
|
||
|
||
```sql
|
||
SELECT
|
||
u.username,
|
||
b.period_number,
|
||
b.bet_type,
|
||
b.bet_amount,
|
||
b.status,
|
||
b.net_profit,
|
||
b.created_at
|
||
FROM xd_bets b
|
||
JOIN users u ON b.user_id = u.id
|
||
WHERE u.id = 123
|
||
ORDER BY b.created_at DESC
|
||
LIMIT 50;
|
||
```
|
||
|
||
### 统计热门玩法
|
||
|
||
```sql
|
||
SELECT
|
||
bet_type,
|
||
COUNT(*) as bet_count,
|
||
SUM(bet_amount) as total_amount,
|
||
AVG(bet_amount) as avg_amount
|
||
FROM xd_bets
|
||
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
|
||
GROUP BY bet_type
|
||
ORDER BY bet_count DESC;
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 配置说明
|
||
|
||
### 房间配置字段详解
|
||
|
||
```json
|
||
{
|
||
"room_id": 1,
|
||
"room_name": "Bàn Thu Phế",
|
||
"room_type": "commission", // commission=抽水台, special_rule=免水台
|
||
|
||
// 赔率配置(倍数)
|
||
"odds": {
|
||
"even": 1.0, // 双
|
||
"odd": 1.0, // 单
|
||
"four_red": 10.0, // 4红
|
||
"four_white": 10.0, // 4白
|
||
"three_red": 3.5, // 3红1白
|
||
"three_white": 3.5 // 1红3白
|
||
},
|
||
|
||
// 抽水配置
|
||
"commission_rate": 0.05, // 5%
|
||
"commission_enabled": true, // 是否启用
|
||
|
||
// 限红配置
|
||
"limits": {
|
||
"min_bet": 10, // 最小投注
|
||
"max_bet": 50000, // 最大投注
|
||
"max_payout": 500000 // 最大赔付
|
||
},
|
||
|
||
// 时间配置
|
||
"timing": {
|
||
"betting_duration": 30, // 下注时长(秒)
|
||
"result_display_duration": 8, // 结果展示时长(秒)
|
||
"auto_start_next": true // 自动开始下一期
|
||
},
|
||
|
||
// 特殊规则(仅免水台)
|
||
"special_rule": {
|
||
"enabled": true,
|
||
"trigger_result": "3_red_1_white",
|
||
"affected_bet_types": ["odd"],
|
||
"action": "refund", // refund/half_win/lose
|
||
"refund_percentage": 1.0 // 1.0=100%, 0.5=50%
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
### 配置修改
|
||
|
||
1. **配置修改后不会立即生效**
|
||
- 当前期号使用配置快照
|
||
- 新期号开始时才会读取最新配置
|
||
|
||
2. **版本控制**
|
||
- 每次修改配置,`version` 字段自动 +1
|
||
- 用于乐观锁,防止并发修改冲突
|
||
|
||
### 开奖操作
|
||
|
||
1. **开奖不可撤销**
|
||
- 开奖后立即结算并更新余额
|
||
- 如果误操作,需手动回滚数据库
|
||
|
||
2. **结算原子性**
|
||
- 结算过程使用事务保证
|
||
- 失败会自动回滚
|
||
|
||
### 安全建议
|
||
|
||
1. **限制管理员权限**
|
||
- 开奖权限应严格控制
|
||
- 建议启用操作日志
|
||
|
||
2. **数据备份**
|
||
- 定期备份 `xd_*` 表
|
||
- 重要操作前手动备份
|
||
|
||
3. **并发控制**
|
||
- 避免多个管理员同时操作同一期号
|
||
- 配置更新使用乐观锁
|
||
|
||
---
|
||
|
||
## 📚 相关文档
|
||
|
||
- **详细使用指南**: `Docs/XOCDIA_ADMIN_GUIDE.md`
|
||
- **后端逻辑架构**: 参见开发文档
|
||
- **数据库表结构**: `Db/xocdia_schema.sql`
|
||
- **API 接口文档**: 待补充
|
||
|
||
---
|
||
|
||
## 🛠️ 后续开发计划
|
||
|
||
### 第一阶段(核心功能完善)
|
||
|
||
- [ ] WebSocket 实时通信
|
||
- [ ] 自动化定时任务(自动开奖、封盘)
|
||
- [ ] 风险监控预警
|
||
- [ ] 操作日志记录
|
||
|
||
### 第二阶段(数据分析)
|
||
|
||
- [ ] 房间盈亏报表
|
||
- [ ] 用户行为分析
|
||
- [ ] 开奖历史走势图
|
||
- [ ] 实时数据可视化
|
||
|
||
### 第三阶段(体验优化)
|
||
|
||
- [ ] 移动端适配
|
||
- [ ] 多语言支持(越南语/中文)
|
||
- [ ] 游戏历史回放
|
||
- [ ] API 开放接口
|
||
|
||
---
|
||
|
||
## 📞 技术支持
|
||
|
||
如有问题,请查阅:
|
||
1. 详细使用指南:`Docs/XOCDIA_ADMIN_GUIDE.md`
|
||
2. 数据库表结构:`Db/xocdia_schema.sql`
|
||
3. 源代码文档:控制器代码注释
|
||
|
||
---
|
||
|
||
**开发完成日期**: 2026-01-08
|
||
**版本**: 1.0.0
|
||
**开发者**: Claude (AI Assistant)
|