type = $type; $this->user_id = $user_id; $this->room_id = $room_id; $this->page = $page; $this->page_limit = $page_limit; switch ($type) { case 1://日榜 $this->begin_time = mktime(0, 0, 0, date('m'), date('d'), date('Y')); $this->end_time = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; break; case 2://本周榜 $this->begin_time = mktime(0, 0, 0, date('m'), date('d') - (date('w') ?: 7) + 1, date('Y')); $this->end_time = mktime(23, 59, 59, date('m'), date('d') - (date('w') ?: 7) + 7, date('Y')); break; case 3://本月榜 $this->begin_time = mktime(0, 0, 0, date('m'), 1, date('Y')); $this->end_time = mktime(23, 59, 59, date('m'), date('t'), date('Y')); break; default://总榜 $this->begin_time = 0; $this->end_time = time(); } } //财富、魅力榜 public function ranking($ranking_type) { $where['a.createtime'] = ['between', [$this->begin_time, $this->end_time]]; $params['start_time']=$this->begin_time; $params['end_time']=$this->end_time; if($ranking_type == 1){//1财富榜 $lists = model('GiveGiftBases')->getGiftRanking($params,1); //把$lists 根据total倒序并只取前20名 usort($lists, function($a, $b) { return $b['total'] <=> $a['total']; // 按total降序排序 }); $lists = array_slice($lists, 0, 20); // 取前20名 if($lists){ $my_ranking = []; foreach ($lists as $key => &$value) { $value['total'] = $value['total'] * 10; $value['nickname'] = db::name('user')->where('id',$value['user_id'])->value('nickname'); $value['user_code'] = db::name('user')->where('id',$value['user_id'])->value('user_code'); $value['avatar'] = db::name('user')->where('id',$value['user_id'])->value('avatar'); $lists[$key]['rank'] = $key + 1; if ($this->user_id == $value['user_id']) { $my_ranking = $lists[$key]; $my_ranking['diff'] = $key == 0 ? 0 : ($lists[$key - 1]['total'] - $value['total']); } } //自己不在前20名 if (!$my_ranking) { $lists_last_number = $lists[count($lists) - 1]['total'] ?? 0; //获取自己的送礼记录 $params['user_id'] = $this->user_id; $my_ranking_datas = model('GiveGiftBases')->getUserStatistics($params,1); $my_ranking['user_id'] = $my_ranking_datas['user_id']; $my_ranking['total'] = $my_ranking_datas['total_price']??0; $my_ranking['nickanme'] = db::name('user')->where('id',$this->user_id)->value('nickname'); $my_ranking['user_code'] = db::name('user')->where('id',$this->user_id)->value('user_code'); $my_ranking['avatar'] = db::name('user')->where('id',$this->user_id)->value('avatar'); $my_ranking['rank'] = -1; $my_ranking['diff'] = numberFormat($lists_last_number - ($my_ranking['total'] ?: 0)); } }else{ $my_ranking = db::name('user') ->field('user_code,avatar,nickname,id as user_id,sex') ->where('id',$this->user_id)->find(); $my_ranking['total'] = 0; $my_ranking['rank'] = -1; $my_ranking['diff'] = 0; } //2魅力榜 }else{ $lists = model('GiveGiftBases')->getGiftRanking($params,2); //把$lists 根据total倒序并只取前20名 usort($lists, function($a, $b) { return $b['total'] <=> $a['total']; // 按total降序排序 }); $lists = array_slice($lists, 0, 20); // 取前20名 if($lists){ $my_ranking = []; foreach ($lists as $key => &$value) { $value['nickname'] = db::name('user')->where('id',$value['gift_user'])->value('nickname'); $value['user_code'] = db::name('user')->where('id',$value['gift_user'])->value('user_code'); $value['avatar'] = db::name('user')->where('id',$value['gift_user'])->value('avatar'); $value['user_id'] = $value['gift_user']; $lists[$key]['rank'] = $key + 1; if ($this->user_id == $value['gift_user']) { $my_ranking = $lists[$key]; $my_ranking['diff'] = $key == 0 ? 0 : ($lists[$key - 1]['total'] - $value['total']); } } //自己不在前20名 if (!$my_ranking) { $lists_last_number = $lists[count($lists) - 1]['total'] ?? 0; //获取自己的收礼记录 $params['gift_user'] = $this->user_id; $my_ranking_datas = model('GiveGiftBases')->getUserStatistics($params,2); $my_ranking['user_id'] = $my_ranking_datas['user_id']; $my_ranking['total'] = $my_ranking_datas['total_price']??0; $my_ranking['nickname'] = db::name('user')->where('id',$this->user_id)->value('nickname'); $my_ranking['user_code'] = db::name('user')->where('id',$this->user_id)->value('user_code'); $my_ranking['avatar'] = db::name('user')->where('id',$this->user_id)->value('avatar'); $my_ranking['rank'] = -1; $my_ranking['diff'] = numberFormat($lists_last_number - ($my_ranking['total'] ?: 0)); } }else{ $my_ranking = db::name('user') ->field('user_code,avatar,nickname,id as user_id,sex') ->where('id',$this->user_id)->find(); $my_ranking['total'] = 0; $my_ranking['rank'] = -1; $my_ranking['diff'] = 0; } } $data = [ 'my_ranking' => $my_ranking, 'lists' => $lists ]; return ['code'=>1,'msg'=>'获取成功','data'=>$data]; } //房间榜 public function room_ranking() { //金币与魅力比例 $ratio = get_system_config_value('coin_charm_exp'); //时间转为天 $begin_time = date('Y-m-d',$this->begin_time); $end_time = date('Y-m-d',$this->end_time); //获取当前用户的房间id $myRoom = db::name('vs_room')->where(['user_id' => UID ,'room_status' => 1])->find(); if($myRoom){ $my_ranking['rank'] = -1; $totla = db::name('room_daily_income') ->where(['room_id' => $myRoom['id'],'date' => ['between', [$begin_time, $end_time]]])->sum('income')??0 ; $my_ranking['total'] = $totla * $ratio; $my_ranking['diff'] = 0; $my_ranking['room_name'] = $myRoom['room_name']; $my_ranking['room_cover'] = $myRoom['room_cover']; }else{ $myRoom['id'] = 0; $my_ranking['rank'] = -1; $my_ranking['total'] = 0; $my_ranking['diff'] = 0; $my_ranking['room_name'] = ''; $my_ranking['room_cover'] = ''; } $lists = db::name('room_daily_income')->alias('a') ->join('vs_room b','a.room_id = b.id','left') ->field('a.room_id,sum(a.income) * ' . $ratio . ' as total,b.room_name,b.room_cover,b.room_number') ->where(['a.date' => ['between', [$begin_time, $end_time]]]) ->group('a.room_id') ->order('total desc') ->limit(20) ->select(); // var_dump($lists);exit; if($lists){ foreach ($lists as $key => $value) { $lists[$key]['rank'] = $key + 1; if ($myRoom['id'] == $value['room_id']) { $my_ranking = $lists[$key]; $my_ranking['diff'] = $key == 0 ? 0 : ($lists[$key - 1]['total'] - $value['total']); } } } $data = [ 'my_ranking' => $my_ranking, 'lists' => $lists ]; return ['code'=>1,'msg'=>'获取成功','data'=>$data]; } //真爱榜 public function love_rankings() { $lists = db::name('user_cp_zone')->alias('a') ->join('user b','a.user_id1 = b.id','left') ->join('user c','a.user_id2 = c.id','left') ->where(['a.status' => 1]) ->field('a.exp,a.id,a.level as total,a.user_id1,a.user_id2 as user_id,b.nickname as nickname1,c.nickname as nickname,b.avatar as user_avatar1,c.avatar as user_avatar') ->order('a.level desc') ->page($this->page, $this->page_limit) ->select(); $my_ranking = null; if($lists){ //获取当前用户的房间id $this->user_id $myRoom = db::name('user_cp_zone')->where(['user_id1' => UID ,'status' => 1])->find(); if(!$myRoom){ $myRoom = db::name('user_cp_zone')->where(['user_id2' => UID ,'status' => 1])->find(); } if($myRoom){ foreach ($lists as $key => $value) { $lists[$key]['rank'] = $key + 1; if ($myRoom['id'] == $value['id']) { $my_ranking = $lists[$key]; $my_ranking['diff'] = $key == 0 ? 0 : ($lists[$key - 1]['exp'] - $value['exp']); } } }else{ foreach ($lists as $key => $value) { $lists[$key]['rank'] = $key + 1; } } }else{ $my_ranking = [ 'user_id' => UID, 'user_id1' => 0, 'nickname' => db::name('user')->where(['id' => UID])->value('nickname'), 'nickname1' => '', 'user_avatar' => db::name('user')->where(['id' => UID])->value('avatar'), 'user_avatar1' => '', 'exp' => 0, 'diff' => 0, 'rank' => -1, 'total' => 0 ]; } $data = [ 'my_ranking' => $my_ranking, 'lists' => $lists ]; return ['code'=>1,'msg'=>'获取成功','data'=>$data]; } }