FansArpu.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace App\Console\Commands\Temp;
  3. use Log;
  4. use Illuminate\Console\Command;
  5. use DB;
  6. class FansArpu extends Command
  7. {
  8. /**
  9. * 执行命令 php artisan temp:fans_arpu
  10. *
  11. * The name and signature of the console command.
  12. *
  13. * @var string
  14. */
  15. protected $signature = 'temp:fans_arpu';
  16. /**
  17. * The console command description.
  18. *
  19. * @var string
  20. */
  21. protected $description = '90天-120天新关粉丝arpu';
  22. /**
  23. * Execute the console command.
  24. *
  25. * @return mixed
  26. */
  27. public function handle()
  28. {
  29. /**
  30. * CREATE TABLE `fans_arpu` (
  31. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  32. `date` date DEFAULT NULL,
  33. `distribution_channel_id` int(11) DEFAULT NULL,
  34. `appid` varchar(255) DEFAULT NULL,
  35. `distribution_channel_name` varchar(255) DEFAULT NULL,
  36. `gzh_name` varchar(255) DEFAULT NULL,
  37. `fans_num` int(11) DEFAULT NULL,
  38. `recharge_amount_in_90_days` decimal(11,2) DEFAULT NULL,
  39. `recharge_amount_in_91_days` decimal(11,2) DEFAULT NULL,
  40. `recharge_amount_in_92_days` decimal(11,2) DEFAULT NULL,
  41. `recharge_amount_in_93_days` decimal(11,2) DEFAULT NULL,
  42. `recharge_amount_in_94_days` decimal(11,2) DEFAULT NULL,
  43. `recharge_amount_in_95_days` decimal(11,2) DEFAULT NULL,
  44. `recharge_amount_in_96_days` decimal(11,2) DEFAULT NULL,
  45. `recharge_amount_in_97_days` decimal(11,2) DEFAULT NULL,
  46. `created_at` datetime DEFAULT NULL,
  47. `updated_at` datetime DEFAULT NULL,
  48. PRIMARY KEY (`id`)
  49. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  50. *
  51. * update fans_arpu,distribution_channels,official_accounts set fans_arpu.distribution_channel_id = distribution_channels.id,fans_arpu.distribution_channel_name=distribution_channels.nickname,fans_arpu.gzh_name = official_accounts.nickname where fans_arpu.appid = official_accounts.appid and official_accounts.distribution_channel_id = distribution_channels.id
  52. *
  53. *
  54. */
  55. print_r("======90天-120天新关粉丝arpu 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  56. Log::info("======90天-120天新关粉丝arpu 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  57. $_start = new \DateTime('2017-12-12');
  58. $_end = new \DateTime('2017-12-24');
  59. foreach (new \DatePeriod($_start, new \DateInterval('P1D'), $_end) as $d)
  60. {
  61. $date = $d->format('Y-m-d');
  62. $start = $date;
  63. $end = date('Y-m-d', strtotime($date) + 86400);
  64. $offset = 0;
  65. $limit = 1000;
  66. $data = [];
  67. $_m_data = [];
  68. while (true) {
  69. print_r("select send_order_id,uid,appid,unsubscribe_time,distribution_channel_id,created_at from force_subscribe_users where created_at > '{$start}' and created_at < '{$end}' limit $offset,$limit" . date("y-m-d H:i:s" . "\n"));
  70. $users = DB::select("select send_order_id,uid,appid,unsubscribe_time,distribution_channel_id,created_at from force_subscribe_users where created_at > '{$start}' and created_at < '{$end}' limit $offset,$limit");
  71. print_r("users_count:".count($users));
  72. if (count($users) == 0) break;
  73. foreach ($users as $user) {
  74. @$data[$user->appid]['fans_num']++;
  75. $order = DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->first();
  76. if ($order)
  77. {
  78. @$data[$user->appid]['recharge_amount_in_90_days'] += (float)DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->where('created_at','<=',date('Y-m-d H:i:s',strtotime($user->created_at)+86400*90))->sum('price');
  79. @$data[$user->appid]['recharge_amount_in_91_days'] += (float)DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->where('created_at','<=',date('Y-m-d H:i:s',strtotime($user->created_at)+86400*91))->sum('price');
  80. @$data[$user->appid]['recharge_amount_in_92_days'] += (float)DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->where('created_at','<=',date('Y-m-d H:i:s',strtotime($user->created_at)+86400*92))->sum('price');
  81. @$data[$user->appid]['recharge_amount_in_93_days'] += (float)DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->where('created_at','<=',date('Y-m-d H:i:s',strtotime($user->created_at)+86400*93))->sum('price');
  82. @$data[$user->appid]['recharge_amount_in_94_days'] += (float)DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->where('created_at','<=',date('Y-m-d H:i:s',strtotime($user->created_at)+86400*94))->sum('price');
  83. @$data[$user->appid]['recharge_amount_in_95_days'] += (float)DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->where('created_at','<=',date('Y-m-d H:i:s',strtotime($user->created_at)+86400*95))->sum('price');
  84. @$data[$user->appid]['recharge_amount_in_96_days'] += (float)DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->where('created_at','<=',date('Y-m-d H:i:s',strtotime($user->created_at)+86400*96))->sum('price');
  85. @$data[$user->appid]['recharge_amount_in_97_days'] += (float)DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->where('created_at','<=',date('Y-m-d H:i:s',strtotime($user->created_at)+86400*97))->sum('price');
  86. }
  87. }
  88. $offset = $offset + $limit;
  89. }
  90. foreach ($data as $appid => $item) {
  91. $_data = [];
  92. $_data['date'] = $date;
  93. $_data['appid'] = $appid;
  94. $_data['fans_num'] = isset($item['fans_num']) ? $item['fans_num'] : 0;
  95. $_data['recharge_amount_in_90_days'] = isset($item['recharge_amount_in_90_days']) ? $item['recharge_amount_in_90_days'] : 0;
  96. $_data['recharge_amount_in_91_days'] = isset($item['recharge_amount_in_91_days']) ? $item['recharge_amount_in_91_days'] : 0;
  97. $_data['recharge_amount_in_92_days'] = isset($item['recharge_amount_in_92_days']) ? $item['recharge_amount_in_92_days'] : 0;
  98. $_data['recharge_amount_in_93_days'] = isset($item['recharge_amount_in_93_days']) ? $item['recharge_amount_in_93_days'] : 0;
  99. $_data['recharge_amount_in_94_days'] = isset($item['recharge_amount_in_94_days']) ? $item['recharge_amount_in_94_days'] : 0;
  100. $_data['recharge_amount_in_95_days'] = isset($item['recharge_amount_in_95_days']) ? $item['recharge_amount_in_95_days'] : 0;
  101. $_data['recharge_amount_in_96_days'] = isset($item['recharge_amount_in_96_days']) ? $item['recharge_amount_in_96_days'] : 0;
  102. $_data['recharge_amount_in_97_days'] = isset($item['recharge_amount_in_97_days']) ? $item['recharge_amount_in_97_days'] : 0;
  103. $_data['created_at'] = $_data['updated_at'] = date('Y-m-d H:i:s');
  104. $_m_data[] = $_data;
  105. }
  106. DB::table('fans_arpu')->insert($_m_data);
  107. Log::info("======90天-120天新关粉丝arpu 【任务执行结束】=====" . date("y-m-d H:i:s" . "\n"));
  108. print_r("======90天-120天新关粉丝arpu 【任务执行结束】=====" . date("y-m-d H:i:s" . "\n"));
  109. }
  110. }
  111. }