generated from liutk/owl-admin-base
[驾驶舱] 销售趋势
parent
08a24f4d5a
commit
ed4570d25d
|
|
@ -4,10 +4,13 @@ namespace App\Admin\Controllers;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\Employee;
|
use App\Models\Employee;
|
||||||
|
use App\Models\Ledger;
|
||||||
use App\Models\Store;
|
use App\Models\Store;
|
||||||
use App\Models\TaskPerformance;
|
use App\Models\TaskPerformance;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
class CockpitController extends Controller
|
class CockpitController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -32,7 +35,84 @@ class CockpitController extends Controller
|
||||||
*/
|
*/
|
||||||
public function salesTrend(Request $request): array
|
public function salesTrend(Request $request): array
|
||||||
{
|
{
|
||||||
return [];
|
$request->validate(
|
||||||
|
rules: [
|
||||||
|
'last' => ['bail', 'required', Rule::in(['7days', '30days', '180days', '365days'])],
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
$data = collect();
|
||||||
|
|
||||||
|
$last = $request->input('last');
|
||||||
|
|
||||||
|
if (in_array($last, ['7days', '30days'])) {
|
||||||
|
// 按天
|
||||||
|
$days = match ($last) {
|
||||||
|
'7days' => 7,
|
||||||
|
'30days' => 30,
|
||||||
|
};
|
||||||
|
|
||||||
|
// 今天
|
||||||
|
$today = Carbon::today();
|
||||||
|
// 开始时间
|
||||||
|
$startAt = $today->copy()->subDays($days);
|
||||||
|
// 结束时间
|
||||||
|
$endAt = $today->copy()->subDay();
|
||||||
|
|
||||||
|
$ledgers = Ledger::select(['date', DB::raw('SUM(sales) as sales')])
|
||||||
|
->whereBetween('date', [$startAt->toDateString(), $endAt->toDateString()])
|
||||||
|
->groupBy('date')
|
||||||
|
->get()
|
||||||
|
->keyBy('date');
|
||||||
|
|
||||||
|
while ($startAt->lte($endAt)) {
|
||||||
|
$date = $startAt->toDateString();
|
||||||
|
|
||||||
|
$ledger = $ledgers->get($date);
|
||||||
|
|
||||||
|
$data->push([
|
||||||
|
'date' => $date,
|
||||||
|
'sales' => trim_zeros($ledger->sales ?? 0),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$startAt->addDay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif (in_array($last, ['180days', '365days'])) {
|
||||||
|
// 按月
|
||||||
|
$months = match ($last) {
|
||||||
|
'180days' => 6, // 6个月
|
||||||
|
'365days' => 12, // 12个月
|
||||||
|
};
|
||||||
|
|
||||||
|
// 今天
|
||||||
|
$today = Carbon::today();
|
||||||
|
// 开始时间
|
||||||
|
$startAt = $today->copy()->startOfMonth()->subMonths($months);
|
||||||
|
// 结束时间
|
||||||
|
$endAt = $today->copy()->startOfMonth()->subMonth()->endOfMonth();
|
||||||
|
|
||||||
|
$ledgers = Ledger::select([DB::raw("DATE_FORMAT(`date`, '%Y-%m') as month"), DB::raw('SUM(sales) as sales')])
|
||||||
|
->whereBetween('date', [$startAt->toDateString(), $endAt->toDateString()])
|
||||||
|
->groupBy('month')
|
||||||
|
->get()
|
||||||
|
->keyBy('month');
|
||||||
|
|
||||||
|
for ($i=0; $i < $months; $i++) {
|
||||||
|
$month = $startAt->format('Y-m');
|
||||||
|
|
||||||
|
$ledger = $ledgers->get($month);
|
||||||
|
|
||||||
|
$data->push([
|
||||||
|
'date' => $month,
|
||||||
|
'sales' => trim_zeros($ledger->sales ?? 0),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$startAt->addMonth();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data->all();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue