<?php
/**
  * @method 型号管理
  * @author soul
  * @copyright 2022/9/17
  */
class YpwGxb extends YpwBase
{
	public $ggSites = ['chinacar','cn357','cntruck','miitgov', 'miiteidc'];
	//需要转换的发动机
	public $replaceEngines = [
		'-4G15'=>'JLγ-4G15',
		'TBD226B-4IIC'=>'TBD226B-4ⅡC',
		'TBD226B-6II'=>'TBD226B-6Ⅱ',
		'TBD226B-6IIC'=>'TBD226B-6ⅡC',
		'TBD226B-6IIB'=>'TBD226B-6ⅡB',
	];

	public $onlyOneEngines = [
		'MDPQ/S120'
	];

	public $catchSiteDaili = [];

	/**
	  * @method 格式化公告提取到的值
	  * @param  $html  string [必填] 页面内容
	  * @param  $arr  array [必填] 初步提取的值
	  * @param  $site  string [必填] 站点
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function formatInfo($html, $arr, $site)
	{
		$arr['gtype'] = LibFc::getGxbCarType($arr['gxb_code']);
		foreach($arr as $filed=>$val)
		{
			if(is_array($val)) continue;
			$reArr = ['&quot;'=>'', '，'=>',', '(Kg)'=>'', '(mm)'=>'', '(人)'=>'', '(km/h)'=>'', '(个)'=>''];
			if(in_array($filed, ['length', 'width', 'height', 'axle', 'passenger','weight', 'maxweight', 'wheel', 'qlunj', 'hlunj']))
				$reArr['/'] = ',';
			if(in_array($filed, ['length', 'width', 'height','weight'])){
				$reArr['-'] = ',';$reArr['、'] = ',';$reArr['；'] = ',';
			}

			$val = strtr($val, $reArr);
			switch($filed)
			{
				case 'vin18':
					if(preg_match_all('/([0-9A-Z]{8})[ ×xX]+/i', $val, $m2))
						$val = implode(',', array_unique($m2[1]));
					else if(preg_match_all('/([0-9A-Z]{7})[×xX]+/i', $val, $m2)) {
						$val = implode(',', array_unique($m2[1]));
					}else if(preg_match_all('/([0-9A-Z]{8})[0-9a-zA-Z]{5,}+/i', $val, $m2)) {
						$val = implode(',', array_unique($m2[1]));
					}else if(preg_match_all('/([0-9A-Z]{8})[\x80-\xff]/i', $val, $m2)) {
						$val = implode(',', array_unique($m2[1]));
					}
				break;
				case 'wheel':
					//去掉非数字开头的
					$val = preg_replace('/^\D*/', '', $val);
					//CLY5314GJB30E61  CQ5316GFLHTG466TB 多轴
					//$val = strtr($val, ['+'=>',','-'=>',', '/'=>',']);
				break;
				case 'passenger':
				case 'qpck':
					$tp = [];
					foreach(explode(',', $val) as $tmv)
					{
						if(preg_match('/(\d+)\-(\d+)/', $tmv, $match2)){
							for($i = $match2[1]; $i <= $match2[2]; $i++)
							{
								$tp[] = $i;
							}
						}else if(preg_match('/(\d+)\+(\d+)/', $tmv, $match2)){
							$tp[] = $match2[1]+$match2[2];
						}else if(!empty($tmv)){
							$tp[] = (int) $tmv;
						}
					}
					$tp = array_unique($tp);
					sort($tp);
					$val = implode(',', $tp);
				break;
				case 'paifang':
					$res = $this->formatPaifang($val);
					if(!empty($res['data']['format']))
						$val = $res['data']['format'];
				break;
				case 'length':
				case 'width':
				case 'height':
					$tp = [];
					foreach(explode(',', $val) as $tmv)
					{
						$tmv = (float) $tmv;
						if($tmv > 500 && $tmv < 100000){
							$tp[] = $tmv;
						}
					}
					$tp = array_unique($tp);
					sort($tp);
					$val = implode(',', $tp);
				break;
				case 'lts': 
					$val = (int) $val;
				break;
			}
			if(in_array($filed, ['vin18','length','width','height','wheel','weight','maxweight','passenger','qpck','youhao','qlunj','hlunj','maxsd','lts','axle'])){
				$tivals = [];
				foreach(explode(',', $val) as $iv){
					if(!empty($iv) && !in_array($iv, ['_', '-', '/', ';']))
						$tivals[] = trim($iv);
				}
				$val = implode(',', array_unique($tivals));
			}
			$arr[$filed] = $val;
		}
		
		//欧曼牌BJ3319DNPKC-AD型自卸汽车
		if(!empty($arr['vtype']) && !empty($arr['gxb_code_show']) && stripos($arr['vtype'], $arr['gxb_code_show']) !== false)
		{
			if(stripos($arr['vtype'], $arr['gxb_code_show'].'型') !== false)
				$arr['vtype'] = str_replace($arr['gxb_code_show'].'型', '', $arr['vtype']);
			else
				$arr['vtype'] = str_replace($arr['gxb_code_show'], '', $arr['vtype']);

			if(stripos($arr['vtype'], $arr['brand'].'牌') !== false)
				$arr['vtype'] = str_replace($arr['brand'].'牌', '', $arr['vtype']);
			else if(stripos($arr['vtype'], $arr['brand']) !== false)
				$arr['vtype'] = str_replace($arr['brand'], '', $arr['vtype']);
		}

		//重置品牌名
		if(!empty($arr['vin18']) && !empty($arr['brand']))
		{
			$YpwVin = new YpwVin();
			$res = $YpwVin->getWmiReBrand(substr($arr['vin18'], 0, 3), $arr['brand']);
			$arr['brand'] = $res['data'];
		}

		//格式化发动机 功率 排量
		$arr['engines'] = [];
		if(!empty($arr['engtxts']))
		{
			$ret = ['"'=>'','（'=>'(','）'=>')', '(('=>'(','(驱动电机)'=>'', '(电动机)'=>'', '（电动机）'=>'','(汽油)'=>'', '(CNG)'=>'',';'=>'<br>', '；'=>'<br>', '，'=>',','N/A'=>'', '–'=>'-', '前:'=>'', '后:'=>''];
			$engtxt = trim(trim(strtr($arr['engtxts']['engine'], $ret), '<br>'));
			$cctxt = trim(trim(strtr($arr['engtxts']['cc'], $ret), '<br>'));
			$kwtxt = trim(trim(strtr($arr['engtxts']['kw'], $ret), '<br>'));
			//SY2810W3  YND485Q,485/100,ZN485QA 尝试判断是不是用,做分隔符
			if(stripos($engtxt, '<br>') === false && stripos($cctxt, '<br>') === false && stripos($kwtxt, '<br>') === false && substr_count($engtxt, ',') == substr_count($cctxt, ',') && substr_count($engtxt, ',') == substr_count($kwtxt, ',')){
				$engtxt = str_replace(',', '<br>', $engtxt);
				$cctxt = str_replace(',', '<br>', $cctxt);
				$kwtxt = str_replace(',', '<br>', $kwtxt);
			}
			
			$kwtxt = preg_replace('/\([^0-9]+\)/', '', $kwtxt);
			$engkvccArr = [];
			$engArr = [];
			foreach(explode('<br>', $engtxt) as $tk=>$tv)
			{
				$tv = preg_replace('/\([\x80-\xff]+\)/i','', $tv); //4G63S4M(电喷)
				$tv = preg_replace('/\([\x80-\xff]+$/i','', $tv); //GLMI15A1(驱动电机
				$tv = stripos($tv, '***') > 2? '': trim($tv); //GHA6460RAC6B
				if(!empty($this->replaceEngines[$tv])) $tv = $this->replaceEngines[$tv];
				$engArr[$tk] = trim($tv);
			}

			$ccArr = [];
			//BH7140XMS
			$engc = substr_count($engtxt, '<br>');
			$cansplit = true;
			if($engc > 0 && substr_count($cctxt, '<br>') === 0)
			{
				$sp = strlen($cctxt)/($engc+1);
				if(is_int($sp) && $sp > 3 && $sp < 6)
				{
					$tt = [];
					foreach(str_split($cctxt, strlen($cctxt)/($engc+1)) as $ttv)
					{
						if(preg_match('/^[1-9]/', $ttv, $match)){
							$tt[] = $ttv;
						}else{
							$tt = [];//YZZ5318JSQS6 8800950095008800002988310528
							$cansplit = false;
							break;
						}
					}
					if($cansplit) $cctxt = implode('<br>', $tt);
				}
			}
			//NJ5046XDWD3E
			if($engc > 0 && substr_count($kwtxt, '<br>') === 0)
			{
				$sp = strlen($kwtxt)/($engc+1);
				if(is_int($sp) && $sp > 2 && $sp < 5 && $cansplit){
					
					$tt = [];
					foreach(str_split($kwtxt, strlen($kwtxt)/($engc+1)) as $ttv)
					{
						if(preg_match('/^[1-9]/', $ttv, $match)){
							$tt[] = $ttv;
						}else{
							$tt = [];//YZZ5318JSQS6 8800950095008800002988310528
							$cansplit = false;
							break;
						}
					}
					if($cansplit) $kwtxt = implode('<br>', $tt);
				}
			}

			foreach(explode('<br>', $cctxt) as $tk=>$tv)
			{
				$ccArr[$tk] = empty($tv) || in_array($tv, ['_', '-', '/', ';']) || strlen($tv) > 8 ? '': trim($tv);
				$ccArr[$tk] = trim($ccArr[$tk], ',');
			}
			
			$kwArr = [];
			foreach(explode('<br>', $kwtxt) as $tk=>$kv)
			{
				if(stripos($html, '/马力')){//SDL6100EVG2
					if(stripos($kv, '/') > 0) $kv = substr($kv, 0, strrpos($kv, '/'));
					if(stripos($kv, ',') > 0) $kv = substr($kv, 0, strrpos($kv, ','));
				}
				$kwArr[$tk]= trim(strtr($kv, [','=>'/']));
				$kwArr[$tk] = trim($kwArr[$tk], '/');
			}
			
			//不相等时去掉空值再检测
			if(count($engArr) != count($kwArr))
			{	//EM6751
				foreach($engArr as $tk=>$tv)
				{
					if(empty($tv)) unset($engArr[$tk]);
				}
				foreach($ccArr as $tk=>$tv)
				{
					if(empty($tv)) unset($ccArr[$tk]);
				}
				foreach($kwArr as $tk=>$tv)
				{
					if(empty($tv)) unset($kwArr[$tk]);
				}
				$engArr = array_values($engArr);
				$ccArr = array_values($ccArr);
				$kwArr = array_values($kwArr);
			}

			foreach($engArr as $tk=>$tv)
			{
				if(!preg_match('/[0-9a-zA-Z]/i', $tv, $match)) continue;
				$tarr = ['engine'=>$tv, 'cc'=>'', 'kw'=>'', 'jgl_kw'=>'', 'ed_kw'=>''];
				if(!empty($ccArr[$tk]) && count($engArr) == count($ccArr)){
					$tarr['cc'] = $ccArr[$tk];
				}else if(count($engArr) == 1){
					$tarr['cc'] = implode(',', array_unique($ccArr));
				}
				if(!empty($kwArr[$tk]) && count($engArr) == count($kwArr)){
					$tarr['kw'] = $kwArr[$tk];
				}else if(count($engArr) == 1){
					$tarr['kw'] = implode('/', array_unique($kwArr));
				}
				$tarr['cc'] = strtr($tarr['cc'], ['ML'=>'','mL'=>'', 'ml'=>'','_'=>'','-'=>'','/'=>'','—'=>'','/'=>'']);
				if(preg_match('/^(\d*\.?\d*)[LT]/', $tarr['cc'], $match)) $tarr['cc'] = $match[1]*1000;
				if(!preg_match('/^[1-9]/', $tarr['cc'], $match)) $tarr['cc'] = '';

				$tarr['kw'] = strtr($tarr['kw'], ['Kw'=>'','KW'=>'','kW'=>'','kw'=>'','_'=>'','-'=>'','—'=>'']);
				
				//多发动机 无排量的
				$isAnyEng = null;
				if(!in_array($tarr['engine'], $this->onlyOneEngines) && stripos($tarr['engine'], '/') !== false && stripos($tarr['kw'], '/') !== false && empty($tarr['cc'])){
					$tengs = explode('/', $tarr['engine']);
					$tkws = explode('/', $tarr['kw']);
					$popcount = count($tkws) - count($tengs);
					$absleng = abs(strlen($tengs[0]) - strlen($tengs[1]));
					
					//SDL6100EVG2  MDPQ/S120是单发动机
					if(($absleng == 0 && strlen($tengs[0]) > 2) || ($absleng <= 2 && strlen($tengs[0]) >= 6)){
						//至少3个字符，长度一样
						$isAnyEng = true;
					}else if($popcount == 1 && preg_match('/^[a-zA-Z].{3,}/', $tengs[0]) && preg_match('/^[a-zA-Z].{3,}/', $tengs[1])){//SKE6470SBEVA4S SEP200/CTZ196XY0P1
						//字母开头4个字符以上，功率比发动机多一个
						$isAnyEng = true;
					}else if(strlen($tengs[1]) < 3 || (preg_match('/^[a-zA-Z]/', $tengs[0]) && preg_match('/^[^a-zA-Z]/', $tengs[1]))){
						//第一个发动机字母开头，但是第二个是数字开头的是假
						$isAnyEng = false;
					}
					if($isAnyEng){
						//数量不一致时，重置功率
						//功率个数大于发动机个数时，去掉多余的功率
						if($popcount > 0){
							array_splice($tkws, -$popcount);
							$tarr['kw'] = implode('/', $tkws);
						}
					}
				}else{
					if(stripos($tarr['kw'], '/') > 0) $tarr['kw'] = substr($tarr['kw'], 0, stripos($tarr['kw'], '/'));
				}

				if(!preg_match('/^[1-9]/', $tarr['kw'], $match)) $tarr['kw'] = '';
				//正则转换
				$tarr['engreg'] = strtr($tarr['engine'], ['/'=>'\/', '.'=>'\.', '-'=>'\-', '*'=>'\*']);
				$arr['engines'][] = $tarr;
			}
		}

		//功率类型
		$res = $this->formatEngByRemark($arr);
		$arr = $res['data'];

		return $arr;
	}

	private function formatKw($arr, $needMatch, $jgl_kw, $ed_kw)
	{
		if(!empty($jgl_kw) || !empty($ed_kw))
		{
			foreach($arr['engines'] as $tk=>$tv)
			{
				if(empty($tv['jgl_kw']) && !empty($jgl_kw)){
					if($jgl_kw == 'kw'){
						if(preg_match('/^\d+\.?\d*$/', $tv['kw'], $match))
							$tv['jgl_kw'] = $tv['kw']; 
					}else{
						$tv['jgl_kw'] = $jgl_kw;
					}
					unset($needMatch['jgl_kw'][$tk]);
				}
				if(empty($tv['jgl_kw']) && !empty($ed_kw)){
					if($ed_kw == 'kw'){
						if(preg_match('/^\d+\.?\d*$/', $tv['kw'], $match))
							$tv['ed_kw'] = $tv['kw']; 
					}else{
						$tv['ed_kw'] = $ed_kw;
					}
					unset($needMatch['ed_kw'][$tk]);
				}
				$arr['engines'][$tk] = $tv;
			}
		}
		return ['arr'=>$arr, 'needMatch'=>$needMatch];
	}

	/**
	  * @method 从公告页面提取信息
	  * @param  $site  string [必填] 站点
	  * @param  $html  string [必填] 页面内容
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function formatGgByHtml($site, $html, $type = 'gxb')
	{
		if($site == 'chinacar')
		{
			return $this->formatGgByChinacar($html, $type);
		}
		else if($site == 'cn357') 
		{
			return $this->formatGgByCn357($html, $type);
		}
		else if($site == 'cntruck') 
		{
			return $this->formatGgByCntruck($html, $type);
		}
		else if($site == 'miitgov') 
		{
			return $this->formatGgByMiitgov($html, $type);
		}
	}


	/**
	  * @method 从中车网公告页面提取信息
	  * @param  $html  string [必填] 页面内容
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function formatGgByChinacar($html, $type = 'gxb')
	{
		$html = strtr($html, ['　'=>' ','＋'=>'+', '&nbsp;'=>' ', '<br />'=>'<br>']);
		$site = 'chinacar';
		if($type == 'dipan'){
			$filedArr = [
				'gxb_code_show'=>'底盘型号',	
				'pici'=>'批次',
				'brand'=>'产品商标',	
				'vtype'=>'产品名称',	
				'axle'=>'轴数',	
				'passenger'=>'',	
				'qpck'=>'前排乘客',	
				'weight'=>'整备质量',	
				'maxweight'=>'总质量',	
				'wheel'=>'轴距',	
				'fuel'=>'燃油类型',
				'paifang'=>'依据标准',
				'qlunj'=>'前轮距',
				'hlunj'=>'后轮距',
				'maxsd'=>'最高车速',
				'lts'=>'轮胎数',
				'vin18'=>'识别代码',
				'remark'=>'其他',
			];
		}else{
			$filedArr = [
				'gxb_code_show'=>'公告型号',	
				'pici'=>'公告批次',
				'brand'=>'中文品牌',	
				'vtype'=>'车辆名称',	
				'axle'=>'轴数',	
				'passenger'=>'额定载客',	
				'qpck'=>'前排乘客',	
				'weight'=>'整备质量',	
				'maxweight'=>'总质量',	
				'wheel'=>'轴距',	
				'fuel'=>'燃料种类',
				'paifang'=>'依据标准',
				'paifang2'=>'底盘排放标准',
				'publish'=>'发布日期',
				'youhao'=>'油耗',
				'qlunj'=>'前轮距',
				'hlunj'=>'后轮距',
				'maxsd'=>'最高车速',
				'lts'=>'轮胎数',
			];
		}
		if(preg_match('/<td[^>]*>外形尺寸：<\/td>\s*<td[^>]*>\s*<span[^>]*>([0-9,]+)+×([0-9,]+)×([0-9,]+)/', $html, $match)){
			$arr['length'] = implode(',', array_unique(explode(',', $match[1])));
			$arr['width'] = implode(',', array_unique(explode(',', $match[2])));
			$arr['height'] = implode(',', array_unique(explode(',', $match[3])));
		}else if(preg_match('/长[：:]([0-9,]+)+ *宽[：:]([0-9,]+) *高[：:]([0-9,]+)/iu', $html, $match)){
			$arr['length'] = implode(',', array_unique(explode(',', $match[1])));
			$arr['width'] = implode(',', array_unique(explode(',', $match[2])));
			$arr['height'] = implode(',', array_unique(explode(',', $match[3])));
		}
		if(empty($arr['vin18']) && preg_match('/Vin车辆识别代码<\/a>：<\/td>\s*<td[^>]*>(.*)<\/td>/', $html, $match))
		{
			$arr['vin18'] = $match[1];
			if(preg_match('/<span[^>]*>(.*)<\/span>/iUs', $arr['vin18'], $match2)){
				$arr['vin18'] = $match2[1];
			}
		}
		if(empty($arr['remark']) && preg_match('/<b>其他<\/b>.*<\/td>\s*<\/tr>\s*<tr>\s*<td[^>]*>(.*)<\/td>\s*<\/tr>/iUs', $html, $match)){
			$arr['remark'] = trim($match[1]);
		}
		foreach($filedArr as $filed=>$name)
		{
			if(!empty($arr[$filed])) continue;
			$val = '';
			$regArr = [
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*>([^<]*)<\/td>/iUs',
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*><a[^>]*>([^<]*)<\/a><\/td>/iUs',
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*><span[^>]*>([^<]*)<\/span>/iUs',	
			];
			foreach($regArr as $reg)
			{
				if(preg_match($reg, $html, $match))
				{
					$val = $match[1];
					break;
				}
			}
			if(stripos($filed, 'dpgxb') === 0 || $filed == 'gxb_code_show')
			{
				//英文开始
				if(preg_match('/[a-zA-Z][a-zA-Z0-9]{2,}.+/', $val, $matc2)) $val = $matc2[0];
				$val = preg_replace('/([\x80-\xff].*)/i','', $val);//去掉中文开始的
			}
			$arr[$filed] = trim($val);
		}

		if(empty($arr['qlunj']) && preg_match('/前轮距[：: ]*([0-9,]+)/', $html, $match)) $arr['qlunj'] = $match[1];
		if(empty($arr['hlunj']) && preg_match('/后轮距[：: ]*([0-9,]+)/', $html, $match)) $arr['hlunj'] = $match[1];

		$arr['paifang'] = $arr['paifang'].' '.$arr['paifang2'];
		unset($arr['paifang2']);

		$arr['gxb_code_show'] = trim(preg_replace('/([\x80-\xff].*)/i','', $arr['gxb_code_show']));
		$arr['gxb_code'] = LibFc::FormatNum($arr['gxb_code_show']);

		//特殊处理
		if($arr['gxb_code'] == 'TV7121E6' && stripos($html, '>9NR8<br>NR<'))
		{
			$reHtml = ['>9NR8<br>NR<'=>'>9NR<br>8NR<'];
			$html = strtr($html, $reHtml);
		}

		//发动机 功率 排量
		$reg = '/<tr[^>]*>\s*<td[^>]*>发动机[^<]*<\/td>\s*<td[^>]*>发动机生产企业<\/td>\s*<td[^>]*>排量[^<]*<\/td>\s*<td[^>]*>功率[^<]*<\/td>\s*<\/tr>\s*<tr[^>]*>\s*<td[^>]*>(.*)<\/td>\s*<td[^>]*>.*<\/td>\s*<td[^>]*>(.*)<\/td>\s*<td[^>]*>(.*)<\/td>\s*<\/tr>/';
		if(preg_match($reg, $html, $match))
		{
			$arr['engtxts'] = [
				'engine'=>$match[1],	
				'cc'=>$match[2],	
				'kw'=>$match[3],	
			];
		}
		$arr = $this->formatInfo($html, $arr, $site);
		return LibFc::ReturnData(true, $arr);
	}


	/**
	  * @method 从商车网公告页面提取信息
	  * @param  $html  string [必填] 页面内容
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function formatGgByCn357($html, $type = 'gxb')
	{
		$html = strtr($html, ['　'=>' ','＋'=>'+']);
		$site = 'cn357';
		$filedArr = [
			'vin18'=>'识别代号',
			'gxb_code_show'=>'公告型号',	
			'pici'=>'公告批次',
			'length'=>'整车长',	
			'width'=>'整车宽',	
			'height'=>'整车高',	
			'brand'=>'品牌',	
			'vtype'=>'类型',	
			'axle'=>'轴数',	
			'passenger'=>'额定载客',
			'qpck'=>'驾驶室准乘人数',
			'weight'=>'整备质量',	
			'maxweight'=>'总质量',	
			'wheel'=>'轴距',	
			'fuel'=>'燃料种类',
			'paifang'=>'排放依据标准',
			'remark'=>'备注',
			'youhao'=>'油耗',
			'qlunj'=>'前轮距',
			'hlunj'=>'后轮距',
			'maxsd'=>'最高车速',
			'dpgxb1'=>'底盘1',
			'dpgxb2'=>'底盘2',
			'dpgxb3'=>'底盘3',
			'dpgxb4'=>'底盘4',
			'lts'=>'轮胎数',
		];
		foreach($filedArr as $filed=>$name)
		{
			$val = '';
			$regArr = [
				'/<td[^>]*>\s*'.$name.'\s*<\/td>\s*<td[^>]*>([^<]*)<\/td>/iUs',	
				'/<td[^>]*>\s*'.$name.'\s*<\/td>\s*<td[^>]*><a[^>]*>([^<]*)<\/a><\/td>/iUs',	
			];
			foreach($regArr as $reg)
			{
				if(preg_match($reg, $html, $match))
				{
					$val = $match[1];
					break;
				}
			}
			if(stripos($filed, 'dpgxb') === 0 || $filed == 'gxb_code_show')
			{
				//英文开始
				if(preg_match('/[a-zA-Z][a-zA-Z0-9]{2,}.+/', $val, $matc2)) $val = $matc2[0];
				$val = preg_replace('/([\x80-\xff].*)/i','', $val);//去掉中文开始的
			}
			$arr[$filed] = trim($val);
		}
		$arr['gxb_code'] = LibFc::FormatNum($arr['gxb_code_show']);

		//发动机 功率 排量
		$reg = '/<tr[^>]*>\s*<td[^>]*>发动机型号<\/td>\s*<td[^>]*>发动机生产企业<\/td>\s*<td[^>]*>发动机商标<\/td>\s*<td[^>]*>排量<\/td>\s*<td[^>]*>功率<\/td>\s*<\/tr>\s*<tr[^>]*>\s*<td[^>]*>(.*)<\/td>\s*<td[^>]*>.*<\/td>\s*<td[^>]*>.*<\/td>\s*<td[^>]*>(.*)<\/td>\s*<td[^>]*>(.*)<\/td>\s*<\/tr>/';
		if(preg_match($reg, $html, $match))
		{
			$arr['engtxts'] = [
				'engine'=>strtr($match[1], ['$'=>'<br>']),
				'cc'=>strtr($match[2], ['$'=>'<br>']),
				'kw'=>strtr($match[3], ['$'=>'<br>'])
			];
		}
		$arr['dipans'] = [];
		for($i = 1; $i < 5; $i++){
			if(!empty($arr['dpgxb'.$i])){
				$arr['dipans'][] = $arr['dpgxb'.$i];
				unset($arr['dpgxb'.$i]);
			}
		}
		$arr = $this->formatInfo($html, $arr, $site);
		return LibFc::ReturnData(true, $arr);
	}


	/**
	  * @method 从王力网公告页面提取信息
	  * @param  $html  string [必填] 页面内容
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function formatGgByCntruck($html, $type = 'gxb')
	{
		$html = strtr($html, ['　'=>' ','＋'=>'+']);
		$site = 'cntruck';
		if($type == 'dipan'){
			$filedArr = [
				'gxb_code_show'=>'底盘型号',
				'vin18'=>'车辆识别代码',
				'pici'=>'批次',
				'brand'=>'产品商标',	
				'vtype'=>'产品名称',	
				'axle'=>'轴数',	
				'passenger'=>'准乘人数',
				'weight'=>'整备质量',	
				'maxweight'=>'总质量',	
				'wheel'=>'轴距',	
				'fuel'=>'燃料种类',
				'paifang'=>'排放标准',
				'qlunj'=>'前轮距',
				'hlunj'=>'后轮距',
				'maxsd'=>'最高车速',
				'lts'=>'轮胎数',
			];
		}else{
			$filedArr = [
				'gxb_code_show'=>'公告型号',
				'vin18'=>'Vin车辆识别代码',
				'pici'=>'公告批次',
				'brand'=>'中文品牌',	
				'vtype'=>'车辆名称',	
				'axle'=>'轴数',	
				'passenger'=>'额定载客',
				'qpck'=>'前排乘客',	
				'weight'=>'整备质量',	
				'maxweight'=>'总质量',	
				'wheel'=>'轴距',	
				'fuel'=>'燃料种类',
				'paifang'=>'依据标准',
				'paifang2'=>'底盘排放标准',
				'publish'=>'发布日期',
				'youhao'=>'油耗',
				'qlunj'=>'前轮距',
				'hlunj'=>'后轮距',
				'maxsd'=>'最高车速',
				'dpgxb'=>'底盘型号',
				'lts'=>'轮胎数',
			];
		}
		
		if(preg_match('/<td[^>]*>外形尺寸[:：]<\/td>\s*<td[^>]*>\s*([0-9,]+)+×([0-9,]+)×([0-9,]+)/', $html, $match))
		{
			$arr['length'] = implode(',', array_unique(explode(',', $match[1])));
			$arr['width'] = implode(',', array_unique(explode(',', $match[2])));
			$arr['height'] = implode(',', array_unique(explode(',', $match[3])));
		}
	
		if(preg_match('/<thead>\s*<tr>\s*<th[^>]*>其他<\/th>\s*<\/tr>\s*<\/thead>\s*<tbody>\s*<tr>\s*<td[^>]*>(.*)<\/td>\s*<\/tr>\s*<\/tbody>/iUs', $html, $match)){
			//公告
			$arr['remark'] = trim($match[1]);
		}else if(preg_match('/\s*<tr>\s*<td[^>]*>其他:?<\/td>\s*<td[^>]*>(.*)<\/td>\s*<\/tr>\s*/iUs', $html, $match)){
			//底盘
			$arr['remark'] = trim($match[1]);
		}
		foreach($filedArr as $filed=>$name)
		{
			if(!empty($arr[$filed])) continue;
			$val = '';
			$regArr = [
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*>([^<]*)<\/td>/iUs',
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*><a[^>]*>([^<]*)<\/a>\s*<\/td>/iUs',
			];
			foreach($regArr as $reg)
			{
				if(preg_match($reg, $html, $match))
				{
					$val = $match[1];
					break;
				}
			}
			if(stripos($filed, 'dpgxb') === 0 || $filed == 'gxb_code_show')
			{
				if(preg_match('/[\x80-\xff]/i', $val, $matc21)){
					//7Y-1150D1N4 英文开始
					if(preg_match('/[a-zA-Z][a-zA-Z0-9]{2,}.+/', $val, $matc2)) $val = $matc2[0];
					$val = preg_replace('/([\x80-\xff].*)/i','', $val);//去掉中文开始的
				}
			}
			$arr[$filed] = trim($val);
		}

		$arr['paifang'] = $arr['paifang'].' '.$arr['paifang2'];
		unset($arr['paifang2']);

		$arr['gxb_code_show'] = trim(preg_replace('/([\x80-\xff].*)/i','', $arr['gxb_code_show']));
		$arr['gxb_code'] = LibFc::FormatNum($arr['gxb_code_show']);
		
		//发动机 功率 排量
		if(preg_match_all('/<tr>\s*<td[^>]*>\s*<a[^>]*checkEngine[^>]*>(.*)<\/a>\s*<\/td>\s*<td>.*<\/td>\s*<td>(.*)<\/td>\s*<td>(.*)<\/td>\s*<\/tr>/iUs', $html, $match))
		{
			$arr['engtxts'] = [
				'engine'=>implode('<br>', $match[1]),	
				'cc'=>implode('<br>', $match[2]),	
				'kw'=>implode('<br>', $match[3]),	
			];
		}

		$arr['dipans'] = [];
		if(!empty($arr['dpgxb'])){
			$arr['dipans'][] = $arr['dpgxb'];
			unset($arr['dpgxb']);
		}
		$arr = $this->formatInfo($html, $arr, $site);
		return LibFc::ReturnData(true, $arr);
	}


	/**
	  * @method 从工信部公告页面提取信息
	  * @param  $html  string [必填] 页面内容
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function formatGgByMiitgov($html, $type = 'gxb')
	{
		$html = strtr($html, ['　'=>' ', '<th'=>'<td', '</th>'=>'</td>','（含驾驶员）'=>'','（座位数）'=>'', '（VIN）'=>'', '（人）'=>'', '(kg)'=>'', '(L/100km)'=>'', '(km/h)'=>'', '(mm)'=>'']);
		//echo $html;
		$site = 'miitgov';
		if($type == 'dipan'){
			$filedArr = [
				
			];
		}else{
			$filedArr = [
				'gxb_code_show'=>'产品型号',
				'vin18'=>'车辆识别代号',
				'pici'=>'公告批次',
				'brand'=>'产品商标',	
				'vtype'=>'产品名称',	
				'axle'=>'轴数',	
				'passenger'=>'额定载客',
				'qpck'=>'驾驶室准乘人数',	
				'weight'=>'整备质量',	
				'maxweight'=>'总质量',	
				'wheel'=>'轴距',	
				'fuel'=>'燃料种类',
				'paifang'=>'排放依据标准',
				//'paifang2'=>'底盘排放标准',
				'youhao'=>'油耗申报值',
				'qlunj'=>'前轮距',
				'hlunj'=>'后轮距',
				'maxsd'=>'最高车速',
				'lts'=>'轮胎数',
				'remark'=>'其它',
			];
		}
		
		if(preg_match('/长[：:]([0-9,]+)+ *宽[：:]([0-9,]+) *高[：:]([0-9,]+)/iu', $html, $match)){
			$arr['length'] = implode(',', array_unique(explode(',', $match[1])));
			$arr['width'] = implode(',', array_unique(explode(',', $match[2])));
			$arr['height'] = implode(',', array_unique(explode(',', $match[3])));
		}

		foreach($filedArr as $filed=>$name)
		{
			if(!empty($arr[$filed])) continue;
			$val = '';
			$regArr = [
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*>([^<]*)<\/td>/iUs',
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*><a[^>]*>([^<]*)<\/a>\s*<\/td>/iUs',
			];
			foreach($regArr as $reg)
			{
				if(preg_match($reg, $html, $match))
				{
					$val = $match[1];
					break;
				}
			}
			$arr[$filed] = trim($val);
		}

		if(empty($arr['qlunj']) && preg_match('/前轮距[：: ]*([0-9,]+)/', $html, $match)) $arr['qlunj'] = $match[1];
		if(empty($arr['hlunj']) && preg_match('/后轮距[：: ]*([0-9,]+)/', $html, $match)) $arr['hlunj'] = $match[1];

		$arr['paifang'] = $arr['paifang'].' '.$arr['paifang2'];
		unset($arr['paifang2']);

		$arr['gxb_code_show'] = trim(preg_replace('/([\x80-\xff].*)/i','', $arr['gxb_code_show']));
		$arr['gxb_code'] = LibFc::FormatNum($arr['gxb_code_show']);
		
		//发动机 功率 排量 https://www.miit.gov.cn/datainfo/dljdclscqyjcpgg/dsweedsxcpgs381/art/2024/art_6c1b23fbb4d843e088e9de4fac6eea5b.html
		$reg = '/<tr[^>]*>\s*<td[^>]*>发动机型号[^<]*<\/td>\s*<td[^>]*>[^>]+<\/td>\s*<td[^>]*>排量[^<]*<\/td>\s*<td[^>]*>功率[^<]*<\/td>\s*<td[^>]*>[^>]+<\/td>\s*<\/tr>\s*<tr[^>]*>\s*<td[^>]*>(.*)<\/td>\s*<td[^>]*>.*<\/td>\s*<td[^>]*>(.*)<\/td>\s*<td[^>]*>(.*)<\/td>\s*/';
		if(preg_match($reg, $html, $match))
		{
			$arr['engtxts'] = [
				'engine'=>$match[1],	
				'cc'=>$match[2],	
				'kw'=>$match[3],	
			];
		}
		
		$arr['dipans'] = [];
		//底盘  https://www.miit.gov.cn/datainfo/dljdclscqyjcpgg/dsweedsxcpgs381/art/2024/art_6c1b23fbb4d843e088e9de4fac6eea5b.html
		$reg = '/<tr[^>]*>\s*<td[^>]*>[^>]+<\/td>\s*<td[^>]*>[^>]+<\/td>\s*<td[^>]*>底盘型号[^<]*<\/td>\s*<td[^>]*>[^>]+<\/td>\s*<td[^>]*>[^>]+<\/td>\s*<\/tr>\s*<tr[^>]*>\s*<td[^>]*>[^>]*<\/td>\s*<td[^>]*>[^>]*<\/td>\s*<td[^>]*>([^<]*)<\/td>/';
		if(preg_match($reg, $html, $match))
		{
			$arr['dipans'] = explode(';', strtr($match[1], ['：'=>';', ","=>';', '：'=>',']));
		}
		$arr = $this->formatInfo($html, $arr, $site);
		return LibFc::ReturnData(true, $arr);
	}

	/**
	  * @method 从工信部公告页面提取信息
	  * @param  $html  string [必填] 页面内容
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function formatGgByMiiteidc($html, $type = 'gxb')
	{
		$html = strtr($html, ['　'=>' ', '&nbsp;'=>' ', '</span>&nbsp;</td>'=>'</span></td>', '<th'=>'<td', '</th>'=>'</td>','（含驾驶员）'=>'', '(含驾驶员)'=>'',
		'（座位数）'=>'', '（VIN）'=>'', '（人）'=>'','(VIN)'=>'', '(kg)'=>'', '(L/100km)'=>'', '(km/h)'=>'', '(mm)'=>'']);
		//echo $html;
		$site = 'miiteidc';
		$comFileds = [
			'from_id'=>'产品ID',
			'vin18'=>'车辆识别代号',
			'pici'=>'批次',
			'brand'=>'产品商标',	
			'axle'=>'轴数',	
			'weight'=>'整备质量',	
			'maxweight'=>'总质量',	
			'wheel'=>'轴距',	
			'fuel'=>'燃料种类',
			'paifang'=>'排放依据标准',
			'youhao'=>'油耗',
			'qlunj'=>'前轮距',
			'hlunj'=>'后轮距',
			'maxsd'=>'最高车速',
			'lts'=>'轮胎数',
			'length'=>'外形尺寸长',	
			'width'=>'外形尺寸宽',	
			'height'=>'外形尺寸高',
			'remark'=>'其它',
			'engine'=>'发动机型号',
			'cc'=>'排量',
			'kw'=>'发动机功率',
		];
		if($type == 'dipan'){
			$filedArr = [
				'gxb_code_show'=>'底盘型号',
				'passenger'=>'驾驶室准乘人数',	
				'vtype'=>'产品名称',
			];
		}else{
			$filedArr = [
				'vtype'=>'车辆名称',
				'gxb_code_show'=>'车辆型号',
				'passenger'=>'额定载客',
				'qpck'=>'驾驶室准乘人数',	
				'paifang2'=>'底盘排放标准',
				'dipans'=>'底盘型号及企业',
			];
		}
		$filedArr = array_merge($comFileds, $filedArr);
		foreach($filedArr as $filed=>$name)
		{
			if(!empty($arr[$filed])) continue;
			$val = '';
			$regArr = [
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*>([^<]*)<\/td>/iUs',
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*><span[^>]*>(.*)<\/span>\s*<\/td>/iUs',
				'/<td[^>]*>\s*'.$name.'[:：]*\s*<\/td>\s*<td[^>]*><a[^>]*>(.*)<\/a>\s*<\/td>/iUs',
			];
			foreach($regArr as $reg)
			{
				if(preg_match($reg, $html, $match)){
					$val = $match[1];
					if(in_array($filed, ['length', 'width', 'height']))
						$arr[$filed] = implode(',', array_unique(explode(',', $val)));
					if($filed == 'dipans'){
						//英文开始
						if(preg_match('/[a-zA-Z][a-zA-Z0-9]{2,}.+/', $val, $matc2)) $val = $matc2[0];
						$val = trim(preg_replace('/([\x80-\xff].*)/i','', $val));//去掉中文开始的
					}
					break;
				}
			}
			if(in_array($filed, ['engine', 'cc', 'kw'])){
				$arr['engtxts'][$filed] = trim($val);
			}else{
				$arr[$filed] = trim($val);
			}
		}

		if(empty($arr['qlunj']) && preg_match('/前轮距[：: ]*([0-9,]+)/', $html, $match)) $arr['qlunj'] = $match[1];
		if(empty($arr['hlunj']) && preg_match('/后轮距[：: ]*([0-9,]+)/', $html, $match)) $arr['hlunj'] = $match[1];

		$arr['paifang'] = $arr['paifang'].' '.$arr['paifang2'];
		unset($arr['paifang2']);

		$arr['gxb_code_show'] = trim(preg_replace('/([\x80-\xff].*)/i','', $arr['gxb_code_show']));
		$arr['gxb_code'] = LibFc::FormatNum($arr['gxb_code_show']);

		$arr = $this->formatInfo($html, $arr, $site);
		return LibFc::ReturnData(true, $arr);
	}



	/**
	  * @method 备注信息提取信息
	  * @param  $remark  string [必填] 备注信息
	  * @author soul
	  * @copyright 2022/11/17
	  * @return 
	  */
	public function formatRemarkInfo($remark)
	{
		$arr = ['dianchi'=>''];
		$reArr = ["（"=>'(',"）"=>')',"；"=>";","、"=>";", '。'=>'.', '：'=>':',"\r\n"=>"\n",
			'储能装置的种类为'=>'储能装置种类:',
			'装置种类为'=>'储能装置种类:',
			'储能装置为'=>'储能装置种类:',
			'生产企业为'=>'生产企业:',
			'储能装置:种类为'=>'储能装置种类:',
			'离子电 池'=>'离子电池',
			'锂离 子'=>'锂离子',
			'锂离,子'=>'锂离子',
			'三元材料锂'=>'三元锂',
			'三元(镍钴锰)'=>'三元镍钴锰',
			'三元材料锂离子蓄电池(镍钴锰)'=>'三元镍钴锰锂离子电池',
			'锂离子(镍钴锰)动力蓄电池'=>'镍钴锰锂离子电池',
			'锂离子动力蓄电池(镍钴锰酸锂蓄电池)'=>'镍钴锰酸锂离子电池',
			'锂离子动力蓄电池(磷酸铁锂)'=>'磷酸铁锂离子动力蓄电池',
			'锂离子动力蓄电池(镍钴锰酸锂电池)'=>'镍钴锰酸锂离子电池',
			'锂离子动力蓄电池(镍钴锰酸锂离子电池)'=>'镍钴锰酸锂离子电池',
			'三元圆柱18650动力蓄电池'=>'三元圆柱电池',
			'磷酸铁里蓄电池'=>'磷酸铁锂电池',
			'铅酸地动力'=>'铅酸动力',
		];
		$remark = strtr($remark, $reArr);

		$strMatchArr =[
			'dianchi'=>['NMC锂三元系二次电池','三元动力圆柱锂电子电池','三元圆柱电池', '三元动力电池','三元动力蓄电池','三元复合锂离子材料','三元复合锂离子电池','三元材料动力蓄电池','三元材料电池','三元材料锂动力电池','三元材料锂电池','三元材料锂离子','三元材料锂离子动力电池','三元材料锂离子动力蓄电池','三元材料锂离子电池','三元材料锂离子蓄电池','三元材料锂蓄电池','三元电池','三元系动力电池','三元系统动力电池','三元聚合物电池','三元能量型电池','三元能量型蓄电池','三元蓄电池','三元软包锂离子动力电池','三元锂动力电池','三元锂动力蓄电池','三元锂子电池','三元锂材料离子电池','三元锂电','三元锂电池','三元锂离子动力电池','三元锂离子动力畜电池','三元锂离子动力蓄电池','三元锂离子电池','三元锂离子蓄电池','三元锂蓄电池','三元锂锂离子动力蓄电池','三元锂锂离子电池','三元锂锂离子蓄电池','三元锰酸锂动力电池','三元锰酸锂复合材料','三元锰酸锂复合材料电池','三元锰酸锂电池','三元锰酸锂蓄电池','三元镍钴锰酸锂复合材料电池','三元镍钴锰酸锂复合蓄电池','三元镍钴锰酸锂材料电池','三元镍钴锰酸锂电池','三元镍钴锰酸锂离子蓄电池','三元镍钴锰酸锂蓄电池','三元镍钴锰酸锂锂离子电池','三元镍钴锰锂离子蓄电池','免维护铅酸电池','免维护铅酸蓄电池','分体式磷酸铁锂电池','动力用锂离子蓄电池','动力锂离子电池','动力锂离子蓄电池','复合锂离子电池','复合锰酸锂动力蓄电池','多元复合材料锂离子电池','多元复合材料锂离子蓄电池','多元复合锂动力蓄电池','多元复合锂电池','多元复合锂离子动力电池','多元复合锂离子电池','多元复合锂蓄电池','多元复合锂锂电池','多相镍锰锂蓄电池','富锂锰电池','混合三元锂动力蓄电池','混合三元锂电池','混合三元锂离子材料','混合固液电解质锂离子电池','电动汽车用铅酸蓄电池','电动汽车用锂离子蓄电池','电容型镍氢动力电池','电池类型为锂离子动力电池','磷酸亚铁锂动力电池','磷酸亚铁锂电池','磷酸亚铁锂蓄电池','磷酸铁理电池','磷酸铁蓄电池','磷酸铁钒锂离子蓄电池','磷酸铁钴锂电池','磷酸铁锂体系电池','磷酸铁锂动力电池','磷酸铁锂动力蓄电','磷酸铁锂动力蓄电池','磷酸铁锂动力锂离子电池','磷酸铁锂电池','磷酸铁锂电池动力电池','磷酸铁锂离子动力电池','磷酸铁锂离子动力蓄电池','磷酸铁锂离子电池','磷酸铁锂离子蓄电池','磷酸铁锂蓄电池','磷酸铁锂蓄电电池','磷酸铁锂蓄锂蓄电池','磷酸铁锂锂离子','磷酸铁锂锂离子动力电池','磷酸铁锂锂离子动力蓄电池','磷酸铁锂锂离子电池','磷酸铁锂锂离子蓄电池','磷酸铁锂锂锂离子动力电池','磷酸锂电池','磷酸锂蓄电池','磷酸锂锂离子动力电池','磷铁锂动力电池','纳米磷酸铁锂电池','纳米磷酸铁锂蓄动力电池','纳米高功率多元锂离子电池','聚合物动力锂离子电池','聚合物锂离子电池','酸铁锂离子动力蓄电池','酸铁锂蓄电池','金属氢化物镍动力蓄电池','金属氢化物镍蓄电池','钛酸锂动力电池','钛酸锂电池','钛酸锂离子电池','钛酸锂蓄电池','铅酸免维护蓄电池','铅酸动力电池','铅酸电池','铅酸蓄电池','锂动力蓄电池','锂电池','锂电池动力蓄电池','锂磷酸铁锂蓄电池','锂离力蓄电池','锂离子动力电池','锂离子动力畜电池','锂离子电池','锂离子蓄电池','锂聚合物动力电池','锰基多元复合氧化物锂离子动力电池','锰系三元锂电池','锰系锂离子电池','锰酸锂动力型锂离子电池','锰酸锂动力电池','锰酸锂动力蓄电池','锰酸锂动力锂离子电池','锰酸锂材料动力蓄电池','锰酸锂材料锂离子','锰酸锂材料锂离子电池','锰酸锂电池','锰酸锂离子动力蓄电池','锰酸锂离子电池','锰酸锂离子蓄电池','锰酸锂蓄电池','锰酸锂锂离子动力电池','锰酸锂锂离子电池','锰钴镍酸锂动力蓄电池','镍钴锰+镍钴铝混合锂离子电池','镍钴锰三元电池','镍钴锰三元锂电池','镍钴锰三元锂离子动力电池','镍钴锰三元锂离子动力蓄电池','镍钴锰三元锂离子电池','镍钴锰三元锂离子蓄电池','镍钴锰三元锂蓄电池','镍钴锰三元锂锂离子','镍钴锰三元锂锂离子动力电池','镍钴锰酸三元锂电池','镍钴锰酸锂三元复合蓄电池','镍钴锰酸锂三元蓄电池','镍钴锰酸锂材料锂离子动力电池','镍钴锰酸锂材料锂离子电池','镍钴锰酸锂电池','镍钴锰酸锂离子动力蓄电池','镍钴锰酸锂蓄电池','镍钴锰酸锂锂离子动力蓄电池','镍钴锰锂电池','镍钴锰锂离子动力电池','镍钴锰锂离子电池','阀控密封式铅酸蓄电池','高能锂离子动力电池','高能镍碳电容电池','高镍三元复合蓄电池', '磷酸铁锂', '三元锂离子材料', '三元锰酸锂', '三元锂离子','铅酸密封','镍钴锰酸锂', '锂离子','超级电容','钛酸锂', '镍钴锰锂', '磷酸亚铁锂','锰酸锂', '多元复合锂','能量型','铅酸动力蓄电池','镍氢蓄电池', '磷酸鉄锂蓄电池', '镍钴锰三元聚合物锂蓄电池', '镍氢电池', '镍氢动力电池','磷酸铁钒锂']
		];
		foreach($strMatchArr as $filed=>$mvals)
		{
			uasort($mvals, function ($a, $b) {return strLen($a) < strLen($b);});//长到短排序
			foreach($mvals as $fval)
			{
				if(stripos($remark, $fval) !== false){
					$arr[$filed] = $fval;
					break;
				}
			}
		}
		//储能装置种类/生产企业:氧化锂铁磷电池
		$allTempReg = [
			'dianchi'=>[
				'/储能装置[^:]*种类[^:]*:([^\/\,\;\.]{9,99})[\/\,\;\.\: ]/iUs',
				'/储能.*类型[^:]*::([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/储能.*种类[^:]*::([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/电池种类[^:]*::([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/蓄电池为:([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/动力电池为:([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/电池类型\/生产企业:([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/动力蓄电池种类为:([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/电池类型[^:]*::([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/电池种类[^:]*::([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/蓄电池:([^\/\,\;\.]{9,99}电池)/iUs',
				'/种类\/生产企业::([^\/\,\;\.]{9,99})[\/\,\;\.]/iUs',
				'/使用([^\/\,\;\.]{9,99}电池)/iUs',
				'/采用([^\/\,\;\.]{9,99}电池)/iUs',
				'/选用([^\/\,\;\.]{9,99}电池)/iUs',
				'/装配([^\/\,\;\.]{9,99}电池)/iUs',
				'/\d[\.\,]([^\/\,\;\.]{9,99}电池)/iUs',
			],
		];
		foreach($allTempReg as $filed=>$tRegArr)
		{
			if(!empty($arr[$filed])) continue;
			foreach($tRegArr as $tReg)
			{
				if(preg_match($tReg, $remark, $match))
				{
					$fval = trim($match[1]);
					$len = mb_strlen($fval, 'utf-8');
					if($filed == 'dianchi'){
						if($len < 3 || $len > 25 || preg_match('/[0-9a-zA-Z]{3,}/', $fval, $match) || stripos($fval, '生产') !== false
							|| stripos($fval, '选装') !== false || stripos($fval, '公司') !== false || stripos($fval, '供应') !== false
							|| in_array($fval, ['功率型', '电池'])
						) 
							$fval = '';
					}
					if(!empty($fval))
					{
						$arr[$filed] = $fval;
						break;
					}
				}
			}
		}
		if(!empty($arr['dianchi']))
		{
			if($arr['dianchi'] == '磷酸铁锂动力蓄电') $arr['dianchi'] = '磷酸铁锂电池';
			if($arr['dianchi'] == '三元锂电') $arr['dianchi'] = '三元锂电池';
			$redianchi = ['复合材料电池'=>'电池', '锂材料电池'=>'电池', '复合电池'=>'电池', '动力畜电池'=>'电池','蓄电电池'=>'电池', '锂离子材料'=>'锂离子','动力蓄电池'=>'电池', '动力电池'=>'电池', '蓄电池'=>'电池'];
			$arr['dianchi'] = strtr($arr['dianchi'], $redianchi);

			if(!empty($arr['dianchi']) && stripos($arr['dianchi'], '电池') === false && (
				in_array($arr['dianchi'], ['铅酸密封','超级电容','能量型', '三元镍钴锰']) || stripos($arr['dianchi'], '锂') !== false
			))	$arr['dianchi'] .= '电池';

			if(in_array($arr['dianchi'], ['电池'])) $arr['dianchi'] = '';
		}
		return LibFc::ReturnData(true, $arr);
	}
		

	//gbk转utf-8 提取主要html
	public function getCn357PageMain($html, $charset = '')
	{
		if(stripos($charset, 'UTF-8') === false) 
			if($thtml = iconv('GBK', 'UTF-8', $html)) $html = $thtml;
		$regArr = [
			'/(<table[^>]+listTable[^>].*)<div class="mCon mt30/iUs',
		];
		foreach($regArr as $reg)
		{
			if(preg_match($reg, $html, $match))
			{
				if(stripos($match[1], '公告型号') && stripos($match[1], '整备质量'))
				{
					$html = $match[1];
					if(stripos($html, '<body>') === false)
					{
						$html = '<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><link rel="stylesheet" type="text/css" href="https://www.paojd.cn/static/css/ggcn357.css"><body>
						'.$match[1].'
						</body></html>';
					}
					break;
				}
			}
		}
		return $html;
	}

	//采集商车网 中车网数据
	public function catchSite($site, $url, $post = [])
    {
		if($site == 'cn357')
		{
			$LibHttp = new LibHttp();
			$LibHttp->timeout = 30;
			$html = $LibHttp->fetch($url, $post);
			if($thtml = iconv('GBK', 'UTF-8', $html)) $html = $thtml;
			return $html;
		}
		else if($site == 'chinacar')
		{
			$LibHttp = new LibHttp();
			$LibHttp->timeout = 60;
			$LibHttp->httpheader = [
				'Cookie: PHPSESSID=0n9mui8t8gk686d8tu16r97t34; Hm_lvt_6c1a81e7deb77ce536977738372f872a=1651717231,1653097678; rel_search=1; clcp_list=491924%7C562833%7C; Hm_lpvt_6c1a81e7deb77ce536977738372f872a=1653104103',
				'Referer: http://chinacar.com.cn/search.html'
			];
			if(empty($this->catchSiteDaili[$site])) $html = $LibHttp->fetch($url, $post);
			if(!empty($this->catchSiteDaili[$site]) || $html == '404 3')
			{//代理再抓一次
				$OthBase = new OthBase();
				$dailires = $OthBase->dailiIp('get', $site);
				if(!empty($dailires['data']))
				{
					$daili = $dailires['data'];
					$LibHttp->proxyuse = true;
					$LibHttp->proxyiplist = [$daili['ip'].':'.$daili['port']];
					$html = $LibHttp->fetch($url, $post);
					if($html == '404 3' || stripos($html, 'Connection was reset') !== false)
						$OthBase->dailiIp('del', $site, $daili['ip']);
					$this->catchSiteDaili[$site] = 1;
				}
			}
			return $html;
		}
		else if($site == 'cntruck')
		{
			$LibHttp = new LibHttp();
			$LibHttp->timeout = 30;
			$html = $LibHttp->fetch($url, $post);
			return $html;
		}
	}
	

	/**
	  * @method 采集指定来源ID或者链接的公告并入库
	  * @param  $fromid  int [必填] 指定ID
	  * @param  $url  string [必填] 链接地址
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function updateGgByCatch($site, $fromid = 0, $caturl = '', $type = 'gxb')
	{
		$siteDir = mvc::$cfg['GGDIR'].$site.'/';
		if($type == 'dipan') $siteDir .= 'dipan/';
		LibDir::CreateDir($siteDir);
		$mgs = '';
		$dataArr = [];
		if($site == 'cn357')
		{
			if($type == 'dipan') return LibFc::ReturnData(false, '尚未支持底盘');
			if(empty($caturl)){
				$caturl = 'https://www.cn357.com/notice'.$fromid.'_BJ'.rand(600, 799).'HXL';
			}else if(preg_match('/\/notice(\d+)\_.*/', $caturl, $match)){
				$fromid = $match[1];
			}else{
				$mgs = '#error#'.$caturl.'无法匹配ID';
			}
		}
		else if($site == 'chinacar')
		{
			if($type == 'dipan'){
				if(empty($caturl)){
					$caturl = 'http://www.chinacar.com.cn/ggcx_new/search_dp_view.html?id='.base64_encode($fromid);
				}else if(preg_match('/id=([^&]+)/', $caturl, $match)){
					$fromid = base64_decode($match[1]);
					$caturl = 'http://www.chinacar.com.cn/ggcx_new/search_dp_view.html?id='.base64_encode($fromid);
				}else{
					$mgs = '#error#'.$caturl.'无法匹配ID';
				}
				$from_url = 'http://www.chinacar.com.cn/ggcx_new/search_dp_view.html?id='.base64_encode($fromid);
			}else{
				if(empty($caturl)){
					$caturl = 'http://www.chinacar.com.cn/Home/GonggaoSearch/GonggaoSearch/search_param/id/'.base64_encode($fromid);
				}else if(preg_match('/id=([^&]+)/', $caturl, $match)){
					$fromid = base64_decode($match[1]);
					$caturl = 'http://www.chinacar.com.cn/Home/GonggaoSearch/GonggaoSearch/search_param/id/'.base64_encode($fromid);
				}else{
					$mgs = '#error#'.$caturl.'无法匹配ID';
				}
				$from_url = 'http://chinacar.com.cn/ggcx_new/search_view.html?id='.base64_encode($fromid);
			}
		}
		$gbid = 0;
		if(!empty($fromid))
		{
			$realhtml = '';
			if($site == 'chinacar' && $type != 'dipan')
			{//先判断页面是否存在
				$localUrl = 'http://192.168.1.177/data/chinacar.com.cn/'.floor($fromid/10000).'/'.$fromid.'_param.html';
				$LibHttp = new LibHttp();
				$realhtml = $LibHttp->fetch($localUrl);
				if(stripos($realhtml, "公告型号") === false)
				{
					$realhtml = '';
					$html = $this->catchSite($site, $from_url);
					if(stripos($html, "- 查询列表- <font color='#FF0000'></font>"))
						$mgs = '#null#无数据';
					else if(stripos($html, '查询列表') === false)
						$mgs = '#error#采集异常'.$from_url.'=>'.$localUrl;
				}
			}
			
			if(empty($mgs))
			{
				if(empty($realhtml))
					$html = $this->catchSite($site, $caturl);
				else	
					$html = $realhtml;

				if((stripos($html, '公告型号') || stripos($html, '>底盘型号：</td>')) && stripos($html, '整备质量'))
				{
					if($site == 'cn357')
					{
						$html = $this->getCn357PageMain($html, 'utf-8');
						$res = $this->formatGgByCn357($html, $type);
						$dataArr = $res['data'];
						$dataArr['from_url'] = 'https://www.cn357.com/notice'.$fromid.'_'.$dataArr['gxb_code'];
					}
					else 
					{
						$res = $this->formatGgByChinacar($html, $type);
						$dataArr = $res['data'];

						//中车网底盘详情页没有批次
						if(!empty($dataArr['gxb_code_show']) && empty($dataArr['pici']) && $site == 'chinacar' && $type == 'dipan'){
							$dataArr['pici'] = 0;
							$picipost = [
								'dpxh'=>$dataArr['gxb_code_show'],
								'dpmc'=>'',
								'dpsb'=>'', 
								'lts'=>'', 
								'zs'=>'', 
								'zj'=>'',  
								'pc'=>'', 
								'sbdh'=>'',  
								'fdj'=>'', 
								'fdjqy'=>'',  
								's_1'=>'',  
								'ss_1'=>1,
								's_2'=>'', 
								'ss_2'=>1,
								'page'=>1,
								'start'=>0,
								'limit'=>400
							];
							$picihtml = $this->catchSite($site, 'http://www.chinacar.com.cn/Home/GonggaoSearch/GonggaoSearch/search_dp_json?_dc='.$this->getMilliseconds(), $picipost);
							if(preg_match('/\'pc\'\:\'(\d+)\',\'tarid\'\:\'([^\']+)\'/', $picihtml, $match)){
								if($match[2] == base64_encode($fromid)){
									$dataArr['pici'] = $match[1];
									$html = preg_replace('/(详细参数<\/td>\s*<\/tr>\s*)/iu', '$1<tr><td>批次:</td><td>'.$dataArr['pici'].'</td></tr>', $html);
									if(stripos($html, '批次') === false) $html .= '<table><tr><td>批次:</td><td>'.$dataArr['pici'].'</td></tr></table>';
								}
							}
						}
						
						$dataArr['from_url'] = $from_url;
					}
					$gbres = $this->updateGgInfo($site, $fromid, $dataArr, $type);
					if(!empty($gbres['data']))
					{
						$gbid = $gbres['data'];
						$newDir = $siteDir.$dataArr['pici'].'/';
						$newFile = $newDir.$fromid.'.html';
						@mkdir($newDir);
						file_put_contents($newFile, $html);
						$mgs = '';
					}else if($site == 'chinacar' && $type == 'dipan' && stripos($html, '>底盘型号') !== false){
						$mgs = '#null#不存在';
					}else{
						$mgs = '#error#有公告型号，无法提取信息';
					}
				}
				else if($site == 'cn357' && stripos($html, '公告车型不存在或者已经被删除'))
				{
					$mgs = '#null#不存在或者已经被删除';
				}
				else
				{
					$mgs = '#error#采集异常2'.$caturl.'=>'.$localUrl.'=>'.$html;
				}
			}
		}
		if(stripos($mgs, '#error#') === 0)
			$this->add('gxb_error', ['ge_site'=>'cn357', 'ge_from_id'=>$fromid, 'ge_url'=>$caturl, 'ge_atime'=>time(), 'ge_html'=>$html]);
		return LibFc::ReturnData(true, ['msg'=>$mgs, 'gbdata'=>$dataArr, 'gbid'=>$gbid]);
	}

	public function getMilliseconds() {
		list($msec, $sec) = explode(' ', microtime());
		return (int)($sec * 1000 + $msec * 1000);
	}


	/**
	  * @method 通过现有缓存更新
	  * @param  $gbid  int [必填] 指定ID
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function updateGgByCache($gbid)
	{
		$res = $this->get('gxb_base', ['*'], sprintf(" and gb_id=%d", $gbid), true);
		if(empty($res['data'])) return LibFc::ReturnData(true);
		$gbArr = $res['data'];
		$LibHttp = new LibHttp();
		$html = $LibHttp->fetch($gbArr['gb_url']);
		if(stripos($html, '型号') && stripos($html, '轴距') && stripos($html, '整备质量'))
		{
			$res = $this->formatGgByHtml($gbArr['gb_from'], $html, $gbArr['gb_type']);
			if(is_array( $res['data']))
			{
				$dataArr = array_merge($gbArr, $res['data']);
				$res = $this->updateGgInfo($gbArr['gb_from'], $gbArr['gb_from_id'], $dataArr, $gbArr['gb_type']);
				return LibFc::ReturnData(true, ['gbdata'=>$dataArr, 'gbid'=>$res['data']]);
			}
		}
		return LibFc::ReturnData(false, $gbArr['gb_url'].'提取数据失败');
	}


	
	/**
	  * @method 将公告内容入库
	  * @param  $site  string [必填] 站点
	  * @param  $fromid  string [必填] 来源ID  王力  pici_gxb 转大写
	  * @param  $dataArr array [必填] 数据
	  * @param  $type string [必填] 型号:gxb  底盘:dipan
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function updateGgInfo($site, $fromid, $dataArr, $type = 'gxb')
	{
		$gb_id = 0;
		if(in_array($site, $this->ggSites) && !empty($fromid) && !empty($dataArr['gxb_code']))
		{
			if($type != 'dipan') $type = 'gxb';
			//格式化唯一键
			$renullkey = [' '=>'','　'=>'', 'Ⅱ'=>'II'];
			$this->YpwDb->Begin();
			$addArr = [
				'gb_type'=>$type,
				'gb_from'=>$site,
				'gb_from_id'=>$fromid,
				'gb_pici'=>(int)$dataArr['pici'],
				'gb_brand'=>$dataArr['brand'],
				'gb_gxb_code'=>$dataArr['gxb_code'],
				'gb_gxb_code_show'=>$dataArr['gxb_code_show'],
				'gb_gtype'=>$dataArr['gtype'],
				'gb_vtype'=>$dataArr['vtype'],
				'gb_etime'=>time()
			];
			
			//底盘
			if($addArr['gb_gtype'] == 7) $addArr['gb_dpgxb_chk'] = -1;

			if(isset($dataArr['fuel'])) $addArr['gb_fuel'] = $dataArr['fuel'];
			if(isset($dataArr['paifang'])) $addArr['gb_paifang'] = $dataArr['paifang'];
			if(isset($dataArr['from_url'])) $addArr['gb_from_url'] = $dataArr['from_url'];
			if(isset($dataArr['publish'])) $addArr['gb_publish'] = empty($dataArr['publish'])? 0: date('Ymd', strtotime($dataArr['publish']));
			$addArr['gb_url'] = !empty($dataArr['gb_url'])? $dataArr['gb_url'] : mvc::$cfg['urls']['gCom'].$site.'/'.($type == 'dipan'? 'dipan/': '').$dataArr['pici'].'/'.$fromid.'.html';
			
			$othres = $this->formatRemarkInfo($dataArr['remark']);
			$othres = $othres['data'];
			$addArr['gb_dianchi'] = $othres['dianchi'];

			$hasEngs = [];
			$hasSizes = [];
			$hasParams = [];
			$res = $this->get('gxb_base', ['gb_id'], sprintf(" and gb_type='%s' and gb_from='%s' and gb_from_id='%s'", $type, $site, $fromid), true);
			if(!empty($res['data']))
			{
				$gb_id = $res['data']['gb_id'];
				$this->set('gxb_base', $addArr, sprintf(" and gb_id=%d", $gb_id));
				
				//已有发动机
				$res = $this->get('gxb_engine', ['ge_id id','ge_engine_format unikey'], sprintf(" and ge_gb_id=%d", $gb_id));
				foreach($res['data'] as $ev)
				{
					//$unikey = strtoupper(strtr($ev['unikey'], $renullkey));
					$unikey = $ev['unikey'];
					$hasEngs[$unikey] = $ev['id'];
				}
				
				//已有尺寸
				$res = $this->get('gxb_size', ['gs_id id',"concat(gs_length, '@', gs_width, '@', gs_height) unikey"], sprintf(" and gs_gb_id=%d", $gb_id));
				foreach($res['data'] as $ev)
				{
					$hasSizes[$ev['unikey']] = $ev['id'];
				}

				//已有参数
				$res = $this->get('gxb_params', ['gp_id id',"concat(gp_gl_code, '@', gp_value) unikey"], sprintf(" and gp_gb_id=%d", $gb_id));
				foreach($res['data'] as $ev)
				{
					$unikey = strtoupper(strtr($ev['unikey'], $renullkey));
					$hasParams[$unikey] = $ev['id'];
				}
			}
			else 
			{
				$res = $this->add('gxb_base', $addArr);
				$gb_id = $res['data'];
			}
			
			//备注信息
			$this->replace('gxb_exinfo', ['gr_gb_id'=>$gb_id, 'gr_remark'=>$dataArr['remark']]);
			
			//处理发动机
			$newEngs = [];
			if(is_array($dataArr['engines']))
			{
				foreach($dataArr['engines'] as $tv)
				{
					$tvals = ['ge_gb_id'=>$gb_id, 'ge_engine'=>$tv['engine'], 'ge_engine_format'=>LibFc::FormatEng($tv['engine']), 'ge_kw'=>$tv['kw'], 'ge_cc'=>$tv['cc']];
					if(preg_match('/^\d+\.?\d*$/', $tvals['ge_kw'], $match))
					{
						if(isset($tv['ed_kw'])) $tvals['ge_ed_kw'] = round($tv['ed_kw'],2);
						if(isset($tv['jgl_kw'])) $tvals['ge_jgl_kw'] = round($tv['jgl_kw'],2);
						if($tvals['ge_ed_kw'])
						{//额定功率最大
							$rate = $tvals['ge_kw'] / $tvals['ge_ed_kw'];
							if($rate > 1 || $rate < 0.75) $tvals['ge_ed_kw'] = 0;
						}

						if($tvals['ge_jgl_kw'])
						{//额定功率最大
							$rate = $tvals['ge_jgl_kw'] / $tvals['ge_kw'];
							if($rate > 1 || $rate < 0.75) $tvals['ge_jgl_kw'] = 0;
						}
						if($tvals['ge_ed_kw'] && $tvals['ge_jgl_kw']){
							$rate = $tvals['ge_jgl_kw'] / $tvals['ge_ed_kw'];
							if($rate > 1){
								$tvals['ge_ed_kw'] = 0;
							}else if($rate < 0.75) {
								$tvals['ge_jgl_kw'] = 0;
							}
						}
						
						if(!empty($tvals['ge_ed_kw']) && empty($tvals['ge_jgl_kw']) && $tvals['ge_ed_kw'] > $tvals['ge_kw']){
							$tvals['ge_jgl_kw'] = $tvals['ge_kw'];//净功率为空，额定功率大于文本功率
						}else if(!empty($tvals['ge_jgl_kw']) && empty($tvals['ge_ed_kw']) && $tvals['ge_jgl_kw'] < $tvals['ge_kw']){
							$tvals['ge_ed_kw'] = $tvals['ge_kw'];//额定为空，净功率小于文本功率
						}

						if(isset($tvals['ge_ed_kw']) && empty($tvals['ge_ed_kw'])) $tvals['ge_ed_kw'] = '';
						if(isset($tvals['ge_jgl_kw']) && empty($tvals['ge_jgl_kw'])) $tvals['ge_jgl_kw'] = '';
					}else{
						if(isset($tv['ed_kw'])) $tvals['ge_ed_kw'] = '';
						if(isset($tv['jgl_kw'])) $tvals['ge_jgl_kw'] = '';
					}
					$unikey = $tvals['ge_engine_format'];
					$newEngs[$unikey] = $tvals;
				}
			}

			foreach($newEngs as $unikey=>$tvals)
			{
				if(!empty($hasEngs[$unikey])){
					$this->set('gxb_engine', $tvals, sprintf(" and ge_id=%d", $hasEngs[$unikey]));
				}else{
					$this->add('gxb_engine', $tvals);
				}
			}
			$delIds = [];
			foreach($hasEngs as $unikey=>$ge_id)
			{
				if(empty($newEngs[$unikey])) $delIds[] = $ge_id;
			}
			if(!empty($delIds)) $this->del('gxb_engine', sprintf(" and ge_id in (%s)", implode(',', $delIds)));
			
			//底盘
			$dipanFlag = false;
			if(is_array($dataArr['dipans'])){
				$this->updateGgDipan($gb_id, $dataArr['dipans']);
				$dipanFlag = true;
			}else if($site == 'chinacar'){
					//底盘文件是否存在
				$dipanfile = mvc::$cfg['GGDIR'].$site.'/dipan/'.$addArr['gb_pici'].'/'.$addArr['gb_from_id'].'.html';
				if(file_exists($dipanfile)){
					$stxt = file_get_contents($dipanfile);
					$stxt = json_decode($stxt, true);
					if(is_array($stxt)){
						$dataArr['dipans'] = [];
						if(!empty($stxt['dpxh'])) $dataArr['dipans'][] = $stxt['dpxh'];
						$this->updateGgDipan($gb_id, $dataArr['dipans']);
						$dipanFlag = true;
					}
				}
			}
			
			$newSizeArr = [];
			$addSizeArr = [];
			foreach(explode(',', $dataArr['length']) as $lv)
			{
				$lv = (float) $lv;
				foreach(explode(',', $dataArr['width']) as $wv)
				{
					$wv = (float) $wv;
					foreach(explode(',', $dataArr['height']) as $hv)
					{
						$hv = (float) $hv;
						if($lv > 0 && $wv > 0 && $hv > 0){
							$unikey = $lv.'@'.$wv.'@'.$hv;
							$newSizeArr[$unikey] = [
								'gs_gb_id'=>$gb_id,
								'gs_length'=>$lv,
								'gs_width'=>$wv,
								'gs_height'=>$hv
							];
							if(empty($hasSizes[$unikey])) $addSizeArr[$unikey] = $newSizeArr[$unikey];
						}
					}
				}
			}
			$addSizeArr = array_values($addSizeArr);
			if(!empty($addSizeArr))
				$this->addAny('gxb_size', array_keys($addSizeArr[0]), $addSizeArr);
			
			$delIds = [];
			foreach($hasSizes as $unikey=>$gs_id)
			{
				if(empty($newSizeArr[$unikey])) $delIds[] = $gs_id;
			}
			if(!empty($delIds)) $this->del('gxb_size', sprintf(" and gs_id in (%s)", implode(',', $delIds)));

			//处理参数
			$res = $this->get('gxb_label', ['gl_code']);
			$glcodes = array_column($res['data'], 'gl_code');
			$newParams = [];
			$addParams = [];
			foreach($glcodes as $glcode)
			{
				if(empty($dataArr[$glcode])) continue;
				foreach(explode(',', $dataArr[$glcode]) as $val)
				{
					if(empty($val) || in_array($val, ['_', '-', '/', ';'])) continue;
					$val = trim($val);
					$unikey = strtoupper(strtr($glcode.'@'.$val, $renullkey));
					$newParams[$unikey] = ['gp_gb_id'=>$gb_id, 'gp_gl_code'=>$glcode, 'gp_value'=>$val];
					if(empty($hasParams[$unikey])) $addParams[] = $newParams[$unikey];
				}
			}
			
			if(!empty($addParams))
				$this->addAny('gxb_params', array_keys($addParams[0]), $addParams);
			
			$delIds = [];
			foreach($hasParams as $unikey=>$gp_id)
			{
				if(empty($newParams[$unikey])) $delIds[] = $gp_id;
			}
			if(!empty($delIds)) $this->del('gxb_params', sprintf(" and gp_id in (%s)", implode(',', $delIds)));
			//删除缓存
			$this->del('stand_gxb_info', sprintf(" and sgi_gxb_code='%s'", $addArr['gb_gxb_code']));
			if($type == 'dipan'){
				$sqlArr = [
					//额定功率
					sprintf("UPDATE `gxb_base` a1 
					JOIN `gxb_dipan` b1 ON b1.gd_gb_id = a1.gb_id and b1.gd_dpgxb_code ='%s'
					JOIN `gxb_engine` c1 ON a1.gb_id = c1.ge_gb_id AND a1.gb_type = 'gxb' AND c1.ge_ed_kw = ''
					JOIN (
					SELECT gb_gxb_code, ge_engine,ge_kw, ge_ed_kw FROM `gxb_base` 
					JOIN `gxb_engine` ON gb_id = ge_gb_id AND gb_type = 'dipan' AND gb_gxb_code ='%s' 
					WHERE ge_ed_kw != '' GROUP BY gb_gxb_code, ge_engine, ge_kw
					) dipan ON dipan.gb_gxb_code = b1.gd_dpgxb_code AND dipan.ge_engine = c1.ge_engine AND dipan.ge_kw = c1.ge_kw
					SET c1.ge_ed_kw = dipan.ge_ed_kw", $addArr['gb_gxb_code'], $addArr['gb_gxb_code']),
					//净功率
					sprintf("UPDATE `gxb_base` a1 
					JOIN `gxb_dipan` b1 ON b1.gd_gb_id = a1.gb_id and b1.gd_dpgxb_code ='%s'
					JOIN `gxb_engine` c1 ON a1.gb_id = c1.ge_gb_id AND a1.gb_type = 'gxb' AND c1.ge_jgl_kw = ''
					JOIN (
					SELECT gb_gxb_code, ge_engine,ge_kw, ge_jgl_kw FROM `gxb_base` 
					JOIN `gxb_engine` ON gb_id = ge_gb_id AND gb_type = 'dipan' AND gb_gxb_code ='%s' 
					WHERE ge_jgl_kw != '' GROUP BY gb_gxb_code, ge_engine, ge_kw
					) dipan ON dipan.gb_gxb_code = b1.gd_dpgxb_code AND dipan.ge_engine = c1.ge_engine AND dipan.ge_kw = c1.ge_kw
					SET c1.ge_jgl_kw = dipan.ge_jgl_kw", $addArr['gb_gxb_code'], $addArr['gb_gxb_code'])
				];
				$this->exeAnySql($sqlArr);
			}else if($dipanFlag){
				$sqlArr = [
					//额定功率
					sprintf("UPDATE `gxb_base` a1 
					JOIN `gxb_dipan` b1 ON b1.gd_gb_id = a1.gb_id and a1.gb_gxb_code ='%s'
					JOIN `gxb_engine` c1 ON a1.gb_id = c1.ge_gb_id AND a1.gb_type = 'gxb' AND c1.ge_ed_kw = ''
					JOIN (
					SELECT gb_gxb_code, ge_engine,ge_kw, ge_ed_kw FROM `gxb_base` 
					JOIN `gxb_engine` ON gb_id = ge_gb_id AND gb_type = 'dipan'
					WHERE ge_ed_kw != '' and gb_gxb_code in (
						select gd_dpgxb_code from `gxb_base` join `gxb_dipan` ON gd_gb_id = gb_id where gb_gxb_code = '%s'
					) GROUP BY gb_gxb_code, ge_engine, ge_kw
					) dipan ON dipan.gb_gxb_code = b1.gd_dpgxb_code AND dipan.ge_engine = c1.ge_engine AND dipan.ge_kw = c1.ge_kw
					SET c1.ge_ed_kw = dipan.ge_ed_kw", $addArr['gb_gxb_code'], $addArr['gb_gxb_code']),
					//净功率
					sprintf("UPDATE `gxb_base` a1 
					JOIN `gxb_dipan` b1 ON b1.gd_gb_id = a1.gb_id and a1.gb_gxb_code ='%s'
					JOIN `gxb_engine` c1 ON a1.gb_id = c1.ge_gb_id AND a1.gb_type = 'gxb' AND c1.ge_jgl_kw = ''
					JOIN (
					SELECT gb_gxb_code, ge_engine,ge_kw, ge_jgl_kw FROM `gxb_base` 
					JOIN `gxb_engine` ON gb_id = ge_gb_id AND gb_type = 'dipan'
					WHERE ge_jgl_kw != '' and gb_gxb_code in (
						select gd_dpgxb_code from `gxb_base` join `gxb_dipan` ON gd_gb_id = gb_id where gb_gxb_code = '%s'
					) GROUP BY gb_gxb_code, ge_engine, ge_kw
					) dipan ON dipan.gb_gxb_code = b1.gd_dpgxb_code AND dipan.ge_engine = c1.ge_engine AND dipan.ge_kw = c1.ge_kw
					SET c1.ge_jgl_kw = dipan.ge_jgl_kw", $addArr['gb_gxb_code'], $addArr['gb_gxb_code'])
				];
				$this->exeAnySql($sqlArr);
			}
			$this->YpwDb->End();
		}
		return LibFc::ReturnData(true, $gb_id);
	}

	
	/**
	  * @method 更新中车网底盘
	  * @param  $gb_id  string [必填] 
	  * @param  $dipanArr array [必填] [...]
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function updateGgDipan($gb_id, $dipanArr)
	{
		$dipanArr = array_unique($dipanArr);
		$news = [];
		foreach($dipanArr as $tv)
		{
			$add = ['gd_gb_id'=>$gb_id, 'gd_dpgxb_code'=>LibFc::FormatNum($tv), 'gd_dpgxb_code_show'=>$tv];
			if(strlen($add['gd_dpgxb_code']) >= 1)
			{
				$news[] = $add['gd_dpgxb_code'];
				$this->replace('gxb_dipan', $add);
			}
		}
		$this->set('gxb_base', ['gb_etime'=>time(), 'gb_dpgxb_chk'=>!empty($news)? 1: -1], sprintf(" and gb_id=%d", $gb_id));
		$delWhere = sprintf(" and gd_gb_id=%d", $gb_id);
		if(!empty($news)) $delWhere .= sprintf(" and gd_dpgxb_code not in ('%s')", implode("','", $news));
		$this->del('gxb_dipan', $delWhere);
		return LibFc::ReturnData(true, true);
	}

	/**
	  * @method 采集更新中车网底盘
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	function updateChinacarDipan($html)
	{
		$arr = [];
		$site = 'chinacar';
		$html = preg_replace("/'pic':'.*','zwpp/iUs", "'zwpp", $html);
		$reArr = ["'"=>'"', ',]}'=>']}','	'=>' ', ''=>''];
		$html = strtr($html, $reArr);
		$html = preg_replace("/\"\, +\"/iUs", '","', $html);
		$html = preg_replace('/""[^"]+""/iUs', '""', $html);
		$htmlArr = json_decode($html, true);
		if(is_array($htmlArr))
		{
			$siteDir = mvc::$cfg['GGDIR'].$site.'/';
			@mkdir($siteDir);
			$dipanDir = $siteDir.'dipan/';
			@mkdir($dipanDir);
			if(empty($htmlArr['topics']) && !empty($htmlArr['clxh'])) $htmlArr['topics'] = [$htmlArr];
			foreach($htmlArr['topics'] as $hvv)
			{
				$gb_from_id = base64_decode($hvv['tarid']);
				$dipanArr = [];
				if(!empty($hvv['dpxh'])) $dipanArr[] = $hvv['dpxh'];
				$res = $this->get('gxb_base', ['gb_id', 'gb_pici', 'gb_from_id'], sprintf(" and gb_type='gxb' and gb_from='%s' and gb_from_id=%d and gb_gxb_code='%s'", $site, $gb_from_id, LibFc::FormatNum($hvv['clxh'])), true);
				if(!empty($res['data']))
				{ 
					$gbArr = $res['data'];
					$endfile = $dipanDir.$gbArr['gb_pici'].'/';
					@mkdir($endfile);
					$endfile .= $gbArr['gb_from_id'].'.html';
					if(file_exists($endfile)) continue;
					file_put_contents($endfile, json_encode($hvv, JSON_UNESCAPED_UNICODE));
					$this->updateGgDipan($gbArr['gb_id'], $dipanArr);
				}
			}
			return LibFc::ReturnData(true, $htmlArr['topics']);
		}
		else
		{
			echo $html;exit;
			return LibFc::ReturnData(false, '非json'.$html);
		}
	}

	/**
	  * @method 对同同型号同发动机多功率多排量的数据进行纠正
	  * @author soul
	  * @copyright 2022/9/17
	  * @return 
	  */
	public function repairGgKwCc($gxb_show, $engine_show)
	{
		$fgxb = LibFc::FormatNum($gxb_show);
		$feng = LibFc::FormatEng($engine_show);
		$res = $this->get('gxb_engine eng JOIN gxb_base ON ge_gb_id = gb_id', ['eng.*'], sprintf(" and gb_gxb_code='%s' and ge_engine_format='%s'", $fgxb, $feng));
		$vals = ['kw'=>[], 'cc'=>[]];
		$total = ['kw'=>0, 'cc'=>0];
		$geArr = [];
		foreach($res['data'] as $v)
		{
			$geArr[$v['ge_id']] = $v;
			if(!empty($v['ge_kw'])){
				$vals['kw'][$v['ge_kw']]++;
				$total['kw']++;
			}
			
			if(!empty($v['ge_cc'])){
				$vals['cc'][$v['ge_cc']]++;
				$total['cc']++;
			}
		}
		arsort($vals['kw']);
		foreach($vals['kw'] as $val=>$count)
		{
			$vals['kw'][$val] = $count/$total['kw'];
		}
		arsort($vals['cc']);
		foreach($vals['cc'] as $val=>$count)
		{
			$vals['cc'][$val] = $count/$total['cc'];
		}

		foreach($geArr as $geid=>$gv)
		{
			$setArr = [];
			if(empty($gv['ge_kw']) || (!empty($vals['kw'][$gv['ge_kw']]) && $vals['kw'][$gv['ge_kw']] <= 0.2))
			{//为空或者占比低于30% 大概率是错误
				foreach($vals['kw'] as $val=>$vr)
				{
					if($total['kw'] > 5 && $vr >= 0.8) $setArr['ge_kw'] = $val;
					break;
				}
			}

			if(empty($gv['ge_cc']) || (!empty($vals['cc'][$gv['ge_cc']]) && $vals['cc'][$gv['ge_cc']] <= 0.2))
			{//为空或者占比低于30% 大概率是错误
				foreach($vals['cc'] as $val=>$vr)
				{
					if($total['cc'] > 5 && $vr >= 0.8) $setArr['ge_cc'] = $val;
					break;
				}
			}
			if(!empty($setArr))
			{
				$this->set('gxb_engine', $setArr, sprintf(" and ge_id=%d", $gv['ge_id']));
			}
		}
		return LibFc::ReturnData(true);
	}
	
	//格式化排放
	public function formatPaifang($val)
	{
		$val = trim($val);
		$nameToValArr =[
			'17691-2001第Ⅱ阶段,GB3847-2005'=>'国二',
			'18352.2-2001'=>'国二',
			'18352.2-2001,GB3847-1999'=>'国二',
			'18352.3-2005'=>'国三',
			'8352.2-2001'=>'国二',
			'88/77EEC,72/306EEC'=>'欧一',
			'98/69/EC'=>'欧三',
			'B17691-2001(第Ⅱ阶段),GB3847-2005'=>'国二',
			'EUROⅡ'=>'欧二',
			'GA17691-2001第Ⅱ阶段,GB3847-2005'=>'国二',
			'GB 14762-2002(第Ⅱ阶段),GB 11340-2005,GB 14763-2005,GB 18285-2005'=>'国二',
			'GB 14762-2002(第Ⅱ阶段),GB 11340-2005,GB14763-2005,GB 18285-2005'=>'国二',
			'GB 14762-2008(Ⅳ)'=>'国四',
			'GB 14762-2008(Ⅳ),GB11340-2005,GB 18285-2005,GB 14763-2005'=>'国四',
			'GB 14762-2008(Ⅳ),GB11340-2005,GB18285-2005'=>'国四',
			'GB 17691-2001(第Ⅱ阶段),GB 3847-2005'=>'国二',
			'GB 17691-2001第Ⅱ阶段,GB3847-2005'=>'国二',
			'GB 17691-2005 国 Ⅲ,GB3847-2005'=>'国三',
			'GB 17691-2005第Ⅳ阶段,GB 3847-2005'=>'国四',
			'GB 17691-2005第Ⅴ阶段,GB 3847-2005'=>'国五',
			'GB 18352.2-2001'=>'国二',
			'GB 18352.2-2001 GB 18285-2005'=>'国二',
			'GB 18352.2-2001,GB 18285-2005'=>'国二',
			'GB 18352.2-2001,GB 3847-1999'=>'国二',
			'GB 18352.2-2001,GB 3847-2005'=>'国二',
			'GB 18352.2-2001,GB18285-2005'=>'国二',
			'GB 18352.2-2001,GB3847-2005'=>'国二',
			'GB 18352.3-2005'=>'国三',
			'GB 18352.3-2005  第Ⅲ阶段'=>'国三',
			'GB 18352.3-2005 第Ⅳ阶段'=>'国四',
			'GB 18352.3-2005Ⅳ'=>'国四',
			'GB 18352.3-2005第Ⅳ阶段'=>'国四',
			'GB 18352.5-2013'=>'国五',
			'GB 3847-1999,GB17691-1999'=>'国一',
			'GB 3847-1999,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB 3847-2005,GB17691-2005第Ⅲ阶段'=>'国三',
			'GB-18352.2-2001'=>'国二',
			'GB/T14762-1993,GB14761.2-1993'=>'国一',
			'GB/T14762-93第Ⅱ实施阶段'=>'国一',
			'GB11340-2005 GB14762-2002第Ⅱ阶段,GB14763-2005,GB11340-2005'=>'国二',
			'GB11340-2005,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB11340-2005,GB14762-2002第Ⅱ阶段,GB18285-2005'=>'国二',
			'GB11340-2005,GB14762-2008 第Ⅳ阶段,GB20890-2007,GB18285-2005,GB1'=>'国四',
			'GB11340-2005,GB14762-2008 第Ⅳ阶段,GB20890-2007,GB18285-2005,GB14763-2005'=>'国四',
			'GB11340-2005,GB14763-2005,GB18258-2005,GB20890-2007,GB14762-2008'=>'国三',
			'GB11340-2005,GB14763-2005,GB18285-2005,GB14762-2002'=>'国一',
			'GB11340-2005,GB14763-2005,GB18285-2005,GB14762-2002(第Ⅱ阶段)'=>'国二',
			'GB11340-2005,GB14763-2005,GB18285-2005,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB11340-2005,GB14763-2005,GB18285-2005,GB14762-2008'=>'国四',
			'GB11340-2005,GB18285-2005,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB11340-2005,GB18285-2005,GB14762-2005'=>'国三',
			'GB11340-2005,GB18285-2005,GB14762－2002'=>'国一',
			'GB11340-2005,GB18285-2005,GB17462-2002第Ⅱ阶段'=>'国二',
			'GB11340-2005,GB18285-2005,GB17691-2005 国 Ⅳ'=>'国四',
			'GB11340-2005,GB18285-2005,GB17691-2005 国 Ⅴ'=>'国五',
			'GB11340-2005、GB18285-2000、GB14762-2002第Ⅱ阶段'=>'国二',
			'GB1352.2-2001'=>'国二',
			'GB13852.1,.2-2001,GB3847-1999'=>'国二',
			'GB13852.2-2001'=>'国二',
			'GB1476.1-1993'=>'国一',
			'GB14761'=>'国一',
			'GB14761,DB11/045'=>'国一',
			'GB14761,DB31/234'=>'国一',
			'GB14761,GB18352'=>'国一',
			'GB14761-1993'=>'国一',
			'GB14761-1993,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB14761-1999'=>'国一',
			'GB14761-1999 GB18352-2001'=>'国一',
			'GB14761-1999(达欧州Ⅱ号排放标准)'=>'国二',
			'GB14761-1999,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB14761-1999,GB3847,GB18352.2'=>'国二',
			'GB14761-1999,GB3847-1999'=>'国一',
			'GB14761-2001,GB3847-1999'=>'国一',
			'GB14761-2001第Ⅱ阶段,GB3847-1999'=>'国一',
			'GB14761-99,GB3847-99,GB18352.2-01'=>'国二',
			'GB14761.2-1993'=>'国一',
			'GB14761.2-1993,GB14761-1999'=>'国一',
			'GB14761.2-1993,GB14761.3-1993'=>'国一',
			'GB14761.2-1993,GB14762-2002'=>'国一',
			'GB14761.2-5-1993'=>'国一',
			'GB14761.2.3.4.5-1993'=>'国一',
			'GB14761.2～5-1993'=>'国一',
			'GB14761.3,.4-1993,GB14762-2002'=>'国一',
			'GB14761.3-1993,GB14761.4-1993,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB14761.5-1993,GB14762-2002第Ⅱ阶'=>'国二',
			'GB14761.5-93,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB14761.6,.7-1993,GB17691-2001'=>'国二',
			'GB14761.6-1993'=>'国一',
			'GB14761.6-1993,DB11/045-2000'=>'国一',
			'GB14762-02第Ⅱ阶段,GB14761.3-5-93'=>'国二',
			'GB14762-02第Ⅱ阶段,GB14761.3-93'=>'国二',
			'GB14762-2001第Ⅱ阶段,GB11340-2005,GB14763-2005'=>'国二',
			'GB14762-2002'=>'国一',
			'GB14762-2002 (第Ⅱ阶段)'=>'国二',
			'GB14762-2002 第Ⅱ阶段'=>'国二',
			'GB14762-2002(第Ⅱ阶段)'=>'国二',
			'GB14762-2002(第Ⅱ阶段),GB11340-2005,GB14763-2005'=>'国二',
			'GB14762-2002(第Ⅱ阶段),GB11340-2005,GB14763-2005,GB18285-2005'=>'国二',
			'GB14762-2002(第Ⅱ阶段),GB11340-2005,GB18285-2005'=>'国二',
			'GB14762-2002(第Ⅱ阶段),GB18285-2005'=>'国二',
			'GB14762-2002(第Ⅱ阶段),GB18285-2005,GB11340-2005'=>'国二',
			'GB14762-2002(第Ⅱ阶段),GB18285-2005,GB11340-2005,GB14763-2005'=>'国二',
			'GB14762-2002,GB11340-2005'=>'国一',
			'GB14762-2002,GB11340-2005,GB14763-2005'=>'国一',
			'GB14762-2002,GB11340-2005,GB14763-2005,GB18285'=>'国一',
			'GB14762-2002,GB11340-2005,GB14763-2005,GB18285-2'=>'国一',
			'GB14762-2002,GB11340-2005,GB14763-2005,GB18285-20'=>'国一',
			'GB14762-2002,GB11340-2005,GB14763-2005,GB18285-2005'=>'国一',
			'GB14762-2002,GB11340-2005,GB18285-2005'=>'国一',
			'GB14762-2002,GB11340-2005,GB18285-2005,GB14763'=>'国一',
			'GB14762-2002,GB11340-2005,GB18285-2005,GB14763-2'=>'国一',
			'GB14762-2002,GB11340-2005,GB18285-2005,GB14763-2005'=>'国一',
			'GB14762-2002,GB14761-1993'=>'国一',
			'GB14762-2002,GB14761.3-5-1993'=>'国一',
			'GB14762-2002,GB14761.3～5-1993'=>'国一',
			'GB14762-2002,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB14762-2002,GB14763-2005,GB11340-2005,GB18285'=>'国一',
			'GB14762-2002,GB18285-2005'=>'国一',
			'GB14762-2002,GB18285-2005,GB11340-2005'=>'国一',
			'GB14762-2002,GB18285-2005,GB11340-2005,GB14763-20'=>'国一',
			'GB14762-2002,GB18285-2005,GB11340-2005,GB14763-2005'=>'国一',
			'GB14762-2002,GB18285-2005,GB14763-2005,GB11340-2005'=>'国一',
			'GB14762-2002、GB14761.3-5-1993'=>'国一',
			'GB14762-2002第2阶段,GB14761.3.4.5-93'=>'国二',
			'GB14762-2002第Ⅱ阶段'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB11340-2005,GB14763-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB11340-2005,GB14763-2005,'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB11340-2005,GB14763-2005,G'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB11340-2005,GB14763-2005,GB'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB11340-2005,GB14763-2005,GB18285-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB11340-2005,GB18285-200'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB11340-2005,GB18285-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB11340-2005,GB18285-2005,GB'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761-1993'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.3-1993,GB14761.4'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.3-1993,GB14761.4-1993'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.3-1993,GB14761.4-1999'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.3-93'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.3-93,GB14761.4-1993'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.3-93,GB14761.4-1993,GB14761.5-1993'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.3-93,GB14761.4-93'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.3~.5-1993'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.4-93,GB14761.5-1993'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.5-1993'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14761.5-93'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14763-2005,GB11340-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14763-2005,GB11340-2005,GB'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB14763-2005,GB11340-2005,GB18285-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB18285-2000,GB11340-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB18285-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB18285-2005,GB11340-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB18285-2005,GB11340-2005,GB14763-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB18285-2005,GB11340-2005、GB14763-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB18285-2005,GB14763-2005,GB11340-2005'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB18352.2-01'=>'国二',
			'GB14762-2002第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB14762-2002第Ⅱ阶段;GB18285-2005;GB11340-2005'=>'国二',
			'GB14762-2002第Ⅱ阶级,GB11340-2005,GB18285-2005'=>'国二',
			'GB14762-2008(Ⅲ),GB11340-2005,GB14763-2005,GB18285-2005'=>'国三',
			'GB14762-2008(Ⅳ )'=>'国四',
			'GB14762-2008(Ⅳ),GB11340-2005,GB14763-2005,GB18285-2005'=>'国四',
			'GB14762-2008(国 Ⅲ),GB18285- 2005,GB11340- 2005,GB14763-2005'=>'国三',
			'GB14762-2008(第Ⅲ阶段),GB11340-2005,GB14763-2005,GB18285-2005'=>'国三',
			'GB14762-2008,GB11340-2005'=>'国三',
			'GB14762-2008,GB11340-2005,GB14763-2005,GB18285-2005,GB20997-2007'=>'国三',
			'GB14762-2008,GB11340-2005,GB14763-2005,GB18285-2005,GB20997-2007,GB/T17692-1999'=>'国三',
			'GB14762-2008,GB11340-2005,GB18285-2005,GB14763-2005'=>'国三',
			'GB14762-2008,GB18285-2005,GB14763-2005,GB11340-2005'=>'国三',
			'GB14762-2008Ⅲ,GB11340-2005,GB14763-2005,GB18285-2005'=>'国三',
			'GB14762-2008Ⅳ,GB11340-2005,GB14763-2005,GB18285-2005'=>'国四',
			'GB14762-2008Ⅳ,GB11340-2005,GB14763-2005,GB18285-2005,GB20890-20'=>'国四',
			'GB14762-2008Ⅳ,GB11340-2005,GB14763-2005,GB18285-2005,GB20890-2007'=>'国四',
			'GB14762-2008国 Ⅳ,GB18285- 2005,GB11340-2005'=>'国四',
			'GB14762-2008第Ⅲ阶段,GB11340-2005,GB14763-2005,GB18285-2005'=>'国三',
			'GB14762-2008第Ⅳ阶段,GB11340-2005,GB14763-2005,GB18285-2005'=>'国四',
			'GB14762-2008第Ⅳ阶段,GB11340-2005,GB18285-2005'=>'国四',
			'GB17462-2002(第Ⅱ阶段),GB18285-2005,GB11340-2005'=>'国二',
			'GB17462-2002第Ⅱ阶段,GB18285-2005,GB11340-2005'=>'国二',
			'GB17691 2001第Ⅱ阶段'=>'国二',
			'GB17691-01第Ⅱ阶段,GB14761.5-93'=>'国二',
			'GB17691-1999'=>'国一',
			'GB17691-1999 GB3847-1999'=>'国一',
			'GB17691-1999,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB17691-1999,GB3847-1999'=>'国一',
			'GB17691-1999,京DHJB3-1999'=>'国一',
			'GB17691-1999第Ⅱ阶段,GB3847-2005'=>'国一',
			'GB17691-20001第Ⅱ阶段,GB3847-2005'=>'国二',
			'GB17691-2001'=>'国二',
			'GB17691-2001   GB3847-1999'=>'国二',
			'GB17691-2001 GB3847-1999'=>'国二',
			'GB17691-2001 第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB17691-2001 第Ⅱ阶段,GB3847-2005'=>'国二',
			'GB17691-2001(2阶段),GB3847-1999'=>'国二',
			'GB17691-2001(第2阶段),GB3847-1999'=>'国二',
			'GB17691-2001(第2阶段),GB3847-2005'=>'国二',
			'GB17691-2001(第Ⅱ阶段)'=>'国二',
			'GB17691-2001(第Ⅱ阶段),GB3847-1999'=>'国二',
			'GB17691-2001(第Ⅱ阶段),GB3847-2005'=>'国二',
			'GB17691-2001(第Ⅱ阶段);GB3847-2005'=>'国二',
			'GB17691-2001(第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB17691-2001,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB17691-2001,GB3487-1999'=>'国二',
			'GB17691-2001,GB3847-1999'=>'国二',
			'GB17691-2001,GB3847-1999第2阶段'=>'国二',
			'GB17691-2001,GB3847-1999第Ⅱ阶段'=>'国二',
			'GB17691-2001,GB3847-2001'=>'国二',
			'GB17691-2001,GB3847-99,GB14762-02'=>'国二',
			'GB17691-2001,欧标2号'=>'国二',
			'GB17691-20012实施阶段,GB3847-1999'=>'国二',
			'GB17691-2001;GB3847-1999'=>'国二',
			'GB17691-2001Ⅱ阶段,GB3847-2005'=>'国二',
			'GB17691-2001第2阶段,GB3847-1999'=>'国二',
			'GB17691-2001第2阶段,GB3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段'=>'国二',
			'GB17691-2001第Ⅱ阶段 GB3847-1999'=>'国二',
			'GB17691-2001第Ⅱ阶段 GB3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段),GB3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段,3847-1999'=>'国二',
			'GB17691-2001第Ⅱ阶段,B3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB 3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB14761.5-93'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3846-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3847'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3847-199'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3847-1999 GB17691-2001第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3847-1999 GB3847-1999'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3847-2001'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3847-2005 GB17691-2001第Ⅱ阶段,GB3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3847—2005'=>'国二',
			'GB17691-2001第Ⅱ阶段,GB3874-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段;GB3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段GB3847-1999'=>'国二',
			'GB17691-2001第Ⅱ阶段GB3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段、GB3847-1999'=>'国二',
			'GB17691-2001第Ⅱ阶段、GB3847-2005'=>'国二',
			'GB17691-2001第Ⅱ阶段排放'=>'国二',
			'GB17691-2001第Ⅲ阶段,GB3847-2005'=>'国二',
			'GB17691-2001第一,Ⅱ阶段,GB3847-99'=>'国二',
			'GB17691-2001第一阶段,GB3847-1999'=>'国二',
			'GB17691-2002第2阶段,GB3847-1999'=>'国二',
			'GB17691-2002第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB17691-2005'=>'国三',
			'GB17691-2005 (国 Ⅲ),GB3847-2005'=>'国三',
			'GB17691-2005( 国 Ⅲ ),GB3847-2005'=>'国三',
			'GB17691-2005(Ⅳ),GB3847-2005'=>'国四',
			'GB17691-2005(ⅣⅣ阶段),GB3847-2005'=>'国四',
			'GB17691-2005(Ⅴ),GB3847-2005'=>'国五',
			'GB17691-2005(国 Ⅲ),GB3847-2005'=>'国三',
			'GB17691-2005(国 Ⅳ),GB3847-2005'=>'国四',
			'GB17691-2005(第Ⅲ阶段) GB3847-2005'=>'国三',
			'GB17691-2005(第Ⅲ阶段),GB11340-2005,GB18285-2005'=>'国三',
			'GB17691-2005(第Ⅲ阶段),GB3847-2005'=>'国三',
			'GB17691-2005(第Ⅲ阶段)、GB3847-2005'=>'国三',
			'GB17691-2005(第Ⅲ阶段,GB3847-2005'=>'国三',
			'GB17691-2005(第Ⅳ阶段) GB3847-2005'=>'国四',
			'GB17691-2005(第Ⅳ阶段),GB3847-2005'=>'国四',
			'GB17691-2005,GB11340-2005,GB18285-2005'=>'国三',
			'GB17691-2005,GB3847-2005'=>'国三',
			'GB17691-2005,GB3847-2005第Ⅲ阶段'=>'国三',
			'GB17691-2005GB3847-2005'=>'国三',
			'GB17691-2005Ⅲ阶段,GB11340-2005,GB18285-2005'=>'国三',
			'GB17691-2005Ⅲ阶段,GB3847-2005'=>'国三',
			'GB17691-2005Ⅳ,GB11340-2005,GB18285-2005'=>'国四',
			'GB17691-2005Ⅳ,GB3847-2005'=>'国四',
			'GB17691-2005国 Ⅲ,GB3847-2005'=>'国三',
			'GB17691-2005国 Ⅳ,GB11340- 2005,GB18285-2005'=>'国四',
			'GB17691-2005国 Ⅳ,GB3847-2005'=>'国四',
			'GB17691-2005国 Ⅴ,GB11340- 2005,GB18285-2005'=>'国五',
			'GB17691-2005国第Ⅲ,GB3847-2005'=>'国三',
			'GB17691-2005第Ⅲ阶段,GB3847-1999'=>'国三',
			'GB17691-2005第Ⅲ阶段,GB3847-2005'=>'国三',
			'GB17691-2005第Ⅲ阶段,GB3847-2005 GB17691-2005第Ⅲ阶段,GB3847-2005'=>'国三',
			'GB17691-2005第Ⅲ阶段,GB3847-2005第Ⅲ阶段'=>'国三',
			'GB17691-2005第Ⅳ阶段 GB3847-2005'=>'国四',
			'GB17691-2005第Ⅳ阶段,GB3847-2005'=>'国四',
			'GB17691-2005第Ⅴ阶段,GB 18285-2005,GB11340-2005'=>'国五',
			'GB17691-2005第Ⅴ阶段,GB3847-2005'=>'国五',
			'GB17691—2001第Ⅱ阶段'=>'国二',
			'GB17691—2001第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB17691—2001第Ⅱ阶段,GB3847-2005'=>'国二',
			'GB17691—2001第Ⅱ阶段,GB3847—2005'=>'国二',
			'GB17691Ⅱ阶段,GB14761.5,GB/T3845'=>'国二',
			'GB17692-2002第Ⅱ阶段,GB18285-2005'=>'国二',
			'GB17891-2001第2阶段,GB3847-1999'=>'国二',
			'GB17891-2001第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB17961-2001第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB17961-2001第Ⅱ阶段,GB3847-2005'=>'国二',
			'GB18285-2005,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB18285-2005,GB17691-2005第Ⅲ阶段,GB11340-20'=>'国三',
			'GB18352-2001第Ⅱ阶段,GB3847-1999'=>'国二',
			'GB18352.1'=>'国一',
			'GB18352.1(2)-2001,GB14761.5-1993'=>'国二',
			'GB18352.1,.2-2001 GB3847-1999'=>'国二',
			'GB18352.1,.2-2001,GB3847-1999'=>'国二',
			'GB18352.1,2-2001,GB3847-1999'=>'国二',
			'GB18352.1/2-2001,GB3847-2005'=>'国二',
			'GB18352.2'=>'国二',
			'GB18352.2,GB3847-1999'=>'国二',
			'GB18352.2--2001'=>'国二',
			'GB18352.2-01,GB14762-02第Ⅱ阶段'=>'国二',
			'GB18352.2—2001'=>'国二',
			'GB18352.2—2001,GB3847—2005'=>'国二',
			'GB18352.2－2001,GB3847-2005'=>'国二',
			'GB18352.3—2005第Ⅲ阶段'=>'国三',
			'GB18382.5-2013'=>'国五',
			'GB3847,GB17691(欧Ⅱ)'=>'国二',
			'GB3847-1999 GB17691-1999'=>'国一',
			'GB3847-1999 GB17691-2001'=>'国二',
			'GB3847-1999 GB17691-2001第2阶段'=>'国二',
			'GB3847-1999 GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,G817691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB14761-1999'=>'国一',
			'GB3847-1999,GB14762-2002第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17491-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17690-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17691-1999'=>'国一',
			'GB3847-1999,GB17691-1999第Ⅱ阶段'=>'国一',
			'GB3847-1999,GB17691-2001'=>'国二',
			'GB3847-1999,GB17691-2001 第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17691-2001(欧Ⅱ)'=>'国二',
			'GB3847-1999,GB17691-2001(第2阶段)'=>'国二',
			'GB3847-1999,GB17691-2001(第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17691-2001(第Ⅱ阶段)'=>'国二',
			'GB3847-1999,GB17691-2001,(欧Ⅱ)'=>'国二',
			'GB3847-1999,GB17691-2001第2阶段'=>'国二',
			'GB3847-1999,GB17691-2001第Ⅱ阶)'=>'国二',
			'GB3847-1999,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17691-2001第Ⅱ阶段 GB17691-2001第2阶段'=>'国二',
			'GB3847-1999,GB17691-2001第Ⅱ阶段 GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17691-2001第Ⅱ阶段 GB3847-1999,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17691-2001第一阶段'=>'国二',
			'GB3847-1999,GB17691-2005'=>'国三',
			'GB3847-1999,GB17691—2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17961-1999'=>'国一',
			'GB3847-1999,GB17961-2001'=>'国二',
			'GB3847-1999,GB17961-2001(欧2)'=>'国二',
			'GB3847-1999,GB17961-2001(欧2)欧Ⅱ'=>'国二',
			'GB3847-1999,GB17961-2001(第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17961-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB18352.1,.2-2001'=>'国二',
			'GB3847-1999,GB18352.1,2-2001'=>'国二',
			'GB3847-1999,GB18352.1.2-2001'=>'国二',
			'GB3847-1999,GB18352.2(欧Ⅱ)'=>'国二',
			'GB3847-1999,GB18352.2(第Ⅱ阶段)'=>'国二',
			'GB3847-1999,GB3847-2001(欧Ⅱ)'=>'国二',
			'GB3847-1999,GB3847-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999.GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999/GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999、GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999；GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-2001,GB17691-1999'=>'国一',
			'GB3847-2004,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-2005 GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-2005(第Ⅱ阶段),GB17691-2001'=>'国二',
			'GB3847-2005,B17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-2005,GB 17691-2001(第Ⅱ阶段)'=>'国二',
			'GB3847-2005,GB 17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-2005,GB17691- 2005第Ⅲ阶段'=>'国三',
			'GB3847-2005,GB17691-1999第Ⅱ阶段'=>'国一',
			'GB3847-2005,GB17691-2001'=>'国二',
			'GB3847-2005,GB17691-2001 第Ⅱ阶段'=>'国二',
			'GB3847-2005,GB17691-2001(第2阶段)'=>'国二',
			'GB3847-2005,GB17691-2001(第Ⅱ阶段'=>'国二',
			'GB3847-2005,GB17691-2001(第Ⅱ阶段)'=>'国二',
			'GB3847-2005,GB17691-2001第2阶段'=>'国二',
			'GB3847-2005,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-2005,GB17691-2001第Ⅱ阶段 GB3847-2005,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-2005,GB17691-2002第Ⅱ阶段'=>'国二',
			'GB3847-2005,GB17691-2005'=>'国三',
			'GB3847-2005,GB17691-2005 国 Ⅳ'=>'国四',
			'GB3847-2005,GB17691-2005Ⅳ'=>'国四',
			'GB3847-2005,GB17691-2005第Ⅲ阶段'=>'国三',
			'GB3847-2005,GB17691-2005第Ⅳ阶段'=>'国四',
			'GB3847-2005,GB17691-200第Ⅱ阶段'=>'国二',
			'GB3847-2005,GB1791-2001'=>'国二',
			'GB3847-2005/GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-2005/GB17691-2005'=>'国三',
			'GB3847-2005、GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-20085,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-99,GB17691-01,GB18352.2-01'=>'国二',
			'GB3874-1999,GB17691-2001'=>'国二',
			'GB3874-2005,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB38847-1999,GB17691-2001(欧2)'=>'国二',
			'GB38847-1999,GB17691-2001(欧2)欧Ⅱ'=>'国二',
			'GB7691-2001,GB3847-1999'=>'国二',
			'GB8352.2-2001'=>'国二',
			'GN3847-1999,GB17691-2001'=>'国二',
			'是GB11340-2005,GB18285-2005,GB14762-2002第Ⅱ阶段'=>'国二',
			'欧Ⅰ'=>'欧一',
			'欧Ⅱ'=>'欧二',
			'欧Ⅳ'=>'欧四',
			'欧州2号'=>'欧二',
			'欧州2号欧Ⅱ'=>'欧二',
			'欧洲1'=>'欧一',
			'欧洲1号标准,欧洲2号标准'=>'欧二',
			'欧洲1号标准,欧洲2号标准欧Ⅰ欧Ⅱ欧Ⅰ欧Ⅱ欧Ⅰ欧Ⅱ欧Ⅰ欧Ⅱ欧Ⅰ'=>'欧二',
			'欧洲1欧Ⅰ'=>'欧一',
			'欧洲2号'=>'欧二',
			'欧洲2号标准'=>'欧二',
			'欧洲2号标准欧Ⅱ'=>'欧二',
			'欧洲2号欧Ⅱ'=>'欧二',
			'欧洲Ⅱ号(96/69/EC)'=>'欧二',
			'欧洲Ⅱ号(96/69/EC)欧Ⅱ'=>'欧二',
			'欧洲Ⅱ型环保标准'=>'欧二',
			'欧洲Ⅱ型环保标准欧Ⅱ'=>'欧二',
			'欧洲Ⅱ排放标准'=>'欧二',
			'欧洲Ⅱ排放标准欧Ⅱ'=>'欧二',
			'欧洲Ⅲ号'=>'欧三',
			'欧洲Ⅲ号欧Ⅲ欧Ⅰ'=>'欧三',
			'GB17691-2001第二阶段,GB3847-2005'=>'国二',
			'GB3847-2005,GB17691-2005第三阶段'=>'国三',
			'GB17691-2001第二阶段,GB3847-1999'=>'国二',
			'GB3847-2005,GB17691-2001第二阶段'=>'国二',
			'GB3847-1999,GB17691-2001第二阶段'=>'国二',
			'GB17691-2005第三阶段,GB3847-2005'=>'国三',
			'GB18322-2002,GB19756-2005(Ⅱ)'=>'国二',
			'GB17691-2005第Ⅲ阶段,GB3847-2005'=>'国三',
			'GB19756-2005(Ⅱ),GB18322-2002'=>'国二',
			'GB17691-2005第IV阶段,GB3847-2005'=>'国四',
			'GB17691-2005,GB3847-2005'=>'国三',
			'GB17691-2001,GB3847-1999'=>'国一',
			'GB3847-2005,GB17691-2005'=>'国三',
			'GB17691-2005第IV阶段 GB3847-2005'=>'国四',
			'GB3847-2005,GB17691-2001(第二阶段)'=>'国二',
			'GB17691-2001(第二阶段),GB3847-2005'=>'国二',
			'GB17691-2005第四阶段,GB3847-2005'=>'国四',
			'GB3847-1999,GB17691-2001'=>'国一',
			'GB17691-2005第三阶段,GB3847-1999'=>'国三',
			'GB17691-2005(第Ⅳ阶段) GB3847-2005'=>'国四',
			'GB14762-2008第Ⅳ阶段,GB11340-2005,GB14763-2005,GB18285-2005'=>'国四',
			'GB14762-2002第二阶段'=>'国二',
			'GB17691-2001第2阶段,GB3847-1999'=>'国二',
			'GB3847-1999/GB17691-2001第二阶段'=>'国二',
			'GB 17691-2005第四阶段,GB 3847-2005'=>'国四',
			'GB 3847-2005,GB17691-2005第三阶段'=>'国三',
			'GB3847-2005,GB17691-2005Ⅳ'=>'国四',
			'GB 18352.2-2001'=>'国二',
			'GB18322-2002,GB19756-2005(Ⅰ)'=>'国一',
			'GB14762-2008第Ⅲ阶段,GB11340-2005,GB14763-2005,GB18285-2005'=>'国三',
			'GB17691-2001第二阶段GB3847-2005'=>'国二',
			'GB 18352.3-2005第四阶段'=>'国四',
			'GB17691-2001第二阶段'=>'国二',
			'GB17691-2001(第2阶段),GB3847-2005'=>'国二',
			'GB18382.5-2013'=>'国五',
			'GB14762-2002(第二阶段),GB18285-2005'=>'国二',
			'GB18352.2—2001'=>'国二',
			'GB17691-2001第2阶段,GB3847-2005'=>'国二',
			'GB14761-1999(达欧州Ⅱ号排放标准)欧二',
			'GB14762-02第二阶段,GB14761.3-5-93'=>'国二',
			'GB17691-2001第II阶段,GB3847-1999'=>'国二',
			'GB14762-2002第二阶段,GB11340-2005,GB14763-2005'=>'国二',
			'GB17691-2001第II阶段,GB3847-2005'=>'国二',
			'GB3847-1999,GB18352.2(第二阶段)'=>'国二',
			'GB 14762-2008(IV),GB11340-2005,GB 18285-2005,GB 14763-2005'=>'国四',
			'GB3847-2005,GB17691-2001(第2阶段)'=>'国二',
			'GB18352.2－2001,GB3847-2005'=>'国二',
			'GB 18352.3-2005 第四阶段'=>'国四',
			'GB14762-2002'=>'国一',
			'GB17691-2001第二阶段、GB3847-1999'=>'国二',
			'GB14762-2008,GB11340-2005'=>'国三',
			'GB17691-2005第三阶段,GB3847-2005第三阶段'=>'国三',
			'GB11340-2005,GB14762-2008 第Ⅳ阶段,GB20890-2007,GB18285-2005,GB14763-2005'=>'国四',
			'GB14762-2002,GB14763-2005,GB11340-2005,GB18285'=>'国三',
			'GB 18352.3-2005Ⅳ'=>'国四',
			'GB 17691-2005第V阶段,GB 3847-2005'=>'国五',
			'GB17691-2001第二阶段 GB3847-1999'=>'国二',
			'GB17691-2001(2阶段),GB3847-1999'=>'国二',
			'GB3847-2004,GB17691-2001第二阶段'=>'国二',
			'GB17691-2005(第Ⅲ阶段,GB3847-2005'=>'国三',
			'GB14762-2002(第二阶段)'=>'国二',
			'GB17691-2005'=>'国三',
			'GB18322-2002,GB19756(Ⅱ)-2005'=>'国二',
			'GB17691-2001'=>'国一',
			'GB3847-2005,GB17691- 2005第三阶段'=>'国三',
			'GB18285-2005,GB11340-2005,GB14763-2005'=>'国三',
			'GB3847-2005,GB17691-200第二阶段'=>'国二',
			'GB11340-2005,GB18285-2005,GB14762-2002第二阶段'=>'国二',
			'GB-18352.2-2001'=>'国二',
			'GB3847-2005(第二阶段),GB17691-2001'=>'国二',
			'GB19756-2005（Ⅰ）,GB18322-2002'=>'国一',
			'GB 18352.3-2005'=>'国三',
			'GB17691-2005(Ⅳ),GB3847-2005'=>'国四',
			'GB3874-2005,GB17691-2001第二阶段'=>'国二',
			'GB3847-1999,GB17691-1999第二阶段'=>'国二',
			'GB17891-2001第2阶段,GB3847-1999'=>'国二',
			'GB17691—2001第二阶段,GB3847-1999'=>'国二',
			'GB14762-2002,GB14761.3-5-1993'=>'国一',
			'GB18352.2--2001'=>'国二',
			'GB14762-2002第2阶段,GB14761.3.4.5-93'=>'国二',
			'GB17961-2001第二阶段,GB3847-2005'=>'国二',
			'GB14762-2002第二阶段,GB11340-2005,GB14763-2005,GB18285-2005'=>'国二',
			'GB14762-2002第二阶段,GB14761.4-93,GB14761.5-1993'=>'国二',
			'GB14762-2002第二阶段,GB18285-2005'=>'国二',
			'GB18352.3—2005第Ⅲ阶段'=>'国三',
			'GB18322-2002,GB19756-2005'=>'国一',
			'GB 18352.2-2001,GB3847-2005'=>'国二',
			'GB 18352.2-2001,GB 18285-2005'=>'国二',
			'GB3847-1999 GB17691-2001第二阶段'=>'国二',
			'GB17691 2001第二阶段'=>'国二',
			'GB14761-1999,GB14762-2002第二阶段'=>'国二',
			'GB 17691-2001(第二阶段),GB 3847-2005'=>'国二',
			'GB18352.1'=>'国一',
			'GB 18322-2002,GB 19756-2005(Ⅰ)'=>'国一',
			'GB14762-2008(第三阶段),GB11340-2005,GB14763-2005,GB18285-2005'=>'国三',
			'GB17691-2001第二阶段,GB3874-2005'=>'国二',
			'GB17691-2001(第2阶段),GB3847-1999'=>'国二',
			'GB14762-2002第二阶段,GB18285-2005,GB11340-2005、GB14763-2005'=>'国二',
			'GB18352.1,.2-2001,GB3847-1999'=>'国二',
			'GB 18352.3-2005第Ⅳ阶段'=>'国四',
			'GB17691-2001(第二阶段),GB3847-1999'=>'国二',
			'GB3847-2005/GB17691-2005'=>'国三',
			'GB3847-1999,GB17961-2001'=>'国一',
			'GB11340-2005,GB18285-2005,GB14762-2002'=>'国一',
			'GB3847-1999,GB17691-2001(欧Ⅱ)欧二',
			'GB3847-2005,GB17691-2002第二阶段'=>'国二',
			'GB3847-2005,GB17691-1999第二阶段'=>'国二',
			'GB17691-2005第二阶段,GB3847-2005'=>'国二',
			'GB3847-1999,GB17691-2001(第二阶段)'=>'国二',
			'GB14762-2002 (第二阶段)'=>'国二',
			'GB17691-2001第一阶段,GB3847-1999'=>'国一',
			'GB3847-2005,GB17691-2001'=>'国一',
			'GB17691-2005(第Ⅳ阶段),GB3847-2005'=>'国四',
			'GB17691-2001,GB3847-1999第二阶段'=>'国二',
			'GB14761-1999 GB18352-2001'=>'国一',
			'GB3847-1999,GB17691-2001第Ⅱ阶段'=>'国二',
			'GB3847-1999,GB17691-2001第二阶段 GB17691-2001第2阶段'=>'国二',
			'GB14762-2002(第二阶段),GB18285-2005,GB11340-2005'=>'国二',
			'GB3847-1999,GB17491-2001第二阶段'=>'国二',
			'GB14762-2002(第二阶段),GB18285-2005,GB11340-2005,GB14763-2005'=>'国二',
			'GB17691-2001第二阶段,GB3847-1999 GB17691-2001第二阶段,GB3847-1999'=>'国二',
			'GB11340-2005,GB14763-2005,GB18285-2005,GB14762-2002(第二阶段)'=>'国二',
			'GB18352.1,2-2001,GB3847-1999'=>'国二',
			'GB17691-2001(第二阶段);GB3847-2005'=>'国二',
			'GB17691-2001第二阶段,GB3847-1999 GB3847-1999'=>'国二',
			'GB17691-2005(第III阶段),GB11340-2005,GB18285-2005'=>'国三',
			'GB14762-2002第二阶段,GB14761-1993'=>'国二',
			'GB3847-1999,GB18352.2(欧Ⅱ)欧二',
			'GB17691-2001第二阶段,GB3847—2005'=>'国二',
			'GB14762-2002第二阶段,GB18285-2005,GB11340-2005,GB14763-2005'=>'国二',
			'GB14762-2008,GB11340-2005,GB14763-2005,GB18285-2005,GB20997-2007,GB/T17692-1999'=>'国三',
			'GB17691-2001第二阶段GB3847-1999'=>'国二',
			'GB 18352.2-2001,GB18285-2005'=>'国二',
			'GB17691-2001第二阶段排放'=>'国二',
			'GB 18352.2-2001 GB 18285-2005'=>'国二',
			'GB3847-99,GB17691-01,GB18352.2-01'=>'国二',
			'GB3874-1999,GB17691-2001'=>'国一',
			'GB3847-1999GB17691-2001第二阶段'=>'国二',
			'GB17691-2001;GB3847-1999'=>'国一',
			'GB14622-2016'=>'国四',
		];
		if(!empty($nameToValArr[$val])){
			$val = $nameToValArr[$val];
		}else{
			$repf =['Ⅶ'=>'七','VII'=>'七','Ⅵ'=>'六','VI'=>'六','Ⅴ'=>'五','V'=>'五','Ⅳ'=>'四','IV'=>'四','Ⅲ'=>'三','III'=>'三','Ⅱ'=>'二','II'=>'二','Ⅰ'=>'一','I'=>'一'];
			$val = strtr($val, $repf);
			if(preg_match('/国 *(一|二|三|四|五|六|七)/', $val, $match)){
				$val = '国'.$match[1];
			}else if(preg_match('/欧洲? *(一|二|三|四|五|六|七)/', $val, $match)){
				$val = '欧'.$match[1];
			}else if(preg_match('/GB18352\.(\d)-20\d{2}/', $val, $match)){
				$gbArr = [1=>'国一',2=>'国二',3=>'国三',4=>'国四',5=>'国五',6=>'国六',7=>'国七'];
				if(!empty($gbArr[$match[1]])) $val = $gbArr[$match[1]];
			}else{
				$val = '';
			}
		}
		return LibFc::ReturnData(true, ['format'=>$val]);
	}

	//从备注总提取信息["remark"=>"发动机最大净功率/准拖挂车总质量为:CA6DL3-37E5(276kW)/35000Kg","engines"=>[["engine"=>"CA6DL3-37E5","kw"=>"279"]]]
	public function formatEngByRemark($arr)
	{
		if(empty($arr['engines']) || empty($arr['remark'])){
			return LibFc::ReturnData(true, $arr);
		}
		//功率类型
		$arr['hasJglkw'] = stripos($arr['remark'], '净功率') !== false? 1: 0;
		$arr['hasEdkw'] = stripos($arr['remark'], '额定功率') !== false? 1: 0;
		if(!$arr['hasJglkw'] && !$arr['hasEdkw']){
			return LibFc::ReturnData(true, $arr);
		}
		
		$arr['txtHasEngCount'] = 0;
		$remarktxt = $arr['remark'];
		$engHasSplitChar = [];
		foreach($arr['engines'] as $tk=>$tv){
			if(stripos($tv, '/') && !in_array('/', $engHasSplitChar)) $engHasSplitChar[] = '/';
			$tv['format'] = LibFc::FormatNum($tv['engine']);
			$tv['pos'] = stripos($remarktxt, $tv['engine']);
			if($tv['pos'] !== false) $arr['txtHasEngCount']++;
			$arr['engines'][$tk] = $tv;
		}
		$arr['needkw'] = ['jgl_kw'=>$arr['hasJglkw']? $arr['engines']: [], 'ed_kw'=>$arr['hasEdkw']? $arr['engines'] : []];
		$res = $this->formatEngByRemark2($arr);
		$arr = $res['data'];
		if(($arr['hasJglkw'] && empty($arr['needkw']['jgl_kw'])) || ($arr['hasEdkw'] && empty($arr['needkw']['ed_kw'])))
			return LibFc::ReturnData(true, $arr);
		
		$reArr =['（'=>'(', '）'=>')', '：'=>':', '，'=>',', '；'=>';', '、'=>',', 'Ｋ'=>'K', 'Ｗ'=>'W', 'ｋ'=>'k', 'ｗ'=>'W', ' kw'=>'KW', 'kW'=>'KW', 'Kw'=>'KW', 'km'=>'KM', 'km'=>'KM', 'kM'=>'KM'];
		$remarktxt = strtr($remarktxt, $reArr);
		$remarktxt = preg_replace('/kw/i', 'KW', $remarktxt); //(kw)
		$remarktxt = preg_replace('/km/i', 'KM', $remarktxt); //(kw)
		$remarktxt = strtr($remarktxt, ['(KW)'=>'KW', '千瓦'=>'KW', '净功率为KW'=>'净功率为', '时,净功率'=>'净功率','型发动机;发动机最大净功率'=>'发动机最大净功率',
			'发动机和'=>'和','型,'=>',', '型和'=>'和', '90.102KW'=>'90KW,102KW', '(L/100KM)'=>'', '净功率f分'=>'净功率分', '为:'=>'为','净功率(KW)'=>'净功率','额定功率(KW)'=>'额定功率', '功率 为'=>'功率为']);
		$remarktxt = strtr($remarktxt, ['功率KW'=>'功率', '功率值KW'=>'功率']);
		$arr['remarktxt'] = $remarktxt;
		
		$allengs = array_column($arr['engines'], 'engine');
		$regBase = [
			'kw'=>'\d+(?:\.\d+)?',
			'kwunit'=>'(?:\s*KW)?',
			'eng'=>'[0-9A-Z][0-9A-Z\-\. ]*[0-9A-Z]',
		];

		if(!$arr['txtHasEngCount']){
			$jgl_kw = ''; $ed_kw = '';
			if(preg_match('/为[\x{4e00}-\x{9fa5}]*净功率/iu', $remarktxt, $match)){
				$jgl_kw = 'kw';
			}else if(
				preg_match('/净功率[^\d]*(\d{2,}(?:\.\d+)?)(?:kw)?/iu', $remarktxt, $match) ||
				preg_match('/(\d{2,}(?:\.\d+)?)(?:kw)?[\x{4e00}-\x{9fa5}]*净功率/iu', $remarktxt, $match)
				
			){
				$jgl_kw = $match[1];
			}
			if(preg_match('/为[\x{4e00}-\x{9fa5}]*额定功率/iu', $remarktxt, $match)){
				$ed_kw = 'kw';
			}else if(
				//驱动电机额定功率为32kW,峰值功率为60kW
				preg_match('/[,; ]峰值功率[^\d]*(\d{2,}(?:\.\d+)?)(?:kw)?/iu', $remarktxt, $match) ||
				preg_match('/额定功率[^\d]*(\d{2,}(?:\.\d+)?)(?:kw)?/iu', $remarktxt, $match) ||
				preg_match('/(\d{2,}(?:\.\d+)?)(?:kw)?[\x{4e00}-\x{9fa5}]*额定功率/iu', $remarktxt, $match) ||
				preg_match('/额定\/峰值[^\d]*\d{2,}(?:\.\d+)?(?:kw)?\/(\d{2,}(?:\.\d+)?)(?:kw)?/iu', $remarktxt, $match)
			){
				$ed_kw = $match[1];
			}
			if($jgl_kw || $ed_kw){
				$res = $this->formatKw($arr, $arr['needkw'], $jgl_kw, $ed_kw);
				$arr = $res['arr'];
				$arr['needkw'] = $res['needMatch'];
				return LibFc::ReturnData(true, $arr);
			}
		}

		$matches = [];
		//多对多
		if(stripos($remarktxt, '净功率分别') || stripos($remarktxt, '额定功率分别')){
			$sregs = [];
			if($arr['txtHasEngCount']){
				$sregs['engs'] = [
					//发动机DK15C,DAM16KR对应的最大净功率分别为78kw,85 kw     
					//发动机WD615.96C,YC6L330-30,YC6M375-30,WD615.95C的最大净功率分别为277kW,233kW,265kW,247kW
					//。MC07.31-60,MC07.34-60,WP8.350E61发动机净功率分别为225kW,248kW,252kW,对应
					//装ISME345 30,WP10.336,WP10.340E32发动机(最大净功率分别为248.84kw,245kw,246kw)时
					//货箱底板到栏杆顶部的高为1900mm;YN27CRE1,YN    2+2布置时座位数24-51,3+2布置座位数24-63).YC6G260N-40,WP7NG270E40发动机最大净功率分别为182,195kW.
					//挂车总质量为:40000kg;YC6K1034-40,YC6K1038-40,ISM11E4345,ISM11E4385发动机的净功率分别为245kw,265kw,244.25kw,273.7kw.应
					//92% '/(?:^|[\x{4e00}-\x{9fa5}][\:,]?|\;\d[.,]|××|。\d[,\.]|。|\d,|^\d\.|km\/h;)[\.; ]*([0-9A-Z][0-9A-Z#\*\-\.\/,和 \+\;]*[0-9A-Z\+\*\#])[,\.\( ]{0,3}[\x{4e00}-\x{9fa5}]*[,\.\( ]{0,3}[\x{4e00}-\x{9fa5}]*(?:最大)?净功率分别/iu' 
					//['reg'=>'/(?:^|[\x{4e00}-\x{9fa5}](?!(?:\d{2,6}(?:mm|kg|km\/h|ml)\s*[\.;]\s*(?:[1-9][0-9]?\.)|\d{3,6}\s*[\.;]\s*[1-9][0-9]?\.))[\)\:,]?|\d{2}\)|\;\d[.,]|××|。\d[,\.]|。|\d,|^\d\.|\d{2,6}(?:mm|kg|km\/h|ml)\s*[\.;]\s*(?:[1-9][0-9]?\.)|\d{3,6}\s*[\.;]\s*[1-9][0-9]?\.)[\.; ]*(?:\d,)?([0-9A-Z][0-9A-Z#\*\-\.\/, \+;和与]*[0-9A-Z\+\*\#])[,\.\( ]{0,3}[\x{4e00}-\x{9fa5}]*[,\.\( ]{0,3}[\x{4e00}-\x{9fa5}]*(?:最大)?净功率分别/iu']
					['reg'=>'/([0-9A-Z][0-9A-Z#\*\-\.\/, \+;和与]*[0-9A-Z\+\*\#])[^0-9A-Z×]*(?:净功|额定功)率分别/iu'],
					['reg'=>'/([0-9A-Z][0-9A-Z#\*\-\.\/, \+;和与]*[0-9A-Z\+\*\#])[^0-9A-Z×]*(?:净功|额定功)率分别/iu', 
						'replaces'=>[//找到替换
							//发动机WP10.300E40,D10.28-40,YC6A270-46,WP10.290E41,WP10.270E41,WP10.310E41的油耗申报值分别为39.5,39.5,39.5,39.5,39.5,44.6.最大净功率分别为216,204,192,211,197,226kW
							['has'=>'油耗', 'from'=>'/[\x{4e00}-\x{9fa5}]*油耗.*?净功率分别/ui', 'to'=>'净功率分别'],	
							['has'=>'(油耗值', 'from'=>'/\(油耗值[^\)]+\)/ui', 'to'=>''],	
							//D10.34-31,D12.34-30,WD615.95E时,VIN代码为LZZ5CLNB×××××××××,净功率分别为247kW,245kW,245kW;
							['has'=>'时,VIN', 'from'=>'/时,VIN.*?净功率分别/ui', 'to'=>'净功率分别'],
							//10L/100km
							['has'=>'L/100km', 'from'=>'/\(\d+(?:\.\d+)?L\/100km\)/ui', 'to'=>''],	
						]
					],
				];
			}else{
				//备注中没有发动机，直接按原顺序
				$matches['engs'] = $allengs;
			}
			if($arr['hasJglkw']){
				$sregs['jgl_kws'] = [
					//最大净功率分别为80kW和90kW 最大净功率分别为225kW,245kW 最大净功率分别为48kw,46kw. 
					//96.2% '/净功率分别[\x{4e00}-\x{9fa5}]*[ :]*(\d{2,3}(?:\.\d+)?(?:\s*kW)?(?:[,\/;和 ]+\d{2,3}(?:\.\d+)?(?:\s*kW)?)*)(?![,\/;和 ]+\d{2,3}(?:\.\d+)?(?:\s*kW)?)/iu'
					['reg'=> '/净功率分别[\x{4e00}-\x{9fa5}]*[ :]*(\d{2,3}(?:\.\d+)?(?:\s*kW)?(?:[,\/;和 ]+\d{2,3}(?:\.\d+)?(?:\s*kW)?)*)(?=\s*[.,;。]?\s*(?:[\x{4e00}-\x{9fa5}]|[A-Z]{2,}|\d+[,.:]|$))/iu'],
				];
			}
			if($arr['hasEdkw']){
				$sregs['ed_kws'] = [
					['reg'=> '/额定功率分别[\x{4e00}-\x{9fa5}]*[ :]*(\d{2,3}(?:\.\d+)?(?:\s*kW)?(?:[,\/;和 ]+\d{2,3}(?:\.\d+)?(?:\s*kW)?)*)(?=\s*[.,;。]?\s*(?:[\x{4e00}-\x{9fa5}]|[A-Z]{2,}|\d+[,.:]|$))/iu'],
				];
			}
			foreach($sregs as $type=>$tsregs){
				foreach($tsregs as $sreg){
					$newremark = $remarktxt;
					if($sreg['replaces']){
						foreach($sreg['replaces'] as $re){
							if($re['has'] && stripos($newremark, $re['has']) === false) continue;
							$newremark = preg_replace($re['from'], $re['to'], $newremark);
							//var_dump($newremark);exit;
						}
					}
					if(preg_match($sreg['reg'], $newremark, $match)){
						$mtxt = $match[1];
						$tvals = [];
						if($type == 'engs'){
							$mtxt = preg_replace('/(?:\d{2,6}(?:mm|kg|km\/h|ml)\s*[\.;]\s*(?:[1-9][0-9]?\.)|\d{3,6}\s*[\.;]\s*[1-9][0-9]?\.)/iu', '', $mtxt);
							$tvals = preg_split('/和|,|;'.(!in_array('/', $engHasSplitChar)? '|\/': '').'/u', $mtxt);
							
							$first = null;
							foreach($tvals as $tk=>$tv){
								$tv = trim(preg_replace('/[^\w\.\-]+/u', '', $tv));
								//["11.16","11.29","11.18","11.27","10.85L","F2.8NS6B131","F2.8NS6B150","F2.8NS6B156","F3.8NS6B156","D25TCIF1"]
								if($first === null && (strlen($tv) == 1 || preg_match('/^\d{2,6}(?:\.\d+)?(?:mm|kg|km|ml|L)$/iu', $tv) || preg_match('/^\d{2}$/iu', $tv))){
									unset($tvals[$tk]);
									continue;
								}
								if($first === null && in_array($tv, $allengs)){
									$first = $tk;
								}
								$tvals[$tk] = $tv; 
							}
							$tvals = array_values($tvals);
							//首次出现的键
							$first = null;
							foreach($tvals as $tk=>$tv){
								if($first === null && in_array($tv, $allengs)){
									$first = $tk;
									break;
								}
							}
							
							if($first === null){//无直接空，下一个规则
								$tvals = [];
								continue;
							}else if($first > 0){
								for($i = ($first-1); $i >= 0; $i--){
									$tv = $tvals[$i];
									$tv = preg_replace('/^(?:\d{2,6}(?:mm|kg|km|ml)|[1-9]|1[0-9]|\d{4}|h)\.+/iu', '', $tv, 1, $recount);
									if($recount && in_array($tv, $allengs)){
										$tvals[$i] = $tv;
										$tvals = array_slice($tvals, $i);
										break;
									}
									if(preg_match('/^\d{2,4}$/', $tv) && !preg_match('/^\d{2,4}$/', $tvals[$first])){
										$tvals = array_slice($tvals, $i+1);
										break;
									}
								}
							}
						}else{
							$mtxt = strtr(strtoupper($mtxt), ['KW'=>'', ' '=>'']);
							if(preg_match_all('/'.$regBase['kw'].'/', $mtxt, $tm)){
								$tvals = $tm[0];
							}else{
								$tvals = preg_split('/和|,|;/u', $mtxt);
							}
						}
						if($tvals){
							$matches[$type] = $tvals;
							$remarktxt = $newremark;
							break;
						}
					}
				}
			}
			
		}

		if($arr['txtHasEngCount'] && $arr['hasJglkw'] && (empty($matches['engs']) || empty($matches['jgl_kws']) || count($matches['engs']) != count($matches['jgl_kws']))){
			$sregs = [
				//YCS06270-60的净功率为195kw  SC20M139Q6最大净功率:100.5kW MC07H.35-60,最大净功率:254kW YC4FA115-40(最大净功率80KW) YC6J180-52净功率为128
				['reg'=>'/([0-9A-Z]{2}[0-9A-Z\-\. ]*)\(?[\x{4e00}-\x{9fa5},]*净功率[\x{4e00}-\x{9fa5}]*[:]?(\d{2,}(?:\.\d+)?)(?:kw)?\)?/iu'],
				//发动机净功率为87kW,发动机型号4KH1CN6LB,油耗值
				['reg'=>'/净功率[^\d]*(\d{2,}(?:\.\d+)?)(?:kw)?,?发动机[^[0-9A-Z]*([0-9A-Z]{2}[0-9A-Z\-\. ]*)[,;。]/iu'],
				//发动机净功率分别为CA4DC2-10E4,76kW;SD4BW754U,72kW;4DX23-100E4,74kW;该车  发动机净功率为YC4D140N-50为98(kW),CY4102-N5K为102(kW).  净功率值:YCS06270-60为195KW,YCK08300-60为217KW;3. 尺寸
				//发动机净功率4DW93-84E3为62KW,XC4D25Q3U62为62.5KW,4D25F为58KW
				['reg'=>'/(?:净功率[^0-9A-Z]*|\G[,;])([0-9A-Z]{2}[0-9A-Z\-\. ]*)\s*(?:,|为|:|\()\s*(\d{2,3}(?:\.\d+)?)\s*(?:kw)?\)?/iu'],
				//发动机最大净功率(Kw):274(WP12.375N);245(WP12.336N);245(WP10.336N)选装后视窗  发动机最大净功率:182 kW(YC6G260N-40),161 kW(YC6G230N-40),173 kW(WP7NG240E40),182 kW(SC8DT250Q4),168kw(SC8DT230Q4).
				['reg'=>'/(?:净功率[^\d]*|\G[,;])(\d{2,3}(?:\.\d+)?)\s*(?:kw)?\s*\(([0-9A-Z]{2}[0-9A-Z\-\. ]*)\)/iu', 'keyswap‌'=>true],
				//YC6G230N-50/广西玉柴机器股份有限公司,最大净功率为161kW  
				['reg'=>'/([0-9A-Z]{2}[0-9A-Z\-\. ]*)(?[\x{4e00}-\x{9fa5},]*净功率[\x{4e00}-\x{9fa5}]*[:]?(\d{2,}(?:\.\d+)?)(?:kw)?/iu'],
				
			];
			foreach($sregs as $sreg){
				if(preg_match_all($sreg['reg'], $remarktxt, $match)){
					if($sreg['keyswap‌']){
						$matches['engs'] = $match[2];
						$matches['jgl_kws'] = $match[1];
					}else{
						$matches['engs'] = $match[1];
						$matches['jgl_kws'] = $match[2];
					}
					break;
				}
			}
		}

		if($arr['txtHasEngCount'] && $arr['hasEdkw'] && (empty($matches['engs']) || empty($matches['ed_kws']) || count($matches['engs']) != count($matches['ed_kws']))){
			$sregs = [
				['reg'=>'/([0-9A-Z]{2}[0-9A-Z\-\. ]*)\(?[\x{4e00}-\x{9fa5},]*额定功率[\x{4e00}-\x{9fa5}]*[:]?(\d{2,}(?:\.\d+)?)(?:kw)?\)?/iu'],
				['reg'=>'/额定功率[^\d]*(\d{2,}(?:\.\d+)?)(?:kw)?,?发动机[^[0-9A-Z]*([0-9A-Z]{2}[0-9A-Z\-\. ]*)[,;。]/iu'],
				['reg'=>'/(?:额定功率[^0-9A-Z]*|\G[,;])([0-9A-Z]{2}[0-9A-Z\-\. ]*)\s*(?:,|为|:|\()\s*(\d{2,3}(?:\.\d+)?)\s*(?:kw)?\)?/iu'],
				//发动机最大净功率(Kw):274(WP12.375N);245(WP12.336N);245(WP10.336N)选装后视窗  发动机最大净功率:182 kW(YC6G260N-40),161 kW(YC6G230N-40),173 kW(WP7NG240E40),182 kW(SC8DT250Q4),168kw(SC8DT230Q4).
				['reg'=>'/(?:额定功率[^\d]*|\G[,;])(\d{2,3}(?:\.\d+)?)\s*(?:kw)?\s*\(([0-9A-Z]{2}[0-9A-Z\-\. ]*)\)/iu', 'keyswap‌'=>true],
				//YC6G230N-50/广西玉柴机器股份有限公司,最大净功率为161kW  
				['reg'=>'/([0-9A-Z]{2}[0-9A-Z\-\. ]*)(?[\x{4e00}-\x{9fa5},]*额定功率[\x{4e00}-\x{9fa5}]*[:]?(\d{2,}(?:\.\d+)?)(?:kw)?/iu'],
				//驱动电机TZ310XSWDM0364的额定功率为35KW 发动机型号LAQ,额定功率为63KW  
				//['reg'=>'/(?:发动机|驱动电机)[\x{4e00}-\x{9fa5},]*([0-9A-Z]{2}[0-9A-Z\-\. ]*)[\x{4e00}-\x{9fa5},]*额定功率[\x{4e00}-\x{9fa5}]*[:]?(\d{2,}(?:\.\d+)?)(?:kw)?/iu'],
				//TZ180XSC110驱动电机额定功率/峰值功率:55KW TZ220XYL,驱动电机额定功率:55KW
				//['reg'=>'/([0-9A-Z]{2}[0-9A-Z\-\. ]*)[,\s]*驱动电机额定功率[^\d]+(\d{2,}(?:\.\d+)?)(?:kw)?/iu'],
			];
			foreach($sregs as $sreg){
				if(preg_match_all($sreg['reg'], $remarktxt, $match)){
					if($sreg['keyswap‌']){
						$matches['engs'] = $match[2];
						$matches['ed_kws'] = $match[1];
					}else{
						$matches['engs'] = $match[1];
						$matches['ed_kws'] = $match[2];
					}
					break;
				}
			}
		}
		
		if($matches['engs']){
			$countArr = [
				'engs'=>count($matches['engs']),
				'jgl_kws'=>$matches['jgl_kws']? count($matches['jgl_kws']): 0,
				'ed_kws'=>$matches['ed_kws']? count($matches['ed_kws']): 0,
			];
			//数量一致
			if($countArr['engs'] && ($countArr['engs'] == $countArr['jgl_kws'] || $countArr['engs'] == $countArr['ed_kws'])){
				foreach($matches['engs'] as $tk=>$teng){
					foreach($arr['engines'] as $ttk=>$ttv){
						if($ttv['engine'] == $teng || $ttv['format'] == LibFc::FormatNum($teng)){
							if($countArr['engs'] == $countArr['jgl_kws'] && $matches['jgl_kws'][$tk] && empty($arr['engines'][$ttk]['jgl_kw'])){
								$arr['engines'][$ttk]['jgl_kw'] = $matches['jgl_kws'][$tk];
								unset($arr['needkw']['jgl_kw'][$ttk]);
							}
							if($countArr['engs'] == $countArr['ed_kws'] && $matches['ed_kws'][$tk] && empty($arr['engines'][$ttk]['ed_kw'])){
								$arr['engines'][$ttk]['ed_kw'] = $matches['ed_kws'][$tk];
								unset($arr['needkw']['ed_kw'][$ttk]);
							}
						}
					}
				}
				if(($arr['hasJglkw'] && empty($arr['needkw']['jgl_kw'])) || ($arr['hasEdkw'] && empty($arr['needkw']['ed_kw'])))
					return LibFc::ReturnData(true, $arr);
			}
		}
		return LibFc::ReturnData(true, $arr);
	}
	

	private function formatEngByRemark2($arr)
	{
		$remarktxt = $arr['remark'];
		//2281484  1787152  876543 40631
		$remarktxt = preg_replace('/\(L\/\d+km\)/ui', '', $remarktxt); //(L/100km)
		$remarktxt = preg_replace('/\(kw\)/ui', '', $remarktxt); //(kw)
		$reArr =['，'=>',', '；'=>';', '：'=>':',': '=>':','、'=>',', '(配'=>'(',
			'发动机时,发动机'=>'发动机','发动机(发动机'=>'发动机','千瓦'=>'kw',
			'发动机净功率值:发动机最大净功率'=>'最大净功率','油耗申报值'=>'油耗','油耗值'=>'油耗',
			'发动机时,净功率'=>'净功率','发动机时,最大'=>'最大','净功率f分'=>'净功率分','净功率值'=>'净功率','净功率 '=>'净功率','净功率是'=>'净功率',
			'对应的最大净功率为'=>'最大净功率为','发动机时,最大净功率'=>'最大净功率','发动机油耗'=>'油耗','发动机最大净功率'=>'最大净功率','发动机,最大'=>'最大','净功率为l:'=>'净功率为:',
		];
		$remarktxt = strtr($remarktxt, $reArr);
		//二次转换
		$reArr =["功率值"=>'功率', '发动机,最大'=>'最大'];
		$remarktxt = strtr($remarktxt, $reArr);
		$remarktxt = preg_replace('/油耗值?\d+\.?\d*值?最?大?净功率/ui', '最大净功率', $remarktxt);
		$remarktxt = preg_replace('/,油耗分别为[0-9\.;,]+最大净功率/ui', '最大净功率', $remarktxt);//40631  ISD285 50,ISD30050,油耗申报值(L/100km)分别为33.5,33.5;最大净功率分别为204kW,215kW 
		$remarktxt = preg_replace('/对应的油耗为[0-9\.;,]+对应的净功率/ui', '净功率', $remarktxt);//1699245  HFC4DA1-2C,YN33CRD1,CY4T75-CE4对应的油耗申报值(L/100km)为12.2,11.8,11.9对应的净功率值为85,80,72
		$arr['remarktxt'] = $remarktxt;
		$jgl_kw = ''; $ed_kw = '';
		if(count($arr['engines']) == 1)
		{//单发动机
			
			//驱动电机类型/型号/额定功率/峰值功率/生产企业:永磁同步电机/ TZ400XSTPG34/240kW/360kW/
			//发动机/油耗值/净功率为:DK15-10/8.9/78
			if(preg_match('/净功率[^\d\/\;\,\。]*:(\d{2,}\.?\d*)/iu', $remarktxt, $match)){
				$jgl_kw = $match[1];
			}else if(preg_match('/净功率[^\d\/\;\,\。\:]*(\d{2,}\.?\d*)/iu', $remarktxt, $match)){
				$jgl_kw = $match[1];
			}
			//电机驱动
			if(stripos($remarktxt, '峰值功率') === false)
			{
				if(preg_match('/额定功率[^\d\/\;\,\。]*:(\d{2,}\.?\d*)/iu', $remarktxt, $match)){
					$ed_kw = $match[1];
				}else if(preg_match('/额定功率[^\d\/\;\,\。\:]*(\d{2,}\.?\d*)/iu', $remarktxt, $match)){
					$ed_kw = $match[1];
				}
			}
			if(empty($jgl_kw) && preg_match('/发动机[^为]*为[^净]*净功率/iu', $remarktxt, $match)) $jgl_kw = 'kw';
			if(empty($ed_kw) && preg_match('/发动机[^为]*为[^额]*额定功率/iu', $remarktxt, $match)) $ed_kw = 'kw';
		}
		else if(!$arr['txtHasEngCount'])
		{//无发动机型号
			//3976 ,发动机功率参数为净功率值。
			if(empty($jgl_kw) && stripos($arr['remark'], '发动机功率参数为净功率值') !== false) $jgl_kw = 'kw';
			if(empty($jgl_kw) && stripos($arr['remark'], '。发动机采用净功率,') !== false) $jgl_kw = 'kw';
			if(empty($ed_kw) && stripos($arr['remark'], '发动机功率参数为额定功率值') !== false) $ed_kw = 'kw';
			//4790 发动机净功率为85kW
			if(empty($jgl_kw) && preg_match('/净功率值?为?:?(\d{2,}\.?\d*)kw/iu', $remarktxt, $match)) $jgl_kw = $match[1];
			if(empty($ed_kw) && preg_match('/额定功率为?:?(\d{2,}\.?\d*)kw/iu', $remarktxt, $match)) $ed_kw = $match[1];
		}

		$res = $this->formatKw($arr, $arr['needkw'], $jgl_kw, $ed_kw);
		$arr = $res['arr'];
		$arr['needkw'] = $res['needMatch'];

		if(!empty($arr['needkw']['jgl_kw']) || !empty($arr['needkw']['ed_kw']))
		{//多发动机
			$filed = 'jgl_kw';
			if(preg_match('/净功率[^:]*:([0-9a-zA-Z\-\*\.为, ]+)/iu', $remarktxt, $match))
			{//28762 发动机净功率值:CA6DN1-46E3为338kW,CA6DN1-42E3,CA6DN1-42E3F为309kW,CA6DN1-39E3,CA6DN1-39E3F为287kW
				if(preg_match_all('/([^为]+)为(\d{2,}\.?\d*) ?kw/iu', $match[1], $smatch))
				{
					$tengkws = [];
					foreach($smatch[1] as $sm1k=>$engtxt)
					{
						foreach(explode(',', trim($engtxt,',')) as $eng)
						{
							$tengkws[LibFc::FormatEng($eng)] = $smatch[2][$sm1k];
						}
					}
					foreach($arr['needkw'][$filed] as $tk=>$tv)
					{
						$formateng = LibFc::FormatEng($tv['engine']);
						if(!empty($tengkws[$formateng])){
							if(empty($arr['engines'][$tk][$filed])) $arr['engines'][$tk][$filed] = $tengkws[$formateng];
							unset($arr['needkw'][$filed][$tk]);
						}
					}
				}
			}
			
			if(!$arr['txtHasEngCount'] && count($arr['engines']) == 2)
			{
				$sregs = [
					['reg'=>'/。发动机[\x{4e00}-\x{9fa5}]*净功率为?(\d{2,}\.?\d*)kW[和,](\d{2,}\.?\d*)kW。/iu', 'filed'=>'jgl_kw'],
					['reg'=>'/发动机[\x{4e00}-\x{9fa5}]*净功率\(kw\)对应值:(\d{2,}\.?\d*),(\d{2,}\.?\d*)/iu', 'filed'=>'jgl_kw'],
					['reg'=>'/发动机[\x{4e00}-\x{9fa5}]*净功率\(kw\)对应值:(\d{2,}\.?\d*),(\d{2,}\.?\d*)/iu', 'filed'=>'jgl_kw'],
				];
				foreach($sregs as $sreg)
				{
					$filed = $sreg['filed'];
					if(empty($arr['needkw'][$filed])) continue;
					if(preg_match($sreg['reg'], $remarktxt, $match))
					{//505777  。发动机最大净功率为98kW和105kW。
						foreach([$match[1], $match[2]] as $tk=>$tv)
						{
							if(empty($arr['engines'][$tk][$filed])) 
							{
								$arr['engines'][$tk][$filed] = $tv;
								unset($arr['needkw'][$filed][$tk]);
							}
						}
					}
				}
			}
			
			if($arr['txtHasEngCount'])
			{//内容里有发动机型号
				$regArr = [
					[
						'filed'=>'jgl_kw',
						'big'=>'/发动机型号\/净功率\/油耗[\x{4e00}-\x{9fa5}]*:?([^\x{4e00}-\x{9fa5}]{4,})/ui', //发动机型号/净功率(kw)/油耗值(L/100km)对应关系
						'small'=>[
							'/#eng#\/(\d{2,}\.?\d*)\/\d/ui',//2198808  ISGe5-300/219/41.2,ISGe5-320/234/41.2
						],
					],
					[
						'filed'=>'jgl_kw',
						'big'=>'/发动机[^\/]*\/[^\/]*净功率[^:]*:([^\x{4e00}-\x{9fa5}]{4,})/ui',//发动机型号/净功率
						'small'=>[
							'/#eng#\/(\d{2,}\.?\d*)kw/ui',//2125799  WP12NG380E50/272KW;WP12NG350E50/249KW
							'/#eng#\/(\d{2,}\.?\d*)/ui',//2615172 WP12NG420E50/301/40000kg
						],
					],
					[
						'filed'=>'jgl_kw',
						'big'=>'/发动机[\x{4e00}-\x{9fa5}]*净功率[^:]*:([^\x{4e00}-\x{9fa5}]{4,})/ui',//发动机型号/净功率
						'small'=>[
							'/#eng#\/(\d{2,}\.?\d*)kw/ui',//1953078 发动机净功率对应关系:WP12.336E40/242kw;WP12.375E40/271kw  
							'/#eng#\/(\d{2,}\.?\d*)/ui',//2992179 发动机型号所对应的最大净功率(kw)为:ISGe5-510/374,ISGe5-490/359,ISGe5-460/330,ISGe5-430/315
						],
					],
					[
						'filed'=>'jgl_kw',
						'big'=>'/发动机[^\/]*\/[^\/]+\/[\x{4e00}-\x{9fa5}]*净功率[^:]+:([^\x{4e00}-\x{9fa5}]{4,})/ui',//发动机/油耗值(L)/净功率(Kw)为
						'small'=>[
							'/#eng#\/[^\/]+\/(\d{2,}\.?\d*)/ui',//2136 YNF40E2/12.9/111,YC4S150-50/12.9/105,YCD4F4S-130/12.9/92,YNF40E1/12.9/121,D30TCIE1/12.9/110
						],
					],
					[
						'filed'=>'jgl_kw',
						'big'=>'/净功率值?[^:]*:([^\x{4e00}-\x{9fa5}]{4,})/ui',
						'small'=>[
							'/[^0-9](\d{2,}\.?\d*)\/#eng#/ui',//1778428  253/CM6D10.350 50,250/CM6D18.345 50
						],
					],
					[
						//发动机最大净功率/准拖挂车总质量为:  发动机对应的最大净功率为:  发动机/最大净功率/准拖挂车总质量对应关系:  发动机净功率:271kW(WP10.375E53),271kW(WP12.375E50)
						'filed'=>'jgl_kw',
						'big'=>'/净功率[^:为]*[:为]([^\x{4e00}-\x{9fa5}]{4,})/ui',
						'small'=>[
							'/#eng#\((\d{2,}\.?\d*)kw\)/ui',//102  WP12NG400E50(286kW)/38775Kg,WP13NG430E52(308kW)/38775Kg
							'/#eng#\((\d{2,}\.?\d*)\)\//ui',//102  WP12NG400E50(286)/40000
							'/(\d{2,}\.?\d*)kw\(#eng#\)/ui',//267  117kW(YCY30165-60),121kW(WP4.1NQ170E61)  308  275kW(配YCK09380-60);289kW(配YCK09400-60)
							'/(\d{2,}\.?\d*)\([\x{4e00}-\x{9fa5}]*#eng#\)/ui', //发动机最大净功率(KW):176(配YCS06245-60),166(配D6.7NS6B230)
							'/#eng#\/(\d{2,}\.?\d*)kw/ui',//WP12.460E50/333kw/38900kg,WP12.430E50/311kw/38900kg,WP12.375E50/271kw/38900kg,WP12.336E50/242kw/38300kg
						],
					],
					[
						//发动机最大净功率/准拖挂车总质量为:  发动机对应的最大净功率为:  发动机/最大净功率/准拖挂车总质量对应关系:  发动机净功率:271kW(WP10.375E53),271kW(WP12.375E50)
						'filed'=>'jgl_kw',
						'big'=>'/净功率([^\x{4e00}-\x{9fa5}]{4,})/ui',
						'small'=>[
							'/#eng#[\:](\d{2,}\.?\d*)kw/ui',//WP12.460E50/333kw/38900kg,WP12.430E50/311kw/38900kg,WP12.375E50/271kw/38900kg,WP12.336E50/242kw/38300kg
						],
					],
				];
				foreach($regArr as $rval)
				{
					$filed = $rval['filed'];
					if(empty($arr['needkw'][$filed])) continue;
					if(!preg_match($rval['big'], $remarktxt, $bigmatch)) continue;
					$stxt = $bigmatch[1];
					foreach($arr['needkw'][$filed] as $tk=>$tv)
					{
						foreach($rval['small'] as $sreg)
						{
							if(!empty($arr['engines'][$tk][$filed])) break;
							if(preg_match(str_replace('#eng#', $tv['engreg'], $sreg), $stxt, $smatch))
							{
								$arr['engines'][$tk][$filed] = $smatch[1];
								unset($arr['needkw'][$filed][$tk]);
								break;
							}
						}
					}
				}

				$filed = 'jgl_kw';
				if(!empty($arr['needkw'][$filed]) && stripos($remarktxt, '净功率'))
				{//发动机1,发动机2最大净功率为xx,xx
					$sregs = [
						//发动机YCK08350-60/A7NS6B300/A7NS6B350/A7NS6B380,最大净功率253kW/216kW/252kW/274kW
						['reg'=>'/发动机([0-9a-z]{2}[0-9a-z\-\.\* ,;\/]{2,})[\x{4e00}-\x{9fa5}]*净功率[\x{4e00}-\x{9fa5}]*([0-9kw,\.\/ ]{4,})/ui', 'type'=>'anykw', 'expchar'=>'/'],
						//3127375 发动机4L18CF,4A1-68C43最大净功率均为48KW  
						['reg'=>'/([0-9a-z]{2}[0-9a-z\-\.\* ,;]{2,})[\x{4e00}-\x{9fa5}]*净功率均为[\x{4e00}-\x{9fa5}]*([0-9\.]{2,})kw/ui', 'type'=>'onekw'],
						//第一有中文 714129  ZD30D15-4N和ZD25D14-4N对应的最大净功率分别为103KW和93KW
						['reg'=>'/([0-9a-z]{2}[0-9a-z\-\.\* |和]{2,})[\x{4e00}-\x{9fa5}]*净功率[分|别|为]*[\x{4e00}-\x{9fa5}]*:?([0-9kw\. |和]{4,})/ui', 'type'=>'anykw', 'expchar'=>'和'],
						['reg'=>'/([0-9a-z]{2}[0-9a-z\-\.\* \/]{2,})[\x{4e00}-\x{9fa5}]*净功率[分|别|为]*[\x{4e00}-\x{9fa5}]*:?([0-9kw\. \/]{4,})/ui', 'type'=>'anykw', 'expchar'=>'/'],
						//1500953 WP7.270E51,WP7.300E51的最大净功率分别为194,215kW.   
						//68563
						['reg'=>'/([0-9a-z]{2}[0-9a-z\-\.\* ,;]{2,})[\x{4e00}-\x{9fa5}]*净功率[分|别|为]*[\x{4e00}-\x{9fa5}]*:?([0-9kw\. ,;]{4,})/ui', 'type'=>'anykw', 'expchar'=>','],
						//1014281 ISF3.8s5141,WP3Q130E50,JND408D143-52,HFC4DE1-1D对应的最大净功率(KW)/油耗值(L/100km)为102/12.4,91/12.4,102/12.6,110/12.1
						['reg'=>'/([0-9a-z]{2}[0-9a-z\-\.\* ,;]{2,})[\x{4e00}-\x{9fa5}]*净功率\/油耗[\x{4e00}-\x{9fa5}]*([0-9kw,\.\/ ]{4,})/ui', 'type'=>'anykw', 'kwreg'=>'/(\d{2,}\.?\d*)\/\d/'],
						//2193008 WP8.350E61,WP7.300E61,WP9H350E62,WP10H400E62对应油耗/最大净功率分别为37.18/252,37.37/215,36.87/252,37.18/289
						['reg'=>'/([0-9a-z]{2}[0-9a-z\-\.\* ,;]{2,})[\x{4e00}-\x{9fa5}]*油耗\/最?大?净功率[\x{4e00}-\x{9fa5}]*([0-9kw,\.\/ ]{4,})/ui', 'type'=>'anykw', 'kwreg'=>'/[0-9\.]*\/(\d{2,}\.?\d*)/'],
					];
					foreach($sregs as $reg)
					{
						if(preg_match($reg['reg'], $remarktxt, $match))
						{
							//3076931 2200mm.ISF2.8s5148T、HFC4DE1-1D发动机最大净功率分别为103.3kW、110kW
							$match[1] = preg_replace('/^\d{3,}mm\./', '', $match[1]);
							$match[1] = preg_replace('/^\d{1,2}\./', '', $match[1]);
							//1699245 发动机HFC4DA1-2C,YN33CRD1,CY4T75-CE4对应的油耗申报值(L/100km)为12.2,11.8,11.9对应的净功率值为85,80,72;9.选
							$match[2] = preg_replace('/[;,]\d[\.,]$/', '', $match[2]);
							$expchar = !empty($reg['expchar'])? $reg['expchar']: ',';
							//2691518  WP12.375E50,WP12.430E50,WP12.460E50,WP10.350E53;WP10H400E50的最大净功率为271,311,333,252,289kW
							$match[1] = trim(strtr($match[1], [';,'=>$expchar,',;'=>$expchar,';'=>$expchar]), ';,.'.$expchar);
							$match[2] = trim(strtr($match[2], [';,'=>$expchar,',;'=>$expchar,';'=>$expchar]), ';,.'.$expchar);
							//var_dump($match);
							$tengs = explode($expchar, $match[1]);
							$kws = explode($expchar, $match[2]);
							if((count($tengs) > 1 && count($tengs) == count($kws)) || ($reg['type'] == 'onekw' && count($kws) == 1)){}else{ continue;}
							$tengkws = [];
							foreach($tengs as $tk1=>$tv1)
							{
								$kw = $reg['type'] == 'onekw'? $kws[0]: $kws[$tk1];
								if(empty($reg['kwreg'])) $reg['kwreg'] = '/(\d{2,}\.?\d*)/i';
								
								if(preg_match($reg['kwreg'], $kw, $smatch))
								{
									$tengkws[LibFc::FormatEng($tv1)] = $smatch[1];
								}
							}
							foreach($arr['needkw'][$filed] as $tk=>$tv)
							{
								$formateng = LibFc::FormatEng($tv['engine']);
								if(!empty($tengkws[$formateng]))
								{
									if(empty($arr['engines'][$tk][$filed])) $arr['engines'][$tk][$filed] = $tengkws[$formateng];
									unset($arr['needkw'][$filed][$tk]);
								}
							}
						}
						if(empty($arr['needkw'][$filed])) break;
					}
				}
			}
		}
		

		$filed = 'jgl_kw';
		if(!$arr['txtHasEngCount'] && !empty($arr['needkw'][$filed]))
		{//无发动机
			$sregs = [
				//1381296 最大净功率依次为:310kW,333kW,362kW,289kW,275kW,310kW,385kW,363kW,341kW,311kW,
				['reg'=>'/[\x{4e00}-\x{9fa5}]*净功率[\x{4e00}-\x{9fa5}]*为?:?([0-9kw,\. ]+)/ui'],
			];
			foreach($sregs as $reg)
			{
				if(preg_match($reg['reg'], $remarktxt, $match))
				{
					$kws = explode(',', trim($match[1], ',.'));
					if(count($arr['engines']) != count($kws)) continue;
					foreach($arr['engines'] as $tk=>$tv)
					{
						if(empty($tv[$filed]) && preg_match('/(\d{2,}\.?\d*)/', $kws[$tk], $smatch))
						{
							if(empty($arr['engines'][$tk][$filed])) $arr['engines'][$tk][$filed] = $smatch[1];
							unset($arr['needkw'][$filed][$tk]);
						}
					}
				}
				if(empty($arr['needkw'][$filed])) break;
			}
		}

		//逐条匹配  
		$sregs = [
			['reg'=>'/([^\x{4e00}-\x{9fa5}]*)#eng#\(?[\x{4e00}-\x{9fa5}]*净功率[\x{4e00}-\x{9fa5}]*为?:?(\d{2,}\.?\d*)[k, 油]/ui', 'filed'=>'jgl_kw'], //1015503 JX493ZLQ6发动机最大净功率83kW,对应油耗申报值9.34;JX493ZLQ6B发动机最大净功率88kW   2798289 MC07.24-50最大净功率为173kW,MC07.28-50最大净功率为203kW  186339 4KH1-TCG51型号发动机时净功率为87kW  1676154
			['reg'=>'/([^\x{4e00}-\x{9fa5}]*)#eng#最大净功率与油耗分别为:?(\d{2,}\.?\d*)kw/ui', 'filed'=>'jgl_kw'],//522788 YC4FA120-40发动机,最大净功率与油耗值分别为:83kw,17.9L/100km.ISF3.8s4141发动机,最大净功率与油耗值分别为101.86kw,18.58,18.09L/100km.CY4102-CE4C发动机,最大净功率与油耗值分别为88kw.18.41,18.25L/100km
			//1967105 ;6C260为净功率,
			['reg'=>'/净功率(\d{2,}\.?\d*)kw的#eng#/ui', 'filed'=>'jgl_kw'],
			//1988469 发动机型号:ISGe5-430,对应净功率:315;
			['reg'=>'/发动机型号:#eng#,对应净功率:(\d{2,}\.?\d*)/ui', 'filed'=>'jgl_kw'],
			//1468168 ISF2.8s5148T时,净功率为103.3kW
			['reg'=>'/#eng#时,净功率[为|:](\d{2,}\.?\d*)/ui', 'filed'=>'jgl_kw'],
			//3161125 WP7.300E61发动机(最大净功率215kw)
			['reg'=>'/#eng#发动机\(最?大?净功率(\d{2,}\.?\d*)/ui', 'filed'=>'jgl_kw'],
			//2937008 型号:TZ400XS35B,额定功率230KW
			['reg'=>'/型号:?#eng#,?额定功率(\d{2,}\.?\d*)/ui', 'filed'=>'ed_kw'],
			['reg'=>'/型号:?#eng#,?最?大?净功率(\d{2,}\.?\d*)/ui', 'filed'=>'jgl_kw'],
			['reg'=>'/#eng#为最?大?净功率[,;]/ui', 'filed'=>'jgl_kw', 'val'=>'kw'],
			['reg'=>'/#eng#发动机功率为净功率[,;]/ui', 'filed'=>'jgl_kw', 'val'=>'kw'],
		];
		foreach($sregs as $sreg)
		{	
			$filed = $sreg['filed'];
			if(empty($arr['needkw'][$filed])) continue;
			foreach($arr['needkw'][$filed] as $tk=>$tv)
			{
				if(!empty($arr['engines'][$tk][$filed])) break;
				if(preg_match(str_replace('#eng#', $tv['engreg'], $sreg['reg']), $remarktxt, $smatch))
				{
					$anyEng = false;
					if(!empty($sreg['val']) && $sreg['val'] == 'kw'){
						$kwval = $arr['engines'][$tk]['kw'];
					}else if(isset($smatch[2])){
						$kwval = $smatch[2];
						foreach($arr['engines'] as $ttv)
						{
							if(stripos($smatch[1], $ttv['engine']) !== false){
								$anyEng = true;
								break;
							}
						}
					}else if(isset($smatch[1])){
						$kwval = $smatch[1];
					}
					if(!$anyEng && $kwval > 0){
						if(empty($arr['engines'][$tk][$filed])) $arr['engines'][$tk][$filed] = $kwval;
						unset($arr['needkw'][$filed][$tk]);
						continue;
					}
				}
			}
		}

		//最后 有发动机，有可能是同一个值
		if(!empty($arr['needkw']['jgl_kw']) || !empty($arr['needkw']['ed_kw']))
		{
			$jgl_kw = ''; $ed_kw = '';
			//22214 发动机功率参数为净功率值
			if(empty($jgl_kw) && stripos($arr['remark'], '发动机功率参数为净功率值') !== false) $jgl_kw = 'kw';
			if(empty($ed_kw) && stripos($arr['remark'], '发动机功率参数为额定功率值') !== false) $ed_kw = 'kw';
			$res = $this->formatKw($arr, $arr['needkw'], $jgl_kw, $ed_kw);
			$arr = $res['arr'];
			$arr['needkw'] = $res['needMatch'];
		}
		return LibFc::ReturnData(true, $arr);
	}
}