From 8f1d59aa3978fe03880b29f77b5cc65e02b7056c Mon Sep 17 00:00:00 2001 From: zhengyongxing Date: Tue, 26 Nov 2019 20:19:23 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=B8=81=E5=85=85?= =?UTF-8?q?=E5=80=BCbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Application/Admin/Controller/TimingController.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/Application/Admin/Controller/TimingController.class.php b/Application/Admin/Controller/TimingController.class.php index 5cd2b799a..b2055cc0b 100644 --- a/Application/Admin/Controller/TimingController.class.php +++ b/Application/Admin/Controller/TimingController.class.php @@ -114,6 +114,7 @@ class TimingController extends AdminController { } + public function caculateTodayDevice() { $start = strtotime(date("Ymd",time())); From fd15fde141b6b15087d8b87fceeacfa727c13c61 Mon Sep 17 00:00:00 2001 From: zhengyongxing Date: Thu, 28 Nov 2019 16:34:22 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/ExportController.class.php | 87 ++++++++++++++----- 1 file changed, 67 insertions(+), 20 deletions(-) diff --git a/Application/Admin/Controller/ExportController.class.php b/Application/Admin/Controller/ExportController.class.php index dc9e97c15..ccb976640 100644 --- a/Application/Admin/Controller/ExportController.class.php +++ b/Application/Admin/Controller/ExportController.class.php @@ -3423,14 +3423,23 @@ if ($key == 'model'){ $xlsName = $_REQUEST['xlsname']; - $xlsCell = array( - array('user_account','玩家账号'), - array('game_name','游戏名称'), - array('server_name','游戏区服'), - array('user_nickname','角色名'), - array('login_time','登录时间'), - array('login_ip','最后登录ip'), - ); +// $xlsCell = array( +// array('user_account','玩家账号'), +// array('game_name','游戏名称'), +// array('server_name','游戏区服'), +// array('user_nickname','角色名'), +// array('login_time','登录时间'), +// array('login_ip','最后登录ip'), +// ); + + $xlsCell = array( + '玩家账号', + '游戏名称', + '游戏区服', + '角色名', + '登录时间', + '最后登录ip', + ); @@ -3463,7 +3472,7 @@ if ($key == 'model'){ $map['user_account'] = array('like', '%' . trim($_REQUEST['account']) . '%'); } - $map['login_time'] = array('neq', 0); +// $map['login_time'] = array('neq', 0); $page = intval($_REQUEST['p']); @@ -3471,26 +3480,64 @@ if ($key == 'model'){ $row = $_REQUEST['row']?$_REQUEST['row']:10; - $data = M('UserLoginRecord','tab_') - ->where($map)->order('id desc')->select(); - $xlsData = []; + //查询数量 + $accessNum = M('UserLoginRecord','tab_') + ->where($map)->order('id desc')->count(); - foreach($data as $k => $v) { + if ($accessNum > 1000000) { + echo "数据量过大,大于100万";die(); + } - $v['login_time'] = date('Y-m-d H:i:s',$v['login_time']); - $v['server_name'] = empty($v['server_name'])?'空':$v['server_name']; + $csvFileName = $xlsName.'.csv'; + //设置好告诉浏览器要下载excel文件的headers + header('Content-Description: File Transfer'); + header('Content-Type: application/vnd.ms-excel'); + header('Content-Disposition: attachment; filename="'. $csvFileName .'"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate'); + header('Pragma: public'); + $fp = fopen('php://output', 'a');//打开output流 + mb_convert_variables('GBK', 'UTF-8', $xlsCell); + fputcsv($fp, $xlsCell);//将数据格式化为CSV格式并写入到output流中 + + $perSize = 50000;//每次查询的条数 + $pages = ceil($accessNum / $perSize); + for($i = 1; $i <= $pages; $i++) { + + $data = M('UserLoginRecord','tab_') + ->field("user_account,game_name,server_name,user_nickname,login_time,login_ip") + ->where($map) + ->limit(($i-1)*$perSize ,$perSize) + ->order('id desc') + ->select(); - $gamename=trim(get_game_name($v['game_id'],'id')); + foreach($data as $k => $v) { - $v['game_name'] = empty($gamename)?($v['type']==2?'APP登录':'平台登录'):$gamename; + $v['login_time'] = date('Y-m-d H:i:s',$v['login_time']); + $v['server_name'] = empty($v['server_name'])?'空':$v['server_name']; - $xlsData[] = $v; +// $gamename=trim(get_game_name($v['game_id'],'id')); - } +// $v['game_name'] = empty($gamename)?($v['type']==2?'APP登录':'平台登录'):$gamename; + $xlsData[] = $v; - $this->exportExcel($xlsName, $xlsCell, $xlsData); + mb_convert_variables('GBK', 'UTF-8', $v); + fputcsv($fp, $v); + } + + unset($xlsData);//释放变量的内存 + //刷新输出缓冲到浏览器 + ob_flush(); + flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 + } +// $xlsData = []; + + exit(); + + +// $this->exportExcel($xlsName, $xlsCell, $xlsData); } From ba85fc8c76b9b3e3a2648b5f8a62f5ad0d479fc6 Mon Sep 17 00:00:00 2001 From: zhengyongxing Date: Tue, 3 Dec 2019 17:10:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=85=85=E5=80=BC?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/ExportController.class.php | 86 +++++++++++++++---- 1 file changed, 67 insertions(+), 19 deletions(-) diff --git a/Application/Admin/Controller/ExportController.class.php b/Application/Admin/Controller/ExportController.class.php index 80f10074a..7c4372ca8 100644 --- a/Application/Admin/Controller/ExportController.class.php +++ b/Application/Admin/Controller/ExportController.class.php @@ -922,28 +922,76 @@ class ExportController extends Controller } else { $total = sprintf("%.2f", $total); } - $xlsData = D('Spend') - ->field('pay_order_number,pay_time,user_account,game_name,promote_account,spend_ip,pay_amount,pay_amount,pay_status,pay_game_status,pay_way,server_name,game_player_name,cost') + + + $xlsCell = array( + "订单号", "充值时间", "玩家账号", "游戏名称", L('Subordinate_channel'), "充值ip", "游戏区服", + "角色名称", "订单金额", "实付金额", "充值方式", L('Order_status'), "游戏通知状态", "消费"."{$total}" + ); + + $csvFileName = $xlsName.'.csv'; + //设置好告诉浏览器要下载excel文件的headers + header('Content-Description: File Transfer'); + header('Content-Type: application/vnd.ms-excel'); + header('Content-Disposition: attachment; filename="'. $csvFileName .'"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate'); + header('Pragma: public'); + $fp = fopen('php://output', 'a');//打开output流 + mb_convert_variables('GBK', 'UTF-8', $xlsCell); + fputcsv($fp, $xlsCell);//将数据格式化为CSV格式并写入到output流中 + + $accessNum = D('Spend') + ->field('pay_order_number,pay_time,user_account,game_name,promote_account,spend_ip,server_name,game_player_name,cost,pay_amount,pay_way,pay_status,pay_game_status') ->where($map) ->join($tab_promote_join) ->order('pay_time DESC') - ->select(); - $xlsCell = array( - array('pay_order_number', "订单号"), - array('pay_time', "充值时间", 'time_format', '*'), - array('user_account', "玩家账号"), - array('game_name', "游戏名称"), - array('promote_account', L('Subordinate_channel')), - array('spend_ip', "充值ip"), - array('server_name', "游戏区服"), - array('game_player_name', "角色名称"), - array('cost', "订单金额"), - array('pay_amount', "实付金额"), - array('pay_way', "充值方式", 'get_pay_way', '*'), - array('pay_status', L('Order_status'), 'get_info_status', '*', '9'), - array('pay_game_status', "游戏通知状态", 'get_info_status', '*', '14'), - array('', "消费"."{$total}") - ); + ->count(); + + $perSize = 10000;//每次查询的条数 + $pages = ceil($accessNum / $perSize); + +// var_dump($count);die(); + for($i = 1; $i <= $pages; $i++) { + $xlsData = D('Spend') + ->field('pay_order_number,pay_time,user_account,game_name,promote_account,spend_ip,server_name,game_player_name,cost,pay_amount,pay_way,pay_status,pay_game_status') + ->where($map) + ->limit(($i-1)*$perSize ,$perSize) + ->join($tab_promote_join) + ->order('pay_time DESC') + ->select(); + + foreach($xlsData as $value) { + $value['pay_time'] = date('Y-m-d H:i:s',$value['pay_time']); + $value['pay_way'] = get_pay_way($value['pay_way']); + $value['pay_status'] = get_info_status($value['pay_status'],9); + $value['pay_game_status'] = get_info_status($value['pay_game_status'],14); + mb_convert_variables('GBK', 'UTF-8', $value); + fputcsv($fp, $value); + } + unset($xlsData);//释放变量的内存 + //刷新输出缓冲到浏览器 + ob_flush(); + flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 + } + fclose($fp); + exit(); +// $xlsCell = array( +// array('pay_order_number', "订单号"), +// array('pay_time', "充值时间", 'time_format', '*'), +// array('user_account', "玩家账号"), +// array('game_name', "游戏名称"), +// array('promote_account', L('Subordinate_channel')), +// array('spend_ip', "充值ip"), +// array('server_name', "游戏区服"), +// array('game_player_name', "角色名称"), +// array('cost', "订单金额"), +// array('pay_amount', "实付金额"), +// array('pay_way', "充值方式", 'get_pay_way', '*'), +// array('pay_status', L('Order_status'), 'get_info_status', '*', '9'), +// array('pay_game_status', "游戏通知状态", 'get_info_status', '*', '14'), +// array('', "消费"."{$total}") +// ); break; case 8: $xlsName = $xlsName?$xlsName:L('Platform_currency_recharge');