<?php

require './vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class productAction extends baseAction
{
    /**
     * 文件中心
     * @var object OthFileCenter
     */
    private $othFileCenter;

    private $errorList = [];

	/**
	 * @产品主页
	 * @author 卢
	 * @copyright 2017.7.31
	 */
	function index()
	{
		LibRule::Check('PL01');
		LibTpl::Set('title','配件列表-跑街的');

		LibTpl::Put();
	}
	/**
	* @产品列表
	* @author 卢
	* @copyright 2017.7.31
	 */
	function productList()
	{
		$Params = MVC::$URL_PARAMS;
		$B2cProduct=new B2cProduct();
		$B2cPart= new B2cPart();
		//默认显示列
		$columnArrDefault=[
			'pro_part_id',
			'pro_shop_id',
			'pri_code',
			'pro_sale_price',
			'pro_sold_count',
			'pro_coll_count',
		];

		$columnArr=[
			['name'=>'配件ID','key'=>'pro_id','width'=>80],
			['name'=>'配件状态','key'=>'pro_status','width'=>70],
			['name'=>'主图','key'=>'pro_pic','width'=>100],
			['name'=>'配件名称','key'=>'pro_name','width'=>400],
			['name'=>'配件类别','key'=>'pro_part_id','width'=>300],
			['name'=>'店铺名称','key'=>'pro_shop_id','width'=>150],
			['name'=>'商家编码','key'=>'pri_code','width'=>100],
			['name'=>'销售价格','key'=>'pro_sale_price','width'=>70],
			['name'=>'促销价格','key'=>'pro_promotion_price','width'=>70],
			['name'=>'成本价','key'=>'pro_cost_price','width'=>70],
			['name'=>'销量','key'=>'pro_sold_count','width'=>70],
			['name'=>'库存','key'=>'pro_count','width'=>70],
			['name'=>'会员优惠','key'=>'pro_user_discount','width'=>70],
			['name'=>'热销','key'=>'pro_host','width'=>50],
			['name'=>'推荐','key'=>'pro_promoted','width'=>50],
			['name'=>'收藏数','key'=>'pro_coll_count','width'=>60],
			['name'=>'重量','key'=>'pri_weight','width'=>50],
			['name'=>'库存计数','key'=>'pri_set_inventory','width'=>75],
			['name'=>'发票','key'=>'pri_invoice','width'=>50],
			['name'=>'保修','key'=>'pri_warranty','width'=>50],
			['name'=>'退换货承诺','key'=>'pri_return_promise','width'=>80],
			['name'=>'促销时间','key'=>'PRO_PROMOTION_TIME','width'=>120],
			['name'=>'编辑时间','key'=>'EDIT_TIME','width'=>170],

		];
		// print_r($Params['showColumn']);
		// setcookie("showColumn",$colArr,time()-1);
		if(isset($_COOKIE['showColumn']))
		{
			$colArr=isset($Params['showColumn'])?$Params['showColumn']:$_COOKIE['showColumn'];
			if(empty($colArr))
				$colArr=-1;
			setcookie("showColumn",$colArr,time()+24*30*60*60);
			$_COOKIE['showColumn']=$colArr;
		}
		else
		{
			$colArr=implode(',',$columnArrDefault);
			setcookie("showColumn",$colArr,time()+24*30*60*60);
			$_COOKIE['showColumn']=$colArr;
		}
		$cArr=explode(',', $colArr);
		foreach ($columnArr as $k=> $v)
		{
			if(in_array($v['key'], ['pro_id','pro_status','pro_name']))
				continue;
			if(!in_array($v['key'], $cArr))
				unset($columnArr[$k]);
		}
		LibTpl::Set('columnArr',$columnArr);
		$page=isset($Params['page']) ? $Params['page'] : 1;
		$where='';
		//状态
		$where.=(isset($Params['status'])&&$Params['status']!=='all') ? ' and pro_status='.$Params['status']: '';
		//分类
		$path1=isset($Params['path1'])&&!empty($Params['path1']) ? ','.$Params['path1'] : '';
		$path2=isset($Params['path2'])&&!empty($Params['path2']) ? ','.$Params['path2'] : '';
		$path3=isset($Params['path3'])&&!empty($Params['path3']) ? ','.$Params['path3'] : '';
		$partPath='0'.$path1.$path2.$path3;
		$start=strrpos($partPath,',');
		$last=trim(substr($partPath, $start),',');
		if($last>0)
		{
			$partRes=$B2cProduct->get('bc_part left join bc_part_tree on part_id=pt_part_id',['part_id','pt_parent_part_id','part_is_end']);
			$cateRes=$B2cPart->getPartIsEnd($partRes['data'],LibFc::Int($last));
			$cateId=array();
			foreach ($cateRes['data'] as $key => $value)
			{
				$cateId[]=$value['part_id'];
			}
			$cateId=array_unique($cateId);
			if(count($cateId))
			{
				$where.=sprintf(' and pro_part_id in (%s)',implode(',', $cateId));
			}
			else
			{
				$where.=' and pro_id<-1';
			}
		}
		//车型
		$ComModel=new ComModel();
		$modalArr=[];
		if(isset($Params['modalArr1'])&&!empty($Params['modalArr1']))
			$modalArr[]=$Params['modalArr1'];
		if(isset($Params['modalArr2'])&&!empty($Params['modalArr2']))
			$modalArr[]=$Params['modalArr2'];
		if(isset($Params['modalArr3'])&&!empty($Params['modalArr3']))
			$modalArr[]=$Params['modalArr3'];
		if(isset($Params['modalArr4'])&&!empty($Params['modalArr4']))
			$modalArr[]=$Params['modalArr4'];
		if(isset($Params['modalArr5'])&&!empty($Params['modalArr5']))
			$modalArr[]=$Params['modalArr5'];
		$level=count($modalArr);
		if($level)
		{
			$end=end($modalArr);
			switch ($level)
			{
				case '1':
					$res=$ComModel->getModel(1,['mod1_id'],sprintf(' and mod1_brand_id=%d',$end));
					if(!empty($res['data']))
					{
						$modIdArr=array_column($res['data'], 'mod1_id');
						$where.=sprintf(' and pro_id in (select pml1_pro_id from bc_product_model1_link where pml1_mod1_id in(%s))',implode(',',$modIdArr));
					}
					else
					{
						$where.=' pro_id<-1';
					}
					break;
				case '2':
					$res=$ComModel->getModel(1,['mod1_id'],sprintf(' and mod1_make_id=%d',$end));
					if(!empty($res['data']))
					{
						$modIdArr=array_column($res['data'], 'mod1_id');
						$where.=sprintf(' and pro_id in (select pml1_pro_id from bc_product_model1_link where pml1_mod1_id in(%s))',implode(',',$modIdArr));
					}
					else
					{
						$where.=' pro_id<-1';
					}
					break;
				case '3':
					$where.=sprintf(' and pro_id in (select pml1_pro_id from bc_product_model1_link where pml1_mod1_id=%d)',$end);
					break;
				case '4':
					$where.=sprintf(' and pro_id in (select pml2_pro_id from bc_product_model2_link where pml2_mod2_id=%d)',$end);
				break;
				case '5':
					$where.=sprintf(' and pro_id in (select pml3_pro_id from bc_product_model3_link where pml3_mod3_id=%d)',$end);
				break;
			}
		}
		//添加时间
		$where.=!empty($Params['addTime'])?sprintf(' and pro_add_time>=%d',strtotime($Params['addTime'])):'';
		$where.=!empty($Params['endTime'])?sprintf(' and pro_add_time<=%d',strtotime($Params['endTime'])):'';
		//无图片
		if(!empty($Params['noimg']))
		{
			$where.=sprintf(' and pro_id not in(%s)','select pro_id from bc_product_pic left join bc_product on pp_pro_id=pro_id');
		}
		//无销售价
		if(!empty($Params['noprice']))
		{
			$where.=' and pro_sale_price=0 or pro_sale_price is null';
		}
		//无互换号
		if(!empty($Params['nonum']))
		{
			$where.=sprintf(' and pro_id not in(%s)',sprintf('select num_pro_id from bc_number where num_self=0'));
		}
		//无车型
		if(!empty($Params['nomod']))
		{
			$where.=sprintf(' and pro_id not in(%s)',sprintf('select pml3_pro_id from bc_product_model3_link'));
		}
		//排序
		$orderBy=isset($Params['orderBy']) ? $Params['orderBy'] : 'tdesc';
		switch ($orderBy) {
			case 'tdesc':
				$order='pro_add_time desc';
				break;
			case 'tasc':
				$order='pro_add_time asc';
				break;
			case 'adesc':
				$order='pro_set_time desc';
				break;
			case 'sdesc':
				$order='pro_sold_count desc';
				break;
			case 'sasc':
				$order='pro_sold_count asc';
				break;
			default :
				$order='pro_add_time desc';
		}
		$perPage=isset($_COOKIE['perPage'])? $_COOKIE['perPage'] : 20;
		$where.=isset($Params['proId'])&&!empty($Params['proId'])&&LibFc::Int($Params['proId'])  ? ' and pro_id='.$Params['proId'] : '';
		if(!empty($Params['proName']))
		{
			$keywordArr=LibFc::keyword($Params['proName']);
			if(count($keywordArr))
			{
				$keywordStr="'".implode("','",$keywordArr)."'";
				// print_r($keywordStr);
				$where.=sprintf(" and pro_id in (%s)",sprintf("select prk_pro_id from bc_keyword right join bc_product_keyword on prk_key_id=key_id where key_txt IN(%s)",$keywordStr));
			}
			else
			{
				//关键字为空则查名称
				$where.=sprintf(" and pro_name like '%%%s%%'",LibFc::Escape($Params['proName']));
			}
		}
		if(!empty($Params['shopName']))
		{
			$where.=sprintf(" and pro_shop_id in (select shop_id from sh_shop where shop_name like '%%%s%%')", LibFc::Escape($Params['shopName']));
			/*$keywordArr=LibFc::keyword($Params['shopName']);
			if(count($keywordArr))
			{
				$keywordStr="'".implode("','",$keywordArr)."'";
				$where.=sprintf(" and pro_shop_id in (%s)",sprintf("select shk_shop_id from sh_shop_keyword right join bc_keyword on shk_key_id=key_id where key_txt IN(%s)",$keywordStr));
			}
			else
			{
				$where.=' and pro_id<-1';
			}*/
		}
		$where.=isset($Params['shopId'])&&!empty($Params['shopId'])&&LibFc::Int($Params['shopId'])  ? ' and pro_shop_id='.$Params['shopId'] : '';
		//配件号码
		if(!empty($Params['proNumber']))
		{
			$where.=sprintf(" and pro_id in(select num_pro_id from bc_number where num_format like '%%%s%%' or num_display like '%%%s%%')",LibFc::FormatNum($Params['proNumber']),LibFc::FormatNum($Params['proNumber']));
		}
		if(isset($_SESSION['ChkIds'])&&$Params['select'])
		{
			$idsArr=array_filter($_SESSION['ChkIds']);
			if(!empty($idsArr))
			{
				$where=sprintf(' and pro_id in (%s)',implode(',',$idsArr));
			}
		}
		//计算当前条件总数
		$table1='bc_product';
		$join=' join bc_product_info on pro_id=pri_pro_id';
		$total=$B2cProduct->get($table1,['count(*) count'],$where,true);
		$res=$B2cProduct->getProductList($page,$perPage,$total['data']['count'],$order,$where,$join);
		// print_r($res);
		$productId=array();
		$shopId=array();
		$pathArr=array();
		// print_r($res);
		//获取产品id
		if(!empty($res['data']))
		{
			$nowtime=time();
			foreach ($res['data'] as $k => $v)
			{
				$productId[]=$v['pro_id'];
				$shopId[]=$v['pro_shop_id'];
				$pathArr[]=$v['pro_part_path'];
			}
			//获取产品图片
			$imgData=$B2cProduct->getProductPic($productId);
			//获取店铺信息
			$shopName=$B2cProduct->getShopInfo($shopId,array('shop_name','shop_domain','shop_top_domain'));
			foreach ($res['data'] as $k => $v)
			{
				if(isset($imgData['data'][$v['pro_id']][0]))
				{
					foreach ($imgData['data'][$v['pro_id']][0] as $i => $j)
					{
						$res['data'][$k][$i]=$j;
					}
				}
				foreach ($shopName['data'] as $index => $shop) {
					if($v['pro_shop_id']==$shop['shop_id'])
					{
						$res['data'][$k]['shopName']=$shop['shop_name'];
						$res['data'][$k]['shop_domain']=$shop['shop_domain'];
						$res['data'][$k]['shop_top_domain']=$shop['shop_top_domain'];
					}
				}
				//获取分类信息
				$cateInfo=$B2cProduct->getCate(rtrim($v['pro_part_path'],',').','.$v['pro_part_id'],['part_name']);
				$res['data'][$k]['cate']=$cateInfo['data'];
				//计算距离今天天数
				$res['data'][$k]['addDay']=round(($nowtime-$v['pro_add_time'])/(24*60*60));
				// echo $res['data'][$k]['addDay'].'<br/>';
				$res['data'][$k]['editDay']=round(($nowtime-$v['pro_set_time'])/(24*60*60));
				// echo $res['data'][$k]['editDay'],'</br>';
			}
		}
		// print_r($res);
		$Page = LibPage::Show($total['data']['count'], $perPage);
		LibTpl::Set('Page', $Page);
		LibTpl::Set('productList',$res['data']);
		LibTpl::Set('title','配件列表-跑街的');
		LibTpl::Put();
	}
	/**
	* @搜索页面
	* @author 卢
	* @copyright 2017.7.31
	 */
	function  productSearch ()
	{

		$B2cPart=new B2cPart();
		$B2cProduct=new B2cProduct();
		$B2cShop=new B2cShop();
		//零件分类
		$res=$B2cPart->getPartByPath();
		//店铺
		$shopData=$B2cShop->get('sh_shop',array('shop_id','shop_name'), 'order by shop_name');

		$data=[
			['name'=>'主图','id'=>'pro_pic'],
			['name'=>'配件类别','id'=>'pro_part_id'],
			['name'=>'店铺名称','id'=>'pro_shop_id'],
			['name'=>'销售价格','id'=>'pro_sale_price'],
			['name'=>'促销价格','id'=>'pro_promotion_price'],
			['name'=>'销量','id'=>'pro_sold_count'],
			['name'=>'库存','id'=>'pro_count'],
			['name'=>'编辑时间','id'=>'EDIT_TIME'],
			['name'=>'会员优惠','id'=>'pro_user_discount'],
			['name'=>'热销','id'=>'pro_host'],
			['name'=>'推荐','id'=>'pro_promoted'],
			['name'=>'成本价','id'=>'pro_cost_price'],
			['name'=>'促销时间','id'=>'PRO_PROMOTION_TIME'],
			['name'=>'收藏数','id'=>'pro_coll_count'],
			['name'=>'商家编码','id'=>'pri_code'],
			['name'=>'重量','id'=>'pri_weight'],
			['name'=>'库存计数','id'=>'pri_set_inventory'],
			['name'=>'发票','id'=>'pri_invoice'],
			['name'=>'保修','id'=>'pri_warranty'],
			['name'=>'退换货承诺','id'=>'pri_return_promise'],

		];
		$paramsArr=[
			'id'=>'showColumn',
			'type'=>'checkbox',
			'show_name'=>'name',
			'width'=>85,
			'data_key'=>'id',
			'data_value'=>['key','id'],
			'data_check'=>['pro_id','pro_status'],
			'callback'=>'putIntoCheckColumn',
			'unCheckCallback'=>'putIntoCheckColumn',
		];
		$columnArrDefault=[
			'pro_part_id',
			'pro_shop_id',
			'pri_code',
			'pro_sale_price',
			'pro_sold_count',
			'pro_coll_count',
		];
		if(isset($_COOKIE['showColumn']))
		{
			foreach ($data as $k=> $v)
			{
				if(in_array($v['id'], explode(',', $_COOKIE['showColumn'])))
				{
					$data[$k]['check']=true;
				}
			}
		}else
		{
			foreach ($data as $k=> $v)
			{
				if(in_array($v['id'], $columnArrDefault))
				{
					$data[$k]['check']=true;
				}
			}
		}
		LibTpl::Set('params',$paramsArr);
		LibTpl::Set('data',$data);
		LibTpl::Set('shopArr',$shopData['data']);
		LibTpl::Set('partArr',$res['data']);
		LibTpl::Set('title','产品列表-跑街的');
		LibTpl::Put();
	}
	/**
	* @获取下级子类
	* @author 卢
	* @copyright 2017.7.31
	 */
	function getChildPart()
	{
		$Params = MVC::$URL_PARAMS;
		$B2cPart=new B2cPart();
		$res=$B2cPart->getPartByPath($Params['path']);
		LibFc::ajaxJsonEncode($res);
	}
	/**
	* @ajax 处理选中产品
	* @author 卢
	* @copyright 2017.7.31
	 */
	function ajaxProCheck()
	{
		$proId=trim($_POST['ChkIds'],',');
		$notCheck=trim($_POST['NotChkIds'],',');
		if(isset($_SESSION['ChkIds']))
		{
			$_SESSION['ChkIds']=array_unique(array_merge(explode(',', $proId),$_SESSION['ChkIds']));
			foreach ($_SESSION['ChkIds'] as $k => $v)
			{
				if(in_array($v, explode(',', $notCheck)))
				{
					unset($_SESSION['ChkIds'][$k]);
				}
			}
		}
		else
		{
			$_SESSION['ChkIds']=explode(',', $proId);
		}
		$B2cProduct=new B2cProduct();
		$proId=trim(implode(',', $_SESSION['ChkIds']),',');
		if(!empty($proId))
		{
			$where=sprintf(' and pro_id in (%s)',$proId);
			$res=$B2cProduct->Get('bc_product',['pro_id','pro_name'],$where);
		}
		$data=array('status'=>true,'data'=>array('check'=>$res['data']));
		LibFc::ajaxJsonEncode($data);
	}
	/**
	* @ajax 改变产品状态
	* @author 卢
	* @copyright 2017.7.31
	 */
	function ajaxChangePro()
	{
		LibRule::Check('PL02');
		if(isset($_POST['status']))
		{
			$B2cProduct=new B2cProduct();
			$proId=$_POST['proId'];
			$remark=$_POST['remark'];
			$B2cProduct->adminChangePro($proId,$_POST['status'],$remark);
		}
		LibFc::ajaxJsonEncode(array('status'=>true,'data'=>true));
	}
	/**
	* @ajax更新选中产品的session
	* @author 卢
	* @copyright 2017.7.31
	 */
	function updateCheck()
	{
		if(!is_array($_POST['proId']))
		{
			$proId=trim($_POST['proId'],',');
			$proId=[$proId];
		}
		else
		{
			$proId=$_POST['proId'];
		}
		if(isset($_SESSION['ChkIds']))
		{
			foreach ($_SESSION['ChkIds'] as $k => $v)
			{
				if(in_array($v, $proId))
				{
					unset($_SESSION['ChkIds'][$k]);
				}
			}
		}
		LibFc::ajaxJsonEncode(array('status'=>true,'data'=>true));
	}


	/**
	* @刷新关键词
	* @author xu
	* @copyright 2017.12.20
	 */
	function  refreKeyword ()
	{
		LibRule::Check('KW01');
		LibTpl::Set('title','刷新关键词-跑街的');
		LibTpl::Put();
	}


	/**
	* @刷新店铺关键字
	* @author xu
	* @copyright 2017.12.20
	 */
	function resetShopKeyword()
	{
		LibRule::Check('KW03');
		// 店铺ID
		$B2cBase = new B2cBase();
		$res = $B2cBase->get('sh_shop',['shop_id'],sprintf(" and shop_status>0 "));
		$shopId = array_column($res['data'], 'shop_id');
		// 接口刷新
		$B2cKeyword = new B2cKeyword();
		$B2cKeyword->resetShopKeyword($shopId);

		echo "刷新店铺关键字成功！";
	}


	/**
	* @刷新产品关键字
	* @author xu
	* @copyright 2017.12.20
	 */
	function resetAllProductKeyword()
	{
		LibRule::Check('KW02');
		$time = time();
		$B2cKeyword = new B2cKeyword();
		$B2cKeyword->resetProductKeyword([], 'all');
		//$B2cKeyword->resetProductKeyword([223014], 'shopId');
		echo time() - $time;
		echo "刷新产品关键字完毕！";
	}



	/**
	 * @method 批量整理产品
	 * @author soul
	 * @copyright 2018/3/17
	 */
	function batchAct()
	{
		// LibRule::Check('KW04');
		$Params = MVC::$URL_PARAMS;
		$shopId = (int) $Params['shopId'];
		$B2cBase = new B2cBase();
		$res = $B2cBase->get('sh_shop', ['shop_id', 'shop_name','shop_warter','shop_zpuser'], sprintf(" and shop_id=%d", $shopId), true);
		if(empty($res['data'])) LibTpl::Error('店铺不存在');
		$shopData = $res['data'];
		$zpshop = $shopData['shop_zpuser'];
		LibTpl::set('shopData', $shopData);

		$ZpBaseDb = new BaseDb(mvc::$cfg['DB']['ZHIPEIC']);
		$res = $ZpBaseDb->get('auto_product', ['pro_user'], ' group by pro_user order by CONVERT(pro_user USING gbk)');
		LibTpl::set('zpShop', $res['data']);


		$res = $B2cBase->get('bc_product_model3_link_ver', ['pml3b_shop_id', 'pml3b_version'], sprintf(" and pml3b_shop_id=%d GROUP BY pml3b_version ORDER BY pml3b_version DESC", $shopId));
		LibTpl::set('modelBack', $res['data']);

		$excelType = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
		if(!empty($_POST['type']))
		{
			switch($_POST['type'])
			{
				case 'proData':
					if(!empty($_FILES['excel']['tmp_name']) && in_array($_FILES['excel']['type'], $excelType))
					{
						$OthExcel = new OthExcel();
						$colHeader = [
							'pro_id'=>['name'=>'配件ID'],
							'pro_name'=>['name'=>'配件名称'],
							'part_name'=>['name'=>'配件分类'],
							'part_param'=>['name'=>'配件分类参数'],
							'pro_brand'=>['name'=>'配件品牌'],
							'pri_code'=>['name'=>'自编号'],
							'main_number'=>['name'=>'主号码'],
							'pro_number'=>['name'=>'互换号'],
							'pro_param'=>['name'=>'自定义参数'],
							'pro_sale_price'=>['name'=>'销售价'],
							'pro_price_vip1'=>['name'=>'维修厂价格'],
							'pro_price_vip2'=>['name'=>'小型经销商价'],
							'pro_price_vip3'=>['name'=>'中型经销商价'],
							'pro_price_vip4'=>['name'=>'大型经销商价'],
							'pro_count'=>['name'=>'库存'],
							'shop_sort'=>['name'=>'店铺分类'],
							'pro_sel_des'=>['name'=>'卖点'],
							'pri_des'=>['name'=>'描叙'],
							'freight'=>['name'=>'运费模板'],
							'publish'=>['name'=>'发布时间']
						];
						$res = $OthExcel->read($_FILES['excel']['tmp_name'], 0, array_keys($colHeader));
						$proArr = $res['data'];
						$B2cProduct = new B2cProduct();
						$res = $B2cProduct->importProduct($shopData['shop_id'], $proArr, $_POST['unique']);
						$result = $res['data'];
						LibTpl::set('result', $result);
					}
					else
					{
						LibTpl::Error('获取上传表格失败！');
					}
				break;
				case 'proImg':
					if(empty($_POST['imgfile']))
					{
						LibTpl::Error('获取图片压缩包失败！');
					}
					if(!empty($_FILES['excel']['tmp_name']) && in_array($_FILES['excel']['type'], $excelType))
					{
						$OthExcel = new OthExcel();
						$colHeader = [
							'pro_id'=>['name'=>'配件ID'],
							'pri_code'=>['name'=>'自编号'],
							'main_number'=>['name'=>'主号码'],
							'images'=>['name'=>'图片名称']
						];
						$res = $OthExcel->read($_FILES['excel']['tmp_name'], 0, array_keys($colHeader));
						$proArr = $res['data'];
						$B2cProduct = new B2cProduct();
						$res = $B2cProduct->importProductImg($shopData['shop_id'], mvc::$cfg['PATH_ROOT'].'tmp/'.$_POST['imgfile'], $proArr);
						$result = $res['data'];
						LibTpl::set('result', $result);
					}
					else
					{
						LibTpl::Error('获取上传表格失败！');
					}
				break;
				case 'proModel':
					if(!empty($_FILES['excel']['tmp_name']) && in_array($_FILES['excel']['type'], $excelType))
					{
						$OthExcel = new OthExcel();
						$res = $OthExcel->read($_FILES['excel']['tmp_name'], 0);
						$tempArr = $res['data'];
						$colHeader = $tempArr[1];
						$colArr = [];
						foreach($colHeader as $fk=>$filed)
						{
							if(stripos($filed, '车型ID') !== false)
							{
								$colArr['mod3Id'] = $fk;
							}
							else if(stripos($filed, '号码') !== false)
							{
								$colArr['num'][] = $fk;
							}
						}
						$modelArr = [];
						foreach($tempArr as $val)
						{
							if(!preg_match('/\d/', $val[$colArr['mod3Id']])) continue;
							$mod3Id = (int) $val[$colArr['mod3Id']];
							foreach($colArr['num'] as $fk)
							{
								if(!empty($val[$fk]))
								{
									$reArr = ["\r\n", "\n",'，', ',', '；'];
									$val[$fk] = str_replace($reArr, ';', $val[$fk]);
									foreach(explode(';', $val[$fk]) as $num)
									{
										$modelArr[$mod3Id][] = $num;
									}
								}
							}
						}
						$B2cProduct = new B2cProduct();
						$res = $B2cProduct->importProductModel($shopData['shop_id'], $modelArr, $_POST['style']);
						$result = $res['data'];
						LibTpl::set('result', $result);
					}
					else
					{
						LibTpl::Error('获取上传表格失败！');
					}
				break;
				case 'zhipei':
					$B2cZhipei = new B2cZhipei();
					$res = $B2cZhipei->importZhipeiItem($shopData['shop_id'], $_POST['zpshop'], $_POST['zpact']);
					$result = $res['data'];
					LibTpl::set('result', $result);
				break;
				case 'zpautomodel':
					$B2cProduct = new B2cProduct();
					$res = $B2cProduct->zhiPeiAutoModel($shopData['shop_id'], $_POST['zpshop']);
					$result = $res['data'];
					LibTpl::set('result', $result);
				break;
                case 'other_shop':
					$style = isset($_POST['style']) ? $_POST['style'] : 'merge' ;
                    $formShopId = (int) $_POST['other_shop_id'] ;
                    if($formShopId <= 0) LibTpl::Error('目标店铺的ID不能未复数或者小于0');
                    if(!empty($_FILES['excel']['tmp_name']) && in_array($_FILES['excel']['type'], $excelType))
                    {
                        $OthExcel = new OthExcel();
                        $res = $OthExcel->read($_FILES['excel']['tmp_name'], 0);
                        $tableList = $res['data'];
                        //TODO 表头暂时不需要
                        //$header = reset($tableList);
                        array_shift($tableList);

                        if(empty($tableList))  LibTpl::Error("Excel表格数据不可为空");

                        //格式化所有号码
                        $tableList = array_map(function ($number){
                            return array_map(array("LibFc","FormatNum"),$number);
                        },$tableList);

                        //key:当前店铺得号码;value:导入店铺得号码
                        $tableList = array_column($tableList,1,0);

                        //函数去重,把数组每个元素变成引号,方便mysql in
                        $function = function($array)
                        {
                            $array = array_unique($array);
                            $array = array_map(function ($v){
                                return sprintf("'%s'",$v);
                            },$array);
                            return $array;
                        };

                        $db = new B2cProduct();
                        $toShopId = $shopId;
                        $formShopNumber = $function(array_values($tableList));
                        $table = 'bc_number as n join bc_product as p on pro_id=num_pro_id left join bc_product_model3_link as l on pml3_pro_id = pro_id';
                        $formShopModelLinks = $db->get($table,['num_format','pml3_mod3_id'],sprintf(" and num_format in (%s) and pro_shop_id =%d and num_show = 1",implode(',',$formShopNumber),$formShopId));

                        $formShopModelLink = [];
                        if(!empty($formShopModelLinks['data']))
                        {
                            foreach ($formShopModelLinks['data'] as $value)
                            {
                                $formShopModelLink[$value['num_format']][] = $value['pml3_mod3_id'];
                            }
                        }
                        if(empty($formShopModelLink))  LibTpl::Error('找不到目标店铺的号码');

                        $toShopNumber = $function(array_keys($tableList));

                        $toShopModelLinks = $db->get($table,['pro_id','num_format','pml3_mod3_id'],sprintf(" and num_format in (%s) and pro_shop_id =%d and num_show = 1",implode(',',$toShopNumber),$toShopId));

                        if(!empty($toShopModelLinks['data']))
                        {
                            $toShopModelLink = [];
                            foreach ($toShopModelLinks['data'] as $value)
                            {
                                $toShopModelLink[$value['num_format']][] = $value;
                            }

                            //遍历当前店铺
                            foreach ($toShopModelLink as $index => $item)
                            {
                                //通过tableList key-value 属性 找到 formShopModelLink 的num_format
                                if(isset($tableList[$index]) &&
                                    isset($formShopModelLink[$tableList[$index]])
                                ) {
                                        //获取到目标产品的车型关系
                                        $temp = $formShopModelLink[$tableList[$index]];
                                        if(empty($temp)) $temp = [];
                                        if(empty($item)) $item = [];
                                        //如果是增量式增加，就把原来的当前店铺的车型关系合并
                                        if($style == 'merge')
                                        {
                                            if(!empty($item))
                                            {
                                                $temp = array_merge($temp,array_column($item,'pml3_mod3_id'));
                                            }
                                        }
                                        //数组去重
                                        $temp = array_unique($temp);
                                        //通过末级的使用车型ID更新配件的使用品牌、一级、二级、三级车型ID关联
                                        if(isset($item['0'])) $db->setProductModel($item['0']['pro_id'],$temp,'SHOP');

                                    //释放内存
                                        unset($temp,$toShopModelLink[$index],$formShopModelLink[$tableList[$index]]);
                                }
                            }
                            LibTpl::Set('result',['imp' => true]);
                        }else{
                            LibTpl::Error('找不到当前店铺的号码信息');
                        }
                        break;


                    }
                    else
                    {
                        LibTpl::Error('获取上传表格失败！');
                    }
                    break;
                case 'shop_water':
                    $limit = 5;
                    if(!is_object($this->othFileCenter))
                    {
                        $this->othFileCenter = new OthFileCenter();
                    }
                    $fileName = mvc::$cfg['PATH_ROOT'].DIRECTORY_SEPARATOR.'water_log'.DIRECTORY_SEPARATOR.$shopId.'.php';

                    if(file_exists($fileName)){
                        $this->errorList = include($fileName);
                        unlink($fileName);
                    }else{
                        $data = $B2cBase->get('sh_pic',['spi_path','spi_name','spi_ext'],sprintf(" and spi_shop_id=%d and spi_cate='%s'",$shopId,'product'));
                        $data = $data['data'];
                        foreach ($data as &$value)
                        {
                            $temp = $value['spi_path'].$value['spi_name'].'.'.$value['spi_ext'];
                            $value = $temp;
                            $this->errorList[$value] = 0;
                            unset($temp);
                        }
                        LibFc::ArraySave($this->errorList,$fileName);

                        $data = array_chunk($data,$limit);
                        foreach ($data as $value)
                        {
                            $this->single($value,$fileName);
                        }
                    }
                    $this->errorListHandle($fileName,$limit);
                    $imp = true;
                    $error = [];
                    foreach ($this->errorList as $k => $v)
                    {
                        if($v == 0)
                        {
                            $imp = false;
                            $error[] = $k;
                        }
                    }
                    if($imp == true)
                    {
                        unlink($fileName);
                        LibTpl::Set('result',['imp' => true]);
                    }
                    else
                    {
                        LibTpl::Error('未成功列表:'.implode('<br>',$error));
                    }
                    break;
			}
		}
		if(!empty($_POST['zpshop'])) $zpshop = $_POST['zpshop'];
		LibTpl::set('zpshop', $zpshop);
		LibTpl::set('zpAct', $_POST['zpact']);
		LibTpl::Set('shopWarter',$shopData['shop_warter']);
		LibTpl::Set('title', $shopData['shop_name'].'-产品批量管理-跑街的');
		LibTpl::Put();
	}


    /**
     *
     * 单词执行
     * @param $value
     * @param $fileName
     * @return bool
     */
	private function single($value,$fileName)
    {
        if(!is_object($this->othFileCenter))
        {
            $this->othFileCenter = new OthFileCenter();
        }
        $res = $this->othFileCenter->resetHasfile(['cate' => 'product', 'files' => $value, 'smallpath' => '/100/'],"b2c");
        if($res['status'] == true)
        {
            foreach ($res['data'] as $v)
            {
                if (isset($this->errorList[$v]))
                {
                    $this->errorList[$v] = 1;
                }
            }
            LibFc::ArraySave($this->errorList,$fileName);
        }
        return true;
    }

    /**
     * 执行错误的结果
     * @param string $fileName 保存缓存的文件名
     * @param int $limit 每次多少个图片地址
     */
   private function errorListHandle($fileName,$limit)
   {
       if(!is_object($this->othFileCenter))
       {
           $this->othFileCenter = new OthFileCenter();
       }
        $tmp = [];
        $start = 0;
        foreach ($this->errorList as $k => $val)
        {
            if($val == 0)
            {
                $start++;
                $tmp[] = $k;
                if($start % $limit == 0)
                {
                    $this->single($tmp,$fileName);
                    $tmp = [];
                }
            }
        }
       $this->single($tmp,$fileName);
    }

	/**
	 * @method 批量检测号码车型
	 * @author soul
	 * @copyright 2018/3/17
	 */
	function checkNumModel()
	{
		LibRule::Check('KW04');
		$Params = MVC::$URL_PARAMS;
		$B2cBase = new B2cBase();
		$excelType = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
		if(!empty($_FILES['excel']['tmp_name']) && in_array($_FILES['excel']['type'], $excelType))
		{
			$OthExcel = new OthExcel();
			$res = $OthExcel->read($_FILES['excel']['tmp_name'], 0);
			$excelArr = $res['data'];
			$colHeader = $excelArr[1];
			$colArr = [];
			$maxcol = 0;
			foreach($colHeader as $fk=>$filed)
			{
				$maxcol = $maxcol < $fk? $fk: $maxcol;
				if(stripos($filed, '号码') !== false)
				{
					$colArr['num'][] = $fk;
				}
			}
			$LibYpApi = new LibYpApi();
			$ComModel = new ComModel();
			$mod3Col = $maxcol;
			$excelArr[1][$mod3Col+1] = '车型数';
			$excelArr[1][$mod3Col+2] = '品牌';
			//$excelArr[1][$mod3Col+3] = '车型ID';
			foreach($excelArr as $row=>$val)
			{
				if($row == 1) continue;
				$numArr = [];
				foreach($colArr['num'] as $fk)
				{
					if(!empty($val[$fk]))
					{
						$reArr = ["\r\n", "\n",'，', ',', '；'];
						$val[$fk] = str_replace($reArr, ';', $val[$fk]);
						foreach(explode(';', $val[$fk]) as $num)
						{
							$numArr[] = $num;
						}
					}
				}
				$numArr = array_unique($numArr);
				$mod3IdArr = [];
				if(!empty($numArr))
				{
					$res = $LibYpApi->get('ypc/getM3idsByNum', [], ['nums'=>$numArr]);
					if(!empty($res['data']))
					{
						$mod3IdArr = $res['data'];
						$res = $ComModel->getModel(3, ['distinct brand_name'], sprintf(" and mod3_id in (%s)", implode(',', $mod3IdArr)));
						$excelArr[$row][$mod3Col+1] = count($mod3IdArr);
						$excelArr[$row][$mod3Col+2] = implode(',', array_column($res['data'], 'brand_name'));
						//$excelArr[$row][$mod3Col+3] = implode(',', $mod3IdArr);
					}
				}
			}
			$OthExcel->writer($excelArr);
			LibTpl::Success('检测完成');
		}
		LibTpl::Set('title', '号码车型匹配-跑街的');
		LibTpl::Put();
	}


	/**
	 * @method 根据配件的OE号码更新配件的适用车型
	 * @author soul
	 * @copyright 2018/3/17
	 */
	function resetModelsByOes()
	{
		$B2cProduct=new B2cProduct();
		$res = $B2cProduct->resetModelsByMatch(0, explode(',', $_POST['proIds']), $_POST['keep']);
		LibFc::ajaxJsonEncode($res);
	}


	/**
	 * @method    获取车型
	 * @author 卢
	 * @copyright 2018-04-26
	 */
	function getModel()
	{
		$Params = MVC::$URL_PARAMS;
		$ComModel=new ComModel();
		if(empty($Params['level'])||false===LibFc::Int($Params['pid']))
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数错误']);
		}
		// print_r($res);
		$where='';
		switch ($Params['level'])
		{
			case '1':
				$res=$ComModel->getAllBrand(false);
				if(!empty($res['data']))
				{
					$sort=array_column($res['data'], 'brand_initial');
					array_multisort($sort,SORT_ASC,$res['data']);
				}
			break;
			case '2':
				$res=$ComModel->getModel(1,['distinct make_id','make_name'],sprintf(' and mod1_brand_id=%d order by brand_seq, brand_initial',$Params['pid']));
				// $where=sprintf(' and mod2_mod1_id=%d',$Params['pid']);
				break;
			case '3':
				$res=$ComModel->getModel(1,['*'],sprintf(' and mod1_make_id=%d order by brand_seq, brand_initial, make_seq, make_initial, mod1_name',$Params['pid']));
				break;
			case '4':
				$res=$ComModel->getModel(2,['*'],sprintf(' and mod2_mod1_id=%d order by mod1_name, mod2_name, mod2_start_year',$Params['pid']));
				break;
			case '5':
				$res=$ComModel->getModel(3,['*'],sprintf(' and mod3_mod2_id=%d order by mod2_name, mod2_start_year, mod3_name, mod3_start_year',$Params['pid']));
				//LibFc::formatViewYear($v['MOD3_START_YEAR'], $v['MOD3_END_YEAR'], 2)
				if(!empty($res['data']))
				{
					foreach ($res['data'] as $k => $v)
					{
						$res['data'][$k]['year']=LibFc::formatViewYear($v['mod3_start_year'], $v['mod3_end_year'], 2);
					}
				}
				break;
		}
		LibFc::ajaxJsonEncode($res);
	}
	/**
	 * @method    配件基本信息
	 * @author 卢
	 * @copyright 2018-04-27
	 */
	function productInfo()
	{
		$Params = MVC::$URL_PARAMS;
		$B2cBase = new B2cBase();
		$B2cBrand=new B2cBrand();
		$B2cProduct = new B2cProduct();
		$B2cPart  = new B2cPart();
		$B2cShopSort = new B2cShopSort();
		if(!empty($Params['proId']))
		{
			$proId = (int) $Params['proId'];
			$res = $B2cProduct->getProduct(['*'], sprintf(" and pro_id = %d", $proId), true);
			$proArr['base'] = $res['data'];
			//产品不存在
			if(empty($proArr['base']))
			{
				LibTpl::Error('配件不存在');
				exit();
			}
			//配件品牌
			if($proArr['base']['pro_prb_id'])
			{
				$brandNowData=$B2cBase->get('bc_probrand',['prb_id','prb_name'],sprintf(' and prb_id=%d',$proArr['base']['pro_prb_id']),true);
				$proArr['nowBrand']=$brandNowData['data'];
			}
			$brandData=$B2cBrand->get('sh_probrand_link left join bc_probrand on sprl_prb_id=prb_id',['prb_id','prb_name'],sprintf(' and sprl_shop_id=%d order by sprl_seq asc',$_SESSION['_shopid']));
			if(count($brandData['data']))
			{
				$proArr['brandArr']=$brandData['data'];
			}
			$res = $B2cPart->getAllPart();
			$AllPart = $res['data'];

			$proArr['partNames'] = [];
			foreach(explode(',', $proArr['base']['pro_part_path']) as $v)
			{
				if(!empty($AllPart[$v]))
				{
					$proArr['partNames'][] = $AllPart[$v]['part_name'];
				}
			}
			//分类参数
			$res = $B2cPart->getPartParam($proArr['base']['pro_part_id']);
			// print_r($res);
			$ParaArr=$res['data'];
			$sort=array();
			if(count($ParaArr))
			{
				$sort=array_column($ParaArr, 'ppl_seq');
				array_multisort($sort, SORT_ASC, $ParaArr);
				// print_r($ParaArr);
				// die;
				$valRes=array_column($ParaArr, 'pal_id');
				$res=$B2cPart->get('bc_param_value',['pav_id','pav_part_id','pav_pal_id','pav_seq','pav_value'],sprintf(' and pav_pal_id IN(%s)',implode(',', $valRes)));
				$sort=[];
				$valRes=[];
				if(count($res['data']))
				{
					foreach ($res['data'] as $v)
					{
						$valRes[$v['pav_pal_id']][]=$v;
						$sort[$v['pav_pal_id']][]=$v['pav_seq'];
					}
					// print_r($valRes);
					foreach($ParaArr as $K=>$V)
					{
						if(isset($valRes[$V['pal_id']]))
						{
							array_multisort($sort[$V['pal_id']], SORT_ASC, $valRes[$V['pal_id']]);
							$ParaArr[$K]['valArr']=$valRes[$V['pal_id']];
						}
					}
				}
			}
			// print_r($ParaArr);
			$proArr['partParam'] = $ParaArr;
			$proArr['modelId'] = ['m1'=>[], 'm2'=>[], 'm3'=>[]];

			//配件已有数据
			if($proArr['base']['pro_id'] > 0)
			{
				//参数
				$res = $B2cProduct->getProductParam($proArr['base']['pro_id']);
				$proArr['param'] = $res['data'];
				// print_r($proArr['param']);
				//图片
				$res = $B2cProduct->getProductPic($proId, true);
				$proArr['imgs'] = $res['data'];



				//店铺分类
				$res = $B2cBase->getFieldUniVal('bc_product_sort', 'prs_sort_id', sprintf(" and prs_pro_id=%d", $proId));
				$hasShopSortId = $res['data'];
				$res=$B2cShopSort ->getAllShopSort($proArr['base']['pro_shop_id'],false);
				$sortNameArr=[];
				if(!empty($hasShopSortId))
				{
					foreach ($hasShopSortId as $id)
					{
						$sortNameArr[]=$res['data'][$id]['sort_name'];
					}
				}
				LibTpl::Set('sortNameArr',$sortNameArr);
			}
			$proArr['base']['pri_publish_time'] = isset($proArr['base']['pri_publish_time'])? $proArr['base']['pri_publish_time']: time();

			$imgCount = !empty($proArr['imgs']) ? count($proArr['imgs']): 0;
			for($i = $imgCount; $i < 5; $i++)
			{
				$proArr['imgs'][$i] = [];
			}
			LibTpl::Set('proArr', $proArr);
			// print_r($proArr);
			// $res=$B2cBase->get('bc_product',['pro_ppt_id'],sprintf(' and pro_shop_id=%d and pro_id=%d',$_SESSION['_shopid'],$Params['proId']),true);
			if($proArr['base']['pro_ppt_id'])
			{
				$tplId=$proArr['base']['pro_ppt_id'];
				$proId=$Params['proId'];
				//有值的
				$feild = ['prpv_prl_id', 'prpv_pru_id', 'prpv_value','prl_name','pru_name'];
				$res=$B2cBase->get('bc_product_para_val join bc_product on pro_id= prpv_pro_id left join bc_product_label on prl_id=prpv_prl_id left join bc_product_unit on pru_id=prpv_pru_id', $feild, sprintf(" and pro_id=%d and pro_ppt_id =%d and pro_shop_id=%d and (prpv_value is not null or prpv_value!='')", $proId, $tplId, $proArr['base']['pro_shop_id']));
				// print_r($res);
				$oldValArr = [];
				$oldValArr=array_column($res['data'], null,'prpv_prl_id');
				// print_r($oldValArr);
				//新的
				$fieldArr=['pptl_ppt_id','prl_id','pru_id','pptl_seq','prl_name','pru_name'];
				$newlink=$B2cBase->get('bc_product_para_tpl_link left join bc_product_label on prl_id=pptl_prl_id left join bc_product_unit on pru_id=pptl_pru_id',$fieldArr,sprintf(' and pptl_ppt_id=%d order by pptl_seq asc,pptl_prl_id asc',$tplId));
				$newArr=array_column($newlink['data'], null,'prl_id');
				// print_r($newArr);
				if(count($oldValArr))
				{
					foreach ($oldValArr as $k => $v)
					{
						$newArr[$k]=isset($newArr[$k])?array_merge($v,$newArr[$k]):$v;
					}
				}
				// print_r($newArr);
			}
			LibTpl::Set('paramArr', $newArr);
			// 会员等级信息
			$B2cShop = new B2cShop();
			$res = $B2cShop->getMemberSetting($proArr['base']['pro_shop_id']);
			// var_dump($res);
			LibTpl::Set('memberSetting',$res['data']);
			$is_show = array_filter(array_column($res['data'], 'mem_status'));
			LibTpl::Set('memberSettingHide',empty($is_show)?1:0);
			//运费获取
			$templateId=$proArr['base']['pri_frt_id'];
			if((int)$templateId)
			{
				$B2cFreight=new B2cFreight();
				$YpwAddr= new YpwAddr();
				$res=$B2cFreight->getSellerTemplateList($proArr['base']['pro_shop_id'],$templateId);
				// print_r($res);
				$tplData=[];
				if(!empty($res['data']))
				{
					$tplArr=$res['data'][0];
					$data=$YpwAddr->getAddrByIds($tplArr['frt_send_pct']);
					$tplData['cityName']=implode('',$data['data']);
					$tplData['frt_is_free']=$tplArr['frt_is_free'];
					$tplData['frt_name']=$tplArr['frt_name'];
					$tplData['frt_valuation_method']=$tplArr['frt_valuation_method'];
					$tplData['frt_send_hour']=$tplArr['frt_send_hour'];
					$tplData['frt_send_pct']=$tplArr['frt_send_pct'];
					foreach ($tplArr['link'] as $k => $v)
					{
						$tplData['link'][$v['ftl_shipping_method']][]=$v;
					}
				}
				// print_r($tplData);
				LibTpl::Set('tplData',$tplData);
			}
			//售后模板
			if($proArr['base']['pri_service_pdt_id'])
			{
				$res=$B2cBase->get('bc_product_desc_tpl',['pdt_name','pdt_id'],sprintf(' and pdt_id=%d',$proArr['base']['pri_service_pdt_id']),true);
				LibTpl::Set('serviceTpl',$res['data']);
			}
			//橱窗数量
			$res = $B2cBase->get('sh_shop', ['shop_window_count'], sprintf(" and shop_id=%d", $proArr['base']['pro_shop_id']), true);
			$shopInfo = $res['data'];

			LibTpl::Set('shopInfo', $shopInfo);
			LibTpl::Set('title','配件信息-跑街的');
			LibTpl::Put();
			exit();
		}
		LibTpl::Error('配件不存在');
	}
	/**
	 * @method    配件车型/号码
	 * @author 卢
	 * @copyright 2018-04-27
	 */
	function productNum()
	{
		$Params = MVC::$URL_PARAMS;
		if(LibFc::Int($Params['proId']))
		{
			$B2cBase = new B2cBase();
			$res=$B2cBase->get('bc_product',['count(1) count'],sprintf(' and pro_id=%d',$Params['proId']),true);
			if($res['data']['count'])
			{
				$proArr['base']['pro_id']=$Params['proId'];
				//号码
				$res = $B2cBase->get('bc_number', ['num_id', 'num_factory', 'num_display', 'num_format', 'num_ismain','num_self'], sprintf(" and num_self=0 and num_pro_id=%s order by num_factory, num_format", $Params['proId']));
				$proArr['nums'] = $res['data'];
				$total=count($proArr['nums']);
				if($total>=4)
				{
					$keyArr=[];
					$chunk=floor($total/4);
					$less=$total%4;
					$keyArr=[1=>$chunk,2=>2*$chunk,3=>3*$chunk];
					if($less>0)
					{
						switch ($less)
						{
							case 1:
								$keyArr=[1=>$chunk+1,2=>2*$chunk+1,3=>3*$chunk+1];
								break;

							case 2:
								$keyArr=[1=>$chunk+1,2=>2*$chunk+2,3=>3*$chunk+2];
								break;
							case 3:
								$keyArr=[1=>$chunk+1,2=>2*$chunk+2,3=>3*$chunk+3];
								break;
						}
					}
					// print_r($keyArr);
					LibTpl::Set('keyArr',$keyArr);
				}
				//车型
				$res = $B2cBase->getFieldUniVal('bc_product_model3_link', 'pml3_mod3_id', sprintf(" and pml3_pro_id=%d", $Params['proId']));
				$proArr['modelId']['m3'] = $res['data'];
				if(!empty($res['data']))
				{
					$ComModel=new ComModel();
					$res=$ComModel->getModel(3,['mod3_name','mod3_start_year','mod3_end_year','mod3_engine','mod3_transmission','mod3_fuel','mod3_body','mod3_drive','brand_name','make_name','mod2_name'],sprintf(' and mod3_id in(%s) order by brand_seq, brand_initial, make_seq, make_initial, mod1_name, mod2_name, mod3_name',implode(',',$res['data'])));
					$proArr['modelArr']=$res['data'];
				}
				// print_r($proArr['modeArr']);
				LibTpl::Set('proArr',$proArr);
				LibTpl::Set('title','配件号码/车型-跑街的');
				LibTpl::Put();
				exit();
			}
		}
		LibTpl::Error('配件不存在');
	}
	/**
	 * @method    配件订单记录
	 * @author 卢
	 * @copyright 2018-04-27
	 */
	function proOrder()
	{
		$Params = MVC::$URL_PARAMS;
		if(LibFc::Int($Params['proId']))
		{
			$B2cBase = new B2cBase();
			$nowPage=isset($Params['page'])?$Params['page']:1;
			$perPage=isset($_COOKIE['perPage'])? $_COOKIE['perPage'] : 20;
			$res=$B2cBase->get('or_order_product',['count(1) total'],sprintf(' and orp_pro_id=%d',$Params['proId']),true);
			$total=$res['data']['total'];
			$where =sprintf(" and orp_pro_id=%d order by ord_add_time desc limit %d,%d",$Params['proId'], ($nowPage-1)*$perPage, $perPage);
			$res=$B2cBase->get('or_order_product left join or_order on orp_ord_id=ord_id', ['ord_id','orp_pro_name','orp_status','ord_pay_money','orp_sale_price','orp_price','orp_count','orp_money','ord_add_time','ord_uid','ord_shop_id'], $where);
			if(!empty($res['data']))
			{
				//买家
				$buyArr=array_column($res['data'], 'ord_uid');
				$uRes=$B2cBase->get('us_user_base',['ub_username','ub_uid'],sprintf(' and ub_uid in(%s)',implode(',',$buyArr)));
				if(!empty($uRes['data']))
				{
					$uArr=array_column($uRes['data'],null, 'ub_uid');
				}
				foreach ($res['data'] as $k => $v)
				{
					$res['data'][$k]['buyer']=isset($uArr[$v['ord_uid']])?$uArr[$v['ord_uid']]['ub_username']:'';
				}
			}
			// print_r($res);
			$Page = LibPage::Show($total, $perPage);
			LibTpl::Set('Page', $Page);
			LibTpl::Set('proId',$Params['proId']);
			LibTpl::Set('ordList',$res['data']);
			LibTpl::Set('title','购买记录-跑街的');
			LibTpl::Put();
			exit();
		}
		LibTpl::Error('配件不存在');
	}
	/**
	 * @method    配件评论记录
	 * @author 卢
	 * @copyright 2018-04-27
	 */
	function proEval()
	{
		$Params = MVC::$URL_PARAMS;
		if(LibFc::Int($Params['proId']))
		{
			$B2cBase = new B2cBase();
			$where=sprintf(' and evp_pro_id=%d',$Params['proId']);
			$nowPage=isset($Params['page'])?$Params['page']:1;
			$perPage=isset($_COOKIE['perPage'])? $_COOKIE['perPage'] : 20;
			$count = $B2cBase->get('or_evaluate_product',['count(1) as count'],$where,true);
			$total = $count['data']['count'];
			$where .= sprintf(' limit %d,%d', ($nowPage-1)*$perPage, $perPage);
			$dataArr = $B2cBase->get('or_evaluate_product',['*'], $where);
			if(!empty($dataArr['data']))
			{
				$dataArr['data']=array_column($dataArr['data'],null, 'evp_id');
				//取图片
				$imgIdArr=array_column($dataArr['data'], 'evp_id');
				if(count($imgIdArr))
				{
					$res=$B2cBase->get('or_evaluate_img',['evi_path','evi_name','evi_ext','evi_evi_id'],sprintf(' and evi_evi_id in(%s)',implode(',',$imgIdArr)));
					if(!empty($res['data']))
					{
						foreach ($res['data'] as $v)
						{
							$dataArr['data'][$v['evi_evi_id']]['imgArr'][]=$v;
						}
					}
				}
				//取用户
				$uArr=array_column($dataArr['data'], 'evp_uid');
				$res=$B2cBase->get('us_user_base',['ub_uid','ub_username'],sprintf(' and ub_uid in(%s)',implode(',',$uArr)));
				if(!empty($res['data']))
				{
					$res['data']=array_column($res['data'],null, 'ub_uid');
					foreach ($dataArr['data'] as $k => $v)
					{
						$dataArr['data'][$k]['uName']=isset($res['data'][$v['evp_uid']])?$res['data'][$v['evp_uid']]['ub_username']:'';
					}
				}

			}
			// print_r($dataArr);
			$Page = LibPage::Show($total, $perPage);
			LibTpl::Set('Page', $Page);
			LibTpl::Set('proId',$Params['proId']);
			LibTpl::Set('dataArr',$dataArr['data']);
			LibTpl::Set('title','评价记录-跑街的');
			LibTpl::Put();
			exit();
		}
		LibTpl::Error('配件不存在');
	}

	/**
	 * @method    配件描述
	 * @author 卢
	 * @copyright 2018-04-27
	 */
	function productDesc()
	{
		$Params = MVC::$URL_PARAMS;
		if(LibFc::Int($Params['proId']))
		{
			$B2cBase = new B2cBase();
			$res=$B2cBase->get('bc_product_info',['pri_des','pri_pro_id'],sprintf(' and pri_pro_id=%d',$Params['proId']),true);
			LibTpl::Set('data',$res['data']);
			LibTpl::Set('proId',$Params['proId']);
			LibTpl::Set('title','配件描述-跑街的');
			LibTpl::Put();
			exit();
		}
		LibTpl::Error('配件不存在');
	}

	/**
	 * @method    数据批量导入规范
	 * @author    xu
	 * @copyright 2018-06-04
	 */
	function createModel() {
	    $spreadsheet = new Spreadsheet();
	    $sheet = $spreadsheet->getActiveSheet();

	    $cols = [
			['name' =>'配件ID','key' =>'pro_id','notice' =>'非必填|整数'],
			['name' => '配件名称','key' => 'pro_name','notice' => '必填|字符串'],
			['name' => '宜配零件分类','key' => 'part_name','notice' => '必填|官网零件分类|单个'],
			['name' => '宜配零件参数','key' => 'part_param','notice' =>'位置:前;位置:后;厚度:16.5 mm|以分号分隔，冒号前面是参数名，后面是参数值'],
			['name' => '配件品牌','key' => 'pro_brand','notice' => 'yiparts'],
			['name' => '配件自编号','key' => 'pri_code','notice' => '非必填'],
			['name' => '主号码','key' => 'main_number','notice' => 'OE:D123-544D'],
			['name' => '配件互换号码','key' => 'pro_number','notice' => 'OE:D123-544D;AB:OE:D123-556|可多个，英文分号分割'],
			['name' => '配件自定义参数','key' => 'pro_param','notice' => '位置:前轮;制动系统:ATE;宽度:94.8 mm;|英文分号分隔符'],
			['name' => '售价','key' => 'pro_sale_price','notice' => '数字|默认售价9999'],
			['name' => '库存','key' => 'pro_count','notice' => '整数|默认1'],
			['name' => '店铺分类','key' => 'sort','notice' => '宝马;奔驰；法拉利'],
			['name' => '配件卖点','key' => 'pro_sel_des','notice' => '非必填'],
			['name' => '配件描述','key' => 'pri_des','notice' => '非必填'],
			['name' => '发布时间','key' => 'publish','notice' => '不填则表示放入仓库|2018-08-08 08:08:08|严格按照示例填写'],
		];

		// 添加单元格
		foreach ($cols as $k => $v) {
		    $sheet->setCellValue(LibFc::IntToChr($k).'1',$v['name']);
		    $sheet->setCellValue(LibFc::IntToChr($k).'2',$v['key']);
		    $sheet->setCellValue(LibFc::IntToChr($k).'3',$v['notice']);
		}

	    // 设置背景色
	    $sheet->getStyle('A1:'.LibFc::IntToChr(count($cols)-1).'3')->getFill()
	    ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
	    ->getStartColor()->setARGB('FFEC8B');

	    // 列宽
		foreach ($cols as $k => $v) {
			$sheet->getColumnDimension(LibFc::IntToChr($k))->setAutoSize(true);
		}

	    // 输出模板
	    $writer = new Xlsx($spreadsheet);
	    $writer->save('宜配B2C商城数据批量导入规范.xls');

	    // 下载文件
	    header('Location:'.mvc::$cfg['ADMIN_URL'].'宜配B2C商城数据批量导入规范.xls');
	    exit;
	}


	//备份车型
	function shopModelBackup()
	{
		LibRule::Check('KW04');
		$Params = MVC::$URL_PARAMS;
		$shopId = (int) $Params['shopId'];
		if($shopId > 0)
		{
			$ver = date('YmdHi');
			$sql = sprintf("INSERT into bc_product_model3_link_ver (pml3b_pro_id, pml3b_mod3_id, pml3b_pml3_remark, pml3b_pml3_from, pml3b_pml3_time, pml3b_version, pml3b_shop_id)
			select pml3_pro_id, pml3_mod3_id, pml3_remark, pml3_from, pml3_time, '%s', pro_shop_id from bc_product_model3_link join bc_product on pro_id = pml3_pro_id where pro_shop_id = %d", $ver, $shopId);
			$B2cBase = new B2cBase();
			$B2cBase->query($sql);
		}
		echo 'ok';
	}


	//从备份车型恢复车型
	function shopModelFromBackup()
	{
		LibRule::Check('KW04');
		$Params = MVC::$URL_PARAMS;
		$B2cProduct = new B2cProduct();
		$B2cProduct->shopModelFromBackup($Params['shopId'], $Params['version']);
		echo 'ok';
	}

	//从其他店铺匹配车型（号码相同）
	function copyModelFromOthShop()
	{
		exit;
		LibRule::Check('KW04');
		$Params = MVC::$URL_PARAMS;
		$toShopId = (int) $Params['shopId'];
		$fromShopIds = [];

		$B2cProduct = new B2cProduct();
		$where = sprintf(" and pro_shop_id =%d and num_show = 1 and num_self != 1 and pro_id not in (select pml3_pro_id from bc_product_model3_link)", $toShopId);
		$toRes = $B2cProduct->get('bc_number join bc_product on pro_id = num_pro_id', ['pro_id', 'num_factory', 'num_format'], $where);
		$toProArr = [];
		foreach($toRes['data'] as $v)
		{
			$tw =  sprintf(" and pro_shop_id != %d and num_factory='%s' and num_format = '%s' and num_show = 1", $toShopId, LibFc::Escape($v['num_factory']), $v['num_format']);
			if(!empty($fromShopIds)) $tw .= sprintf(" and pro_shop_id in (%s)", implode(',', $fromShopIds));
			$fromRes = $B2cProduct->get('bc_number join bc_product on pro_id = num_pro_id', ['distinct pro_id'], $tw);
			foreach($fromRes['data'] as $vv)
			{
				$toProArr[$v['pro_id']][] = $vv['pro_id'];
			}
		}
		if(!empty($toProArr))
		{
			//已有的
			$mod3IdArr = [];
			$tres = $B2cProduct->get('bc_product_model3_link', ['pml3_pro_id, pml3_mod3_id'], sprintf(" and pml3_pro_id in(%s)", implode(',', array_keys($toProArr))));
			foreach($tres['data'] as $tv)
			{
				$mod3IdArr[$tv['pml3_pro_id']][] = $tv['pml3_mod3_id'];
			}

			foreach($toProArr as $toProId=>$formProIdArr)
			{
				$formProIdArr = array_unique($formProIdArr);
				$tres = $B2cProduct->get('bc_product_model3_link', ['pml3_mod3_id'], sprintf(" and pml3_pro_id in(%s)", implode(',', $formProIdArr)));
				if(!empty($tres['data']))
				{
					$mod3IdArr[$toProId] = isset($mod3IdArr[$toProId])? array_merge($mod3IdArr[$toProId], array_column($tres['data'], 'pml3_mod3_id') ) : array_column($tres['data'], 'pml3_mod3_id');
					$B2cProduct->setProductModel($toProId, $mod3IdArr[$toProId], 'SHOP');
				}
			}
			var_dump($toProArr);
		}
	}


	//匹配车型
	function resetModelsByMatch()
	{
		LibRule::Check('KW04');
		$Params = MVC::$URL_PARAMS;
		$B2cProduct = new B2cProduct();
		$B2cProduct->resetModelsByMatch($Params['shopId'], [], $Params['type']);
		echo 'ok';
	}


	//备份店铺产品
	function backupShopItems()
	{
		LibRule::Check('KW04');
		$Params = mvc::$URL_PARAMS;
		$shopId = (int) $Params['shopId'];
		if($shopId > 0)
		{
			$dir = mvc::$cfg['PATH_ROOT'].'backup/shopItem'.$shopId.'_'.date('YmdHi').'/';
			@mkdir($dir);
			$B2cProduct = new B2cProduct();
			$tableArr = [
				'base'=>[
					'table'=>'bc_product JOIN bc_product_info ON pro_id = pri_pro_id LEFT JOIN bc_probrand ON prb_id = pro_prb_id',
					'where'=>sprintf(" and pro_shop_id =%d", $shopId),
				],
				'number'=>[
					'table'=>'bc_number',
					'where'=>sprintf(" and num_pro_id IN ( SELECT pro_id FROM bc_product WHERE pro_shop_id = %d )", $shopId),
				],
				'model'=>[
					'table'=>'bc_product_model3_link',
					'where'=>sprintf(" and pml3_pro_id IN ( SELECT pro_id FROM bc_product WHERE pro_shop_id = %d )", $shopId),
				],
				'bc_product_model3_para'=>[
					'table'=>'bc_product_model3_para',
					'where'=>sprintf(" and pmp_pro_id IN ( SELECT pro_id FROM bc_product WHERE pro_shop_id = %d )", $shopId),
				],
				'bc_product_para_val'=>[
					'table'=>'bc_product_para_val',
					'where'=>sprintf(" and prpv_pro_id IN ( SELECT pro_id FROM bc_product WHERE pro_shop_id = %d )", $shopId),
				],
				'bc_product_param_float'=>[
					'table'=>'bc_product_param_float',
					'where'=>sprintf(" and ppf_pro_id IN ( SELECT pro_id FROM bc_product WHERE pro_shop_id = %d )", $shopId),
				],
				'bc_product_param_string'=>[
					'table'=>'bc_product_param_string',
					'where'=>sprintf(" and pps_pro_id IN ( SELECT pro_id FROM bc_product WHERE pro_shop_id = %d )", $shopId),
				],
				'bc_product_pic'=>[
					'table'=>'bc_product_pic JOIN sh_pic ON spi_id = pp_spi_id',
					'where'=>sprintf(" and pp_pro_id IN ( SELECT pro_id FROM bc_product WHERE pro_shop_id = %d )", $shopId),
				],
				'bc_product_sort'=>[
					'table'=>'bc_product_sort JOIN sh_sort ON sort_id = prs_sort_id',
					'where'=>sprintf(" and prs_pro_id IN ( SELECT pro_id FROM bc_product WHERE pro_shop_id = %d )", $shopId),
				]
			];
			foreach($tableArr as $tk=>$tv)
			{
				$res = $B2cProduct->get($tv['table'], ['*'], $tv['where']);
				LibFc::ArraySave($res['data'], $dir.$tk.'.php');
			}
		}
		echo 'ok';
	}

	public function exportPage()
    {
		LibRule::Check('EXYP');
        $dbName = mvc::$cfg['DB']['YP']['db_name'];
        $sql = "SELECT pa.`partid` as id, tx.txt as name,tr.parent as pId FROM `$dbName`.`yp_part` AS pa
                       JOIN `$dbName`.`yp_lng_des` AS de ON pa.`desid` = de.`desid` AND de.lngid = 1
                       JOIN `$dbName`.`yp_lng_text` AS tx ON de.`txtid` = tx.`txtid`
                       JOIN `$dbName`.`yp_part_tree` AS tr ON pa.`partid` = tr.`partid`";
        $list = (new BaseDb(mvc::$cfg['DB']['YP']))->BaseDb->Table($sql);
        LibTpl::Set('list',$list);
        LibTpl::Put();
    }

    public function exportProduct()
    {
		LibRule::Check('EXYP');
        $param = mvc::$URL_PARAMS;
        $partId = $param['part_id'];
        if(empty($partId)){
            LibTpl::Error('参数错误');
        }
        if(!empty($param['factory'])){
            $param['factory'] = trim($param['factory']);
            $param['factory'] = trim($param['factory'],',');
            $param['factory'] = explode(',',$param['factory']);
            $temp = [];
            foreach ($param['factory'] as $value)
            {
                if(!empty($value)){
                    $temp[] = sprintf("'%s'",trim($value));
                }
            }
            if(!empty($temp)){
                $factory = implode(',',$temp);
            }else{
                $factory = '';
            }
        }else{
            $factory = '';
        }
        $dbName = mvc::$cfg['DB']['YP']['db_name'];
        $dbNameCom = mvc::$cfg['DB']['COM']['db_name'];
       // var_dump();exit();
        set_time_limit(0);

        if(empty($factory)){
            $sql = "SELECT tx.txt AS '配件分类', pas.`cn_value` AS '位置', CONCAT(factory , ':', display) AS '号码',GROUP_CONCAT(DISTINCT CONCAT(brand_name, mod1_name)) AS '适用车系', COUNT(*) AS '适用车型数量'  FROM `ypdb`.`yp_product` AS p
                JOIN `$dbName`.`yp_ypc_model3_pro_link` ON p.pid = ympl_pro_id
                JOIN `$dbName`.`yp_number` AS num ON p.pid = num.`pid` AND num.`ismain` = 1
                JOIN `$dbName`.`yp_factory` AS fac ON fac.fid =num.fid
                JOIN `$dbName`.`yp_part` AS pa ON p.partid = pa.`partid`
                JOIN `$dbName`.`yp_lng_des` AS de ON pa.`desid` = de.`desid` AND de.lngid = 1
                JOIN `$dbName`.`yp_lng_text` AS tx ON de.`txtid` = tx.`txtid`
                LEFT JOIN `$dbName`.`yp_para_string_link` pas ON pas.pid = p.`pid`
                LEFT JOIN `$dbName`.`yp_para_label` AS pl ON pl.`labelid` = pas.`labelid` AND pl.name = 'Location'
                JOIN `$dbNameCom`.bc_model3 ON ympl_m3_id = mod3_id
                JOIN `$dbNameCom`.bc_model1 ON mod3_mod1_id = mod1_id
                JOIN `$dbNameCom`.bc_brand ON mod3_brand_id = brand_id
                WHERE pa.`partid` IN ($partId)
                GROUP BY p.pid ORDER BY pa.partid, num.format";
        }else{
            $sql = "select * from (SELECT p.pid,tx.txt AS '配件分类', pas.`cn_value` AS '位置', CONCAT(factory , ':', display) AS '号码',GROUP_CONCAT(DISTINCT CONCAT(brand_name, mod1_name)) AS '适用车系', COUNT(*) AS '适用车型数量'  FROM `ypdb`.`yp_product` AS p
                JOIN `$dbName`.`yp_ypc_model3_pro_link` ON p.pid = ympl_pro_id
                JOIN `$dbName`.`yp_number` AS num ON p.pid = num.`pid` AND num.`ismain` = 1
                JOIN `$dbName`.`yp_factory` AS fac ON fac.fid =num.fid
                JOIN `$dbName`.`yp_part` AS pa ON p.partid = pa.`partid`
                JOIN `$dbName`.`yp_lng_des` AS de ON pa.`desid` = de.`desid` AND de.lngid = 1
                JOIN `$dbName`.`yp_lng_text` AS tx ON de.`txtid` = tx.`txtid`
                LEFT JOIN `$dbName`.`yp_para_string_link` pas ON pas.pid = p.`pid`
                LEFT JOIN `$dbName`.`yp_para_label` AS pl ON pl.`labelid` = pas.`labelid` AND pl.name = 'Location'
                JOIN `$dbNameCom`.bc_model3 ON ympl_m3_id = mod3_id
                JOIN `$dbNameCom`.bc_model1 ON mod3_mod1_id = mod1_id
                JOIN `$dbNameCom`.bc_brand ON mod3_brand_id = brand_id
                WHERE pa.`partid` IN ($partId)
                GROUP BY p.pid ORDER BY pa.partid, num.format) as tt left join (
                SELECT a.* FROM (SELECT @rownum:=0) r, (
                SELECT num.pid,CONCAT(factory , ':', display) as '其它号码'
                FROM  ypdb.`yp_number` AS num JOIN `ypdb`.`yp_factory` AS fac ON fac.fid =num.fid
                WHERE  fac.`factory` IN ($factory) ORDER BY FIELD(fac.`factory`,$factory)
                ) AS a  GROUP BY pid
                ) as dd on tt.pid=dd.pid";
        }
        $model = new BaseDb(mvc::$cfg['DB']['YP']);
        $model->BaseDb->setAttr(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
        $model->BaseDb->setAttr(PDO::ATTR_DEFAULT_FETCH_MODE, true);
        $result = $model->BaseDb->Query($sql);
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $sheet->getColumnDimension('A')->setWidth(20);
        $sheet->getColumnDimension('B')->setWidth(30);
        $sheet->getColumnDimension('C')->setWidth(25);
        $sheet->getColumnDimension('D')->setWidth(45);
        $sheet->getColumnDimension('E')->setWidth(15);
        $sheet->setCellValue('A1', '配件分类')
            ->setCellValue('B1', '位置')
            ->setCellValue('C1', '号码')
            ->setCellValue('D1', '适用车型')
            ->setCellValue('E1', '适用车型数量');
        $i = 1;
        foreach ($result as $value)
        {
            $i++;
            $sheet->setCellValue('A'.$i, $value->配件分类);
            $sheet->setCellValue('B'.$i, str_replace("<br />","  ",$value->位置));
            if(empty($factory)){
                $sheet->setCellValue('C'.$i, $value->号码);
            }else{
                if(!empty($value->其它号码)){
                    $sheet->setCellValue('C'.$i, $value->其它号码);
                }else{
                    $sheet->setCellValue('C'.$i, $value->号码);
                }
            }
            $sheet->setCellValue('D'.$i, $value->适用车系);
            $sheet->setCellValue('E'.$i, $value->适用车型数量);
        }
        $this->downloadExcel($spreadsheet,'宜配产品','Xlsx');
    }

    /**
     * 下载文件
     * @param $newExcel obj \PhpOffice\PhpSpreadsheet;
     * @param $filename string 文件名称
     * @param $format string Xlsx|xls
     * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
     */
    public function downloadExcel($newExcel, $filename, $format)
    {
        // $format只能为 xlsx 或 xls
        if ($format == 'Xlsx') {
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        } elseif ($format == 'Xls') {
            header('Content-Type: application/vnd.ms-excel');
        }

        header("Content-Disposition: attachment;filename="
            . $filename . date('Y-m-d') . '.' . strtolower($format));
        header('Cache-Control: max-age=0');
        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($newExcel, $format);

        $objWriter->save('php://output');
        exit;
    }
}

