<?php
/**
  * @method 产品管理
  * @author soul
  * @copyright 2016/3/31
  */
class TcdCnProduct extends TcdCnBase
{
	/**
	  * @method 获取配件基本信息
	  * @param  $proIdArr array [11,2222....]
	  * @param  $typeArr ['para', 'picAll', 'model'...]
	  * @author soul
	  * @copyright 2017/7/7
	  * @return 
			成功 ["status"=>true, "data"=> [11=>[], ...]] 
			失败 ["status"=>false, "data"=> 错误信息] 
	  */
	public function getAnyProductInfo($proIdArr, $typeArr = [], $mod3Id = 0, $typIdArr = [])
	{
		$proArr = [];
		foreach($proIdArr as $k=>$v)
		{
			$proIdArr[$k] = (int) $v;
		}
		$proIdArr = array_unique($proIdArr);
		if(!empty($proIdArr))
		{
			$lres = $this->getItemLocation($proIdArr, $mod3Id, $typIdArr);
			$locationArr = $lres['data'];

			$filed = ['pro_id, pro_brand_name, pro_articleName, pro_articleNo, img_path,img_name, pro_articleStateName'];
			$table = 'data_product JOIN data_links ON pro_id = lnk_pro_id LEFT JOIN data_picture ON img_pro_id = pro_id';
			$res = $this->get($table, $filed, sprintf(" and pro_id in (%s) GROUP BY pro_id", implode(',', $proIdArr)));
			foreach($res['data'] as $v)
			{
				$pro = [
					'pro_id'=>$v['pro_id'],
					'pro_name'=>$v['pro_articleName'],
					'pic'=>[],
					'num'=>[['factory'=>$v['pro_brand_name'], 'display'=>$v['pro_articleNo']]],
					'para'=>[]
				];

				if(!empty($locationArr[$pro['pro_id']]) && stripos($pro['pro_name'], '(') === false)
					$pro['pro_name'] .= '('.implode(';', $locationArr[$pro['pro_id']]).')';

				if(in_array('para', $typeArr))
				{
					$paraRes = $this->getProductPara($v['pro_id']);
					$pro['para'] = !empty($paraRes['data'])? $paraRes['data']:[];
				}
				if(!empty($v['img_path'])) $pro['pic'][] = mvc::$cfg['urls']['tcdcnPic'].$v['img_path'].'/'.$v['img_name'];
				$proArr[$v['pro_id']] = $pro;
			}
			$proIdArr = array_keys($proArr);
			if(empty($proIdArr)) return LibFc::ReturnData(true, $proArr);
			
			if(in_array('picAll', $typeArr))
			{
				foreach($proArr as $k=>$v)
				{
					$proArr[$k]['pic'] = [];
				}
				$res = $this->get('data_picture', ['img_pro_id, img_path, img_name'], sprintf(" and img_pro_id in(%s)", implode(',', $proIdArr)));
				foreach($res['data'] as $v)
				{
					$proArr[$v['img_pro_id']]['pic'][] = mvc::$cfg['urls']['tcdcnPic'].$v['img_path'].'/'.$v['img_name'];
				}
			}

			if(in_array('model', $typeArr))
			{
				foreach($proArr as $k=>$v)
				{
					$proArr[$k]['model'] = [];
				}
				//宜配车型库
				$mres = $this->get('data_links', ['lnk_pro_id', 'lnk_car_id'], sprintf(" and lnk_pro_id in(%s)", implode(',', $proIdArr)));
				if(!empty($mres['data']))
				{
					$YpcBase = new YpcBase();
					$tres = $YpcBase->get('yp_model3_tcdcn_link', ['*'], sprintf(" and mtl_typ_id in (%s)", implode(',', array_unique(array_column($mres['data'], 'lnk_car_id')))));
					if(!empty($tres['data']))
					{
						$lnkArr = [];
						foreach($tres['data'] as $v)
						{
							$lnkArr[$v['mtl_typ_id']][] = $v['mtl_m3_id'];
						}
						$proMod3IdArr = [];
						foreach($mres['data'] as $v)
						{
							if(!empty($lnkArr[$v['lnk_car_id']]))
							{
								foreach($lnkArr[$v['lnk_car_id']] as $m3Id)
								{
									$proMod3IdArr[$m3Id][] =$v['lnk_pro_id'];
								
								}
								
							}	
						}

						$Ypc2Model = new Ypc2Model();
						$where = sprintf(" and mod3_id in (%s) order by brand_seq, brand_initial, make_seq, make_initial, mod1_name, mod2_name, mod3_name", implode(',', array_unique(array_column($tres['data'], 'mtl_m3_id'))));
						$res = $Ypc2Model->getModel(3, ['mod3_id', 'brand_id', 'brand_name', 'make_name', 'mod2_name', 'mod3_name', 'mod3_start_year', 'mod3_end_year'], $where);
						foreach($res['data'] as $v)
						{
							foreach($proMod3IdArr[$v['mod3_id']] as $proId)
							{
								$proArr[$proId]['model'][] = $v;
							}
						}
					}
				}
			}
		}
		return LibFc::ReturnData(true, $proArr);
	}


	/**
	  * @method 获取配件的号码
	  * @param  $proId int 配件ID
	  * @param  $type string  oe|ref|all
	  * @param  $page int 第几页
	  * @param  $per int 每页数量
	  * @author soul
	  * @copyright 2017/6/5
	  * @return  ["status"=>true, "data"=>[{"factory":"FERODO","display":"2114023"},...] ]
	  */
	public function getItemNumber($proId, $type, $page, $per)
	{
		$proId = (int) $proId;
		$arr = [];
		$per = empty($per) || $per < 1 ? 20: (int) $per;
		$page = empty($page) || $page < 1 ? 1: (int) $page;
		$filed = ['case when src_main = 1 then 0 else 1 end as oe, src_brand as factory, src_realoem as display'];
		$table = 'data_product_search';
		switch($type)
		{
			case 'oe':
				$res = $this->get($table, $filed, sprintf(" and src_main = 0 and src_pro_id = %d ORDER BY src_brand, src_format limit %d, %d", $proId, ($page-1)*$per, $per));
				$arr = $res['data'];
			break;
			case 'ref':
				$res = $this->get($table, $filed, sprintf(" and src_main != 0 and src_pro_id = %d ORDER BY src_brand, src_format limit %d, %d", $proId, ($page-1)*$per, $per));
				$arr = $res['data'];
			break;
			default:
				$res = $this->get($table, $filed, sprintf(" and src_pro_id = %d ORDER BY src_brand, src_format limit %d, %d", $proId, ($page-1)*$per, $per));
				$arr = $res['data'];
			break;
		}
		return LibFc::ReturnData(true, $arr);
	}
	
	
	/**
	  * @method 获取产品参数
	  * @param  
	  * @author soul
	  * @copyright 2016/3/30
	  * @return array(3) { ["status"]=> bool(true) ["data"]=>["code"]=> int(0) } 
	  */
	public function getProductPara($pid, $all = false)
	{
		$pid = (int) $pid;
		$para = [];
		if($pid > 0)
		{
			$table  = 'data_product_param JOIN data_product ON pro_id = pam_pro_id JOIN data_part_param ON pro_articleName = pp_part_name AND pp_label_name =pam_attrName';
			$table .= $all ? '': '  AND pp_show = 1 ';
			$res = $this->get($table, ['case when pam_attrShortName ="" then pam_attrName else pam_attrShortName end as name, pam_attrValue as val, pam_attrUnit as unit'], sprintf(" and pam_pro_id=%d AND pam_attrValue !='' ORDER BY pp_seq", $pid));
			$para = $res['data'];
		}
		return LibFc::ReturnData(true, $para);
	}


	/**
	  * @method 获取产品车型
	  * @param  
	  * @author soul
	  * @copyright 2016/3/30
	  * @return array(3) { ["status"]=> bool(true) ["data"]=>["code"]=> int(0) } 
	  */
	public function getYpcModelId($proId)
	{
		$arr = [];
		$proId = (int) $proId;
		$mres = $this->get('data_links', ['distinct lnk_car_id'], sprintf(" and lnk_pro_id =%d", $proId));
		if(!empty($mres['data']))
		{
			$YpcBase = new YpcBase();
			$res = $YpcBase->get('yp_model3_tcdcn_link join yp_model3 on mtl_m3_id = m3_id', ['distinct mtl_m3_id'], sprintf(" and mtl_typ_id in (%s)", implode(',', array_column($mres['data'], 'lnk_car_id'))));
			$arr = array_column($res['data'], 'mtl_m3_id');
		}
		return LibFc::ReturnData(true, $arr);
	}
	

	/**
	  * @method 获取产品的安装位置
	  * @param  $proIdArr array 产品ID 
	  * @param  $m3Id int 宜配车型ID
	  * @param  $typIdArr array tcd中国车型ID
	  * @author soul
	  * @copyright 2016/3/30
	  * @return array(3) { ["status"]=> bool(true) ["data"]=>["code"]=> int(0) } 
	  */
	public function getItemLocation($proIdArr, $m3Id = 0, $typIdArr = [])
	{
		foreach($proIdArr as $k=>$v)
		{
			$proIdArr[$k] = (int)$v;
		}
		$arr = [];
		if(!empty($proIdArr))
		{
			if(empty($typIdArr) && !empty($m3Id))
			{
				$YpcBase = new YpcBase();
				$res = $YpcBase->Get('yp_model3_tcdcn_link', ['distinct mtl_typ_id'], sprintf(" and mtl_m3_id =%d", $m3Id));
				if(!empty($res['data']))
				{
					$typIdArr = array_column($res['data'], 'mtl_typ_id');
				}
			}
			else if(is_array($typIdArr))
			{
				foreach($typIdArr as $k=>$v)
				{
					$typIdArr[$k] = (int)$v;
				}
			}

			if(!empty($typIdArr))
			{
				$res = $this->get('data_product_sparam', ['ps_pro_id, ps_value'], sprintf(" and ps_psl_id=1 and ps_pro_id in (%s) and ps_car_id in (%s) group by ps_pro_id, ps_value order by ps_value", implode(',', $proIdArr), implode(',', $typIdArr)));
				foreach($res['data'] as $v)
				{
					$arr[$v['ps_pro_id']][] = $v['ps_value'];
				}
			}

			$noIdArr = array_diff($proIdArr, array_keys($arr));
			//产品参数补齐
			if(!empty($noIdArr))
			{
				$res = $this->get('data_product_sparam', ['ps_pro_id, ps_value'], sprintf(" and ps_psl_id=1 and ps_pro_id in (%s) and ps_car_id = 0 group by ps_pro_id, ps_value order by ps_value", implode(',', $noIdArr)));
				foreach($res['data'] as $v)
				{
					$arr[$v['ps_pro_id']][] = $v['ps_value'];
				}
			}

			$noIdArr = array_diff($proIdArr, array_keys($arr));
			//其它车型位置补齐
			if(!empty($noIdArr))
			{
				$res = $this->get('data_product_sparam', ['ps_pro_id, ps_value'], sprintf(" and ps_psl_id=1 and ps_pro_id in (%s) and ps_car_id != 0 group by ps_pro_id, ps_value order by ps_value", implode(',', $noIdArr)));
				foreach($res['data'] as $v)
				{
					$arr[$v['ps_pro_id']][] = $v['ps_value'];
				}
			}
		}
		return LibFc::ReturnData(true, $arr);
	}
}