*/ class StatisticsController extends ThinkController { public function overview(){ $shuju = json_decode(M('IndexChart','tab_')->field("all_count")->order('`date` desc')->find()["all_count"],true); $this->assign('shuju',$shuju); $this->assign('openegretmain','openegretmain');//模板还样式使用 $this->meta_title = '总览'; //实时数据概况 $today = $this->total(1); $thisweek = $this->total(2); $thismounth = $this->total(3); $thisyear = $this->total(4); $yesterday=$this->total(5); $lastweek=$this->total(6); $lastmounth=$this->total(7); $lastyear=$this->total(8); // 游戏排行 $type=$_REQUEST['type']; if($type==1 || $type==''){ $list_data=$this->data_order($today,$yesterday); }elseif($type==2){ $list_data=$this->data_order($thisweek,$lastweek); }elseif($type==3){ $list_data=$this->data_order($thismounth,$lastmounth); }elseif($type==4){ $list_data=$this->data_order($thisyear,$lastyear); } // 推广员排行 switch($_REQUEST['category']) { case 2:{$promote_data = $this->promote_data_order($thisweek,$lastweek);};break; case 3:{$promote_data = $this->promote_data_order($thismounth,$lastmounth);};break; case 4:{$promote_data = $this->promote_data_order($thisyear,$lastyear);};break; default: $promote_data = $this->promote_data_order($today,$yesterday); } $this->assign('zhuce',$list_data['zhuce']); $this->assign('active',$list_data['active']); $this->assign('pay',$list_data['pay']); $this->assign('game_chart',$list_data['chart']); $this->assign('promotereg',array_slice($promote_data['reg'], 0, 10)); $this->assign('promoteactive',array_slice($promote_data['active'], 0, 10)); $this->assign('promotepay',array_slice($promote_data['pay'], 0, 10)); $this->assign('promote_chart', $promote_data['chart']); // 日历 R('Index/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']); } // $this->foldLineDiagram($_REQUEST['start'],$_REQUEST['end'],$_REQUEST['num']); $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; } } } foreach($data as $k => $v) { if (is_array($v)) { if($data['hours']!=1){$table[$k] = $v;} if ($k == 'date'){ $data[$k] = '"'.implode('","',$v).'"'; }else{ $sum = 0;$x='';$y=0;$tempexport=[]; foreach($v as $t => $s){ $sum += $s; if($data['hours']==1){ if ($t%2==1) {$tab[$x.'~'.$t] = $y+$s;$x='';$y=0;}else{$x .= $t;$y += $s;} $tempexport[]=['time'=>((integer)substr($t,0,2)).':00','count'=>$s]; }else{ $tempexport[]=['time'=>$t,'count'=>$s]; } } $table['sum'][$k]=$sum; if($data['hours']==1)$table[$k]=$tab; $export[$k]=$tempexport; $export['sum'][$k]=$sum; $data[$k] = implode(',',$v); } } } if ($flag) { echo json_encode($data); } else { $this->assign('foldline',$data); $this->assign('table',$table); $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 = M("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); } 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 = M("IndexChart","tab_")->field("new_user_count,active_user_count,pay_user_count,pay_money_count,promote_new_count") ->where($map)->select(); foreach($dbdata as $k => $v) { $data['news'][$k] = $v['new_user_count']; $data['active'][$k] = $v['active_user_count']; $data['player'][$k] = $v['pay_user_count']; $data['money'][$k] = $v['pay_money_count']; } } foreach($data as $k => $v) { // dump($k); if (is_array($v)) { if($data['hours']!=1){$table[$k] = $v;} if ($k == 'date'){ $data[$k] = '"'.implode('","',$v).'"'; }else{ $sum = 0;$x='';$y=0;$tempexport=[]; foreach($v as $t => $s){ $sum += $s; if($data['hours']==1){ if ($t%2==1) {$tab[$x.'~'.$t] = $y+$s;$x='';$y=0;}else{$x .= $t;$y += $s;} $tempexport[]=['time'=>((integer)substr($t,0,2)).':00','count'=>$s]; }else{ $tempexport[]=['time'=>$t,'count'=>$s]; } } $table['sum'][$k]=$sum; if($data['hours']==1)$table[$k]=$tab; $export[$k]=$tempexport; $export['sum'][$k]=$sum; $data[$k] = implode(',',$v); } } } if ($flag) { echo json_encode($data); } else { $this->assign('foldline',$data); $this->assign('table',$table); $this->assign('num',$num); } # code... } private function promote_data_order($starttime,$endtime){ //注册排行 $IndexChart = M("IndexChart","tab_"); // $map = array( "date"=>['between',[$starttime,$endtime]] ); } /** * 排行榜(推广员) * @param string $nowtime 现在时间段(between 开始时间戳 and 结束时间戳) * @param string $othertime 过去时间段(between 开始时间戳 and 结束时间戳) * @return array 结果集 * @author lwx */ private function promote_data_order2($nowtime,$othertime){ $user = M("User","tab_"); $spend = M('Spend',"tab_"); $chart1 = []; $chart2 = []; $chart3 = []; //今日注册排行 $ri_ug_order=$user->field('tab_user.promote_id,tab_promote.account as promote_account,count(tab_user.id) as cg') ->join('tab_promote on (tab_promote.id = tab_user.promote_id)','left') ->where(array('register_time'.$nowtime,'promote_id'=>array('gt',0),'puid'=>0)) ->group('promote_id')->order('cg desc')->limit(10)->select(); $ri_ug_order=array_order($ri_ug_order); $regids = array_column($ri_ug_order,'promote_id'); if ($regids) { $yes_ug_order=$user->field('tab_user.promote_id,tab_promote.account as promote_account,count(tab_user.id) as cg') ->join('tab_promote on (tab_promote.id = tab_user.promote_id)') ->where([array('register_time'.$othertime,'promote_id'=>array('gt',0),'puid'=>0),array('register_time'.$othertime,'promote_id'=>array('in',$regids),'puid'=>0),'_logic'=>'or']) ->group('promote_id')->order('cg desc')->select(); $yes_ug_order=array_order($yes_ug_order); // dump($ri_ug_order); // dump($yes_ug_order);exit; foreach ($ri_ug_order as $key => $value) { $ri_ug_order[$key]['change'] = $value['rand']-count($ri_ug_order)-1; $chart1['p'.$value['promote_id']] = $value; foreach ($yes_ug_order as $k => $v) { if($value['promote_id']==$v['promote_id']){ $ri_ug_order[$key]['change']=$value['rand']-$v['rand'];break; } } } } // //今日活跃排行 $duser = D('User'); $ri_active_order = $duser->activeRankOnPromote($nowtime,'cg'); $ri_active_order=array_order($ri_active_order); $activeids = array_column($ri_active_order,'promote_id'); if ($activeids) { $yes_active = $duser->activeRankOnPromote($othertime,'cg',$activeids); $yes_active=array_order($yes_active); foreach ($ri_active_order as $key => $value) { $ri_active_order[$key]['change'] = $value['rand']-count($ri_active_order)-1; $chart2['p'.$value['promote_id']] = $value; foreach ($yes_active as $k => $v) { if($value['promote_id']==$v['promote_id']){ $ri_active_order[$key]['change']=$value['rand']-$v['rand'];break; } } } } // //充值排行 //spend $ri_spay_sql=$spend->field('tab_spend.promote_id,tab_promote.account as promote_account,sum(pay_amount) as cg') ->join('tab_promote on(tab_spend.promote_id = tab_promote.id)') ->union('select promote_id,tab_promote.account as promote_account,sum(pay_amount) as cg from tab_deposit inner join tab_promote on(tab_promote.id = tab_deposit.promote_id) where pay_status=1 and promote_id>0 and tab_deposit.create_time '.$nowtime.' group by promote_id ') ->where(array('pay_time'.$nowtime,'promote_id'=>array('gt',0),'pay_status'=>1)) ->group('promote_id')->select(false); $ri_spay_order = $spend->field('promote_id,promote_account,sum(cg) as cg')->table('('.$ri_spay_sql.') as a')->group('promote_id')->order('cg desc')->limit(10)->select(); $ri_spay_order=array_order($ri_spay_order); $payids = array_column($ri_spay_order,'promote_id'); if ($payids) { $yes_spay_sql=$spend->field('tab_spend.promote_id,tab_promote.account as promote_account,sum(pay_amount) as cg') ->join('tab_promote on(tab_spend.promote_id = tab_promote.id)') ->union('select promote_id,tab_promote.account as promote_account,sum(pay_amount) as cg from tab_deposit inner join tab_promote on(tab_promote.id = tab_deposit.promote_id) where pay_status=1 and promote_id>0 and tab_deposit.create_time '.$othertime.' group by promote_id ') ->where([array('pay_status'=>1,'pay_time'.$othertime,'promote_id'=>array('gt',0)),array('pay_time'.$othertime,'promote_id'=>array('in',$payids)),'_logic'=>'or']) ->group('promote_id')->select(false); $yes_spay=$spend->field('promote_id,promote_account,sum(cg) as cg')->table('('.$yes_spay_sql.') as a')->group('promote_id')->order('cg desc')->select(); $yes_spay=array_order($yes_spay); foreach ($ri_spay_order as $key => $value) { $ri_spay_order[$key]['change'] = $value['rand']-count($ri_spay_order)-1; $chart3['p'.$value['promote_id']] = $value; foreach ($yes_spay as $k => $v) { if($value['promote_id']==$v['promote_id']){ $ri_spay_order[$key]['change']=$value['rand']-$v['rand']; } } } } $data['reg']=$ri_ug_order; $data['active']=$ri_active_order; $data['pay']=$ri_spay_order; $chart4 = array_merge($chart1,$chart2,$chart3); foreach($chart4 as $k => $v) { $chart['promote'][$k] = $v['promote_account']; foreach($chart1 as $c) { $chart['reg'][$k] = 0; if ($v['promote_id'] == $c['promote_id']) { $chart['reg'][$k] = (integer)$c['cg'];break; } } foreach($chart2 as $c) { $chart['active'][$k] = 0; if ($v['promote_id'] == $c['promote_id']) { $chart['active'][$k] = (integer)$c['cg'];break; } } foreach($chart3 as $c) { $chart['pay'][$k] = 0; if ($v['promote_id'] == $c['promote_id']) { $chart['pay'][$k] = $c['cg'];break; } } } foreach($chart as $k => $v) { if ($k == 'promote') $data['chart'][$k] = '"'.implode('","',$v).'"'; else $data['chart'][$k] = implode(',',$v); } echo "
";dump($data);die();
        return $data;
    }
		
		
		/**
		 * 排行榜(游戏)
		 * @param string $nowtime  		现在时间段(between 开始时间戳 and 结束时间戳)
		 * @param string $othertime  	过去时间段(between 开始时间戳 and 结束时间戳)
		 * @return array 结果集
		 * @author lwx   edit
		 */
    private function data_order($nowtime,$othertime){
        $user = M("User","tab_");
        $spend = M('Spend',"tab_");
				
				$chart1 = [];
				$chart2 = [];
				$chart3 = [];
				
        //今日注册排行
				/* $ri_ug_order=$user->field('fgame_id as game_id,fgame_name as game_name,count(tab_user.id) as cg')
					->where(array('register_time'.$nowtime,'fgame_id'=>array('gt',0),'puid'=>0))
					->group('fgame_id')->order('cg desc')->limit(10)->select(false);
				$ri_ug_order=$user->field('a.*,@rank:=@rank+1 as rank_no')->table('(' .$ri_ug_order. ') as a,(SELECT @rank:= 0) b')->select();
  
				$regids = array_column($ri_ug_order,'game_id');
				if($regids) {
					$yes_ug_order=$user->field('fgame_id as game_id,fgame_name as game_name,count(tab_user.id) as cg')
						->where([array('register_time'.$othertime,'fgame_id'=>array('gt',0),'puid'=>0),array('register_time'.$othertime,'fgame_id'=>array('in',$regids),'puid'=>0),'_logic'=>'or'])
						->group('fgame_id')->order('cg desc')->select(false);
					$yes_ug_order=$user->field('a.*,@rank:=@rank+1 as rank_no')->table('(' .$yes_ug_order. ') as a,(SELECT @rank:= 0) b')->select();

					foreach ($ri_ug_order as $key => $value) {
							$ri_ug_order[$key]['change']=0;
							$chart1['g'.$value['game_id']] = $value;
							foreach ($yes_ug_order as $k => $v) {
									if($value['game_id']==$v['game_id']){
										$ri_ug_order[$key]['change']=$value['rank_no']-$v['rank_no'];break;
									}
							}
							if($ri_ug_order[$key]['change']==0) {
								$ri_ug_order[$key]['change'] = $value['rank_no']-count($ri_ug_order)-1;
							}
					}
					
				} */
				$ri_ug_order=$user->field('fgame_id as game_id,fgame_name as game_name,count(tab_user.id) as cg')
					->where(array('register_time'.$nowtime,'fgame_id'=>array('gt',0),'puid'=>0))
					->group('fgame_id')->order('cg desc')->limit(10)->select();
				$ri_ug_order=array_order($ri_ug_order);
				$regids = array_column($ri_ug_order,'game_id');
				if($regids) {
					$yes_ug_order=$user->field('fgame_id as game_id,fgame_name as game_name,count(tab_user.id) as cg')
						->where([array('register_time'.$othertime,'fgame_id'=>array('gt',0),'puid'=>0),array('register_time'.$othertime,'fgame_id'=>array('in',$regids),'puid'=>0),'_logic'=>'or'])
						->group('fgame_id')->order('cg desc')->select();
					$yes_ug_order=array_order($yes_ug_order);
					foreach ($ri_ug_order as $key => $value) {
							$ri_ug_order[$key]['change'] = $value['rand']-count($ri_ug_order)-1;
							$chart1['g'.$value['game_id']] = $value;
							foreach ($yes_ug_order as $k => $v) {
									if($value['game_id']==$v['game_id']){
										$ri_ug_order[$key]['change']=$value['rand']-$v['rand'];break;
									}
							}
					}
					
				}
				
        // //今日活跃排行
				$duser = D('User');
				$ri_active_order = $duser->activeRankOnGame($nowtime,'cg');					
        $ri_active_order=array_order($ri_active_order);
				$activeids = array_column($ri_active_order,'game_id');
if($activeids) {
				$yes_active = $duser->activeRankOnGame($othertime,'cg',$activeids);	
        $yes_active=array_order($yes_active);
        foreach ($ri_active_order as $key => $value) {
            $ri_active_order[$key]['change'] = $value['rand']-count($ri_active_order)-1;
						$chart2['g'.$value['game_id']] = $value;
            foreach ($yes_active as $k => $v) {
                if($value['game_id']==$v['game_id']){
                  $ri_active_order[$key]['change']=$value['rand']-$v['rand'];break;
                }
            }
        }
	
}

        // //充值排行
        //spend
        $ri_spay_order=$spend->field('game_id,game_name,sum(pay_amount) as cg')
					->where(array('pay_time'.$nowtime,'game_id'=>array('gt',0),'pay_status'=>1))
					->group('game_id')->order('cg desc')->limit(10)->select();
        $ri_spay_order=array_order($ri_spay_order);
				$payids = array_column($ri_spay_order,'game_id');
if ($payids) {
        $yes_spay=$spend->field('game_id,game_name,sum(pay_amount) as cg')
					->where([array('pay_status'=>1,'pay_time'.$othertime,'game_id'=>array('gt',0)),array('pay_time'.$othertime,'game_id'=>array('in',$payids)),'_logic'=>'or'])
					->group('game_id')->order('cg desc')->select();
        $yes_spay=array_order($yes_spay);
        foreach ($ri_spay_order as $key => $value) {
            $ri_spay_order[$key]['change'] = $value['rand']-count($ri_spay_order)-1;
						$chart3['g'.$value['game_id']] = $value;
            foreach ($yes_spay as $k => $v) {
                if($value['game_id']==$v['game_id']){
                  $ri_spay_order[$key]['change']=$value['rand']-$v['rand'];
                }
            }
        }
	
}
        $data['zhuce']=$ri_ug_order;
        $data['active']=$ri_active_order;
        $data['pay']=$ri_spay_order;
				
				$chart4 = array_merge($chart1,$chart2,$chart3);
				foreach($chart4 as $k => $v) {
					$chart['game'][$k] = $v['game_name'];
					foreach($chart1 as $c) {
						$chart['reg'][$k] = 0;
						if ($v['game_id'] == $c['game_id']) {
							$chart['reg'][$k] = (integer)$c['cg'];break;
						}
					}
					foreach($chart2 as $c) {
						$chart['active'][$k] = 0;
						if ($v['game_id'] == $c['game_id']) {
							$chart['active'][$k] = (integer)$c['cg'];break;
						}
					}
					foreach($chart3 as $c) {
						$chart['pay'][$k] = 0;
						if ($v['game_id'] == $c['game_id']) {
							$chart['pay'][$k] = $c['cg'];break;
						}
					}
				}
				
				foreach($chart as $k => $v) {
					if ($k == 'game')
						$data['chart'][$k] = '"'.implode('","',$v).'"';
					else
						$data['chart'][$k] = implode(',',$v);
				}
				
        return $data;
    }

    public function zhexian(){
        $day=$this->every_day(7);
        $time=$this->total(9);
        $key=$_REQUEST['key'];
        $user = M("User","tab_");
        $spend = M('Spend',"tab_");
        $deposit = M('Deposit','tab_');
        if($key==1){
            //注册数据
            $data=$user->field('fgame_id,fgame_name,date_format(FROM_UNIXTIME( `register_time`),"%Y-%m-%d") AS time,count(id) as cg')->where(array('register_time'.$time))->where(array('fgame_id'=>array('gt',0)))->group('time,fgame_id')->order('cg desc')->select();
            $title=$user->field('fgame_name,count(id) as cg')->where(array('register_time'.$time))->where(array('fgame_id'=>array('gt',0)))->group('fgame_id')->order('cg desc')->select();
            $title=array_column($title,'fgame_name');
            $data=array_group_by($data,'time');
            foreach ($day as $key => $value) {
                if(array_key_exists($value, $data)){
                    foreach ($data[$value] as $kk => $vv) {
                        $game_name=$vv['fgame_name'];
                        $dayy[$value][$game_name]=$vv['cg'];
                    }
                }
            }
        }elseif($key==2){
            //活跃数据
            $data=$user->field('game_id,game_name,date_format(FROM_UNIXTIME( uu.login_time),"%Y-%m-%d") AS time,count(tab_user.id) as cg')->join('tab_user_login_record as uu on tab_user.id = uu.user_id')->where(array('uu.login_time'.$time))->where(array('game_id'=>array('gt',0)))->group('time,game_id')->order('cg desc')->select();
            $title=$user->field('game_name,count(tab_user.id) as cg')->join('tab_user_login_record as uu on tab_user.id = uu.user_id')->where(array('uu.login_time'.$time))->where(array('game_id'=>array('gt',0)))->group('game_id')->order('cg desc')->select();
            $title=array_column($title,'game_name');
            $data=array_group_by($data,'time');
            foreach ($day as $key => $value) {
                if(array_key_exists($value, $data)){
                    foreach ($data[$value] as $kk => $vv) {
                        $game_name=$vv['game_name'];
                        $dayy[$value][$game_name]=$vv['cg'];
                    }
                }
            }
        }elseif($key==3){
            //充值数据
            $data=$spend->field('game_id,game_name,date_format(FROM_UNIXTIME( pay_time),"%Y-%m-%d") AS time,sum(pay_amount) as cg')->where(array('pay_time'.$time))->where(array('game_id'=>array('gt',0)))->where(array('pay_status'=>1))->group('time,game_id')->order('cg desc')->select();
            $title=$spend->field('game_name,sum(pay_amount) as cg')->where(array('pay_time'.$time))->where(array('game_id'=>array('gt',0)))->where(array('pay_status'=>1))->group('game_id')->order('cg desc')->select();
            $title=array_column($title,'game_name');
            $data=array_group_by($data,'time');
            foreach ($day as $key => $value) {
                if(array_key_exists($value, $data)){
                    foreach ($data[$value] as $kk => $vv) {
                        $game_name=$vv['game_name'];
                        $dayy[$value][$game_name]=$vv['cg'];
                    }
                }
            }
        }
        $this->assign('day0',$day[0]);
        $this->assign('day1',$day[1]);
        $this->assign('day2',$day[2]);
        $this->assign('day3',$day[3]);
        $this->assign('day4',$day[4]);
        $this->assign('day5',$day[5]);
        $this->assign('day6',$day[6]);
        $this->assign('dayy',$dayy);
        $this->assign('title1',$title[1]);
        $this->assign('title0',$title[0]);
        $this->assign('title2',$title[2]);
        $this->assign('title3',$title[3]);
        $this->assign('title4',$title[4]);
        $this->display();
    }

		/*
		 * 数据概况
		 * @author 鹿文学
		 */
		public function data_profile() {
			$user = D('User');
			$spend = D('Spend');
			$ishours = 0;
			if($_REQUEST['key'] == 1 || empty($_REQUEST['key'])) {
				
				$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'] = $hours;
				
				$ishours = 1;
				
				foreach($hours as $v) {
					$data['news'][$v] = 0;
					$data['money'][$v] = 0;
				}
				
				$between = ['between',array(strtotime('-1 day',strtotime(date('Y-m-d'))),strtotime(date('Y-m-d'))-1)];
				
				// 新增用户			
				$hoursnews = $user->newsAdd(['register_time'=>$between],'news','time',5);

				// 充值金额
				$hoursmoney = $spend->totalAmountByGroup(['pay_time'=>$between],'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($hoursmoney as $h) {
						$time = explode(' ',$h['time']);
						if ($time[1] == $v){
							$data['money'][$v] = $h['money'];break;
						}
					}
					
				}
				
			} else {
				
				$num = $_REQUEST['key'];
				
				$flag= $num==4?365:($num==3?30:7);
				$starttime = strtotime('-'.$flag.' day',strtotime(date('Y-m-d')));
				$endtime = strtotime(date('Y-m-d'))-1;
				
				$datelist = get_date_list($starttime,$endtime,$num==4?4:1);
				
				$data['date'] = $datelist;				
				
				foreach($datelist as $k => $v) {
					$data['news'][$v] = 0;
					$data['money'][$v] = 0;
				}
				
				// 新增用户	
				$news = $user->newsAdd(['register_time'=>['between',[$starttime,$endtime]]],'news','time',$num==4?2:1);

				// 充值金额
				$money = $spend->totalAmountByGroup(['pay_time'=>['between',[$starttime,$endtime]]],'money','time',$num==4?2:1);
				
				foreach($datelist as $v) {
					foreach($news as $h) {
						if ($v == $h['time']) {
							$data['news'][$v] = (integer)$h['news'];break;
						}
					}
				
					foreach($money as $h) {
						if ($v == $h['time']) {
							$data['money'][$v] = $h['money'];break;
						}
					}
					
				}
				
				
				
				
			}
			
			foreach($data as $k => $v) {
				
				if (is_array($v)) {
					if ($k == 'date'){
						if ($ishours == 1) {
						$data[$k] = '"'.implode('","',array_map('addZeroToTime',$v)).'"';						
						} else {							
						$data[$k] = '"'.implode('","',$v).'"';
						}
					}else{
						$data[$k] = implode(',',$v);
					}
				}
			}
			
			$this->assign('data',$data);
			
			$this->meta_title = '数据概况';
			
      $this->display();
			
		}
    public function data_profile2(){
        $keytype=$_REQUEST['key']==""?1:$_REQUEST['key'];
        $user=M('User','tab_');
        $spend=M('Spend','tab_');
        $deposit= M('Deposit','tab_');
        if($keytype==1){
            $time=$this->time2other();
            $tt=$this->total(1);
            //注册数据
            $udata=$user->field('date_format(FROM_UNIXTIME( register_time),"%H") AS time,count(id) as count')->where('register_time'.$tt)->group('time')->select();
            $xtime=$this->for_every_time_point($time,$udata,'time','count');

            //充值数据
            //spend
            $sdata=$spend->field('date_format(FROM_UNIXTIME( pay_time),"%H") AS time,sum(pay_amount) as sum')->where('pay_time'.$tt)->where(array('pay_status'=>1))->group('time')->select();
            $xstime=$this->for_every_time_point($time,$sdata,'time','sum');
            foreach ($xstime as $key => $value) {
                $stime[$key]['sum']=$value['sum'];
            }
        }elseif($keytype==2){//7天
            $time=$this->time2other('7day');
            $tt=$this->total(9);
            //注册数据
            $udata=$user->field('date_format(FROM_UNIXTIME( `register_time`),"%Y-%m-%d") AS time,count(id) as count')->where(array('register_time'.$tt))->group('time')->order('time asc')->select();
            $xtime=$this->for_every_time_point($time,$udata,'time','count');

            //充值数据
            //spend
            $sdata=$spend->field('date_format(FROM_UNIXTIME( pay_time),"%Y-%m-%d") AS time,sum(pay_amount) as sum')->where(array('pay_time'.$tt))->where(array('game_id'=>array('gt',0)))->where(array('pay_status'=>1))->group('time')->order('time asc')->select();
            $xstime=$this->for_every_time_point($time,$sdata,'time','sum');
            
            foreach ($xstime as $key => $value) {
                $stime[$key]['sum']=$value['sum'];
            }        
        }elseif($keytype==3){//30天
            $time=$this->time2other('30day');
            // var_dump($time);exit;
            $tt=$this->total(10);
            //注册数据
            $udata=$user->field('date_format(FROM_UNIXTIME( `register_time`),"%Y-%m-%d") AS time,count(id) as count')->where(array('register_time'.$tt))->group('time')->order('time asc')->select();
            $xtime=$this->for_every_time_point($time,$udata,'time','count');

            //充值数据
            //spend
            $sdata=$spend->field('date_format(FROM_UNIXTIME( pay_time),"%Y-%m-%d") AS time,sum(pay_amount) as sum')->where(array('pay_time'.$tt))->where(array('game_id'=>array('gt',0)))->where(array('pay_status'=>1))->group('time')->order('time asc')->select();
            $xstime=$this->for_every_time_point($time,$sdata,'time','sum');

            foreach ($xstime as $key => $value) {
                $stime[$key]['sum']=$value['sum'];
            }       
        }elseif($keytype==4){//1年
            $time=$this->time2other('12mounth');
            $tt=$this->total(8);
            //注册数据
            $udata=$user->field('date_format(FROM_UNIXTIME( `register_time`),"%Y-%m") AS time,count(id) as count')->where(array('register_time'.$tt))->group('time')->order('time asc')->select();
            $xtime=$this->for_every_time_point($time,$udata,'time','count');

            //充值数据
            //spend
            $sdata=$spend->field('date_format(FROM_UNIXTIME( pay_time),"%Y-%m") AS time,sum(pay_amount) as sum')->where(array('pay_time'.$tt))->where(array('game_id'=>array('gt',0)))->where(array('pay_status'=>1))->group('time')->order('time asc')->select();
            $xstime=$this->for_every_time_point($time,$sdata,'time','sum');
            foreach ($xstime as $key => $value) {
                $stime[$key]['sum']=$value['sum'];
            }
        }
        // 前台显示
        // X轴日期
        if($keytype==1){
            $xAxis="[";
            foreach ($time as $tk => $tv) {
                $xAxis.="'".$tk.":00',";
            }
            $xAxis.="]";
        }elseif($keytype==2){
            sort($time);
            $xAxis="[";
            foreach ($time as $tk => $tv) {
                $xAxis.="'".$tv."',";
            }
            $xAxis.="]";
        }elseif($keytype==3){
            sort($time);
            $xAxis="[";
            foreach ($time as $tk => $tv) {
                $xAxis.="'".$tv."',";
            }
            $xAxis.="]";
        }elseif($keytype==4){
            sort($time);
            $xAxis="[";
            foreach ($time as $tk => $tv) {
                $xAxis.="'".$tv."',";
            }
            $xAxis.="]";
        }
        //x轴注册数据
        $xzdate="[";
        foreach ($xtime as $key => $value) {
            $xzdate.="".$value['count'].",";
        }
        $xzdate.="]";
        //x轴充值数据
        $xsdate="[";
        foreach ($stime as $key => $value) {
            $xsdate.="".$value['sum'].",";
        }
        $xsdate.="]";
        $this->assign('xzdate',$xzdate);
        $this->assign('xsdate',$xsdate);
        $this->assign('xAxis',$xAxis);
        $this->assign('qingxie',count($time));
        $this->meta_title = '数据概况';
        $this->display();
    }
    /**
     * [数据折线 分配每个时间段]
     * @param  [type] $time [时间点]
     * @return [type]       [description]
     */
    private function for_every_time_point($time,$data,$key1,$key2){
        foreach ($time as $key => $value) {
            $newdata[$key][$key2]=0;
            foreach ($data as $k => $v) {
                if($v[$key1]==$key){
                    $newdata[$key][$key2]=$v[$key2];
                }
            }
        }
        return $newdata;
    }
    //把时间戳 当前时间一天分成24小时  前七天 前30天  前12个月
    function time2other($type='day'){
        if($type=='day'){//一天分成24小时
            $start = mktime(0,0,0,date("m"),date("d"),date("y"));
            for($i = 0; $i < 24; $i++){
                static $x=0;
                $xx=$x++;
                if($xx<10){
                    $xxx='0'.$xx;
                }else{
                    $xxx=$xx;
                }
                
                $b = $start + ($i * 3600);
                $e = $start + (($i+1) * 3600)-1;
                $time[$xxx]="between $b and $e";
            }
        }
        if($type=='7day'){
            $ttime=array_reverse($this->every_day());
            foreach ($ttime as $key => $value) {
                $time[$value]=$value;
            }
        }
        if($type=='30day'){
            $ttime=array_reverse($this->every_day(30));
            foreach ($ttime as $key => $value) {
                $time[$value]=$value;
            }
        }
        if($type=='12mounth'){
            $ttime=array_reverse(before_mounth());
            foreach ($ttime as $key => $value) {
                $time[$value]=$value;
            }
        }
        
        return $time;
    }
    //以当前日期 默认前七天 
    private function every_day($m=7){
        $time=array();
        for ($i=0; $i <$m ; $i++) { 
            $time[]=date('Y-m-d',mktime(0,0,0,date('m'),date('d')-$i,date('Y')));
        }
        return $time;
    }
    private function total($type) {
        switch ($type) {
            case 1: { // 今天
                $start=mktime(0,0,0,date('m'),date('d'),date('Y'));
                $end=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
            };break;
             case 2: { // 本周
            //当前日期
            $sdefaultDate = date("Y-m-d");
            //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
            $first=1;
            //获取当前周的第几天 周日是 0 周一到周六是 1 - 6
            $w=date('w',strtotime($sdefaultDate));
            //获取本周开始日期,如果$w是0,则表示周日,减去 6 天
            $week_start=date('Y-m-d',strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));
            //本周结束日期
            $week_end=date('Y-m-d',strtotime("$week_start +6 days"));
                        //当前日期
            $sdefaultDate = date("Y-m-d");
            //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
            $first=1;
            //获取当前周的第几天 周日是 0 周一到周六是 1 - 6
            $w=date('w',strtotime($sdefaultDate));
            //获取本周开始日期,如果$w是0,则表示周日,减去 6 天
            $start=strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days');
            //本周结束日期
            $end=$start+7*24*60*60-1;
        };break;
            case 3: { // 本月
                $start=mktime(0,0,0,date('m'),1,date('Y'));
                $end=mktime(0,0,0,date('m')+1,1,date('Y'))-1;
            };break;
            case 4: { // 本年
                $start=mktime(0,0,0,1,1,date('Y'));
                $end=mktime(0,0,0,1,1,date('Y')+1)-1;
            };break;
            case 5: { // 昨天
                $start=mktime(0,0,0,date('m'),date('d')-1,date('Y'));
                $end=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
            };break;
            case 6: { // 上周
                $start=mktime(0, 0 , 0,date("m"),date("d")-date("w")+1-7,date("Y"));
                $end=mktime(23,59,59,date("m"),date("d")-date("w")+7-7,date("Y"));
            };break;
            case 7: { // 上月
                $start=mktime(0, 0 , 0,date("m")-1,1,date("Y"));
                $end=mktime(23,59,59,date("m") ,0,date("Y"));
            };break;
            case 8: { // 上一年
                $start=mktime(0,0,0,1,1,date('Y')-1);
                $end=mktime(0,0,0,1,1,date('Y'))-1;
            };break;
            case 9: { // 前七天
                $start = mktime(0,0,0,date('m'),date('d')-6,date('Y'));
                $end=mktime(23,59,59,date('m'),date('d'),date('Y'));
            };break;
            case 10: { // 前30天
                $start = mktime(0,0,0,date('m'),date('d')-29,date('Y'));
                $end=mktime(23,59,59,date('m'),date('d'),date('Y'));
            };break;
            default:
                $start='';$end='';
        }
        return " between $start and $end ";
    }
    private function huanwei($total) {
        $total = empty($total)?'0':trim($total.' ');
        if(!strstr($total,'.')){
            $total=$total.'.00';
        }
        $len = strlen($total);
        if ($len>7) { // 万
            $total = (round(($total/10000),2)).'w';
        }
        return $total;
    }
		
	/*
	 * LTV统计
	 * @param integer $p  当前页
	 * @author 鹿文学
	 */
	public function ltv($p=1) {
		
		$page = intval($p);
		
		$page = $page ? $page : 1; //默认显示第一页数据
		
		if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
		
		$start = $_GET['start']= I('start',date('Y-m-d',strtotime('-30 day')));
		
		$end =  I('end',date('Y-m-d',strtotime('-1 day')));
		
		$end = strtotime($end)>=strtotime(date('Y-m-d'))?date('Y-m-d',strtotime('-1 day')):$end;
		
		$_GET['end'] = $end;
		
		$list = D('user')->ltv(strtotime($start),strtotime($end));
		
		$count = count($list);
		
		$data = array_slice($list,($page-1)*$row,$row,true);
		
		file_put_contents(dirname(__FILE__).'/access_data_ltv.txt',json_encode($list));
		

		$page = set_pagination($count,$row);
		if($page) {$this->assign('_page', $page);}
		
		
		$this->meta_title = 'LTV统计';
		
		$this->assign('data',$data);
		
		$this->display();
		
	}
	
	
	
}