db = $db; } public function index() { $this->checkLogin(); $this->checkAdmin(); $dateFrom = $_GET['from'] ?? date('Y-m-d', strtotime('-7 days')); $dateTo = $_GET['to'] ?? date('Y-m-d'); $range = [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']; // 总投注(排除虚拟) $totalBet = $this->db->sum('bets', 'amount', [ 'is_virtual' => 0, 'created_at[<>]' => $range ]) ?: 0; // 总派奖 $totalWin = $this->db->sum('bets', 'win_amount', [ 'is_virtual' => 0, 'status' => 'win', 'created_at[<>]' => $range ]) ?: 0; // 平台利润 $profit = $totalBet - $totalWin; // 总充值 $totalDeposit = $this->db->sum('transactions', 'amount', [ 'is_virtual' => 0, 'type[~]' => '%deposit%', 'amount[>]' => 0, 'created_at[<>]' => $range ]) ?: 0; // 总提现 $totalWithdraw = abs($this->db->sum('transactions', 'amount', [ 'is_virtual' => 0, 'type[~]' => '%withdraw%', 'amount[<]' => 0, 'created_at[<>]' => $range ]) ?: 0); // 代理佣金 $totalCommission = $this->db->sum('agent_commissions', 'commission', [ 'created_at[<>]' => $range ]) ?: 0; // 反水 $totalRebate = $this->db->sum('agent_commissions', 'commission', [ 'type' => 'rebate', 'created_at[<>]' => $range ]) ?: 0; // 用户统计 $totalUsers = $this->db->count('users', ['is_virtual' => 0]); $newUsers = $this->db->count('users', [ 'is_virtual' => 0, 'created_at[<>]' => $range ]); // 每日明细 $dailyStats = []; $start = new \DateTime($dateFrom); $end = new \DateTime($dateTo); $end->modify('+1 day'); $interval = new \DateInterval('P1D'); $period = new \DatePeriod($start, $interval, $end); foreach ($period as $day) { $d = $day->format('Y-m-d'); $dr = [$d . ' 00:00:00', $d . ' 23:59:59']; $dailyStats[] = [ 'date' => $d, 'bets' => $this->db->sum('bets', 'amount', ['is_virtual'=>0,'created_at[<>]'=>$dr]) ?: 0, 'wins' => $this->db->sum('bets', 'win_amount', ['is_virtual'=>0,'status'=>'win','created_at[<>]'=>$dr]) ?: 0, 'deposits' => $this->db->sum('transactions', 'amount', ['is_virtual'=>0,'type[~]'=>'%deposit%','amount[>]'=>0,'created_at[<>]'=>$dr]) ?: 0, 'withdraws' => abs($this->db->sum('transactions', 'amount', ['is_virtual'=>0,'type[~]'=>'%withdraw%','amount[<]'=>0,'created_at[<>]'=>$dr]) ?: 0), ]; } // 代理报表 $agentStats = []; $agents = $this->db->select('agents', '*', ['status' => 1]); foreach ($agents as $ag) { $playerIds = $this->db->select('users', 'id', ['agent_id' => $ag['id'], 'is_virtual' => 0]); $agBet = 0; $agWin = 0; if (!empty($playerIds)) { $agBet = $this->db->sum('bets', 'amount', ['user_id' => $playerIds, 'is_virtual'=>0, 'created_at[<>]'=>$range]) ?: 0; $agWin = $this->db->sum('bets', 'win_amount', ['user_id' => $playerIds, 'is_virtual'=>0, 'status'=>'win', 'created_at[<>]'=>$range]) ?: 0; } $agComm = $this->db->sum('agent_commissions', 'commission', ['agent_id'=>$ag['id'],'created_at[<>]'=>$range]) ?: 0; $agentStats[] = [ 'agent' => $ag, 'user' => $this->db->get('users', ['username'], ['id' => $ag['user_id']]), 'players' => count($playerIds), 'bets' => $agBet, 'wins' => $agWin, 'commission' => $agComm, 'profit' => $agBet - $agWin - $agComm, ]; } $this->render('Admin/reports.php', compact( 'dateFrom','dateTo','totalBet','totalWin','profit', 'totalDeposit','totalWithdraw','totalCommission','totalRebate', 'totalUsers','newUsers','dailyStats','agentStats' )); } private function json($data) { header('Content-Type: application/json'); echo json_encode($data); } }