|
|
@@ -256,74 +256,62 @@ class GameBetGameModel extends Model
|
|
|
$wheres[] = ['app_id', '=', $appId];
|
|
|
|
|
|
// 时间筛选
|
|
|
- if (!empty($filters['start_time'])) {
|
|
|
- $startTime = strtotime($filters['start_time']);
|
|
|
+ if (!empty($filters['date'])) {
|
|
|
+ $startTime = strtotime($filters['date']);
|
|
|
+ $endTime = strtotime($filters['date'] . ' 23:59:59');
|
|
|
+
|
|
|
$wheres[] = ['create_time', '>=', $startTime];
|
|
|
- }
|
|
|
-
|
|
|
- if (!empty($filters['end_time'])) {
|
|
|
- $endTime = strtotime($filters['end_time'] . ' 23:59:59');
|
|
|
$wheres[] = ['create_time', '<=', $endTime];
|
|
|
}
|
|
|
|
|
|
- // 游戏ID筛选
|
|
|
- if (!empty($filters['game_id'])) {
|
|
|
- $wheres[] = ['game_id', '=', $filters['game_id']];
|
|
|
- }
|
|
|
-
|
|
|
// 使用子查询获取每个用户的统计数据
|
|
|
$subQuery = self::field([
|
|
|
'user_id',
|
|
|
- 'SUM(bet) as total_bet_amount', // 总投注金额
|
|
|
+ 'SUM(total_win_amount) as total_win', // 总输钱
|
|
|
'COUNT(*) as bet_count', // 注单数
|
|
|
- 'SUM(win_amount) as total_profit', // 总盈亏
|
|
|
- 'AVG(bet) as avg_bet', // 平均投注
|
|
|
- 'MAX(bet) as max_bet' // 最大投注
|
|
|
+ 'SUM(bet) as total_bet', // 总投注
|
|
|
])
|
|
|
->where($wheres)
|
|
|
->group('user_id')
|
|
|
->buildSql();
|
|
|
|
|
|
// 获取总数
|
|
|
- $total = Db::connection('fortue_tiger')
|
|
|
- ->table($subQuery . ' t')
|
|
|
- ->count();
|
|
|
-
|
|
|
- // 获取排行榜数据(按总投注金额降序)
|
|
|
- $list = Db::connection('fortue_tiger')
|
|
|
- ->table($subQuery . ' t')
|
|
|
- ->order('total_bet_amount', 'desc')
|
|
|
+ $total = self::table($subQuery . ' t')->count();
|
|
|
+
|
|
|
+ // 获取排行榜数据
|
|
|
+ $list = self::table($subQuery . ' t')
|
|
|
+ ->order('bet_count', 'desc')
|
|
|
->page($page, $limit)
|
|
|
->select()
|
|
|
->toArray();
|
|
|
-
|
|
|
+
|
|
|
// 获取用户ID列表
|
|
|
$userIds = array_column($list, 'user_id');
|
|
|
|
|
|
if (!empty($userIds)) {
|
|
|
// 获取用户信息
|
|
|
- $users = Db::connection('fortue_tiger')
|
|
|
- ->table('tp_user')
|
|
|
- ->whereIn('id', $userIds)
|
|
|
- ->field(['id', 'nickname', 'avatar', 'phone'])
|
|
|
+ $users = self::table('tp_merchants_user')
|
|
|
+ ->whereIn('user_id', $userIds)
|
|
|
+ ->field(['user_id', 'nickname'])
|
|
|
->select()
|
|
|
->toArray();
|
|
|
-
|
|
|
- $userMap = [];
|
|
|
- foreach ($users as $user) {
|
|
|
- $userMap[$user['id']] = $user;
|
|
|
- }
|
|
|
-
|
|
|
+ // 获取用户余额
|
|
|
+ $userBanlance = self::table('tp_merchants_user_balance')
|
|
|
+ ->whereIn('user_id', $userIds)
|
|
|
+ ->field(['user_id', 'balance'])
|
|
|
+ ->select()
|
|
|
+ ->toArray();
|
|
|
+
|
|
|
+ $users = array_column($users, null, 'user_id');
|
|
|
+ $userBanlance = array_column($userBanlance, null, 'user_id');
|
|
|
+
|
|
|
// 补充用户信息和计算RTP
|
|
|
foreach ($list as &$item) {
|
|
|
- $item['nickname'] = $userMap[$item['user_id']]['nickname'] ?? '未知用户';
|
|
|
- $item['avatar'] = $userMap[$item['user_id']]['avatar'] ?? '';
|
|
|
- $item['phone'] = $userMap[$item['user_id']]['phone'] ?? '';
|
|
|
+ $userId = (int)$item['user_id'];
|
|
|
+ $item['nickname'] = $users[$userId]['nickname'] ?? '未知用户';
|
|
|
+ $item['balance'] = $userBanlance[$userId]['balance'] ?? 0;
|
|
|
// 计算RTP (返还率)
|
|
|
- $item['rtp'] = $item['total_bet_amount'] > 0 ?
|
|
|
- round(($item['total_bet_amount'] + $item['total_profit']) / $item['total_bet_amount'] * 100, 2) : 0;
|
|
|
- // 格式化平均投注
|
|
|
- $item['avg_bet'] = round($item['avg_bet'], 2);
|
|
|
+ $item['rtp'] = $item['total_bet'] > 0 ? round(abs((int)$item['total_win']) / $item['total_bet'] * 100, 2) : 0;
|
|
|
}
|
|
|
}
|
|
|
|