Browse Source

用户统计

master
lemon 4 years ago
parent
commit
bad9dbe3fe
  1. 2
      app/Admin/Controllers/UserStatisticsController.php
  2. 54
      app/Admin/Metrics/Examples/UserStatistics.php
  3. 56
      app/AdminAgent/Metrics/Examples/UserStatistics.php

2
app/Admin/Controllers/UserStatisticsController.php

@ -4,7 +4,7 @@ namespace App\Admin\Controllers;
use App\AdminAgent\Metrics\Examples\FinanceStatistics;
use App\AdminAgent\Metrics\Examples\OrderStatistics;
use App\AdminAgent\Metrics\Examples\UserStatistics;
use App\Admin\Metrics\Examples\UserStatistics;
use App\Common\OrderStatus;
use App\Models\Order;
use App\Models\OrderProductItem;

54
app/Admin/Metrics/Examples/UserStatistics.php

@ -8,6 +8,7 @@ use App\Models\User;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\ApexCharts\Chart;
use Dcat\Admin\Widgets\Metrics\Bar;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
@ -70,45 +71,50 @@ class UserStatistics extends Chart
*/
protected function buildData()
{
$query = User::query()
->select('*');
$dateTime = request('created_at', 0);
if ($dateTime) {
$query->whereBetween('created_at',$dateTime);
}
switch (request('time_key', 0)) {
case '1':
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"));
$time = "DATE_FORMAT(created_at,'%Y-%m-%d')";
break;
case '30':
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at)) AS statistics_time"));
$time = "DATE_FORMAT(created_at,'%Y-%m')";
break;
case '365':
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at)) AS statistics_time"));
$time = "DATE_FORMAT(created_at,'%Y')";
break;
default:
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"));
$time = "DATE_FORMAT(created_at,'%Y-%m-%d')";
}
$users = $query->groupBy('statistics_time')
->orderBy('statistics_time')
->get();
$userNum = 0;
$userArr = [];
foreach ($users as $user) {
$userNum += $user->sum_price;
array_push($userArr,$userNum);
$model = new User;
$table = $model->getTable();
$right = DB::table(function ($query) use ($table,$time){
$query->selectRaw($time." AS tart_dat")
->from($table)
->groupBy('tart_dat');
},'l_tab');
$users = DB::table(function ($query) use ($table,$time) {
$query->selectRaw($time ." AS start_date")
->from($table);
},'r_tab')
->joinSub($right, 'l_tab', function ($join) {
$join->on('l_tab.tart_dat', '>=', 'r_tab.start_date');
})
->addSelect(DB::raw('tart_dat as statistics_time,count(tart_dat) as count'))
->orderBy('tart_dat')
->groupBy('tart_dat');
$dateTime = request('created_at', 0);
if ($dateTime) {
$users->whereBetween('tart_dat',$dateTime);
}
$users = $users->get()
->toArray();
$this->withData([
[
'name' => '用户数',
'data' => $userArr
'data' => Arr::pluck($users,'count')
],
]
);

56
app/AdminAgent/Metrics/Examples/UserStatistics.php

@ -8,6 +8,7 @@ use App\Models\User;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\ApexCharts\Chart;
use Dcat\Admin\Widgets\Metrics\Bar;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
@ -70,46 +71,53 @@ class UserStatistics extends Chart
*/
protected function buildData()
{
$query = User::query()
->where('agent_id',Admin::user()->id)
->select('*');
$dateTime = request('created_at', 0);
if ($dateTime) {
$query->whereBetween('created_at',$dateTime);
}
switch (request('time_key', 0)) {
case '1':
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"));
$time = "DATE_FORMAT(created_at,'%Y-%m-%d')";
break;
case '30':
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at)) AS statistics_time"));
$time = "DATE_FORMAT(created_at,'%Y-%m')";
break;
case '365':
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at)) AS statistics_time"));
$time = "DATE_FORMAT(created_at,'%Y')";
break;
default:
$query->addSelect(DB::raw("count(id) as sum_price,CONCAT(YEAR(created_at),'-',MONTH(created_at),'-',DAY(created_at)) AS statistics_time"));
$time = "DATE_FORMAT(created_at,'%Y-%m-%d')";
}
$users = $query->groupBy('statistics_time')
->orderBy('statistics_time')
->get();
$userNum = 0;
$userArr = [];
$model = new User;
$table = $model->getTable();
$right = DB::table(function ($query) use ($table,$time){
$query->selectRaw($time." AS tart_dat")
->where('agent_id',Admin::user()->id)
->from($table)
->groupBy('tart_dat');
},'l_tab');
$users = DB::table(function ($query) use ($table,$time) {
$query->selectRaw($time ." AS start_date")
->where('agent_id',Admin::user()->id)
->from($table);
},'r_tab')
->joinSub($right, 'l_tab', function ($join) {
$join->on('l_tab.tart_dat', '>=', 'r_tab.start_date');
})
->addSelect(DB::raw('tart_dat as statistics_time,count(tart_dat) as count'))
->orderBy('tart_dat')
->groupBy('tart_dat');
foreach ($users as $user) {
$userNum += $user->sum_price;
array_push($userArr,$userNum);
$dateTime = request('created_at', 0);
if ($dateTime) {
$users->whereBetween('tart_dat',$dateTime);
}
$users = $users->get()
->toArray();
$this->withData([
[
'name' => '用户数',
'data' => $userArr
'data' => Arr::pluck($users,'count')
],
]
);

Loading…
Cancel
Save