Visit.php 2.8 KB
<?php

namespace App\Models\Visit;


use App\Models\Base;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;

/**
 * Class Visit
 * @package App\Models
 * @author zbj
 * @date 2023/5/22
 */
class Visit extends Base
{

    //设置关联表名
    protected $table = 'gl_customer_visit';
    //连接数据库
    protected $connection = 'custom_mysql';
    protected $appends = ['device_text'];
    protected $fillable = ['ip','device_port','country','city','url','referrer_url','depth','domain','updated_date', 'created_at'];

    const DEVICE_PC = 1;
    const DEVICE_MOBILE = 2;

    public static function deviceMap(){
        return [
            self::DEVICE_PC => 'PC',
            self::DEVICE_MOBILE => '移动端'
        ];
    }

    /**
     * @return string
     * @author zbj
     * @date 2023/5/22
     */
    public function getDeviceTextAttribute(){
        return self::deviceMap()[$this->device_port] ?? '';
    }

    /**
     * @author zbj
     * @date 2023/9/11
     */
    public function yesterdayIpCount(){
        return self::deviceMap()[$this->device_port] ?? '';
    }

    /**
     * 访问写入
     */
    public static function saveData($data)
    {
        //判断IP当天是否有一条数据
        $visit = Visit::where("ip",$data['ip'])->where("created_at",">=",Carbon::now()->today()->startOfDay())
            ->where("created_at","<=",Carbon::now()->today()->endOfDay())
            ->first();
        DB::connection('custom_mysql')->beginTransaction();
        if (!empty($visit) && $visit->count() >= 1){
            //当天已存在IP访问记录
            try{
                $data["customer_visit_id"]  = $visit->id;
                VisitItem::create($data);
                Visit::where("id",$visit->id)->update(['depth' => $visit->depth + 1]);
                DB::connection('custom_mysql')->commit();
            }catch (\Exception $e){
                DB::connection('custom_mysql')->rollBack();
                throw new \Exception($e->getMessage());
            }
        }else{
            //第一次访问
            try{
                $id =  Visit::create($data)->id;
                $data["customer_visit_id"] = $id;
                VisitItem::create($data);
                DB::connection('custom_mysql')->commit();
            }catch (\Exception $e){
                DB::connection('custom_mysql')->rollBack();
                throw new \Exception($e->getMessage());
            }
        }
        return true;
    }


    public static function isInquiry($ip){
        $visit = Visit::where("ip",$ip)->where("created_at",">=",Carbon::now()->today()->startOfDay())
            ->where("created_at","<=",Carbon::now()->today()->endOfDay())
            ->first();
        if($visit){
            $visit->is_inquiry = 1;
            $visit->save();
        }

        return true;
    }
}