SubUserRecharge.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: tandunzhao
  5. * Date: 2017/11/20
  6. * Time: 下午5:26
  7. */
  8. namespace App\Console\Commands\OfficialAccountStat;
  9. use Log;
  10. use Illuminate\Console\Command;
  11. use DB;
  12. class SubUserRecharge extends Command
  13. {
  14. /**
  15. * 执行命令 php artisan force_user_active
  16. *
  17. * The name and signature of the console command.
  18. *
  19. * @var string
  20. */
  21. protected $signature = 'sub_user_recharge';
  22. /**
  23. * The console command description.
  24. *
  25. * @var string
  26. */
  27. protected $description = '强关粉丝充值统计';
  28. /**
  29. * Execute the console command.
  30. *
  31. * @return mixed
  32. */
  33. public function handle()
  34. {
  35. /**
  36. * CREATE TABLE `sub_user_recharge_stat` (
  37. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  38. `date` date DEFAULT NULL,
  39. `appid` varchar(255) DEFAULT NULL,
  40. `fans_num` int(11) DEFAULT NULL,
  41. `order_sum_in_one_day` decimal(11,2) DEFAULT NULL,
  42. `order_sum_in_three_day` decimal(11,2) DEFAULT NULL,
  43. `unsub_user_num_in_one_month` int(11) DEFAULT NULL,
  44. `order_sum_in_one_month` decimal(11,2) DEFAULT NULL,
  45. `unsub_user_num_in_two_month` int(11) DEFAULT NULL,
  46. `pay_user_num_in_two_month` int(11) DEFAULT NULL,
  47. `order_sum_in_two_month` decimal(11,2) DEFAULT NULL,
  48. `unsub_user_num_in_three_month` int(11) DEFAULT NULL,
  49. `order_sum_in_three_month` decimal(11,2) DEFAULT NULL,
  50. `pay_user_num_in_three_month` int(11) DEFAULT NULL,
  51. `created_at` datetime DEFAULT NULL,
  52. `updated_at` datetime DEFAULT NULL,
  53. `distribution_channel_id` int(11) DEFAULT NULL,
  54. `gzh_name` varchar(255) DEFAULT NULL,
  55. `distribution_channel_name` varchar(255) DEFAULT NULL,
  56. PRIMARY KEY (`id`)
  57. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  58. *
  59. *
  60. update sub_user_recharge_stat,distribution_channels,official_accounts set sub_user_recharge_stat.distribution_channel_id = distribution_channels.id,sub_user_recharge_stat.distribution_channel_name=distribution_channels.nickname,sub_user_recharge_stat.gzh_name = official_accounts.nickname where sub_user_recharge_stat.appid = official_accounts.appid and official_accounts.distribution_channel_id = distribution_channels.id
  61. select distribution_channel_id,gzh_name,distribution_channel_name,date,fans_num,order_sum_in_one_day,order_sum_in_three_day,unsub_user_num_in_one_month,order_sum_in_one_month,unsub_user_num_in_two_month,pay_user_num_in_two_month,order_sum_in_two_month,unsub_user_num_in_three_month,pay_user_num_in_three_month,order_sum_in_three_month from sub_user_recharge_stat
  62. */
  63. print_r("======强关粉丝充值统计生成 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  64. Log::info("======强关粉丝充值统计生成 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  65. $_start = new \DateTime('2017-12-12');
  66. $_end = new \DateTime('2018-02-18');
  67. foreach (new \DatePeriod($_start, new \DateInterval('P1D'), $_end) as $d)
  68. {
  69. $date = $d->format('Y-m-d');
  70. $start = $date;
  71. $end = date('Y-m-d', strtotime($date) + 86400);
  72. $offset = 0;
  73. $limit = 13000;
  74. $data = [];
  75. $_m_data = [];
  76. while (true) {
  77. 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"));
  78. $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");
  79. print_r("users_count:".count($users));
  80. if (count($users) == 0) break;
  81. foreach ($users as $user) {
  82. $is_unsub_in_one_day = false;
  83. $is_pay_in_one_day = false;
  84. $is_pay_in_two_days = false;
  85. $is_pay_in_three_days = false;
  86. $is_unsub_in_two_days = false;
  87. $is_unsub_in_three_days = false;
  88. $is_unsub_in_three_month = false;
  89. $order_sum_in_one_day = 0;
  90. $order_sum_in_two_day = 0;
  91. $order_sum_in_three_day = 0;
  92. $order_sum_in_one_month = 0;
  93. $order_sum_in_two_month = 0;
  94. $order_sum_in_three_month = 0;
  95. $order = DB::table('orders')->where('uid', $user->uid)->where('status', 'PAID')->first();
  96. if ($order) {
  97. if (strtotime($order->created_at) < strtotime($user->created_at) + 86400)//24小时内
  98. {
  99. @$data[$user->appid]['pay_user_num_in_one_day']++;
  100. $is_pay_in_one_day = true;
  101. }
  102. if (strtotime($order->created_at) < strtotime($user->created_at) + 86400 * 2)//48小时内
  103. {
  104. $is_pay_in_two_days = true;
  105. }
  106. if (strtotime($order->created_at) < strtotime($user->created_at) + 86400 * 3)//72小时内
  107. {
  108. @$data[$user->appid]['pay_user_num_in_three_days']++;
  109. $is_pay_in_three_days = true;
  110. }
  111. if (strtotime($order->created_at) < strtotime($user->created_at) + 86400 * 30)//30天内
  112. {
  113. @$data[$user->appid]['pay_user_num_in_one_month']++;
  114. }
  115. if (strtotime($order->created_at) < strtotime($user->created_at) + 86400 * 60)//60天内
  116. {
  117. @$data[$user->appid]['pay_user_num_in_two_month']++;
  118. }
  119. if (strtotime($order->created_at) < strtotime($user->created_at) + 86400 * 90)//90天内
  120. {
  121. @$data[$user->appid]['pay_user_num_in_three_month']++;
  122. }
  123. $order_sum_in_one_day = (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))->sum('price');
  124. //$order_sum_in_two_day = (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*2))->sum('price');
  125. $order_sum_in_three_day = (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*3))->sum('price');
  126. $order_sum_in_one_month = (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*30))->sum('price');
  127. $order_sum_in_two_month = (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*60))->sum('price');
  128. $order_sum_in_three_month = (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');
  129. }
  130. @$data[$user->appid]['order_sum_in_one_day'] += $order_sum_in_one_day;
  131. @$data[$user->appid]['order_sum_in_three_day'] += $order_sum_in_three_day;
  132. @$data[$user->appid]['order_sum_in_one_month'] += $order_sum_in_one_month;
  133. @$data[$user->appid]['order_sum_in_two_month'] += $order_sum_in_two_month;
  134. @$data[$user->appid]['order_sum_in_three_month'] += $order_sum_in_three_month;
  135. @$data[$user->appid]['fans_num']++;
  136. if ($user->unsubscribe_time && strtotime($user->unsubscribe_time) < strtotime($user->created_at) + 86400*30)//30天内取注
  137. {
  138. @$data[$user->appid]['unsub_user_num_in_one_month']++;
  139. }
  140. if ($user->unsubscribe_time && strtotime($user->unsubscribe_time) < strtotime($user->created_at) + 86400*60)//60天内取注
  141. {
  142. @$data[$user->appid]['unsub_user_num_in_two_month']++;
  143. }
  144. if ($user->unsubscribe_time && strtotime($user->unsubscribe_time) < strtotime($user->created_at) + 86400*90)//90天内取注
  145. {
  146. @$data[$user->appid]['unsub_user_num_in_three_month']++;
  147. }
  148. }
  149. $offset = $offset + $limit;
  150. }
  151. foreach ($data as $appid => $item) {
  152. $_data = [];
  153. $_data['appid'] = $appid;
  154. $_data['date'] = $date;
  155. $_data['fans_num'] = isset($item['fans_num']) ? $item['fans_num'] : 0;
  156. $_data['order_sum_in_one_day'] = $item['order_sum_in_one_day'];//24小时充值收益
  157. $_data['order_sum_in_three_day'] = $item['order_sum_in_three_day'];//72小时充值
  158. //30天数据
  159. $_data['unsub_user_num_in_one_month'] = isset($item['unsub_user_num_in_one_month']) ? $item['unsub_user_num_in_one_month'] : 0;//30天内取关粉丝数
  160. $_data['order_sum_in_one_month'] = $item['order_sum_in_one_month'];//30天充值
  161. //60天数据
  162. $_data['unsub_user_num_in_two_month'] = isset($item['unsub_user_num_in_two_month']) ? $item['unsub_user_num_in_two_month'] : 0;//60天取关粉丝数
  163. $_data['pay_user_num_in_two_month'] = isset($item['pay_user_num_in_two_month']) ? $item['pay_user_num_in_two_month'] : 0;//60天内首充用户数
  164. $_data['order_sum_in_two_month'] = $item['order_sum_in_two_month'];//60天充值
  165. //90天数据
  166. $_data['unsub_user_num_in_three_month'] = isset($item['unsub_user_num_in_three_month']) ? $item['unsub_user_num_in_three_month'] : 0;//90天取关粉丝数
  167. $_data['order_sum_in_three_month'] = $item['order_sum_in_three_month'];//90天充值
  168. $_data['pay_user_num_in_three_month'] = isset($item['pay_user_num_in_three_month']) ? $item['pay_user_num_in_three_month'] : 0;//90天内首充用户数
  169. $_data['created_at'] = $_data['updated_at'] = date('Y-m-d H:i:s');
  170. $_m_data[] = $_data;
  171. }
  172. DB::table('sub_user_recharge_stat')->insert($_m_data);
  173. Log::info("======强关粉丝充值统计生成 【任务执行结束】=====" . date("y-m-d H:i:s" . "\n"));
  174. print_r("======强关粉丝充值统计生成 【任务执行结束】=====" . date("y-m-d H:i:s" . "\n"));
  175. }
  176. }
  177. }