123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <?php
- namespace App\services;
- use App\model\DouyinTrack;
- use support\Redis;
- use support\Log;
- use support\facade\Logger;
- class TrackService
- {
-
- /**
- * 把请求信息,放到redis队列中
- * @params 这是get请求的 数据的数组
- * @fix 1 代表是从日志文件取出来的修复数据,默认是0;是监测链接过来的数据
- */
- public static function push ($params,$fix=0){
- $dycallback = getProp($params,'dycallback');
- if(empty($params['log_time'])){
- $params['log_time'] = date('Y-m-d H:i:s',time());
- }
- // 修复数据不需要-记录 json 日志信息;
- if (!$fix) {
- Logger::track(json_encode($params));
- }
- $track_data = json_encode($params);
- switch ($dycallback) {
- case 1:
-
- Redis::lpush('tiktok_track',$track_data);
- // if (!Redis::get('tiktok_track_deal_lock')) { // 锁住
- // Redis::setEx('tiktok_track_deal_lock',1,1);
- // self::TiktokRedisDeal();
- // }
- break;
- case 22:
- Redis::lpush('orange_track',$track_data);
- break;
- default:
- // code...
- break;
- }
- }
-
- /**
- * 定时任务批量处理
- */
- public static function cronDeal (){
- // 处理巨量平台的
- self::TiktokRedisDeal();
- self::OrangeRedisDeal();
- }
-
- /**
- * 批量处理 巨量 平台发送过来的检测链接 数据信息。-避免过多的install
- */
- public static function TiktokRedisDeal ($data= []){
- if (!$data) {
- $len = Redis::llen('tiktok_track');
- //Logger::app('tiktok_track:len'.$len);
- if($len > 4000){
- $len= 4000;
- }
- for ($i = 1; $i <= $len; $i++) {
- $data[] = Redis::rpop('tiktok_track');
- }
- }
- if(empty($data)){
- return false;
- }
- $inster = [] ;
- $model = DouyinTrack::model();
- foreach ($data as $val){
- $params = json_decode($val,true);
- if(!getProp($params,'channel_id','')){
- continue;
- }
- $callback = getProp($params,'clickid','');
- $link = getProp($params,'link','');
- $other = explode('?', $link);
- if (is_array($other) && strpos($link, 'callback=')) {
- $otherarr = explode('&', $link);
- $callback = explode('=',$otherarr[0]);
- $callback = $callback[1];
- }else{
- $callback = '';
- }
- $ua =mb_substr( getProp($params,'ua',''),0,250);
- //整理数据+
- $inster[] = [
- 'link' => getProp($params,'link',''),
- 'link_source' => 'tiktok',
- 'ip' => getProp($params,'ip',''),
- 'ua' => $ua,
- 'source' => 'zsy',
- 'ip_ua' => md5(getProp($params,'ip','') . getProp($params,'ua','')),
- 'distribution_channel_id' => getProp($params,'channel_id',''),
- 'log_time' => getProp($params,'log_time',''),
- 'created_at' => date('Y-m-d H:i:s',time()),
- 'adid' => getProp($params,'adid',''),
- 'callback' => $callback,
- //新添加
- 'advertiser_id' => getProp($params,'advertiser_id',''),
- 'campaign_id' => getProp($params,'campaign_id',''),
- 'creativeid' => getProp($params,'creativeid',''),
- 'promotion_id' => getProp($params,'promotionid',''),
- 'project_id' => getProp($params,'projectid',''),
-
- ];
- if(count($inster) >= 2000){
- $model->insert($inster);
- $inster = [];
- }
- }
- if ($inster) {
- $model->insert($inster);
- }
- }
-
- /**
- * 二次确认处理, 不让继续添加到表里处理;就返回FALSE
- */
- public static function confirm ($params){
- $dycallback = getProp($params,'dycallback');
- $channel_id = getProp($params,'channel_id');
- $ip = getProp($params,'ip');
- // if ($dycallback == 1) {
- // $clickid = getProp($params,'clickid');
- // if (!$clickid) {
- // return false;
- // }
- // $model = DouyinTrack::model();
- // $id =$model->where('ip',$ip)->where('distribution_channel_id',$channel_id)->where('callback',$clickid)->value('id');
- // if(empty($id)){
- // return false;
- // }
- // return $id;
- // }
- return 1;
-
- }
- /**
- * 批量任务处理 橙子回传的监测连接
- */
- public static function OrangeRedisDeal ($data= []){
- if (!$data) {
- $len = Redis::llen('orange_track');
- if($len > 4000){
- $len= 4000;
- }
- for ($i = 1; $i <= $len; $i++) {
- $data[] = Redis::rpop('orange_track');
- }
- }
- if(empty($data)){
- return false;
- }
- $inster = [] ;
- $model = DouyinTrack::model();
- foreach ($data as $val){
- $params = json_decode($val,true);
- if(!getProp($params,'channel_id','')){
- continue;
- }
- $ua =mb_substr( getProp($params,'ua',''),0,250);
- $link = getProp($params,'link','');
- $other = explode('?', $link);
- if (is_array($other) && strpos($link, 'callback=')) {
- $otherarr = explode('&', $link);
- $callback = explode('=',$otherarr[0]);
- $callback = $callback[1];
- }else{
- $callback = '';
- }
-
- //整理数据+
- $inster[] = [
- 'link' => getProp($params,'link',''),
- 'link_source' => 'orange',
- 'ip' => getProp($params,'ip',''),
- 'ua' => $ua,
- 'source' => 'zsy',
- 'ip_ua' => md5(getProp($params,'ip','') . getProp($params,'ua','')),
- 'distribution_channel_id' => getProp($params,'channel_id',''),
- 'log_time' => getProp($params,'log_time',''),
- 'created_at' => date('Y-m-d H:i:s',time()),
- 'adid' => getProp($params,'adid',''),
- 'callback' => $callback,
- //新添加
- 'advertiser_id' => getProp($params,'advertiser_id',''),
- 'campaign_id' => getProp($params,'campaign_id',''),
- 'creativeid' => getProp($params,'creativeid',''),
- 'promotion_id' => getProp($params,'promotionid',''),
- 'project_id' => getProp($params,'projectid',''),
-
- ];
- if(count($inster) >= 2000){
- $model->insert($inster);
- $inster = [];
- }
- }
- if ($inster) {
- $model->insert($inster);
- }
- }
-
- }
|