TrackService.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace App\services;
  3. use App\model\DouyinTrack;
  4. use support\Redis;
  5. use support\Log;
  6. use support\facade\Logger;
  7. class TrackService
  8. {
  9. /**
  10. * 把请求信息,放到redis队列中
  11. * @params 这是get请求的 数据的数组
  12. * @fix 1 代表是从日志文件取出来的修复数据,默认是0;是监测链接过来的数据
  13. */
  14. public static function push ($params,$fix=0){
  15. $dycallback = getProp($params,'dycallback');
  16. if(empty($params['log_time'])){
  17. $params['log_time'] = date('Y-m-d H:i:s',time());
  18. }
  19. // 修复数据不需要-记录 json 日志信息;
  20. if (!$fix) {
  21. Logger::track(json_encode($params));
  22. }
  23. $track_data = json_encode($params);
  24. switch ($dycallback) {
  25. case 1:
  26. Redis::lpush('tiktok_track',$track_data);
  27. // if (!Redis::get('tiktok_track_deal_lock')) { // 锁住
  28. // Redis::setEx('tiktok_track_deal_lock',1,1);
  29. // self::TiktokRedisDeal();
  30. // }
  31. break;
  32. default:
  33. // code...
  34. break;
  35. }
  36. }
  37. /**
  38. * 定时任务批量处理
  39. */
  40. public static function cronDeal (){
  41. // 处理巨量平台的
  42. self::TiktokRedisDeal();
  43. }
  44. /**
  45. * 批量处理 巨量 平台发送过来的检测链接 数据信息。-避免过多的install
  46. */
  47. public static function TiktokRedisDeal ($data= []){
  48. if (!$data) {
  49. $len = Redis::llen('tiktok_track');
  50. //Logger::app('tiktok_track:len'.$len);
  51. if($len > 4000){
  52. $len= 4000;
  53. }
  54. for ($i = 1; $i <= $len; $i++) {
  55. $data[] = Redis::rpop('tiktok_track');
  56. }
  57. }
  58. if(empty($data)){
  59. return false;
  60. }
  61. $inster = [] ;
  62. $model = DouyinTrack::model();
  63. foreach ($data as $val){
  64. $params = json_decode($val,true);
  65. if(!getProp($params,'channel_id','')){
  66. continue;
  67. }
  68. //整理数据+
  69. $inster[] = [
  70. 'link' => getProp($params,'link',''),
  71. 'link_source' => 'tiktok',
  72. 'ip' => getProp($params,'ip',''),
  73. 'ua' => getProp($params,'ua',''),
  74. 'source' => 'zsy',
  75. 'ip_ua' => md5(getProp($params,'ip','') . getProp($params,'ua','')),
  76. 'distribution_channel_id' => getProp($params,'channel_id',''),
  77. 'log_time' => getProp($params,'log_time',''),
  78. 'created_at' => date('Y-m-d H:i:s',time()),
  79. 'adid' => getProp($params,'adid',''),
  80. 'callback' => getProp($params,'clickid',''),
  81. //新添加
  82. 'advertiser_id' => getProp($params,'advertiser_id',''),
  83. 'campaign_id' => getProp($params,'campaign_id',''),
  84. 'creativeid' => getProp($params,'creativeid',''),
  85. 'callback'=> getProp($params,'callback',''),
  86. ];
  87. if(count($inster) >= 2000){
  88. $model->insert($inster);
  89. $inster = [];
  90. }
  91. }
  92. if ($inster) {
  93. $model->insert($inster);
  94. }
  95. }
  96. }