<?php
namespace wstmart\admin\model;
use think\Db;
use think\Loader;
/**
 * ============================================================================
 * 商品类
 */
class Goods extends Base{
     /**
      *  上架商品列表
      */
	public function saleByPage(){
		$where = [];
		$where['g.goodsStatus'] = 1;
		$where['g.dataFlag'] = 1;
		$where['g.isSale'] = 1;
		$areaIdPath = input('areaIdPath');
		$goodsCatIdPath = input('goodsCatIdPath');
		$goodsName = input('goodsName');
		$shopName = input('shopName');
		$startDate = input('startDate');
		$endDate = input('endDate');
		if($startDate!='' && $endDate!=''){
			$where['saleTime'] = ['between',[$startDate.' 00:00:00',$endDate.' 23:59:59']];
		}else if($startDate!=''){
			$where['saleTime'] = ['>=',$startDate.' 00:00:00'];
		}else if($endDate!=''){
			$where['saleTime'] = ['<=',$endDate.' 23:59:59'];
		}
		if($areaIdPath !='')$where['areaIdPath'] = ['like',$areaIdPath."%"];
		if($goodsCatIdPath !='')$where['goodsCatIdPath'] = ['like',$goodsCatIdPath."%"];
		if($goodsName != '')$where['goodsName|goodsSn'] = ['like',"%$goodsName%"];
		if($shopName != '')$where['shopName|shopSn'] = ['like',"%$shopName%"];
		// 排序
		$sort = input('sort');
		$order = 'saleTime desc';
		if($sort!=''){
			$sortArr = explode('.',$sort);
			$order = $sortArr[0].' '.$sortArr[1];
		}
		$keyCats = model('GoodsCats')->listKeyAll();
		$rs = $this->alias('g')
		    ->join('__SHOPS__ s','g.shopId=s.shopId','left')
		    ->where($where)
			->field('g.goodsId,g.goodsName,g.goodsSn,g.saleNum,g.shopPrice,g.discountRate,g.shopId,goodsImg,s.shopName,s.phone,goodsCatIdPath,g.createTime,g.saleTime,g.isSale')
			->order($order)
			->paginate(input('limit/d'))->toArray();

		foreach ($rs['Rows'] as $key => $v){
			$rs['Rows'][$key]['verfiycode'] = WSTShopEncrypt($v['shopId']);
			$rs['Rows'][$key]['goodsCatName'] = self::getGoodsCatNames($v['goodsCatIdPath'],$keyCats);
		}
		// dump($rs);die;
		return $rs;
	}
	 /**
      *  下架商品列表
      */
	public function shelvesByPage(){
		$where = [];
		$where['g.dataFlag'] = 1;
		$where['g.isSale'] = 0;
		$areaIdPath = input('areaIdPath');
		$goodsCatIdPath = input('goodsCatIdPath');
		$goodsName = input('goodsName');
		$shopName = input('shopName');
		$startDate = input('startDate');
		$endDate = input('endDate');
		if($startDate!='' && $endDate!=''){
			$where['saleTime'] = ['between',[$startDate.' 00:00:00',$endDate.' 23:59:59']];
		}else if($startDate!=''){
			$where['saleTime'] = ['>=',$startDate.' 00:00:00'];
		}else if($endDate!=''){
			$where['saleTime'] = ['<=',$endDate.' 23:59:59'];
		}
		if($areaIdPath !='')$where['areaIdPath'] = ['like',$areaIdPath."%"];
		if($goodsCatIdPath !='')$where['goodsCatIdPath'] = ['like',$goodsCatIdPath."%"];
		if($goodsName != '')$where['goodsName|goodsSn'] = ['like',"%$goodsName%"];
		if($shopName != '')$where['shopName|shopSn'] = ['like',"%$shopName%"];
		// 排序
		$sort = input('sort');
		$order = 'saleTime desc';
		if($sort!=''){
			$sortArr = explode('.',$sort);
			$order = $sortArr[0].' '.$sortArr[1];
		}
		$keyCats = model('GoodsCats')->listKeyAll();
		$rs = $this->alias('g')
		    ->join('__SHOPS__ s','g.shopId=s.shopId','left')
		    ->where($where)
			->field('goodsId,goodsName,goodsSn,saleNum,shopPrice,g.shopId,goodsImg,s.shopName,goodsCatIdPath,g.createTime,saleTime,isSale')
			->order($order)
			->paginate(input('limit/d'))->toArray();
		foreach ($rs['Rows'] as $key => $v){
			$rs['Rows'][$key]['verfiycode'] = WSTShopEncrypt($v['shopId']);
			$rs['Rows'][$key]['goodsCatName'] = self::getGoodsCatNames($v['goodsCatIdPath'],$keyCats);
		}
		return $rs;
	}
    public function getGoodsCatNames($goodsCatPath, $keyCats){
		$catIds = explode("_",$goodsCatPath);
		$catNames = array();
		for($i=0,$k=count($catIds);$i<$k;$i++){
			if($catIds[$i]=='')continue;
			if(isset($keyCats[$catIds[$i]]))$catNames[] = $keyCats[$catIds[$i]];
		}
		return implode("→",$catNames);
	}
	/**
	 * 审核中的商品
	 */
    public function auditByPage(){
    	$where['goodsStatus'] = 0;
		$where['g.dataFlag'] = 1;
		$where['isSale'] = 1;
		$areaIdPath = input('areaIdPath');
		$goodsCatIdPath = input('goodsCatIdPath');
		$goodsName = input('goodsName');
		$shopName = input('shopName');
		if($areaIdPath !='')$where['areaIdPath'] = ['like',$areaIdPath."%"];
		if($goodsCatIdPath !='')$where['goodsCatIdPath'] = ['like',$goodsCatIdPath."%"];
		if($goodsName != '')$where['goodsName|goodsSn'] = ['like',"%$goodsName%"];
		if($shopName != '')$where['shopName|shopSn'] = ['like',"%$shopName%"];
		// 排序
		$sort = input('sort');
		$order = 'saleTime desc';
		if($sort!=''){
			$sortArr = explode('.',$sort);
			$order = $sortArr[0].' '.$sortArr[1];
		}
		$keyCats = model('GoodsCats')->listKeyAll();
		$rs = $this->alias('g')->join('__SHOPS__ s','g.shopId=s.shopId','left')
		    ->where($where)
			->field('g.goodsId,g.discountRate,g.goodsName,g.goodsSn,g.saleNum,g.shopPrice,g.goodsImg,s.shopName,s.shopId,s.phone,goodsCatIdPath')
			->order($order)
			->paginate(input('limit/d'))->toArray();
        foreach ($rs['Rows'] as $key => $v){
			$rs['Rows'][$key]['verfiycode'] =  WSTShopEncrypt($v['shopId']);
			$rs['Rows'][$key]['goodsCatName'] = self::getGoodsCatNames($v['goodsCatIdPath'],$keyCats);
		}
		return $rs;
	}
	/**
	 * 违规的商品 
	 */
	public function illegalByPage(){
		$where['goodsStatus'] = -1;
		$where['g.dataFlag'] = 1;
		$where['isSale'] = 1;
		$areaIdPath = input('areaIdPath');
		$goodsCatIdPath = input('goodsCatIdPath');
		$goodsName = input('goodsName');
		$shopName = input('shopName');
		$startDate = input('startDate');
		$endDate = input('endDate');
		if($startDate!='' && $endDate!=''){
			$where['saleTime'] = ['between',[$startDate.' 00:00:00',$endDate.' 23:59:59']];
		}else if($startDate!=''){
			$where['saleTime'] = ['>=',$startDate.' 00:00:00'];
		}else if($endDate!=''){
			$where['saleTime'] = ['<=',$endDate.' 23:59:59'];
		}
		if($areaIdPath !='')$where['areaIdPath'] = ['like',$areaIdPath."%"];
		if($goodsCatIdPath !='')$where['goodsCatIdPath'] = ['like',$goodsCatIdPath."%"];
		if($goodsName != '')$where['goodsName|goodsSn'] = ['like',"%$goodsName%"];
		if($shopName != '')$where['shopName|shopSn'] = ['like',"%$shopName%"];
		// 排序
		$sort = input('sort');
		$order = 'saleTime desc';
		if($sort!=''){
			$sortArr = explode('.',$sort);
			$order = $sortArr[0].' '.$sortArr[1];
		}
		$keyCats = model('GoodsCats')->listKeyAll();
		$rs = $this->alias('g')->join('__SHOPS__ s','g.shopId=s.shopId','left')
		    ->where($where)
			->field('goodsId,goodsName,goodsSn,goodsImg,s.shopName,s.shopId,illegalRemarks,goodsCatIdPath')
			->order($order)
			->paginate(input('limit/d'))->toArray();
		foreach ($rs['Rows'] as $key => $v){
			$rs['Rows'][$key]['verfiycode'] = WSTShopEncrypt($v['shopId']);
			$rs['Rows'][$key]['goodsCatName'] = self::getGoodsCatNames($v['goodsCatIdPath'],$keyCats);
		}
		return $rs;
	}
	
	/**
	 * 删除商品
	 */
	public function del(){
	    $id = input('post.id/d');
		$data = [];
		$data['dataFlag'] = -1;
		$data['isSale'] = 0;
		Db::startTrans();
		try{
		    $result = $this->update($data,['goodsId'=>$id]);
	        if(false !== $result){
	        	hook('afterChangeGoodsStatus',['goodsId'=>$id]);
	        	Db::name('carts')->where('goodsId',$id)->delete();
	        	WSTUnuseImage('goods','goodsImg',$id);
		        WSTUnuseImage('goods','gallery',$id);
		        Db::commit();
		        //标记删除购物车
	        	return WSTReturn("删除成功", 1);
	        }
		}catch (\Exception $e) {
            Db::rollback();errLog($e);
        }
        return WSTReturn('删除失败',-1);
	}
	/**
	  * 批量删除商品
	  */
	 public function batchDel(){
	 	$shopId = (int)session('WST_USER.shopId');
	   	$ids = input('post.ids/a');
	   	Db::startTrans();
		try{
		   	$rs = $this->where(['goodsId'=>['in',$ids],
		   						'shopId'=>$shopId])->setField(['dataFlag'=>-1,'isSale'=>0]);
			if(false !== $rs){
				Db::name('carts')->where(['goodsId'=>['in',$ids]])->delete();
				//标记删除购物车
			    foreach ($ids as $v){
					WSTUnuseImage('goods','goodsImg',(int)$v);
			        WSTUnuseImage('goods','gallery',(int)$v);
			        hook('afterChangeGoodsStatus',['goodsId'=>$v]);
				}
				Db::commit();
	        	return WSTReturn("删除成功", 1);
	        }
		}catch (\Exception $e) {
            Db::rollback();errLog($e);
        }
        return WSTReturn('删除失败',-1);
	 }

	/**
	* 设置商品违规状态
	*/
	public function illegal($goodsId=0,$from=0){
		$illegalRemarks = input('post.illegalRemarks');		
		$id = ($goodsId==0)?(int)input('post.id'):$goodsId;
		if($illegalRemarks==''){
			return WSTReturn("请输入原因");
		}else if($from == 1){
			$id = ($goodsId==0)?(int)input('post.id'):$goodsId;
			$illegalRemarks = '该商品因被用户举报,现已下架';
		}
		//判断商品状态
		$rs = $this->alias('g')->join('__SHOPS__ s','g.shopId=s.shopId','left')->where('goodsId',$id)
		           ->field('s.userId,g.goodsName,g.goodsSn,g.goodsStatus,g.goodsId,g.shopId')->find();
		if((int)$rs['goodsId']==0)return WSTReturn("无效的商品");
		if((int)$rs['goodsStatus']<0)return WSTReturn("操作失败,商品状态已发生改变,请刷新后再尝试");
		Db::startTrans();
		try{
			$res = $this->where('goodsId',$id)->setField(['goodsStatus'=>-1,'illegalRemarks'=>$illegalRemarks]);
			if($res!==false){

				Db::name('carts')->where(['goodsId'=>$id])->delete();
				//发送一条商家信息
				$shopId = $rs["shopId"];
				$tpl = WSTMsgTemplates('GOODS_REJECT');
		        if( $tpl['tplContent']!='' && $tpl['status']=='1'){
		            $find = ['${GOODS}','${GOODS_SN}','${TIME}','${REASON}'];
		            $replace = [$rs['goodsName'],$rs['goodsSn'],date('Y-m-d H:i:s'),$illegalRemarks];
		            
		            $msg = array();
		            $msg["shopId"] = $shopId;
		            $msg["tplCode"] = $tpl["tplCode"];
		            $msg["msgType"] = 1;
		            $msg["content"] = str_replace($find,$replace,$tpl['tplContent']);
		            $msg["msgJson"] = ['from'=>2,'dataId'=>$id];
		            model("common/MessageQueues")->add($msg);
		        } 
		        if((int)WSTConf('CONF.wxenabled')==1){
					$params = [];
					$params['GOODS'] = $rs['goodsName'];
					$params['GOODS_SN'] = $rs['goodsSn'];
					$params['TIME'] = date('Y-m-d H:i:s'); 
					$params['REASON'] = $illegalRemarks;          
					
					$msg = array();
					$tplCode = "WX_GOODS_REJECT";
					$msg["shopId"] = $shopId;
		            $msg["tplCode"] = $tplCode;
		            $msg["msgType"] = 4;
		            $msg["paramJson"] = ['CODE'=>$tplCode,'params'=>$params] ;
		            $msg["msgJson"] = "";
		            model("common/MessageQueues")->add($msg);
				}
				hook('afterChangeGoodsStatus',['goodsId'=>$id]);
				Db::commit();
				return WSTReturn('操作成功',1);
			}
		}catch (\Exception $e) {
            Db::rollback();errLog($e);
        }
        return WSTReturn('操作失败',-1);
	}
	/**
	* 批量商品审核不通过
	*/
	public function batchIllegal(){
		$ids = input('ids');
		if(empty($ids))return WSTReturn('请选择商品');
		$ids = explode(',' , $ids);
		foreach($ids as $k=>$v){
			$rs = $this->illegal($v);
		}
		return WSTReturn('操作成功',1);

	}
   /**
	* 通过商品审核通过
	*/
	public function allow($goodsId=0){	
		$id = ($goodsId==0)?(int)input('post.id'):$goodsId;
		//判断商品状态
		$rs = $this->alias('g')->join('__SHOPS__ s','g.shopId=s.shopId','left')->where('goodsId',$id)
		           ->field('s.userId,g.goodsName,g.goodsSn,g.goodsStatus,g.goodsId,g.shopId')->find();
		if((int)$rs['goodsId']==0)return WSTReturn("无效的商品");
		if((int)$rs['goodsStatus']==1)return WSTReturn("操作失败,商品状态已发生改变,请刷新后再尝试");
		Db::startTrans();
		try{
			$res = $this->setField(['goodsId'=>$id,'goodsStatus'=>1]);
			if($res!==false){
				//发送一条商家信息
				$shopId = $rs["shopId"];
				$tpl = WSTMsgTemplates('GOODS_ALLOW');
		        if( $tpl['tplContent']!='' && $tpl['status']=='1'){
		            $find = ['${GOODS}','${GOODS_SN}','${TIME}'];
		            $replace = [$rs['goodsName'],$rs['goodsSn'],date('Y-m-d H:i:s')];
		            
		            $msg = array();
		            $msg["shopId"] = $shopId;
		            $msg["tplCode"] = $tpl["tplCode"];
		            $msg["msgType"] = 1;
		            $msg["content"] = str_replace($find,$replace,$tpl['tplContent']) ;
		            $msg["msgJson"] = ['from'=>2,'dataId'=>$id];
		            model("common/MessageQueues")->add($msg);
		        } 
		        if((int)WSTConf('CONF.wxenabled')==1){
					$params = [];
					$params['GOODS'] = $rs['goodsName'];
					$params['GOODS_SN'] = $rs['goodsSn'];
					$params['TIME'] = date('Y-m-d H:i:s');           
					
					$msg = array();
					$tplCode = "WX_GOODS_ALLOW";
					$msg["shopId"] = $shopId;
		            $msg["tplCode"] = $tplCode;
		            $msg["msgType"] = 4;
		            $msg["paramJson"] = ['CODE'=>$tplCode,'params'=>$params] ;
		            $msg["msgJson"] = "";
		            model("common/MessageQueues")->add($msg);
				}
				hook('afterChangeGoodsStatus',['goodsId'=>$id]);
				Db::commit();
				return WSTReturn('操作成功',1);
			}
		}catch (\Exception $e) {
            Db::rollback();errLog($e);
        }
        return WSTReturn('操作失败',-1);
	}
	/**
	* 批量商品审核
	*/
	public function batchAllow(){
		$ids = input('ids');
		if(empty($ids))return WSTReturn('请选择商品');
		$ids = explode(',' , $ids);
		$count = 0;// 记录上架不成功的商品数
		foreach($ids as $k=>$v){
			$rs = $this->allow($v);
			if($rs['status']==-1){
				++$count;
			}
		}
		if($count==0)return WSTReturn('操作成功',1);
		$msg = "成功上架".(count($ids)-$count)."件商品,其中{$count}件商品上架失败.";
		return WSTReturn($msg,1);

	}


	/**
	 * 查询商品
	 */
	public function searchQuery(){
		$goodsCatatId = (int)input('post.goodsCatId');
		if($goodsCatatId<=0)return [];
		$goodsCatIds = WSTGoodsCatPath($goodsCatatId);
		$key = input('post.key');
		$where = [];
		$where['g.dataFlag'] = 1;
		$where['g.isSale'] = 1;
		$where['g.goodsStatus'] = 1;
		$where['goodsCatIdPath'] = ['like',implode('_',$goodsCatIds).'_%'];
		if($key!='')$where['goodsName|shopName'] = ['like','%'.$key.'%'];
		return $this->alias('g')->join('__SHOPS__ s','g.shopId=s.shopId','inner')
		     ->where($where)->field('g.goodsName,s.shopName,g.goodsId')->limit(50)->select();
	}

	/**
	 * 根据下架指定店铺下的所有商品
	 */
	public function unsaleByshopId($shopId){
        //下架商品
		$data = [];
		$data['isSale'] = 0;
		$goodsIds = [];
		$goods = $this->where(['shopId'=>$shopId,'isSale'=>1])->field('goodsId')->select();
		if(!empty($goods)){
			foreach ($goods as $key => $v) {
				$goodsIds[] = $v['goodsId'];
			}
		}
		$result = $this->where(['shopId'=>$shopId])->update($data);
		if(false !== $result){
		    //删除推荐商品,删除购物车里的商品
		    if(count($goodsIds)>0){
		    	//执行钩子事件
		    	foreach ($goodsIds as $key => $v) {
		    		hook('afterChangeGoodsStatus',['goodsId'=>$v]);
		    	}
		    	Db::name('recommends')->where(['dataSrc'=>0,'dataId'=>['in',$goodsIds]])->delete();
		        Db::name('carts')->where(['goodsId'=>['in',$goodsIds]])->delete();
		    }
		    Db::commit();
			return WSTReturn('操作成功',1);
		}
        return WSTReturn('删除失败',-1);
    }

    /**
	 * 根据下架指定店铺下的所有商品
	 */
	public function delByshopId($shopId){
        //下架商品
		$data = [];
		$data['isSale'] = 0;
		$data['dataFlag'] = -1;
		$goodsIds = [];
		$goods = $this->where(['shopId'=>$shopId])->field('goodsId')->select();
		if(!empty($goods)){
			foreach ($goods as $key => $v) {
				$goodsIds[] = $v['goodsId'];
			}
		}
		$result = $this->where(['shopId'=>$shopId])->update($data);
		if(false !== $result){
		    //删除推荐商品,删除购物车里的商品
		    if(count($goodsIds)>0){
		    	//执行钩子事件
		    	foreach ($goodsIds as $key => $v) {
		    		hook('afterChangeGoodsStatus',['goodsId'=>$v]);
		    	}
		    	Db::name('recommends')->where(['dataSrc'=>0,'dataId'=>['in',$goodsIds]])->delete();
		        Db::name('carts')->where(['goodsId'=>['in',$goodsIds]])->delete();
		    }
		    Db::commit();
			return WSTReturn('操作成功',1);
		}
        return WSTReturn('删除失败',-1);
    }

    /**
     * 商品ECT支付状态
     */
    public function goodsEct(){
		$goodsId = input('post.id/d');
    	$pay = Db::name('goods_pay')->where(['goodsId'=>$goodsId])->select();//查询支付方式表是否已有该商品
		if($pay){
			return WSTReturn('此商品已添加ECT支付');
		}
		$arr =[];
    	$arr['goodsId'] = $goodsId;
    	$arr['ectPay'] = 1;
    	// dump($arr);die;
    	$result = Db::name('goods_pay')->insert($arr);
    	if($result){
    		return WSTReturn('添加成功',1);
    	}else{
    		return WSTReturn('添加失败');
    	}
    }

    //上架商品导出
    public function toExportSale(){
    	$name="上架商品列表";
    	$where = [];
		$where['g.goodsStatus'] = 1;
		$where['g.dataFlag'] = 1;
		$where['g.isSale'] = 1;
		$areaIdPath = input('areaIdPath');
		$goodsCatIdPath = input('goodsCatIdPath');
		$goodsName = input('goodsName');
		$shopName = input('shopName');
		$startDate = input('startDate');
		$endDate = input('endDate');
		if($startDate!='' && $endDate!=''){
			$where['saleTime'] = ['between',[$startDate.' 00:00:00',$endDate.' 23:59:59']];
		}else if($startDate!=''){
			$where['saleTime'] = ['>=',$startDate.' 00:00:00'];
		}else if($endDate!=''){
			$where['saleTime'] = ['<=',$endDate.' 23:59:59'];
		}
		if($areaIdPath !='')$where['areaIdPath'] = ['like',$areaIdPath."%"];
		if($goodsCatIdPath !='')$where['goodsCatIdPath'] = ['like',$goodsCatIdPath."%"];
		if($goodsName != '')$where['goodsName|goodsSn'] = ['like',"%$goodsName%"];
		if($shopName != '')$where['shopName|shopSn'] = ['like',"%$shopName%"];
		// 排序
		$sort = input('sort');
		$order = 'saleTime desc';
		if($sort!=''){
			$sortArr = explode('.',$sort);
			$order = $sortArr[0].' '.$sortArr[1];
		}
		$keyCats = model('GoodsCats')->listKeyAll();
		$page = $this->alias('g')
		    ->join('__SHOPS__ s','g.shopId=s.shopId','left')
		    ->where($where)
			->field('goodsId,goodsName,goodsSn,saleNum,shopPrice,g.shopId,goodsImg,s.shopName,goodsCatIdPath,g.createTime,saleTime,isSale')
			->order($order)
			->select();
		foreach ($page as $key => $v){
			$page[$key]['verfiycode'] = WSTShopEncrypt($v['shopId']);
			$page[$key]['goodsCatName'] = self::getGoodsCatNames($v['goodsCatIdPath'],$keyCats);
		}
    	Loader::import('phpexcel.PHPExcel.IOFactory');
        $objPHPExcel = new \PHPExcel();
        // 设置excel文档的属性
        $objPHPExcel->getProperties()->setCreator("heyuanhui")//创建人
        ->setLastModifiedBy("heyuanhui")//最后修改人
        ->setTitle($name)//标题
        ->setSubject($name)//题目
        ->setDescription($name)//描述
        ->setKeywords("订单")//关键字
        ->setCategory("Test result file");//种类
    
        // 开始操作excel表
        $objPHPExcel->setActiveSheetIndex(0);
        // 设置工作薄名称
        $objPHPExcel->getActiveSheet()->setTitle(iconv('gbk', 'utf-8', 'Sheet'));
        // 设置默认字体和大小
        $objPHPExcel->getDefaultStyle()->getFont()->setName(iconv('gbk', 'utf-8', ''));
        $objPHPExcel->getDefaultStyle()->getFont()->setSize(11);
        $styleArray = array(
                'font' => array(
                        'bold' => true,
                        'color'=>array(
                                'argb' => 'ffffffff',
                        )
                ),
                'borders' => array (
                        'outline' => array (
                                'style' => \PHPExcel_Style_Border::BORDER_THIN,  //设置border样式
                                'color' => array ('argb' => 'FF000000'),     //设置border颜色
                        )
                )
        );
        //设置宽
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(25);
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(25);
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);
        $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(25);
        $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(40);
        $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(25);
        $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(8);
        $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(8);
        $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(25);
        $objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(25);
        $objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(25);
        $objPHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(25);
        $objPHPExcel->getActiveSheet()->getStyle('A1:N1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle('A1:N1')->getFill()->getStartColor()->setARGB('333399');
        
        $objPHPExcel->getActiveSheet()
                                ->setCellValue('A1', '商品ID')
                                ->setCellValue('B1', '商品名称')
                                ->setCellValue('C1', '商品编号')
                                ->setCellValue('D1', '价格')
                                ->setCellValue('E1', '所属店铺')
                                ->setCellValue('F1', '申请上架时间')
                                ->setCellValue('G1', '审核通过时间')
                                ->setCellValue('H1', '所属分类')
                                ->setCellValue('I1', '销量')
                                ->setCellValue('J1', '状态');
        $objPHPExcel->getActiveSheet()->getStyle('A1:J1')->applyFromArray($styleArray);
    
        for ($row = 0; $row < count($page); $row++){
            $i = $row+2;
            $objPHPExcel->getActiveSheet()
                                ->setCellValue('A'.$i, $page[$row]['goodsId'])
                                ->setCellValue('B'.$i, $page[$row]['goodsName'])
                                ->setCellValue('C'.$i, chunk_split($page[$row]['goodsSn']))
                                ->setCellValue('D'.$i, $page[$row]['shopPrice'])
                                ->setCellValue('E'.$i, $page[$row]['shopName'])
                                ->setCellValue('F'.$i, $page[$row]['saleTime'])
                                ->setCellValue('G'.$i, $page[$row]['createTime'])
                                ->setCellValue('H'.$i, $page[$row]['goodsCatName'])
                                ->setCellValue('I'.$i, $page[$row]['saleNum'])
                                ->setCellValue('J'.$i, $page[$row]['isSale']);

        }
        //输出EXCEL格式
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        // 从浏览器直接输出$filename
        header('Content-Type:application/csv;charset=UTF-8');
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/vnd.ms-excel;");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");
        header('Content-Disposition: attachment;filename="'.$name.'.xls"');
        header("Content-Transfer-Encoding:binary");
        $objWriter->save('php://output');
    }
}