| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742 |
- <?php
- namespace app\mall\admin;
- use app\admin\controller\Admin;
- use think\Db;
- use think\Request;
- use think\Validate;
- use app\common\builder\ZBuilder;
- class Record extends Admin
- {
- public function index($status='0'){
- $list_tab = [
- '0' => ['title' => '每月新增用户', 'url' => url('index', ['status' => '0'])],
- '1' => ['title' => '用户地区排行', 'url' => url('index', ['status' => '1'])],
- '2' => ['title' => '用户订单排行', 'url' => url('index', ['status' => '2'])],
- ];
- $user_count=db('users')->count('id');
- $year=date('Y');
- $month=date('m');
- $st=strtotime($year.'-'.$month.'-01 00:00:00');
- if($month=='12'){
- $en_year=$year+1;
- $en_month=1;
- }else{
- $en_year=$year;
- $en_month=$month+1;
- }
- $en=strtotime($en_year.'-'.$en_month.'-01 00:00:00')-1;
- $user_month_count=db('users')->where('created_at','between',$st.','.$en)->count('id');
- $tips="当前总用户数量:<b>{$user_count}</b>人,本月新增用户:<b>{$user_month_count}</b>人。";
- switch ($status) {
- case '0':
- $request_url=$_SERVER["REQUEST_URI"];
- $url_arr=parse_url($request_url);
- if(isset($url_arr['query'])){
- parse_str($url_arr['query'], $query_arr);
- if(isset($query_arr['status']) && $query_arr['status']==0){
- $pix=true;
- }else{
- $pix=false;
- }
- }else{
- $pix=false;
- }
- $map = $this->getMap();
- if (empty($map) || (!isset($map['year']) && !isset($map['month']))) {
- if($pix){
- $s_year=2018;
- $s_month=1;
- }else{
- $s_year=$year;
- $s_month=$month;
- }
- }elseif(!isset($map['year']) && isset($map['month'])){
- $s_year=2018;
- $s_month=$map['month'];
- }elseif(!isset($map['month']) && isset($map['year'])){
- $s_year=$map['year'];
- $s_month=1;
- }else{
- $s_year=$map['year'];
- $s_month=$map['month'];
- }
- if($s_month=='12'){
- $en_year=$s_year+1;
- $en_month=1;
- }else{
- $en_year=$s_year;
- $en_month=$s_month+1;
- }
- $st=strtotime($s_year.'-'.$s_month.'-01 00:00:00');
- $en=strtotime($en_year.'-'.$en_month.'-01 00:00:00')-1;
- $for=ceil(($en-$st)/(24*60*60));
- $data_list=[];
- for ($i=1; $i <= $for; $i++) {
- $st_d=strtotime($s_year.'-'.$s_month.'-'.$i.' 00:00:00');
- $en_d=strtotime($s_year.'-'.$s_month.'-'.$i.' 23:59:59');
- $data_list[]=[
- 'day'=>'第'.$i.'日',
- 'count'=>db('users')->where('created_at','between',$st_d.','.$en_d)->count('id')
- ];
- }
- session('user_add_excel_year',$s_year);
- session('user_add_excel_month',$s_month);
- session('user_add_excel_data',$data_list);
- $months=['2'=>'二月','3'=>'三月','4'=>'四月','5'=>'五月','6'=>'六月','7'=>'七月','8'=>'八月','9'=>'九月','10'=>'十月','11'=>'十一月','12'=>'十二月'];
- $years=[];
- for ($i=2019; $i <= 2118; $i++) {
- $years[$i]=$i.'年';
- }
- return ZBuilder::make('table')
- ->setPageTitle('') // 设置页面标题
- ->setPageTips($tips) // 设置页面提示信息
- ->setTabNav($list_tab, $status)//分组
- ->hideCheckbox() //隐藏第一列多选框
- ->addTopSelect('year', '2018年', $years, $year) //添加顶部下拉筛选
- ->addTopSelect('month', '一月', $months, $month) //添加顶部下拉筛选
- ->addColumns([
- ['day', '第几日'],
- ['count', '新增用户数'],
- ]) //添加多列数据
- ->addTopButton('custom',['title'=>'导出excel文件','href'=>url('excel',['status'=>0])])
- ->setRowList($data_list) // 设置表格数据
- ->fetch();
- break;
- case '1':
- $map = $this->getMap();
- session('user_region_rank_excel_map',$map);
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $where=" WHERE created_at<=".strtotime($map['created_at'][1][1])." && created_at>=".strtotime($map['created_at'][1][0]);
- }else{
- $where="";
- }
- $data=Db::query("SELECT area_id,COUNT(id) AS counts from ".config('database.prefix')."users {$where} GROUP BY area_id ORDER BY counts DESC LIMIT 100");
- $data_list=[];
- foreach ($data as $key => $value) {
- $area=db('regions')->where('id',$value['area_id'])->find();
- $city=db('regions')->where('id',$area['parent_id'])->find();
- $province=db('regions')->where('id',$city['parent_id'])->find();
- $region=$province['name'].' '.$city['name'].' '.$area['name'];
- if($key==0){
- $rank=$key+1;
- }else{
- if($value['counts']!=$data[$key-1]['counts']){
- $rank=$key+1;
- }
- }
- $data_list[]=['rank'=>$rank,'region'=>$region,'counts'=>$value['counts']];
- }
- session('user_region_rank_excel_data',$data_list);
- return ZBuilder::make('table')
- ->setPageTitle('') // 设置页面标题
- ->setPageTips($tips) // 设置页面提示信息
- ->setTabNav($list_tab, $status)//分组
- ->hideCheckbox() //隐藏第一列多选框
- ->addTimeFilter('created_at') // 添加时间段筛选
- ->addColumns([
- ['rank', '排名'],
- ['region', '地区'],
- ['counts', '数量'],
- ]) //添加多列数据
- ->addTopButton('custom',['title'=>'导出excel文件','href'=>url('excel',['status'=>1])])
- ->setRowList($data_list) // 设置表格数据
- ->fetch();
- break;
- case '2':
- $map = $this->getMap();
- session('user_order_rank_excel_map',$map);
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $where=" WHERE created_at<=".strtotime($map['created_at'][1][1])." && created_at>=".strtotime($map['created_at'][1][0])." && state=1";
- }else{
- $where=" WHERE state=1";
- }
- $data=Db::query("SELECT user_id,SUM(pay_amount) AS sums from ".config('database.prefix')."trades{$where} GROUP BY user_id ORDER BY sums DESC LIMIT 100");
- $data_list=[];
- foreach ($data as $key => $value) {
- if($key==0){
- $rank=$key+1;
- }else{
- if($value['sums']!=$data[$key-1]['sums']){
- $rank=$key+1;
- }
- }
- $pix=['rank'=>$rank];
- $user=db('users')->where('id',$value['user_id'])->find();
- if($user){
- $pix['name']=$user['name'];
- $pix['mobile']=$user['mobile'];
- }else{
- $pix['name']='';
- $pix['mobile']='';
- }
- $pix['sums']=$value['sums'];
- $count1=db('orders')->where('user_id',$value['user_id'])->where('state','in','1,3,4,5,8')->where('refund_state','in','-1,0,1,2,3,6,9,10,11')->count('id');
- $count2=db('collage_orders')->where('user_id',$value['user_id'])->where('state','in','1,4')->count('id');
- $pix['order_counts']=$count1+$count2;
- $sum1=db('orders a')->join('order_products b','a.id=b.order_id','LEFT')->where('a.user_id',$value['user_id'])->where('a.state','in','1,3,4,5,8')->where('a.refund_state','in','-1,0,1,2,3,6,9,10,11')->sum('b.num');
- $sum2=db('collage_orders')->where('user_id',$value['user_id'])->where('state','in','1,4')->sum('num');
- $pix['product_sums']=$sum1+$sum2;
- $data_list[]=$pix;
- }
- session('user_order_rank_excel_data',$data_list);
- return ZBuilder::make('table')
- ->setPageTitle('') // 设置页面标题
- ->setPageTips($tips) // 设置页面提示信息
- ->setTabNav($list_tab, $status)//分组
- ->hideCheckbox() //隐藏第一列多选框
- ->addTimeFilter('created_at') // 添加时间段筛选
- ->addColumns([
- ['rank', '排名'],
- ['name', '用户名'],
- ['mobile', '联系电话'],
- ['sums', '订单总金额'],
- ['order_counts', '订单总数量'],
- ['product_sums', '包含商品总数量'],
- ]) //添加多列数据
- ->addTopButton('custom',['title'=>'导出excel文件','href'=>url('excel',['status'=>2])])
- ->setRowList($data_list) // 设置表格数据
- ->fetch();
- break;
- default:
- break;
- }
- }
- public function excel($status){
- switch ($status) {
- case '0':
- $header = array(
- '第几日'=>'string',//text
- '新增用户数'=>'string',//text
- );
- $data_list = session('user_add_excel_data');
- $year=session('user_add_excel_year');
- $month=session('user_add_excel_month');
- $file_name = $year.'年'.$month.'月每日新增用户数量-'.mt_rand(1000,9999).'.xlsx'; //下载文件名
- $file_dir = "excels/users/adds/"; //下载文件存放目录
- do_rmdir($file_dir,false);//先清空文件夹
- break;
- case '1':
- $header = array(
- '排名'=>'string',//text
- '地区'=>'string',//text
- '数量'=>'string',//text
- );
- $map = session('user_region_rank_excel_map');
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $date='('.explode(' ',$map['created_at'][1][0])[0].'至'.explode(' ',$map['created_at'][1][1])[0].')-';
- }else{
- $date='';
- }
- $data_list = session('user_region_rank_excel_data');
- $file_name = '用户地区排行-'.$date.mt_rand(1000,9999).'.xlsx'; //下载文件名
- $file_dir = "excels/users/regions/ranks/"; //下载文件存放目录
- do_rmdir($file_dir,false);//先清空文件夹
- break;
- case '2':
- $header = array(
- '排名'=>'string',//text
- '用户名'=>'string',//text
- '联系电话'=>'string',//text
- '订单总金额'=>'string',//text
- '订单总数量'=>'string',//text
- '包含商品总数量'=>'string',//text
- );
- $map = session('user_order_rank_excel_map');
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $date='('.explode(' ',$map['created_at'][1][0])[0].'至'.explode(' ',$map['created_at'][1][1])[0].')-';
- }else{
- $date='';
- }
- $data_list = session('user_order_rank_excel_data');
- $file_name = '用户订单排行-'.$date.mt_rand(1000,9999).'.xlsx'; //下载文件名
- $file_dir = "excels/users/regions/ranks/"; //下载文件存放目录
- do_rmdir($file_dir,false);//先清空文件夹
- break;
- default:
- $this->error('请求错误');
- break;
- }
-
- $rows = $data_list;
- import('PHP_XLSXWriter-master.xlsxwriter', EXTEND_PATH,'.class.php');
- $writer = new \XLSXWriter();
- $writer->writeSheetHeader('Sheet1', $header);
- foreach($rows as $row){
- $row=array_values($row);
- $writer->writeSheetRow('Sheet1', $row);
- }
- $writer->writeToFile($file_dir.$file_name);
- //检查文件是否存在
- if (! file_exists ( $file_dir . $file_name )) {
- $this->error('文件未生成成功,请重试');
- } else {
- header('Location:'.config('mall.public_url').$file_dir.$file_name);
- die;
- }
- }
- public function supplier($status='0'){
- $list_tab = [
- '0' => ['title' => '交易额排行', 'url' => url('supplier', ['status' => '0'])],
- '1' => ['title' => '订单数量排行', 'url' => url('supplier', ['status' => '1'])],
- '2' => ['title' => '交易商品数量排行', 'url' => url('supplier', ['status' => '2'])],
- ];
- switch ($status) {
- case '0':
- return ZBuilder::make('table')
- ->setPageTitle('') // 设置页面标题
- ->setPageTips('') // 设置页面提示信息
- ->setTabNav($list_tab, $status)//分组
- ->hideCheckbox() //隐藏第一列多选框
- ->addTimeFilter('created_at') // 添加时间段筛选
- /*->addColumns([
- ['rank', '排名'],
- ['name', '供应商'],
- ['counts', '订单数量'],
- ]) //添加多列数据*/
- ->addTopButton('custom',['title'=>'导出excel文件','href'=>url('excelsupplier',['status'=>0])])
- //->setRowList($data_list) // 设置表格数据
- ->fetch();
- break;
- case '1':
- $map = $this->getMap();
- session('supplier_order_rank_excel_map',$map);
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $where=" WHERE a.created_at<=".strtotime($map['created_at'][1][1])." && a.created_at>=".strtotime($map['created_at'][1][0])." && a.state in (1,3,4,5,8) && a.refund_state in (-1,0,1,2,3,6,9,10,11) && a.is_purchase=1 && a.supplier_product_state=1";
- }else{
- $where=" WHERE a.state in (1,3,4,5,8) && a.refund_state in (-1,0,1,2,3,6,9,10,11) && a.is_purchase=1 && a.supplier_product_state=1";
- }
- $data=Db::query("SELECT b.name,COUNT(a.id) AS counts from ".config('database.prefix')."orders a LEFT JOIN ".config('database.prefix')."suppliers b ON a.supplier_id=b.id{$where} GROUP BY a.supplier_id ORDER BY counts DESC LIMIT 100");
- $data_list=[];
- foreach ($data as $key => $value) {
- if($key==0){
- $rank=$key+1;
- }else{
- if($value['counts']!=$data[$key-1]['counts']){
- $rank=$key+1;
- }
- }
- $data_list[]=['rank'=>$rank,'name'=>$value['name'],'counts'=>$value['counts']];
- }
- session('supplier_order_rank_excel_data',$data_list);
- return ZBuilder::make('table')
- ->setPageTitle('') // 设置页面标题
- ->setPageTips('') // 设置页面提示信息
- ->setTabNav($list_tab, $status)//分组
- ->hideCheckbox() //隐藏第一列多选框
- ->addTimeFilter('created_at') // 添加时间段筛选
- ->addColumns([
- ['rank', '排名'],
- ['name', '供应商'],
- ['counts', '订单数量'],
- ]) //添加多列数据
- ->addTopButton('custom',['title'=>'导出excel文件','href'=>url('excelsupplier',['status'=>1])])
- ->setRowList($data_list) // 设置表格数据
- ->fetch();
- break;
- case '2':
- $map = $this->getMap();
- session('supplier_product_rank_excel_map',$map);
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $where=" WHERE a.created_at<=".strtotime($map['created_at'][1][1])." && a.created_at>=".strtotime($map['created_at'][1][0])." && a.state in (1,3,4,5,8) && a.refund_state in (-1,0,1,2,3,6,9,10,11) && a.is_purchase=1 && a.supplier_product_state=1";
- }else{
- $where=" WHERE a.state in (1,3,4,5,8) && a.refund_state in (-1,0,1,2,3,6,9,10,11) && a.is_purchase=1 && a.supplier_product_state=1";
- }
- $data=Db::query("SELECT b.name,SUM(c.num) AS nums from ".config('database.prefix')."orders a LEFT JOIN ".config('database.prefix')."suppliers b ON a.supplier_id=b.id LEFT JOIN ".config('database.prefix')."order_products c ON a.id=c.order_id{$where} GROUP BY a.supplier_id ORDER BY nums DESC LIMIT 100");
- $data_list=[];
- foreach ($data as $key => $value) {
- if($key==0){
- $rank=$key+1;
- }else{
- if($value['nums']!=$data[$key-1]['nums']){
- $rank=$key+1;
- }
- }
- $data_list[]=['rank'=>$rank,'name'=>$value['name'],'nums'=>$value['nums']];
- }
- session('supplier_product_rank_excel_data',$data_list);
- return ZBuilder::make('table')
- ->setPageTitle('') // 设置页面标题
- ->setPageTips('') // 设置页面提示信息
- ->setTabNav($list_tab, $status)//分组
- ->hideCheckbox() //隐藏第一列多选框
- ->addTimeFilter('created_at') // 添加时间段筛选
- ->addColumns([
- ['rank', '排名'],
- ['name', '供应商'],
- ['nums', '交易商品数量'],
- ]) //添加多列数据
- ->addTopButton('custom',['title'=>'导出excel文件','href'=>url('excelsupplier',['status'=>2])])
- ->setRowList($data_list) // 设置表格数据
- ->fetch();
- break;
- default:
- break;
- }
- }
- public function excelsupplier($status){
- switch ($status) {
- case '0':
-
- break;
- case '1':
- $header = array(
- '排名'=>'string',//text
- '供应商'=>'string',//text
- '订单数量'=>'string',//text
- );
- $map = session('supplier_order_rank_excel_map');
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $date='('.explode(' ',$map['created_at'][1][0])[0].'至'.explode(' ',$map['created_at'][1][1])[0].')-';
- }else{
- $date='';
- }
- $data_list=session('supplier_order_rank_excel_data');
- $file_name = '供应商订单数量排行-'.$date.mt_rand(1000,9999).'.xlsx'; //下载文件名
- $file_dir = "excels/suppliers/orders/ranks/"; //下载文件存放目录
- do_rmdir($file_dir,false);//先清空文件夹
- break;
- case '2':
- $header = array(
- '排名'=>'string',//text
- '供应商'=>'string',//text
- '交易商品数量'=>'string',//text
- );
- $map = session('supplier_product_rank_excel_map');
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $date='('.explode(' ',$map['created_at'][1][0])[0].'至'.explode(' ',$map['created_at'][1][1])[0].')-';
- }else{
- $date='';
- }
- $data_list=session('supplier_product_rank_excel_data');
- $file_name = '供应商交易商品数量排行-'.$date.mt_rand(1000,9999).'.xlsx'; //下载文件名
- $file_dir = "excels/suppliers/products/ranks/"; //下载文件存放目录
- do_rmdir($file_dir,false);//先清空文件夹
- break;
- default:
- $this->error('请求错误');
- break;
- }
-
- $rows = $data_list;
- import('PHP_XLSXWriter-master.xlsxwriter', EXTEND_PATH,'.class.php');
- $writer = new \XLSXWriter();
- $writer->writeSheetHeader('Sheet1', $header);
- foreach($rows as $row){
- $row=array_values($row);
- $writer->writeSheetRow('Sheet1', $row);
- }
- $writer->writeToFile($file_dir.$file_name);
- //检查文件是否存在
- if (! file_exists ( $file_dir . $file_name )) {
- $this->error('文件未生成成功,请重试');
- } else {
- header('Location:'.config('mall.public_url').$file_dir.$file_name);
- die;
- }
- }
- public function trade($status='0'){
- $list_tab = [
- '0' => ['title' => '每月商城交易额', 'url' => url('trade', ['status' => '0'])],
- '1' => ['title' => '每月地区交易数据排行', 'url' => url('trade', ['status' => '1'])],
- ];
- $year=date('Y');
- $month=date('m');
- $st=strtotime($year.'-'.$month.'-01 00:00:00');
- if($month=='12'){
- $en_year=$year+1;
- $en_month=1;
- }else{
- $en_year=$year;
- $en_month=$month+1;
- }
- $en=strtotime($en_year.'-'.$en_month.'-01 00:00:00')-1;
- $platform_water_count=db('platform_waters')->where('created_at','between',$st.','.$en)->sum('amount');
- $tips="本月商城交易额:<b>{$platform_water_count}</b>元。";
- switch ($status) {
- case '0':
- $request_url=$_SERVER["REQUEST_URI"];
- $url_arr=parse_url($request_url);
- if(isset($url_arr['query'])){
- parse_str($url_arr['query'], $query_arr);
- if(isset($query_arr['status']) && $query_arr['status']==0){
- $pix=true;
- }else{
- $pix=false;
- }
- }else{
- $pix=false;
- }
- $map = $this->getMap();
- if (empty($map) || (!isset($map['year']) && !isset($map['month']))) {
- if($pix){
- $s_year=2018;
- $s_month=1;
- }else{
- $s_year=$year;
- $s_month=$month;
- }
- }elseif(!isset($map['year']) && isset($map['month'])){
- $s_year=2018;
- $s_month=$map['month'];
- }elseif(!isset($map['month']) && isset($map['year'])){
- $s_year=$map['year'];
- $s_month=1;
- }else{
- $s_year=$map['year'];
- $s_month=$map['month'];
- }
- if($s_month=='12'){
- $en_year=$s_year+1;
- $en_month=1;
- }else{
- $en_year=$s_year;
- $en_month=$s_month+1;
- }
- $st=strtotime($s_year.'-'.$s_month.'-01 00:00:00');
- $en=strtotime($en_year.'-'.$en_month.'-01 00:00:00')-1;
- $for=ceil(($en-$st)/(24*60*60));
- $data_list=[];
- for ($i=1; $i <= $for; $i++) {
- $st_d=strtotime($s_year.'-'.$s_month.'-'.$i.' 00:00:00');
- $en_d=strtotime($s_year.'-'.$s_month.'-'.$i.' 23:59:59');
- $data_list[]=[
- 'day'=>'第'.$i.'日',
- 'sum'=>db('platform_waters')->where('created_at','between',$st_d.','.$en_d)->sum('amount')
- ];
- }
- session('platform_water_excel_year',$s_year);
- session('platform_water_excel_month',$s_month);
- session('platform_water_excel_data',$data_list);
- $months=['2'=>'二月','3'=>'三月','4'=>'四月','5'=>'五月','6'=>'六月','7'=>'七月','8'=>'八月','9'=>'九月','10'=>'十月','11'=>'十一月','12'=>'十二月'];
- $years=[];
- for ($i=2019; $i <= 2118; $i++) {
- $years[$i]=$i.'年';
- }
- return ZBuilder::make('table')
- ->setPageTitle('') // 设置页面标题
- ->setPageTips($tips) // 设置页面提示信息
- ->setTabNav($list_tab, $status)//分组
- ->hideCheckbox() //隐藏第一列多选框
- ->addTopSelect('year', '2018年', $years, $year) //添加顶部下拉筛选
- ->addTopSelect('month', '一月', $months, $month) //添加顶部下拉筛选
- ->addColumns([
- ['day', '第几日'],
- ['sum', '交易额'],
- ]) //添加多列数据
- ->addTopButton('custom',['title'=>'导出excel文件','href'=>url('exceltrade',['status'=>0])])
- ->setRowList($data_list) // 设置表格数据
- ->fetch();
- break;
- case '1':
- $request_url=$_SERVER["REQUEST_URI"];
- $url_arr=parse_url($request_url);
- if(isset($url_arr['query'])){
- parse_str($url_arr['query'], $query_arr);
- if(isset($query_arr['status']) && $query_arr['status']==0){
- $pix=true;
- }else{
- $pix=false;
- }
- }else{
- $pix=false;
- }
- $map = $this->getMap();
- if (empty($map) || (!isset($map['year']) && !isset($map['month']))) {
- if($pix){
- $s_year=2018;
- $s_month=1;
- }else{
- $s_year=$year;
- $s_month=$month;
- }
- }elseif(!isset($map['year']) && isset($map['month'])){
- $s_year=2018;
- $s_month=$map['month'];
- }elseif(!isset($map['month']) && isset($map['year'])){
- $s_year=$map['year'];
- $s_month=1;
- }else{
- $s_year=$map['year'];
- $s_month=$map['month'];
- }
- if($s_month=='12'){
- $en_year=$s_year+1;
- $en_month=1;
- }else{
- $en_year=$s_year;
- $en_month=$s_month+1;
- }
- $st=strtotime($s_year.'-'.$s_month.'-01 00:00:00');
- $en=strtotime($en_year.'-'.$en_month.'-01 00:00:00')-1;
- $where=" WHERE a.created_at<=".$en." && a.created_at>=".$st." && a.state=1 ";
- $data=Db::query("SELECT b.area_id,sum(pay_amount) AS sums from ".config('database.prefix')."trades a LEFT JOIN ".config('database.prefix')."users b ON a.user_id=b.id {$where} GROUP BY b.area_id ORDER BY sums DESC LIMIT 100");
- $data_list=[];
- foreach ($data as $key => $value) {
- $area=db('regions')->where('id',$value['area_id'])->find();
- $city=db('regions')->where('id',$area['parent_id'])->find();
- $province=db('regions')->where('id',$city['parent_id'])->find();
- $region=$province['name'].' '.$city['name'].' '.$area['name'];
- if($key==0){
- $rank=$key+1;
- }else{
- if($value['sums']!=$data[$key-1]['sums']){
- $rank=$key+1;
- }
- }
- $count1=db('orders a')->join('users b','a.user_id=b.id','LEFT')->where('b.area_id',$value['area_id'])->where('a.user_id',$value['user_id'])->where('a.state','in','1,3,4,5,8')->where('a.refund_state','in','-1,0,1,2,3,6,9,10,11')->count('a.id');
- $count2=db('collage_orders a')->join('users b','a.user_id=b.id','LEFT')->where('b.area_id',$value['area_id'])->where('a.user_id',$value['user_id'])->where('a.state','in','1,4')->count('a.id');
- $order_counts=$count1+$count2;
- $data_list[]=['rank'=>$rank,'region'=>$region,'sums'=>$value['sums'],'order_counts'=>$order_counts];
- }
- session('trade_region_excel_year',$s_year);
- session('trade_region_excel_month',$s_month);
- session('trade_region_excel_data',$data_list);
- $months=['2'=>'二月','3'=>'三月','4'=>'四月','5'=>'五月','6'=>'六月','7'=>'七月','8'=>'八月','9'=>'九月','10'=>'十月','11'=>'十一月','12'=>'十二月'];
- $years=[];
- for ($i=2019; $i <= 2118; $i++) {
- $years[$i]=$i.'年';
- }
- return ZBuilder::make('table')
- ->setPageTitle('') // 设置页面标题
- ->setPageTips($tips) // 设置页面提示信息
- ->setTabNav($list_tab, $status)//分组
- ->hideCheckbox() //隐藏第一列多选框
- ->addTopSelect('year', '2018年', $years, $year) //添加顶部下拉筛选
- ->addTopSelect('month', '一月', $months, $month) //添加顶部下拉筛选
- ->addColumns([
- ['rank', '排名'],
- ['region', '地区'],
- ['sums', '交易额'],
- ['order_counts', '订单数'],
- ]) //添加多列数据
- ->addTopButton('custom',['title'=>'导出excel文件','href'=>url('exceltrade',['status'=>1])])
- ->setRowList($data_list) // 设置表格数据
- ->fetch();
- break;
- default:
- break;
- }
- }
- public function exceltrade($status){
- switch ($status) {
- case '0':
- $header = array(
- '第几日'=>'string',//text
- '交易额'=>'string',//text
- );
- $data_list = session('platform_water_excel_data');
- $year=session('platform_water_excel_year');
- $month=session('platform_water_excel_month');
- $file_name = $year.'年'.$month.'月商城交易额-'.mt_rand(1000,9999).'.xlsx'; //下载文件名
- $file_dir = "excels/trades/platforms/"; //下载文件存放目录
- do_rmdir($file_dir,false);//先清空文件夹
- break;
- case '1':
- $header = array(
- '排名'=>'string',//text
- '地区'=>'string',//text
- '交易额'=>'string',//text
- '订单数'=>'string',//text
- );
- $data_list = session('trade_region_excel_data');
- $year=session('trade_region_excel_year');
- $month=session('trade_region_excel_month');
- $file_name = $year.'年'.$month.'月地区交易数据排行-'.mt_rand(1000,9999).'.xlsx'; //下载文件名
- $file_dir = "excels/trades/regions/ranks/"; //下载文件存放目录
- do_rmdir($file_dir,false);//先清空文件夹
- break;
- default:
- $this->error('请求错误');
- break;
- }
-
- $rows = $data_list;
- import('PHP_XLSXWriter-master.xlsxwriter', EXTEND_PATH,'.class.php');
- $writer = new \XLSXWriter();
- $writer->writeSheetHeader('Sheet1', $header);
- foreach($rows as $row){
- $row=array_values($row);
- $writer->writeSheetRow('Sheet1', $row);
- }
- $writer->writeToFile($file_dir.$file_name);
- //检查文件是否存在
- if (! file_exists ( $file_dir . $file_name )) {
- $this->error('文件未生成成功,请重试');
- } else {
- header('Location:'.config('mall.public_url').$file_dir.$file_name);
- die;
- }
- }
- public function product(){
- $map = $this->getMap();
- session('supplier_product_rank_excel_map',$map);
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $where=" WHERE c.created_at<=".strtotime($map['created_at'][1][1])." && c.created_at>=".strtotime($map['created_at'][1][0])." && c.state in (1,3,4,5,8) && c.refund_state in (-1,0,1,2,3,6,9,10,11)";
- }else{
- $where=" WHERE c.state in (1,3,4,5,8) && c.refund_state in (-1,0,1,2,3,6,9,10,11)";
- }
- $data=Db::query("SELECT b.name,SUM(a.num) AS nums from ".config('database.prefix')."order_products a LEFT JOIN ".config('database.prefix')."products b ON a.product_id=b.id LEFT JOIN ".config('database.prefix')."orders c ON a.order_id=c.id{$where} GROUP BY a.product_id ORDER BY nums DESC LIMIT 100");
- $data_list=[];
- foreach ($data as $key => $value) {
- if($key==0){
- $rank=$key+1;
- }else{
- if($value['nums']!=$data[$key-1]['nums']){
- $rank=$key+1;
- }
- }
- $data_list[]=['rank'=>$rank,'name'=>$value['name'],'nums'=>$value['nums']];
- }
- session('supplier_product_rank_excel_data',$data_list);
- return ZBuilder::make('table')
- ->setPageTitle('商品交易数量排行') // 设置页面标题
- ->setPageTips('') // 设置页面提示信息
- ->hideCheckbox() //隐藏第一列多选框
- ->addTimeFilter('created_at') // 添加时间段筛选
- ->addColumns([
- ['rank', '排名'],
- ['name', '商品名称'],
- ['nums', '交易数量'],
- ]) //添加多列数据
- ->addTopButton('custom',['title'=>'导出excel文件','href'=>url('excelproduct')])
- ->setRowList($data_list) // 设置表格数据
- ->fetch();
- }
- public function excelproduct(){
- $header = array(
- '排名'=>'string',//text
- '商品名称'=>'string',//text
- '交易数量'=>'string',//text
- );
- $map = session('supplier_product_rank_excel_map');
- if(isset($map['created_at'][0]) && isset($map['created_at'][1]) && $map['created_at'][0]=='between time'){
- $date='('.explode(' ',$map['created_at'][1][0])[0].'至'.explode(' ',$map['created_at'][1][1])[0].')-';
- }else{
- $date='';
- }
- $data_list=session('supplier_product_rank_excel_data');
- $file_name = '商品交易数量排行-'.$date.mt_rand(1000,9999).'.xlsx'; //下载文件名
- $file_dir = "excels/products/ranks/"; //下载文件存放目录
- do_rmdir($file_dir,false);//先清空文件夹
-
- $rows = $data_list;
- import('PHP_XLSXWriter-master.xlsxwriter', EXTEND_PATH,'.class.php');
- $writer = new \XLSXWriter();
- $writer->writeSheetHeader('Sheet1', $header);
- foreach($rows as $row){
- $row=array_values($row);
- $writer->writeSheetRow('Sheet1', $row);
- }
- $writer->writeToFile($file_dir.$file_name);
- //检查文件是否存在
- if (! file_exists ( $file_dir . $file_name )) {
- $this->error('文件未生成成功,请重试');
- } else {
- header('Location:'.config('mall.public_url').$file_dir.$file_name);
- die;
- }
- }
- }
|