<?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);
        }
    }
    
    
}