wyyl/beike/Admin/Repositories/Report/OrderReportRepo.php

145 lines
5.0 KiB
PHP

<?php
/**
* OrderRepo.php
*
* @copyright 2022 opencart.cn - All Rights Reserved
* @link http://www.guangdawangluo.com
* @author Edward Yang <yangjin@opencart.cn>
* @created 2022-08-05 14:33:49
* @modified 2022-08-05 14:33:49
*/
namespace Beike\Admin\Repositories\Report;
use Beike\Models\Order;
use Beike\Repositories\OrderRepo;
use Carbon\Carbon;
use Carbon\CarbonPeriod;
use Illuminate\Support\Facades\DB;
class OrderReportRepo
{
/**
* 获取最近一个月每日销售订单数
* @return mixed
*/
public static function getLatestMonth()
{
$orderTotals = OrderRepo::getListBuilder(['start' => today()->subMonth(), 'end' => today()->subDay()])
->select(DB::raw('DATE(created_at) as date, count(*) as total'))
->groupBy('date')
->get()
->keyBy('date');
$orderAmounts = OrderRepo::getListBuilder(['start' => today()->subMonth(), 'end' => today()->subDay()])
->select(DB::raw('DATE(created_at) as date, sum(total) as amount'))
->groupBy('date')
->get()
->keyBy('date');
$dates = $totals = $amounts = [];
$period = CarbonPeriod::create(today()->subMonth(), today()->subDay())->toArray();
foreach ($period as $date) {
$dateFormat = $date->format('Y-m-d');
$orderTotal = $orderTotals[$dateFormat] ?? null;
$orderAmount = $orderAmounts[$dateFormat] ?? null;
$dates[] = $dateFormat;
$totals[] = $orderTotal ? $orderTotal->total : 0;
$amounts[] = $orderAmount ? $orderAmount->amount : 0;
}
$data = [
'period' => $dates,
'totals' => $totals,
'amounts' => $amounts,
];
return hook_filter('dashboard.order_report_month', $data);
}
/**
* 获取最近一周每日销售订单数
*/
public static function getLatestWeek()
{
$orderTotals = OrderRepo::getListBuilder(['start' => today()->subWeek(), 'end' => today()->subDay()])
->select(DB::raw('DATE(created_at) as date, count(*) as total'))
->groupBy('date')
->get()
->keyBy('date');
$orderAmounts = OrderRepo::getListBuilder(['start' => today()->subWeek(), 'end' => today()->subDay()])
->select(DB::raw('DATE(created_at) as date, sum(total) as amount'))
->groupBy('date')
->get()
->keyBy('date');
$dates = $totals = $amounts = [];
$period = CarbonPeriod::create(today()->subWeek(), today()->subDay())->toArray();
foreach ($period as $date) {
$dateFormat = $date->format('Y-m-d');
$orderTotal = $orderTotals[$dateFormat] ?? null;
$orderAmount = $orderAmounts[$dateFormat] ?? null;
$dates[] = $dateFormat;
$totals[] = $orderTotal ? $orderTotal->total : 0;
$amounts[] = $orderAmount ? $orderAmount->amount : 0;
}
$data = [
'period' => $dates,
'totals' => $totals,
'amounts' => $amounts,
];
return hook_filter('dashboard.order_report_week', $data);
}
/**
* 获取最近一年每月销售订单数
*/
public static function getLatestYear()
{
$orderTotals = OrderRepo::getListBuilder(['start' => today()->subYear(), 'end' => today()->subDay()])
->select(DB::raw('YEAR(created_at) as year, MONTH(created_at) as month, count(*) as total'))
->groupBy(['year', 'month'])
->get();
$orderMonthTotals = [];
foreach ($orderTotals as $orderTotal) {
$key = Carbon::create($orderTotal->year, $orderTotal->month)->format('Y-m');
$orderMonthTotals[$key] = $orderTotal['total'];
}
$orderAmounts = OrderRepo::getListBuilder(['start' => today()->subYear(), 'end' => today()->subDay()])
->select(DB::raw('YEAR(created_at) as year, MONTH(created_at) as month, sum(total) as amount'))
->groupBy(['year', 'month'])
->get();
$orderMonthAmounts = [];
foreach ($orderAmounts as $orderAmount) {
$key = Carbon::create($orderAmount->year, $orderAmount->month)->format('Y-m');
$orderMonthAmounts[$key] = $orderAmount['amount'];
}
$dates = $totals = $amounts = [];
$period = CarbonPeriod::create(today()->subYear()->endOfMonth(), '1 month', today()->endOfMonth())->toArray();
foreach ($period as $date) {
$dateFormat = $date->format('Y-m');
$orderTotal = $orderMonthTotals[$dateFormat] ?? null;
$orderAmount = $orderMonthAmounts[$dateFormat] ?? null;
$dates[] = $dateFormat;
$totals[] = $orderTotal ?: 0;
$amounts[] = $orderAmount ?: 0;
}
$data = [
'period' => $dates,
'totals' => $totals,
'amounts' => $amounts,
];
return hook_filter('dashboard.order_report_year', $data);
}
}