<?php namespace App\services; use App\model\DouyinTrack; use support\Redis; use support\Log; use support\facade\Logger; class TrackService { /** * 把请求信息,放到redis队列中 */ public static function push ($params){ $dycallback = getProp($params,'dycallback'); switch ($dycallback) { case 1: //投递队列 $params['log_time'] = date('Y-m-d H:i:s',time()); Redis::lpush('tiktok_track',json_encode($params)); // if (!Redis::get('tiktok_track_deal_lock')) { // 锁住 // Redis::setEx('tiktok_track_deal_lock',1,1); // self::TiktokRedisDeal(); // } break; default: // code... break; } } /** * 定时任务批量处理 */ public static function cronDeal (){ // 处理巨量平台的 self::TiktokRedisDeal(); } /** * 批量处理 巨量 平台发送过来的检测链接 数据信息。-避免过多的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,'connection_id','')){ continue; } //整理数据+ $inster[] = [ 'link' => getProp($params,'link',''), 'link_source' => getProp($params, 'link_source', ''), 'ip' => getProp($params,'ip',''), 'ua' => getProp($params,'ua',''), 'source' => 'zhiyu', 'ip_ua' => md5(getProp($params,'ip','') . getProp($params,'ua','')), 'connection_id' => getProp($params,'connection_id',''), 'log_time' => getProp($params,'log_time',''), 'created_at' => date('Y-m-d H:i:s',time()), 'adid' => getProp($params,'adid',''), 'callback' => getProp($params,'callback_url',''), //新添加 'advertiser_id' => getProp($params,'advertiser_id',''), 'campaign_id' => getProp($params,'campaign_id',''), 'creativeid' => getProp($params,'creativeid',''), 'project_id' => getProp($params,'projectid',''), 'promotion_id' => getProp($params,'promotionid',''), ]; if(count($inster) >= 2000){ $model->insert($inster); $inster = []; } } if ($inster) { $model->insert($inster); } } }