diff --git a/application/api/model/GiveGiftBases.php b/application/api/model/GiveGiftBases.php index caafa859..854fd9f6 100644 --- a/application/api/model/GiveGiftBases.php +++ b/application/api/model/GiveGiftBases.php @@ -144,7 +144,7 @@ class GiveGiftBases extends Model /** * 用户送礼统计 */ - public function getUserStatistics($params) + public function getUserStatistics($params,$type) { $userId = $params['user_id']; @@ -155,7 +155,12 @@ class GiveGiftBases extends Model return ['code'=>0,'msg'=>'用户ID不能为空','data'=>null]; } - $where = ['user_id' => $userId]; + if($type==1){ + $where = ['user_id' => $userId]; + }else{ + $where = ['gift_user' => $userId]; + } + $options = [ 'start_time' => $startTime, 'end_time' => $endTime, @@ -343,7 +348,7 @@ class GiveGiftBases extends Model * 获取送礼排行 */ - public function getGiftRanking($params) + public function getGiftRanking($params,$type) { $where = []; $options = []; @@ -360,7 +365,12 @@ class GiveGiftBases extends Model $options['page'] = $params['page'] ?? 1; $options['limit'] = min($params['limit'] ?? 20, 100); // 限制最大100条 - $options['group_by'] = 'user_id'; + if($type == 1){ + $options['group_by'] = 'user_id'; + }else{ + $options['group_by'] = 'gift_user'; + } + // 查询数据 $result = $this->giftModel->getGiftStatisticsRanking($where, $options); diff --git a/application/api/model/Ranking.php b/application/api/model/Ranking.php index c6d74f64..148c6e42 100644 --- a/application/api/model/Ranking.php +++ b/application/api/model/Ranking.php @@ -42,11 +42,60 @@ class Ranking extends Model { $where['a.createtime'] = ['between', [$this->begin_time, $this->end_time]]; - if($ranking_type == 1){//1财富榜 - $params['start_time']=$this->begin_time; - $params['end_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['nickanme'] = 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 = model('GiveGiftBases')->getGiftRanking($params); //把$lists 根据total倒序并只取前20名 usort($lists, function($a, $b) { return $b['total'] <=> $a['total']; // 按total降序排序 @@ -69,9 +118,9 @@ class Ranking extends Model //自己不在前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); + //获取自己的收礼记录 + $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; @@ -90,59 +139,8 @@ class Ranking extends Model $my_ranking['rank'] = -1; $my_ranking['diff'] = 0; } - - //2魅力榜 - }else{ - $lists = db::name('vs_give_gift')->alias('a') - ->join('user b', 'a.gift_user = b.id') - ->field('a.gift_user as user_id,b.nickname,b.avatar,b.user_code,sum(a.total_price) * 10 as total') - ->where($where) - ->order('total desc') - ->group('a.gift_user') -// ->page($this->page, $this->page_limit) - ->select(); - - if($lists){ - foreach ($lists as $key => &$value) { - - $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']); - } - } - } - - if (!$my_ranking && $lists && defined('UID')) { - $my_ranking_data = db::name('vs_give_gift')->alias('a') - ->join('user b', 'a.gift_user = b.id') - ->field('a.gift_user as user_id,b.nickname,b.avatar,b.user_code,sum(a.total_price) * 10 as total') - ->where($where) - ->where('a.gift_user',$this->user_id) - ->select(); - - - $lists_last_number = $lists[count($lists) - 1]['total'] ?? 0; - - if (!isset($my_ranking_data['user_id']) || !$my_ranking_data['user_id']) { - $my_ranking = db::name('user') - ->field('user_code,avatar,nickname,id as user_id,user_code,sex') - ->where('id',$this->user_id)->find(); - $my_ranking['icon'][0] = model('UserData')->user_wealth_icon($my_ranking['user_id']);//财富图标 - - $my_ranking['total'] = 0; - $my_ranking['rank'] = -1; - $my_ranking['diff'] = numberFormat($lists_last_number); - } else { - $my_ranking = $my_ranking_data; - $my_ranking['rank'] = -1; - $my_ranking['total'] = numberFormat($my_ranking['total']); - $my_ranking['diff'] = numberFormat($lists_last_number - ($my_ranking_data['total'] ?: 0)); - } - } } - //截取20条 - $lists = array_slice($lists,0,20); + $data = [ 'my_ranking' => $my_ranking, 'lists' => $lists