TrackService.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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. case 22:
  33. Redis::lpush('orange_track',$track_data);
  34. break;
  35. default:
  36. // code...
  37. break;
  38. }
  39. }
  40. /**
  41. * 定时任务批量处理
  42. */
  43. public static function cronDeal (){
  44. // 处理巨量平台的
  45. self::TiktokRedisDeal();
  46. self::OrangeRedisDeal();
  47. }
  48. /**
  49. * 批量处理 巨量 平台发送过来的检测链接 数据信息。-避免过多的install
  50. */
  51. public static function TiktokRedisDeal ($data= []){
  52. if (!$data) {
  53. $len = Redis::llen('tiktok_track');
  54. //Logger::app('tiktok_track:len'.$len);
  55. if($len > 4000){
  56. $len= 4000;
  57. }
  58. for ($i = 1; $i <= $len; $i++) {
  59. $data[] = Redis::rpop('tiktok_track');
  60. }
  61. }
  62. if(empty($data)){
  63. return false;
  64. }
  65. $inster = [] ;
  66. $model = DouyinTrack::model();
  67. foreach ($data as $val){
  68. $params = json_decode($val,true);
  69. if(!getProp($params,'channel_id','')){
  70. continue;
  71. }
  72. $callback = getProp($params,'clickid','');
  73. $link = getProp($params,'link','');
  74. $other = explode('?', $link);
  75. if (is_array($other) && strpos($link, 'callback=')) {
  76. $otherarr = explode('&', $link);
  77. $callback = explode('=',$otherarr[0]);
  78. $callback = $callback[1];
  79. }else{
  80. $callback = '';
  81. }
  82. $ua =mb_substr( getProp($params,'ua',''),0,250);
  83. //整理数据+
  84. $inster[] = [
  85. 'link' => getProp($params,'link',''),
  86. 'link_source' => 'tiktok',
  87. 'ip' => getProp($params,'ip',''),
  88. 'ua' => $ua,
  89. 'source' => 'zsy',
  90. 'ip_ua' => md5(getProp($params,'ip','') . getProp($params,'ua','')),
  91. 'distribution_channel_id' => getProp($params,'channel_id',''),
  92. 'log_time' => getProp($params,'log_time',''),
  93. 'created_at' => date('Y-m-d H:i:s',time()),
  94. 'adid' => getProp($params,'adid',''),
  95. 'callback' => $callback,
  96. //新添加
  97. 'advertiser_id' => getProp($params,'advertiser_id',''),
  98. 'campaign_id' => getProp($params,'campaign_id',''),
  99. 'creativeid' => getProp($params,'creativeid',''),
  100. 'promotion_id' => getProp($params,'promotionid',''),
  101. 'project_id' => getProp($params,'projectid',''),
  102. ];
  103. if(count($inster) >= 2000){
  104. $model->insert($inster);
  105. $inster = [];
  106. }
  107. }
  108. if ($inster) {
  109. $model->insert($inster);
  110. }
  111. }
  112. /**
  113. * 二次确认处理, 不让继续添加到表里处理;就返回FALSE
  114. */
  115. public static function confirm ($params){
  116. $dycallback = getProp($params,'dycallback');
  117. $channel_id = getProp($params,'channel_id');
  118. $ip = getProp($params,'ip');
  119. // if ($dycallback == 1) {
  120. // $clickid = getProp($params,'clickid');
  121. // if (!$clickid) {
  122. // return false;
  123. // }
  124. // $model = DouyinTrack::model();
  125. // $id =$model->where('ip',$ip)->where('distribution_channel_id',$channel_id)->where('callback',$clickid)->value('id');
  126. // if(empty($id)){
  127. // return false;
  128. // }
  129. // return $id;
  130. // }
  131. return 1;
  132. }
  133. /**
  134. * 批量任务处理 橙子回传的监测连接
  135. */
  136. public static function OrangeRedisDeal ($data= []){
  137. if (!$data) {
  138. $len = Redis::llen('orange_track');
  139. if($len > 4000){
  140. $len= 4000;
  141. }
  142. for ($i = 1; $i <= $len; $i++) {
  143. $data[] = Redis::rpop('orange_track');
  144. }
  145. }
  146. if(empty($data)){
  147. return false;
  148. }
  149. $inster = [] ;
  150. $model = DouyinTrack::model();
  151. foreach ($data as $val){
  152. $params = json_decode($val,true);
  153. if(!getProp($params,'channel_id','')){
  154. continue;
  155. }
  156. $ua =mb_substr( getProp($params,'ua',''),0,250);
  157. $link = getProp($params,'link','');
  158. $other = explode('?', $link);
  159. if (is_array($other) && strpos($link, 'callback=')) {
  160. $otherarr = explode('&', $link);
  161. $callback = explode('=',$otherarr[0]);
  162. $callback = $callback[1];
  163. }else{
  164. $callback = '';
  165. }
  166. //整理数据+
  167. $inster[] = [
  168. 'link' => getProp($params,'link',''),
  169. 'link_source' => 'orange',
  170. 'ip' => getProp($params,'ip',''),
  171. 'ua' => $ua,
  172. 'source' => 'zsy',
  173. 'ip_ua' => md5(getProp($params,'ip','') . getProp($params,'ua','')),
  174. 'distribution_channel_id' => getProp($params,'channel_id',''),
  175. 'log_time' => getProp($params,'log_time',''),
  176. 'created_at' => date('Y-m-d H:i:s',time()),
  177. 'adid' => getProp($params,'adid',''),
  178. 'callback' => $callback,
  179. //新添加
  180. 'advertiser_id' => getProp($params,'advertiser_id',''),
  181. 'campaign_id' => getProp($params,'campaign_id',''),
  182. 'creativeid' => getProp($params,'creativeid',''),
  183. 'promotion_id' => getProp($params,'promotionid',''),
  184. 'project_id' => getProp($params,'projectid',''),
  185. ];
  186. if(count($inster) >= 2000){
  187. $model->insert($inster);
  188. $inster = [];
  189. }
  190. }
  191. if ($inster) {
  192. $model->insert($inster);
  193. }
  194. }
  195. }