Count.php 5.2 KB
<?php

namespace App\Console\Commands\DayCount;

use App\Helper\Common;
use App\Helper\FormGlobalsoApi;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Project;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class Count extends Command
{
    const STATUS_ERROR = 400;
    public $error = 0;
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'count';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '统计昨日数据';
    /**
     * @name   :(定时执行生成昨日数据统计)handle
     * @author :lyh
     * @method :post
     * @time   :2023/5/12 14:48
     */
    public function handle()
    {
        $list = DB::table('gl_project')->where('gl_project.extend_type','!=',5)
            ->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
            ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
            ->select($this->selectParam())->get()->toArray();
        $data = [];
        $yesterday = Carbon::yesterday()->toDateString();
        foreach ($list as $v){
            $v = (array)$v;
            if($v['domain'] != ''){
                $v['test_domain'] = $v['domain'];
            }
            $arr = [];
            //统计时间
            $arr['date'] = $yesterday;
            //pv统计
            $arr['pv_num'] = $this->pv_num($yesterday,$v['test_domain']);
            //ip统计
            $arr['ip_num'] = $this->ip_num($yesterday,$v['test_domain']);
            //服务达标天数
            $arr['compliance_day'] = $this->compliance_day($v['test_domain']);
            //剩余服务时常
            $arr['service_day'] = ((int)$v['service_duration'] - (int)$arr['compliance_day']) > 0 ? ((int)$v['service_duration'] - (int)$arr['compliance_day']) : 0;
            //项目id
            $arr['project_id'] = $v['project_id'];
            $arr['created_at'] = date('Y-m-d H:i:s');
            $arr['updated_at'] = date('Y-m-d H:i:s');
            //询盘统计
            $arr = $this->inquiry($arr,$v['test_domain']);
            $data[] = $arr;
        }
        //判断数据是否存在
        DB::table('gl_count')->insert($data);
        echo $this->error;
    }

    /**
     * @name   :(统计pv)pv_num
     * @author :lyh
     * @method :post
     * @time   :2023/6/14 15:40
     */
    public function pv_num($yesterday,$domain){
        $pv = DB::table('gl_customer_visit_item')->whereDate('updated_date', $yesterday)->where('domain',$domain)->count();
        return $pv;
    }

    /**
     * @name   :(统计ip)ip_num
     * @author :lyh
     * @method :post
     * @time   :2023/6/14 15:40
     */
    public function ip_num($yesterday,$domain){
        $ip = DB::table('gl_customer_visit')->whereDate('updated_date', $yesterday)->where('domain',$domain)->count();
        return $ip;
    }

    /**
     * @param $arr
     * @param $domain
     * @name   :(询盘统计)inquiry
     * @author :lyh
     * @method :post
     * @time   :2023/6/14 15:44
     */
    public function inquiry($arr,$domain){
        $inquiry_list = (new FormGlobalsoApi())->getInquiryList($domain,'',1,100000000);
        if($inquiry_list['status'] == self::STATUS_ERROR){
            $arr['inquiry_num'] = 0;
        }else{
            $arr['inquiry_num'] = $inquiry_list['data']['total'];
            //询盘国家统计
            $countryData = $inquiry_list['data']['data'];
            $countryArr = [];
            foreach ($countryData as $v1){
                if(isset($countryArr[$v1['country']])){
                    $countryArr[$v1['country']]++;
                }else{
                    $countryArr[$v1['country']] = 0;
                }
            }
            arsort($countryArr);
            $top20 = array_slice($countryArr, 0, 20, true);
            $arr['country'] = json_encode($top20);
        }
        return $arr;
    }

    /**
     * @param $yesterday
     * @name   :(服务达标天数)compliance_day
     * @author :lyh
     * @method :post
     * @time   :2023/6/14 15:48
     */
    public function compliance_day($project_id){
        //服务达标天数
        $rank_info = DB::table('gl_rank_data')->where(['project_id'=>$project_id,'lang'=>''])->select(['compliance_day'])->first();
        if(empty($rank_info)){
            $compliance_day = 0;
        }else{
            $compliance_day = $rank_info->compliance_day;
        }
        return $compliance_day;
    }

    /**
     * @name   :(查询参数设置)selectParam
     * @author :lyh
     * @method :post
     * @time   :2023/6/14 15:00
     */
    public function selectParam(){
        $select = [
            'gl_project.id AS user_id',
            'gl_project.extend_type AS extend_type',
            'gl_project_deploy_build.test_domain AS test_domain',
            'gl_project_deploy_optimize.domain AS domain',
            'gl_project_deploy_build.project_id AS project_id',
            'gl_project.cooperate_date AS cooperate_date',
            'gl_project_deploy_build.service_duration AS service_duration',
        ];
        return $select;
    }
}