diff --git a/app/AdminAgent/Metrics/Examples/NewUsers.php b/app/AdminAgent/Metrics/Examples/NewUsers.php index e9b7ced..ca07a63 100644 --- a/app/AdminAgent/Metrics/Examples/NewUsers.php +++ b/app/AdminAgent/Metrics/Examples/NewUsers.php @@ -2,107 +2,118 @@ namespace App\AdminAgent\Metrics\Examples; +use App\Common\DataTime; +use App\Models\User; +use Carbon\Carbon; +use Dcat\Admin\Admin; use Dcat\Admin\Widgets\Metrics\Line; use Illuminate\Http\Request; +use Illuminate\Support\Arr; +use Illuminate\Support\Facades\DB; class NewUsers extends Line { - /** - * 初始化卡片内容 - * - * @return void - */ - protected function init() - { - parent::init(); + /** + * 初始化卡片内容 + * + * @return void + */ + protected function init() + { + parent::init(); - $this->title('New Users'); - $this->dropdown([ - '7' => 'Last 7 Days', - '28' => 'Last 28 Days', - '30' => 'Last Month', - '365' => 'Last Year', - ]); - } + $this->title('新增用户'); + $this->dropdown([ + //'day' => '本日', + 'week' => '本周', + 'month' => '本月', + //'year' => '今年', + ]); + } - /** - * 处理请求 - * - * @param Request $request - * - * @return mixed|void - */ - public function handle(Request $request) - { - $generator = function ($len, $min = 10, $max = 300) { - for ($i = 0; $i <= $len; $i++) { - yield mt_rand($min, $max); - } - }; + /** + * 处理请求 + * + * @param Request $request + * + * @return mixed|void + */ + public function handle(Request $request) + { + $count = User::query()->where('agent_id', Admin::user()->id); + $user = User::query() + ->select('*') + ->addSelect(DB::raw("COUNT(id) as count_id,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time")); + switch ($request->get('option')) { + case 'day': + $count->whereDate('created_at', Carbon::today()); + $user->whereDate('created_at', Carbon::today()); + break; + case 'week': + $time = DataTime::beginAndEnd('week'); + $count->whereBetween('created_at', $time); + $user->whereBetween('created_at', $time); + break; + case 'month': + $count->whereMonth('created_at', Carbon::now()->month); + $user->whereMonth('created_at', Carbon::now()->month); + break; + case 'year': + $count->whereYear('created_at', Carbon::now()->year); + $user->whereYear('created_at', Carbon::now()->year); + break; + default: + $time = DataTime::beginAndEnd('week'); + $count->whereBetween('created_at', $time); + $user->whereBetween('created_at', $time); + } + $user = $user->where('agent_id', Admin::user()->id) + ->limit(30) + ->groupBy('statistics_time') + ->get() + ->toArray(); + $count = $count->count(); + $this->withContent($count); + // 图表数据 + $this->chartLabels(Arr::pluck($user, 'statistics_time')); + $this->withChart(Arr::pluck($user, 'count_id')); + } - switch ($request->get('option')) { - case '365': - // 卡片内容 - $this->withContent(mt_rand(1000, 5000).'k'); - // 图表数据 - $this->withChart(collect($generator(30))->toArray()); - break; - case '30': - // 卡片内容 - $this->withContent(mt_rand(400, 1000).'k'); - // 图表数据 - $this->withChart(collect($generator(30))->toArray()); - break; - case '28': - // 卡片内容 - $this->withContent(mt_rand(400, 1000).'k'); - // 图表数据 - $this->withChart(collect($generator(28))->toArray()); - break; - case '7': - default: - // 卡片内容 - $this->withContent('89.2k'); - // 图表数据 - $this->withChart([28, 40, 36, 52, 38, 60, 55,]); - } - } + /** + * 设置图表数据. + * + * @param array $data + * + * @return $this + */ + public function withChart(array $data) + { + return $this->chart([ + 'series' => [ + [ + 'name' => $this->title, + 'data' => $data, + ], + ], + ]); + } - /** - * 设置图表数据. - * - * @param array $data - * - * @return $this - */ - public function withChart(array $data) - { - return $this->chart([ - 'series' => [ - [ - 'name' => $this->title, - 'data' => $data, - ], - ], - ]); - } - - /** - * 设置卡片内容. - * - * @param string $content - * - * @return $this - */ - public function withContent($content) - { - return $this->content( - <<content( + <<