diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..ae0aa1f71 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Listen for XDebug", + "type": "php", + "request": "launch", + "port": 9000 + }, + { + "name": "Launch currently open script", + "type": "php", + "request": "launch", + "program": "${file}", + "cwd": "${fileDirname}", + "port": 9000 + } + ] +} \ No newline at end of file diff --git a/Application/Admin/Controller/IndexChartSetController.class.php b/Application/Admin/Controller/IndexChartSetController.class.php new file mode 100644 index 000000000..691eff18f --- /dev/null +++ b/Application/Admin/Controller/IndexChartSetController.class.php @@ -0,0 +1,286 @@ + +// +---------------------------------------------------------------------- + +namespace Admin\Controller; +use User\Api\UserApi as UserApi; + +/** + * 后台首页控制器 + * @author 麦当苗儿 + */ +class IndexChartSetController extends AdminController { + + public $beginTime; + public $endTime; + public $date; + public $nowdata; + public $UserModel; + public $ChartModel; + public $LoginModel; + public $SpendModel; + public $PromoteModel; + public $addid; + public $adddata; + public $reset=false; + + public function _initialize(){ + //初始化 + + $this->UserModel =M("User","tab_"); + $this->ChartModel =M("IndexChart","tab_"); + $this->LoginModel =M("user_login_record","tab_"); + $this->SpendModel =M("spend","tab_"); + $this->PromoteModel =M("promote","tab_"); + $this->nowdata =time(); + if(I("reset")) $this->reset = true; + + } + /** + * 每日更新接口 + */ + public function setChartCount() + { + $begin = date("Y-m-d",strtotime("-1 day")); + $this->setDateCount($begin); + } + + public function setFreeDateCount($begin,$end='') + { + if($end == '') $end = $begin; + //判断日期格式 + $patten = "/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])$/"; + if (!preg_match($patten, $begin)) { + die("开始时间格式错误"); + } + if (!preg_match($patten, $end)) { + die("结束时间格式错误"); + } + if(strtotime($end) < strtotime($begin)){ + die("结束时间不能比开始时间小"); + } + if(strtotime($end)+86399 > time()){ + die("结束时间不能包含今日"); + } + if($begin == $end){ + $this->setDateCount($begin); + }else{ + $starttime = $begin?strtotime($begin):mktime(0,0,0,date('m'),date('d')-1,date('Y')); + $endtime = $end?strtotime($end)+86399:$starttime+86399; + $datelist = get_date_list($starttime,$endtime,1); + $countdate = count($datelist); + for($i=0;$i<$countdate;$i++){ + $this->setDateCount($datelist[$i]); + } + } + + } + // + public function setDateCount($date) + { + $this->date = $date; + $tarry = explode('-',$date); + $this->beginTime=mktime(0,0,0,$tarry[1],$tarry[2],$tarry[0]); + $this->endTime=mktime(0,0,0,$tarry[1],$tarry[2]-0+1,$tarry[0])-1; + + set_time_limit(0); + $t1 = microtime(true); + //判断是否存在 + $res = $this->ChartModel->where("date = '{$this->beginTime}'")->find(); + $reset=''; + if(!empty($res)){ + if($this->reset){ + $this->ChartModel->where("date = '{$this->beginTime}'")->delete(); + $reset = "reset and creat "; + }else{ + echo ("{$this->date} 已统计,请勿重复 ".PHP_EOL); + return; + } + + } + + $this->newUser(); + $this->activeUser(); + $this->payUser(); + $this->payMoney(); + $this->promoteNew(); + $this->allCount(); + $this->createDb(); + + $t2 = microtime(true); + echo ("{$this->date} {$reset}success runtime:".round($t2-$t1,3).'s'.PHP_EOL); + # code... + } + //获取每日的增长用户 + public function newUser() + { + $map = ['register_time'=>['between',[$this->beginTime,$this->endTime]],"puid"=>0];//0不是小号 + $hoursnews = $this->UserModel->field('FROM_UNIXTIME(register_time, "%H") as time,COUNT(1) AS news') + ->where($map) + ->group("time") + ->select(); + $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']; + $user_hours = array(); + foreach($hours as $v) { + $user_hours[$v] = 0; + } + foreach($hoursnews as $h) { + $user_hours[$h['time']] = (integer)$h['news']; + } + $this->adddata["new_user_hours"] = serialize($user_hours); + unset($user_hours); + //获取当日所有的注册用户 + $userList = $this->UserModel->field('count(1) count') + ->where($map) + ->find(); + $this->adddata["new_user_count"] = $userList['count']; + } + + /** + * 活跃用户计算 + */ + public function activeUser() + { + $map = ['login_time'=>['between',[$this->beginTime,$this->endTime]]];//0不是小号 + $hoursnews = $this->LoginModel->field('FROM_UNIXTIME(login_time, "%H") as time,COUNT(DISTINCT user_id) AS active') + ->where($map) + ->group("time") + ->select(); + $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']; + $user_hours = array(); + foreach($hours as $v) { + $user_hours[$v] = 0; + } + foreach($hoursnews as $h) { + $user_hours[$h['time']] = (integer)$h['active']; + } + $this->adddata["active_user_hours"] = serialize($user_hours); + unset($user_hours); + //获取活跃用户列表 + $activeCount = $this->LoginModel->field('user_id') + ->where($map) + ->group('user_id') + ->select(); + + $this->adddata["active_user_count"] = count($activeCount); + $this->adddata["active_user_list"] = serialize(array_column($activeCount,'user_id')); + unset($activeCount); + } + /** + * 计算充值用户 + */ + public function payUser() + { + $map = ['pay_time'=>['between',[$this->beginTime,$this->endTime]],'pay_status'=>1];//1支付成功 + $hoursnews = $this->SpendModel->field('FROM_UNIXTIME(pay_time, "%H") as time,COUNT(DISTINCT user_id) AS payuser') + ->where($map) + ->group("time") + ->select(); + $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']; + $user_hours = array(); + foreach($hours as $v) { + $user_hours[$v] = 0; + } + foreach($hoursnews as $h) { + $user_hours[$h['time']] = (integer)$h['payuser']; + } + $this->adddata["pay_user_hours"] = serialize($user_hours); + unset($user_hours); + $activeCount = $this->SpendModel->field('user_id') + ->where($map) + ->group('user_id') + ->select(); + + $this->adddata["pay_user_count"] = count($activeCount); + $this->adddata["pay_user_list"] = serialize(array_column($activeCount,'user_id')); + unset($activeCount); + } + /** + * 充值金额计算 + */ + public function payMoney() + { + $map = ['pay_time'=>['between',[$this->beginTime,$this->endTime]],"pay_status"=>1];//1支付成功 + $hoursnews = $this->SpendModel->field('FROM_UNIXTIME(pay_time, "%H") as time,sum(pay_amount) AS money') + ->where($map) + ->group("time") + ->select(); + + + $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']; + $user_hours = array(); + foreach($hours as $v) { + $user_hours[$v] = 0; + } + foreach($hoursnews as $h) { + $user_hours[$h['time']] = (integer)$h['money']; + } + $this->adddata["pay_money_hours"] = serialize($user_hours); + unset($user_hours); + + $activeCount = $this->SpendModel->field('sum(pay_amount) AS money') + ->where($map) + ->find(); + $this->adddata["pay_money_count"] = $activeCount['money']?:0; + } + /** + * 新增推广 + */ + public function promoteNew() + { + $map = ['create_time'=>['between',[$this->beginTime,$this->endTime]]]; + $hoursnews = $this->PromoteModel->field('FROM_UNIXTIME(create_time, "%H") as time,COUNT(1) AS news') + ->where($map) + ->group("time") + ->select(); + + + $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']; + $user_hours = array(); + foreach($hours as $v) { + $user_hours[$v] = 0; + } + foreach($hoursnews as $h) { + $user_hours[$h['time']] = (integer)$h['news']; + } + $this->adddata["promote_new_hours"] = serialize($user_hours);//promote_new_hours + unset($user_hours); + + $activeCount = $this->PromoteModel->field('COUNT(1) AS news') + ->where($map) + ->find(); + $this->adddata["promote_new_count"] = $activeCount['news']; + } + + /** + * 统计其他综合信息 + * 1. 7天活跃 + * 2. 平台累计用户 + * 3. 累计付费用户 + */ + public function allCount() + { + $user = D('User'); + $spend = D('Spend'); + $promote = D('Promote'); + $allcount = array(); + $allcount['user_count'] = $user->old(); + $allcount['active_count'] =$user->active(['tab_user_login_record.login_time'=>['between',[mktime(0,0,0,date('m'),date('d')-7,date('Y')),mktime(0,0,0,date('m'),date('d'),date('Y'))-1]]]); + $allcount['player_count'] =$spend->player(); + $allcount['money_sum'] =$spend->totalAmount(); + $allcount['promote_sum'] =$promote->total(); + $this->adddata["all_count"] = serialize($allcount); + } + public function createDb() + { + $this->adddata['date']=$this->beginTime; + $this->adddata['create_time']=$this->nowdata; + $this->ChartModel->add($this->adddata); + } + +} diff --git a/Application/Admin/Controller/IndexController.class.php b/Application/Admin/Controller/IndexController.class.php index f0508f406..1cbe5477d 100644 --- a/Application/Admin/Controller/IndexController.class.php +++ b/Application/Admin/Controller/IndexController.class.php @@ -16,20 +16,13 @@ use Base\Repository\UserRepository; * @author 麦当苗儿 */ class IndexController extends AdminController { - - public function test() - { - $content = 'MDAwMDAwMDAwMJndsKKZZYuXeqCgy324cpebidDdi6mplZy2vKCFdqeagKewp5CKas6JaJ3Nec6fnYWvzM59qK2im5OfZZGrq2d9zqeig3aD0IqNYs6IlnarmnzR0HrP0puGt7B2hqysdoLe0n-FeIKUfnqCl33edZ2DeK_VlJacnJvPvJycebiXlpewpJGLg9eVjWLOk815aoCfqs59qK2skrqwZpKKrJeW0aytkYaCmHqfetV50oaukY2vy5K8tJuHy69nhXWrpH3StKSYZHKUi4573JG7aamAn9TOfs6spYHQuKScedqdfc7VopBlctZ9pJnSipeGrpF82NqVrbmlmpSbopGfqKeOq6yvj2Sxk3-NhtqKqqhlha-ymYrR22OG3L9ohnjaYoKWvKKFZLGTf32Gln-3mJebiczei8_PlZy2v2eHibCUmLjJsoV3oNJ6n6jLiZZpn5GIrpt6z6ibhKWwq5ufzpuOt69vhHZt2X6JqMuJ0oKpkGee2JOYrJuHy6-thYmrqY67r6KDdoPcimiZzpK7hZ2Gnq-Zi5ilpZG6uKGaZayll5a4q4CcsMuLaHfWirppq5l8q5qLva2Yms-sqJKFq2d9za-sgKBqzX-MatyRu5SpgJ_Uzn-svZyRz79phpyknI64p2mRnZyXio2G3H2onKGRn8nQgLy8qYXPv6uGrKeagKewpZx7i86To4LLf816rpGNr5eLva18kqaWrp56uKuOvLCDkXdp2n56dtqT3n6rhZ-mmYC5vWqbqrCqknq4m5ip0qSHh37bfoqGlH7ehWiFr77dgKispYHPrJ6RZJtiltK3ooacg5KLjn-Sfbh5roV5upd6ztqbkpSsqJKIm6aNu5elgJ2oy4l-hpOKuHafj326mH7fy5uQqrtnhpzJYYysu2yRioKViX6Gkoq4l2mCe92WgKmtn4e43mWGnMVmjZXeaoWtgpKAeZzLfKd6pJlos8uV0rmrm5TSqpqbq2d9zquuhHZt2XqfqMuTq3Zpj2ee3ousuauQlJtlmomsnZfNr2-An4ezibB62X24m6uGiaaVfrnGqYWmq2iPnLB3jt2vrIChe8qWjGrclKt2ZJuNss6Az6SlgdConJ2Im2SNvNGihp2c1Xqkf9mKu2Wfj2fR3HrP0puGttGphoa7poG4p66FrYrLl4dunw'; - $request=json_decode(think_decrypt($content),true); - var_dump($request); - } - - /** + /** * 后台首页 - * @author 麦当苗儿 + * @author cz */ - public function index(){ - if(session('user_auth.uid')){ + 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') @@ -49,122 +42,171 @@ class IndexController extends AdminController { // 日历 $this->calendar(); - - // 折线图 - $this->foldLineDiagram($_REQUEST['start'],$_REQUEST['end'],$_REQUEST['num']); - - $userRepository = new UserRepository(); - $activeCount = $userRepository->getActiveUserCountRecently(7); - + 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 = M("IndexChart","tab_")->field("all_count")->where("`date` = '{$tm}'")->find(); + $allcount = unserialize($allcount['all_count']); - // 累计数据 - $user = D('User'); - $spend = D('Spend'); - $promote = D('Promote'); - $this->assign('user_count', $user->old()); - // $this->assign('active_count', $user->active(['tab_user_login_record.login_time'=>['between',[mktime(0,0,0,date('m'),date('d')-7,date('Y')),mktime(0,0,0,date('m'),date('d'),date('Y'))-1]]])); - $this->assign('active_count', $activeCount); - $this->assign('player_count', $spend->player()); - $this->assign('money_sum', $spend->totalAmount()); - $this->assign('promote_sum', $promote->total()); - - $this->display(); - } - - /* - * 日历 - * @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'); + $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')); - 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'));} + $endtime = $starttime+86399; - $iscurrent = $end != date('Y-m')?1:0; // 默认是当前月,不可进入下一个月 + $start = date('Y-m-d',$starttime); + $end = date('Y-m-d',$endtime); - $stime = strtotime($start); - $etime = strtotime($end); + $user = D('User'); + $spend = D('Spend'); + $promote = D('Promote'); - $sw = date('w',$stime); // 周几 - $ew = date('w',$etime); - $sw = $sw == 0? 6:(integer)$sw-1; - $ew = $ew == 0? 6:(integer)$ew-1; + + if ($start == date('Y-m-d',strtotime('-1 day'))) {$num = 2;} - $st = date('t',$stime); // 天数 - $et = date('t',$etime); + $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']; - $sf = $ef = $sr = $er = 1; // 行数 ,日期起始值 + $data['date'] = [$start]; - 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++; - } - } - } + $data['hours'] = 1; - $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++; + foreach($hours as $v) { + $data['news'][$v] = 0; + $data['active'][$v] = 0; + $data['player'][$v] = 0; + $data['money'][$v] = 0; } - $prev = date('Y-m',strtotime('-1 month',$stime)).','.$start; - $next = $end.','.date('Y-m',strtotime('+1 month',$etime)); + // 新增用户 + $hoursnews = $user->newsAdd(['register_time'=>['between',[$starttime,$endtime]]],'news','time',5); - $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')]; + // 活跃用户 + $hoursactive = $user->totalPlayerByGroup($hours,['tab_user_login_record.login_time'=>['between',[$starttime,$endtime]]],'active','time',5); - if ($flag) { + // 付费用户 + $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; + } + } - echo json_encode($calendar); + foreach($hoursactive as $h) { + + if ($h['time'] == $v){ + $data['active'][$v] = (integer)$h['active'];break; + } + } - } else { + foreach($hoursplayer as $h) { + $time = explode(' ',$h['time']); + if ($time[1] == $v){ + $data['player'][$v] = (integer)$h['player'];break; + } + } - $this->assign('calendar',$calendar); + 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; - /* - * 折线图 - * @param integer $start 开始时间 - * @param integer $end 结束时间 - * @param boolean $flag 是否ajax返回 - * @author 鹿文学 - */ - public function foldLineDiagram($start='',$end='',$num='',$flag=false) { + if ($flag) { - $starttime = $start?strtotime($start):mktime(0,0,0,date('m'),date('d')-1,date('Y')); + 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; @@ -175,238 +217,144 @@ class IndexController extends AdminController { $spend = D('Spend'); $promote = D('Promote'); - if ($start == $end) { + if ($start == $end) { // 单天 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)); + $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'] = unserialize($dbdata["new_user_hours"]); + $data['active'] = unserialize($dbdata["active_user_hours"]); + $data['player']=unserialize($dbdata["pay_user_hours"]); + $data['money']=unserialize($dbdata["pay_money_hours"]); + + //获取昨天 + $ytm = $starttime-86400; + $ydbdata = M("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; - foreach($datelist as $k => $v) { - $data['news'][$v] = 0; - $data['active'][$v] = 0; - $data['player'][$v] = 0; - $data['money'][$v] = 0; - } - - // 新增用户 - $news = $user->newsAdd(['register_time'=>['between',[$starttime,$endtime]]],'news','time',$num==7?2:1); - - // 活跃用户 - $active = $user->totalPlayerByGroup($datelist,['tab_user_login_record.login_time'=>['between',[$starttime,$endtime]]],'active','time',$num==7?2:1); - - // 付费用户 - $player = $spend->totalPlayerByGroup(['pay_time'=>['between',[$starttime,$endtime]]],'player','time',$num==7?2:1); - - // 充值金额 - $money = $spend->totalAmountByGroup(['pay_time'=>['between',[$starttime,$endtime]]],'money','time',$num==7?2:1); - - foreach($datelist as $v) { - foreach($news as $h) { - if ($v == $h['time']) { - $data['news'][$v] = (integer)$h['news'];break; - } - } - - foreach($active as $h) { - if ($v == $h['time']) { - $data['active'][$v] = (integer)$h['active'];break; - } - } - - foreach($player as $h) { - if ($v == $h['time']) { - $data['player'][$v] = (integer)$h['player'];break; - } - } - - foreach($money as $h) { - if ($v == $h['time']) { - $data['money'][$v] = $h['money'];break; - } - } - + $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,active_user_list,pay_user_count,pay_user_list,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']; + $active_user_list += unserialize($v['active_user_list']); + unset($v['active_user_list']); + unset($dbdata[$k]['active_user_list']); + $pay_user_list += unserialize($v['pay_user_list']); + 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']; } - - - // 新 - $cnewslist1 = $user->old(['register_time'=>['between',[$starttime,$endtime]]]); - // 活 - $cactivelist1 = $user->active(['tab_user_login_record.login_time'=>['between',[$starttime,$endtime]]]); - // 付 - $cplayerlist1 = $spend->player(['pay_time'=>['between',[$starttime,$endtime]]]); - // 充 - $cmoneylist1 = $spend->totalAmount(['pay_time'=>['between',[$starttime,$endtime]]]); - // 渠 - $cpromotelist1 = $promote->total(['create_time'=>['between',[$starttime,$endtime]]]); + 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)]]; - - $cnewslist2 = $user->old(['register_time'=>$between]); - - $cactivelist2 = $user->active(['tab_user_login_record.login_time'=>$between]); - - $cplayerlist2 = $spend->player(['pay_time'=>$between]); - - $cmoneylist2 = $spend->totalAmount(['pay_time'=>$between]); - - $cpromotelist2 = $promote->total(['create_time'=>$between]); };break; case 4:{ $temp = strtotime('-1 month',$starttime); $between = ['between',[$temp,mktime(0,0,0,date('m',$temp)+1,1,date('Y',$temp))-1]]; - $cnewslist2 = $user->old(['register_time'=>$between]); - $cactivelist2 = $user->active(['tab_user_login_record.login_time'=>$between]); - $cplayerlist2 = $spend->player(['pay_time'=>$between]); - $cmoneylist2 = $spend->totalAmount(['pay_time'=>$between]); - $cpromotelist2 = $promote->total(['create_time'=>$between]); + };break; case 5:{ $between = ['between',[strtotime('-7 day',$starttime),strtotime('-7 day',$endtime)]]; - $cnewslist2 = $user->old(['register_time'=>$between]); - $cactivelist2 = $user->active(['tab_user_login_record.login_time'=>$between]); - $cplayerlist2 = $spend->player(['pay_time'=>$between]); - $cmoneylist2 = $spend->totalAmount(['pay_time'=>$between]); - $cpromotelist2 = $promote->total(['create_time'=>$between]); + };break; case 6:{ $between = ['between',[strtotime('-30 day',$starttime),strtotime('-30 day',$endtime)]]; - $cnewslist2 = $user->old(['register_time'=>$between]); - $cactivelist2 = $user->active(['tab_user_login_record.login_time'=>$between]); - $cplayerlist2 = $spend->player(['pay_time'=>$between]); - $cmoneylist2 = $spend->totalAmount(['pay_time'=>$between]); - $cpromotelist2 = $promote->total(['create_time'=>$between]); };break; case 7:{ $between = ['between',[strtotime('-365 day',$starttime),strtotime('-365 day',$endtime)]]; - $cnewslist2 = $user->old(['register_time'=>$between]); - $cactivelist2 = $user->active(['tab_user_login_record.login_time'=>$between]); - $cplayerlist2 = $spend->player(['pay_time'=>$between]); - $cmoneylist2 = $spend->totalAmount(['pay_time'=>$between]); - $cpromotelist2 = $promote->total(['create_time'=>$between]); };break; default:{ $day_num = count($datelist); $between = ['between',[strtotime('-'.$day_num.' day',$starttime),strtotime('-'.$day_num.' day',$endtime)]]; - $cnewslist2 = $user->old(['register_time'=>$between]); - $cactivelist2 = $user->active(['tab_user_login_record.login_time'=>$between]); - $cplayerlist2 = $spend->player(['pay_time'=>$between]); - $cmoneylist2 = $spend->totalAmount(['pay_time'=>$between]); - $cpromotelist2 = $promote->total(['create_time'=>$between]); }; - } + //获取前几天记录 + $map1 = array( + "date"=>$between + ); + $ydbdata = M("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 += unserialize($v['active_user_list']); + unset($v['active_user_list']); + unset($ydbdata[$k]['active_user_list']); + $pay_user_list += unserialize($v['pay_user_list']); + 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']); - - $cnews['count'] = $cnewslist1?$cnewslist1:0; - $cnews['rate'] = $cnewslist1 && $cnewslist2? round(($cnewslist1/$cnewslist2-1)*100,2):($cnewslist1&&!$cnewslist2?(100):(!$cnewslist1&&$cnewslist2?(-100):0)); - - $cactive['count'] = $cactivelist1?$cactivelist1:0; - $cactive['rate'] = $cactivelist1 && $cactivelist2? round(($cactivelist1/$cactivelist2-1)*100,2):($cactivelist1&&!$cactivelist2?(100):(!$cactivelist1&&$cactivelist2?(-100):0)); + $cactive['count'] =$count1['active_user_count']; + $cactive['rate'] = $this->setRate($count1['active_user_count'],$count2['active_user_count']); - $cplayer['count'] = $cplayerlist1?$cplayerlist1:0; - $cplayer['rate'] = $cplayerlist1 && $cplayerlist2? round(($cplayerlist1/$cplayerlist2-1)*100,2):($cplayerlist1&&!$cplayerlist2?(100):(!$cplayerlist1&&$cplayerlist2?(-100):0)); + $cplayer['count'] =$count1['pay_user_count']; + $cplayer['rate'] = $this->setRate($count1['pay_user_count'],$count2['pay_user_count']); - $cmoney['count'] = $cmoneylist1?$cmoneylist1:0; - $cmoney['rate'] = $cmoneylist1 && $cmoneylist2? round(($cmoneylist1/$cmoneylist2-1)*100,2):($cmoneylist1&&!$cmoneylist2?(100):(!$cmoneylist1&&$cmoneylist2?(-100):0)); + $cmoney['count'] = $count1['pay_money_count']; + $cmoney['rate'] = $this->setRate($count1['pay_money_count'],$count2['pay_money_count']); - $cpromote['count'] = $cpromotelist1?$cpromotelist1:0; - $cpromote['rate'] = $cpromotelist1 && $cpromotelist2? round(($cpromotelist1/$cpromotelist2-1)*100,2):($cpromotelist1&&!$cpromotelist2?(100):(!$cpromotelist1&&$cpromotelist2?(-100):0)); + $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).'"'; @@ -421,7 +369,6 @@ class IndexController extends AdminController { $data['compare']['player'] = $cplayer; $data['compare']['money'] = $cmoney; $data['compare']['promote'] = $cpromote; - if ($flag) { echo json_encode($data); @@ -433,9 +380,108 @@ class IndexController extends AdminController { $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_"); diff --git a/Application/Admin/Controller/PlatformController.class.php b/Application/Admin/Controller/PlatformController.class.php index 837eab59d..508143441 100644 --- a/Application/Admin/Controller/PlatformController.class.php +++ b/Application/Admin/Controller/PlatformController.class.php @@ -380,14 +380,13 @@ class PlatformController extends ThinkController count(IF(register_time ' . $today . ',1,null)) as today, count(IF(register_time ' . $week . ',1,null)) as week, count(IF(register_time ' . $mounth . ',1,null)) as mounth') - ->join("tab_promote AS tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%')", 'left') + ->join("tab_promote AS tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') OR tp2.id = tp1.id", 'left') ->join("tab_user as u on tp2.id = u.promote_id", 'left') ->join($play_info_map ? "tab_user_play_info as upi on upi.user_id = u.id " . $play_info_map : false) ->where($map) ->group('tp1.id') ->order('count desc, register_time') ->select(); - $count = count($data); foreach ($data as $key => $value) { static $i = 0; @@ -507,7 +506,7 @@ class PlatformController extends ThinkController unset($_REQUEST['promote_id']); } $data = $spend->field('t.pid as promote_id,t.promote_account,sum(a.scount) AS count,sum(a.today) AS today,sum(a. WEEK) AS WEEK,sum(a.mounth) AS mounth') - ->join("INNER JOIN (SELECT tp2.*, tp1.id AS pid, tp1.account as promote_account FROM tab_promote tp1 LEFT JOIN tab_promote tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') where $promote_map ) AS t ON promote_id = t.id") + ->join("INNER JOIN (SELECT tp2.*, tp1.id AS pid, tp1.account as promote_account FROM tab_promote tp1 LEFT JOIN tab_promote tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') OR tp2.id = tp1.id where $promote_map ) AS t ON promote_id = t.id") ->where($condition)->table('(' . $data . ') as a')->group('t.pid')->order('count desc,a.ordertime')->select(); $count = count($data); // dump($condition);die; diff --git a/Application/Admin/Controller/PublicController.class.php b/Application/Admin/Controller/PublicController.class.php index c69553961..fd7241523 100644 --- a/Application/Admin/Controller/PublicController.class.php +++ b/Application/Admin/Controller/PublicController.class.php @@ -237,5 +237,4 @@ class PublicController extends \Think\Controller cookie('think_language', 'en-us'); $this->ajaxReturn(['status' => 1]); } - } diff --git a/Application/Admin/View/Index/index.html b/Application/Admin/View/Index/index.html index d7d94c443..936a4e2e4 100644 --- a/Application/Admin/View/Index/index.html +++ b/Application/Admin/View/Index/index.html @@ -45,7 +45,7 @@
  • 过去整月
  • 过去7天
  • 过去30天
  • -
  • 过去一年
  • +
    @@ -386,8 +386,32 @@ }); } } - + //执行日期的选择 function chartdata(start,end,parent) { + var starttime = new Date(start).getTime(); + if(end){ + var endtime = new Date(end).getTime(); + }else{ + var endtime = new Date(start).getTime(); + } + if(starttime > endtime){ + var temp = start; + start = end; + end = temp; + } + + if(end && (start != end)){ + var endtime = (new Date(end).getTime()) + 86399000; + var now = new Date().getTime(); + if(endtime > now){ + layer.msg('历史时间选择不能包含今日'); + return false; + } + }; + + var index = layer.load(1, { + shade: [0.3,'#000'] //0.1透明度的白色背景 + }); var href = '{:U("index")}'; end = end?end:start; diff --git a/Application/Home/Controller/PromoteController.class.php b/Application/Home/Controller/PromoteController.class.php index 8d76ec0e6..1d0307c2a 100644 --- a/Application/Home/Controller/PromoteController.class.php +++ b/Application/Home/Controller/PromoteController.class.php @@ -151,7 +151,7 @@ class PromoteController extends BaseController count(IF(register_time ' . $today . ',1,null)) as today, count(IF(register_time ' . $week . ',1,null)) as week, count(IF(register_time ' . $mounth . ',1,null)) as mounth') - ->join("tab_promote AS tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%')", 'left') + ->join("tab_promote AS tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') OR tp1.id=tp2.id", 'left') ->join("tab_user as u on tp2.id = u.promote_id", 'left') ->join(false) ->where($map) @@ -319,7 +319,7 @@ class PromoteController extends BaseController $promote_map = "tp1.`id` = {$promote_id}"; $data = $spend->field('sum(a.scount) AS count,sum(a.today) AS today,sum(a. WEEK) AS WEEK,sum(a.mounth) AS mounth') - ->join("INNER JOIN (SELECT tp2.*, tp1.id AS pid, tp1.account as promote_account FROM tab_promote tp1 LEFT JOIN tab_promote tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') where $promote_map ) AS t ON promote_id = t.id") + ->join("INNER JOIN (SELECT tp2.*, tp1.id AS pid, tp1.account as promote_account FROM tab_promote tp1 LEFT JOIN tab_promote tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') OR tp1.id = tp2.id where $promote_map ) AS t ON promote_id = t.id") ->where($condition)->table('(' . $spendData . ') as a')->group()->order('count desc,a.ordertime')->find(); $spendData1 = $spend->field('sum(a.scount) AS count,sum(a.today) AS today,sum(a. WEEK) AS WEEK,sum(a.mounth) AS mounth') diff --git a/Data/update.sql b/Data/update.sql index d7e073da5..d20ea00f0 100644 --- a/Data/update.sql +++ b/Data/update.sql @@ -429,7 +429,28 @@ ALTER TABLE `tab_user_play_info` ADD INDEX `search`(`promote_id`, `game_id`, `se ALTER TABLE `tab_user_login_record` ADD INDEX `search`(`promote_id`, `game_id`, `server_id`, `login_time`); ALTER TABLE `tab_spend` ADD INDEX `search`(`promote_id`, `game_id`, `server_id`, `pay_way`, `pay_status`, `pay_time`); -<<<<<<< HEAD + +--2019-11-19 chenzhi +CREATE TABLE `tab_index_chart` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键自增', + `date` int(11) NOT NULL DEFAULT '0' COMMENT '日期时间戳', + `new_user_hours` varchar(500) NOT NULL DEFAULT '' COMMENT '新增用户聚合', + `new_user_count` int(11) NOT NULL DEFAULT '0' COMMENT '单日新增总计', + `active_user_hours` varchar(500) NOT NULL DEFAULT '' COMMENT '活跃用户聚合', + `active_user_count` int(11) NOT NULL DEFAULT '0' COMMENT '单日活跃总计', + `active_user_list` longtext NOT NULL DEFAULT '' COMMENT '单日活跃用户的id序列', + `pay_user_hours` varchar(500) NOT NULL DEFAULT '' COMMENT '付费用户聚合', + `pay_user_count` int(11) NOT NULL DEFAULT '0' COMMENT '单日付费用户总计', + `pay_user_list` longtext NOT NULL DEFAULT '' COMMENT '单日付费用户的id序列', + `pay_money_hours` varchar(500) NOT NULL DEFAULT '' COMMENT '付费金额聚合', + `pay_money_count` decimal(10,2) DEFAULT '0.00' COMMENT '单日付费金额总计', + `promote_new_hours` varchar(500) NOT NULL DEFAULT '' COMMENT '小时新增渠道', + `promote_new_count` int(11) NOT NULL DEFAULT '0' COMMENT '新增合作渠道总计', + `all_count` varchar(500) NOT NULL DEFAULT '' COMMENT '累计的统计数据', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '统计日期', + PRIMARY KEY (`id`), + KEY `date` (`date`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='首页折线图静态数据'; -- 添加登录日统计表 CREATE TABLE `tab_login_daily_record` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, @@ -441,7 +462,6 @@ CREATE TABLE `tab_login_daily_record` ( KEY `search` (`promote_id`,`game_id`,`create_time`) USING BTREE, KEY `user_id` (`user_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=284597 DEFAULT CHARSET=utf8; -======= --sdk 支付信息 ALTER TABLE `tab_pay_info` MODIFY COLUMN `order_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '平台订单ID' AFTER `game_id`, @@ -453,7 +473,6 @@ ADD COLUMN `extend` varchar(255) NOT NULL DEFAULT '' COMMENT 'cp订单ID' AFTER ALTER TABLE `tab_promote` CHANGE COLUMN `ver_status` `ver_status` INT(11) NULL DEFAULT '0' COMMENT '资质认证审核状态(1是审核成功,2审核失败,3未审核,4修改认证)' AFTER `child_game_permission`, ADD COLUMN `anothpic` CHAR(254) NULL DEFAULT NULL AFTER `account_type`; ->>>>>>> 05bb9b4aa3ba712199e5489f684bc7a8cfeb59c8 --提现订单 添加索引 ALTER TABLE `tab_withdraw` diff --git a/Public/Mobile/js/ssg/flexible.min.js b/Public/Mobile/js/ssg/flexible.min.js index 0e8f568ad..64e088904 100644 --- a/Public/Mobile/js/ssg/flexible.min.js +++ b/Public/Mobile/js/ssg/flexible.min.js @@ -13,8 +13,8 @@ docEl.style.fontSize = Math.max(Math.min(20 * (clientWidth / 1536), 22.5), 17.5) * 5 + 'px'; }else{ - /* 8.55:小于320px不再缩小,11.2:大于420px不再放大 */ - docEl.style.fontSize = Math.max(Math.min(20 * (clientWidth / docWidth), 11.2), 8.55) * 5 + 'px'; + /* 8.55:小于320px不再缩小,11.2:大于420px不再放大 ,17.2 大于667不再放大*/ + docEl.style.fontSize = Math.max(Math.min(20 * (clientWidth / docWidth), 17.2), 8.55) * 5 + 'px'; } return refreshRem; })();