// +---------------------------------------------------------------------- namespace Admin\Controller; use User\Api\UserApi as UserApi; use Base\Repository\UserRepository; /** * 后台首页控制器 * @author 麦当苗儿 */ class IndexController extends AdminController { /** * 后台首页 * @author cz */ public function index() { if(session('user_auth.uid')){ $data=M('Member') ->field('uid,nickname,username,us.last_login_time,us.last_login_ip,login') ->join('sys_ucenter_member as us on sys_member.uid = us.id') ->where(array('uid'=>session('user_auth.uid'))) ->find(); header("Content-type: text/html; charset=utf-8"); if(is_administrator()){ $data['group']='超级管理员'; }else{ $data['group'] = get_auth_group_name($data['uid']); } } $this->assign('data',$data); $this->indextt(); $this->meta_title = '管理首页'; // 日历 $this->calendar(); if(strtotime($_REQUEST['start']) == mktime(0,0,0,date('m'),date('d'),date('Y'))){ //今日时时 $this->nowday($_REQUEST['num']); }else{ $this->foldLineDiagram($_REQUEST['start'],$_REQUEST['end'],$_REQUEST['num']); } $tm =strtotime(date("Y-m-d",strtotime("-1 day"))); $allcount = SM("IndexChart","tab_")->field("all_count")->order("date desc")->find(); $allcount = json_decode($allcount['all_count'],true); $this->assign('user_count',$allcount['user_count']); $this->assign('active_count', $allcount['active_count']); $this->assign('player_count', $allcount['player_count']); $this->assign('money_sum', $allcount['money_sum']); $this->assign('promote_sum',$allcount['promote_sum']); //累计统计 $this->display(); } /* * 今日折线图 */ public function nowday($num) { $starttime = mktime(0,0,0,date('m'),date('d'),date('Y')); $endtime = $starttime+86399; $start = date('Y-m-d',$starttime); $end = date('Y-m-d',$endtime); $user = D('User'); $spend = D('Spend'); $promote = D('Promote'); if ($start == date('Y-m-d',strtotime('-1 day'))) {$num = 2;} $hours = ['00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23']; $data['date'] = [$start]; $data['hours'] = 1; foreach($hours as $v) { $data['news'][$v] = 0; $data['active'][$v] = 0; $data['player'][$v] = 0; $data['money'][$v] = 0; } // 新增用户 $hoursnews = $user->newsAdd(['register_time'=>['between',[$starttime,$endtime]]],'news','time',5); // 活跃用户 $hoursactive = $user->totalPlayerByGroup($hours,['tab_user_login_record.login_time'=>['between',[$starttime,$endtime]]],'active','time',5); // 付费用户 $hoursplayer = $spend->totalPlayerByGroup(['pay_time'=>['between',[$starttime,$endtime]]],'player','time',5); // 充值金额 $hoursmoney = $spend->totalAmountByGroup(['pay_time'=>['between',[$starttime,$endtime]]],'money','time',5); foreach($hours as $v) { foreach($hoursnews as $h) { $time = explode(' ',$h['time']); if ($time[1] == $v){ $data['news'][$v] = (integer)$h['news'];break; } } foreach($hoursactive as $h) { if ($h['time'] == $v){ $data['active'][$v] = (integer)$h['active'];break; } } foreach($hoursplayer as $h) { $time = explode(' ',$h['time']); if ($time[1] == $v){ $data['player'][$v] = (integer)$h['player'];break; } } foreach($hoursmoney as $h) { $time = explode(' ',$h['time']); if ($time[1] == $v){ $data['money'][$v] = $h['money'];break; } } } // 新 $between = ['between',[$starttime-86400,$endtime]]; $cnewslist = $user->newsAdd(['register_time'=>$between],'count','time',1,'time desc'); $cnews['count'] = $cnewslist[0]['count']?$cnewslist[0]['count']:0; $cnews['rate'] = $cnewslist[0] && $cnewslist[1]? round(($cnewslist[0]['count']/$cnewslist[1]['count']-1)*100,2):($cnewslist[0]&&!$cnewslist[1]?(100):(!$cnewslist[0]&&$cnewslist[1]?(-100):0)); // 活 $cactivelist = $user->totalPlayerByGroup([date('Y-m-d',$starttime-86400),$end],['tab_user_login_record.login_time'=>$between],'count','time',1,'time desc'); $cactive['count'] = $cactivelist[0]['count']?$cactivelist[0]['count']:0; $cactive['rate'] = $cactivelist[0] && $cactivelist[1]? round(($cactivelist[0]['count']/$cactivelist[1]['count']-1)*100,2):($cactivelist[0]&&!$cactivelist[1]?(100):(!$cactivelist[0]&&$cactivelist[1]?(-100):0)); // 付 $cplayerlist = $spend->totalPlayerByGroup(['pay_time'=>$between],'count','time',1,'time desc'); $cplayer['count'] = $cplayerlist[0]['count']?$cplayerlist[0]['count']:0; $cplayer['rate'] = $cplayerlist[0] && $cplayerlist[1]? round(($cplayerlist[0]['count']/$cplayerlist[1]['count']-1)*100,2):($cplayerlist[0]&&!$cplayerlist[1]?(100):(!$cplayerlist[0]&&$cplayerlist[1]?(-100):0)); // 充 $cmoneylist = $spend->totalAmountByGroup(['pay_time'=>$between],'count','time',1,'time desc'); $cmoney['count'] = $cmoneylist[0]['count']?$cmoneylist[0]['count']:0; $cmoney['rate'] = $cmoneylist[0] && $cmoneylist[1]? round(($cmoneylist[0]['count']/$cmoneylist[1]['count']-1)*100,2):($cmoneylist[0]&&!$cmoneylist[1]?(100):(!$cmoneylist[0]&&$cmoneylist[1]?(-100):0)); // 渠 $cpromotelist = $promote->newsAdd(['create_time'=>$between],'count','time',1,'time desc'); $cpromote['count'] = $cpromotelist[0]['count']?$cpromotelist[0]['count']:0; $cpromote['rate'] = $cpromotelist[0] && $cpromotelist[1]? round(($cpromotelist[0]['count']/$cpromotelist[1]['count']-1)*100,2):($cpromotelist[0]&&!$cpromotelist[1]?(100):(!$cpromotelist[0]&&$cpromotelist[1]?(-100):0)); foreach($data as $k => $v) { if (is_array($v)) { if ($k == 'date') $data[$k] = '"'.implode('","',$v).'"'; else $data[$k] = implode(',',$v); } } $data['compare']['news'] = $cnews; $data['compare']['active'] = $cactive; $data['compare']['player'] = $cplayer; $data['compare']['money'] = $cmoney; $data['compare']['promote'] = $cpromote; if ($flag) { echo json_encode($data); } else { $this->assign('foldline',$data); $this->assign('num',$num); } # code... } /* * 折线图 * @param integer $start 开始时间 * @param integer $end 结束时间 * @param boolean $flag 是否ajax返回 * @author 鹿文学 */ public function foldLineDiagram($start='',$end='',$num='',$flag=false) { $starttime = $start?strtotime($start):mktime(0,0,0,date('m'),date('d')-1,date('Y')); $endtime = $end?strtotime($end)+86399:$starttime+86399; $start = date('Y-m-d',$starttime); $end = date('Y-m-d',$endtime); $user = D('User'); $spend = D('Spend'); $promote = D('Promote'); if ($start == $end) { // 单天 if ($start == date('Y-m-d',strtotime('-1 day'))) {$num = 2;} $data['date'] = [$start]; $data['hours'] = 1; $tm = strtotime($start); $dbdata = SM("IndexChart","tab_")->field("new_user_count,new_user_hours,active_user_count,active_user_hours,pay_user_count,pay_user_hours,pay_money_count,pay_money_hours,promote_new_count")->where("`date` = '{$tm}'")->find(); $data['news'] = json_decode($dbdata["new_user_hours"],true); $data['active'] = json_decode($dbdata["active_user_hours"],true); $data['player']=json_decode($dbdata["pay_user_hours"],true); $data['money']=json_decode($dbdata["pay_money_hours"],true); //获取昨天 $ytm = $starttime-86400; $ydbdata = SM("IndexChart","tab_")->field("new_user_count,active_user_count,pay_user_count,pay_money_count,promote_new_count")->where("`date` = '{$ytm}'")->find(); //计算 $cnews['count'] = $dbdata['new_user_count']; $cnews['rate'] = $this->setRate($dbdata['new_user_count'],$ydbdata['new_user_count']); $cactive['count'] = $dbdata['active_user_count']; $cactive['rate'] = $this->setRate($dbdata['active_user_count'],$ydbdata['active_user_count']); $cplayer['count'] = $dbdata['pay_user_count']; $cplayer['rate'] = $this->setRate($dbdata['pay_user_count'],$ydbdata['pay_user_count']); $cmoney['count'] = $dbdata['pay_money_count']; $cmoney['rate'] = $this->setRate($dbdata['pay_money_count'],$ydbdata['pay_money_count']); $cpromote['count'] = $dbdata['promote_new_count']; $cpromote['rate'] = $this->setRate($dbdata['promote_new_count'],$ydbdata['promote_new_count']); } else { $datelist = get_date_list($starttime,$endtime,$num==7?4:1); $data['date'] = $datelist; $data['hours'] = 0; $map = array( "date"=>['between',[$starttime,$endtime]] ); //获取记录 $count1 = array(); $active_user_list = []; $pay_user_list = []; $dbdata = SM("IndexChart","tab_")->field("FROM_UNIXTIME(`date`, '%Y-%m-%d') as time,new_user_count,active_user_count,active_user_list,pay_user_count,pay_user_list,pay_money_count,promote_new_count") ->where($map) ->group("time") ->select(); //替换数据 $temparr = array(); for ($i=0; $i < count($datelist); $i++) { $temparr[$datelist[$i]]['news'] = 0; $temparr[$datelist[$i]]['active'] = 0; $temparr[$datelist[$i]]['player'] = 0; $temparr[$datelist[$i]]['money'] = 0; } foreach($dbdata as $k => $v) { $temparr[$v['time']]['news'] =$v['new_user_count']; $temparr[$v['time']]['active'] =$v['active_user_count']; $temparr[$v['time']]['player'] =$v['pay_user_count']; $temparr[$v['time']]['money'] =$v['pay_money_count']; $active_user_list += json_decode($v['active_user_list'],true); unset($v['active_user_list']); unset($dbdata[$k]['active_user_list']); $pay_user_list += json_decode($v['pay_user_list'],true); unset($v['pay_user_list']); unset($dbdata[$k]['pay_user_list']); $count1['new_user_count'] += $v['new_user_count']; $count1['pay_money_count'] += $v['pay_money_count']; $count1['promote_new_count'] += $v['promote_new_count']; } foreach ($temparr as $key => $value) { # code... $data['news'][] = $value['news']; $data['active'][] = $value['active']; $data['player'][] = $value['player']; $data['money'][] = $value['money']; } unset($dbdata); $count1['active_user_count'] = count(array_flip(array_flip($active_user_list))); unset($active_user_list); $count1['pay_user_count'] = count(array_flip(array_flip($pay_user_list))); unset($active_user_list); //获取前num的日志 switch($num) { case 3:{ $between = ['between',[strtotime('-7 day',$starttime),strtotime('-7 day',$endtime)]]; };break; case 4:{ $temp = strtotime('-1 month',$starttime); $between = ['between',[$temp,mktime(0,0,0,date('m',$temp)+1,1,date('Y',$temp))-1]]; };break; case 5:{ $between = ['between',[strtotime('-7 day',$starttime),strtotime('-7 day',$endtime)]]; };break; case 6:{ $between = ['between',[strtotime('-30 day',$starttime),strtotime('-30 day',$endtime)]]; };break; case 7:{ $between = ['between',[strtotime('-365 day',$starttime),strtotime('-365 day',$endtime)]]; };break; default:{ $day_num = count($datelist); $between = ['between',[strtotime('-'.$day_num.' day',$starttime),strtotime('-'.$day_num.' day',$endtime)]]; }; } //获取前几天记录 $map1 = array( "date"=>$between ); $ydbdata = SM("IndexChart","tab_")->field("new_user_count,active_user_count,active_user_list,pay_user_count,pay_user_list,pay_money_count,promote_new_count") ->where($map1)->select(); $active_user_list = []; $pay_user_list = []; $count2 = array(); foreach($ydbdata as $k => $v) { $active_user_list += json_decode($v['active_user_list'],true); unset($v['active_user_list']); unset($ydbdata[$k]['active_user_list']); $pay_user_list += json_decode($v['pay_user_list'],true); unset($v['pay_user_list']); unset($ydbdata[$k]['pay_user_list']); $count2['new_user_count'] += $v['new_user_count']; $count2['pay_money_count'] += $v['pay_money_count']; $count2['promote_new_count'] += $v['promote_new_count']; } unset($ydbdata); $count2['active_user_count'] = count(array_flip(array_flip($active_user_list))); unset($active_user_list); $count2['pay_user_count'] = count(array_flip(array_flip($pay_user_list))); unset($active_user_list); //比较 $cnews['count'] = $count1['new_user_count']; $cnews['rate'] = $this->setRate($count1['new_user_count'],$count2['new_user_count']); $cactive['count'] =$count1['active_user_count']; $cactive['rate'] = $this->setRate($count1['active_user_count'],$count2['active_user_count']); $cplayer['count'] =$count1['pay_user_count']; $cplayer['rate'] = $this->setRate($count1['pay_user_count'],$count2['pay_user_count']); $cmoney['count'] = $count1['pay_money_count']; $cmoney['rate'] = $this->setRate($count1['pay_money_count'],$count2['pay_money_count']); $cpromote['count'] = $count1['promote_new_count']; $cpromote['rate'] = $this->setRate($count1['promote_new_count'],$count2['promote_new_count']); } foreach($data as $k => $v) { // dump($k); if (is_array($v)) { if ($k == 'date') $data[$k] = '"'.implode('","',$v).'"'; else $data[$k] = implode(',',$v); } } $data['compare']['news'] = $cnews; $data['compare']['active'] = $cactive; $data['compare']['player'] = $cplayer; $data['compare']['money'] = $cmoney; $data['compare']['promote'] = $cpromote; if ($flag) { echo json_encode($data); } else { $this->assign('foldline',$data); $this->assign('num',$num); } # code... } public function setRate($d1,$d2) { $rate = 0; if($d1>0){ if($d2 > 0){ $rate = round(($d1/$d2-1)*100,2); }else{ $rate = 100; } }else if($d1 == 0 && $d2 == 0){ $rate = 0; }else{ $rate = -100; } return $rate; } /* * 日历 * @param integer $start 开始时间(2018-04) * @param integer $end 结束时间(2018-05) * @param boolean $flag 是否ajax返回 * @author 鹿文学 */ public function calendar($start='',$end='',$flag=false) { $start = $start?$start:date('Y-m',strtotime('-1 month')); $end = $end?$end:date('Y-m'); if ($start == $end) {$start = date('Y-m',strtotime('-1 month',$end));} if (strtotime($start)>strtotime($end)) {$temp = $end;$end = $start;$start = $temp;} if (strtotime($end) > strtotime(date('Y-m'))) {$end = date('Y-m');$start = date('Y-m',strtotime('-1 month'));} $iscurrent = $end != date('Y-m')?1:0; // 默认是当前月,不可进入下一个月 $stime = strtotime($start); $etime = strtotime($end); $sw = date('w',$stime); // 周几 $ew = date('w',$etime); $sw = $sw == 0? 6:(integer)$sw-1; $ew = $ew == 0? 6:(integer)$ew-1; $st = date('t',$stime); // 天数 $et = date('t',$etime); $sf = $ef = $sr = $er = 1; // 行数 ,日期起始值 for($i=0;$i<7;$i++) { if ($i<$sw) $first[$sr][$i] = ['value'=>'']; else { $first[$sr][$i] = ['value'=>set_date_day_format($sf),'full'=>$start.'-'.set_date_day_format($sf)];$sf++; } } for($i=0;$i<7;$i++) { if ($i<$ew) $last[$er][$i] = ['value'=>'']; else { $eday = set_date_day_format($ef); if (strtotime($end.'-'.$eday)>strtotime(date('Y-m-d'))){ $last[$er][$i] = ['value'=>$eday,'full'=>$end.'-'.$eday,'no'=>1];$ef++; }else{ $last[$er][$i] = ['value'=>$eday,'full'=>$end.'-'.$eday];$ef++; } } } $sn = $en = 0; // 列数 for ($i=$sf;$i<=$st;$i++) { if (count($first[$sr])==7){$sr++;$sn=0;} $sday = set_date_day_format($i); $first[$sr][$sn] = ['value'=>$sday,'full'=>$start.'-'.$sday]; $sn++; } for ($i=$ef;$i<=$et;$i++) { if (count($last[$er])==7){$er++;$en=0;} $eday = set_date_day_format($i); if (strtotime($end.'-'.$eday)>strtotime(date('Y-m-d'))){$last[$er][$en] = ['value'=>$eday,'full'=>$end.'-'.$eday,'no'=>1];} else{$last[$er][$en] = ['value'=>$eday,'full'=>$end.'-'.$eday];} $en++; } $prev = date('Y-m',strtotime('-1 month',$stime)).','.$start; $next = $end.','.date('Y-m',strtotime('+1 month',$etime)); $calendar = ['first'=>$first,'last'=>$last,'prev'=>$prev,'next'=>$next,'iscurrent'=>$iscurrent,'ftitle'=>date('Y年m月',$stime),'ltitle'=>date('Y年m月',$etime),'today'=>date('Y-m-d')]; if ($flag) { echo json_encode($calendar); } else { $this->assign('calendar',$calendar); } } public function indextt(){ $user = M("User","tab_"); $game = M("Game","tab_"); $spend = M('Spend',"tab_"); $deposit = M('Deposit',"tab_"); $promote = M("Promote","tab_"); if($gameso){ $gameso=implode(',',array_column($gameso, 'game_id')); $sourcemap['id']=array('not in',$gameso); }else{ $sourcemap['id']=0; } //游戏原包管理 $gac=$game->field('game_name')->where($sourcemap)->order('create_time desc')->select(); $tishi['gac']=$gac; //代充额度 $prolc=$promote ->field('account,pay_limit') ->where(array('pay_limit'=>array('lt',10),'set_pay_time'=>array('gt',0))) ->select(); $tishi['prolc']=$prolc; //返利设置 $map_rebc['endtime'] = array(array('neq',0),array('lt',time()), 'and') ; $rebc=M('Rebate','tab_') ->field('game_name,endtime') ->where($map_rebc) ->select(); $tishi['rebc']=$rebc; //礼包数量 $giftc=M('Giftbag','tab_') ->field('game_name,novice,giftbag_name') ->where(array('status'=>1)) ->select(); foreach ($giftc as $key => $value) { $novc=arr_count($value['novice']); if($novc>10){ unset($giftc[$key]); } } //渠道礼包 $pgiftc=M('promote_gift','tab_') ->field('game_name,novice,giftbag_name') ->where(array('status'=>1)) ->select(); foreach ($pgiftc as $key => $value) { $novc=arr_count($value['novice']); if($novc>10){ unset($pgiftc[$key]); } } $tishi['giftc']=$giftc; $tishi['pgiftc']=$pgiftc; $this->assign('tishi',$tishi); // $this->display('index'); } public function savekuaijie(){ $newstr['kuaijie_value']=substr($_POST['kuaijie'],0,strlen($_POST['kuaijie'])-1); $data=M('Member')->where(array('uid'=>UID))->save($newstr); if($data!==false){ $this->ajaxReturn(array('status'=>1)); }else{ $this->ajaxReturn(array('status'=>0)); } } public function setup() { $data = M('kuaijieicon')->field('id,title,value,url')->where(['status'=>1])->select(); $this->assign('kuaijielist',$data); $this->display(); } /** * 添加快捷图标 * @author 鹿文学 */ public function addShortcutIcon() { $Kuaijieicon = M('Kuaijieicon'); $result = $Kuaijieicon->where(['url'=>$_REQUEST['url']])->find(); if ($result) { if ($result['status'] == 0) { $data = array('status'=>1,'id'=>$result['id']); $id = $Kuaijieicon->save($data); if($id){ //记录行为 action_log('Kuaijie/edit', 'Kuaijieicon', $result['id'], UID); $this->success('添加成功'); } else { $this->error('添加失败'); } } else { $this->error('已添加过常用设置'); } } else { $data = array('title'=>$_REQUEST['title'],'status'=>1,'url'=>$_REQUEST['url'],'value'=>0); $id = $Kuaijieicon->add($data); if($id){ //记录行为 action_log('Kuaijie/add', 'Kuaijieicon', $id, UID); $this->success('添加成功'); } else { $this->error('添加失败'); } } } /** * 删除快捷图标 * @param integer $id 快捷图标编号 * @author 鹿文学 */ public function delShortcutIcon($id=0) { if (!is_numeric($id) || $id<1) {$this->error('参数错误');} $Kuaijieicon = M('Kuaijieicon'); $data = array('status'=>0,'id'=>$id); $res = $Kuaijieicon->save($data); if($res){ //记录行为 action_log('Kuaijie/del', 'Kuaijieicon', $id, UID); $this->success('删除成功'); } else { $this->error('删除失败'); } } }