<?php
class zpAction extends baseAction
{
	function test()
	{
		$YpcZp = new YpcZp();
		$res = $YpcZp->catchVin('HACRA0B35S1S00841', '13535309690');
		var_dump($res);
		exit;
		$zpurl = 'https://app.zhipeicloud.com/api/Common/SearchCJMLBrand';
		$LibHttp = new LibHttp();
		$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
		$dir = mvc::$cfg['PATH_CACHE'].'zpbrand/';
		@mkdir($dir);
		$brandArr = [];
		for ($i=0; $i<strlen($chars); $i++)
		{
			$char = substr($chars, $i, 1);
			for($page = 1; $page < 1000; $page++)
			{
				$file = $dir.$char.'_'.$page.'.txt';
				if(!file_exists($file))
				{
					$headstr = 'Header%5BSourceType%5D=1&Header%5BUserTicket%5D=E60007D253D3AA7A5692B2C0D7A915D18AA1D7D6B8354ED9559B41B641B2FBD8E1C0B676C62E08C1747922345A9474C317F3E7A92456F60CFAE7BF8CA2D272D0&Header%5BAgentTicket%5D=&Header%5Bopenid%5D=&Header%5BSignCode%5D=789649779a49df79sad7fa9sd87&Header%5BmachineKey%5D=634f64e4c038451eb715105830a444c8%401654842311&Header%5BtimeStamp%5D='.time().'&Header%5Bversion%5D=3.32&Body%5BfilterType%5D%5B%5D=4&Body%5BcategoryGroupId%5D=0&Body%5BcategoryId%5D=&Body%5Balphabet%5D='.$char.'&Body%5BkeyWord%5D=&Body%5BpageIndex%5D='.$page;
					$LibHttp->httpheader = [
						'Host: app.zhipeicloud.com',
						'Accept: application/json, text/javascript, */*; q=0.01',
						'Origin: https://app.zhipeicloud.com',
						'X-Requested-With: XMLHttpRequest',
						'User-Agent: {"httpagent":"Dalvik\/2.1.0 (Linux; U; Android 5.1.1; MI 9 Build\/LMY47I)","sourceType":"2"}',
						'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
						'Referer: https://app.zhipeicloud.com/brandChoice.html',
						'Accept-Encoding: gzip, deflate',
						'Accept-Language: zh-CN,en-US;q=0.8',
						'Cookie: Hm_lvt_91d4cc10b43028d6b52d39ec5469e12a=1654842345; Hm_lpvt_91d4cc10b43028d6b52d39ec5469e12a=1654843556',
						'Content-Length:'.strlen($headstr)
					];
					$html = $LibHttp->fetch($zpurl, $headstr);
					file_put_contents($file, $html);
					sleep(1);
				}
				else
				{
					$html = file_get_contents($file);
				}
				
				$resArr = json_decode($html, true);
				//{"Alert":null,"H5_Notice":{"ModalType":0},"Header":{"ErrorCode":0,"Message":"执行成功"},"Body":{"searchList":[],"HotBrandList":[]}}
				if(is_array($resArr['Body']['searchList']))
				{
					if(empty($resArr['Body']['searchList'])) break;
					foreach($resArr['Body']['searchList'] as $bv)
					{
						$brandArr[$bv['brandId']] = $bv;
					}
				}
				else
				{
					var_dump($html);
					exit;
				}
			}
		}
		echo '<!DOCTYPE html>
		<html>
		<head>
			<meta charset="utf-8"/>
			<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
			<title>列表</title>
				<meta name="keywords" content=""/>
			<meta name="description" content=""/>
			<link rel="stylesheet" type="text/css" href="https://www.paojd.cn/static/bootstrap-3.3.7-dist/css/bootstrap.min.css?ver=1.0.0"/></head>
	<body><table class="table table-bordered">';
		foreach($brandArr as $bv)
		{
			echo '<tr><td>'.$bv['brandName'].'</td><td><img src="'.$bv['brandLogo'].'" style="height:100px;"></td></tr>';
		
		}
		echo '</table></body></html>';
		var_dump($brandArr);
	}



	//采集智配的样例VIN
	public function catchVin()
	{
		if(date('H') < 9 || date('H') >= 18) exit('非工作时间');
		$Params = mvc::$URL_PARAMS;
		$account = $Params['account'];
		if(!LibFc::hasFunLock(mvc::$URL_METHOD.$account, 3600)) return true;

		$count = !empty($Params['count'])? (int) $Params['count'] : 25;
		$YPCAR67Db = new BaseDb(mvc::$cfg['DB']['YPCAR67']);
		$YpcZp = new YpcZp();
		$sql = 'INSERT INTO zp_vin_model(zvm_vin) SELECT DISTINCT m3_vin_demo FROM yp_model3 WHERE m3_vin_demo NOT IN (SELECT zvm_vin FROM zp_vin_model) AND LENGTH(m3_vin_demo) = 17';
		$YPCAR67Db->query($sql);
		//全部30天更新一次， 非乘用车15天  解析失败2天
		$whereArr = [
			" and zvm_catch_status = 0",
			sprintf(" and zvm_catch_etime < %d and zvm_model like '%%VIN解析失败%%' and zvm_catch_count < 20", strtotime('-2days')),
			/*sprintf(" and zvm_catch_etime < %d and zvm_model like '%%参考车型%%' and zvm_catch_count < 20", strtotime('-15days')),
			sprintf(" and zvm_catch_etime < %d", strtotime('-30days'))*/
		];
		foreach($whereArr as $where)
		{
			while($count > 0)
			{
				$nvres = $YPCAR67Db->get('zp_vin_model', ['zvm_vin'], $where.' order by rand() limit 1', true);
				if(empty($nvres['data'])) break;
				$count--;
				$vin = $nvres['data']['zvm_vin'];
				$YpcZp->catchVin($vin, $account);
				sleep(rand(10, 100));
			}
		}
		LibFc::delFunLock(mvc::$URL_METHOD.$account);
		echo 'ok';
	}


	public function formatInfo()
	{
		set_time_limit(0);
		if(!LibFc::hasFunLock(mvc::$URL_METHOD, 1000)) return true;
		$YpcZp = new YpcZp;
		$YpcZp->formatInfo(" and zvm_status = -2");
		LibFc::delFunLock(mvc::$URL_METHOD);
		echo 'ok';
	}

	
	//
	public function catchItems()
	{
		if(date('H') < 7 || date('H') >= 20) exit('非工作时间');
		$Params = mvc::$URL_PARAMS;
		$account = $Params['account'];
		if(!LibFc::hasFunLock(mvc::$URL_METHOD.$account, 600)) return true;
		if(!empty($account) && empty(mvc::$cfg['ZHIPEI'][$account])) 
			return LibFc::ReturnData(false, $account.'账号不存在');
		if(empty($account)) $account = array_keys(mvc::$cfg['ZHIPEI'])[0];
		$accountCfg = mvc::$cfg['ZHIPEI'][$account];

		$dir = mvc::$cfg['ROOT'].'files/zp/';
		$count = !empty($Params['count'])? (int) $Params['count'] : 25;
		$YPCAR67Db = new BaseDb(mvc::$cfg['DB']['YPCAR67']);
		$LibHttp = new LibHttp();
		$LibHttp->timeout = 10;
		$whereArr = [
			" and zci_status = 0",
			sprintf(" and zci_status = 1 and zci_etime < %d", strtotime('-1days'))
		];
		foreach($whereArr as $where)
		{
			$where .= ' order by rand() limit 1';
			//$where = ' and zci_id = 1';
			while($count > 0)
			{
				$nvres = $YPCAR67Db->get('zp_catch_item', ['*'], $where, true);
				if(empty($nvres['data'])) continue;
				$nvres = $nvres['data'];
				$vin = $nvres['zci_vin'];
				$count--;
				$tdir = $dir.$vin.'/';
				@mkdir($tdir);
				$file = $tdir.$nvres['zci_id'].'.txt';
				if(!file_exists($file))
				{
					$zpurl = 'https://vvip.zhipeicloud.com/api/SearchAuto/SearchAutoV2';
					$headstr = '{"Header":{"AgentTicket":"","SourceType":1,"UserTicket":"'.$accountCfg['UserTicket'].'","SignCode":"'.$accountCfg['SignCode'].'","machineKey":"","timeStamp":"'.time().'","version":6},"Body":{"vinCode":"'.$vin.'"}}';
					$LibHttp->httpheader = [
						'Content-Type:application/json',
						'Content-Length:'.strlen($headstr)
					];
					$html = $LibHttp->fetch($zpurl, $headstr);
					if(stripos($html, '已过期') !== false){
						echo $html; exit;
					}else if(stripos($html, 'Header') === false || stripos($html, '验证码')){
						echo $html; exit;
					}
					file_put_contents($file, $html);
				}
				else
				{
					$html = file_get_contents($file);
				}
				$YPCAR67Db->set('zp_catch_item', ['zci_status'=>1, 'zci_html'=>$html, 'zci_etime'=>time()], sprintf(" and zci_id=%d", $nvres['zci_id']));
				$resArr = json_decode($html, true);
				$bodyArr = $resArr['Body'];

				if(!empty($bodyArr['validCategorys']))
				{
					$catArr = [];
					foreach($bodyArr['validCategorys'] as $tv)
					{
						$pcatid = $tv['categoryGroupId'];
						$catids = array_column($tv['categroys'], 'categoryId');
						$res = $YPCAR67Db->get('zp_catch_item_list', ['zcil_id'], sprintf(" and zcil_zci_id=%d and zcil_pcatid=%d", $nvres['zci_id'], $pcatid));
						if(!empty($res['data'])) continue;
						
						$file =  $tdir.$nvres['zci_id'].'_cate_'.$pcatid.'.txt';
						$headstr = '{"Header":{"AgentTicket":"","SourceType":1,"UserTicket":"'.$accountCfg['UserTicket'].'","SignCode":"'.$accountCfg['SignCode'].'","machineKey":"","timeStamp":"'.time().'","version":6},"Body":{"categoryGroupId":'.$pcatid.',"vinCode":"'.$vin.'","categoryIds":['.implode(',', $catids).']}}';
						if(!file_exists($file))
						{
							$zpurl = 'https://vvip.zhipeicloud.com/api/SearchAuto/GetCjmlAutoValidPartAndParam';
							$LibHttp->httpheader = [
								'Content-Type:application/json',
								'Content-Length:'.strlen($headstr)
							];
							$html = $LibHttp->fetch($zpurl, $headstr);
							if(stripos($html, '已过期') !== false){
								echo $html; exit;
							}else if(stripos($html, 'Header') === false || stripos($html, '验证码')){
								echo $html; exit;
							}
							file_put_contents($file, $html);
						}
						else
						{
							$html = file_get_contents($file);
						}
						$YPCAR67Db->add('zp_catch_item_list', ['zcil_pcatid'=>$pcatid, 'zcil_params'=>$headstr, 'zcil_zci_id'=>$nvres['zci_id'], 'zcil_html'=>$html, 'zcil_atime'=>time()]);
					}
				}
				$YPCAR67Db->set('zp_catch_item', ['zci_status'=>2, 'zci_etime'=>time()], sprintf(" and zci_id=%d", $nvres['zci_id']));
				sleep(rand(20, 100));
			}
		}
		LibFc::delFunLock(mvc::$URL_METHOD.$account);
		echo 'ok';
	}
	
	//自动绑定
	public function autobind()
	{
		set_time_limit(0);
		//if(!LibFc::hasFunLock(mvc::$URL_METHOD, 1000)) return true;
		$YPCAR67Db = new BaseDb(mvc::$cfg['DB']['YPCAR67']);
		$table = 'zp_vin_model 
		join yp_model3 on m3_vin_demo = zvm_vin 
		join yp_model2 on m2_id = m3_m2_id
		join yp_model1 on m2_m1_id = m1_id';
		$chkres = $YPCAR67Db->get($table, ['*'], sprintf(" and zvm_status=0 and zvm_mod3_id > 0 order by zvm_id desc"));
		$okArr = [];
		foreach($chkres['data'] as $cv)
		{
			$err = [];
			//车代是否有对应
			if($cv['m2_name'] != trim($cv['zvm_mod2_name']))
			{
				$tjres = $YPCAR67Db->get('zp_vin_model join yp_model3 on m3_vin_demo = zvm_vin', ['zvm_mod2_id, count(*) total'], sprintf(" and m3_m2_id=%d", $cv['m3_m2_id']));
				$tjres = array_column($tjres['data'], 'total', 'zvm_mod2_id');
				if(!empty($tjres[$cv['zvm_mod2_id']]) && $tjres[$cv['zvm_mod2_id']] > 2 && ($tjres[$cv['zvm_mod2_id']] >= 4 || count($tjres) == 1))
				{}
				else
				{
					$err[] = 'mod2:'.$cv['m2_name'].'=>'.$cv['zvm_mod2_name'].'=>'.$tjres[$cv['zvm_mod2_id']];
				}
			}

			$cv['zvm_tran'] = strtr($cv['zvm_tran'], ['固定齿比'=>'电动车单速']);
			$cv['zvm_engine'] = trim(strtr($cv['zvm_engine'], ['/:'=>'/']));
			
			//发动机
			if(!empty($cv['m3_engine']) && (
				$cv['m3_engine'] == $cv['zvm_engine'] || 
				in_array($cv['m3_engine'], explode(',', $cv['zvm_engine'])) ||
				(
					strlen($cv['m3_engine']) >= 4 && (strlen($cv['m3_engine']) - strlen($cv['zvm_engine'])) === 1 && stripos($cv['m3_engine'], $cv['zvm_engine']) === 0
				) ||
				(
					strlen($cv['m3_engine']) >= 4 && stripos($cv['zvm_engine'], $cv['m3_engine']) === 0 && preg_match('/ \d+kw/', $cv['zvm_engine'], $match)
				) ||
				(
					strlen($cv['m3_engine']) >= 4 && strlen($cv['zvm_engine']) >= 3 && stripos($cv['m3_engine'], $cv['zvm_engine'].'-') === 0
				)
			 )
			){}else{
				//奔驰
				if(in_array($cv['m1_b_id'], [3, 102]) && preg_match('/\d{6}$/', LibFc::FormatNum($cv['m3_engine']), $tm1) && preg_match('/\d{6}/', LibFc::FormatNum($cv['zvm_engine']), $tm2))
				{
					if($tm1[0] != $tm2[0])
						$err[] = 'engine:'.$cv['m3_engine'].'=>'.$cv['zvm_engine'];
				}else{
					$err[] = 'engine:'.$cv['m3_engine'].'=>'.$cv['zvm_engine'];
				}
			}

			//排量
			if(
				(!empty($cv['m3_cc']) && in_array($cv['m3_cc'], explode(',', $cv['zvm_cc']))) || 
				(empty($cv['m3_cc']) && empty($cv['zvm_cc']))
			)
			{}
			else
			{
				$err[] = 'cc:'.$cv['m3_cc'].'=>'.$cv['zvm_cc'];
			}

			//功率
			if(!in_array($cv['m3_kw'], explode(',', $cv['zvm_kw'])))
			{
				$err[] = 'kw:'.$cv['m3_kw'].'=>'.$cv['zvm_kw'];
			}

			//驱动
			if($cv['m3_drive'] != $cv['zvm_drive'])
			{
				$err[] = 'drive:'.$cv['m3_drive'].'=>'.$cv['zvm_drive'];
			}

			//变速箱
			if($cv['m3_transmission'] == $cv['zvm_tran'] || stripos($cv['m3_transmission'], $cv['zvm_tran']) !== false)
			{//8CVT  CVT
				
			}
			else
			{
				$err[] = 'tran:'.$cv['m3_transmission'].'=>'.$cv['zvm_tran'];
			}
			if(empty($err))
			{
				$YPCAR67Db->set('zp_vin_model', ['zvm_status'=>2, 'zvm_status_time'=>time(), 'zvm_chk_uid'=>8], sprintf(" and zvm_id=%d and zvm_status = 0", $cv['zvm_id']));
			}
			else
			{
				var_dump($cv['zvm_vin'], $err);
			}
		}
		echo count($okArr);
		LibFc::delFunLock(mvc::$URL_METHOD);
		echo 'ok';
	}

	public function catchSuperVin()
	{
		$cfg = [];
		$user = '制豹'; $Domain = 'zhibao.51cjml.com'; //https://zhibao.51cjml.com/
		//$user = '昊天'; $Domain = 'haotian.51cjml.com'; //https://haotian.51cjml.com/
		//$user = '胜地'; $Domain = 'shengdi.51cjml.com'; //https://shengdi.51cjml.com/
		
		$tickArr = [
			//['user'=>'子龙', 'UserTicket'=>'3EBD1CD3270C4740242BCDD19427397D707CF6C6CB7C2E25AD527B67F1326F92E09B11DCD8749E61F196E0271A5CE529', 'SignCode'=>'f4eba3800f7421e485e56185d042139f'],
			//['user'=>'平', 'UserTicket'=>'02FF482B2DF2B3AD9F5B0A1F5EA0A0E3B63800DF5907265722DD17856DED1EDC19EF54FBA837CB285B0B2589BC55E0B4', 'SignCode'=>'3f37a159a7723c73ba2daa13b79e47ed'],
			//['user'=>'郑', 'UserTicket'=>'D980849D97F6ADE0B3BD32D0B62E767027BFAF771EFF31017E9EAC2B134675DF2703EB17F9FC2562B44E25ADB360FF76', 'SignCode'=>'f918e25ca763c1b777bfcda443a31709'],
			['user'=>'欧', 'UserTicket'=>'BDA904C1D4C8B86002449A263CA47AC47A9D9E14A76C6B727342956199969CC44163772B7FC851C4BE79519042A06286', 'SignCode'=>'3f8fec4cf7483e6c216f512de337e3af'],
		];
		$lastKey = rand(0, count($tickArr)-1); 
		$YpwBase = new YpwBase();
		$vres = $YpwBase->get('temp_51cjml_client.vin_pro', ['vp_vin'], sprintf(" and vp_pro_user='%s' and vp_status_zp = 0", $user));
		foreach($vres['data'] as $v){
			$lastKey++;
			if($lastKey >= count($tickArr)) $lastKey = 0;
			$tick= $tickArr[$lastKey];
			$UserTicket = $tick['UserTicket'];
			$SignCode = $tick['SignCode'];

			$vin = $v['vp_vin'];
			$headstr = ['data'=>'{"Header":{"SourceType":1,"UserPermit":"","UserTicket":"'.$UserTicket.'","ClientSignCheckStr":"[pi=1&ps=50&qt=3&v='.$vin.'&ver=v2][1][]['.$UserTicket.']","SignCode":"'.$SignCode.'","AllowOriginUrl":"https://'.$Domain.'","ExpandInfo":"","AutoInfo":""},"Body":"{\"qt\":3,\"pc\":0,\"v\":\"'.$vin.'\",\"c\":0,\"sts\":0,\"flag\":\"\",\"cs\":\"\",\"pi\":1,\"ps\":50,\"ver\":\"v2\",\"resetAutoParam\":false,\"mom\":\"\"}"}'];
			$zpurl = 'https://cjmlvin.51cjml.com/h5Search/ApiResult?CJML_H5_TargetDomain='.$Domain; 
			$LibHttp = new LibHttp();
			$html = $LibHttp->fetch($zpurl, $headstr);
			$allJson = json_decode($html, true);
			$allJson['allitems'] = [$allJson['Body']['categoryPartItems']];
			foreach($allJson['Body']['categorys'] as $kk=>$vv){
				if($kk > 1){
					$catids = implode(',', array_column($vv['items'], 'key'));
					$headstr = ['data'=>'{"Header":{"SourceType":1,"UserPermit":"","UserTicket":"'.$UserTicket.'","ClientSignCheckStr":"[cg=126&cs=$catids&pcs='.$catids.'&pi=1&ps=50&qt=3&v='.$vin.'&ver=v2][1][]['.$UserTicket.']","SignCode":"'.$SignCode.'","AllowOriginUrl":"https://'.$Domain.'","ExpandInfo":"","AutoInfo":""},"Body":"{\"qt\":3,\"pc\":0,\"v\":\"'.$vin.'\",\"c\":0,\"sts\":0,\"flag\":\"\",\"cs\":\"'.$catids.'\",\"cg\":126,\"pi\":1,\"ps\":50,\"ver\":\"v2\",\"resetAutoParam\":false,\"mom\":\"\",\"pcs\":\"'.$catids.'\",\"getTechInstructInfoRequest\":\"\",\"apFilter\":\"\"}"}'];
					$zpurl = 'https://cjmlvin.51cjml.com/h5Search/ApiResult?CJML_H5_TargetDomain='.$Domain; 
					$html = $LibHttp->fetch($zpurl, $headstr);
					if(stripos($html, $vin) === false){
						var_dump('异常', $tick['user'], $vin, $html);exit;
					}
					$json = json_decode($html, true);
					if(!empty($json['Body']['categoryPartItems'])){
						$allJson['allitems'][] = $json['Body']['categoryPartItems'];
						usleep(1000*1000);
					}else{
						usleep(1000*1000);
					}
					
				}
			}
			$alltxt = json_encode($allJson, JSON_UNESCAPED_UNICODE);
			if(stripos($alltxt, $vin)){
				$YpwBase->set('temp_51cjml_client.vin_pro', ['vp_status_zp'=>1, 'vp_pro_zp'=>$alltxt], sprintf(" and vp_vin='%s'", $vin));
			}else{
				var_dump('异常', $tick['user'], $vin, $alltxt);exit;
			}
			usleep(2000*1000);
		}
		echo 'ok';
	}

	public function catchSuperVin2()
	{
		$user = 'ASA';
		$jsonDir = 'D:\www\zhipei/'.$user.'/';
		$YpwBase = new YpwBase();
		$vres = $YpwBase->get('temp_51cjml_client.vin_pro', ['vp_vin'], sprintf(" and vp_pro_user='%s' and vp_status_zp = 0", $user));
		foreach($vres['data'] as $v){
			$vin = $v['vp_vin'];
			$file = $jsonDir.$vin.'.json';
			if(!file_exists($file)) continue;
			$html = file_get_contents($file);
			$YpwBase->set('temp_51cjml_client.vin_pro', ['vp_status_zp'=>1, 'vp_pro_zp'=>$html], sprintf(" and vp_vin='%s'", $vin));
			//var_dump($vin, $html);exit;
		}
		echo 'ok';
	}

	public function initYpSuperVin()
	{
		//$user = '制豹';
		//$user = 'ASA';
		//$user = '昊天';
		$user = '胜地';
		$apicfg = [
			'base_url'=>'https://api.paojd.cn/',
			'token'=>'B2C-8FD3-DDSA-7425-S145'
		];
		$LibYpApi = new LibYpApi($apicfg);
		$YpwBase = new YpwBase();
		$vres = $YpwBase->get('temp_51cjml_client.vin_pro', ['vp_vin'], sprintf(" and vp_pro_user='%s' and vp_status_yp = 0", $user));
		foreach($vres['data'] as $v){
			$vin = $v['vp_vin'];
			$txtRes = $LibYpApi->Get('vin/decodeVin', ['vin'=>$vin], true);
			if($txtRes['status'] && is_array($txtRes['data'])){
				$modInfo = json_encode($txtRes['data'], JSON_UNESCAPED_UNICODE);
				$YpwBase->set('temp_51cjml_client.vin_pro', ['vp_status_yp'=>1, 'vp_model_yp'=>$modInfo], sprintf(" and vp_vin='%s'", $vin));
			}
		}
		echo 'ok';
	}
	

	public function compareVin()
	{
		//$shopId = 590; $user = '制豹';  $brandName = '制豹'; // https://super.paojd.cn/590/index.php https://zhibao.51cjml.com/
		$shopId = 226209; $user = 'ASA';  $brandName = 'ASA'; // https://super.paojd.cn/226209/index.php  https://asa.51cjml.com/
		//$shopId = 1056357; $user = '昊天'; $brandName = '浩天'; // https://super.paojd.cn/226209/index.php  https://haotian.51cjml.com/
		//$shopId = 226678; $user = '胜地'; $brandName = '胜地'; // https://super.paojd.cn/226678/index.php  https://shengdi.51cjml.com/h5/#!/
		$YpwBase = new YpwBase();
		$B2cBase = new B2cBase();
		$B2cSearch = new B2cSearch();
		$vres = $YpwBase->get('temp_51cjml_client.vin_pro', ['*'], sprintf(" and vp_pro_user='%s' and vp_status_yp = 1 and vp_status_zp = 1", $user));
		$fields = [
			'vin'=>'车架号',
			'zp_mod'=>'ZP解码',	
			'yp_mod'=>'YP解码',
			'zp_pro_count'=>'ZP配件数',	
			'zp_pros'=>'ZP配件',	
			'yp_pro_count'=>'YP配件数',	
			'yp_pros'=>'YP配件',	
			'same_rate'=>'配件相同率',
			'same'=>'相同型号',	
			'ypno'=>'YP少的',	
			'ypmore'=>'YP多的',
		];
		$arr = ['fields'=>$fields];
		$sum = [];
		foreach($vres['data'] as $v){
			$v['vp_pro_zp'] = json_decode($v['vp_pro_zp'], true);
			$v['vp_model_yp'] = json_decode($v['vp_model_yp'], true);
			$row = [
				'vin'=>$v['vp_vin'],
				'zp_mod'=>'',
				'zp_pros'=>[],
				'yp_mod'=>'',
				'yp_pros'=>[],
			];
			if(isset($v['vp_pro_zp']['mod_json'])){
				$subId = $v['vp_pro_zp']['mod_json']['autoModelSubId'];
				$row['zp_mod'] = '['.$subId.']'.$v['vp_pro_zp']['mod_json']['autoName'];
				if(isset($v['vp_pro_zp']['item'])){
					foreach($v['vp_pro_zp']['item'] as $tv){
						if($tv['productName'] == $brandName){
							$row['zp_pros'][] = $tv['productName2'];
						}
					}
					$row['zp_pros'] = array_unique($row['zp_pros']);
					sort($row['zp_pros']);
				}
			}else{
				$subId = $v['vp_pro_zp']['Body']['expandInfo']['autoModelSubId'];
				$row['zp_mod'] = '['.$subId.']'.$v['vp_pro_zp']['Body']['expandInfo']['autoName'];
				if($v['vp_pro_zp']['allitems']){
					foreach($v['vp_pro_zp']['allitems'] as $cv){
						foreach($cv as $tv){
							foreach($tv['partItems'] as $tvv){
								if($tvv['partItemId'] > 0 && $tvv['brandName'] == $brandName){
									$row['zp_pros'][] = $tvv['partItemNo'];
								}
							}
						}
					}
					$row['zp_pros'] = array_unique($row['zp_pros']);
					sort($row['zp_pros']);
				}else if($v['vp_pro_zp']['Body']['categoryPartItems']){
					foreach($v['vp_pro_zp']['Body']['categoryPartItems'] as $tv){
						foreach($tv['partItems'] as $tvv){
							if($tvv['partItemId'] > 0 && $tvv['brandName'] == $brandName){
								$row['zp_pros'][] = $tvv['partItemNo'];
							}
						}
					}
					$row['zp_pros'] = array_unique($row['zp_pros']);
					sort($row['zp_pros']);
				}
			}
		
			$m3idsArr = [];
			if($v['vp_model_yp']['from'] == 'ypc'){
				$tmod = [];
				foreach($v['vp_model_yp']['model'] as $tv){
					$tmod[$tv['mod3_id']] = '['.$tv['mod3_id'].']'.$tv['brand_name'].($tv['brand_name'] == $tv['make_name']? ' ': ' '.$tv['make_name']).' '.$tv['mod2_name'].' '.$tv['mod3_name'].' '.$tv['vin_year'];
					$vinYear = $tv['vin_year'];
				}
				$row['yp_mod'] = implode("\r\n", $tmod);
				$m3idsArr = array_keys($tmod);
				$res = $B2cSearch->searchSuperItem($shopId, ['type'=>'model', 'mod3_id'=>implode(',', $m3idsArr), 'vinyear'=>$vinYear], 100);
				if($res['data']['proIds']){
					$table = "`bc_product` 
					JOIN `bc_product_info` ON pro_id = pri_pro_id AND pro_shop_id = {$shopId}";
					$res = $B2cBase->get($table, ['pri_code'], sprintf(" and pro_id in (%s) group by pri_code order by pri_code", implode(',', $res['data']['proIds'])));
					if($res['data']){
						foreach($res['data'] as $tv){
							if(!in_array($tv['pri_code'], $row['yp_pros'])){
								$row['yp_pros'][] = $tv['pri_code'];
							}
						}
					}
				}
			}else if($v['vp_model_yp']['model']){
				$row['yp_mod'] = '非标准车型';
			}
			$row['same'] = array_intersect($row['zp_pros'], $row['yp_pros']);
			$row['ypno'] = array_diff($row['zp_pros'], $row['yp_pros']);
			if($row['ypno']){
				//核对哪些数据是没有同步到跑街目录
				$table = "`bc_product` 
				JOIN `bc_product_info` ON pro_id = pri_pro_id AND pro_shop_id = {$shopId}";
				$res = $B2cBase->get($table, ['pri_code'], sprintf(" and pri_code in ('%s') group by pri_code", implode("','", $row['ypno'])));
				$has = array_column($res['data'], 'pri_code');
				
				foreach($row['ypno'] as $k=>$v){
					$remark = [];
					if(!in_array($v, $has)){
						$remark[] = '[未同步到目录]';
					}else if($tmod){
						$res = $YpwBase->get('temp_51cjml_client.auto_product_model JOIN temp_51cjml_client.auto_product ON pro_id = mod_pro_id', ['mod_match_yp'], sprintf(" and pro_user='%s' and pro_format='%s' and mod_auo_sub_id = %d", $user, $v, $subId));
						if(empty($res['data'])){
							$res = $YpwBase->get('temp_51cjml_client.auto_product_model JOIN temp_51cjml_client.auto_product ON pro_id = mod_pro_id join temp_51cjml_client.data_model on FIND_IN_SET(model_id, mod_zp_mod2_ids)', ['mod_match_yp'], sprintf(" and pro_user='%s' and pro_format='%s' and sub_id = %d", $user, $v, $subId));
						}
						if(empty($res['data'])){
							$remark[] = '车代未对应';
						}else{
							foreach($res['data'] as $vv){
								if(empty($vv['mod_match_yp'])){
									$remark[] = '有车代无匹配subid:'.$subId;
								}else if(stripos($vv['mod_match_yp'], 'error')){
									$matchyp = json_decode($vv['mod_match_yp'], true);
									if(is_array($matchyp['error'])){
										foreach($matchyp['error'] as $ypmod3id=>$svs){
											if($tmod[$ypmod3id]) $remark[] = implode(';', $svs);
										}
									}
								}
							}
						}
					}
					if($m3idsArr && empty($remark)){
						$table = "`bc_product` 
						JOIN `bc_product_info` ON pro_id = pri_pro_id AND pro_shop_id = {$shopId}
						JOIN `bc_product_model3_link` ON pro_id = pml3_pro_id";
						$res = $B2cBase->get($table, ['pml3_remark mod_remark'], sprintf(" and pri_code='%s' and pml3_mod3_id in (%s) and pml3_remark != ''", $v, implode(',', $m3idsArr)));
						$remark = array_column($res['data'], 'mod_remark');
					}
					if($remark) $row['ypno'][$k] .= '['.implode(';', array_unique($remark)).']';
				}
			}
			$row['ypmore'] = array_diff($row['yp_pros'], $row['zp_pros']);
			$row['zp_pro_count'] = count($row['zp_pros']);
			$row['zp_pros'] = implode("\r\n", $row['zp_pros']);
			$row['yp_pro_count'] = count($row['yp_pros']);
			$row['yp_pros'] = implode("\r\n", $row['yp_pros']);
			if($row['yp_pro_count'] == 0 && $row['zp_pro_count'] == 0){
				$row['same_rate'] = 100;
			}else{
				$row['same_rate'] = $row['zp_pro_count']? round(count($row['same'])/$row['zp_pro_count']*100): 0;
			}
			$row['same'] = implode("\r\n", $row['same']);
			$row['ypno'] = implode("\r\n", $row['ypno']);
			$row['ypmore'] = implode("\r\n", $row['ypmore']);
			//var_dump($row, $v);exit;
			$arr[] = $row;
		}
		$OthSExcel = new OthSExcel();
		$OthSExcel->writer($arr, $user.'_'.date('YmdH').'.xls');
	}

}