TrackService.php 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. */
  12. public static function push ($params){
  13. $dycallback = getProp($params,'dycallback');
  14. switch ($dycallback) {
  15. case 1:
  16. //投递队列
  17. $params['log_time'] = date('Y-m-d H:i:s',time());
  18. Redis::lpush('tiktok_track',json_encode($params));
  19. // if (!Redis::get('tiktok_track_deal_lock')) { // 锁住
  20. // Redis::setEx('tiktok_track_deal_lock',1,1);
  21. // self::TiktokRedisDeal();
  22. // }
  23. break;
  24. default:
  25. // code...
  26. break;
  27. }
  28. }
  29. /**
  30. * 定时任务批量处理
  31. */
  32. public static function cronDeal (){
  33. // 处理巨量平台的
  34. self::TiktokRedisDeal();
  35. }
  36. /**
  37. * 批量处理 巨量 平台发送过来的检测链接 数据信息。-避免过多的install
  38. */
  39. public static function TiktokRedisDeal ($data= []){
  40. if (!$data) {
  41. $len = Redis::llen('tiktok_track');
  42. Logger::app('tiktok_track:len'.$len);
  43. if($len > 4000){
  44. $len= 4000;
  45. }
  46. for ($i = 1; $i <= $len; $i++) {
  47. $data[] = Redis::rpop('tiktok_track');
  48. }
  49. }
  50. if(empty($data)){
  51. return false;
  52. }
  53. $inster = [] ;
  54. $model = DouyinTrack::model();
  55. foreach ($data as $val){
  56. $params = json_decode($val,true);
  57. if(!getProp($params,'connection_id','')){
  58. continue;
  59. }
  60. //整理数据+
  61. $inster[] = [
  62. 'link' => getProp($params,'link',''),
  63. 'link_source' => getProp($params, 'link_source', ''),
  64. 'ip' => getProp($params,'ip',''),
  65. 'ua' => getProp($params,'ua',''),
  66. 'source' => 'zhiyu',
  67. 'ip_ua' => md5(getProp($params,'ip','') . getProp($params,'ua','')),
  68. 'connection_id' => getProp($params,'connection_id',''),
  69. 'log_time' => getProp($params,'log_time',''),
  70. 'created_at' => date('Y-m-d H:i:s',time()),
  71. 'adid' => getProp($params,'adid',''),
  72. 'callback' => getProp($params,'clickid',''),
  73. //新添加
  74. 'advertiser_id' => getProp($params,'advertiser_id',''),
  75. 'campaign_id' => getProp($params,'campaign_id',''),
  76. 'creativeid' => getProp($params,'creativeid',''),
  77. 'project_id' => getProp($params,'project_id',''),
  78. 'promotion_id' => getProp($params,'promotion_id',''),
  79. ];
  80. if(count($inster) >= 2000){
  81. $model->insert($inster);
  82. $inster = [];
  83. }
  84. }
  85. if ($inster) {
  86. $model->insert($inster);
  87. }
  88. }
  89. }