<?php

/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/3/30 0030
 * Time: 16:22
 */

namespace app\modules\common;

//use app\third\map\Baidu;
use app\modules\logic\model\SysProductSetModel;
use app\modules\logic\model\SysBasePriceSetModel;
use app\modules\logic\model\MerchTypeModel;
use app\modules\third\map\Baidu;
use Yii;

class Helper {
	/**
	 * [getMarryCnf 获取婚姻配置]
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  [type]          [description]
	 */
	public static function getMarryCnf($id = 0,$all = false){
		$arr = [
			'1'=>'已婚',
			'2'=>'未婚'
		];
		if($all){
			return $arr;
		}
		return isset($arr[$id])?$arr[$id]:'未知';
	}
	/**
	 * [getMarryCnf 获取学历]
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  [type]          [description]
	 */
	public static function getEducationCnf($id = 0,$all = false){
		$arr = [
			'1'=>'本科',
			'2'=>'大专',
			'3'=>'高中'
		];
		if($all){
			return $arr;
		}
		return isset($arr[$id])?$arr[$id]:'未知';
	}
	/**
	 * [authStatus 获取审核状态]
	 * @return [type]          [description]
	 */
	public static function authStatus($sta = ''){
		switch ($sta) {
			case '0':
				$ret = 'wait';//待审核
				break;
			case '1':
				$ret = 'pass';//通过
				break;
			case '2':
				$ret = 'deny';//拒绝
				break;
			case '3':
				$ret = 'reject';//驳回
				break;		
			default:
				$ret = 'miss';//未提交
		}
		return $ret;
	}
	/**
	 * [getMarryCnf 获取学历]
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  [type]          [description]
	 */
	public static function getNoticeObj($id = 0,$all = false){
		$arr = [
			'0'=>'全部',
			'1'=>'门店',
			'2'=>'技师'
		];
		if($all){
			return $arr;
		}
		return isset($arr[$id])?$arr[$id]:'未知';
	}
	/**
	 * [getOrderSta 获取订单状态]
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  [type]          [description]
	 */
	public static function getOrderSta($id = 0,$all = false){
		$arr = [
			'all'=>'全部',
			'0'=>'待付款',
			'1'=>'待接单',
			'2'=>'待施工',
			'3'=>'待确认',
			'4'=>'待评论',
			'5'=>'已完成',
			'6'=>'异常订单',
			'7'=>'已取消',
		];
		if($all){
			return $arr;
		}
		return isset($arr[$id])?$arr[$id]:'未知';
	}

	/**
	 * 获取订单类型
	 **/
	public static function getOrderType($thought = 0) {
		$ret = [];
		switch ($thought) {
		case '0':
			$ret = ['1' => '实时订单', '2' => '预约订单'];
			break;
		default:
			$ret = [
				['id' => 1, 'name' => '实时订单'],
				['id' => 2, 'name' => '预约订单'],
			];
		}
		return $ret;
	}
	//获取订单类型名称
	public static function getOrderTypeNameApp($key = 0) {
		$ret = ['1' => '实时单', '2' => '预约单'];
		return isset($ret[$key])?$ret[$key]:'--';
	}
	/**
	 * 获取订单类型名称
	 **/
	public static function getOrderTypeName($str = ''){
		if(empty($str)) return '';
		$name = '';
		$arr  = explode(",",$str);
		if(is_array($arr)){
			$orderType = self::getOrderType(0);
			foreach ($arr as $value) {
				if(isset($orderType[$value])){
					$name .= $orderType[$value].' ';
				}
			}
		}
		return !empty($name)?trim($name):'';
	}
	/*
	 *获取状态名称
	 */
	public static function getStatusByKey($key = ''){
		$arr = [
			'allow'=>'启用',
			'deny'=>'禁用'
		];
		return isset($arr[$key])?$arr[$key]:'--';
	}
	/*
	 *获取提现状态
	 */
	public static function getCashStatusByKey($key = '',$all = false){
		$arr = [
			'all'=>'全部',
			'0'=>'处理中',
			'1'=>'提现成功',
			'2'=>'提现失败',
		];
		if($all){
			return $arr;
		}
		return isset($arr[$key])?$arr[$key]:'--';
	}
	/**
	 * //0支付中  1支付成功 2支付失败,3退费成功 
	 * @param $id
	 * @return mixed|string
	 */
	public static function getPayLogLabel($id,$all = false) {
		$id = strval($id);
		$array = [
			'all'=>'全部',
			'0' => '未支付',
			'1' => '支付成功',
			'2' => '支付失败',
			'3' => '退费成功',
		];
		if($all){
			return $array;
		}
		return isset($array[$id]) ? $array[$id] : '未知';
	}

	/*
	 *返回包工包料
	 */
	public static function getAttrByKey($key = ''){
		$arr = [
			'1'=>'包工不包料',
			'2'=>'包工包料'
		];
		return isset($arr[$key])?$arr[$key]:'--';
	}
	/*
	 *返回审核状态
	 */
	public static function getVerifyStatusName($key = ''){
		$arr = [
			'0'=>'待审核',
			'1'=>'已审核',
			'2'=>'审核失败',
		];
		return isset($arr[$key])?$arr[$key]:'--';
	}
	/*
	 *显示支付状态
	 */
	public static function getPayType($key = '',$all = false){
		$arr = [
			'1'=>'单店支付',
			'2'=>'公司支付',
			'3'=>'共享支付',
		];
		if($all){
			return $arr;
		}
		return isset($arr[$key])?$arr[$key]:'--';
	}
	/*
	 *返回审核状态
	 */
	public static function getWorkNatureName($key = ''){
		$arr = [
			'1'=>'全职',
			'2'=>'兼职'
		];
		return isset($arr[$key])?$arr[$key]:'--';
	}
	/**
	 * [getTechPrice 获取技师金额]
	 * @return [type]          [description]
	 */
	public static function getTechPrice($price = 0){
		return round($price*0.9,2);
	}
	/*
	*获取制定类型
	 */
	public static function elements($items, array $array, $default = NULL) {
        $return = array();
        is_array($items) OR $items = array($items);
        foreach ($items as $item) {
            $return[$item] = array_key_exists($item, $array) ? $array[$item] : $default;
        }
        return $return;
    }
	/**
	 * 随机生成$number位字符
	 * */
	public static function genSalt($number = 6) {
		$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
		$mask = substr(str_shuffle(str_repeat($chars, 5)), 0, $number);
		return $mask;
	}
	//获取车型配置名称
	public static function getCarModelName($id) {
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select car_model from {{%sys_carmodel_set}} where id=:id');
		$command->bindValue(':id', $id);
		$result = $command->queryOne();
		return isset($result['car_model'])?$result['car_model']:'--';
	}
	//通过operator_id 获取用户名
	public static function getOperatorName($operator_id) {
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select username from {{%operator}} where operator_id=:id');
		$command->bindValue(':id', $operator_id);
		$result = $command->queryOne();
		return isset($result['username'])?$result['username']:'--';
	}
	//通过user_id 获取用户名
	public static function getUsernameById($user_id = 0) {
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select username from {{%users}} where user_id=:id');
		$command->bindValue(':id', $user_id);
		$result = $command->queryOne();
		return isset($result['username'])?$result['username']:'--';
	}
	/*
	 *通过用户ID获取用户省市区
	 */
	public static function getAreaByUid($user_id = 0){
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select prov_id,city_id,area_id from {{%users}} where user_id=:id');
		$command->bindValue(':id', $user_id);
		$result = $command->queryOne();
		return $result;
	}
	/**
	 * 获取地区名
	 * */
	public static function getRegion($id) {
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select name from {{%region}} where id=:id');
		$command->bindValue(':id', $id);
		$result = $command->queryOne();
		return isset($result['name'])?$result['name']:'--';
	}
	public static function getShopCreditPay($id = 0){
		if(empty($id)) return '-';
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select amount,day,total from {{%sys_pay_set}} where id=:id');
		$command->bindValue(':id', $id);
		$result = $command->queryOne();
		if(!empty($result)){
			return $result['day'].'天/'.$result['total'].'单/'.$result['amount'].'元';
		}else{
			return '-';
		}
	}
	/**
	 * 获取技师业务授权等级名称
	 * */
	public static function getTechLevel($level_id = 0) {
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select tech_level from {{%sys_tech_level_set}} where id=:id');
		$command->bindValue(':id', $level_id);
		$result = $command->queryOne();
		return isset($result['tech_level'])?$result['tech_level']:'--';
	}
	//通过ID获取用户姓名和电话
	public static function getUsersBase($user_id = 0) {
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select realname,mobile from {{%users}} where user_id=:id');
		$command->bindValue(':id', $user_id);
		$result = $command->queryOne();
		return !empty($result)?$result:[];
	}
	//获取账户币数量数量
	public static function getGoldSum($user_id = 0){
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select total_gold from {{%account}} where user_id=:id');
		$command->bindValue(':id', $user_id);
		$result = $command->queryOne();
		return isset($result['total_gold'])?$result['total_gold']:'0';
	}
	
	//获取门店名称
	public static function getShopName($user_id = 0){
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select name from {{%users_shop_info}} where user_id=:id');
		$command->bindValue(':id', $user_id);
		$result = $command->queryOne();
		return isset($result['name'])?$result['name']:'';
	}
	/*通过ID 或IDS 获取业务名称*/
	public static function getProNameById($ids = ''){
		if(empty($ids)) return '';
		$in_ids = explode(',', $ids);
		$ret = [];
		if(isset($in_ids) && is_array($in_ids)){
			$SysProductSet = new SysProductSetModel();
			$res = $SysProductSet->getWidgetRows(['cols'=>['name'],'in'=>['id'=>$in_ids]]);
			$ret = array_column($res, 'name');
		}
		return !empty($ret)?implode(' ',$ret):'';
	}
	/*通过ID 或IDS 获取商户性质名称*/
	public static function getMerchNameById($ids = ''){
		if(empty($ids)) return '';
		$in_ids = explode(',', $ids);
		$ret = [];
		if(isset($in_ids) && is_array($in_ids)){
			$MerchType = new MerchTypeModel();
			$res = $MerchType->getWidgetRows(['cols'=>['name'],'in'=>['id'=>$in_ids]]);
			$ret = array_column($res, 'name');
		}
		return !empty($ret)?implode(' ',$ret):'';
	}
	/*通过ID 或IDS 获取产品名称*/
	public static function getProExtraNameById($ids = '',$count=false){
		if(empty($ids)) return '';
		$in_ids = explode(',', $ids);
		$total =count($in_ids);
		$ret = [];
		if(isset($in_ids) && is_array($in_ids)){
			$SysBasePriceSet = new SysBasePriceSetModel();
			$res = $SysBasePriceSet->getWidgetRows(['cols'=>['name'],'in'=>['id'=>$in_ids]]);
			$ret = array_column($res, 'name');
		}
		if($count){
			return ['show_name'=>$ret,'total'=>$total];
		}else{
			return !empty($ret)?implode(' ',$ret):'';
		}
	}
	/*通过	aliasname 获取name*/
	public static function getNameByAliasname($aliasname=''){
		$arr = [
			'dispatch_set'=>'调度维护',
			'withdraw_rule_set'=>'提现规则',
			'kefu_contact_set'=>'客服联系方式',
			'insurance_set'=>'保险设置',
			'tech_gruel_set'=>'技师处罚维护',
			'cancel_order_rule_set'=>'门店取消订单规则',
			'tech_star_rule_set'=>'技师星级维度',
			'evaluate_rule_set'=>'评价维护',
		];
		return isset($arr[$aliasname])?$arr[$aliasname]:'未知';
	}
	//返回门店角色配置
	public static function getShopPurview($pkey = '',$all = false){
		$arr = [
			'account'=>'账号管理',
			'role'=>'角色管理',
			'order'=>'订单管理',
			'pay'=>'支付权限',
			'bill'=>'开票管理',
			'contact'=>'是否指定技师联系人'
		];
		if($all){
			return $arr;
		}
		$p = explode(',', $pkey);
		$ret = self::elements($p,$arr,'');
		return $ret;
		//return isset($arr[$id])?$arr[$id]:'未知';
	}
	//通过角色ＩＤ获取角色名称
	public static function getSpRoleName($role_id = 0){
		$conn = Yii::$app->db;
		$command = $conn->createCommand('select role_name from {{%shop_role}} where id=:id');
		$command->bindValue(':id', $role_id);
		$result = $command->queryOne();
		return isset($result['role_name'])?$result['role_name']:'';
	}
	//获取用户所关联账号
	public static function getUserAsso($user_id = 0){

	}
	//自动生成门店/技师编码
	public static function autoCtUserCode($user_id = 0,$type = '0'){
		$ret = '';
		switch ($type) {
			case '0':
				$ret = 'Tech'.date("Ymd",time()).$user_id;
				break;
			case '1':
				$ret = 'Shopj'.date("Ymd",time()).$user_id;
				break;
			case '2':
				$ret = 'Shopm'.date("Ymd",time()).$user_id;
				break;
			case '3':
				$ret = 'Shopy'.date("Ymd",time()).$user_id;
				break;
			default:
				$ret = 'Nf'.date("Ymd",time()).$user_id;
		}
		return $ret;
	}


	//验证身份证有效性
	public static function validation_filter_id_card($id_card) {
		if (strlen($id_card) == 18) {
			return self::idcard_checksum18($id_card);
		} elseif ((strlen($id_card) == 15)) {
			$id_card = self::idcard_15to18($id_card);
			return self::idcard_checksum18($id_card);
		} else {
			return false;
		}
	}

	// 计算身份证校验码，根据国家标准GB 11643-1999
	public static function idcard_verify_number($idcard_base) {
		if (strlen($idcard_base) != 17) {
			return false;
		}
		//加权因子
		$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
		//校验码对应值
		$verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
		$checksum = 0;
		for ($i = 0; $i < strlen($idcard_base); $i++) {
			$checksum += substr($idcard_base, $i, 1) * $factor[$i];
		}
		$mod = $checksum % 11;
		$verify_number = $verify_number_list[$mod];
		return $verify_number;
	}

	// 18位身份证校验码有效性检查
	public static function idcard_checksum18($idcard) {
		if (strlen($idcard) != 18) {
			return false;
		}
		$idcard_base = substr($idcard, 0, 17);
		if (self::idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * 根据经纬度和半径计算出范围
	 * @param string $lat 纬度
	 * @param String $lng 经度
	 * @param float $radius 半径
	 * @return Array 范围数组
	 */
	public static function calcScope($lng, $lat, $radius) {
		$pi = pi();
		$degree = (24901 * 1609) / 360.0;
		$dpmLat = 1 / $degree;

		$radiusLat = $dpmLat * $radius;
		$minLat = $lat - $radiusLat; // 最小纬度
		$maxLat = $lat + $radiusLat; // 最大纬度

		$mpdLng = $degree * cos($lat * ($pi / 180));
		$dpmLng = 1 / $mpdLng;
		$radiusLng = $dpmLng * $radius;
		$minLng = $lng - $radiusLng; // 最小经度
		$maxLng = $lng + $radiusLng; // 最大经度

		/** 返回范围数组 */
		$scope = array(
			'minLat' => $minLat,
			'maxLat' => $maxLat,
			'minLng' => $minLng,
			'maxLng' => $maxLng,
		);
		return $scope;
	}

	public static function getAround($lat, $lon, $raidus) {
		$PI = 3.14159265;
		// 圆周率
		$EARTH_RADIUS = 6378137; // 地球半径
		$RAD = pi() / 180.0; // 弧度
		$latitude = $lat;
		$longitude = $lon;
		$degree = (24901 * 1609) / 360.0;
		$raidusMile = $raidus;
		$dpmLat = 1 / $degree;
		$radiusLat = $dpmLat * $raidusMile;
		$minLat = $latitude - $radiusLat;
		$maxLat = $latitude + $radiusLat;
		$mpdLng = $degree * cos($latitude * ($PI / 180));
		$dpmLng = 1 / $mpdLng;
		$radiusLng = $dpmLng * $raidusMile;
		$minLng = $longitude - $radiusLng;
		$maxLng = $longitude + $radiusLng;
		$result['minwei'] = $minLat;
		$result['minjing'] = $minLng;
		$result['maxwei'] = $maxLat;
		$result['maxjing'] = $maxLng;
		return $result;
	}

	/**
	 * 获取两个经纬度之间的距离
	 * @param  string $lat1 经一
	 * @param  String $lng1 纬一
	 * @param  String $lat2 经二
	 * @param  String $lng2 纬二
	 * @return float  返回两点之间的距离
	 */
	public static function calcDistance($lat1, $lng1, $lat2, $lng2) {
		/** 转换数据类型为 double */
		$lat1 = doubleval($lat1);
		$lng1 = doubleval($lng1);
		$lat2 = doubleval($lat2);
		$lng2 = doubleval($lng2);
		/** 以下算法是 Google 出来的，与大多数经纬度计算工具结果一致 */
		$theta = $lng1 - $lng2;
		$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
		$dist = acos($dist);
		$dist = rad2deg($dist);
		$miles = $dist * 60 * 1.1515;
		return ($miles * 1.609344);
	}

	//根据id返回城市首字母大写
	public static function GetAreaAliasById($city_id) {
		if (empty($city_id)) {
			return false;
		}
		$conn = Yii::$app->db;
		$sql = "select alias from {{%region}} where id=:id";
		$cmd = $conn->createCommand($sql);
		$cmd->bindValue(':id', $city_id);
		$city_result = $cmd->queryScalar();
		return $city_result;
	}


	/**
	 * 获取不重复的订单号
	 * @return string
	 */
	public static function GenOrderNid() {
		return date('YmdHis') . substr(implode(null, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8) . mt_rand(10000, 99999);
	}

	

	/**
	 *  获取不重复的提现订单号
	 */
	public static function GenCashOrderNid() {
		return date('ymd') . substr(implode(null, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
	}
	/**
	 * [orderStatusByJh 订单状态转换]
	 */
	public static function orderStatusByJh($pay)
    {
        $arr = ['S' => '1', 'F' => '2', 'P' => '3', 'V' => '4'];
        return isset($arr[$pay]) ? $arr[$pay] : '2';
    }

	public static function plateCheck($plate) {
		$plate_array = array('京', '津', '冀', '晋', '蒙', '辽', '吉', '黑', '沪', '苏', '浙', '皖', '闽', '赣', '鲁', '豫',
			'鄂', '湘', '粤', '桂', '琼', '渝', '川', '贵', '云', '藏', '陕', '甘', '青', '宁', '新');
		if (!in_array($plate, $plate_array, true)) {
			return false;
		} else {
			return true;
		}
	}
	/**
	 * 获取用户的ip
	 * @return null
	 */
	public static function getUserIp() {
		if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
			$ip = ($_SERVER['HTTP_X_FORWARDED_FOR']);
		} else {
			$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
		}
		if (!empty($ip) && strpos($ip, ',')) {
			$arr = explode(",", $ip);
			$ip = isset($arr[0]) ? trim($arr[0]) : $ip;
		}
		return $ip;
	}
	

	/**
	 * 获取指定图片id的url
	 * @param $id
	 * @param $peer
	 * @return string
	 * @throws \yii\db\Exception
	 */
	public static function getImageUrl($id, $peer = false) {
		$conn = Yii::$app->db;
		$sql = "select `path` from {{%upload_file}} where id=:id";
		$cmd = $conn->createCommand($sql);
		$cmd->bindValue(':id', $id);
		$rec = $cmd->queryOne();
		$conn->close();
		if (empty($rec)) {
			return "";
		} else {
			return Yii::$app->params['imgurl'] . $rec['path'];
		}
	}


	/**
	 * @param $str
	 * @return bool
	 */
	public static function is_base64($str) {
		if ($str == 'test' or $str == '13165156' or $str == 'adds') {
			return false;
		}
		if ($str == base64_encode(base64_decode($str))) {
			return true;
		} else {
			return false;
		}
	}

	
	/**
	 * //1 微信  2 支付宝C扫B扫码支付 3 余额支付 4微信公众号支付
	 * @param $id
	 * @return mixed|string
	 */
	public static function getPayTypeLabel($id) {
		$array = [
			'1' => '微信',
			'2' => '支付宝C扫B扫码支付',
			'3' => '余额支付',
			'4' => '微信公众号支付',
			'6' => '支付宝支付',
		];
		return isset($array[$id]) ? $array[$id] : '数据';
	}

	/**
	 * 删除缓存
	 * @param $key string|array
	 */
	public static function clearRedisCache($key) {
		$redis = Yii::$app->redis;
		if ($key and is_string($key)) {
			$redis->del($key);
		}
		//数组全部删除
		if (is_array($key)) {
			foreach ($key as $val) {
				$redis->del($val);
			}
		}
	}

	/*获取随机字符*/
	public static  function random_string(string $type = 'alnum', int $len = 8): string
    {
        switch ($type)
        {
            case 'alnum':
            case 'numeric':
            case 'nozero':
            case 'alpha':
            case 'alnumb':
                switch ($type)
                {
                    case 'alpha':
                        $pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
                        break;
                    case 'alnum':
                        $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
                        break;
                    case 'alnumb':
                        $pool = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
                        break;    
                    case 'numeric':
                        $pool = '0123456789';
                        break;
                    case 'nozero':
                        $pool = '123456789';
                        break;
                }

                return substr(str_shuffle(str_repeat($pool, ceil($len / strlen($pool)))), 0, $len);
            case 'md5':
                return md5(uniqid(mt_rand(), true));
            case 'sha1':
                return sha1(uniqid(mt_rand(), true));
            case 'crypto':
                return bin2hex(random_bytes($len / 2));
        }
        // 'basic' type treated as default
        return (string) mt_rand();
    }


	/**
	 * 中文截取
	 *
	 * @param $str string 中文字符串
	 * @param $start int 起始位置
	 * @param $len int 长度
	 * @param string $symbol 符号
	 * @param string $encode 字符集
	 * @return string
	 */
	public static function getChineseStr($str, $start, $len, $symbol = '...', $encode = 'UTF-8') {
		if (mb_strlen($str, $encode) <= $len) {
			return $str;
		}

		$returnStr = mb_substr($str, $start, $len, $encode) . $symbol;

		return $returnStr;
	}

	//通过身份证获取个人信息
	public static function getInfoByIdCard($idCard) {

		$year = date('Y');

		$date_year = substr($idCard, 6, 4);

		$age = $year - $date_year;

		$sex = substr($idCard, -2, 1);

		$_sex = ($sex % 2 == 0) ? '女' : '男';

		return ['sex' => $_sex, 'age' => $age];
	}

	/**
	 *  资金记录订单号（18位）
	 */
	public static function GenOderRandom() {
		return date('mdHis') . uniqid() . rand(10000, 99999);
	}

	/**
     * 保存支付记录缓存，10s
     *
     */
    public static function setPayLog($requst, $result)
    {
        $redis = Yii::$app->redis;
        $key = self::buildPayLogKey($requst);
        $redis->set($key, json_encode($result), "ex", 10);
    }

    /**
     * 获取支付记录缓存
     */
    public static function getPayLog($requst)
    {
        $redis = Yii::$app->redis;
        $key = self::buildPayLogKey($requst);
        return json_decode($redis->get($key), true);
    }

    /**
     * 删除 支付记录缓存
     */
    public static function delPayLog($requst)
    {
        $redis = Yii::$app->redis;
        $key = self::buildPayLogKey($requst);
        $redis->del($key);
    }

    //支付记录缓存键
    private static function buildPayLogKey($requst)
    {
        $key = "pay_log:uid:" . $requst['user_id'] . ":_for_" . $requst['order_type'] . "_type_" . $requst['pay_way'].'_order_id_'.$requst['order_id'].'_pay_money_'.$requst['pay_money'];
        return $key;
    }
    //订单对应资金记录备注 //订阅和违章分开
    public static function payToAccountRemark($pay)
    {
        $arr = [
            '1' => '车辆需求订单购买',
            '2' => '精誉币购买',
            '3' => '支付违约金',
           
        ];
        return $arr[$pay];
    }
    /**
     * 根据经纬度获取身份名和城市名
     * @param $lng
     * @param $lat
     * @return array|bool
     */
    public static function getAddress($lng, $lat)
    {
        if (!is_numeric($lng) || !is_numeric($lat)) {
            return false;
        }

        $map = new Baidu();

        $addrerss = $map->renderReverse($lat, $lng);
        if ($addrerss['status'] == 0) {
            if (isset($addrerss['result']['addressComponent']['province']) &&
                isset($addrerss['result']['addressComponent']['city'])
            ) {
                $province = $addrerss['result']['addressComponent']['province'];
                $city = $addrerss['result']['addressComponent']['city'];
                $district = isset($addrerss['result']['addressComponent']['district'])?$addrerss['result']['addressComponent']['district']:'';
                return array('province' => $province, 'city' => $city,'district'=>$district);
            }
        }
        return false;
    }
    //根据省份城市返回省份id,城市id--配合百度经纬度转换来的数据提交转换
	public static function GetProvinceCityByName($province, $city,$district = '') {
		$out_array = array('北京市', '天津市', '上海市', '重庆市', '香港特别行政区', '澳门特别行政区');

		$conn = Yii::$app->db;
		$sql = "select id as prov_id,code from {{%region}} where name=:name and class=1";
		$cmd = $conn->createCommand($sql);
		$cmd->bindValue(':name', $province);
		$prov_result = $cmd->queryOne();
		$parent_code = $prov_result['code'];
		$prov_id = $prov_result['prov_id'];

		if (in_array($province, $out_array)) {
			$city_id = $prov_id;
		} else {
			$sql = "select id as city_id,code from {{%region}} where parent_code=:parent_code and name=:name";
			$cmd = $conn->createCommand($sql);
			$cmd->bindValue(':parent_code', $parent_code);
			$cmd->bindValue(':name', $city);

			$city_result = $cmd->queryone();

			$city_id = $city_result['city_id'];
			$city_code = $city_result['code'];
			if(!empty($district)){
				$sql = "select id as district_id from {{%region}} where parent_code=:parent_code and name=:name";
				$cmd = $conn->createCommand($sql);
				$cmd->bindValue(':parent_code', $city_code);
				$cmd->bindValue(':name', $district);
				$district_result = $cmd->queryone();
				$district_id = $district_result['district_id'];
			}
		}

		return array('prov_id' => $prov_id, 'city_id' => $city_id ,'district_id'=>isset($district_id)?$district_id:0);
	}
	/**
	 * @name   部分隐藏
	 * @desc   接口描述
	 * @author john.chuan
	 * @param  [type]          $type [description]
	 * @param  string          $str  [description]
	 * @return [type]                [description]
	 */
	public static function partHide($type, $str = '') {
		if (empty($str)) {
			return '';
		}
		$ret = '';
		switch ($type) {
		case 'vin':
			$ret = substr_replace($str, '******', 9, -2);
			break;
		case 'realname':
			$strlen = mb_strlen($str, 'utf-8');
			$firstStr = mb_substr($str, -1, 1, 'utf-8');
			$ret = str_repeat("*", $strlen - 1) . $firstStr;
			break;
		case 'idcard':
			$ret = substr_replace($str, '**********', 4, -4);
			break;
		case 'mobile':
			$ret = substr_replace($str, '****', 3, -4);
			break;
		default:
			$ret = NULL;
		}
		return $ret;
	}
	 public static function getOrderReNid()
    {
        return date('ymdHis') . uniqid() . rand(10000, 99999);
    }
	 /**
     *    获取不重复的查询订单号
     */

    public static function getOrderNid($strPre = '', $intLen = 32)
    {
        $str = $strPre . date('YmdHis');
        $leftCnt = $intLen - strlen($str) - 4;

        if ($leftCnt > 0) {
            $uniq = uniqid();
            $str .= substr(str_shuffle(str_repeat($uniq, 5)), 0, $leftCnt);
        }
        $str .= str_pad(mt_rand(0, 999), 3, '0', STR_PAD_LEFT);
        $str .= self::genSignChar($str);
        return $str;
    }
    /**
     * 获得校验位的值
     * 每一位 * 对应的 索引，相加， 除以16，取余数
     */
    private static function genSignChar($str)
    {
        $a = 0;
        $arr = str_split($str);
        foreach ($arr as $k => $v) {
            $a += ord($v) * $k + 1;
        }

        $ind = $a % 16;
        return dechex($ind);
    }
    public static  function getShopUserId($name = ''){
        $conn = Yii::$app->db;
        $command = $conn->createCommand('select user_id from {{%users_shop_info}} where name=:name');
        $command->bindValue(':name', $name);
        $result = $command->queryAll();
        return !empty($result)?array_column($result, 'user_id'):[];
    }
}
