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'); } }