SetExtraStats.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: sogndb
  5. * Date: 2018/02/05
  6. * Time: 下午5:26
  7. */
  8. namespace App\Console\Commands\SendOrder;
  9. use Log;
  10. use Illuminate\Console\Command;
  11. use App\Modules\SendOrder\Services\SendOrderService;
  12. use App\Modules\Statistic\Services\WapVisitStatService;
  13. use DB;
  14. use Redis;
  15. class SetExtraStats extends Command
  16. {
  17. /**
  18. * 执行命令 php artisan send_order:set_extra_stats
  19. *
  20. * The name and signature of the console command.
  21. *
  22. * @var string
  23. */
  24. protected $signature = 'send_order:set_extra_stats';
  25. /**
  26. * The console command description.
  27. *
  28. * @var string
  29. */
  30. protected $description = '派单额外数据uv24小时设置';
  31. /**
  32. * Execute the console command.
  33. *
  34. * @return mixed
  35. */
  36. public function handle()
  37. {
  38. ini_set('memory_limit', '1024M');
  39. print_r('memory_used:'.memory_get_usage()."\n");
  40. print_r("======派单额外数据uv24小时设置 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  41. Log::info("======派单额外数据uv24小时设置 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  42. $start = date('Y-m-d H:i:s',strtotime('-1 day') - 120);
  43. $end = date('Y-m-d H:i:s',strtotime($start)+240);
  44. collect(DB::select("select send_orders.id,send_orders.send_time,uv_one_day from send_orders left join send_order_extra_stats on send_order_extra_stats.send_order_id = send_orders.id where send_orders.send_time >= '{$start}' and send_orders.send_time <= '{$end}'"))->each(function ($send_order){
  45. if($send_order->uv_one_day === null)
  46. {
  47. $uv_one_day = $this->getOneDayUv($send_order->id);
  48. $pv_one_day = $this->getOneDayPv($send_order->id);
  49. $time = date('Y-m-d H:i:s');
  50. $data = [
  51. 'uv_one_day'=>$uv_one_day,
  52. 'pv_one_day'=>$pv_one_day,
  53. 'send_order_id'=>$send_order->id,
  54. 'send_time'=>$send_order->send_time,
  55. 'created_at'=>$time,
  56. 'updated_at'=>$time
  57. ];
  58. DB::table('send_order_extra_stats')->insert($data);
  59. }
  60. });
  61. $start = date('Y-m-d H:i:s',strtotime('-3 days') - 120);
  62. $end = date('Y-m-d H:i:s',strtotime($start)+240);
  63. collect(DB::select("select send_orders.id,send_orders.send_time,send_order_extra_stats.id as extra_id,uv_three_day from send_orders left join send_order_extra_stats on send_order_extra_stats.send_order_id = send_orders.id where send_orders.send_time >= '{$start}' and send_orders.send_time <= '{$end}'"))->each(function ($send_order){
  64. if($send_order->uv_three_day === null)
  65. {
  66. $uv_three_day = $this->getThreeDayUv($send_order->id);
  67. $pv_three_day = $this->getThreeDayPv($send_order->id);
  68. $time = date('Y-m-d H:i:s');
  69. $data = [
  70. 'uv_three_day'=>$uv_three_day,
  71. 'pv_three_day'=>$pv_three_day,
  72. 'updated_at'=>$time
  73. ];
  74. DB::table('send_order_extra_stats')->where('id',$send_order->extra_id)->update($data);
  75. }
  76. });
  77. Log::info("======派单额外数据uv24小时设置 【任务执行结束】=====".date("y-m-d H:i:s"."\n"));
  78. print_r("======派单额外数据uv24小时设置 【任务执行结束】=====".date("y-m-d H:i:s"."\n"));
  79. print_r('memory_used:'.memory_get_usage()."\n");
  80. }
  81. //采集24小时uv
  82. private function getOneDayUv($id)
  83. {
  84. $today = date('Y-m-d');
  85. $yesterday = date('Y-m-d',strtotime('-1 day'));
  86. $one_day_uv = 0;
  87. $redis_uv = Redis::hgetall('send_order_uv_'. $id);
  88. $one_day_uv += isset($redis_uv[$today]) ? (int)$redis_uv[$today] : 0;//当天从redis获取
  89. $yesterday_uv = isset($redis_uv[$yesterday]) ? (int)$redis_uv[$yesterday] : 0;
  90. if(!$yesterday_uv)
  91. {
  92. //从数据库中获取v
  93. $yesterday_uv_pv = WapVisitStatService::getSendOrderDayUvPvFromStat($id, $yesterday);
  94. $yesterday_uv = $yesterday_uv_pv['uv'];
  95. }
  96. $one_day_uv += $yesterday_uv;
  97. return $one_day_uv;
  98. }
  99. //采集24小时pv
  100. private function getOneDayPv($id)
  101. {
  102. $today = date('Y-m-d');
  103. $yesterday = date('Y-m-d',strtotime('-1 day'));
  104. $one_day_pv = 0;
  105. $redis_pv = Redis::hgetall('send_order_pv_'. $id);
  106. $one_day_pv += isset($redis_pv[$today]) ? (int)$redis_pv[$today] : 0;//当天从redis获取
  107. $yesterday_pv = isset($redis_pv[$yesterday]) ? (int)$redis_pv[$yesterday] : 0;
  108. if(!$yesterday_pv)
  109. {
  110. //从数据库中获取
  111. $yesterday_uv_pv = WapVisitStatService::getSendOrderDayUvPvFromStat($id, $yesterday);
  112. $yesterday_pv = $yesterday_uv_pv['pv'];
  113. }
  114. $one_day_pv += $yesterday_pv;
  115. return $one_day_pv;
  116. }
  117. //采集72小时uv
  118. private function getThreeDayUv($id)
  119. {
  120. $today = date('Y-m-d');
  121. $yesterday = date('Y-m-d',strtotime('-1 day'));
  122. $the_day_before_yesterday = date('Y-m-d',strtotime('-2 day'));
  123. $three_days_ago = date('Y-m-d',strtotime('-3 day'));
  124. $one_day_uv = 0;
  125. $redis_uv = Redis::hgetall('send_order_uv_'. $id);
  126. $one_day_uv += isset($redis_uv[$today]) ? (int)$redis_uv[$today] : 0;//当天从redis获取
  127. $yesterday_uv = isset($redis_uv[$yesterday]) ? (int)$redis_uv[$yesterday] : 0;
  128. if(!$yesterday_uv)
  129. {
  130. //从数据库中获取v
  131. $yesterday_uv_pv = WapVisitStatService::getSendOrderDayUvPvFromStat($id, $yesterday);
  132. $yesterday_uv = $yesterday_uv_pv['uv'];
  133. }
  134. $one_day_uv += $yesterday_uv;
  135. $the_day_before_yesterday_uv_pv = WapVisitStatService::getSendOrderDayUvPvFromStat($id, $the_day_before_yesterday);
  136. $one_day_uv += $the_day_before_yesterday_uv_pv['uv'];
  137. $three_days_ago_uv_pv = WapVisitStatService::getSendOrderDayUvPvFromStat($id, $three_days_ago);
  138. $one_day_uv += $three_days_ago_uv_pv['uv'];
  139. return $one_day_uv;
  140. }
  141. //采集72小时pv
  142. private function getThreeDayPv($id)
  143. {
  144. $today = date('Y-m-d');
  145. $yesterday = date('Y-m-d',strtotime('-1 day'));
  146. $the_day_before_yesterday = date('Y-m-d',strtotime('-2 days'));
  147. $three_days_ago = date('Y-m-d',strtotime('-3 days'));
  148. $one_day_pv = 0;
  149. $redis_pv = Redis::hgetall('send_order_pv_'. $id);
  150. $one_day_pv += isset($redis_pv[$today]) ? (int)$redis_pv[$today] : 0;//当天从redis获取
  151. $yesterday_pv = isset($redis_pv[$yesterday]) ? (int)$redis_pv[$yesterday] : 0;
  152. if(!$yesterday_pv)
  153. {
  154. //从数据库中获取
  155. $yesterday_uv_pv = WapVisitStatService::getSendOrderDayUvPvFromStat($id, $yesterday);
  156. $yesterday_pv = $yesterday_uv_pv['pv'];
  157. }
  158. $one_day_pv += $yesterday_pv;
  159. $the_day_before_yesterday_uv_pv = WapVisitStatService::getSendOrderDayUvPvFromStat($id, $the_day_before_yesterday);
  160. $one_day_pv += $the_day_before_yesterday_uv_pv['pv'];
  161. $three_days_ago_uv_pv = WapVisitStatService::getSendOrderDayUvPvFromStat($id, $three_days_ago);
  162. $one_day_pv += $three_days_ago_uv_pv['pv'];
  163. return $one_day_pv;
  164. }
  165. }