UserDailyTrafficStatistics.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\User;
  4. use Illuminate\Console\Command;
  5. use Log;
  6. class UserDailyTrafficStatistics extends Command
  7. {
  8. protected $signature = 'userDailyTrafficStatistics';
  9. protected $description = '用户每日流量统计';
  10. public function handle()
  11. {
  12. $jobStartTime = microtime(true);
  13. User::activeUser()->with('dataFlowLogs')->WhereHas('dataFlowLogs')->chunk(config('tasks.chunk'), function ($users) {
  14. foreach ($users as $user) {
  15. $this->statisticsByUser($user);
  16. }
  17. });
  18. $jobEndTime = microtime(true);
  19. $jobUsedTime = round(($jobEndTime - $jobStartTime), 4);
  20. Log::info('---【'.$this->description.'】完成---,耗时'.$jobUsedTime.'秒');
  21. }
  22. private function statisticsByUser(User $user)
  23. {
  24. $logs = $user->dataFlowLogs()
  25. ->whereBetween('log_time', [strtotime(date('Y-m-d')), time()])
  26. ->groupBy('node_id')
  27. ->selectRaw('node_id, sum(`u`) as u, sum(`d`) as d')
  28. ->get();
  29. if ($logs->isNotEmpty()) { // 有数据才记录
  30. $data = $logs->each(function ($log) {
  31. $log->total = $log->u + $log->d;
  32. $log->traffic = flowAutoShow($log->total);
  33. })->flatten()->toArray();
  34. $data[] = [ // 每日节点流量合计
  35. 'u' => $logs->sum('u'),
  36. 'd' => $logs->sum('d'),
  37. 'total' => $logs->sum('total'),
  38. 'traffic' => flowAutoShow($logs->sum('total')),
  39. ];
  40. $user->dailyDataFlows()->createMany($data);
  41. }
  42. }
  43. }