diff --git a/app/Admin/Controllers/UserStatisticsController.php b/app/Admin/Controllers/UserStatisticsController.php index 390eb73..57069e7 100755 --- a/app/Admin/Controllers/UserStatisticsController.php +++ b/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; diff --git a/app/Admin/Metrics/Examples/UserStatistics.php b/app/Admin/Metrics/Examples/UserStatistics.php index e200af3..1d94781 100644 --- a/app/Admin/Metrics/Examples/UserStatistics.php +++ b/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') ], ] ); diff --git a/app/AdminAgent/Metrics/Examples/UserStatistics.php b/app/AdminAgent/Metrics/Examples/UserStatistics.php index 2d8a249..5d851ca 100644 --- a/app/AdminAgent/Metrics/Examples/UserStatistics.php +++ b/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') ], ] );