You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

950 lines
41 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* 定时自动完成
* Created by PhpStorm.
* User: Administrator
* Date: 2017/3/22
* Time: 11:40
*/
namespace Admin\Controller;
use Admin\Model\SpendModel;
use Think\Think;
use Org\RedisSDK\Redis;
class AutoController extends Think {
public function run(){
//自动补单
$repair = new SpendModel();
$repair::auto_repair();
}
public function stat(){
$info = $this->sitestat();
$stat = $this->statistics();
//玩家注册
$data['player_regist_yes'] = $info['yesterday'];
$data['player_regist_tod'] = $info['today'];
$data['player_regist_week'] = $stat['realtime_data']['thisweek_user'];
$data['player_reigst_mon'] = $stat['realtime_data']['thismounth_user'];
$data['player_regist_all'] = $info['user'];
//玩家活跃
$data['act_yes'] = $info['ylogin'];
$data['act_tod'] = $info['tlogin'];
$data['act_seven'] = $info['ulogin'];
$data['act_week'] = $stat['realtime_data']['thisweek_active'];
$data['act_mon'] = $stat['realtime_data']['thismounth_active'];
//充值人数
$data['payer_yes'] = $info['yfufei'];
$data['payer_tod'] = $info['tfufei'];
$data['payer_all'] = $info['afufei'];
//充值
$data['pay_add_yes'] = $info['ysamount'];
$data['pay_add_tod'] = $info['tsamount'];
$data['pay_add_all'] = $info['asamount'];
//流水
$data['pay_tod'] = $stat['realtime_data']['today_pay'];
$data['pay_week'] = $stat['realtime_data']['thisweek_pay'];
$data['pay_mon'] = $stat['realtime_data']['thismounth_pay'];
$data['pay_all'] = $stat['platform_data']['all_pay'];
//游戏接入数量
$data['game_add_yes'] = $info['yadd'];
$data['game_add_tod'] = $info['tadd'];
$data['game_add_all'] = $info['game'];
$data['game_and_all'] = $stat['platform_data']['all_android'];
$data['game_ios_all'] = $stat['platform_data']['all_ios'];
//渠道增加数量
$data['pro_add_yes'] = $info['ypadd'];
$data['pro_add_tod'] = $info['tpadd'];
$data['pro_add_all'] = $info['promote'];
$data['pro_complete'] = $stat['platform_data']['all_promote'];
//渠道支付总数
$data['pro_pay_all'] = $stat['platform_data']['all_tpay'];
//推广渠道总数
$data['pro_player_all'] = $stat['platform_data']['all_tuser'];
//首页七天流水 七天注册统计
$data['seven_pay_min'] = $info['pay']['min'];
$data['seven_pay_max'] = $info['pay']['max'];
$data['seven_pay_data'] = $info['pay']['data'];
$data['seven_pay_cate'] = $info['pay']['cate'];
$data['seven_reg_min'] = $info['reg']['min'];
$data['seven_reg_max'] = $info['reg']['max'];
$data['seven_reg_data'] = $info['reg']['data'];
$data['seven_reg_cate'] = $info['reg']['cate'];
$data['create_time'] = time();
// 手续费
$data['poundage_all'] = $stat['poundage_all'];
M('Data','tab_')->add($data);
$this->launch_data();
}
public function sitestat(){
$user = M("User","tab_");
$userlogin = M("UserLoginRecord","tab_");
$game = M("Game","tab_");
$spend = M('Spend',"tab_");
$deposit = M('Deposit',"tab_");
$promote = M("Promote","tab_");
$yesterday = $this->total(5);
$today = $this->total(1);
$week = $this->total(9);
$month = $this->total(3);
$info['user'] = $user->where(['puid'=>0])->count();
$info['yesterday']= $user->where(['puid'=>0])->where("register_time".$yesterday)->count();
$info['today']= $user->where(['puid'=>0])->where("register_time".$today)->count();
$info['login']= $user->where(['puid'=>0])->where("login_time".$today)->count();
$info['game'] = $game->where(['apply_status'=>1,'online_status'=>1])->count();
$info['tadd'] = $game->where("create_time".$today)->where(['apply_status'=>1,'online_status'=>1])->count();
$info['yadd'] = $game->where("create_time".$yesterday)->where(['apply_status'=>1,'online_status'=>1])->count();
$samount = $spend->field('sum(pay_amount) as amount')->where("pay_status=1 and pay_way <> 0")->select();
if($samount[0]['amount']){
$info['samount']=$this->test($samount[0]['amount']);
}else{
$info['samount']=0;
}
$damount = $deposit->field('sum(pay_amount) as amount')->where("pay_status=1 and pay_way<>0")->select();
if($damount[0]['amount']){
$info['damount']=$damount[0]['amount']==''?0:$damount[0]['amount'];
}else{
$info['damount']=0;
}
//七日活跃
$wurel=$user
->field('id as user_id')
->where('register_time'.$week)
->select(false);
$ulogin=$userlogin
->field('user_id')
->where("login_time".$week)
->union($wurel)
->group('user_id')
->select();
//今日活跃
$turel=$user
->field('id as user_id')
->where('register_time'.$today)
->select(false);
$tlogin=$userlogin
->field('user_id')
->where("login_time".$today)
->union($turel)
->group('user_id')
->select();
//昨日活跃
$yurel=$user
->field('id as user_id')
->where('register_time'.$yesterday)
->select(false);
$ylogin=$userlogin
->field('user_id')
->where("login_time".$yesterday)
->union($yurel)
->group('user_id')
->select();
$ulogin=count($ulogin);
$tlogin=count($tlogin);
$ylogin=count($ylogin);
$info['ulogin'] = $ulogin;
$info['tlogin'] = $ylogin;
$info['ylogin'] = $tlogin;
//
// 付费玩家 游戏付费+平台币充值
//全部平台币充值
$abfufei = M('bind_recharge','tab_')->field('user_id')->where(array('pay_status'=>1))->group('user_id')->select(false);
$adfufei=$deposit
->field('user_id')
->where(array('pay_status'=>1))
->group('user_id')
->select(false);
//两表并集
$afufei=$spend
->field('user_id')
->union($abfufei)
->union($adfufei)
->where(array('pay_status'=>1,'pay_way'=>array('gt',0)))
->group('user_id')
->select();
//昨日平台币充值
$ybfufei = M('bind_recharge','tab_')->field('user_id')->where(array('pay_status'=>1,'_string'=>'create_time '.$yesterday))->group('user_id')->select(false);
$ydfufei=$deposit
->field('user_id')
->where("pay_status=1 and create_time".$yesterday)
->group('user_id')
->select(false);
//两表并集
$yfufei=$spend
->field('user_id')
->union($ybfufei)
->union($ydfufei)
->where("pay_status=1 and pay_time".$yesterday)
->group('user_id')
->select();
//今日平台币充值
$tbfufei = M('bind_recharge','tab_')->field('user_id')->where(array('pay_status'=>1,'_string'=>'create_time '.$today))->group('user_id')->select(false);
$tdfufei=$deposit
->field('user_id')
->where("pay_status=1 and create_time".$today)
->group('user_id')
->select(false);
//两表并集
$tfufei=$spend
->field('user_id')
->union($tbfufei)
->union($tdfufei)
->where("pay_status=1 and pay_time".$today)
->group('user_id')
->select();
$info['afufei']=count($afufei);
$info['yfufei']=count($yfufei);
$info['tfufei']=count($tfufei);
//
// 游戏充值
$asamount = $spend->field('sum(pay_amount) as amount')->where("pay_status=1 and pay_way >= 0")->find();
$tsamount = $spend->field('sum(pay_amount) as amount')->where("pay_status=1 and pay_way >= 0 and pay_time".$today)->find();
$ysamount = $spend->field('sum(pay_amount) as amount')->where("pay_status=1 and pay_way >= 0 and pay_time".$yesterday)->find();
$info['asamount'] = $asamount['amount']?$asamount['amount']:0;
$info['tsamount'] = $tsamount['amount']?$tsamount['amount']:0;
$info['ysamount'] = $ysamount['amount']?$ysamount['amount']:0;
$info['promote'] = $promote->count();
$info['tpadd'] = $promote->where("create_time".$today)->count();
$info['ypadd'] = $promote->where("create_time".$yesterday)->count();
$doc = D("Document");
$b =$this->cate("blog");
$m =$this->cate("media");
$blog = $doc->table("__DOCUMENT__ as d")
->where("d.status=1 and d.display=1 and d.category_id in (".$b.")")->count();
$media = $doc->table("__DOCUMENT__ as d")
->where("d.status=1 and d.display=1 and d.category_id in (".$m.")")->count();
$info['document'] = $this->test($blog + $media);
$info['blog']=$this->test($blog);
$info['media']=$this->test($media);
return $info;
}
public function auto_rrdae(){
var_dump("fenghuohuyu");
}
public function statistics(){
//定义表名
$user = M("User","tab_");
$userlogin = M("user_login_record","tab_");
$spend = M('Spend',"tab_");
$deposit = M('Deposit',"tab_");
$promote = M("Promote","tab_");
$game = M("Game","tab_");
$gamesource = M("Game_source","tab_");
$wgc = M('WithdrawGoldCoin','tab_');
$order = M('Order','tab_');
//平台数据概况
$platform_data['all_user']=$user->count();//累计注册玩家人数
//全部平台币充值
$adfufei=$deposit
->field('user_id')
->where(array('pay_status'=>1))
->group('user_id')
->select(false);
//两表并集
$afufei=$spend
->field('user_id')
->union($adfufei)
->where(array('pay_status'=>1))
->group('user_id')
->select();
$platform_data['all_pay_user']=count($afufei);//累计付费玩家人数包括平台币
//$spay=$spend->where(array('pay_status'=>1))->sum('pay_amount');
//$dpay=$deposit->where(array('pay_status'=>1))->sum('pay_amount');
$spendmap['pay_status']=1;
$bindRecharge_data = M('bind_recharge','tab_')->where($spendmap)->sum('real_amount');
$deposit_data = $deposit->where($spendmap)->sum('pay_amount');
$spendmap['pay_way']=array('gt',0);
$spend_data = $spend->where($spendmap)->sum('pay_amount');
$spay = $bindRecharge_data + $deposit_data + $spend_data;
$platform_data['all_pay']=$this->test($spay);//累计流水
$platform_data['all_promote']=$promote->where(array('status'=>1))->count();//累计渠道
$platform_data['all_game']=$game->where(['apply_status'=>1,'online_status'=>1])->count();//累计游戏
$platform_data['all_android']=$gamesource->where(array('file_type'=>1))->count();//累计安卓包
$platform_data['all_ios']=$gamesource->where(array('file_type'=>2))->count();//累计苹果包
$platform_data['all_tuser']=$user->where(array('promote_id'=>array('gt',0),'puid'=>0))->count();//累计渠道注册玩家
//$tspay=$spend->where(array('promote_id'=>array('gt',0)))->where(array('pay_status'=>1))->sum('pay_amount');//累计渠道充值玩家
//$dspay =$deposit->where(array('promote_id'=>array('gt',0)))->where(array('pay_status'=>1))->sum('pay_amount');
$pspendmap['pay_status']=1;
$pspendmap['promote_id']=array('neq',0);
$pbindRecharge_data = M('bind_recharge','tab_')->where($pspendmap)->sum('real_amount');
$pdeposit_data = $deposit->where($pspendmap)->sum('pay_amount');
$pspendmap['pay_way']=array('gt',0);
$pspend_data = $spend->where($pspendmap)->sum('pay_amount');
$tspay = $pbindRecharge_data + $pdeposit_data + $pspend_data;
$platform_data['all_tpay']=$this->test($tspay);//累计渠道总流水
$result['platform_data'] = $platform_data;
//实时数据概况
$today = $this->total(1);
$thisweek = $this->total(2);
$thismounth = $this->total(3);
//注册
$realtime_data['today_user']=$user->where(array('register_time'.$today))->count();//今日注册
$realtime_data['thisweek_user']=$user->where(array('register_time'.$thisweek))->count();//本周注册
$realtime_data['thismounth_user']=$user->where(array('register_time'.$thismounth))->count();//本月注册
//活跃
//今日活跃
$turel=$user
->field('id as user_id')
->where('register_time'.$today)
->select(false);
$tlogin=$userlogin
->field('user_id')
->where("login_time".$today)
->union($turel)
->group('user_id')
->select();
//本周活跃
$wurel=$user
->field('id as user_id')
->where('register_time'.$thisweek)
->select(false);
$wlogin=$userlogin
->field('user_id')
->where("login_time".$thisweek)
->union($wurel)
->group('user_id')
->select();
//本月活跃
$murel=$user
->field('id as user_id')
->where('register_time'.$thismounth)
->select(false);
$mlogin=$userlogin
->field('user_id')
->where("login_time".$thismounth)
->union($murel)
->group('user_id')
->select();
$realtime_data['today_active']=count($tlogin);
$realtime_data['thisweek_active']=count($wlogin);
$realtime_data['thismounth_active']=count($mlogin);
//充值
//今日流水
$todayspay=$spend->where(array('pay_time'.$today))->where(array('pay_status'=>1))->sum('pay_amount');
//$todaydpay=$deposit->where(array('create_time'.$today))->where(array('pay_status'=>1))->sum('pay_amount');
//$realtime_data['today_pay']=$this->test($todayspay+$todaydpay);
$realtime_data['today_pay']=$todayspay?$todayspay:0;
//本周流水
$weekspay=$spend->where(array('pay_time'.$thisweek))->where(array('pay_status'=>1))->sum('pay_amount');
//$weekdpay=$deposit->where(array('create_time'.$thisweek))->where(array('pay_status'=>1))->sum('pay_amount');
$realtime_data['thisweek_pay']=$weekspay?$weekspay:0;
//本月流水
$mounthspay=$spend->where(array('pay_time'.$thismounth))->where(array('pay_status'=>1))->sum('pay_amount');
//$mounthdpay=$deposit->where(array('create_time'.$thismounth))->where(array('pay_status'=>1))->sum('pay_amount');
$realtime_data['thismounth_pay']=$mounthspay?$mounthspay:0;
$result['realtime_data'] = $realtime_data;
// 手续费
$poundage_all = $wgc->where(['status'=>1])->sum('poundage');
$poundage_all2 = $order->where(['pay_status'=>1])->sum('poundage');
$result['poundage_all'] = floatval($poundage_all)+floatval($poundage_all2);
return $result;
}
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,date('m')-11,1,date('Y'));
$end=mktime(0,0,0,date('m')+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 ";
}
public function test($test){
return $test;
}
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;
}
private function cate($name) {
$cate = M("Category");
$c = $cate->field('id')->where("status=1 and display=1 and name='$name'")->buildSql();
$ca = $cate->field('id')->where("status=1 and display=1 and pid=$c")->select();
foreach($ca as $c) {
$d[]=$c['id'];
}
return "'".implode("','",$d)."'";
}
/**
* 投放平台数据自动汇总
* @author 鹿文学
*/
public function launch_data() {
$currentdate = mktime(0,0,0,date('m'),date('d'),date('Y'));
$launchrecordmodel = D('LaunchRecord');
$launchdatamodel = D('LaunchData');
/* 获取统计数据最新时间,比较是否今天,是则不执行,否则继续 */
$duration = $launchdatamodel->get_new_line_time();
if($duration<$currentdate) {
/* 判断时间是否为零,是则查询投放记录表,否则执行查找数据并插入 */
if($duration>0) {
$result = $launchrecordmodel->auto_data(strtotime(date('Y-m-d',$duration))+86400,$currentdate-1);
if(!empty($result)){
$launchdatamodel->addAll($result);
}
} else {
$recordtime = $launchrecordmodel->get_old_line_time();
/* 判断时间是否存在且小于今天,是则执行查找数据并插入,否则不执行 */
if($recordtime<$currentdate && $recordtime>0) {
$result = $launchrecordmodel->auto_data(strtotime(date('Y-m-d',$recordtime)),$currentdate-1);
if(!empty($result)){
$launchdatamodel->addAll($result);
}
}
}
}
}
function set_first_analysis_data($start='',$end=''){
G('begin');
//ltv和分析数据总览
$this->first_ltv($start,$end);
//分析数据游戏属性
$this->first_analysis1($start,$end);
//分析数据推广员属性
$this->first_analysis2($start,$end);
//分析数据游戏和推广员属性
$this->first_analysis3($start,$end);
G('end');
// ...也许这里还有其他代码
// 进行统计区间
echo G('begin','end').'s';
echo "执行完毕";
}
//LTV统计
private function first_ltv($start='',$end=''){
if(empty($start) || empty($end))exit('时间周期不正确');
$redis = new Redis(['host'=>'127.0.0.1','port'=>6379],[]);
$keys = $redis->keys('analysis_*');
if(!$keys){
get_redis_data();
}
$datelist = get_date_list(strtotime($start),strtotime($end));
foreach ($datelist as $k => $v) {
$ltv = M('ltv','tab_')->where(['time'=>$v])->field('id')->find();
if(!$ltv){
$data['time'] = $v;
$between = array('between',array(strtotime($v),strtotime($v)+86399));
//新增注册
$user = M('user','tab_')->field('id')->where(['register_time'=>$between])->select();
$data['new_count'] = count($user);
$data['new_id'] = implode(',',array_column($user,'id'));
//充值金额
$deposit = M('deposit','tab_')->field('sum(pay_amount) as money')
->where(['create_time'=>$between,'pay_status'=>1])
->find();
$spend = M('spend','tab_')->field('sum(pay_amount) as money')
->where(['pay_time'=>$between,'pay_status'=>1,'pay_way'=>['gt',0]])->find();
$data['money'] = $deposit['money']+$spend['money'];
//活跃玩家
$map['tab_user_login_record.login_time'] = $between;
$map['register_time'] = array('lt',strtotime($v));
$active1 = M('user','tab_')->distinct(true)->field('tab_user.id')
->join('tab_user_login_record on tab_user_login_record.user_id=tab_user.id','inner')
->where($map)->order('tab_user.id asc')->select();
$active = array_merge($active1,$user);
$data['active_count'] = count($active);
$data['active_id'] = implode(',',array_column($active,'id'));
$data['create_time'] = time();
M('ltv','tab_')->add($data);
M('analysis','tab_')->add($data);
$redis->set('analysis_'.$v,json_encode($data));
echo '执行时间:'.$v."<br/>";
}
}
}
private function first_analysis1($start='',$end=''){
set_time_limit(0);
if(empty($start) || empty($end))exit('时间周期不正确');
$redis = new Redis(['host'=>'127.0.0.1','port'=>6379],[]);
$keys = $redis->keys('analysis_*');
if(!$keys){
get_redis_data();
}
$datelist = get_date_list(strtotime($start),strtotime($end));
foreach ($datelist as $k => $v) {
$where['time'] = $v;
$where['game_id'] = array('gt',0);
$where['promote_id'] = 0;
$ltv = M('analysis','tab_')->where($where)->field('id')->find();
if(!$ltv){
$data['time'] = $v;
$between = array('between',array(strtotime($v),strtotime($v)+86399));
$map['tab_user_login_record.login_time'] = $between;
$map['game_id'] = array('gt',0);
//活跃玩家
$login_record = M('user_login_record','tab_')->distinct(true)->field('GROUP_CONCAT(distinct(user_id)) as user_id,game_id')
->where($map)->group('game_id')->order('game_id desc')->select();
foreach ($login_record as $key=>$value){
$analysis['time'] = $v;
$analysis['game_id'] = $value['game_id'];
$analysis['active_count'] = count(explode(',',$value['user_id']));
$analysis['active_id'] = $value['user_id'];
//新增注册
$condition['register_time'] = $between;
$condition['fgame_id'] = $value['game_id'];
$user = M('user','tab_')->field('id')->where($condition)->select();
$news = array_column($user,'id');
$analysis['new_count'] = count($news);
$analysis['new_id'] = implode(',',$news);
$analysis['create_time'] = time();
M('analysis','tab_')->add($analysis);
$redis->set('analysis_'.$v."_game_".$value['game_id'],json_encode($analysis));
}
}
}
}
private function first_analysis2($start='',$end=''){
set_time_limit(0);
if(empty($start) || empty($end))exit('时间周期不正确');
$redis = new Redis(['host'=>'127.0.0.1','port'=>6379],[]);
$keys = $redis->keys('analysis_*');
if(!$keys){
get_redis_data();
}
$datelist = get_date_list(strtotime($start),strtotime($end));
foreach ($datelist as $k => $v) {
$where['time'] = $v;
$where['game_id'] = 0;
$where['promote_id'] = array('gt',0);
$ltv = M('analysis','tab_')->where($where)->field('id')->find();
if(!$ltv){
$data['time'] = $v;
$between = array('between',array(strtotime($v),strtotime($v)+86399));
$map['tab_user_login_record.login_time'] = $between;
$map['promote_id'] = array('gt',0);
//活跃玩家
$login_record = M('user_login_record','tab_')->distinct(true)->field('GROUP_CONCAT(distinct(user_id)) as user_id,promote_id')
->where($map)->group('promote_id')->order('promote_id desc')->select();
foreach ($login_record as $key=>$value){
$analysis['time'] = $v;
$analysis['promote_id'] = $value['promote_id'];
$analysis['active_count'] = count(explode(',',$value['user_id']));
$analysis['active_id'] = $value['user_id'];
//新增注册
$condition['register_time'] = $between;
$condition['promote_id'] = $value['promote_id'];
$user = M('user','tab_')->field('id')->where($condition)->select();
$news = array_column($user,'id');
$analysis['new_count'] = count($news);
$analysis['new_id'] = implode(',',$news);
$analysis['create_time'] = time();
M('analysis','tab_')->add($analysis);
$redis->set('analysis_'.$v."_promote_".$value['promote_id'],json_encode($analysis));
}
}
}
}
private function first_analysis3($start='',$end=''){
set_time_limit(0);
if(empty($start) || empty($end))exit('时间周期不正确');
$redis = new Redis(['host'=>'127.0.0.1','port'=>6379],[]);
$keys = $redis->keys('analysis_*');
if(!$keys){
get_redis_data();
}
$datelist = get_date_list(strtotime($start),strtotime($end));
foreach ($datelist as $k => $v) {
$where['time'] = $v;
$where['game_id'] = array('gt',0);
$where['promote_id'] = array('gt',0);
$ltv = M('analysis','tab_')->where($where)->field('id')->find();
if(!$ltv){
$data['time'] = $v;
$between = array('between',array(strtotime($v),strtotime($v)+86399));
$map['tab_user_login_record.login_time'] = $between;
$map['game_id'] = array('gt',0);
$map['promote_id'] = array('gt',0);
//活跃玩家
$login_record = M('user_login_record','tab_')->distinct(true)->field('GROUP_CONCAT(distinct(user_id)) as user_id,promote_id,game_id')
->where($map)->group('promote_id,game_id')->order('promote_id desc,game_id desc')->select();
foreach ($login_record as $key=>$value){
$analysis['time'] = $v;
$analysis['promote_id'] = $value['promote_id'];
$analysis['game_id'] = $value['game_id'];
$analysis['active_count'] = count(explode(',',$value['user_id']));
$analysis['active_id'] = $value['user_id'];
//新增注册
$condition['register_time'] = $between;
$condition['promote_id'] = $value['promote_id'];
$condition['fgame_id'] = $value['game_id'];
$user = M('user','tab_')->field('id')->where($condition)->select();
$news = array_column($user,'id');
$analysis['new_count'] = count($news);
$analysis['new_id'] = implode(',',$news);
$analysis['create_time'] = time();
M('analysis','tab_')->add($analysis);
$redis->set('analysis_'.$v."_promote_".$value['promote_id']."_game_".$value['game_id'],json_encode($analysis));
}
}
}
}
public function set_analysis_data(){
set_time_limit(0);
echo date('Y-m-d H:i:s')."<br/>";
//ltv统计和分析数据的总统计
$this->ltv();
//分析数据游戏属性
$this->analysis1();
//分析数据推广员属性
$this->analysis2();
//分析数据游戏和推广员属性
$this->analysis3();
echo date('Y-m-d H:i:s')."<br/>";
echo "执行完毕";
}
private function ltv(){
set_time_limit(0);
$redis = new Redis(['host'=>'127.0.0.1','port'=>6379],[]);
$keys = $redis->keys('analysis_*');
if(!$keys){
get_redis_data();
}
$datelist = get_date_list(strtotime('-7 day'),strtotime('-1 day'));
foreach ($datelist as $k => $v) {
$ltv = M('ltv','tab_')->where(['time'=>$v])->field('id')->find();
if(!$ltv){
$data['time'] = $v;
$between = array('between',array(strtotime($v),strtotime($v)+86399));
//新增注册
$user = M('user','tab_')->field('id')->where(['register_time'=>$between])->select();
$data['new_count'] = count($user);
$data['new_id'] = implode(',',array_column($user,'id'));
//充值金额
$deposit = M('deposit','tab_')->field('sum(pay_amount) as money')
->where(['create_time'=>$between,'pay_status'=>1])
->find();
$spend = M('spend','tab_')->field('sum(pay_amount) as money')
->where(['pay_time'=>$between,'pay_status'=>1,'pay_way'=>['gt',0]])->find();
$data['money'] = $deposit['money']+$spend['money'];
//活跃玩家
$map['tab_user_login_record.login_time'] = $between;
$map['register_time'] = array('lt',strtotime($v));
$active1 = M('user','tab_')->distinct(true)->field('tab_user.id')
->join('tab_user_login_record on tab_user_login_record.user_id=tab_user.id','inner')
->where($map)->order('tab_user.id asc')->select();
$active = array_merge($active1,$user);
$data['active_count'] = count($active);
$data['active_id'] = implode(',',array_column($active,'id'));
$data['create_time'] = time();
M('ltv','tab_')->add($data);
M('analysis','tab_')->add($data);
$redis->set('analysis_'.$v,json_encode($data));
}
}
}
private function analysis1(){
set_time_limit(0);
$redis = new Redis(['host'=>'127.0.0.1','port'=>6379],[]);
$keys = $redis->keys('analysis_*');
if(!$keys){
get_redis_data();
}
$datelist = get_date_list(strtotime('-7 day'),strtotime('-1 day'));
foreach ($datelist as $k => $v) {
$where['time'] = $v;
$where['game_id'] = array('gt',0);
$where['promote_id'] = 0;
$ltv = M('analysis','tab_')->where($where)->field('id')->find();
if(!$ltv){
$data['time'] = $v;
$between = array('between',array(strtotime($v),strtotime($v)+86399));
$map['tab_user_login_record.login_time'] = $between;
$map['game_id'] = array('gt',0);
//活跃玩家
$login_record = M('user_login_record','tab_')->distinct(true)->field('GROUP_CONCAT(distinct(user_id)) as user_id,game_id')
->where($map)->group('game_id')->order('game_id desc')->select();
foreach ($login_record as $key=>$value){
$analysis['time'] = $v;
$analysis['game_id'] = $value['game_id'];
$analysis['active_count'] = count(explode(',',$value['user_id']));
$analysis['active_id'] = $value['user_id'];
//新增注册
$condition['register_time'] = $between;
$condition['fgame_id'] = $value['game_id'];
$user = M('user','tab_')->field('id')->where($condition)->select();
$news = array_column($user,'id');
$analysis['new_count'] = count($news);
$analysis['new_id'] = implode(',',$news);
$analysis['create_time'] = time();
M('analysis','tab_')->add($analysis);
$redis->set('analysis_'.$v."_game_".$value['game_id'],json_encode($analysis));
}
}
}
}
private function analysis2(){
set_time_limit(0);
$redis = new Redis(['host'=>'127.0.0.1','port'=>6379],[]);
$keys = $redis->keys('analysis_*');
if(!$keys){
get_redis_data();
}
$datelist = get_date_list(strtotime('-7 day'),strtotime('-1 day'));
foreach ($datelist as $k => $v) {
$where['time'] = $v;
$where['game_id'] = 0;
$where['promote_id'] = array('gt',0);
$ltv = M('analysis','tab_')->where($where)->field('id')->find();
if(!$ltv){
$data['time'] = $v;
$between = array('between',array(strtotime($v),strtotime($v)+86399));
$map['tab_user_login_record.login_time'] = $between;
$map['promote_id'] = array('gt',0);
//活跃玩家
$login_record = M('user_login_record','tab_')->distinct(true)->field('GROUP_CONCAT(distinct(user_id)) as user_id,promote_id')
->where($map)->group('promote_id')->order('promote_id desc')->select();
foreach ($login_record as $key=>$value){
$analysis['time'] = $v;
$analysis['promote_id'] = $value['promote_id'];
$analysis['active_count'] = count(explode(',',$value['user_id']));
$analysis['active_id'] = $value['user_id'];
//新增注册
$condition['register_time'] = $between;
$condition['promote_id'] = $value['promote_id'];
$user = M('user','tab_')->field('id')->where($condition)->select();
$news = array_column($user,'id');
$analysis['new_count'] = count($news);
$analysis['new_id'] = implode(',',$news);
$analysis['create_time'] = time();
M('analysis','tab_')->add($analysis);
$redis->set('analysis_'.$v."_promote_".$value['promote_id'],json_encode($analysis));
}
}
}
}
private function analysis3(){
set_time_limit(0);
$redis = new Redis(['host'=>'127.0.0.1','port'=>6379],[]);
$keys = $redis->keys('analysis_*');
if(!$keys){
get_redis_data();
}
$datelist = get_date_list(strtotime('-7 day'),strtotime('-1 day'));
foreach ($datelist as $k => $v) {
$where['time'] = $v;
$where['game_id'] = array('gt',0);
$where['promote_id'] = array('gt',0);
$ltv = M('analysis','tab_')->where($where)->field('id')->find();
if(!$ltv){
$data['time'] = $v;
$between = array('between',array(strtotime($v),strtotime($v)+86399));
$map['tab_user_login_record.login_time'] = $between;
$map['game_id'] = array('gt',0);
$map['promote_id'] = array('gt',0);
//活跃玩家
$login_record = M('user_login_record','tab_')->distinct(true)->field('GROUP_CONCAT(distinct(user_id)) as user_id,promote_id,game_id')
->where($map)->group('promote_id,game_id')->order('promote_id desc,game_id desc')->select();
foreach ($login_record as $key=>$value){
$analysis['time'] = $v;
$analysis['promote_id'] = $value['promote_id'];
$analysis['game_id'] = $value['game_id'];
$analysis['active_count'] = count(explode(',',$value['user_id']));
$analysis['active_id'] = $value['user_id'];
//新增注册
$condition['register_time'] = $between;
$condition['promote_id'] = $value['promote_id'];
$condition['fgame_id'] = $value['fgame_id'];
$user = M('user','tab_')->field('id')->where($condition)->select();
$news = array_column($user,'id');
$analysis['new_count'] = count($news);
$analysis['new_id'] = implode(',',$news);
$analysis['create_time'] = time();
M('analysis','tab_')->add($analysis);
$redis->set('analysis_'.$v."_promote_".$value['promote_id']."_game_".$value['game_id'],json_encode($analysis));
}
}
}
}
//根据时间统计玩家充值
public function userPlayDataCount()
{
$time = strtotime(date('Y-m-d 00:00:00', time() - (3600 * 24)));
$res = M('user_play_data_count', 'tab_')->where(array('create_time' => $time))->find();
if (empty($res)) {
$map['pay_time'] = ['between', [$time, strtotime(date('Y-m-d 23:59:59', $time))]];
$this->userPlayDataCountByMap($map);
}
}
//根据时间统计玩家充值--初始化
public function userPlayDataCountInitial()
{
$res = M('user_play_data_count', 'tab_')->order('id asc')->find();
if (empty($res)) {
$time = strtotime(date('Y-m-d 00:00:00', time()));
$map['pay_time'] = ['lt', $time];
$this->userPlayDataCountByMap($map);
echo '初始化成功';
} else {
echo '表存在记录,无法初始化';
}
}
private function userPlayDataCountByMap($map)
{
if (isset($map['pay_time'])) {
$map['pay_status'] = 1;
$map['pay_game_status'] = 1;
$map['game_player_id'] = ['gt', 0];
$field = 'FROM_UNIXTIME(pay_time, "%Y-%m-%d") as day,promote_id,user_id,game_id,server_id,game_player_id,sum(pay_amount) as recharge_cost,count(id) as recharge_count';
$spendData = M('spend', 'tab_')->field($field)
->where($map)
->group('day,game_player_id,server_id,game_id,user_id,promote_id')
->select();
if (!empty($spendData)) {
$data = [];
foreach ($spendData as $list) {
$save['promote_id'] = $list['promote_id'];
$save['user_id'] = $list['user_id'];
$save['game_id'] = $list['game_id'];
$save['server_id'] = $list['server_id'];
$save['role_id'] = $list['game_player_id'];
$save['recharge_cost'] = $list['recharge_cost'];
$save['recharge_count'] = $list['recharge_count'];
$save['create_time'] = strtotime($list['day']);
$data[] = $save;
}
M('user_play_data_count', 'tab_')->addAll($data);
}
}
}
}