generated from liutk/owl-admin-base
64 lines
2.0 KiB
PHP
64 lines
2.0 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Api;
|
||
|
||
use App\Models\Ledger;
|
||
use Illuminate\Http\Request;
|
||
|
||
class StatsController extends Controller
|
||
{
|
||
/**
|
||
* 30天内的销售金额和支出金额趋势图(不含当日)
|
||
*/
|
||
public function trendsOver30days(Request $request)
|
||
{
|
||
/** @var \App\Models\Employee */
|
||
$employee = $request->user();
|
||
|
||
$start = now()->subDays(30);
|
||
$end = $start->copy()->addDays(29);
|
||
|
||
/** @var \Illuminate\Database\Eloquent\Collection */
|
||
$ledgers = Ledger::select(['date', 'sales', 'expenditure'])
|
||
->whereBetween('date', [$start->format('Y-m-d'), $end->format('Y-m-d')])
|
||
->when(
|
||
$employee->isAdministrator(),
|
||
function ($query) use ($request) {
|
||
if ($request->filled('store_id')) {
|
||
return $query->where('store_id', $request->input('store_id'));
|
||
}
|
||
|
||
if (! $request->anyFilled(['province_code', 'city_code'])) {
|
||
return;
|
||
}
|
||
|
||
$query->whereHas('store', function ($query) use ($request) {
|
||
$request->whenFilled('province_code', fn ($code) => $query->where('region->provinceCode', $code));
|
||
$request->whenFilled('city_code', fn ($code) => $query->where('region->cityCode', $code));
|
||
});
|
||
},
|
||
fn ($query) => $query->where('store_id', $employee->store_id ?: 0),
|
||
)
|
||
->get()
|
||
->keyBy('date');
|
||
|
||
$data = [];
|
||
|
||
do {
|
||
$ledger = $ledgers->get(
|
||
$date = $start->format('Y-m-d')
|
||
);
|
||
|
||
$data[] = [
|
||
'date' => $date,
|
||
'sales' => trim_zeros($ledger->sales ?? 0),
|
||
'expenditure' => trim_zeros($ledger->expenditure ?? 0),
|
||
];
|
||
|
||
$start->addDay();
|
||
} while ($start->lte($end));
|
||
|
||
return $data;
|
||
}
|
||
}
|