mirror of
				https://github.com/v2board/v2board.git
				synced 2025-11-04 19:31:45 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers\V2\Admin;
 | 
						|
 | 
						|
use App\Http\Controllers\Controller;
 | 
						|
use App\Models\CommissionLog;
 | 
						|
use App\Models\Order;
 | 
						|
use App\Models\ServerShadowsocks;
 | 
						|
use App\Models\ServerTrojan;
 | 
						|
use App\Models\ServerVmess;
 | 
						|
use App\Models\Stat;
 | 
						|
use App\Models\StatServer;
 | 
						|
use App\Models\StatUser;
 | 
						|
use App\Models\Ticket;
 | 
						|
use App\Models\User;
 | 
						|
use App\Services\StatisticalService;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use Illuminate\Support\Facades\Cache;
 | 
						|
use Illuminate\Support\Facades\DB;
 | 
						|
 | 
						|
class StatController extends Controller
 | 
						|
{
 | 
						|
    public function override(Request $request)
 | 
						|
    {
 | 
						|
        $params = $request->validate([
 | 
						|
            'start_at' => '',
 | 
						|
            'end_at' => ''
 | 
						|
        ]);
 | 
						|
 | 
						|
        if (isset($params['start_at']) && isset($params['end_at'])) {
 | 
						|
            $stats = Stat::where('record_at', '>=', $params['start_at'])
 | 
						|
                ->where('record_at', '<', $params['end_at'])
 | 
						|
                ->get()
 | 
						|
                ->makeHidden(['record_at', 'created_at', 'updated_at', 'id', 'record_type'])
 | 
						|
                ->toArray();
 | 
						|
        } else {
 | 
						|
            $statisticalService = new StatisticalService();
 | 
						|
            return [
 | 
						|
                'data' => $statisticalService->generateStatData()
 | 
						|
            ];
 | 
						|
        }
 | 
						|
 | 
						|
        $stats = array_reduce($stats, function($carry, $item) {
 | 
						|
            foreach($item as $key => $value) {
 | 
						|
                if(isset($carry[$key]) && $carry[$key]) {
 | 
						|
                    $carry[$key] += $value;
 | 
						|
                } else {
 | 
						|
                    $carry[$key] = $value;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return $carry;
 | 
						|
        }, []);
 | 
						|
 | 
						|
        return [
 | 
						|
            'data' => $stats
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    public function record(Request $request)
 | 
						|
    {
 | 
						|
        $request->validate([
 | 
						|
            'type' => 'required|in:paid_total,commission_total,register_count',
 | 
						|
            'start_at' => '',
 | 
						|
            'end_at' => ''
 | 
						|
        ]);
 | 
						|
 | 
						|
        $statisticalService = new StatisticalService();
 | 
						|
        $statisticalService->setStartAt($request->input('start_at'));
 | 
						|
        $statisticalService->setEndAt($request->input('end_at'));
 | 
						|
        return [
 | 
						|
            'data' => $statisticalService->getStatRecord($request->input('type'))
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    public function ranking(Request $request)
 | 
						|
    {
 | 
						|
        $request->validate([
 | 
						|
            'type' => 'required|in:server_traffic_rank,user_consumption_rank,invite_rank',
 | 
						|
            'start_at' => '',
 | 
						|
            'end_at' => '',
 | 
						|
            'limit' => 'nullable|integer'
 | 
						|
        ]);
 | 
						|
 | 
						|
        $statisticalService = new StatisticalService();
 | 
						|
        $statisticalService->setStartAt($request->input('start_at'));
 | 
						|
        $statisticalService->setEndAt($request->input('end_at'));
 | 
						|
        return [
 | 
						|
            'data' => $statisticalService->getRanking($request->input('type'), $request->input('limit') ?? 20)
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 | 
						|
 |