| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | <?phpnamespace Admin\Controller;use Think\Model;/** * 样式管理 * @author   brent * @version  0.0.1 */class StatisticController extends CommonController{    protected $table = ''; //表名	/**	 * [_initialize 前置操作-继承公共前置方法]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-03T12:39:08+0800	 */	public function _initialize()	{		// 调用父类前置方法		parent::_initialize();		// 登录校验		$this->Is_Login();		// 权限校验		$this->Is_Power();		//要执行的表		$this->table = M('iptv_users');	}    public function orderData()    {        $start = I('start_time',date('Y-m-d',strtotime('-8 day', time())));        $end = I('end_time',date('Y-m-d'));//        $start = '2019-10-10';//        $end   = '2019-10-17';        $start_date = date('Ymd',strtotime($start));        $end_date = date('Ymd',strtotime($end));        $where['date(created_at)'] = ['between',[$start,$end]];        $pvs = []; $uvs =[]; $times = [];        for ($i=0;$i<=9;$i++) {            # code...            if($i==0){                $table = 'iptv_user_login_log';            }else{                $table = 'iptv_user_login_log_'.$i;            }            $tmp_pvs   = M($table)->where($where)->group('day')->getField('date(created_at) as day,count(*) as total');            $tmp_uvs   = M($table)->where($where)->group('day')->getField('date(created_at) as day,count(distinct(uid)) as total');            foreach ($tmp_pvs as $date => $val) {                if(isset($pvs[$date])){                    $pvs[$date] = $pvs[$date] + $val;                }else{                    $pvs[$date] = $val;                }            }            foreach ($tmp_uvs as $date => $val) {                if(isset($uvs[$date])){                    $uvs[$date] = $uvs[$date] + $val;                }else{                    $uvs[$date] = $val;                }            }        }        unset($where);        $where['date'] = ['between',[$start_date ,$end_date]];        $where['status'] = 0;        $orders = M('iptv_order_own')->where($where)->group('date')->getField('date,count(distinct(uid)) as total');//        dump($orders);        $where['status'] = 2;        $pre_orders = M('iptv_order_own')->where($where)->group('date')->getField('date,count(distinct(uid)) as total');        $pre_orders_counts = M('iptv_order_own')->where($where)->group('date')->getField('date,count(*) as total');        unset($where);        $where['status'] =99;        $cancel_orders = M('iptv_order_own')->where($where)->group('date')->getField('date,count(distinct(uid)) as total');        //新增用户数        unset($where);        $where['date(created_at)'] = ['between',[$start,$end]];        $addusers = M('iptv_users')->where($where)->group('day')->getField('date(created_at) as day,count(*) as total');//        dump($pre_orders);        // $play_time_sum = M('statistic_source')->where(['date'=>])        //播放时长        // var_dump($addusers);        while ($start_date <= $end_date){            $dates[] = date('Y-m-d',strtotime($start_date));            $start_date = date('Ymd',(strtotime($start_date)+24*3600));        }        $dates = array_reverse($dates);        foreach ($dates as $date){        	$where['created_at'] = ['elt',date('Y-m-d 23:59:59',strtotime($date))];             $data[] = [                'date'=>$date,                'pv'=>$pvs[$date] ?:0,                'uv'=>$uvs[$date]?:0,                'order'=>$orders[date('Ymd',strtotime($date))]?:0,                'pre_order'=>$pre_orders[date('Ymd',strtotime($date))]?:0,                'pre_order_count'=>$pre_orders_counts[date('Ymd',strtotime($date))] ? :0,                'cancel_order'=>$cancel_orders[date('Ymd',strtotime($date))] ? : 0,                'add_user'=>$addusers[$date] ? : 0,                'user_sum'=>M('iptv_users')->where($where)->order('user_id desc')->limit(1)->getField('user_id')            ];            // echo M()->getlastSQL();die;        }        // dump($data);        if(I('model')){            $title = array(                'date'                      =>  array('col' => 'A', 'name' => '日期'),                'pv'                        =>  array('col' => 'B', 'name' => 'pv'),                'uv'                        =>  array('col' => 'C', 'name' => 'uv'),                'order'                     =>  array('col' => 'D', 'name' => '订购数'),                'cancel_order'              =>  array('col' => 'E', 'name' => '退订数'),                'pre_order'                 =>  array('col' => 'F', 'name' => '预订购(去重)'),                'pre_order_count'           =>  array('col' => 'G', 'name' => '预订购'),                'add_user'					=>  array('col'	=> 'I',	'name' => '新增用户'	),                'user_sum'					=>  array('col'	=> 'J',	'name' => '累计用户'	)            );            // Excel驱动导出数据            $excel = new \My\Excel(array('filename' => '金鹰电竞运营数据'.$start.'至'.$end, 'title' => $title, 'data' => $data, 'msg' => L('common_not_data_tips')));            $excel->Export();            die;        }        $this->assign('start_time',$start);        $this->assign('end_time',$end);        $this->assign('dates',$dates);        $this->assign('data',$data);        $this->display();    }	}
 |