From 8f1d59aa3978fe03880b29f77b5cc65e02b7056c Mon Sep 17 00:00:00 2001 From: zhengyongxing Date: Tue, 26 Nov 2019 20:19:23 +0800 Subject: [PATCH 1/4] =?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/4] =?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/4] =?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'); From ff224f4b7d0134f589fcee87f89b85dc451306ce Mon Sep 17 00:00:00 2001 From: sunke <18850253506@163.com> Date: Tue, 3 Dec 2019 17:21:41 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=8E=A9=E5=AE=B6=E6=B3=A8=E5=86=8C=20?= =?UTF-8?q?=E5=85=85=E5=80=BC=E7=8E=A9=E5=AE=B6=E4=B8=8B=E8=BD=BD=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/DownloadController.class.php | 185 +++++++++++------- 1 file changed, 118 insertions(+), 67 deletions(-) diff --git a/Application/Home/Controller/DownloadController.class.php b/Application/Home/Controller/DownloadController.class.php index 2315964a0..52500fe8a 100644 --- a/Application/Home/Controller/DownloadController.class.php +++ b/Application/Home/Controller/DownloadController.class.php @@ -1760,26 +1760,59 @@ class DownloadController extends BaseController { public function registerExcelInfo($id,$map) { $xlsName = "注册明细"; $xlsCell = array( - array('account','玩家账号'), - array('promote_account','推广账号'), - array('device_number','设备IMIE/IDFA'), - array('register_time','注册时间'), - array('register_ip','注册ip'), - array('login_time','登陆时间'), - array('login_ip','登陆ip') + '玩家账号', + '推广账号', + '设备IMIE/IDFA', + '注册时间', + '注册ip', + '登陆时间', + '登陆ip' ); $model = M('user','tab_'); - $data = $model->field('account,device_number,promote_account,register_time,register_ip,login_time,login_ip')->where($map)->order('tab_user.id desc')->select(); - $xlsData = []; - foreach ($data as $key1 => $value1) { - $value1['register_time'] = date("Y-m-d H:i:s",$value1['register_time']); - $value1['login_time'] = date("Y-m-d H:i:s",$value1['login_time']); - $value1['account'] = $this->encryption($value1['account']); - $value1['device_number'] = $this->encryption($value1['device_number']); - $xlsData[] = $value1; + $data1 = $model->field('account')->where($map)->order('tab_user.id desc')->select(); + $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('gb2312', 'UTF-8', $xlsCell); + fputcsv($fp, $xlsCell);//将数据格式化为CSV格式并写入到output流中 + $accessNum = '100000';//从数据库获取总量,假设是十万 + $accessNum = count($data1)?:0 ; + + $perSize = 5000;//每次查询的条数 + $pages = ceil($accessNum / $perSize); + for($i = 1; $i <= $pages; $i++) { + $model = M('user','tab_'); + + $data = $model + ->field('account,device_number,promote_account,register_time,register_ip,login_time,login_ip') + ->where($map) + ->limit(($i-1)*$perSize ,$perSize) + ->order('tab_user.id desc') + ->select(); + foreach($data as $value1) { + $csvData['account'] = $this->encryption($value1['account']); + $csvData['promote_account'] = $value1['promote_account']; + $csvData['device_number'] = $this->encryption($value1['device_number']); + $csvData['register_time'] = date("Y-m-d H:i:s",$value1['register_time']); + $csvData['register_ip'] = $value1['register_ip']; + $csvData['login_time'] = date("Y-m-d H:i:s",$value1['login_time']); + $csvData['login_ip'] = $value1['login_ip']; + mb_convert_variables('GBK', 'UTF-8', $csvData); + fputcsv($fp, $csvData); + } + unset($csvData); + ob_flush(); + flush(); } - $this->exportExcel($xlsName, $xlsCell, $xlsData,$id); + fclose($fp); + $this->backSuccessExport($id); } //玩家角色excel信息 @@ -2892,18 +2925,18 @@ class DownloadController extends BaseController { public function userRechargeExcelInfo($id,$map) { $xlsName = "充值玩家"; $xlsCell = array( - array('user_account','玩家账号'), - array('game_name','游戏名称'), - array('server_name','游戏区服'), - array('sdk_version','平台'), - array('role_name','角色名'), - array('role_level','等级'), - array('recharge_cost','充值总额'), - array('recharge_count','充值次数'), - array('recharge_cost_today','昨日充值'), - array('unlogin_day','未登录天数'), - array('play_time','最后登录时间'), - array('promote_account','推广员账号'), + '玩家账号', + '游戏名称', + '游戏区服', + '平台', + '角色名', + '等级', + '充值总额', + '充值次数', + '昨日充值', + '未登录天数', + '最后登录时间', + '推广员账号', ); $subMap = []; @@ -2957,6 +2990,7 @@ class DownloadController extends BaseController { unset($map['begintime']); unset($map['endtime']); //$spendMap['_string'] = 'uc.game_id = tab_user_play_info.game_id and uc.server_id = tab_user_play_info.server_id and uc.role_id = tab_user_play_info.role_id'; + $fieldUC = "sum(uc.recharge_cost) recharge_cost,sum(uc.recharge_count) recharge_count,sum(if(uc.create_time = {$nowTime},uc.recharge_cost,0)) as recharge_cost_today"; $fieldUI = "ui.user_account,ui.game_name,ui.role_name,ui.role_level,ui.server_name,ui.play_time,ui.play_ip,ui.promote_account,ui.sdk_version"; $field = $fieldUC . ',' . $fieldUI; @@ -2975,55 +3009,72 @@ class DownloadController extends BaseController { ->join('left join tab_user_play_info as ui on ui.game_id = uc.game_id and ui.server_id = uc.server_id and ui.role_id = uc.role_id') ->where($map) ->find(); - foreach ($roles as $role) { - $records[] = [ - 'user_account' => empty($role['user_account']) ? '--' : encryption($role['user_account']), - 'game_name' => empty($role['game_name']) ? '--' : $role['game_name'], - 'role_name' => empty($role['role_name']) ? '--' : $role['role_name'], - 'role_id' => empty($role['role_id']) ? '--' : $role['role_id'], - 'role_level' => empty($role['role_level']) ? '--' : $role['role_level'], - 'server_id' => empty($role['server_id']) ? '--' : $role['server_id'], - 'server_name' => empty($role['server_name']) ? '--' : $role['server_name'], - 'recharge_cost' => empty($role['recharge_cost']) ? 0 : $role['recharge_cost'], - 'recharge_count' => empty($role['recharge_count']) ? 0 : $role['recharge_count'], - 'recharge_cost_today' => empty($role['recharge_cost_today']) ? 0 : $role['recharge_cost_today'], - 'play_time' => empty($role['play_time']) ? '--' : $role['play_time'], - 'play_ip' => empty($role['play_ip']) ? '--' : $role['play_ip'], - 'promote_id' => empty($role['promote_id']) ? '--' : $role['promote_id'], - 'promote_account' => empty($role['promote_account']) ? '--' : $role['promote_account'], - 'sdk_version' => empty($role['sdk_version']) ? '--' : $role['sdk_version'], - 'unlogin_day' => empty($role['play_time']) ? '--' : intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $role['play_time']))) / (24 * 3600)) - ]; - } + $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('gb2312', 'UTF-8', $xlsCell); + fputcsv($fp, $xlsCell);//将数据格式化为CSV格式并写入到output流中 + $accessNum = '100000';//从数据库获取总量,假设是十万 + $accessNum = count($roles)?:0 ; + + $perSize = 5000;//每次查询的条数 + $pages = ceil($accessNum / $perSize); + for($i = 1; $i <= $pages; $i++) { + $data = M()->alias('record') + ->table($subQuery) + ->limit(($i-1)*$perSize ,$perSize) + ->select(); + foreach($data as $key => $value) { + $csvData['user_account'] = empty($value['user_account']) ? '--' : encryption($value['user_account']); + $csvData['game_name'] = empty($value['game_name']) ? '--' :$value['game_name']; + $csvData['server_name'] = empty($value['server_name']) ? '--' :$value['server_name']; + if($value['sdk_version'] == 1) { + $csvData['sdk_version'] = "Android"; + }else if($value['sdk_version'] == 2) { + $csvData['sdk_version'] = "ios"; + } else { + $csvData['sdk_version'] = "--"; + } + $csvData['role_name'] = empty($value['role_name']) ? '--' :$value['role_name']; + $csvData['role_level'] = empty($value['role_level']) ? '--' :$value['role_level']; + $csvData['recharge_cost'] = empty($value['recharge_cost']) ? 0 : $value['recharge_cost']; + $csvData['recharge_count'] = empty($value['recharge_count']) ? 0 : $value['recharge_count']; + $csvData['recharge_cost_today'] = empty($value['recharge_cost_today']) ? 0 : $value['recharge_cost_today']; + $csvData['unlogin_day'] = empty($value['play_time']) ? '--' : intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $value['play_time']))) / (24 * 3600)); + $csvData['play_time'] = empty($value['play_time']) ? '--' :date('Y-m-d H:i:s',$value['play_time']); + $csvData['promote_account'] = empty($value['promote_account']) ? '--' :$value['promote_account']; + + mb_convert_variables('GBK', 'UTF-8', $csvData); + fputcsv($fp, $csvData); + $xlsData[] = $csvData; + } + unset($xlsData); + ob_flush(); + flush(); + } $allData['user_account'] = '合计'; $allData['game_name'] = '--'; + $allData['server_name'] = '--'; + $allData['sdk_version'] = '--'; $allData['role_name'] = '--'; - $allData['role_id'] = '--'; $allData['role_level'] = '--'; - $allData['server_id'] = '--'; - $allData['server_name'] = '--'; $allData['recharge_cost'] = $total['recharge_cost']; $allData['recharge_count'] = $total['recharge_count']; $allData['recharge_cost_today'] = $total['recharge_cost_today']; + $allData['unlogin_day'] = '--'; $allData['play_time'] = '--'; - $allData['play_ip'] = '--'; - $allData['promote_id'] = '--'; $allData['promote_account'] = '--'; - $allData['sdk_version'] = '--'; - $allData['unlogin_day'] = '--'; - $xlsData = []; - foreach ($records as $key1 => $value1) { - $value1['user_account'] = $this->encryption($value1['user_account']); - $value1['play_time'] = date('Y-m-d H:i:s',$value1['play_time']); - if($value1['sdk_version'] == 1) { - $value1['sdk_version'] = "Android"; - }else { - $value1['sdk_version'] = "ios"; - } - $xlsData[] = $value1; - } + mb_convert_variables('GBK', 'UTF-8', $allData); + fputcsv($fp, $allData); $xlsData[] = $allData; - $this->exportExcel($xlsName, $xlsCell, $xlsData,$id); + fclose($fp); + $this->backSuccessExport($id); } public function rechargeExcelInfo($id,$map) {