3 changed files with 218 additions and 0 deletions
			
			
		- 
					84app/AdminAgent/Controllers/OrderStatisticsController.php
 - 
					133app/AdminAgent/Metrics/Examples/OrderStatistics.php
 - 
					1app/AdminAgent/routes.php
 
@ -0,0 +1,84 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\AdminAgent\Controllers; | 
				
			|||
 | 
				
			|||
use App\AdminAgent\Metrics\Examples\FinanceStatistics; | 
				
			|||
use App\AdminAgent\Metrics\Examples\OrderStatistics; | 
				
			|||
use App\Common\OrderStatus; | 
				
			|||
use App\Models\Order; | 
				
			|||
use App\Models\OrderProductItem; | 
				
			|||
use Dcat\Admin\Admin; | 
				
			|||
use Dcat\Admin\Layout\Column; | 
				
			|||
use Dcat\Admin\Layout\Content; | 
				
			|||
use Dcat\Admin\Layout\Row; | 
				
			|||
use Dcat\Admin\Http\Controllers\AdminController; | 
				
			|||
use Dcat\Admin\Widgets\Card; | 
				
			|||
use Illuminate\Support\Arr; | 
				
			|||
 | 
				
			|||
class OrderStatisticsController extends AdminController | 
				
			|||
{ | 
				
			|||
	public function index(Content $content) | 
				
			|||
	{ | 
				
			|||
		Admin::style( | 
				
			|||
			<<<CSS | 
				
			|||
            .col-sm-12.d-flex{ | 
				
			|||
                    display: inline-block !important; | 
				
			|||
            } | 
				
			|||
            CSS | 
				
			|||
		); | 
				
			|||
 | 
				
			|||
		//数据
 | 
				
			|||
 | 
				
			|||
		//订单
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
		return $content | 
				
			|||
			->body( | 
				
			|||
				<<<HTML | 
				
			|||
                    <div class="content-header"> | 
				
			|||
                                <section class="content-header breadcrumbs-top"> | 
				
			|||
                                        <h1 class=" float-left"> | 
				
			|||
                                    <span class="text-capitalize">订单统计</span> | 
				
			|||
 | 
				
			|||
                                </h1> | 
				
			|||
                    <div class="clearfix"></div> | 
				
			|||
 | 
				
			|||
                        </section> | 
				
			|||
                        </div> | 
				
			|||
                HTML | 
				
			|||
 | 
				
			|||
			) | 
				
			|||
			->body(function (Row $row) { | 
				
			|||
				$orders = Order::query()->where('agent_id',Admin::user()->id)->select('*')->selectRaw("count(id) as count_id")->groupBy('status')->get(); | 
				
			|||
				$count =  Order::query()->where('agent_id',Admin::user()->id)->count(); | 
				
			|||
 | 
				
			|||
				$row->column(3, function (Column $column) use ($count) { | 
				
			|||
					$column->row(Card::make('总数', function () use ($count) { | 
				
			|||
						return <<<HTML | 
				
			|||
<div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px"> | 
				
			|||
    <h2 class="ml-1 font-large-1 text-primary">$count</h2> | 
				
			|||
</div> | 
				
			|||
HTML; | 
				
			|||
					})); | 
				
			|||
				}); | 
				
			|||
 | 
				
			|||
				$arr = OrderStatus::array(); | 
				
			|||
				foreach ($orders as $order) { | 
				
			|||
					$row->column(3, function (Column $column) use ($order,$arr) { | 
				
			|||
						$column->row(Card::make($arr[$order->status], function () use ($order) { | 
				
			|||
							return <<<HTML | 
				
			|||
<div class="d-flex justify-content-between align-items-center mt-1" style="margin-bottom: 2px"> | 
				
			|||
    <h2 class="ml-1 font-large-1 text-primary">$order->count_id</h2> | 
				
			|||
</div> | 
				
			|||
HTML; | 
				
			|||
						})); | 
				
			|||
					}); | 
				
			|||
				} | 
				
			|||
 | 
				
			|||
			}) | 
				
			|||
			->body(function (Row $row){ | 
				
			|||
				$row->column(12,new OrderStatistics() | 
				
			|||
			); | 
				
			|||
		}); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,133 @@ | 
				
			|||
<?php | 
				
			|||
 | 
				
			|||
namespace App\AdminAgent\Metrics\Examples; | 
				
			|||
 | 
				
			|||
use App\Common\DataTime; | 
				
			|||
use App\Common\OrderStatus; | 
				
			|||
use App\Models\Order; | 
				
			|||
use Dcat\Admin\Admin; | 
				
			|||
use Dcat\Admin\Widgets\Metrics\Bar; | 
				
			|||
use Illuminate\Http\Request; | 
				
			|||
use Illuminate\Support\Arr; | 
				
			|||
use Illuminate\Support\Facades\DB; | 
				
			|||
 | 
				
			|||
class OrderStatistics extends Bar | 
				
			|||
{ | 
				
			|||
    /** | 
				
			|||
     * 初始化卡片内容 | 
				
			|||
     */ | 
				
			|||
    protected function init() | 
				
			|||
    { | 
				
			|||
        parent::init(); | 
				
			|||
 | 
				
			|||
        $color = Admin::color(); | 
				
			|||
        // 卡片内容宽度
 | 
				
			|||
        $this->contentWidth(0, 12); | 
				
			|||
        // 标题
 | 
				
			|||
        //$this->title('财务统计');
 | 
				
			|||
		$this->chartHeight = 500; | 
				
			|||
        // 设置下拉选项
 | 
				
			|||
        $this->dropdown([ | 
				
			|||
            '1' => '日', | 
				
			|||
            '30' => '月', | 
				
			|||
            '365' => '年', | 
				
			|||
        ]); | 
				
			|||
        // 设置图表颜色
 | 
				
			|||
        $this->chartColors([ | 
				
			|||
			$color->green(), | 
				
			|||
        ]); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * 处理请求 | 
				
			|||
     * | 
				
			|||
     * @param Request $request | 
				
			|||
     * | 
				
			|||
     * @return mixed|void | 
				
			|||
     */ | 
				
			|||
    public function handle(Request $request) | 
				
			|||
    { | 
				
			|||
    	$query = Order::query() | 
				
			|||
			->where('agent_id',Admin::user()->id) | 
				
			|||
			->select('*'); | 
				
			|||
        switch ($request->get('option')) { | 
				
			|||
            case '1': | 
				
			|||
				$query->selectRaw("count(id) as sum_price,date(created_at) AS statistics_time"); | 
				
			|||
				break; | 
				
			|||
			case '30': | 
				
			|||
				$query->selectRaw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at)) AS statistics_time"); | 
				
			|||
				break; | 
				
			|||
			case '365': | 
				
			|||
				$query->selectRaw("count(id) as sum_price,CONCAT(YEAR(created_at)) AS statistics_time"); | 
				
			|||
				break; | 
				
			|||
            default: | 
				
			|||
				$query->selectRaw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"); | 
				
			|||
        } | 
				
			|||
        $order = $query->groupBy('statistics_time') | 
				
			|||
			->orderBy('created_at') | 
				
			|||
			->get() | 
				
			|||
			->toArray(); | 
				
			|||
		$this->withChart( | 
				
			|||
			Arr::pluck($order,'sum_price') | 
				
			|||
		); | 
				
			|||
		$this->chartLabels( | 
				
			|||
			Arr::pluck($order,'statistics_time') | 
				
			|||
		); | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * 设置图表数据. | 
				
			|||
     * | 
				
			|||
     * @param array $data | 
				
			|||
     * | 
				
			|||
     * @return $this | 
				
			|||
     */ | 
				
			|||
    public function withChart(array $data) | 
				
			|||
    { | 
				
			|||
		return $this->chart([ | 
				
			|||
			'series' => [[ | 
				
			|||
				'name' => '订单数', | 
				
			|||
				'data' => $data | 
				
			|||
			]], | 
				
			|||
			'chart' => [ | 
				
			|||
				//'width' => '180%',
 | 
				
			|||
				'type' => 'bar', | 
				
			|||
				'events' => [ | 
				
			|||
				], | 
				
			|||
				'toolbar' => ['show' => false], | 
				
			|||
			], | 
				
			|||
			'colors' => $this->colors, | 
				
			|||
			'plotOptions' => [ | 
				
			|||
				'bar' => [ | 
				
			|||
					//'columnWidth' => '45%',
 | 
				
			|||
					'distributed' => true, | 
				
			|||
				] | 
				
			|||
			], | 
				
			|||
			'dataLabels' => [ | 
				
			|||
				'enabled' => false | 
				
			|||
			], | 
				
			|||
			'legend' => [ | 
				
			|||
				'show' => false | 
				
			|||
			], | 
				
			|||
			'xaxis' => [ | 
				
			|||
				//'categories' =>
 | 
				
			|||
				//	[75, 125, 225, 175, 125, 75, 25]
 | 
				
			|||
				//,
 | 
				
			|||
				'labels' => [ | 
				
			|||
					'show' => true, | 
				
			|||
					'style' => [ | 
				
			|||
						'colors' => $this->colors, | 
				
			|||
						'fontSize' => '12px' | 
				
			|||
					] | 
				
			|||
				], | 
				
			|||
			], | 
				
			|||
			'yaxis' => [ | 
				
			|||
				'show' => true | 
				
			|||
			], | 
				
			|||
			'tooltip' => [ | 
				
			|||
				'x' => ['show' => true], | 
				
			|||
			], | 
				
			|||
 | 
				
			|||
		]); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue