UserDailyTrafficStatistics.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. $jobTime = 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. $jobTime = round(microtime(true) - $jobTime, 4);
  19. Log::info('---【'.$this->description.'】完成---,耗时'.$jobTime.'秒');
  20. }
  21. private function statisticsByUser(User $user)
  22. {
  23. $created_at = date('Y-m-d 23:59:59', strtotime('-1 days'));
  24. $time = strtotime($created_at);
  25. $logs = $user->dataFlowLogs()
  26. ->whereBetween('log_time', [$time - 86399, $time])
  27. ->groupBy('node_id')
  28. ->selectRaw('node_id, sum(`u`) as u, sum(`d`) as d')
  29. ->get();
  30. if ($logs->isNotEmpty()) { // 有数据才记录
  31. $data = $logs->each(function ($log) use ($created_at) {
  32. $log->total = $log->u + $log->d;
  33. $log->traffic = flowAutoShow($log->total);
  34. $log->created_at = $created_at;
  35. })->flatten()->toArray();
  36. $data[] = [ // 每日节点流量合计
  37. 'u' => $logs->sum('u'),
  38. 'd' => $logs->sum('d'),
  39. 'total' => $logs->sum('total'),
  40. 'traffic' => flowAutoShow($logs->sum('total')),
  41. 'created_at' => $created_at,
  42. ];
  43. $user->dailyDataFlows()->createMany($data);
  44. }
  45. }
  46. }