// +---------------------------------------------------------------------- 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 留存类型(1:1天,3:3天,7:7天) * @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 */ 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; } }