erp/app/Http/Controllers/DataCenter/DataCenterController.php

90 lines
3.9 KiB
PHP

<?php
namespace App\Http\Controllers\DataCenter;
use App\Http\Controllers\Controller;
use App\Http\Enum\StaticTypeEnum;
use App\Http\Resources\DailySalesReportResource;
use App\Models\BusinessOrderItem;
use App\Models\DailySalesReport;
use App\Models\GoodsSku;
use App\Utils\FormatUtils;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
class DataCenterController extends Controller
{
public function salesReport(Request $request)
{
$sort = $request->get('sort', 'sales_num');
$order = $request->get('sortOrder', 'DESC');
if (empty($request->get('date'))) {
$request->offsetSet('date', date('Y-m-d'));
}
$dailySalesReports = DailySalesReport::query()
->filter()
->orderBy($sort, $order)
->paginate($request->get('per_page'));
foreach ($dailySalesReports as &$dailySalesReport) {
$dailySalesReport['stock'] = $dailySalesReport['inventory'] + $dailySalesReport['arrived_today_num'];
$dailySalesReport['goal_rate'] = FormatUtils::getPercent($dailySalesReport['goal_rate'], 1);
$dailySalesReport['S1_rate'] = FormatUtils::getPercent($dailySalesReport['S1_rate'], 1);
$dailySalesReport['S2_rate'] = FormatUtils::getPercent($dailySalesReport['S2_rate'], 1);
$dailySalesReport['S3_rate'] = FormatUtils::getPercent($dailySalesReport['S3_rate'], 1);
$dailySalesReport['S4_rate'] = FormatUtils::getPercent($dailySalesReport['S4_rate'], 1);
$dailySalesReport['S5_rate'] = FormatUtils::getPercent($dailySalesReport['S5_rate'], 1);
$dailySalesReport['S6_rate'] = FormatUtils::getPercent($dailySalesReport['S6_rate'], 1);
$dailySalesReport['S7_rate'] = FormatUtils::getPercent($dailySalesReport['S7_rate'], 1);
}
return DailySalesReportResource::collection($dailySalesReports);
}
/**
* 销售报表
* @param Request $request
* @return void
*/
public function skuSalesReport(Request $request)
{
//获取所有参数
$allParams = $request->all();
//进行校验验证
$validator = Validator::make($allParams, [
'type' => 'required|integer', //1表示今日
'start_day' => 'sometimes|string',
'end_day' => 'sometimes|string',
'title' => 'sometimes|string'
]);
if ($validator->fails()) {
//校验失败返回异常
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
return response($this->res, $this->res['httpCode']);
}
if (StaticTypeEnum::TODAY == $allParams->type) {
//实时统计
$orderItems = BusinessOrderItem::query()
->leftJoin("business_orders as b", "business_order_id", "=", "b.id")
->select("business_order_items.external_sku_id"
, DB::raw("sum(CASE WHEN b.shipping_status>0 THEN goods_number-already_cancel_number ELSE 0 END) as shipping_num")
, DB::raw("sum(CASE WHEN b.shipping_status=0 THEN goods_number-already_cancel_number ELSE 0 END) as unshipping_num")
, DB::raw("sum(goods_number-already_cancel_number) as goods_total"))
->where("business_order_items.created_at", ">",Carbon::now()->startOfDay()->toDateTimeString())
->where("business_order_items.cancel_status", "=", 0)
->groupBy('external_sku_id')
->orderBy("goods_total","DESC")
->paginate($request->get('per_page'));
return $orderItems;
} else {
$startTime = Carbon::parse($request->input("start_day"))->toDateTimeString();
$endTime = Carbon::parse($request->input("end_day"))->endOfDay()->toDateTimeString();
}
}
}