mirror of
https://github.com/lkddi/Xboard.git
synced 2026-04-24 20:17:32 +08:00
again: update api combining times
This commit is contained in:
@@ -14,13 +14,24 @@ class StatController extends Controller
|
|||||||
public function getTrafficLog(Request $request)
|
public function getTrafficLog(Request $request)
|
||||||
{
|
{
|
||||||
$startDate = now()->startOfMonth()->timestamp;
|
$startDate = now()->startOfMonth()->timestamp;
|
||||||
|
|
||||||
|
// Aggregate per-node data into per-day entries for backward compatibility
|
||||||
$records = StatUser::query()
|
$records = StatUser::query()
|
||||||
|
->select([
|
||||||
|
'user_id',
|
||||||
|
'server_rate',
|
||||||
|
'record_at',
|
||||||
|
'record_type',
|
||||||
|
DB::raw('SUM(u) as u'),
|
||||||
|
DB::raw('SUM(d) as d'),
|
||||||
|
])
|
||||||
->where('user_id', $request->user()->id)
|
->where('user_id', $request->user()->id)
|
||||||
->where('record_at', '>=', $startDate)
|
->where('record_at', '>=', $startDate)
|
||||||
|
->groupBy(['user_id', 'server_rate', 'record_at', 'record_type'])
|
||||||
->orderBy('record_at', 'DESC')
|
->orderBy('record_at', 'DESC')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
$data = TrafficLogResource::collection(collect($records));
|
$data = TrafficLogResource::collection($records);
|
||||||
return $this->success($data);
|
return $this->success($data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ use App\Models\Ticket;
|
|||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Services\StatisticalService;
|
use App\Services\StatisticalService;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class StatController extends Controller
|
class StatController extends Controller
|
||||||
{
|
{
|
||||||
@@ -234,14 +235,31 @@ class StatController extends Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$pageSize = $request->input('pageSize', 10);
|
$pageSize = $request->input('pageSize', 10);
|
||||||
$records = StatUser::orderBy('record_at', 'DESC')
|
$page = $request->input('page', 1);
|
||||||
->where('user_id', $request->input('user_id'))
|
|
||||||
->paginate($pageSize);
|
// Aggregate per-node data into per-day entries for backward compatibility
|
||||||
|
$query = StatUser::query()
|
||||||
|
->select([
|
||||||
|
'user_id',
|
||||||
|
'server_rate',
|
||||||
|
'record_at',
|
||||||
|
'record_type',
|
||||||
|
DB::raw('SUM(u) as u'),
|
||||||
|
DB::raw('SUM(d) as d'),
|
||||||
|
DB::raw('MAX(created_at) as created_at'),
|
||||||
|
DB::raw('MAX(updated_at) as updated_at'),
|
||||||
|
])
|
||||||
|
->where('user_id', $request->input('user_id'))
|
||||||
|
->groupBy(['user_id', 'server_rate', 'record_at', 'record_type'])
|
||||||
|
->orderBy('record_at', 'DESC');
|
||||||
|
|
||||||
|
// Manual pagination for grouped query
|
||||||
|
$total = (clone $query)->get()->count();
|
||||||
|
$data = $query->skip(($page - 1) * $pageSize)->take($pageSize)->get();
|
||||||
|
|
||||||
$data = $records->items();
|
|
||||||
return [
|
return [
|
||||||
'data' => $data,
|
'data' => $data,
|
||||||
'total' => $records->total(),
|
'total' => $total,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user