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.
jy-sdk/Addons/SiteStat/SiteStatAddon.class.php

908 lines
32 KiB
PHTML

2 years ago
<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: yangweijie <yangweijiester@gmail.com> <code-tech.diandian.com>
// +----------------------------------------------------------------------
namespace Addons\SiteStat;
use Common\Controller\Addon;
/**
* 系统环境信息插件
* @author thinkphp
*/
class SiteStatAddon extends Addon
{
public $info = array(
'name' => 'SiteStat',
'title' => '站点统计信息',
'description' => '统计站点的基础信息',
'status' => 1,
'author' => 'thinkphp',
'version' => '0.1'
);
public function install()
{
return true;
}
public function uninstall()
{
return true;
}
//实现的AdminIndex钩子方法
public function AdminIndex($param)
{
$shuju = M('Data', 'tab_')->order('create_time desc')->find();
$this->assign('shuju', $shuju);
$config = $this->getConfig();
$this->assign('addons_config', $config);
if ($config['display']) {
$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);
$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->huanwei($blog + $media);
$info['blog'] = $this->huanwei($blog);
$info['media'] = $this->huanwei($media);
//待办事项
$this->daiban();
//提示事项indexcontroller
$this->tishi();
// 图表
$day_7 = strtotime(date('Y-m-d',strtotime('-6 day')));
$day = $this->every_day(7);
$spend_map['pay_status'] = 1;
$data_spend = $spend
->field('date_format(FROM_UNIXTIME( pay_time),"%Y-%m-%d") AS time,sum(pay_amount) as cg')
->where(array('game_id' => array('gt', 0)))
->where($spend_map)
->where(['pay_time'=>['egt',$day_7]])
->group('time')
->order('cg desc')
->select();
$data_user = $user
->field('date_format(FROM_UNIXTIME( register_time),"%Y-%m-%d") AS time,count(id) as cg')
->group('time')
->where(['register_time'=>['egt',$day_7]])
->select();
$spendd = $this->foreach_data($day, $data_spend);
$userdd = $this->foreach_data($day, $data_user);
asort($spendd);
asort($userdd);
foreach ($spendd as $key => $value) {
$dday[] = $value['time'];
$cgg[] = $value['count'];
}
foreach ($userdd as $key => $value) {
$user_dday[] = $value['time'];
$user_cgg[] = $value['count'];
}
$mix_pay = max($cgg);
$min_pay = min($cgg);
$ii['min'] = $min_pay;
$ii['mix'] = $mix_pay;
$ii['data'] = rtrim($this->foreach_stat($cgg, 2), ",");
$ii['day'] = rtrim($this->foreach_stat($dday), ",");
$mix_user = max($user_cgg);
$min_user = min($user_cgg);
$user_ii['min'] = $min_user;
$user_ii['mix'] = $mix_user;
$user_ii['data'] = rtrim($this->foreach_stat($user_cgg, 2), ",");
$user_ii['day'] = rtrim($this->foreach_stat($user_dday), ",");
$mix_tu = $user_ii['mix'] > $ii['mix'] ? $user_ii['mix'] : $ii['mix'];
$this->assign('mix_tu', $mix_tu);
$this->assign('ii', $ii);
//var_dump($ii);exit;
$this->assign('user_ii', $user_ii);
$this->assign('info', $info);
//昨日新增用户分析
//$this->newsPlayerInYestoday();
//昨日新增用户分析
$this->zrxz();
$this->display('info');
}
}
/**
* 昨日新增用户情况
* @author <zsl>
*/
public function zrxz(){
//昨天日期
$start = mktime(0,0,0,date('m'),date('d')-1,date('Y'));
$end = mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
//前天日期
$start2 = mktime(0,0,0,date('m'),date('d')-2,date('Y'));
$end2 = mktime(0,0,0,date('m'),date('d')-1,date('Y'))-1;
//昨天新增用户数量
$zr_user_num = $this->xz_user_count($start,$end);
//前天新增用户数量
$qt_user_num = $this->xz_user_count($start2,$end2);
//计算用户新增百分比
$news['rate'] = $this->rate_count($zr_user_num,$qt_user_num);
$news['count'] = $zr_user_num;
$this->assign('news',$news);
//昨日新增用户领取礼包数量
$zr_gift_user = $this->xz_user_gift_count($start,$end);
//前天新增用户领取礼包数量
$qt_gift_user = $this->xz_user_gift_count($start2,$end2);
//昨日新增用户签到数量
$zr_point_user = $this->xz_user_point_count($start,$end);
//前天新增用户签到数量
$qt_point_user = $this->xz_user_point_count($start2,$end2);
//昨日新增用户兑换商品数量
$zr_pointshop_user = $this->xz_user_pointshop_count($start,$end);
//前天新增用户兑换商品数量
$qt_pointshop_user = $this->xz_user_pointshop_count($start2,$end2);
//昨日新增用户邀请好友数量
$zr_share_user = $this->xz_user_share_count($start,$end);
//前天新增用户邀请好友数量
$qt_share_user = $this->xz_user_share_count($start2,$end2);
//昨日新增用户充值人数
$zr_spend_user = $this->xz_user_spend_count($start,$end);
//前天新增用户充值人数
$qt_spend_user = $this->xz_user_spend_count($start2,$end2);
//昨日留存
$zr_ratention = $this->ratention_count($start,$end);
//前天留存
$qt_ratention = $this->ratention_count($start2,$end2);
//昨日行为总数
$total_num = $zr_gift_user+$zr_point_user+$zr_pointshop_user+$zr_share_user+$zr_spend_user+$zr_ratention;
//前天行为总数
$tq_total_num = $qt_gift_user+$qt_point_user+$qt_pointshop_user+$qt_share_user+$qt_spend_user+$qt_ratention;
//用户礼包领取数量
$gift = $this->formart_data($zr_gift_user,$total_num,$qt_gift_user,$tq_total_num);
$this->assign('gift',$gift);
//用户签到数量
$point = $this->formart_data($zr_point_user,$total_num,$qt_point_user,$tq_total_num);
$this->assign('point',$point);
//用户兑换商品数量
$pointshop = $this->formart_data($zr_pointshop_user,$total_num,$qt_pointshop_user,$tq_total_num);
$this->assign('pointshop',$pointshop);
//用户邀请好友数量
$share = $this->formart_data($zr_share_user,$total_num,$qt_share_user,$tq_total_num);
$this->assign('share',$share);
//用户充值数量
$money = $this->formart_data($zr_spend_user,$total_num,$qt_spend_user,$tq_total_num);
$this->assign('money',$money);
//用户留存数量
$rate = $this->formart_data($zr_ratention,$total_num,$qt_ratention,$tq_total_num);
$this->assign('rate',$rate);
}
/*
* 计算数据分析所需格式
*
*/
private function formart_data($zr_num,$zr_total_num,$qt_num,$qt_total_num){
$user_per = $this->per_count($zr_num,$zr_total_num);
$user_per2 = $this->per_count($qt_num,$qt_total_num);
$data['per'] = $user_per;
// $data['rate'] = $this->rate_count($user_per,$user_per2);
$data['rate'] = $user_per-$user_per2;
$data['count'] = $zr_num;
return $data;
}
/**
* 计算百分比
* num1 占 num2 的百分比
*/
private function per_count($num1,$num2){
if($num1>$num2){
$rate = round($num2/$num1*100,2);
}else{
$rate = round($num1/$num2*100,2);
}
return $rate;
}
/**
* 计算百分比
* num1 比 num2 增长的百分比数
*/
private function rate_count($num1,$num2){
$float = $num1-$num2;
$rate = round($float/$num2*100,2);
return $rate;
}
/*
* 获取新增用户数量
* @author <zsl>
*/
private function xz_user_count($start,$end){
$user = M('User','tab_');
$qt_num = $user->where(array('register_time'=>['between',[$start,$end]]))->count();
return $qt_num?$qt_num:0;
}
/*
* 获取新增用户领取礼包数量
* @author <zsl>
*/
private function xz_user_gift_count($start,$end){
$gift = M('GiftRecord','tab_');
$count = $gift
->field('tab_user.id as id')
->join('tab_user on(tab_user.id = tab_gift_record.user_id)')
->where(array('register_time'=>['between',[$start,$end]],'tab_gift_record.create_time'=>['between',[$start,$end]]))
->group('tab_user.id')
->select();
return count($count);
}
/*
* 获取新增用户签到数量
* @author <zsl>
*/
private function xz_user_point_count($start,$end){
$pointRecord = M('PointRecord','tab_');
$count = $pointRecord
->field('tab_user.id as id')
->join('tab_user on(tab_user.id = tab_point_record.user_id)')
->where(array('register_time'=>['between',[$start,$end]],'create_time'=>['between',[$start,$end]]))
->group('tab_user.id')
->select();
return count($count);
}
/*
* 获取新增用户兑换商品数量
* @author <zsl>
*/
private function xz_user_pointshop_count($start,$end){
$pointShopRecord = M('PointShopRecord','tab_');
$count = $pointShopRecord
->field('tab_user.id as id')
->join('tab_user on(tab_user.id = tab_point_shop_record.user_id)')
->where(array('register_time'=>['between',[$start,$end]],'create_time'=>['between',[$start,$end]]))
->group('tab_user.id')
->select();
return count($count);
}
/*
* 获取新增用户邀请好友数量
* @author <zsl>
*/
private function xz_user_share_count($start,$end){
$shareRecord = M('ShareRecord','tab_');
$count = $shareRecord
->field('tab_user.id as id')
->join('tab_user on(tab_user.id = tab_share_record.invite_id)')
->where(array('register_time'=>['between',[$start,$end]],'create_time'=>['between',[$start,$end]]))
->group('tab_user.id')
->select();
return count($count);
}
/*
* 获取新增用户充值人数
* @author <zsl>
*/
private function xz_user_spend_count($start,$end){
$depositlist = M('Deposit','tab_')->field('tab_user.id as id')
->join('tab_user on(tab_user.id = tab_deposit.user_id)')
->where(array('register_time'=>['between',[$start,$end]],'tab_deposit.create_time'=>['between',[$start,$end]]))
->group('tab_user.id')->select();
$bindlist = M('BindRecharge','tab_')->field('tab_user.id as id')
->join('tab_user on(tab_user.id = tab_bind_recharge.user_id)')
->where(array('register_time'=>['between',[$start,$end]],'tab_bind_recharge.create_time'=>['between',[$start,$end]]))
->group('tab_user.id')->select();
$spend = M('Spend','tab_');
$spendlist = $spend
->field('tab_user.id as id')
->join('tab_user on(tab_user.id = tab_spend.user_id)')
->where(array('tab_spend.pay_way'=>['gt',0],'register_time'=>['between',[$start,$end]],'tab_spend.pay_time'=>['between',[$start,$end]]))
->group('tab_user.id')
->select();
return count($spendlist)+count($depositlist)+count($bindlist);
}
/*
* 获取留存人数
* @author <zsl>
*/
private function ratention_count($start,$end){
// 新增用户
$user = M('User','tab_');
$newslist = $user->field('FROM_UNIXTIME(register_time, "%Y-%m-%d") as time,COUNT(id) AS count,group_concat(id) as id')
->where(array('register_time'=>['between',[$start,$end]]))
->group('time')->order('time desc')
->select();
// 留存
$ratention = $this->ratentionRate($newslist);
$yes = date('Y-m-d',$end);
$rate['count'] = $ratention[$yes]['count']?$ratention[$yes]['count']:0;
return $rate['count'];
}
/*
* 昨日新增用户分析
* @author 鹿文学
*/
public function newsPlayerInYestoday() {
$start = mktime(0,0,0,date('m'),date('d')-3,date('Y'));
$end = mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
// 新增用户
$user = M('User','tab_');
$newslist = $user->field('FROM_UNIXTIME(register_time, "%Y-%m-%d") as time,COUNT(id) AS count,group_concat(id) as id')
->where(array('register_time'=>['between',[$start,$end]]))
->group('time')->order('time desc')
->select();
if ($newslist[0] && $newslist[0]['time']==date('Y-m-d',$end)) {
$news['count'] = $newslist[0]['count']?$newslist[0]['count']:0;
$news['rate'] = $newslist[0] && $newslist[1]? round(($newslist[0]['count']/$newslist[1]['count']-1)*100,2):($newslist[0]&&!$newslist[1]?(100):(!$newslist[0]&&$newslist[1]?(-100):0));
$start = mktime(0,0,0,date('m'),date('d')-2,date('Y'));
$this->assign('news',$news);
// 礼包
$gift = M('GiftRecord','tab_');
$giftlist = $gift->field('FROM_UNIXTIME(tab_gift_record.create_time, "%Y-%m-%d") as time,COUNT(distinct tab_gift_record.user_id) AS count')
->join('tab_user on(tab_user.id = tab_gift_record.user_id)')
->where(array('register_time'=>['between',[$start,$end]],'tab_gift_record.create_time'=>['between',[$start,$end]]))
->group('time')->order('time desc')
->select();
if ($giftlist[0] && $giftlist[0]['time']==date('Y-m-d',$end)) {
$getgift['count'] = $giftlist[0]['count']?$giftlist[0]['count']:0;
$getgift['rate'] = $giftlist[0] && $giftlist[1]? round(($giftlist[0]['count']/$giftlist[1]['count']-1)*100,2):($giftlist[0]&&!$giftlist[1]?(100):(!$giftlist[0]&&$giftlist[1]?(-100):0));
} else {
$getgift['count'] = 0;
$getgift['rate'] = $giftlist[1]?-100:0;
}
$getgift['per'] = $news['count']?round($getgift['count']/$news['count']*100,0):0;
$this->assign('gift',$getgift);
// 签到
$pointRecord = M('PointRecord','tab_');
$pointrecordlist = $pointRecord->field('FROM_UNIXTIME(create_time, "%Y-%m-%d") as time,COUNT(distinct user_id) AS count')
->join('tab_user on(tab_user.id = tab_point_record.user_id)')
->where(array('register_time'=>['between',[$start,$end]],'create_time'=>['between',[$start,$end]]))
->group('time')->order('time desc')->select();
if ($pointrecordlist[0] && $pointrecordlist[0]['time']==date('Y-m-d',$end)) {
$point['count'] = $pointrecordlist[0]['count']?$pointrecordlist[0]['count']:0;
$point['rate'] = $pointrecordlist[0] && $pointrecordlist[1]? round(($pointrecordlist[0]['count']/$pointrecordlist[1]['count']-1)*100,2):($pointrecordlist[0]&&!$pointrecordlist[1]?(100):(!$pointrecordlist[0]&&$pointrecordlist[1]?(-100):0));
}else {
$point['count'] = 0;
$point['rate'] = $pointrecordlist[1]?-100:0;
}
$point['per'] = $news['count']?round($point['count']/$news['count']*100,0):0;
$this->assign('point',$point);
// 兑换商品
$pointShopRecord = M('PointShopRecord','tab_');
$pointshoprecordlist = $pointShopRecord->field('FROM_UNIXTIME(create_time, "%Y-%m-%d") as time,COUNT(distinct user_id) AS count')
->join('tab_user on(tab_user.id = tab_point_shop_record.user_id)')
->where(array('register_time'=>['between',[$start,$end]],'create_time'=>['between',[$start,$end]]))
->group('time')->order('time desc')->select();
if ($pointshoprecordlist[0] && $pointshoprecordlist[0]['time']==date('Y-m-d',$end)) {
$pointshop['count'] = $pointshoprecordlist[0]['count']?$pointshoprecordlist[0]['count']:0;
$pointshop['rate'] = $pointshoprecordlist[0] && $pointshoprecordlist[1]? round(($pointshoprecordlist[0]['count']/$pointshoprecordlist[1]['count']-1)*100,2):($pointshoprecordlist[0]&&!$pointshoprecordlist[1]?(100):(!$pointshoprecordlist[0]&&$pointshoprecordlist[1]?(-100):0));
}else {
$pointshop['count'] = 0;
$pointshop['rate'] = $pointshoprecordlist[1]?-100:0;
}
$pointshop['per'] = $news['count']?round($pointshop['count']/$news['count']*100,0):0;
$this->assign('pointshop',$pointshop);
// 邀请好友
$shareRecord = M('ShareRecord','tab_');
$sharerecordlist = $shareRecord->field('FROM_UNIXTIME(create_time, "%Y-%m-%d") as time,COUNT(distinct invite_id) AS count')
->join('tab_user on(tab_user.id = tab_share_record.invite_id)')
->where(array('register_time'=>['between',[$start,$end]],'create_time'=>['between',[$start,$end]]))
->group('time')->order('time desc')->select();
if ($sharerecordlist[0] && $sharerecordlist[0]['time']==date('Y-m-d',$end)) {
$share['count'] = $sharerecordlist[0]['count']?$sharerecordlist[0]['count']:0;
$share['rate'] = $sharerecordlist[0] && $sharerecordlist[1]? round(($sharerecordlist[0]['count']/$sharerecordlist[1]['count']-1)*100,2):($sharerecordlist[0]&&!$sharerecordlist[1]?(100):(!$sharerecordlist[0]&&$sharerecordlist[1]?(-100):0));
}else {
$share['count'] = 0;
$share['rate'] = $sharerecordlist[1]?-100:0;
}
$share['per'] = $news['count']?round($share['count']/$news['count']*100,0):0;
$this->assign('share',$share);
// 充值
$spend = M('Spend','tab_');
$spendlist = $spend->field('FROM_UNIXTIME(pay_time, "%Y-%m-%d") as time,COUNT(distinct user_id) AS count')
->join('tab_user on(tab_user.id = tab_spend.user_id)')
->where(array('register_time'=>['between',[$start,$end]],'pay_time'=>['between',[$start,$end]]))
->group('time')->order('time desc')->select();
if ($spendlist[0] && $spendlist[0]['time']==date('Y-m-d',$end)) {
$money['count'] = $spendlist[0]['count']?$spendlist[0]['count']:0;
$money['rate'] = $spendlist[0] && $spendlist[1]? round(($spendlist[0]['count']/$spendlist[1]['count']-1)*100,2):($spendlist[0]&&!$spendlist[1]?(100):(!$spendlist[0]&&$spendlist[1]?(-100):0));
} else {
$money['count'] = 0;
$money['rate'] = $spendlist[1]?-100:0;
}
$money['per'] = $news['count']?round($money['count']/$news['count']*100,0):0;
$this->assign('money',$money);
// 留存
$ratention = $this->ratentionRate($newslist);
$yes = date('Y-m-d',$end);
$one = date('Y-m-d',$end-86400);
$rate['count'] = $ratention[$yes]['count']?$ratention[$yes]['count']:0;
$rate['rate'] = $ratention[$yes] && $ratention[$one]? ($ratention[$yes]['retentionrate']-$ratention[$one]['retentionrate']):($ratention[$yes]&&!$ratention[$one]?(100):(!$ratention[$yes]&&$ratention[$one]?(-100):0));
$rate['per'] = $news['count']?round($rate['count']/$news['count']*100,0):0;
$this->assign('rate',$rate);
}
}
/**
* 玩家留存率
* @param array $news 新增用户数据(按天分组)
* @param array $map 条件数组
* @param integer $flag 留存类型11天33天77天
* @param string $fieldname 字段别名
* @param string $group 分组字段名
* @return array 详细数据
* @author 鹿文学
*/
private function ratentionRate($news=[],$map=[],$flag=1,$fieldname='retentionrate',$group='login_time') {
$map['lock_status']=1;
$data = array();
$user = M('User','tab_');
foreach ($news as $value) {
$ct1 = strtotime("+$flag day",strtotime($value['time']));
$ct2 = strtotime("+1 day",$ct1)-1;
$map['tab_user_login_record.login_time'] = array(array('egt',$ct1),array('elt',$ct2));
$map['user_id']=array('in',$value['id']);
$count = count(explode(',',$value['id']));
$d=$user
->field('count(distinct user_id) as '.$fieldname.' ,FROM_UNIXTIME(tab_user_login_record.login_time,"%Y-%m-%d") as '.$group)
->join('tab_user_login_record on tab_user.id=tab_user_login_record.user_id','right')
->where($map)
->group($group)
->select();
if ($d)
$data[$value['time']]=array(
$group=>$value['time'],'key'=>$fieldname,'count'=>($d[0][$fieldname]==0)?0:$d[0][$fieldname],
$fieldname=>($d[0][$fieldname]==0)?0:sprintf("%.2f",($d[0][$fieldname]/$count)*100)
);
}
return $data;
}
public function foreach_stat($dday, $type = 1)
{
$ss="";
foreach ($dday as $key => $value) {
if ($type == 1) {
$ss .= '"' . $value . '",';
} else {
$ss .= $value . ',';
}
}
return $ss;
}
public function foreach_data($day, $data, $type = 1)
{
foreach ($day as $s => $d) {
$spendd[$s]['time'] = $d;
$spendd[$s]['count'] = 0;
}
if ($type == 1) {
$data = array_combine(array_column($data,'time'),array_column($data,'cg'));
foreach ($spendd as $s => $d) {
$spendd[$s]['count'] = (int)$data[$d['time']];
}
/* foreach ($spendd as $s => $d) {
foreach ($data as $key => $value) {
if ($value['time'] == $d['time']) {
$spendd[$s]['count'] = $value['cg'];//(int)$value['cg'];
}
}
} */
} else {
foreach ($spendd as $s => $d) {
$a = 0;
foreach ($data as $key => $value) {
if ($value['time'] == $d['time']) {
$a++;
$spendd[$s]['count'] = $a;
}
}
}
}
return $spendd;
}
private function daiban()
{
$user = M("User", "tab_");
$game = M("Game", "tab_");
$spend = M('Spend', "tab_");
$deposit = M('Deposit', "tab_");
$apply = M('Apply', "tab_");
$applyapp = M('app_apply', "tab_");
$promote = M("Promote", "tab_");
$developer = M("Developers", "tab_");
$pregist = $promote->where(array('status' => 0))->count();//渠道申请待审核数
$daiban['pcount'] = $pregist;
$developerlist = $developer->where(array('status' => -1))->count();//渠道申请待审核数
$daiban['dcount'] = $developerlist;
$applyandgame = $apply->where(['sdk_version'=>1,'enable_status'=>0])->count();//渠道分包待打包数
$daiban['applyandgame'] = $applyandgame;
$applyiosgame = $apply->where(['sdk_version'=>2,'enable_status'=>0])->count();//渠道分包待打包数
$daiban['applyiosgame'] = $applyiosgame;
$withc = M('Withdraw', 'tab_')->where(array('status' => 0, 'promote_id' => array('gt', 0)))->count();//渠道提现待审核数
$daiban['withc'] = $withc;
$spenc = $spend->where(array('pay_game_status' => 0, 'pay_status' => 1))->count();//游戏充值待补单数
$daiban['spenc'] = $spenc;
$applyandapp = $applyapp->where(array('app_version'=>1,'dow_url' => ''))->count();//APP分包待打包数
$daiban['applyandapp'] = $applyandapp;
$applyiosapp = $applyapp->where(array('app_version'=>2,'dow_url' => ''))->count();//APP分包待打包数
$daiban['applyiosapp'] = $applyiosapp;
$gamecount = $game->where(array('apply_status'=>0,'developers' => array('GT',0)))->count();//APP分包待打包数
$daiban['gamecount'] = $gamecount;
$msgc = M('Msg', 'tab_')->where(array('user_id' => UID, 'status' => 2))->count();//站内通知
$daiban['msgc'] = $msgc;
$this->assign('daiban', $daiban);
}
/*
* 提示事项
* @author <jszsl001@163.com>
*/
private function tishi(){
//【返利设置】
$fmap['endtime'] = [['neq',''],['lt',time()]];
$fl_set = M('rebate','tab_')->field('id,game_id,game_name')->where($fmap)->order('endtime desc')->select();
$this->assign('fl_set',$fl_set);
//【礼包列表】
/* $lt_num = 10; //礼包提示数量
#统一码数量不足礼包
//$gty['is_unicode'] = 1;
//$gty['unicode_num'] = ['lt',$lt_num];
//$ty_gift = M('giftbag','tab_')->where($gty)->field('id,game_name,server_id,server_name,giftbag_name,novice')->select();
#非统一码数量不足
//$gmap['is_unicode'] = 0;
$fty_gift_list = M('giftbag','tab_')->where($gmap)->field('id,game_name,server_id,server_name,giftbag_name,novice')->select();
foreach($fty_gift_list as $v){
$num = count(explode(',',$v['novice']));
if($num<$lt_num){
$new_gift_list[] = $v;
}
}
//$gift_list = array_merge($ty_gift,$new_gift_list); */
/* 2018-08-24 lwx add start */
$gift_list = M('giftbag','tab_')->field('tab_giftbag.id,tab_giftbag.giftbag_name,tab_giftbag.server_id,tab_giftbag.server_name,tab_game.game_name')
->join('tab_game on (tab_game.id = tab_giftbag.game_id)','inner')
->where('LENGTH(tab_giftbag.novice)-LENGTH(REPLACE(tab_giftbag.novice, ",", ""))+1<10')->select();
/* 2018-08-24 lwx add end */
$this->assign('gift_list',$gift_list);
}
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) . "'";
}
private function idata($data, $flag = false, $field)
{
$day = array_flip($this->every_day(7));//七天日期
$data = array_merge($day, $data);
$d = $c = '';
$max = 0;
$min = 0;
if (!empty($data)) {
ksort($data);
// $data = array_reverse($data);
if ($flag) {
foreach ($data as $k => $v) {
if (!empty($v)) {
foreach ($v as $j => $u) {
$total += $u[$field];
}
$toto[] = $total;
} else {
$toto[] = $total = 0;
}
if ($min > $total) {
$min = $total;
}
if ($max < $total) {
$max = $total;
}
$c .= '"' . $k . '",';
$total = 0;
}
$d = implode(',', $toto) . ',';
} else {
foreach ($data as $k => $v) {
$count = empty($v) ? 0 : count($v);
if ($min > $count) {
$min = $count;
}
if ($max < $count) {
$max = $count;
}
$d .= $count . ',';
$c .= '"' . $k . '",';
}
}
$d = substr($d, 0, -1);
$c = substr($c, 0, -1);
}
$max++;
$pay = array(
'min' => $min,
'max' => $max,
'data' => $d,
'cate' => $c
);
return $pay;
}
private function linepay()
{
$spend = M('Spend', "tab_");
$deposit = M('Deposit', "tab_");
$week = $this->total(9);
$samount = $spend->field("pay_amount,pay_time as time")->where("pay_status=1 and pay_time $week")->select();
$damount = $deposit->field("pay_amount,create_time as time")->where("pay_status=1 and create_time $week")->select();
if (!empty($samount) && !empty($damount))
$data = array_merge($samount, $damount);
else {
if (!empty($samount))
$data = $samount;
else if (!empty($damount))
$data = $damount;
else
$data = '';
}
$result = array();
$this->jump($data, $result, 8);
return $result;
}
private function lineregister()
{
$week = $this->total(9);
$user = M("User", "tab_")->field("account,register_time as time")->where("lock_status=1 and register_time $week")->select();
if (!empty($user))
$data = $user;
else
$data = array(0, 0, 0, 0, 0, 0, 0);
$result = array();
$this->jump($data, $result, 8);
return $result;
}
protected function jump(&$a, &$b, $m, $n = 0)
{
$num = count($a);
if ($m == 1) {
return;
} else {
$time = time();
if ($m < 8) {
$c = 8 - $m;
$time = $time - ($c * 86400);
}
$m -= 1;
$t = date("Y-m-d", $time);
if (empty($a) && count($b) < 8) {
$b[$t] = "";
} else {
foreach ($a as $k => $g) {
$st = date("Y-m-d", $g['time']);
if ($t === $st) {
$b[$t][] = $g;
unset($a[$k]);
}
if ($b[$t] == '') {
$b[$t] = 0;
}
}
$a = array_values($a);
}
return $this->jump($a, $b, $m, $num);
}
}
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 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'));
};
break;
case 9: { // 前七天
$start = mktime(0, 0, 0, date('m'), date('d') - 6, date('Y'));
$end = mktime(date('H'), date('m'), date('s'), date('m'), date('d'), date('Y'));
};
break;
default:
$start = '';
$end = '';
}
return " between $start and $end ";
}
//以当前日期 默认前七天
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 huanwei($total)
{
if (!strstr($total, '.')) {
$total = $total . '.00';
}
$total = empty($total) ? '0' : trim($total . ' ');
$len = strlen($total);
if ($len > 8) { // 亿
$len = $len - 12;
$total = $len > 0 ? (round(($total / 1e12), 2) . '万亿') : round(($total / 1e8), 2) . '亿';
} else if ($len > 4) { // 万
$total = (round(($total / 10000), 2)) . 'w';
}
return $total;
}
}