<?php
/**
*TCD
*/
class tcdAction extends baseAction
{

	/**
	  * @method 号码搜索 
	  * @http  get
	  * @param  number   string [必填] 号码
	  * @param  maxCount string [选填] 最大数量 默认20
	  * @author soul
	  * @copyright 2017/4/13
	  * @return 
		{"status":true,"data":[{"pro_id":"2708912","pro_code":"brake_pad_set_disc_brake,trw,gdb900","pro_name":"Brake Pad Set, disc brake","pro_yppartid":["160","13"],"num":[{"factory":"TRW","display":"GDB900"}],"pic":["http:\/\/3thpics.yiparts.com\/tpic\/30\/13\/small\/1357489.jpg"],"para":[{"name":"for manufacturer","val":"TRW","unit":""},{"name":"Wear Warning Contact","val":"incl. wear warning contact","unit":""},{"name":"Height","val":"48.5","unit":"mm"},{"name":"Length","val":"95","unit":"mm"},{"name":"Thickness\/Strength","val":"16.4","unit":"mm"}]}],"code":0}
		{"status":false,"data":'失败原因',"code":''}
	  */
	public function searchNumber()
	{
		$maxCount = empty($_GET['maxCount'])? 20: $_GET['maxCount'];
		$TcdArt = new TcdArt();
		$res = $TcdArt->searchNumberAll($_GET['number'], $maxCount, ['para']);
		echo json_encode($res);
	}

	/**
	  * @method 配件详情
	  * @http  get
	  * @param  pro_id   string [必填] 旧版为数字，新版为字符串402_206_37101
	  * @author soul
	  * @copyright 2017/4/13
	  * @return 
		{"status":true,"data":{"pro_id":"2707154","pro_name":"Brake Pad Set, disc brake",
		"para":[{"name":"for manufacturer","val":"BREMBO","unit":""}...],
		"pic":["http:\/\/3thpics.yiparts.com\/tpic\/49\/13\/small\/1355379.jpg"],
		"num":[{"factory":"TRW","display":"GDB1816"}],"nums":[{"oe":0,"factory":"A.B.S.","display":"37742"}...],
		"model":[{"mod3_id":"6208","brand_id":"6","brand_name":"\u5965\u8fea","make_name":"\u5965\u8fea(\u8fdb\u53e3)","mod2_name":"Q7 (4LB)","mod3_name":"3.0 TDI","mod3_start_year":"2012","mod3_end_year":"2015"}...]}
		,"code":0}
		{"status":false,"data":'失败原因',"code":''}
	  */
	public function artDetail()
	{
		$proId = empty($_GET['pro_id'])? '': $_GET['pro_id'];
		$TcdArt = new TcdArt();
		$res = $TcdArt->getProductInfo([$proId], ['para', 'picAll', 'model', 'nums']);
		if(!empty($res['data']))
			$res['data'] = array_shift($res['data']);
		echo json_encode($res);
	}

	/**
	  * @method 是否为新版数据
	  * @http  get
	  * @param  pro_id   string [必填] 
	  * @author soul
	  * @copyright 2017/4/13
	  * @return 
		{"status":true,"data":bool,"code":0}
		{"status":false,"data":'失败原因',"code":''}
	  */
	function isNew()
	{
		$isNew = false;
		$artId = (int) $_GET['pro_id'];
		$TcdArt = new TcdArt();
		$res = $TcdArt->get('TOF_ARTICLES', ['ART_VERSION'], sprintf(" and ART_ID = %d", $artId), true);
		$ver = $res['data']['ART_VERSION'];
		$isNew = str_pad(1, strlen($ver), "0",STR_PAD_RIGHT) == $ver? true: false;
		LibFc::ReturnJson(true, $isNew);
	}


	/**
	  * @method 通过号码获取TCD的号码对比数据
	  * @http  POST
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @param  oes                array  [必填] ['11111', '22222'.....]
	  * @author soul
	  * @copyright 2017/11/20
	  * @return 
	  {"status":true,"data": [],"code":""}
	  {"status":false,"data":'失败原因',"code":''}
	  */
	public function getNumContrast()
	{
		$TcdArt = new TcdArt();
		$res = $TcdArt->getNumContrast($_POST['oes']);
		echo json_encode($res);
	}
	

	/**
	  * @method 通过厂商号码获取TCD的配件信息
	  * @http  POST
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @param  fac                string  [选填]
	  * @param  number             string  [必填]
	  * @author soul
	  * @copyright 2017/11/20
	  * @return 
	  {"status":true,"data": [],"code":""}
	  {"status":false,"data":'失败原因',"code":''}
	  */
	public function getArtByNum()
	{
		$arr = [];
		$fac = $_GET['fac'];
		$formatNum = LibFc::FormatNum($_GET['number']);
		if(strlen($formatNum) > 2)
		{
			$where = sprintf(" SELECT DISTINCT ARL_ART_ID FROM TOF_ART_LOOKUP JOIN TOF_ARTICLES ON ARL_ART_ID = ART_ID WHERE ARL_SEARCH_NUMBER ='%s'", LibFc::Escape($formatNum));
			if(!empty($fac))
			{
				$TcdArt = new TcdArt();
				$res = $TcdArt->getBrandId($fac);
				if(!empty($res['data']))
				{
					$where .= sprintf(" AND (ARL_BRA_ID IN (%s)	OR ART_SUP_ID IN (%s))", implode(',', $res['data']), implode(',', $res['data']));
				}
			}
			$where = ' AND ART_ID IN('.$where.') ORDER BY SUP_BRAND, ART_ARTICLE_NR';
			$TcdBase = new TcdBase();
			$res = $TcdBase->get('TOF_ARTICLES JOIN TOF_SUPPLIERS ON SUP_ID = ART_SUP_ID', ['ART_ID', 'ART_ARTICLE_NR', 'SUP_BRAND', 'ART_PIC', 'ART_URL'], $where);
			foreach($res['data'] as $v)
			{
				$v['ART_URL'] = mvc::$cfg['urls']['tcdArt'].$v['ART_URL'];
				$arr[] = $v;
			}
		}
		LibFc::ReturnJson(true, $arr);
	}

	

	/**
	  * @method 通过TCD的配件对比数据
	  * @http  POST
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @param  oes                array  [必填] ['11111', '22222'.....]
	  * @author soul
	  * @copyright 2017/11/20
	  * @return 
	  {"status":true,"data": [],"code":""}
	  {"status":false,"data":'失败原因',"code":''}
	  */
	public function getArtContrast()
	{
		$TcdArt = new TcdArt();
		$res = $TcdArt->getArtContrast(explode(',', $_GET['artIds']));
		echo json_encode($res);
	}



	/**
	  * @method 重建TCD知名品牌的车型/发动机关联表 MS_SUP_TYPES、MS_SUP_ENGINES
	  * @http	get
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @param  supids              string [选填] 默认所有 62,63...
	  * @author soul
	  * @copyright 2019/5/27
	  * @return {"status":true,"data":true,"code":0,"encry":0,"runtime":74}
	  */
	public function resetFacTypLink()
	{
		$Params = mvc::$URL_PARAMS;
		$supIdArr = [];
		if(!empty($Params['supids']))
		{
			foreach(explode(',', $Params['supids']) as $v)
			{
				$supIdArr[] = (int) $v;
			}
		}
		$TcdArt = new TcdArt();
		$res = $TcdArt->resetFacTypLink($supIdArr);
		LibFc::EchoJson($res);
	}


	/**
	  * @method TCD知名品牌的车型品牌
	  * @http	get
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @param  supid              string [必填] 厂商ID
	  * @author soul
	  * @copyright 2019/5/27
	  * @return {"status":true,"data":[{"make_id":"11351","make_name":"ABARTH","make_name_cn":"\u963f\u5df4\u65af","initial":"A"}...],"code":0,"encry":0,"runtime":74}
	  */
	public function getFacBrand()
	{
		$Params = mvc::$URL_PARAMS;
		$supid = (int) $Params['supid'];
		$arr = [];
		$TcdBase = new TcdBase();
		$res = $TcdBase->get('TOF_MANUFACTURERS', ['MFA_ID, MFA_BRAND, MFA_BRAND_CN'],  sprintf(" AND MFA_ID IN (SELECT DISTINCT SUT_BRAND_ID FROM MS_SUP_TYPES WHERE SUT_SUP_ID = %d)  ORDER BY MFA_BRAND", $supid));
		foreach($res['data'] as $v)
		{
			$arr[] = [
				'make_id'=>$v['MFA_ID'], 
				'make_name'=>$v['MFA_BRAND'],
				'make_name_cn'=>$v['MFA_BRAND_CN'],
				'initial'=>substr($v['MFA_BRAND'], 0, 1)
			];
		}
		LibFc::ReturnJson(true, $arr);
	}


	/**
	  * @method TCD知名品牌的车型品牌的车型级
	  * @http	get
	  * @param  supid              string [必填] 厂商ID
	  * @param  make_id              string [必填] 车型品牌ID
	  * @author soul
	  * @copyright 2019/5/27
	  * @return {"status":true,"data":[{"mod2_id":"4211","mod2_name":"ACE","mod2_start_year":"199810","mod2_end_year":"0"},{"mod2_id":"4210","mod2_name":"ACE","mod2_start_year":"199501","mod2_end_year":"199810"},{"mod2_id":"4212","mod2_name":"ACECA","mod2_start_year":"199201","mod2_end_year":"200112"},{"mod2_id":"4213","mod2_name":"COBRA Mk IV (291N)","mod2_start_year":"199001","mod2_end_year":"0"}],"code":0,"encry":0,"runtime":494}
	  */
	public function getFacBrandModel()
	{
		$Params = mvc::$URL_PARAMS;
		$supid = (int) $Params['supid'];
		$make_id = (int) $Params['make_id'];
		$arr = [];
		if($supid > 0 && $make_id > 0)
		{
			$where = sprintf(" AND TCD_ID IN ( SELECT DISTINCT SUT_MOD_ID FROM MS_SUP_TYPES WHERE SUT_SUP_ID = %d AND SUT_BRAND_ID=%d)  ORDER BY NAME, START_Y desc", $supid, $make_id);
			$TcdBase = new TcdBase();
			$res = $TcdBase->get('MODEL_SERIES', ['TCD_ID MOD2_ID, NAME MOD2_NAME,START_Y MOD2_START_YEAR, END_Y MOD2_END_YEAR'], $where);
			foreach($res['data'] as $v)
			{
				$arr[] = [
					'mod2_id'=>$v['MOD2_ID'], 
					'mod2_name'=>$v['MOD2_NAME'],
					'mod2_start_year'=>$v['MOD2_START_YEAR'],
					'mod2_end_year'=>$v['MOD2_END_YEAR']
				];
			}
		}
		LibFc::ReturnJson(true, $arr);
	}


	/**
	  * @method TCD知名品牌的车型品牌的车型级
	  * @http	get
	  * @param  supid              string [必填] 厂商ID
	  * @param  make_id              string [必填] 车型品牌ID
	  * @param  mod2_id              string [选填] 车型级ID
	  * @param  word              string [选填] 关键字
	  * @author soul
	  * @copyright 2019/5/27
	  * @return {"status":true,"data":[{"mod3_id":"32109","mod2_name":"B7 (F01, F02)","mod3_name":"BITURBO","mod3_engine":"N63 M10 A","mod3_kw":"373","mod3_cc":"4395","mod3_cylinder":"8","mod3_start_year":"200903","mod3_end_year":"201206"},...],"code":0}
	  */
	public function getFacBrandTyp()
	{
		$Params = mvc::$URL_PARAMS;
		$supid = (int) $Params['supid'];
		$make_id = (int) $Params['make_id'];
		$arr = [];
		if($supid > 0 && $make_id > 0)
		{
			$mod2Where = !empty($Params['mod2_id'])? sprintf(" and SUT_MOD_ID=%d", $Params['mod2_id']):'';
			$wordWhere = !empty($Params['word']) ?  sprintf(" and VEHICLE like '%%%s%%'", LibFc::Escape($Params['word'])): '';
			$where = sprintf(" AND SUT_SUP_ID = %d AND SUT_BRAND_ID=%d %s %s ORDER BY A.VEHICLE, A.START_Y DESC", $supid, $make_id, $mod2Where, $wordWhere);
			$TcdBase = new TcdBase();
			$modres = $TcdBase->get('MS_SUP_TYPES JOIN MODELS A ON SUT_TYP_ID=A.TCD_ID JOIN MODEL_SERIES B ON A.MODEL_SERIES_ID=B.TCD_ID ', ['A.TCD_ID MOD3_ID, SHORT_DES MOD3_NAME, B.NAME MOD2_NAME, KW, CC,CYLINDER, A.START_Y MOD3_START_YEAR, A.END_Y MOD3_END_YEAR'], $where);
			
			if(!empty($modres['data']))
			{
				$table = 'TOF_LINK_TYP_ENG JOIN TOF_ENGINES ON ENG_ID = LTE_ENG_ID';
				$res = $TcdBase->get($table, ['LTE_TYP_ID, ENG_CODE'], sprintf(" AND LTE_TYP_ID IN(%s) ORDER BY ENG_CODE", implode(',', array_column($modres['data'], 'MOD3_ID'))));
				$TypeEng = [];
				foreach($res['data'] as $v)
				{
					$TypeEng[$v['LTE_TYP_ID']][$v['ENG_CODE']] = $v['ENG_CODE'];
				}
				foreach($modres['data'] as $v)
				{
					$arr[] = [
						'mod3_id'=>$v['MOD3_ID'], 
						'mod2_name'=>$v['MOD2_NAME'],
						'mod3_name'=>$v['MOD3_NAME'],
						'mod3_engine'=>!empty($TypeEng[$v['MOD3_ID']])? implode(';', $TypeEng[$v['MOD3_ID']]): '',
						'mod3_kw'=>$v['KW'],
						'mod3_cc'=>$v['CC'],
						'mod3_cylinder'=>$v['CYLINDER'],
						'mod3_start_year'=>$v['MOD3_START_YEAR'],
						'mod3_end_year'=>$v['MOD3_END_YEAR']
					];
				}
			}
		}
		LibFc::ReturnJson(true, $arr);
	}


	/**
	  * @method TCD知名品牌的配件
	  * @http	get
	  * @param  supid             int [必填] 厂商ID
	  * @param  mod3_id           int [选填] 车型ID  [eng_id、mod3_id、number 三选一]
	  * @param  number            string [选填] 号码
	  * @param  eng_id            int [选填] 发动机ID
	  * @param  ga_id             int [选填] 分类ID
	  * @author soul
	  * @copyright 2019/5/27
	  * @return {"status":true,"data":[{"pro_id":"1970482","pro_code":"brake_disc,brembo,09502210","pro_url":"http:\/\/www.yiparts.com\/dt\/brake_disc,brembo,09502210.html","pro_name":"Brake Disc","pro_yppartid":["157","13"],"num":[{"factory":"BREMBO","display":"09.5022.10"}],"pic":["http:\/\/3thpics.yiparts.com\/tpic\/S65\/82\/small\/1970482_1.jpg"],"para":[{"name":"Brake Disc Type","val":"Internally Vented","unit":""},{"name":"Ø","val":"250","unit":"mm"},{"name":"for Art.No.","val":"09.5022.10","unit":""},{"name":"Brake Disc Thickness","val":"22","unit":"mm"}]}...],"code":0,"encry":0,"runtime":180}
	  */
	public function getFacArticle()
	{
		$Params = mvc::$URL_PARAMS;
		$supid = (int) $Params['supid'];
		$mod3_id = (int) $Params['mod3_id'];
		$eng_id = (int) $Params['eng_id'];
		$formatNum = LibFc::FormatNum($Params['number']);
		$maxCount = 50;
		$arr = [];
		if($supid > 0)
		{
			$TcdArt = new TcdArt();
			if(strlen($formatNum) > 2)
			{
				$tWhere = empty($Params['ga_id']) ? '': sprintf(" AND GA_ID=%d", $Params['ga_id']);
				$formatNumArr = LibFc::SearchNum($formatNum);
				$table = 'TOF_ARTICLES JOIN TOF_ART_LOOKUP ON ART_ID=ARL_ART_ID JOIN TOF_SUPPLIERS ON  SUP_ID= ART_SUP_ID JOIN TOF_GENERIC_ARTICLES ON GA_ID = ART_GA_ID'.$tWhere;
				$where = sprintf(" AND ARL_KIND=1 AND ARL_SEARCH_NUMBER IN ('%s') AND ART_SUP_ID =%d ORDER BY ARL_SEARCH_NUMBER, SUP_BRAND", implode("','", $formatNumArr), $supid);
				$filed = ['ART_ID'];
				$tcdRes = $TcdArt->get($table, $filed, $where);
			}
			else if($mod3_id > 0)
			{
				$tWhere = empty($Params['ga_id']) ? '': sprintf(" AND LAT_GA_ID=%d", $Params['ga_id']);
				$table =  sprintf("(SELECT ART_ID FROM TOF_ARTICLES
					LEFT JOIN TOF_SUPPLIERS ON SUP_ID = ART_SUP_ID 
					LEFT JOIN MS_GA_SUP_SEQ ON GSS_SUP_ID=ART_SUP_ID AND ART_GA_ID = GSS_GA_ID
					WHERE 1=1  AND ART_ID IN (
					  SELECT DISTINCT LAT_ART_ID FROM TOF_LINK_LA_TYP WHERE LAT_TYP_ID=%d AND LAT_SUP_ID=%d %s
					) ORDER BY ART_ARTICLE_NR, GSS_SEQ, SUP_BRAND)", $mod3_id, $supid, $tWhere);
				$tcdRes = $TcdArt->get($table, ['*'], sprintf(" AND ROWNUM <= %d", $maxCount));
			}
			else if($eng_id > 0)
			{
				$tWhere = empty($Params['ga_id']) ? '': sprintf(" AND LAT_GA_ID=%d", $Params['ga_id']);
				$table =  sprintf("(SELECT ART_ID FROM TOF_ARTICLES
					LEFT JOIN TOF_SUPPLIERS ON SUP_ID = ART_SUP_ID 
					LEFT JOIN MS_GA_SUP_SEQ ON GSS_SUP_ID=ART_SUP_ID AND ART_GA_ID = GSS_GA_ID
					WHERE 1=1  AND ART_ID IN (
					  SELECT DISTINCT LAT_ART_ID FROM TOF_LINK_LA_TYP JOIN TOF_LINK_TYP_ENG ON LTE_TYP_ID = LAT_TYP_ID WHERE LTE_ENG_ID=%d AND LAT_SUP_ID=%d %s
					) ORDER BY ART_ARTICLE_NR, GSS_SEQ, SUP_BRAND)", $eng_id, $supid, $tWhere);
				$tcdRes = $TcdArt->get($table, ['*'], sprintf(" AND ROWNUM <= %d", $maxCount));
			}

			if(!empty($tcdRes['data']))
			{
				$TcdArt = new TcdArt();
				$res = $TcdArt->getProductInfo(array_column($tcdRes['data'], 'ART_ID'), ['para'], 0, [$mod3_id]);
				$arr = array_values($res['data']);
			}
		}
		LibFc::ReturnJson(true, $arr);
	}


	/**
	  * @method TCD知名品牌的车型信息
	  * @http	get
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @param  mod2_id            string [选填] 车型级ID
	  * @param  mod3_id            string [选填] 车型ID
	  * @author soul
	  * @copyright 2019/5/27
	  * @return 
	  	mod2_id {"status":true,"data":{"make_id":"558","make_name":"NISSAN","mod2_name":"BLUEBIRD (T72 , T12, U12)","mod3_name":"2.0 (T12)","mod3_start_year":"198512","mod3_end_year":"198712"},"code":0,"encry":0,"runtime":149}
		mod3_id {"status":true,"data":{"make_id":"666","make_name":"AC","mod2_name":"ACE","mod2_start_year":"199810","mod2_end_year":"0"},"code":0,"encry":0,"runtime":188}
	  */
	public function getFacModelInfo()
	{
		$Params = mvc::$URL_PARAMS;
		$arr = [];
		if(!empty($Params['mod3_id']))
		{
			$TcdBase = new TcdBase();
			$table = 'MODELS A JOIN MODEL_SERIES B ON B.TCD_ID=A.MODEL_SERIES_ID
			JOIN TOF_MANUFACTURERS ON MFA_ID = A.BRAND_ID';
			$res = $TcdBase->get($table, ['A.BRAND_ID MAKE_ID, MFA_BRAND_CN MAKE_NAME,B.NAME MOD2_NAME,SHORT_DES MOD3_NAME, A.START_Y, A.END_Y'], sprintf(" AND A.TCD_ID =%d", $Params['mod3_id']), true);
			if(!empty($res['data']))
			{
				$arr = [
					'make_id'=>$res['data']['MAKE_ID'],
					'make_name'=>$res['data']['MAKE_NAME'],
					'mod2_name'=>$res['data']['MOD2_NAME'],
					'mod3_name'=>$res['data']['MOD3_NAME'],
					'mod3_start_year'=>$res['data']['START_Y'],
					'mod3_end_year'=>$res['data']['END_Y']
				];
			}
		}
		else if(!empty($Params['mod2_id']))
		{
			$TcdBase = new TcdBase();
			$table = 'MODEL_SERIES B JOIN TOF_MANUFACTURERS ON MFA_ID = B.BRAND_ID';
			$res = $TcdBase->get($table, ['B.BRAND_ID MAKE_ID, MFA_BRAND_CN MAKE_NAME,B.NAME MOD2_NAME,B.START_Y, B.END_Y'], sprintf(" AND B.TCD_ID =%d", $Params['mod2_id']), true);
			if(!empty($res['data']))
			{
				$arr = [
					'make_id'=>$res['data']['MAKE_ID'],
					'make_name'=>$res['data']['MAKE_NAME'],
					'mod2_name'=>$res['data']['MOD2_NAME'],
					'mod2_start_year'=>$res['data']['START_Y'],
					'mod2_end_year'=>$res['data']['END_Y']
				];
			}
		}
		LibFc::ReturnJson(true, $arr);
	}



	/**
	  * @method 通过关键字查找TCD知名品牌的发动机
	  * @http	get
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @param  supid              string [必填] 厂商ID
	  * @param  eng_id             string [选填] 发动机ID
	  * @param  word               string [选填] 关键字
	  * @author soul
	  * @copyright 2019/5/27
	  * @return {"status":true,"data":[{"eng_id":"31898","make_name":"ABARTH","eng_name":"955 A8.000","eng_cylinders":"4","eng_kw":"120~132","eng_hp":"163~180","eng_cc":"1368"},{"eng_id":"24589","make_name":"ALFA ROMEO","eng_name":"955 A8.000","eng_cylinders":"4","eng_kw":"120","eng_hp":"163","eng_cc":"1368"},{"eng_id":"24767","make_name":"FIAT","eng_name":"955 A8.000","eng_cylinders":"4","eng_kw":"120~132","eng_hp":"163~180","eng_cc":"1368"}],"code":0}
	  */
	public function searchFacEngine()
	{
		$Params = mvc::$URL_PARAMS;
		$supid = (int) $Params['supid'];
		$arr = [];
		$where = sprintf(" AND SUE_SUP_ID = %d", $supid);
		if(!empty($Params['eng_id']))
		{
			$where .= sprintf(" AND ENG_ID = %d", $Params['eng_id']);
		}
		if(!empty($Params['word']))
		{
			$word = LibFc::Escape($Params['word']);
			if(strlen($word) < 2) LibFc::ReturnJson(true, $arr);
			$where .= sprintf(" AND ENG_CODE_FORMAT LIKE '%%%s%%'", LibFc::FormatNum($word));
		}
		else
		{
			LibFc::ReturnJson(true, $arr);
		}
		$TcdBase = new TcdBase();
		$table = 'MS_SUP_ENGINES T JOIN TOF_ENGINES E ON T.SUP_ENG_ID=E.ENG_ID JOIN TOF_MANUFACTURERS M ON M.MFA_ID =E.ENG_MFA_ID';
		$filed = ['ENG_ID, MFA_BRAND, ENG_CODE, ENG_CYLINDERS, ENG_PCON_END, ENG_KW_FROM, ENG_KW_UPTO,ENG_HP_FROM, ENG_HP_UPTO, ENG_CCM_FROM, ENG_CCM_UPTO'];
		$res = $TcdBase->get($table, $filed,  $where.' ORDER BY MFA_BRAND, ENG_CODE_FORMAT');
		foreach($res['data'] as $v)
		{
			$arr[] = [
				'eng_id'=>$v['ENG_ID'], 
				'make_name'=>$v['MFA_BRAND'],
				'eng_name'=>$v['ENG_CODE'],
				'eng_cylinders'=>$v['ENG_CYLINDERS'],
				'eng_kw'=>!empty($v['ENG_KW_UPTO']) && $v['ENG_KW_FROM'] != $v['ENG_KW_UPTO']? $v['ENG_KW_FROM'].'~'.$v['ENG_KW_UPTO']: $v['ENG_KW_FROM'],
				'eng_hp'=>!empty($v['ENG_HP_UPTO']) && $v['ENG_HP_FROM'] != $v['ENG_HP_UPTO']? $v['ENG_HP_FROM'].'~'.$v['ENG_HP_UPTO']: $v['ENG_HP_FROM'],
				'eng_cc'=>!empty($v['ENG_CCM_UPTO']) &&  $v['ENG_CCM_FROM'] != $v['ENG_CCM_UPTO']? $v['ENG_CCM_FROM'].'-'.$v['ENG_CCM_UPTO']: $v['ENG_CCM_FROM'],
			];
			if(count($arr) >= 20) break;
		}
		LibFc::ReturnJson(true, $arr);
	}


	/**
	  * @method 查找TCD知名品牌发动机的零件分类
	  * @http	get
	  * @param  token              string [必填] 调用接口凭证 (post|get)
	  * @param  supid              string [必填] 厂商ID
	  * @param  eng_id             string [选填] 发动机ID
	  * @author soul
	  * @copyright 2019/5/27
	  * @return {"status":true,"data":[{"ga_id":"1217","ga_des":"Bolt Kit, cylinder head"},{"ga_id":"560","ga_des":"Full Gasket Set, engine"},{"ga_id":"1451","ga_des":"Gasket \/ Seal"},{"ga_id":"150","ga_des":"Gasket Set, crank case"},{"ga_id":"319","ga_des":"Gasket Set, cylinder head"},{"ga_id":"979","ga_des":"Gasket Set, cylinder head cover"},{"ga_id":"318","ga_des":"Gasket, cylinder head"},{"ga_id":"321","ga_des":"Gasket, cylinder head cover"},{"ga_id":"27","ga_des":"Gasket, exhaust manifold"},{"ga_id":"138","ga_des":"Gasket, exhaust pipe"},{"ga_id":"455","ga_des":"Gasket, wet sump"},{"ga_id":"2420","ga_des":"Mounting Kit, charger"},{"ga_id":"1216","ga_des":"Rocker\/ Tappet"},{"ga_id":"323","ga_des":"Seal Set, valve stem"},{"ga_id":"135","ga_des":"Seal, oil drain plug"},{"ga_id":"322","ga_des":"Seal, valve stem"},{"ga_id":"757","ga_des":"Shaft Seal, camshaft"},{"ga_id":"572","ga_des":"Shaft Seal, crankshaft"}],"code":0}
	  */
	public function getFacEnginePart()
	{
		$Params = mvc::$URL_PARAMS;
		$supid = (int) $Params['supid'];
		$eng_id = (int) $Params['eng_id'];
		$where = sprintf(" AND GA_ID IN (SELECT DISTINCT LAT_GA_ID FROM TOF_LINK_LA_TYP JOIN TOF_LINK_TYP_ENG ON LTE_TYP_ID = LAT_TYP_ID WHERE LTE_ENG_ID=%d AND LAT_SUP_ID=%d) ORDER BY GA_DES", $eng_id, $supid);
		$arr = [];
		$TcdBase = new TcdBase();
		$res = $TcdBase->get('TOF_GENERIC_ARTICLES', ['GA_ID, GA_DES_CN GA_DES'],  $where);
		foreach($res['data'] as $v)
		{
			$arr[] = [
				'ga_id'=>$v['GA_ID'], 
				'ga_des'=>$v['GA_DES']
			];
		}
		LibFc::ReturnJson(true, $arr);
	}


	/**
	  * @method 获取产品的安装位置
	  * @http  POST
	  * @param  pro_ids array 产品ID 
	  * @param  mod3Id int 宜配车型ID 
	  * @param  typids array tcd车型ID
	  * @author soul
	  * @copyright 2017/11/20
	  * @return 
	  {"status":true,"data": [],"code":""}
	  */
	public function getItemLocation()
	{
		$TcdArt = new TcdArt();
		$res = $TcdArt->getItemLocation($_POST['pro_ids'], $_POST['mod3Id'], $_POST['typids']);
		echo json_encode($res);
	}


	/**
	  * @method 获取TCD配件基本信息
	  * @http  POST
	  * @param  pro_ids array 产品ID 
	  * @param  dtype  array para..
	  * @param  mod3Id int 宜配车型ID 
	  * @param  typids array tcd车型ID
	  * @author soul
	  * @copyright 2017/7/7
	  * @return  {"status":true,"data": [],"code":""}
	  */
	public function getTcdProductInfo()
	{
		$TcdArt = new TcdArt();
		$res = $TcdArt->getProductInfo($_POST['pro_ids'], $_POST['dtype'], $_POST['mod3Id'], $_POST['typids']);
		LibFc::EchoJson($res);
	}



	/**
	  * @method 获取TCD中国的配件基本信息
	  * @http  POST
	  * @param  pro_ids array 产品ID 
	  * @param  dtype  array para..
	  * @param  mod3Id int 宜配车型ID 
	  * @param  typids array tcd车型ID
	  * @author soul
	  * @copyright 2017/7/7
	  * @return  {"status":true,"data": [],"code":""}
	  */
	public function getTcdCnProductInfo()
	{
		$TcdCnProduct = new TcdCnProduct();
		$res = $TcdCnProduct->getAnyProductInfo($_POST['pro_ids'], $_POST['dtype'], $_POST['mod3Id'], $_POST['typids']);
		LibFc::EchoJson($res);
	}



	public function expExcel()
	{

		/*select max(a.art_article_nr),  max(ga_des),  max(m.mfa_brand),  max(m2.vehicle),  max(m2.body), wm_concat(distinct e.eng_code), max(m2.start_y),  max(m2.end_y), max(m2.kw), max(m2.cc)  from tof_articles a 
		join tof_suppliers b on a.art_sup_id = b.sup_id and b.sup_id = 123
		join tof_generic_articles on art_ga_id = ga_id
		join tof_link_la_typ t on a.art_id=t.lat_art_id
		join models m2 on m2.tcd_id=t.lat_model_id
		left join tof_link_typ_eng el on el.lte_typ_id=m2.tcd_id
		left join tof_engines e on e.eng_id = el.lte_eng_id
		join tof_manufacturers m on m.mfa_id = m2.brand_id and (m.mfa_brand like 'TOYOT%' or m.mfa_brand like 'HONDA%' or m.mfa_brand like 'NISS%' )
		group by a.art_id, m2.tcd_id */
		$TcdBase = new TcdBase();
		$filed = ['ART_ID, MAX(A.ART_ARTICLE_NR) ART_ARTICLE_NR, max(sup_brand) sup_brand,  MAX(GA_DES) GA_DES'];
		$table = "tof_articles a 
			join tof_suppliers b on a.art_sup_id = b.sup_id and b.sup_id = 123
			join tof_generic_articles on art_ga_id = ga_id
			join tof_link_la_typ t on a.art_id=t.lat_art_id
			join models m2 on m2.tcd_id=t.lat_model_id
			left join tof_link_typ_eng el on el.lte_typ_id=m2.tcd_id
			join tof_manufacturers m on m.mfa_id = m2.brand_id and (m.mfa_brand like 'TOYOT%' or m.mfa_brand like 'HONDA%' or m.mfa_brand like 'NISS%')";
		$where = ' GROUP BY A.ART_ID order by GA_DES';
		$ares = $TcdBase->get($table, $filed, $where);
		$arr = [];
		$TcdArt = new TcdArt();
		$plArr = [];
		$nfArr = [];
		foreach($ares['data'] as $v)
		{
			$paramRes = $TcdArt->getArtParam([$v['ART_ID']]);
			foreach($paramRes['data'][$v['ART_ID']] as $vv)
			{
				$v['param'][] = sprintf("%s:%s%s", $vv['name'], $vv['val'], $vv['unit']);
				$v['pl'][$vv['name']] = $vv['val'].$vv['unit'];
				$plArr[$vv['name']] = $vv['name'];
			}

			$nRes = $TcdArt->getItemNumber($v['ART_ID'], 'all', 1, 100);
			foreach($nRes['data'] as $vv)
			{
				$vv['factory'] = $vv['oe']? 'OE': $vv['factory'];
				$v['nums'][] = sprintf("%s:%s", $vv['factory'], $vv['display']);
				$v['nf'][$vv['factory']][] = $vv['display'];
				$nfArr[$vv['factory']] = $vv['factory'];
			}
			$arr[$v['ART_ID']] = $v;
			//break;
		}
		$plArr = array_unique($plArr);
		sort($plArr);
		$nfArr = array_unique($nfArr);
		sort($nfArr);
		$OthExcel = new OthExcel();
		$rowArr = [];
		$row = ['品名', '号码', '品牌', '参数'];
		/*foreach($plArr as $v)
		{
			$row[] = $v;
		}*/
		$row[] = '参考号';
		/*foreach($nfArr as $v)
		{
			$row[] = $v;
		}*/
		$rowArr[] = $row;
		foreach($arr as $k=>$v)
		{
			$row = [$v['GA_DES'], $v['ART_ARTICLE_NR'], $v['SUP_BRAND'], implode("\r\n", $v['param'])];
			/*foreach($plArr as $vv)
			{
				$row[] = $v['pl'][$vv];
			}*/
			$row[] = implode("\r\n", $v['nums']);
			/*foreach($nfArr as $vv)
			{
				$row[] = implode("\r\n", $v['nf'][$vv]);
			}*/
			$rowArr[] = $row;
		}
		$OthExcel->writer($rowArr);
	}


	/**
	  * @method 获取tcd产品的国内车型ID
	  * @http  get
	  * @param  proId 产品ID
	  * @author soul 
	  * @copyright 2021/7/20
	  * @return json
	  */
	public function getArtYpcModelIds()
	{
		$mod3IdArr = [];
		$proId = $_GET['proId'];
		if($proId > 0)
		{
			$TcdArt = new TcdArt();
			$res = $TcdArt->getYpcModelId($proId);
			$mod3IdArr = $res['data'];
		}
		echo json_encode(['status'=>true, 'data'=>$mod3IdArr]);
	}
}