2025-08-07 20:21:47 +08:00
< ? php
namespace app\api\model ;
use think\Db ;
use think\Model ;
class Ranking extends Model
{
protected $begin_time , $end_time , $type , $user_id , $lable , $page , $page_limit ;
public function __construct ( $user_id , $type , $room_id , $page = 1 , $page_limit = 30 )
{
parent :: __construct ();
$this -> 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 )
{
2025-08-18 18:55:28 +08:00
$where [ 'a.createtime' ] = [ 'between' , [ $this -> begin_time , $this -> end_time ]];
2026-01-09 17:39:46 +08:00
2026-01-09 20:12:17 +08:00
$params [ 'start_time' ] = $this -> begin_time ;
$params [ 'end_time' ] = $this -> end_time ;
2026-01-09 17:52:02 +08:00
2026-01-09 20:12:17 +08:00
if ( $ranking_type == 1 ){ //1财富榜
$lists = model ( 'GiveGiftBases' ) -> getGiftRanking ( $params , 1 );
2026-01-09 19:08:19 +08:00
//把$lists 根据total倒序并只取前20名
usort ( $lists , function ( $a , $b ) {
return $b [ 'total' ] <=> $a [ 'total' ]; // 按total降序排序
});
$lists = array_slice ( $lists , 0 , 20 ); // 取前20名
2025-08-18 18:55:28 +08:00
if ( $lists ){
2026-01-09 19:09:22 +08:00
$my_ranking = [];
2025-08-18 18:55:28 +08:00
foreach ( $lists as $key => & $value ) {
2026-01-09 20:12:17 +08:00
$value [ 'total' ] = $value [ 'total' ] * 10 ;
2026-01-15 04:14:58 +08:00
$value [ 'nickname' ] = db :: name ( 'user' ) -> where ( 'id' , $value [ 'user_id' ]) -> value ( 'nickname' );
2026-01-09 19:08:19 +08:00
$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' );
2025-08-18 18:55:28 +08:00
$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' ]);
}
2025-08-07 20:21:47 +08:00
}
2026-01-09 19:08:19 +08:00
//自己不在前20名
if ( ! $my_ranking ) {
2026-01-09 19:42:11 +08:00
$lists_last_number = $lists [ count ( $lists ) - 1 ][ 'total' ] ? ? 0 ;
2026-01-09 19:08:19 +08:00
//获取自己的送礼记录
$params [ 'user_id' ] = $this -> user_id ;
2026-01-09 20:12:17 +08:00
$my_ranking_datas = model ( 'GiveGiftBases' ) -> getUserStatistics ( $params , 1 );
2026-01-09 19:42:11 +08:00
$my_ranking [ 'user_id' ] = $my_ranking_datas [ 'user_id' ];
$my_ranking [ 'total' ] = $my_ranking_datas [ 'total_price' ] ? ? 0 ;
2026-01-09 19:46:01 +08:00
$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' );
2026-01-09 19:42:11 +08:00
$my_ranking [ 'rank' ] = - 1 ;
$my_ranking [ 'diff' ] = numberFormat ( $lists_last_number - ( $my_ranking [ 'total' ] ? : 0 ));
2025-08-18 18:55:28 +08:00
}
2026-01-09 19:08:19 +08:00
} 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 ;
2025-08-18 18:55:28 +08:00
}
2026-01-09 19:08:19 +08:00
2026-01-09 19:42:11 +08:00
//2魅力榜
} else {
2026-01-09 20:12:17 +08:00
$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名
2025-08-18 18:55:28 +08:00
if ( $lists ){
2026-01-09 20:12:17 +08:00
$my_ranking = [];
2025-08-18 18:55:28 +08:00
foreach ( $lists as $key => & $value ) {
2026-01-15 04:21:33 +08:00
$value [ 'nickname' ] = db :: name ( 'user' ) -> where ( 'id' , $value [ 'gift_user' ]) -> value ( 'nickname' );
2026-01-09 20:13:54 +08:00
$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' );
2026-01-15 04:21:33 +08:00
$value [ 'user_id' ] = $value [ 'gift_user' ];
2025-08-18 18:55:28 +08:00
$lists [ $key ][ 'rank' ] = $key + 1 ;
2026-01-09 20:13:54 +08:00
if ( $this -> user_id == $value [ 'gift_user' ]) {
2025-08-18 18:55:28 +08:00
$my_ranking = $lists [ $key ];
$my_ranking [ 'diff' ] = $key == 0 ? 0 : ( $lists [ $key - 1 ][ 'total' ] - $value [ 'total' ]);
}
}
2026-01-09 20:12:17 +08:00
//自己不在前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 );
2025-08-18 18:55:28 +08:00
2026-01-09 20:12:17 +08:00
$my_ranking [ 'user_id' ] = $my_ranking_datas [ 'user_id' ];
$my_ranking [ 'total' ] = $my_ranking_datas [ 'total_price' ] ? ? 0 ;
2026-01-15 04:21:33 +08:00
$my_ranking [ 'nickname' ] = db :: name ( 'user' ) -> where ( 'id' , $this -> user_id ) -> value ( 'nickname' );
2026-01-09 20:12:17 +08:00
$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' );
2025-08-18 18:55:28 +08:00
$my_ranking [ 'rank' ] = - 1 ;
2026-01-09 20:12:17 +08:00
$my_ranking [ 'diff' ] = numberFormat ( $lists_last_number - ( $my_ranking [ 'total' ] ? : 0 ));
2025-08-18 18:55:28 +08:00
}
2026-01-09 20:12:17 +08:00
} 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 ;
2025-08-07 20:21:47 +08:00
}
}
2026-01-09 20:12:17 +08:00
2025-08-07 20:21:47 +08:00
$data = [
'my_ranking' => $my_ranking ,
'lists' => $lists
];
return [ 'code' => 1 , 'msg' => '获取成功' , 'data' => $data ];
}
2026-01-12 10:31:07 +08:00
2025-08-07 20:21:47 +08:00
//房间榜
public function room_ranking ()
{
2025-10-20 09:59:39 +08:00
//金币与魅力比例
$ratio = get_system_config_value ( 'coin_charm_exp' );
2026-01-12 09:21:48 +08:00
//时间转为天
2026-01-12 11:11:51 +08:00
$begin_time = date ( 'Y-m-d' , $this -> begin_time );
$end_time = date ( 'Y-m-d' , $this -> end_time );
2025-08-07 20:21:47 +08:00
2026-01-12 09:21:48 +08:00
//获取当前用户的房间id
$myRoom = db :: name ( 'vs_room' ) -> where ([ 'user_id' => UID , 'room_status' => 1 ]) -> find ();
if ( $myRoom ){
2025-08-07 20:21:47 +08:00
$my_ranking [ 'rank' ] = - 1 ;
$my_ranking [ 'total' ] = 0 ;
$my_ranking [ 'diff' ] = 0 ;
$my_ranking [ 'room_name' ] = $myRoom [ 'room_name' ];
$my_ranking [ 'room_cover' ] = $myRoom [ 'room_cover' ];
2026-01-12 09:21:48 +08:00
} else {
$myRoom [ 'id' ] = 0 ;
$my_ranking [ 'rank' ] = - 1 ;
$my_ranking [ 'total' ] = 0 ;
$my_ranking [ 'diff' ] = 0 ;
$my_ranking [ 'room_name' ] = '' ;
$my_ranking [ 'room_cover' ] = '' ;
2025-08-07 20:21:47 +08:00
}
2026-01-12 10:36:08 +08:00
2026-01-12 09:21:48 +08:00
$lists = db :: name ( 'room_daily_income' ) -> alias ( 'a' )
2026-01-12 10:58:39 +08:00
-> join ( 'vs_room b' , 'a.room_id = b.id' , 'left' )
2026-01-12 11:14:26 +08:00
-> field ( 'a.room_id,sum(a.income) * ' . $ratio . ' as total,b.room_name,b.room_cover,b.room_number' )
2026-01-12 10:39:12 +08:00
-> where ([ 'a.date' => [ 'between' , [ $begin_time , $end_time ]]])
2026-01-12 11:01:34 +08:00
-> group ( 'a.room_id' )
2026-01-12 09:21:48 +08:00
-> order ( 'total desc' )
-> limit ( 20 )
-> select ();
2026-01-12 10:59:59 +08:00
// var_dump($lists);exit;
2026-01-12 09:21:48 +08:00
if ( $lists ){
foreach ( $lists as $key => $value ) {
2026-01-12 10:58:39 +08:00
$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' ]);
2026-01-12 09:21:48 +08:00
}
}
}
2025-08-07 20:21:47 +08:00
$data = [
'my_ranking' => $my_ranking ,
'lists' => $lists
];
return [ 'code' => 1 , 'msg' => '获取成功' , 'data' => $data ];
}
2026-01-12 10:31:07 +08:00
2025-12-06 12:12:28 +08:00
//真爱榜
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' )
2025-12-06 14:34:11 +08:00
-> where ([ 'a.status' => 1 ])
2025-12-06 14:41:32 +08:00
-> 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' )
2025-12-06 12:12:28 +08:00
-> 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' ]);
}
}
2025-12-11 16:08:50 +08:00
} else {
foreach ( $lists as $key => $value ) {
$lists [ $key ][ 'rank' ] = $key + 1 ;
}
2025-12-06 12:12:28 +08:00
}
} else {
$my_ranking = [
2025-12-06 14:41:32 +08:00
'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' => '' ,
2025-12-06 12:12:28 +08:00
'exp' => 0 ,
'diff' => 0 ,
'rank' => - 1 ,
2025-12-06 14:41:32 +08:00
'total' => 0
2025-12-06 12:12:28 +08:00
];
}
$data = [
'my_ranking' => $my_ranking ,
'lists' => $lists
];
return [ 'code' => 1 , 'msg' => '获取成功' , 'data' => $data ];
}
2025-08-07 20:21:47 +08:00
}