124 lines
3.0 KiB
PHP
124 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Metrics;
|
|
|
|
use App\Models\Balance;
|
|
use App\Models\Order;
|
|
use App\Models\UserInfo;
|
|
use App\Models\Wallet;
|
|
use Carbon\Carbon;
|
|
use Dcat\Admin\Widgets\Metrics\RadialBar;
|
|
use Illuminate\Http\Request;
|
|
|
|
class StatisticsTotal extends RadialBar
|
|
{
|
|
/**
|
|
* 初始化卡片内容
|
|
*/
|
|
protected function init()
|
|
{
|
|
parent::init();
|
|
|
|
$this->title('统计预览');
|
|
$this->height(300);
|
|
$this->contentWidth(12, 0);
|
|
// 设置下拉选项
|
|
$this->dropdown([
|
|
'1' => '当天',
|
|
'7' => '最近7天',
|
|
'30' => '最近30天',
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 处理请求
|
|
*
|
|
* @param Request $request
|
|
*
|
|
* @return mixed|void
|
|
*/
|
|
public function handle(Request $request)
|
|
{
|
|
switch ($request->get('option')) {
|
|
case '30':
|
|
$start_time = Carbon::now()->subDays(29)->startOfDay();
|
|
$end_time = Carbon::now()->endOfDay();
|
|
|
|
break;
|
|
case '7':
|
|
$start_time = Carbon::now()->subDays(6)->startOfDay();
|
|
$end_time = Carbon::now()->endOfDay();
|
|
|
|
break;
|
|
default:
|
|
$start_time = Carbon::now()->startOfDay();
|
|
$end_time = Carbon::now()->endOfDay();
|
|
|
|
break;
|
|
|
|
}
|
|
$order = Order::whereBetween('created_at', [$start_time, $end_time])->whereNotIn('status', [Order::STATUS_PENDING, Order::STATUS_CANCELLED])->sum('total_amount');
|
|
// 卡片内容
|
|
$this->withContent([
|
|
'total_points'=> bcdiv(UserInfo::sum('points'), 100, 2),
|
|
'order_money' => bcdiv($order, 100, 2)
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 卡片内容
|
|
*
|
|
* @param string $content
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function withContent($content)
|
|
{
|
|
return $this->content(
|
|
<<<HTML
|
|
<div class="d-flex row text-center align-items-center justify-content-center" >
|
|
<div class="col-sm-4">
|
|
<h1 class="font-lg-1 mt-2 mb-0">{$content['total_points']}</h1>
|
|
总积分
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<h1 class="font-lg-1 mt-2 mb-0">{$content['order_money']}</h1>
|
|
销售额
|
|
</div>
|
|
</div>
|
|
HTML
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 卡片底部内容.
|
|
*
|
|
* @param string $new
|
|
* @param string $open
|
|
* @param string $response
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function withFooter($new, $open, $response)
|
|
{
|
|
return $this->footer(
|
|
<<<HTML
|
|
<div class="d-flex justify-content-between p-1" style="padding-top: 0!important;">
|
|
<div class="text-center">
|
|
<p>New Tickets</p>
|
|
<span class="font-lg-1">{$new}</span>
|
|
</div>
|
|
<div class="text-center">
|
|
<p>Open Tickets</p>
|
|
<span class="font-lg-1">{$open}</span>
|
|
</div>
|
|
<div class="text-center">
|
|
<p>Response Time</p>
|
|
<span class="font-lg-1">{$response}</span>
|
|
</div>
|
|
</div>
|
|
HTML
|
|
);
|
|
}
|
|
}
|