<?php


/**
 * Class VinQueryLimit
 */
class OthVinQueryLimit extends OthBase
{

    /**
     * 站点
     *
     * @var array
     */
    private $tbvSite = ['pjd','gzh','super'];

    /**
     *
     * 是否存在限制
     *
     * @param $data['tbv_site'] string 站点 必填
     * @param $data['tbv_shop_id'] int 店铺ID 可选
     * @param $data['tbv_vin'] string 17位的vin 必填
     * @param $data['tbv_uid'] int 用户ID 可选
     * @return bool|int false:true:1|超过限制:没有超过限制:今天已经查询过了
     */
    public function getIsLimit(array $data)
    {
        $result = [];
        $data['tbv_vin'] = LibFc::FormatVin($data['tbv_vin']);
        $data['tbv_shop_id'] = (int) $data['tbv_shop_id'];
        $data['tbv_uid'] = (int) $data['tbv_uid'];
        if(!in_array($data['tbv_site'],$this->tbvSite))
        {
            return LibFc::ReturnData(false, 'tbv_site参数错误');
        }
        if($data['tbv_site'] != $this->tbvSite['0'] && (int) $data['tbv_shop_id'] <= 0)
        {
            return LibFc::ReturnData(false, 'tbv_site参数错误');
        }
        if(empty($data['tbv_vin']))
        {
            return LibFc::ReturnData(false, 'tbv_vin参数错误');
        }
        //是否登录
        $isUserId = isset($data['tbv_uid']) && $data['tbv_uid'] > 0 ? 1 : 0;

        $result['is_user'] = $isUserId;
        //是否是店铺
        $isShop = isset($data['tbv_shop_id']) && $data['tbv_shop_id'] > 0 ? 1 : 0;

        $sql = [
            'is_query_sql' => sprintf("select 1 from tj_b2c_vin where tbv_date='%s' and tbv_site='%s' and tbv_vin='%s'",date('Ymd'),$data['tbv_site'],$data['tbv_vin']),
            'count_sql' => sprintf("select count(*) count from tj_b2c_vin where tbv_date='%s' and tbv_site='%s'",date('Ymd'),$data['tbv_site']),
        ];

        if($isShop)
        {
            $sql['is_query_sql'] .= sprintf(" and tbv_shop_id=%d", $data['tbv_shop_id']);
            $sql['count_sql'] .= sprintf(" and tbv_shop_id=%d", $data['tbv_shop_id']);
            $sql['shop_count_sql'] = sprintf("select count(distinct tbv_vin) as count from tj_b2c_vin where tbv_date='%s' and tbv_shop_id=%d",date('Ymd'),$data['tbv_shop_id']);
        }
        if($isUserId)
        {
            $sql['is_query_sql'] .= sprintf(" and tbv_uid=%d",(int) $data['tbv_uid']);
            $sql['count_sql'] .= sprintf(" and tbv_uid=%d",(int) $data['tbv_uid']);
        }else{
            $sql['is_query_sql'] .= sprintf(" and tbv_ip = '%s'",LibFc::GetClientIp());
            $sql['count_sql'] .= sprintf(" and tbv_ip = '%s'",LibFc::GetClientIp());
        }

        $maxVinCount = is_numeric(mvc::$cfg['MAX_VIN_COUNT']) ? mvc::$cfg['MAX_VIN_COUNT'] : 1000;
        $maxVinCountUser = is_numeric(mvc::$cfg['MAX_VIN_COUNT_USER']) ? mvc::$cfg['MAX_VIN_COUNT_USER'] : $maxVinCount / 5;

        //如果是店主只需要查询一次
        if(isset($data['tbv_uid']) && $data['tbv_uid'] == $data['tbv_shop_id']){ //店主
            $temp = (int) $this->OthDb->One($sql['shop_count_sql']);
            if($maxVinCount > $temp){
                $result['status'] = true;
            }else{
                $result['status'] = false;
            }
        }else{
            // ip_count_sql ip登录查询
            //count_sql 当前这个人今天查询了多少次,登录就用user_id 查，未登录用IP查
            //shop_count_sql 当前店铺查询了多少次
            //is_query_sql 是否已经查询过了
            foreach ($sql as $key => $sqls)
            {
                $temp = str_replace('_sql','',$key);
                $result[$temp] = (int) $this->OthDb->One($sqls);
                if($key == 'is_query_sql' && $result[$temp] == 1){
                    $result['status'] = true;
                    break;
                }
            }

            if(isset($result['shop_count']) && $result['shop_count'] >= $maxVinCount)
            {  //店铺是否可查
                $result['status'] = false;
            }else{
                //店铺可查,返回这个人是否可查
                $result['status'] = $maxVinCountUser <= $result['count'] ? false : true;
            }
        }
        return LibFc::ReturnData(true,$result);
    }

    /**
     *
     * 创建VIN记录
     *
     * @param $data['tbv_vinres'] int 是否有结果 可选(不填默认为0)
     * @param $data['tbv_site'] string 站点 必填
     * @param $data['tbv_shop_id'] int 店铺ID 可选
     * @param $data['tbv_vin'] string 17位的vin 必填
     * @param $data['tbv_uid'] int 用户ID 可选
     * @return array
     */
    public function createRecord($data)
    {
        $data['tbv_vin'] = LibFc::FormatVin($data['tbv_vin']);
        $data['tbv_shop_id'] = (int) $data['tbv_shop_id'];
        $data['tbv_uid'] = (int) $data['tbv_uid'];
        if($data['tbv_site'] != $this->tbvSite['0'] && $data['tbv_shop_id'] < 0) return LibFc::ReturnData(false,'tbv_site参数错误');
        if(isset($data['tbv_shop_id']) && $data['tbv_shop_id'] < 0) return LibFc::ReturnData(false,'tbv_shop_id参数错误');
        if(!in_array($data['tbv_site'],$this->tbvSite)) return LibFc::ReturnData(false,'tbv_site参数错误');
        if(!in_array($data['tbv_vinres'],['1','0'])) return LibFc::ReturnData(false,'tbv_vinres参数错误');
        if(isset($data['tbv_uid']) && $data['tbv_uid'] < 0) return LibFc::ReturnData(false,'tbv_uid参数错误');
        if(!isset($data['tbv_vinres'])) $data['tbv_vinres'] = 0;
        $data['tbv_ip'] = LibFc::GetClientIp();
        $data['tbv_date'] = date('Ymd');
        $data['tbv_atime'] = time();
        $field = ['tbv_site', 'tbv_shop_id', 'tbv_date', 'tbv_vin', 'tbv_vinres', 'tbv_ip', 'tbv_uid', 'tbv_atime'];
        $key = array_keys($data);
        foreach ($key as $value) if(!in_array($value,$field)) unset($data[$value]);
        return $this->add('tj_b2c_vin',$data);
    }
}