// +---------------------------------------------------------------------- namespace Admin\Controller; use User\Api\UserApi; use Com\Wechat; use Com\WechatAuth; /** * 后台用户控制器 * @author 麦当苗儿 */ class UserActionLogController extends AdminController { public function index($p = 0) { $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 $arraypage = $page; if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } $map = []; if ($_REQUEST['time_start']&&!$_REQUEST['time_end']) { $map['create_time'] = ['egt',strtotime($_REQUEST['time_start'])]; } if (!$_REQUEST['time_start']&&$_REQUEST['time_end']) { $map['create_time'] = ['elt',strtotime($_REQUEST['time_end'])]; } if ($_REQUEST['time_start']&&$_REQUEST['time_end']) { $map['create_time'] = ['egt',strtotime($_REQUEST['time_start'])]; $map['create_time'] = ['elt',strtotime($_REQUEST['time_end'])]; } if ($_REQUEST['username']) { $map['account'] = ['like',"%{$_REQUEST['username']}%"]; } if ($_REQUEST['game_name']) { $map['game_name'] = ['like',"%{$_REQUEST['game_name']}%"]; } $data = M('user_action_log','tab_')->where($map)->page($page,$row)->order('create_time DESC')->select(); foreach($data as $key=>$value) { $remarks = json_decode($value['remarks'],true); // dump($data); if ($value['type'] == 3) { $data[$key]['action'] = '登录 '.($remarks['server_name']?$remarks['server_name']:'无').'-'.($remarks['role_name']?$remarks['role_name']:'无').'-'.($remarks['role_level']?$remarks['role_level']:'无'); } else if ($value['type'] == 4) { $data[$key]['action'] = '退出 '.($remarks['server_name']?$remarks['server_name']:'无').'-'.($remarks['role_name']?$remarks['role_name']:'无').'-'.($remarks['role_level']?$remarks['role_level']:'无'); } } // die(); $count = M('user_action_log','tab_')->where($map)->order('create_time DESC')->count(); $page = set_pagination($count, $row); if ($page) { $this->assign('_page', $page);//分页 } $this->assign('data',$data); $this->display(); } public function del() { if (!$_REQUEST['id']) { $this->ajaxReturn(['status'=>1001]); } $map['id'] = $_REQUEST['id']; $is_del = M('user_action_log','tab_')->where($map)->delete(); if ($is_del) { $this->ajaxReturn(['status'=>1]); } else { $this->ajaxReturn(['status'=>0]); } } public function export() { $xlsName = $_REQUEST['xlsname']; $xlsCell = array( '编号','行为','游戏','玩家','操作时间','操作IP地址' ); $map = []; if ($_REQUEST['time_start']&&!$_REQUEST['time_end']) { $map['create_time'] = ['egt',strtotime($_REQUEST['time_start'])]; } if (!$_REQUEST['time_start']&&$_REQUEST['time_end']) { $map['create_time'] = ['elt',strtotime($_REQUEST['time_end'])]; } if ($_REQUEST['time_start']&&$_REQUEST['time_end']) { $map['create_time'] = ['egt',strtotime($_REQUEST['time_start'])]; $map['create_time'] = ['elt',strtotime($_REQUEST['time_end'])]; } if ($_REQUEST['username']) { $map['account'] = ['like',"%{$_REQUEST['username']}%"]; } if ($_REQUEST['game_name']) { $map['game_name'] = ['like',"%{$_REQUEST['game_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流中 $accessNum=M('user_action_log','tab_')->where($map)->order('create_time DESC')->count(); $perSize = 5000;//每次查询的条数 $pages = ceil($accessNum / $perSize); for($i = 1; $i <= $pages; $i++) { /* 获取频道列表 */ $xlsData = M('user_action_log','tab_') ->field("id,action,game_name,account,create_time,ip") ->where($map) ->limit(($i-1)*$perSize ,$perSize) ->order('create_time DESC')->select(); foreach($xlsData as $key => $value) { $value['create_time'] = date("Y-m-d H:i:s", $value['create_time']); mb_convert_variables('GBK', 'UTF-8', $value); fputcsv($fp, $value); } unset($xlsData);//释放变量的内存 //刷新输出缓冲到浏览器 ob_flush(); flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 } fclose($fp); $getData = $_GET; unset($getData['xlsname']); addOperationLog(['op_type'=>3,'key'=>getNowDate(),'op_name'=>'导出操作日志','url'=>U('UserActionLog/index',$getData),'menu'=>'站点-日志管理-操作日志-导出操作日志']); exit(); } public function operateLog($p = 0) { $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 $arraypage = $page; if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } $map = []; if ($_REQUEST['time_start']&&!$_REQUEST['time_end']) { $map['create_time'] = ['egt',strtotime($_REQUEST['time_start'])]; } if (!$_REQUEST['time_start']&&$_REQUEST['time_end']) { $map['create_time'] = ['elt',strtotime($_REQUEST['time_end'])]; } if ($_REQUEST['time_start']&&$_REQUEST['time_end']) { $map['create_time'] = ['egt',strtotime($_REQUEST['time_start'])]; $map['create_time'] = ['elt',strtotime($_REQUEST['time_end'])]; } if ($_REQUEST['adminname']) { $map['admin_account'] = ['like',"%{$_REQUEST['adminname']}%"]; } if ($_REQUEST['op_type']||$_REQUEST['op_type']=='0') { $map['op_type'] = $_REQUEST['op_type']; } $data = M('operation_log','tab_') ->where($map) ->page($page,$row) ->order('create_time DESC') ->select(); $count = M('operation_log','tab_')->where($map)->order('create_time DESC')->count(); $page = set_pagination($count, $row); if ($page) { $this->assign('_page', $page);//分页 } $this->assign('data',$data); $this->display(); } public function operateLogDel() { if (!$_REQUEST['id']) { $this->ajaxReturn(['status'=>1001]); } $map['id'] = $_REQUEST['id']; $is_del = M('operation_log','tab_')->where($map)->delete(); if ($is_del) { $this->ajaxReturn(['status'=>1]); } else { $this->ajaxReturn(['status'=>0]); } } public function operateLoExport() { $xlsName = $_REQUEST['xlsname']; $xlsCell = array( '编号','位置','类型','操作人','操作时间','操作IP地址' ); $map = []; if ($_REQUEST['time_start']&&!$_REQUEST['time_end']) { $map['create_time'] = ['egt',strtotime($_REQUEST['time_start'])]; } if (!$_REQUEST['time_start']&&$_REQUEST['time_end']) { $map['create_time'] = ['elt',strtotime($_REQUEST['time_end'])]; } if ($_REQUEST['time_start']&&$_REQUEST['time_end']) { $map['create_time'] = ['egt',strtotime($_REQUEST['time_start'])]; $map['create_time'] = ['elt',strtotime($_REQUEST['time_end'])]; } if ($_REQUEST['adminname']) { $map['admin_account'] = ['like',"%{$_REQUEST['adminname']}%"]; } if ($_REQUEST['op_type']) { $map['op_type'] = $_REQUEST['op_type']; } $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=M('operation_log','tab_')->where($map)->order('create_time DESC')->count(); $perSize = 5000;//每次查询的条数 $pages = ceil($accessNum / $perSize); for($i = 1; $i <= $pages; $i++) { /* 获取频道列表 */ $xlsData = M('operation_log','tab_') ->field("id,menu,key,op_name,admin_account,create_time,op_ip") ->where($map) ->limit(($i-1)*$perSize ,$perSize) ->order('create_time DESC')->select(); foreach($xlsData as $key => $value) { $value['menu'] = $value['menu'].'-'.$value['key']; $value['create_time'] = date("Y-m-d H:i:s", $value['create_time']); unset($value['key']); mb_convert_variables('GBK', 'UTF-8', $value); fputcsv($fp, $value); } unset($xlsData);//释放变量的内存 //刷新输出缓冲到浏览器 ob_flush(); flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 } fclose($fp); $getData = $_GET; unset($getData['xlsname']); addOperationLog(['op_type'=>3,'key'=>getNowDate(),'op_name'=>'导出行为日志','url'=>U('UserActionLog/operateLog',$getData),'menu'=>'站点-日志管理-操作日志-导出行为日志']); exit(); } }