mirror of
https://github.com/v2board/v2board.git
synced 2025-01-11 08:39:09 +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)
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
|