UserActivityStats.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. 用户活跃统计
  4. */
  5. namespace App\Console\Commands\SendOrder;
  6. use Log;
  7. use Illuminate\Console\Command;
  8. use App\Modules\User\Services\ReadRecordService;
  9. use App\Modules\User\Services\UserService;
  10. use DB;
  11. class UserActivityStats extends Command
  12. {
  13. /**
  14. * 执行命令 php artisan SendOrder:userActivityStat
  15. *
  16. * The name and signature of the console command.
  17. *
  18. * @var string
  19. */
  20. protected $signature = 'SendOrder:userActivityStat {loop} {loop_add}';
  21. /**
  22. * The console command description.
  23. *
  24. * @var string
  25. */
  26. protected $description = '月活统计';
  27. /**
  28. * Execute the console command.
  29. *
  30. * @return mixed
  31. */
  32. public function handle()
  33. {
  34. ini_set('memory_limit', '1024M');
  35. print_r('memory_used:'.memory_get_usage()."\n");
  36. print_r("======月活统计【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  37. $base_loop = $loop = $this->argument('loop');
  38. $loop_add = $this->argument('loop_add');
  39. $one_month_ago = strtotime(date('Y-m-d'))-30*24*3600;
  40. $start = date('Y-m-d',strtotime('-30 day'));
  41. $end = date('Y-m-d');
  42. $loop_end = $loop+$loop_add;
  43. $limit = 10000;
  44. $active_user_num = 0;
  45. \Log::info('userActivityStat_start:loop:'.$loop.' active_user_num:'.$active_user_num);
  46. while($loop < 3000 && $loop < $loop_end){
  47. // 获取用户,每次1w
  48. $offset = $limit*($loop-1);
  49. $users = UserService::getUserList($limit,$offset);
  50. if(is_null($users)){
  51. \Log::info('userActivityStat_break:base_loop:'.$base_loop.' loop:'.$loop.' active_user_num:'.$active_user_num);
  52. break;
  53. }
  54. foreach($users as $user){
  55. // 获取最近阅读时间
  56. $read_recodes = ReadRecordService::getReadRecord($user->id);
  57. // \Log::info($read_recodes);
  58. $last_read_time = isset($read_recodes[0]['time'])?$read_recodes[0]['time']:'0';
  59. //\Log::info('last_read_time:'.$last_read_time.' one_month_ago:'.$one_month_ago);
  60. // 如果再一个月内
  61. if($last_read_time > 0 && $last_read_time > $one_month_ago){
  62. $active_user_num ++;
  63. }
  64. }
  65. \Log::info('userActivityStat:loop:base_loop:'.$base_loop.' loop:'.$loop.' active_user_num:'.$active_user_num);
  66. $loop++;
  67. }
  68. \Log::info('userActivityStat_end_base_loop:'.$base_loop.' loop:'.$loop.' active_user_num:'.$active_user_num);
  69. print_r("======月活统计 【任务执行结束】=====".date("y-m-d H:i:s"."\n"));
  70. print_r('memory_used:'.memory_get_usage()."\n");
  71. }
  72. }