3 changed files with 237 additions and 0 deletions
			
			
		- 
					102app/AdminAgent/Controllers/ProductStatisticsController.php
 - 
					134app/AdminAgent/Metrics/Examples/ProductStatistics.php
 - 
					1app/AdminAgent/routes.php
 
@ -0,0 +1,102 @@ | 
			
		|||||
 | 
				<?php | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				namespace App\AdminAgent\Controllers; | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				use App\AdminAgent\Metrics\Examples\FinanceStatistics; | 
			
		||||
 | 
				use App\AdminAgent\Metrics\Examples\OrderStatistics; | 
			
		||||
 | 
				use App\AdminAgent\Metrics\Examples\ProductStatistics; | 
			
		||||
 | 
				use App\AdminAgent\Metrics\Examples\UserStatistics; | 
			
		||||
 | 
				use App\Common\OrderStatus; | 
			
		||||
 | 
				use App\Common\ProductStatus; | 
			
		||||
 | 
				use App\Models\AgentProduct; | 
			
		||||
 | 
				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 ProductStatisticsController 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){ | 
			
		||||
 | 
				
 | 
			
		||||
 | 
								$row->column(4, function (Column $column) { | 
			
		||||
 | 
									$column->row(Card::make('总数', function () { | 
			
		||||
 | 
										$count = AgentProduct::query()->where('agent_id',Admin::user()->id)->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; | 
			
		||||
 | 
									})); | 
			
		||||
 | 
								}); | 
			
		||||
 | 
				
 | 
			
		||||
 | 
								$row->column(4, function (Column $column) { | 
			
		||||
 | 
									$column->row(Card::make('上架', function () { | 
			
		||||
 | 
										$profit = AgentProduct::query()->where('agent_id',Admin::user()->id)->where('status',ProductStatus::ON_SALE)->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">$profit</h2> | 
			
		||||
 | 
				</div> | 
			
		||||
 | 
				HTML; | 
			
		||||
 | 
									})); | 
			
		||||
 | 
				
 | 
			
		||||
 | 
								}); | 
			
		||||
 | 
				
 | 
			
		||||
 | 
								$row->column(4, function (Column $column) { | 
			
		||||
 | 
									$column->row(Card::make('下架', function () { | 
			
		||||
 | 
										$unSale = AgentProduct::query() | 
			
		||||
 | 
											->where('agent_id',Admin::user()->id) | 
			
		||||
 | 
											->where('status',ProductStatus::SOLD_OUT) | 
			
		||||
 | 
											->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">$unSale</h2> | 
			
		||||
 | 
				</div> | 
			
		||||
 | 
				HTML; | 
			
		||||
 | 
									})); | 
			
		||||
 | 
				
 | 
			
		||||
 | 
								}); | 
			
		||||
 | 
				
 | 
			
		||||
 | 
							}) | 
			
		||||
 | 
							->body(function (Row $row){ | 
			
		||||
 | 
								$row->column(12,new ProductStatistics() | 
			
		||||
 | 
							); | 
			
		||||
 | 
						}); | 
			
		||||
 | 
				    } | 
			
		||||
 | 
				} | 
			
		||||
@ -0,0 +1,134 @@ | 
			
		|||||
 | 
				<?php | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				namespace App\AdminAgent\Metrics\Examples; | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				use App\Common\DataTime; | 
			
		||||
 | 
				use App\Common\OrderStatus; | 
			
		||||
 | 
				use App\Models\Order; | 
			
		||||
 | 
				use App\Models\User; | 
			
		||||
 | 
				use Dcat\Admin\Admin; | 
			
		||||
 | 
				use Dcat\Admin\Widgets\Metrics\Bar; | 
			
		||||
 | 
				use Illuminate\Http\Request; | 
			
		||||
 | 
				use Illuminate\Support\Arr; | 
			
		||||
 | 
				use Illuminate\Support\Facades\DB; | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				class ProductStatistics 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->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time")); | 
			
		||||
 | 
								break; | 
			
		||||
 | 
							case '30': | 
			
		||||
 | 
								$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at)) AS statistics_time")); | 
			
		||||
 | 
								break; | 
			
		||||
 | 
							case '365': | 
			
		||||
 | 
								$query->addSelect(DB::raw("count(id)  as sum_price,CONCAT(YEAR(created_at)) AS statistics_time")); | 
			
		||||
 | 
								break; | 
			
		||||
 | 
							default: | 
			
		||||
 | 
								$query->addSelect(DB::raw("count(id)  as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time")); | 
			
		||||
 | 
				        } | 
			
		||||
 | 
				        $order = $query->groupBy('statistics_time') | 
			
		||||
 | 
							->orderBy('statistics_time') | 
			
		||||
 | 
							->get(); | 
			
		||||
 | 
				
 | 
			
		||||
 | 
						$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