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) {