You've already forked qlg.tsgz.moe
							
							
		
			
				
	
	
		
			497 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			497 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php 
 | |
| namespace wstmart\admin\model;
 | |
| use think\Db;
 | |
| use think\Loader;
 | |
| /**
 | |
|  * ============================================================================
 | |
|  * 报表业务处理
 | |
|  */
 | |
| class Reports extends Base{   
 | |
|     /**
 | |
|      * 获取商品销售统计
 | |
|      */
 | |
|     public function topSaleGoodsByPage(){
 | |
|         $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|         $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|         $startTime = strtotime(input('startDate'));
 | |
|         $endTime =strtotime(input('endDate'));
 | |
|         $goodsCatIdPath = input('goodsCatIdPath');
 | |
|         $shopName = input('post.shopName');
 | |
|         $goodsName = input('post.goodsName');
 | |
|         $where='(payType=0 or (payType=1 and isPay=1)) and o.dataFlag=1';
 | |
|         if($shopName)$where.=' AND shopName like "%'.$shopName.'%"';
 | |
|         if($goodsName)$where.=' AND g.goodsName like "%'.$goodsName.'%"';
 | |
|         if($goodsCatIdPath !='')$where.=' AND g.goodsCatIdPath like "%'.$goodsCatIdPath.'%"';
 | |
|         $rs= Db::field('og.goodsId,g.goodsName,goodsSn,s.shopId,shopName,sum(og.goodsNum) goodsNum,og.goodsImg,count(og.goodsId)orderNum,pageNum,goodsCatIdPath')
 | |
|             ->name('order_goods')->alias('og')
 | |
|             ->join('(select p.*,count(p.goodsId) pageNum from __PAGE_VIEW__ p group by p.goodsId ) con','con.goodsId=og.goodsId','left')
 | |
|             ->join('__ORDERS__ o','og.orderId=o.orderId','left')
 | |
|             ->join('__GOODS__ g','og.goodsId=g.goodsId','left')
 | |
|             ->join('__SHOPS__ s','g.shopId=s.shopId','left')
 | |
|             ->order('goodsNum desc')
 | |
|             ->whereTime('o.createTime','between',[$start,$end])
 | |
|             ->where($where)
 | |
|             ->group('og.goodsId,g.goodsName,goodsSn,s.shopId,shopName,og.goodsImg')
 | |
|             ->paginate(input('limit/d'))->toArray();
 | |
|         return $rs;
 | |
|     }
 | |
|     /**
 | |
|      * 获取店铺销售统计
 | |
|      */
 | |
|     public function topShopSalesByPage(){
 | |
|         $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|         $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|         $shopName = input('shopName');
 | |
|         $where='(payType=0 or (payType=1 and isPay=1)) and o.dataFlag=1';
 | |
|         if($shopName)$where.=' AND shopName like "%'.$shopName.'%"';
 | |
|         $rs = Db::field('s.shopId,s.shopImg,s.shopName,sum(o.totalMoney) totalMoney,count(o.shopId) orderNum,s.userId')
 | |
|                  ->name('shops')->alias('s')
 | |
|                  ->join('__ORDERS__ o','s.shopId=o.shopId')
 | |
|                  ->order('totalMoney desc,orderNum desc')
 | |
|                  ->whereTime('o.createTime','between',[$start,$end])
 | |
|                  ->where($where)
 | |
|                  ->group('o.shopId')
 | |
|                  ->paginate(input('limit/d'))->toArray();
 | |
|         foreach($rs['Rows'] as $k=>$v){
 | |
|             $onLineArr = Db::name('orders')
 | |
|                  ->whereTime('createTime','between',[$start,$end])
 | |
|                  ->field('sum(totalMoney) totalMoney,sum(realTotalMoney) realTotalMoney')
 | |
|                  ->where('payType=1 and isPay=1 and dataFlag=1 and orderStatus=2')
 | |
|                  ->where(['shopId'=>$v['shopId']])
 | |
|                  ->find();
 | |
|             $rs['Rows'][$k]['onLinePayMoney'] = (float)$onLineArr['totalMoney'];// 在线支付总金额
 | |
|             $rs['Rows'][$k]['onLinePayTrueMoney'] = (float)$onLineArr['realTotalMoney'];// 在线支付实际金额
 | |
|             $rs['Rows'][$k]['offLinePayMoney'] = (float)Db::name('orders')
 | |
|                  ->whereTime('createTime','between',[$start,$end])
 | |
|                  ->where('payType=0 and dataFlag=1 and orderStatus=2')
 | |
|                  ->where(['shopId'=>$v['shopId']])
 | |
|                  ->value('sum(totalMoney)');;// 货到付款金额
 | |
|              $rs['Rows'][$k]['ectNum']=db('user_ect_log')->where(['userId'=>$v['userId'],'ectType'=>12])->value('sum(ectNum)ectNum');
 | |
|         }
 | |
|         return $rs;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 获取销售额
 | |
|      */
 | |
|     public function statSales(){
 | |
|         $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|         $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|         $payType = (int)input('payType',-1);
 | |
|         $rs = Db::field('left(createTime,10) createTime,orderSrc,sum(totalMoney) totalMoney')->name('orders')->whereTime('createTime','between',[$start,$end])
 | |
|                 ->where('((payType=0 or (payType=1 and isPay=1)) and dataFlag=1) '.(in_array($payType,[0,1])?" and payType=".$payType:''))
 | |
|                 ->order('createTime asc')
 | |
|                 ->group('left(createTime,10),orderSrc')->select();
 | |
|         $rdata = [];
 | |
|         if(count($rs)>0){
 | |
|             $days = [];
 | |
|             $payTypes = [0,1,2,3,4];
 | |
|             $tmp = [];
 | |
|             foreach($rs as $key => $v){
 | |
|                 if(!in_array($v['createTime'],$days))$days[] = $v['createTime'];
 | |
|                 $tmp[$v['orderSrc']."_".$v['createTime']] = $v['totalMoney'];
 | |
|             }
 | |
|             $rdata['map'] = ['p0'=>0,'p1'=>0,'p2'=>0,'p3'=>0,'p4'=>0];
 | |
|             foreach($days as $v){
 | |
|                 $total = 0;
 | |
|                 foreach($payTypes as $p){
 | |
|                     $pv = isset($tmp[$p."_".$v])?$tmp[$p."_".$v]:0;
 | |
|                     $rdata['p'.$p][] = (float)$pv;
 | |
|                     $total = $total + (float)$pv;
 | |
|                     $rdata['map']['p'.$p] = $rdata['map']['p'.$p] + (float)$pv;
 | |
|                 }
 | |
|                 $rdata['total'][] = $total;
 | |
|             }
 | |
|             $rdata['days'] = $days;
 | |
|         }
 | |
|         return WSTReturn('',1,$rdata);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 获取订单统计
 | |
|      */
 | |
|     public function statOrders(){
 | |
|         $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|         $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|         $payType = (int)input('payType',-1);
 | |
|         $rs = Db::field('left(createTime,10) createTime,orderSrc,count(orderId) orderNum')->name('orders')->whereTime('createTime','between',[$start,$end])
 | |
|                 ->where('((payType=0 or (payType=1 and isPay=1)) and dataFlag=1) '.(in_array($payType,[0,1])?" and payType=".$payType:''))
 | |
|                 ->order('createTime asc')
 | |
|                 ->group('left(createTime,10),orderSrc')->select();
 | |
|         $rdata = [];
 | |
|         if(count($rs)>0){
 | |
|             $days = [];
 | |
|             $payTypes = [0,1,2,3,4];
 | |
|             $tmp = [];
 | |
|             foreach($rs as $key => $v){
 | |
|                 if(!in_array($v['createTime'],$days))$days[] = $v['createTime'];
 | |
|                 $tmp[$v['orderSrc']."_".$v['createTime']] = $v['orderNum'];
 | |
|             }
 | |
|             $rdata['map'] = ['p0'=>0,'p1'=>0,'p2'=>0,'p3'=>0,'p4'=>0];
 | |
|             foreach($days as $v){
 | |
|                 $total = 0;
 | |
|                 foreach($payTypes as $p){
 | |
|                     $pv = isset($tmp[$p."_".$v])?$tmp[$p."_".$v]:0;
 | |
|                     $rdata['p'.$p][] = (float)$pv;
 | |
|                     $total = $total + (float)$pv;
 | |
|                     $rdata['map']['p'.$p] = $rdata['map']['p'.$p] + (float)$pv;
 | |
|                 }
 | |
|                 $rdata['total'][] = $total;
 | |
|             }
 | |
|             $rdata['days'] = $days;
 | |
|         }
 | |
|         return WSTReturn('',1,$rdata);
 | |
|     }
 | |
|     /*首页获取订单数量*/
 | |
|     public function getOrders(){
 | |
|         $data = cache('orderData');
 | |
|         if(empty($data)){
 | |
|             $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|             $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|             $payType = -1;
 | |
|             $rs = Db::field('left(createTime,10) createTime,orderSrc,count(orderId) orderNum')->name('orders')->whereTime('createTime','between',[$start,$end])
 | |
|                     ->where('((payType=0 or (payType=1 and isPay=1)) and dataFlag=1) '.(in_array($payType,[0,1])?" and payType=".$payType:''))
 | |
|                     ->order('createTime asc')
 | |
|                     ->group('left(createTime,10),orderSrc')->select();
 | |
|             $rdata = [];
 | |
|          if(count($rs)>0){
 | |
|             $days = [];
 | |
|             $tmp = [];
 | |
|             $payTypes = [0,1,2,3,4];
 | |
|             foreach($rs as $key => $v){
 | |
|                 if(!in_array($v['createTime'],$days))$days[] = $v['createTime'];
 | |
|                 $tmp[$v['orderSrc']."_".$v['createTime']] = $v['orderNum'];
 | |
|             }
 | |
|             foreach($days as $v){
 | |
|                  $total = 0;
 | |
|                 foreach($payTypes as $p){
 | |
|                     $pv = isset($tmp[$p."_".$v])?$tmp[$p."_".$v]:0;
 | |
|                     $total = $total + (float)$pv;
 | |
|                 }
 | |
|                 $rdata['total'][] = $total;
 | |
|             }
 | |
|             $rdata['days'] = $days;
 | |
|             cache('orderData',$rdata,7200);
 | |
|           }
 | |
|         }else{
 | |
|             $rdata = cache('orderData');
 | |
|         }
 | |
|        return WSTReturn('',1,$rdata);
 | |
|        }
 | |
|     /**
 | |
|      * 获取新增用户
 | |
|      */
 | |
|     public function statNewUser(){
 | |
|         $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|         $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|         $urs = Db::field('left(createTime,10) createTime,count(userId) userNum')
 | |
|                 ->name('users')
 | |
|                 ->whereTime('createTime','between',[$start,$end])
 | |
|                 ->where(['dataFlag'=>1,'userType'=>0])
 | |
|                 ->order('createTime asc')
 | |
|                 ->group('left(createTime,10)')
 | |
|                 ->select();
 | |
|         $srs = Db::field('left(createTime,10) createTime,count(shopId) userNum')
 | |
|                 ->name('shops')
 | |
|                 ->whereTime('createTime','between',[$start,$end])
 | |
|                 ->where(['dataFlag'=>1])
 | |
|                 ->order('createTime asc')
 | |
|                 ->group('left(createTime,10)')
 | |
|                 ->select();
 | |
|         $rdata = [];
 | |
|         $days = [];
 | |
|         $tmp = [];
 | |
|         if(count($urs)>0){
 | |
|             foreach($urs as $key => $v){
 | |
|                 if(!in_array($v['createTime'],$days))$days[] = $v['createTime'];
 | |
|                 $tmp["0_".$v['createTime']] = $v['userNum'];
 | |
|             }
 | |
|         }
 | |
|         if(count($srs)>0){
 | |
|             foreach($srs as $key => $v){
 | |
|                 if(!in_array($v['createTime'],$days))$days[] = $v['createTime'];
 | |
|                 $tmp["1_".$v['createTime']] = $v['userNum'];
 | |
|             }
 | |
|         }
 | |
|         sort($days);
 | |
|         foreach($days as $v){
 | |
|             $rdata['u0'][] =  isset($tmp['0_'.$v])?$tmp['0_'.$v]:0;
 | |
|             $rdata['u1'][] =  isset($tmp['1_'.$v])?$tmp['1_'.$v]:0;
 | |
|         }
 | |
|         $rdata['days'] = $days;
 | |
|         return WSTReturn('',1,$rdata);
 | |
|     }
 | |
|     /**
 | |
|      * 会员登录统计
 | |
|      */
 | |
|     public function statUserLogin(){
 | |
|         $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|         $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|         $prefix = config('database.prefix');
 | |
|         $sql ='select createTime,userType,count(userId) userNum from ( 
 | |
|              SELECT left(loginTime,10) createTime,`userType`,u.userId
 | |
|                 FROM `'.$prefix.'users` `u` INNER JOIN `'.$prefix.'log_user_logins` `lg` ON `u`.`userId`=`lg`.`userId` 
 | |
|                 WHERE  `loginTime` BETWEEN "'.$start.'" AND "'.$end.'"  AND (  dataFlag=1 )
 | |
|                 GROUP BY left(loginTime,10),userType,lg.userId
 | |
|               ) a GROUP BY createTime, userType ORDER BY createTime asc ';
 | |
|         $rs = Db::query($sql);  
 | |
|         $rdata = [];
 | |
|         if(count($rs)>0){
 | |
|             $days = [];
 | |
|             $tmp = [];
 | |
|             foreach($rs as $key => $v){
 | |
|                 if(!in_array($v['createTime'],$days))$days[] = $v['createTime'];
 | |
|                 $tmp[$v['userType']."_".$v['createTime']] = $v['userNum'];
 | |
|             }
 | |
|             foreach($days as $v){
 | |
|                 $rdata['u0'][] = isset($tmp['0_'.$v])?$tmp['0_'.$v]:0;
 | |
|                 $rdata['u1'][] = isset($tmp['1_'.$v])?$tmp['1_'.$v]:0;
 | |
|             }
 | |
|             $rdata['days'] = $days;
 | |
|         }
 | |
|         return WSTReturn('',1,$rdata);
 | |
|     }
 | |
|     /**
 | |
|      * 导出商品销售订单
 | |
|      */
 | |
|     public function toExportGoods(){
 | |
|         $name='商品销售统计表';
 | |
|         $start = input('startDate');
 | |
|         $end = input('endDate');
 | |
|         $where=[];
 | |
|         $shopName = input('shopName');
 | |
|         $goodsName = input('goodsName');
 | |
|         $goodsCatIdPath = input('goodsCatIdPath');
 | |
|         if($goodsCatIdPath !='')$where['g.goodsCatIdPath'] = ['like','%'.$goodsCatIdPath.'%'];
 | |
|         if($shopName!='')$where['shopName'] = ['like','%'.$shopName.'%'];
 | |
|         if($goodsName!='')$where['g.goodsName'] = ['like','%'.$goodsName.'%'];
 | |
|         if($start!='' && $end!=''){
 | |
|             $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|             $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|             $where['o.createTime'] = ['between',[$start.' 00:00:00',$end.' 23:59:59']];
 | |
|         }else if($start!=''){
 | |
|             $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|             $where['o.createTime'] = ['>=',$start.' 00:00:00'];
 | |
|         }else if($end!=''){
 | |
|             $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|             $where['o.createTime'] = ['<=',$end.' 23:59:59'];
 | |
|         }
 | |
|         $page=Db::field('og.goodsId,g.goodsName,goodsSn,s.shopId,shopName,sum(og.goodsNum) goodsNum,og.goodsImg,count(og.goodsId)orderNum,pageNum')
 | |
|             ->name('order_goods')->alias('og')
 | |
|             ->join('(select p.*,count(p.goodsId) pageNum from __PAGE_VIEW__ p group by p.goodsId ) con','con.goodsId=og.goodsId','left')
 | |
|             ->join('__ORDERS__ o','og.orderId=o.orderId','left')
 | |
|             ->join('__GOODS__ g','og.goodsId=g.goodsId','left')
 | |
|             ->join('__SHOPS__ s','g.shopId=s.shopId','left')
 | |
|             ->order('goodsNum desc')
 | |
|             ->where($where)
 | |
|             ->where('(payType=0 or (payType=1 and isPay=1)) and o.dataFlag=1')
 | |
|             ->group('og.goodsId,g.goodsName,goodsSn,s.shopId,shopName,og.goodsImg')
 | |
|             ->select();
 | |
|         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(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
 | |
|         $objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getFill()->getStartColor()->setARGB('333399');
 | |
|         
 | |
|         $objPHPExcel->getActiveSheet()
 | |
|                                 ->setCellValue('A1', '商品ID')
 | |
|                                 ->setCellValue('B1', '商品编号')
 | |
|                                 ->setCellValue('C1', '商品名称')
 | |
|                                 ->setCellValue('D1', '商品销量')
 | |
|                                 ->setCellValue('E1', '所属店铺')
 | |
|                                 ->setCellValue('F1', '订单总数')
 | |
|                                 ->setCellValue('G1', '浏览总数');
 | |
|         $objPHPExcel->getActiveSheet()->getStyle('A1:G1')->applyFromArray($styleArray);
 | |
|     
 | |
|         for ($row = 0; $row < count($page); $row++){
 | |
|             $i = $row+2;
 | |
|             $objPHPExcel->getActiveSheet()
 | |
|                                 ->setCellValue('A'.$i, $page[$row]['goodsId'])
 | |
|                                 ->setCellValue('B'.$i, chunk_split($page[$row]['goodsSn']))
 | |
|                                 ->setCellValue('C'.$i, $page[$row]['goodsName'])
 | |
|                                 ->setCellValue('D'.$i, $page[$row]['goodsNum'])
 | |
|                                 ->setCellValue('E'.$i, $page[$row]['shopName'])
 | |
|                                 ->setCellValue('F'.$i, $page[$row]['orderNum'])
 | |
|                                 ->setCellValue('G'.$i, $page[$row]['pageNum']);
 | |
| 
 | |
|         }
 | |
|         //输出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');
 | |
|     }
 | |
|     /**
 | |
|      * 导出商品销售订单
 | |
|      */
 | |
|     public function toExportShop(){
 | |
|         $name='店铺销售统计表';
 | |
|         $start = input('startDate');
 | |
|         $end = input('endDate');
 | |
|         $shopName = input('shopName');
 | |
|         $wh='(payType=0 or (payType=1 and isPay=1)) and o.dataFlag=1';
 | |
|         if($shopName)$wh.=' AND shopName like "%'.$shopName.'%"';
 | |
|         $where=[];
 | |
|         if($start!='' && $end!=''){
 | |
|             $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|             $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|             $where['o.createTime'] = ['between',[$start.' 00:00:00',$end.' 23:59:59']];
 | |
|         }else if($start!=''){
 | |
|             $start = date('Y-m-d 00:00:00',strtotime(input('startDate')));
 | |
|             $where['o.createTime'] = ['>=',$start.' 00:00:00'];
 | |
|         }else if($end!=''){
 | |
|             $end = date('Y-m-d 23:59:59',strtotime(input('endDate')));
 | |
|             $where['o.createTime'] = ['<=',$end.' 23:59:59'];
 | |
|         }
 | |
|         $page=Db::field('s.shopId,s.shopImg,s.shopName,sum(o.totalMoney) totalMoney,count(o.orderId) orderNum')
 | |
|                  ->name('shops')->alias('s')
 | |
|                  ->join('__ORDERS__ o','s.shopId=o.shopId')
 | |
|                  ->order('totalMoney desc,orderNum desc')
 | |
|                  ->where($where)
 | |
|                  ->where($wh)
 | |
|                  ->group('o.shopId')
 | |
|                  ->select();
 | |
| 
 | |
|         foreach($page as $k=>$v){
 | |
|             $onLineArr = Db::name('orders')->alias('o')
 | |
|                  ->where($where)
 | |
|                  ->field('sum(totalMoney) totalMoney,sum(realTotalMoney) realTotalMoney')
 | |
|                  ->where('payType=1 and isPay=1 and dataFlag=1 and orderStatus=2')
 | |
|                  ->where(['shopId'=>$v['shopId']])
 | |
|                  ->find();
 | |
|             $page[$k]['onLinePayMoney'] = (float)$onLineArr['totalMoney'];// 在线支付总金额
 | |
|             $page[$k]['onLinePayTrueMoney'] = (float)$onLineArr['realTotalMoney'];// 在线支付实际金额
 | |
|             $page[$k]['offLinePayMoney'] = (float)Db::name('orders')->alias('o')
 | |
|                  ->where($where)
 | |
|                  ->where('payType=0 and dataFlag=1 and orderStatus=2')
 | |
|                  ->where(['shopId'=>$v['shopId']])
 | |
|                  ->value('sum(totalMoney)');;// 货到付款金额
 | |
|         }
 | |
|         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(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(25);
 | |
|         $objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
 | |
|         $objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getFill()->getStartColor()->setARGB('333399');
 | |
|         
 | |
|         $objPHPExcel->getActiveSheet()
 | |
|                                 ->setCellValue('A1', '店铺名称')
 | |
|                                 ->setCellValue('B1', '订单总金额')
 | |
|                                 ->setCellValue('C1', '订单总数')
 | |
|                                 ->setCellValue('D1', '在线支付总金额')
 | |
|                                 ->setCellValue('E1', '在线支付实际金额')
 | |
|                                 ->setCellValue('F1', '货到付款金额');
 | |
|         $objPHPExcel->getActiveSheet()->getStyle('A1:E1')->applyFromArray($styleArray);
 | |
|     
 | |
|         for ($row = 0; $row < count($page); $row++){
 | |
|             $i = $row+2;
 | |
|             $objPHPExcel->getActiveSheet()
 | |
|                                 ->setCellValue('A'.$i, $page[$row]['shopName'])
 | |
|                                 ->setCellValue('B'.$i, $page[$row]['totalMoney'])
 | |
|                                 ->setCellValue('C'.$i, $page[$row]['orderNum'])
 | |
|                                 ->setCellValue('D'.$i, $page[$row]['onLinePayMoney'])
 | |
|                                 ->setCellValue('E'.$i, $page[$row]['onLinePayTrueMoney'])
 | |
|                                 ->setCellValue('F'.$i, $page[$row]['offLinePayMoney']);
 | |
| 
 | |
|         }
 | |
|         //输出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');
 | |
|     }
 | |
| } |