门店排名

main
Jing Li 2024-04-23 16:13:17 +08:00
parent 40233cab48
commit 6b8caeedf5
1 changed files with 50 additions and 1 deletions

View File

@ -242,7 +242,56 @@ class CockpitController extends Controller
*/
public function storeSalesRanking(Request $request): array
{
return [];
$request->validate(
rules: [
'last' => ['bail', 'required', Rule::in(['7days', '30days', '180days', '365days'])],
],
);
$last = $request->input('last');
$storeSales = Ledger::select(['store_id', DB::raw('SUM(sales) as sales')])
->when($last, function ($query, $last) {
$today = Carbon::today();
if (in_array($last, ['7days', '30days'])) {
$days = match ($last) {
'7days' => 7,
'30days' => 30,
};
$query->whereBetween('date', [
$today->copy()->subDays($days)->toDateString(),
$today->copy()->subDay()->toDateString(),
]);
} elseif (in_array($last, ['180days', '365days'])) {
$months = match ($last) {
'180days' => 6, // 6个月
'365days' => 12, // 12个月
};
$query->whereBetween('date', [
$today->copy()->startOfMonth()->subMonths($months)->toDateString(),
$today->copy()->startOfMonth()->subMonth()->endOfMonth()->toDateString(),
]);
}
})
->groupBy('store_id');
$stores = Store::leftJoinSub($storeSales, 'store_sales', fn ($join) => $join->on('stores.id', '=', 'store_sales.store_id'))
->orderBy('store_sales.sales', 'DESC')
->limit(30)
->get();
return $stores->map(function (Store $store) {
return [
'store' => [
'id' => $store->id,
'title' => $store->title,
],
'sales' => trim_zeros($store->sales ?: 0),
];
})->all();
}
/**