2025-08-13 10:43:56 +08:00
< ? php
namespace app\api\model ;
use app\common\controller\Push ;
use think\Cache ;
use think\Db ;
use think\Model ;
class Room extends Model
{
protected $table = 'fa_vs_room' ;
private $redis ;
public function __construct ()
{
parent :: __construct ();
$this -> redis = \think\Cache :: store ( 'redis' ) -> handler ();
}
//创建房间 创建
public function user_create_room ( $uid , $room_name , $room_cover , $room_intro , $type = 0 )
{
$user_mobile = model ( 'User' ) -> where ( 'id' , $uid ) -> value ( 'mobile' );
if ( $user_mobile == null ) {
return [ 'code' => 0 , 'msg' => '请先绑定手机号' , 'data' => null ];
}
$user_info = db :: name ( 'user_auth' ) -> where ( 'mobile' , $user_mobile ) -> field ( 'is_real' ) -> find ();
if ( ! $user_info || $user_info [ 'is_real' ] != 1 ) {
return [ 'code' => 0 , 'msg' => '请先进行实名认证通过后操作' , 'data' => null ];
}
if ( $type <= 0 ){
$room_info = db :: name ( 'vs_room' ) -> where ([ 'user_id' => $uid , 'type_id' => [ '<>' , 6 ]]) -> find ();
if ( ! empty ( $room_info )) {
return [ 'code' => 0 , 'msg' => '已有直播间请勿重复创建' , 'data' => null ];
} else {
//首次建立房间【完成任务】
model ( 'DailyTasks' ) -> tasks_complete ( $uid , 15 );
}
}
if ( $type <= 0 ){
$data [ 'room_number' ] = $this -> get_user_code ();
$data [ 'type_id' ] = 1 ;
$data [ 'apply_status' ] = 1 ;
2025-08-22 14:32:16 +08:00
$data [ 'label_id' ] = 1 ;
} elseif ( $type == 7 ){
2025-08-13 10:43:56 +08:00
$data [ 'room_number' ] = $this -> get_user_code ();
$data [ 'type_id' ] = 6 ; //cp电影房
$room_intro = $room_intro . '(' . $type . ')' ;
$data [ 'apply_status' ] = 2 ;
2025-08-22 14:32:16 +08:00
$data [ 'label_id' ] = 5 ;
}
else { //cp电影房
$data [ 'room_number' ] = $this -> get_user_code ();
$data [ 'type_id' ] = 6 ; //cp电影房
$room_intro = $room_intro . '(' . $type . ')' ;
$data [ 'apply_status' ] = 2 ;
$data [ 'label_id' ] = 1 ;
2025-08-13 10:43:56 +08:00
}
$data [ 'user_id' ] = $uid ;
$data [ 'room_name' ] = $room_name ;
$data [ 'room_cover' ] = $room_cover ;
$data [ 'room_intro' ] = $room_intro ;
$data [ 'room_background' ] = get_system_config_value ( 'web_site' ) . '/data/default/delfultroombackground.jpg' ;
$data [ 'is_earnings' ] = 1 ;
$data [ 'createtime' ] = time ();
Db :: startTrans ();
$room_id = db :: name ( 'vs_room' ) -> insertGetId ( $data );
if ( ! $room_id ) {
Db :: rollback ();
return [ 'code' => 0 , 'msg' => '创建失败' , 'data' => null ];
}
if ( $type <= 0 ){
//创建房间麦位默认点唱10个麦位
$reslut1 = model ( 'RoomPit' ) -> create_room_pit ( 1 , $room_id );
if ( $reslut1 [ 'code' ] == 0 ){
Db :: rollback ();
return [ 'code' => 0 , 'msg' => '创建失败' , 'data' => null ];
}
}
if ( $type <= 0 ) { //创建房间
//用户是否加入工会
$guild_user_id = Db :: name ( 'vs_guild_user' ) -> where ([ 'user_id' => $uid , 'status' => 1 , 'delete_time' => 0 ]) -> value ( 'id' );
if ( $guild_user_id > 0 ) {
db :: name ( 'vs_guild_user' ) -> where ( 'id' , $guild_user_id ) -> update ([ 'room_id' => $room_id ]);
}
}
//创建腾讯云群组
$reslut = model ( 'Tencent' ) -> create_group ( $uid , 'room' . $room_id );
if ( $reslut [ 'code' ] != 1 ){
Db :: rollback ();
return [ 'code' => 0 , 'msg' => $reslut [ 'msg' ], 'data' => null ];
}
Db :: commit ();
return [ 'code' => 1 , 'msg' => '创建成功' , 'data' => $room_id ];
}
//过滤靓号
public function get_user_code ()
{
$user_code = db :: name ( 'vs_room' ) -> order ( 'room_number desc' ) -> value ( 'room_number' );
if ( empty ( $user_code )){
$user_code = 100000 ;
}
$user_code = $user_code + 1 ;
$vip_code = db :: name ( 'vip_code' ) -> where ([ 'type' => 2 , 'status' => 1 ]) -> field ( 'code' ) -> select ();
if ( empty ( $vip_code )) {
return $user_code ;
}
if ( in_array ( $user_code , ( array ) $vip_code )) {
return $user_code + 2 ;
}
return $user_code ;
}
//编辑房间
public function user_edit_room ( $uid , $room_id , $room_name , $room_cover , $room_intro , $room_background_id )
{
if ( $room_id <= 0 ){
return [ 'code' => 0 , 'msg' => '房间不存在' , 'data' => null ];
}
//判断用户是否是房主
$room_info = db :: name ( 'vs_room' ) -> where ( 'id' , $room_id ) -> field ( 'user_id' ) -> find ();
//判断用户是否是主持
$room_user_info = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $uid , 'type' => 2 , 'delete_time' => null ]) -> find ();
if ( $room_info [ 'user_id' ] != $uid && empty ( $room_user_info )) {
return [ 'code' => 0 , 'msg' => '您不是该房间的房主或管理,无权限操作' , 'data' => null ];
}
if ( $room_name != null ){
$data [ 'room_name' ] = $room_name ;
}
if ( $room_cover != null ){
$data [ 'room_cover' ] = $room_cover ;
}
if ( $room_intro != null ){
$data [ 'room_intro' ] = $room_intro ;
}
if ( $room_background_id != null ){
$data [ 'room_background' ] = $room_background_id ;
}
if ( ! empty ( $data )){
$reslut = $this -> where ( 'id' , $room_id ) -> update ( $data );
if ( ! $reslut ) {
return [ 'code' => 0 , 'msg' => '修改失败' , 'data' => null ];
}
}
//推送消息
$username = model ( 'User' ) -> where ( 'id' , $uid ) -> value ( 'nickname' );
$RoomInfo = $this -> room_info ( $uid , $room_id );
$text = [
'RoomInfo' => $RoomInfo [ 'data' ][ 'room_info' ],
'text' => $username . '修改了房间信息'
];
//聊天室推送系统消息
model ( 'Chat' ) -> sendMsg ( 1020 , $room_id , $text );
return [ 'code' => 1 , 'msg' => '修改成功' , 'data' => null ];
}
//房间列表
public function room_list ( $label_id , $is_top , $page , $page_limit )
{
$page = intval ( $page );
$page_limit = $page_limit < 20 ? $page_limit : 20 ;
$map [ 'delete_time' ] = 0 ; //0 未删除, 不等于0 表示已删除
$map [ 'room_status' ] = 1 ; //房间状态1正常2封禁3关闭
// $map['is_show_room'] = 1;//是否显示房间 1是2否
$map [ 'apply_status' ] = 2 ; //1待审核 2审核通过 3审核失败
if ( ! empty ( $label_id ) && $label_id > 0 ){
$map [ 'type_id' ] = $label_id ;
}
if ( ! empty ( $label_id ) && $label_id < 0 ){
$map [ 'is_hot' ] = 2 ;
}
if ( $is_top == 2 ){
$map [ 'is_top' ] = $is_top ;
}
$list = db :: name ( 'vs_room' ) -> field ( 'id as room_id,room_number,user_id,room_name,room_cover,room_password,today_hot_value as hot_value,label_id,is_show_room' )
-> where ( $map ) -> order ( 'hot_value desc' ) -> page ( $page , $page_limit ) -> select ();
// var_dump($list);
foreach ( $list as $k => & $v ){
if ( $v [ 'is_show_room' ] == 2 ){ //是否显示房间 1是2否
//查询当前房间是否有主持在麦上
$room_host_info = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $v [ 'room_id' ], 'pit_number' => 9 ]) -> value ( 'user_id' );
if ( $room_host_info == 0 ){
unset ( $list [ $k ]);
continue ;
}
}
// $v['hot_value'] = $v['hot_value'] * 10;
$v [ 'user_list' ] = model ( 'RoomUser' ) -> get_room_user_list ( $v [ 'room_id' ]);
$v [ 'label_name' ] = db :: name ( 'vs_room_label' ) -> where ( 'id' , $v [ 'label_id' ]) -> value ( 'label_name' );
$v [ 'label_icon' ] = db :: name ( 'vs_room_label' ) -> where ( 'id' , $v [ 'label_id' ]) -> value ( 'label_icon' );
}
//$list 不为空 数组重组
$list = array_values (( array ) $list );
//版本号
$app_version = request () -> header ( 'App-Version' );
$system = request () -> header ( 'system' );
$api_version = 0 ;
if ( $system == 'iOS' ) {
$api_versions = db :: name ( 'version' ) -> where ([ 'type' => 2 , 'status' => 1 ]) -> order ( 'id' , 'desc' ) -> find ();
$result = version_compare ( $api_versions [ 'oldversion' ], $app_version );
if ( $result < 0 ) {
$api_version = 1 ;
}
}
return [ 'code' => 1 , 'msg' => '获取成功' , 'data' => $list , 'api_version' => $api_version ];
}
//关注的用户现在所在房间(废弃)
public function user_follow_in_room_list ( $uid , $page , $page_limit )
{
//关注的用户列表
$follow_list = db :: name ( 'user_follow' ) -> where ( 'user_id' , $uid ) -> field ( 'follow_user_id' ) -> select ();
if ( ! empty ( $follow_list )){
$user_room_list = [];
foreach ( $follow_list as $k => $v ){
//用户是否在房间中
$user_room_info = db :: name ( 'vs_room_visitor' ) -> where ( 'user_id' , $v [ 'follow_user_id' ]) -> field ( 'room_id' ) -> find ();
if ( ! empty ( $user_room_info )){
$user_room_list [] = $user_room_info [ 'room_id' ];
}
}
}
if ( ! empty ( $user_room_list )){
$list = db :: name ( 'vs_room' ) -> field ( 'id as room_id,room_number,user_id,room_name,room_cover,room_password,today_hot_value as hot_value' )
-> where ( 'id' , 'in' , $user_room_list ) -> order ( 'hot_value desc' ) -> page ( $page , $page_limit ) -> select ();
foreach ( $list as $k => & $v ){
// $v['hot_value'] = $v['hot_value'] * 10;
$v [ 'user_list' ] = model ( 'RoomUser' ) -> get_room_user_list ( $v [ 'id' ]);
}
return [ 'code' => 1 , 'msg' => '获取成功' , 'data' => $list ];
}
return [ 'code' => 1 , 'msg' => '获取成功' , 'data' => []];
}
//首页弹出的房间
public function index_recommend_room ()
{
$map = [];
$map [ 'a.delete_time' ] = 0 ; // 0 未删除, 不等于0 表示已删除
$map [ 'a.room_status' ] = 1 ; // 房间状态1正常2封禁3关闭
$map [ 'a.is_show_room' ] = 1 ; // 是否显示房间 1是2否
$map [ 'a.apply_status' ] = 2 ; // 1待审核 2审核通过 3审核失败
$map [ 'a.is_recommend' ] = 2 ; // 2推荐
$roominfo = $this -> alias ( 'a' ) -> join ( 'vs_room_visitor b' , 'a.id = b.room_id' )
-> field ( 'a.id as room_id,a.user_id,a.room_name,a.room_cover,count(b.id) as count' )
-> where ( $map ) -> order ( 'count desc' ) -> find ();
if ( ! $roominfo ){
//随机获取一个房间
$roominfo = $this -> field ( 'id as room_id,user_id,room_name,room_cover' )
-> where ([ 'apply_status' => 2 , 'room_status' => 1 , 'room_password' => '' ]) -> orderRaw ( 'rand()' ) -> find ();
}
return [ 'code' => 1 , 'msg' => '获取成功' , 'data' => $roominfo ];
}
//我创建/主持/管理/关注的房间
public function my_associated_room ( $uid , $type , $page , $page_limit )
{
$cp_room = null ;
if ( $type == 1 ){ ////0-我创建的 1-我主持的 2-我管理的 3-我关注的
$roomInfo = db :: name ( 'vs_room_host' ) -> alias ( 'a' ) -> join ( 'vs_room b' , 'a.room_id = b.id' )
-> field ( 'a.room_id,a.ratio,b.room_number,b.user_id,b.room_name,b.room_cover,b.apply_status,b.type_id,b.room_status,b.room_password,b.label_id' )
-> where ([ 'a.user_id' => $uid , 'a.delete_time' => null , 'a.type' => 1 , 'b.room_status' => 1 ])
-> page ( $page , $page_limit )
-> select ();
} elseif ( $type == 2 ){
$roomInfo = db :: name ( 'vs_room_host' ) -> alias ( 'a' ) -> join ( 'vs_room b' , 'a.room_id = b.id' )
-> field ( 'a.room_id,b.room_number,b.user_id,b.room_name,b.room_cover,b.apply_status,b.type_id,b.room_status,b.room_password,b.label_id' )
-> where ([ 'a.user_id' => $uid , 'a.delete_time' => null , 'a.type' => 2 , 'b.room_status' => 1 ])
-> page ( $page , $page_limit )
-> select ();
} elseif ( $type == 3 ){
$roomInfo = db :: name ( 'user_follow' ) -> alias ( 'a' ) -> join ( 'vs_room b' , 'a.follow_id = b.id' , 'left' )
-> field ( 'a.follow_id as room_id,b.room_number,b.user_id,b.room_name,b.room_cover,b.apply_status,b.type_id,b.room_status,b.room_password,b.label_id' )
-> where ([ 'a.user_id' => $uid , 'a.type' => 2 , 'b.room_status' => 1 ])
-> page ( $page , $page_limit )
-> select ();
} else {
$roomInfo = db :: name ( 'vs_room' )
-> field ( 'id as room_id,room_number,user_id,room_name,room_cover,apply_status,type_id,room_status,label_id' )
-> where ( 'user_id' , $uid )
-> where ([ 'type_id' => [ '<>' , 6 ], 'room_status' => 1 ])
-> page ( $page , $page_limit )
-> select ();
}
if ( isset ( $roomInfo )){
foreach ( $roomInfo as & $v ){
$v [ 'label_icon' ] = db :: name ( 'vs_room_label' ) -> where ( 'id' , $v [ 'label_id' ]) -> value ( 'label_icon' );
$v [ 'type_name' ] = db :: name ( 'vs_room_type' ) -> where ( 'id' , $v [ 'type_id' ]) -> value ( 'type_name' ) ? ? '' ;
$v [ 'nickname' ] = db :: name ( 'user' ) -> where ( 'id' , $v [ 'user_id' ]) -> value ( 'nickname' );
$v [ 'is_use_code' ] = 0 ;
$liang = model ( 'Decorate' ) -> user_decorate_detail ( $v [ 'room_id' ], 7 );
if ( $liang != $v [ 'room_number' ]){
$v [ 'is_use_code' ] = 1 ;
$v [ 'room_number' ] = $liang ;
}
//今日收益
$v [ 'today_profit' ] = $this -> get_room_today_profit ( $v [ 'room_id' ]) * 10 ;
//关注数
$v [ 'follow_num' ] = db :: name ( 'user_follow' ) -> where ( 'follow_id' , $v [ 'room_id' ]) -> where ( 'type' , 2 ) -> count ();
//访问数
$v [ 'visit_num' ] = db :: name ( 'user_visit_log' ) -> where ( 'to_id' , $v [ 'room_id' ]) -> where ( 'type' , 2 ) -> count ();
//在线数
$v [ 'online_num' ] = db :: name ( 'vs_room_visitor' ) -> where ( 'room_id' , $v [ 'room_id' ]) -> where ( 'is_delete' , 1 ) -> count ();
$v [ 'cp_room' ] = $cp_room ;
}
}
return $roomInfo ;
}
//我的Cp房间
public function my_cp_room ( $uid )
{
$cp_room1 = [];
$cp_room2 = db :: name ( 'vs_room_cp_movie' ) -> field ( 'cp_id,room_id,user_id,user_id1,time_day,relation_id' )
-> where ( 'status' , 1 ) -> where ( 'user_id' , $uid ) -> select ();
//判断是否有数据
if ( empty ( $cp_room2 )){
$cp_room2 = db :: name ( 'vs_room_cp_movie' ) -> field ( 'cp_id,room_id,user_id,user_id1,time_day,relation_id' )
-> where ( 'status' , 1 ) -> where ( 'user_id1' , $uid ) -> select ();
} else {
$cp_room1 = db :: name ( 'vs_room_cp_movie' ) -> field ( 'cp_id,room_id,user_id,user_id1,time_day,relation_id' )
-> where ( 'status' , 1 ) -> where ( 'user_id1' , $uid ) -> select ();
}
$cp_room3 = array_merge ( $cp_room1 , ( array ) $cp_room2 );
// var_dump($cp_room3);
$cp_room = null ;
$i = 0 ;
foreach ( $cp_room3 as & $v ){
if ( $v [ 'time_day' ] <= time ()){
db :: name ( 'vs_room_cp_movie' ) -> where ( 'cp_id' , $v [ 'cp_id' ]) -> update ([ 'status' => 2 ]);
unset ( $v );
continue ;
}
$room_name = '' ;
if ( $v [ 'user_id' ] == $uid ){
$room_name = db :: name ( 'user' ) -> where ( 'id' , $v [ 'user_id1' ]) -> value ( 'nickname' );
}
if ( $v [ 'user_id1' ] == $uid ){
$room_name = db :: name ( 'user' ) -> where ( 'id' , $v [ 'user_id' ]) -> value ( 'nickname' );
}
$cp_room [ $i ][ 'room_id' ] = $v [ 'room_id' ];
// $cp_room[$i]['room_name'] = '我 ❤️ '.$room_name.db::name('vs_room')->where('id', $v['room_id'])->value('room_name');
$cp_room [ $i ][ 'room_name' ] = '我 ❤️ ' . $room_name ;
$cp_room [ $i ][ 'room_number' ] = db :: name ( 'vs_room' ) -> where ( 'id' , $v [ 'room_id' ]) -> value ( 'room_number' );
$cp_room [ $i ][ 'end_time' ] = $v [ 'time_day' ];
$cp_room [ $i ][ 'user1_avatar' ] = db :: name ( 'user' ) -> where ( 'id' , $v [ 'user_id' ]) -> value ( 'avatar' );
$cp_room [ $i ][ 'user2_avatar' ] = db :: name ( 'user' ) -> where ( 'id' , $v [ 'user_id1' ]) -> value ( 'avatar' );
$cp_room [ $i ][ 'earnings' ] = $this -> get_room_today_profit ( $v [ 'room_id' ]) * 10 ;
$cp_room [ $i ][ 'relation' ] = db :: name ( 'vs_relation' ) -> where ( 'id' , $v [ 'relation_id' ]) -> value ( 'name' );
$cp_room [ $i ][ 'hot_value' ] = db :: name ( 'vs_room' ) -> where ( 'id' , $v [ 'room_id' ]) -> value ( 'hot_value' );
$i ++ ;
}
return $cp_room ;
}
//房间今日收益
public function get_room_today_profit ( $room_id )
{
$room_type = db :: name ( 'vs_room' ) -> where ( 'id' , $room_id ) -> value ( 'type_id' );
$today_start_time = strtotime ( date ( 'Y-m-d' ));
$today_end_time = $today_start_time + 86400 ;
if ( $room_type == 6 ){
$profit = db :: name ( 'vs_give_gift' ) -> where ( 'from_id' , $room_id ) -> where ( 'from' , 6 ) -> where ( 'createtime' , 'between' , [ $today_start_time , $today_end_time ]) -> sum ( 'total_price' );
} else {
$profit = db :: name ( 'vs_give_gift' ) -> where ( 'from_id' , $room_id ) -> where ( 'from' , 2 ) -> where ( 'createtime' , 'between' , [ $today_start_time , $today_end_time ]) -> sum ( 'total_price' );
}
return $profit ;
}
//房间补贴
public function room_ubsidy ( $room_id ){
$room_type = db :: name ( 'vs_room' ) -> where ( 'id' , $room_id ) -> value ( 'type_id' );
//上周的第一天
$week_start = date ( 'Y-m-d' , strtotime ( 'last monday' ));
$week_end = date ( 'Y-m-d' , strtotime ( 'last monday +6 days' ));
//获取上周的补贴记录
$subsidy_list = db :: name ( 'vs_room_subsidy' )
-> where ([ 'room_id' => $room_id , 'start_time' => $week_start , 'end_time' => $week_end ])
-> find ();
//本周的第一天
$week = strtotime ( date ( 'Y-m-d' , strtotime ( 'this week Monday' )));
//本周的房间流水
if ( $room_type == 6 ){
$total_transaction = db :: name ( 'vs_give_gift' )
-> where ([ 'from_id' => $room_id , 'from' => 6 , 'createtime' => [ 'between' , [ $week , time ()]]])
-> sum ( 'total_price' );
} else {
$total_transaction = db :: name ( 'vs_give_gift' )
-> where ([ 'from_id' => $room_id , 'from' => 2 , 'createtime' => [ 'between' , [ $week , time ()]]])
-> sum ( 'total_price' );
}
$ss = 0 ;
if ( $total_transaction ){
//根据房间流水 获取补贴比例 单位%
$subsidy_config = db :: name ( 'vs_room_subsidy_config' ) -> where ( 'start_amount <= ' . $total_transaction )
-> where ( 'end_amount > ' . $total_transaction ) -> value ( 'subsidy_ratio' );
$ss = $total_transaction * ( $subsidy_config / 100 );
}
$week_subsidy [ 'total_transaction' ] = $total_transaction ? ? 0 ;
$week_subsidy [ 'subsidy_amount' ] = $ss ;
$week_subsidy [ 'status' ] = 0 ; //0未发放, 1已发放'
$subsidy_lists [ 'total_transaction' ] = $subsidy_list [ 'total_transaction' ] ? ? 0 ;
$subsidy_lists [ 'subsidy_amount' ] = $subsidy_list [ 'subsidy_amount' ] ? ? 0 ;
$subsidy_lists [ 'status' ] = $subsidy_list [ 'status' ] ? ? 0 ; //0未发放, 1已发放'
//周补贴说明
$data [ 'explain' ] = get_system_config_value ( 'web_site' ) . '/api/Page/page_show?id=16' ;
$data [ 'lastweek' ] = $subsidy_lists ;
$data [ 'thisweek' ] = $week_subsidy ;
return $data ;
}
//房间补贴历史记录
public function room_subsidy_history ( $room_id , $page , $page_limit ){
$page = intval ( $page );
$page_limit = $page_limit < 20 ? $page_limit : 20 ;
$list = db :: name ( 'vs_room_subsidy' ) -> where ([ 'room_id' => $room_id ]) -> page ( $page , $page_limit ) -> order ( 'id desc' ) -> select ();
foreach ( $list as $key => & $value ){
$value [ 'start_time' ] = date ( 'Y.m.d' , strtotime ( $value [ 'start_time' ]));
$value [ 'end_time' ] = date ( 'Y.m.d' , strtotime ( $value [ 'end_time' ]));
}
return $list ;
}
/*
* 房间流水明细
* 按天统计指定房间流水
*/
public function room_turnover_detail ( $room_id , $stime , $etime , $page , $page_limit ) {
$page = intval ( $page );
$page_limit = $page_limit < 20 ? $page_limit : 20 ;
$s_type = 0 ;
if ( ! empty ( $stime ) && ! empty ( $etime )){
$begin_time = strtotime ( $stime );
$end_time = strtotime ( $etime );
$s_type = 1 ;
}
$group_field = " FROM_UNIXTIME(a.`createtime`,'%Y-%m-%d') " ;
//获取当前用户房间
$roomModel = db :: name ( 'vs_room' );
$room = $roomModel -> where ( 'id' , $room_id ) -> field ( 'user_id,room_name,type_id' ) -> find ();
if ( ! $room ){
return [ 'code' => 0 , 'msg' => '房间不存在' , 'data' => null ];
}
//获取房间名称
// $room_name = $room['room_name'];
//查询房主是否加入公会
// $guild_id = model('Guild')->user_is_join($room['user_id']);
// //获取房主收益比例
// if($guild_id > 0){
// $room_user_ratio = get_system_config_value('room_author_guild_ratio')/100;
// }else{
$room_user_ratio = get_system_config_value ( 'room_author_ratio' ) / 100 ;
// }
//根据日期查询房间流水
$field = " b.nickname as sender_nickname,b.avatar as sender_avatar,c.nickname as receive_nickname,c.avatar as receive_avatar,dd.gift_name,a.number,a.total_price, { $group_field } as time " ;
$where [ 'a.from_id' ] = $room_id ;
if ( $room [ 'type_id' ] == 6 ){
$where [ 'a.from' ] = 6 ;
} else {
$where [ 'a.from' ] = 2 ;
}
if ( $s_type ) { //如果用时间限制查询
$where [ 'a.createtime' ] = [ 'between' , [ $begin_time , $end_time ]];
}
// $count = db::name('vs_give_gift')->alias('a')->field($field)
// ->join('user b', 'a.user_id = b.id')
// ->join('user c', 'a.gift_user = c.id')
// ->join('vs_give_gift d', 'a.gift_id = d.id')
// ->where($where)
// ->count();
$list = db :: name ( 'vs_give_gift' ) -> alias ( 'a' ) -> field ( $field )
-> join ( 'user b' , 'a.user_id = b.id' )
-> join ( 'user c' , 'a.gift_user = c.id' )
// ->join('vs_give_gift d', 'a.gift_id = d.id')
-> join ( 'vs_gift dd' , 'a.gift_id = dd.gid' )
-> where ( $where )
-> page ( $page , $page_limit )
-> order ( 'a.createtime desc' )
-> select ();
$list_data = [];
$list_data_array = [];
$total_earning = 0 ; //总收益
//总流水
$total_amount = db :: name ( 'vs_give_gift' ) -> alias ( 'a' ) -> where ( $where ) -> sum ( 'total_price' );
foreach ( $list as $key => $value ) {
$value [ 'total_price' ] = round ( $value [ 'total_price' ], 2 );
//收益计算
$value [ 'earning' ] = round ( $value [ 'total_price' ] * $room_user_ratio / get_system_config_value ( 'rmb_coin_ratio' ), 4 );
//按日期统计
$list_data [ $value [ 'time' ]][] = $value ;
}
$i = 0 ;
foreach ( $list_data as $k => & $v ){
$list_data_array [ $i ][ 'total_price' ] = 0 ;
$list_data_array [ $i ][ 'total_earning' ] = 0 ;
$list_data_array [ $i ][ 'time' ] = $k ;
$list_data_array [ $i ][ 'list' ] = $v ;
//每日流水统计
$day_where [ 'from_id' ] = $room_id ;
if ( $room [ 'type_id' ] == 6 ){
$day_where [ 'from' ] = 6 ;
} else {
$day_where [ 'from' ] = 2 ;
}
$day_begin_time = strtotime ( $k . " 00:00:00 " );
$day_end_time = strtotime ( $k . " 23:59:59 " );
$day_where [ 'createtime' ] = [ 'between' , [ $day_begin_time , $day_end_time ]];
$day_total_price = db :: name ( 'vs_give_gift' ) -> where ( $day_where ) -> sum ( 'total_price' );
$list_data_array [ $i ][ 'total_price' ] = $day_total_price ;
//每日收益
$list_data_array [ $i ][ 'total_earning' ] = round ( $day_total_price * $room_user_ratio / get_system_config_value ( 'rmb_coin_ratio' ), 4 );
$i ++ ;
}
//房主总收益
$coin_exchange_rate = get_system_config_value ( 'coin_exchange_rate' ) ? ? 1 ;
$total_earning = round ( $total_amount * $room_user_ratio / $coin_exchange_rate , 4 );
return [ 'code' => 1 , 'msg' => '成功' , 'data' => [ 'total_amount' => $total_amount , 'total_earning' => $total_earning , 'list' => $list_data_array ]];
}
//进入房间
public function join_room ( $user_id , $room_id , $password ) {
$room = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'apply_status' => 2 ]) -> find ();
if ( ! isset ( $room )) {
return [ 'code' => 0 , 'msg' => '房间不存在' , 'data' => '' ];
}
if ( isset ( $room [ 'password' ]) && $user_id != $room [ 'user_id' ]){
if ( empty ( $password ) || $room [ 'password' ] != md5 ( $password )) {
return [ 'code' => 0 , 'msg' => '密码错误' , 'data' => '' ];
}
}
if ( $room [ 'room_status' ] == 2 ) { //1正常2封禁3关闭
$minutes = floor (( $room [ 'seal_time' ] - time ()) % 86400 / 60 );
if ( $minutes > 0 ) {
return [ 'code' => 0 , 'msg' => '此房间被封,请' . $minutes . '分钟以后再尝试' , 'data' => '' ];
}
return [ 'code' => 0 , 'msg' => '房间状态异常' , 'data' => '' ];
}
if ( $room [ 'room_status' ] == 3 ) { //1正常2封禁3关闭
return [ 'code' => 0 , 'msg' => '房间不存在了' , 'data' => '' ];
}
$black = db :: name ( 'vs_room_black' ) -> where ([ 'room_id' => $room_id , 'black_id' => $user_id ]) -> find ();
//判断用户是被拉入黑名单
if ( isset ( $black ) && $black [ 'type' ] == 2 ) {
return [ 'code' => 0 , 'msg' => '您被拉入黑名单,请联系房主' , 'data' => '' ];
}
//用户是否被踢出房间
if ( isset ( $black ) && $black [ 'type' ] == 1 ){
if ( $black [ 'kick_time' ] >= time ()){
return [ 'code' => 0 , 'msg' => '您被踢出房间,请' . ceil (( $black [ 'kick_time' ] - time ()) / 60 ) . '分钟以后再尝试' , 'data' => '' ];
} else {
db :: name ( 'vs_room_black' ) -> where ([ 'id' => $black [ 'id' ]]) -> delete ();
}
}
//用户是否在其他房间
$room_user = db :: name ( 'vs_room_visitor' ) -> where ([ 'user_id' => $user_id ]) -> value ( 'room_id' );
if ( isset ( $room_user ) && $room_user != $room_id ) {
// return ['code' => 0, 'msg' => '您已在其他房间', 'data' => ''];
//根据房间状态判断是否要退出房间并且下麦
$roomInfo = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_user , 'apply_status' => 2 ]) -> find ();
if (( $roomInfo [ 'type_id' ] == 1 || $roomInfo [ 'type_id' ] == 3 || $roomInfo [ 'type_id' ] == 4 ) && $roomInfo [ 'label_id' ] == 1 ){
//退出其他房间
$this -> quit_room ( $user_id , $room_user , $user_id );
} elseif (( $roomInfo [ 'type_id' ] == 1 || $roomInfo [ 'type_id' ] == 3 || $roomInfo [ 'type_id' ] == 4 ) && $roomInfo [ 'label_id' ] == 2 ){ //k歌
//他的点歌列表
$song_list = db :: name ( 'vs_room_song' ) -> where ([ 'room_id' => $room_user , 'user_id' => $user_id ]) -> select ();
if ( count ( $song_list ) > 0 ){
foreach ( $song_list as $key => $value ){
if ( $value [ 'status' ] == 2 && $value [ 'times_status' ] == 1 ){
//切歌
model ( 'api/RoomSong' ) -> change_song ( $room_id , $value [ 'did' ]);
}
if ( $value [ 'status' ] == 1 ){
db :: name ( 'vs_room_song' ) -> where ([ 'did' => $value [ 'did' ]]) -> update ([ 'status' => 3 ]);
}
}
}
//记录用户退出房
$this -> quit_room ( $user_id , $room_user , $user_id );
} elseif ( $roomInfo [ 'type_id' ] == 3 ){
//是否在拍卖位
$pitNumber = Cache :: get ( 'auction_user_' . $room_user );
if ( isset ( $pitNumber ) && $pitNumber == $user_id ){
//用户在竞拍位 退出且不下麦
//记录用户退出房
db :: name ( 'vs_room_visitor' ) -> where ([ 'room_id' => $room_user , 'user_id' => $user_id ]) -> delete ();
$nickname = db :: name ( 'user' ) -> where ( 'id' , $user_id ) -> value ( 'nickname' );
$text [ 'text' ] = '用户 ' . $nickname . ' 退出了房间' ;
model ( 'api/Chat' ) -> sendMsg ( 1002 , $room_user , $text , $user_id );
} else {
//退出其他房间
$this -> quit_room ( $user_id , $room_user , $user_id );
}
}
}
//K歌模式下获取歌曲信息
$song_pit_list = null ;
$song_list = null ;
$next_song_info = null ;
//拍卖模式下获取当前竞拍信息
$roomauction = null ;
$user_pit = 0 ;
$pit_list = [];
$cp_users = null ;
2025-08-20 10:44:31 +08:00
if ( $room [ 'type_id' ] == 1 || $room [ 'type_id' ] == 3 || $room [ 'type_id' ] == 4 || $room [ 'type_id' ] == 7 ) { //1点唱, 3男神, 4女神
2025-08-13 10:43:56 +08:00
if ( $room [ 'label_id' ] == 2 ){ //K歌
$song = $this -> get_song_info ( $room_id , $user_id );
$song_list = $song [ 'song_user_info' ];
$next_song_info = $song [ 'nextInfo' ];
$pit_list = $song [ 'pit_list' ];
$user_pit = $song [ 'user_pit' ];
$song_pit_list = $song [ 'song_pit_list' ];
} else {
//麦位信息
$pit_list = db :: name ( 'vs_room_pit' ) -> alias ( 'a' ) -> join ( 'user b' , 'a.user_id = b.id' , 'left' )
-> where ([ 'a.room_id' => $room [ 'id' ], 'a.status' => 1 ])
-> field ( 'a.id,a.user_id,a.pit_number,a.is_lock,a.is_mute,a.count_down,b.nickname,b.avatar,b.sex,b.user_code' )
-> order ( 'a.pit_number asc' ) -> select ();
foreach ( $pit_list as & $value ) {
$value [ 'charm' ] = 0 ;
$value [ 'dress' ] = '' ;
if ( isset ( $value [ 'user_id' ]) && $value [ 'user_id' ] > 0 ) {
$value [ 'charm' ] = db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room [ 'id' ], 'user_id' => $value [ 'user_id' ]]) -> value ( 'charm' );
$value [ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 1 );
$value [ 'user_code' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 6 );
}
}
$user_pit = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room [ 'id' ], 'user_id' => $user_id ]) -> find ();
}
} elseif ( $room [ 'type_id' ] == 2 ){ //拍卖 auction_room
$roomauction = $this -> auction_room ( $room_id , $user_id );
$pit_list = $roomauction [ 'pit_list' ];
$user_pit = $roomauction [ 'user_pit' ];
} elseif ( $room [ 'type_id' ] == 6 ){
//查看房间时间是否已到期
$room_time = db :: name ( 'vs_room_cp_movie' ) -> where ([ 'room_id' => $room [ 'id' ]]) -> value ( 'time_day' );
if ( $room_time <= time ()){
db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> update ([ 'room_status' => 3 ]);
db :: name ( 'vs_room_cp_movie' ) -> where ([ 'room_id' => $room [ 'id' ]]) -> update ([ 'status' => 2 ]);
model ( 'api/Tencent' ) -> delete_group ( 'room' . $room_id );
return [ 'code' => 0 , 'msg' => 'cp房间已到期' , 'data' => '' ];
}
$room_status = db :: name ( 'vs_room_cp_movie' ) -> where ([ 'room_id' => $room [ 'id' ]]) -> value ( 'status' );
if ( $room_status == 4 ){
db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> update ([ 'room_status' => 3 ]);
return [ 'code' => 0 , 'msg' => '房间已被迫结束' , 'data' => '' ];
}
$cp_users = db :: name ( 'vs_room_cp_movie' ) -> alias ( 'a' )
-> join ( 'user b' , 'a.user_id = b.id' , 'left' )
-> join ( 'user c' , 'a.user_id1 = c.id' , 'left' )
-> where ([ 'room_id' => $room [ 'id' ], 'a.status' => 1 ])
-> field ( 'a.time_day,a.cp_id,a.user_id,a.user_id1,b.nickname,c.nickname as nickname1,b.avatar,c.avatar as avatar1,b.user_code,c.user_code as user_code1' )
-> find ();
//非cp房用户不得进入
if ( $cp_users [ 'user_id' ] != $user_id && $cp_users [ 'user_id1' ] != $user_id ){
return [ 'code' => 0 , 'msg' => '您不是房间的cp用户, 请勿进入' , 'data' => '' ];
}
$cp_users [ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $cp_users [ 'user_id' ], 1 );
$cp_users [ 'dress1' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $cp_users [ 'user_id1' ], 1 );
if ( $cp_users [ 'user_id' ] == $user_id ){
$room_name = db :: name ( 'user' ) -> where ( 'id' , $cp_users [ 'user_id1' ]) -> value ( 'nickname' );
}
if ( $cp_users [ 'user_id1' ] == $user_id ){
$room_name = db :: name ( 'user' ) -> where ( 'id' , $cp_users [ 'user_id' ]) -> value ( 'nickname' );
}
$room [ 'room_name' ] = '我 ❤️ ' . $room_name ;
}
//记录用户进入房间
$is_join = db :: name ( 'vs_room_visitor' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( ! $is_join ) {
db :: name ( 'vs_room_visitor' ) -> insert ([ 'room_id' => $room_id , 'user_id' => $user_id , 'createtime' => time ()]);
}
$room [ 'is_use_code' ] = 0 ;
$liang = model ( 'api/Decorate' ) -> user_decorate_detail ( $room [ 'id' ], 7 );
if ( $liang != $room [ 'room_number' ]){
$room [ 'is_use_code' ] = 1 ;
$room [ 'room_number' ] = $liang ;
}
//头条
$headline = db :: name ( 'vs_headline' ) -> where ( 'end_time' , '>' , time ()) -> where ( 'is_now' , 1 ) -> find ();
$headline_data = null ;
if ( $headline ){
$headline_data = $headline ;
$headline_data [ 'nickname' ] = db :: name ( 'user' ) -> where ( 'id' , $headline [ 'user_id' ]) -> value ( 'nickname' );
$headline_data [ 'avatar' ] = db :: name ( 'user' ) -> where ( 'id' , $headline [ 'user_id' ]) -> value ( 'avatar' );
}
if ( $room [ 'label_id' ] == 3 ){
$label_id = 2 ;
} elseif ( $room [ 'label_id' ] == 4 ){
$label_id = 1 ;
} else {
$label_id = $room [ 'label_id' ];
}
//判断当前房间是否正在pk
//pk信息
$pk_info = null ;
$is_pk = db :: name ( 'vs_room_pk' ) -> where ([ 'room_id_a' => $room_id ]) -> where ([ 'status' => [ 'in' ,[ 2 , 3 , 4 ]]])
-> field ( 'pk_id,create_user_id,room_id_b,create_value_a,receive_value_b,pk_times,start_time,status,updatetime' ) -> find ();
if ( $is_pk ){
$pk_info [ 'pk_room_id' ] = $is_pk [ 'room_id_b' ]; //对方房间id
$pk_info [ 'invite_pk_user_id' ] = $is_pk [ 'create_user_id' ]; //发起pk用户id
$pk_info [ 'pk_id' ] = $is_pk [ 'pk_id' ]; //pkid
$pk_info [ 'pk_end_times' ] = $is_pk [ 'start_time' ] + $is_pk [ 'pk_times' ] * 60 ; //pk结束时间
$pk_info [ 'my_room_value' ] = $is_pk [ 'create_value_a' ]; //自己房间的值
$pk_info [ 'pk_room_value' ] = $is_pk [ 'receive_value_b' ]; //对方房间的值
$pk_info [ 'pk_part' ] = $is_pk [ 'status' ];
if ( $is_pk [ 'status' ] == 2 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'updatetime' ] + 300 ;
} elseif ( $is_pk [ 'status' ] == 3 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'start_time' ] + $is_pk [ 'pk_times' ] * 60 ;
} elseif ( $is_pk [ 'status' ] == 4 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'updatetime' ] + 300 ;
if ( $is_pk [ 'create_value_a' ] > $is_pk [ 'receive_value_b' ]){
$pk_info [ 'create_type' ] = 1 ; //赢
$pk_info [ 'receive_type' ] = 0 ; //输
} elseif ( $is_pk [ 'create_value_a' ] = $is_pk [ 'receive_value_b' ]){
$pk_info [ 'create_type' ] = 2 ; //平局
$pk_info [ 'receive_type' ] = 2 ; //平局
} else {
$pk_info [ 'create_type' ] = 0 ; //输
$pk_info [ 'receive_type' ] = 1 ; //赢
}
}
} else {
$is_pk = db :: name ( 'vs_room_pk' ) -> where ([ 'room_id_b' => $room_id ]) -> where ([ 'status' => [ 'in' ,[ 2 , 3 , 4 ]]])
-> field ( 'pk_id,create_user_id,room_id_a,create_value_a,receive_value_b,pk_times,start_time,status,updatetime' ) -> find ();
if ( $is_pk ){
$pk_info [ 'pk_room_id' ] = $is_pk [ 'room_id_a' ];
$pk_info [ 'invite_pk_user_id' ] = $is_pk [ 'create_user_id' ];
$pk_info [ 'pk_id' ] = $is_pk [ 'pk_id' ];
$pk_info [ 'pk_end_times' ] = $is_pk [ 'start_time' ] + $is_pk [ 'pk_times' ] * 60 ;
$pk_info [ 'my_room_value' ] = $is_pk [ 'receive_value_b' ];
$pk_info [ 'pk_room_value' ] = $is_pk [ 'create_value_a' ];
$pk_info [ 'pk_part' ] = $is_pk [ 'status' ];
if ( $is_pk [ 'status' ] == 2 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'updatetime' ] + 300 ;
} elseif ( $is_pk [ 'status' ] == 3 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'start_time' ] + $is_pk [ 'pk_times' ] * 60 ;
} elseif ( $is_pk [ 'status' ] == 4 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'updatetime' ] + 300 ;
if ( $is_pk [ 'create_value_a' ] > $is_pk [ 'receive_value_b' ]){
$pk_info [ 'create_type' ] = 1 ; //赢
$pk_info [ 'receive_type' ] = 0 ; //输
} elseif ( $is_pk [ 'create_value_a' ] = $is_pk [ 'receive_value_b' ]){
$pk_info [ 'create_type' ] = 2 ; //平局
$pk_info [ 'receive_type' ] = 2 ; //平局
} else {
$pk_info [ 'create_type' ] = 0 ; //输
$pk_info [ 'receive_type' ] = 1 ; //赢
}
}
}
}
//上次的PK参数
if ( $room [ 'last_pk_room_id' ] > 0 ){
$last_pk_room_id = $room [ 'last_pk_room_id' ];
} else {
$last_pk_info = db :: name ( 'vs_room_pk' ) -> where ([ 'room_id_a' => $room_id ]) -> order ( 'pk_id' , 'desc' ) -> find ();
if ( $last_pk_info ){
$last_pk_room_id = $last_pk_info [ 'room_id_b' ];
} else {
$last_pk_info1 = db :: name ( 'vs_room_pk' ) -> where ([ 'room_id_b' => $room_id ]) -> order ( 'pk_id' , 'desc' ) -> find ();
if ( $last_pk_info1 ){
$last_pk_room_id = $last_pk_info1 [ 'room_id_a' ];
} else {
$last_pk_room_id = 0 ;
}
}
}
//房间信息
$room_info = [
'room_id' => $room [ 'id' ],
'is_use_code' => $room [ 'is_use_code' ],
'room_number' => $room [ 'room_number' ],
'room_name' => $room [ 'room_name' ],
'room_cover' => $room [ 'room_cover' ],
'room_intro' => $room [ 'room_intro' ],
'type_id' => $room [ 'type_id' ],
'type_name' => db :: name ( 'vs_room_type' ) -> where ( 'id' , $room [ 'type_id' ]) -> value ( 'type_name' ),
'user_id' => $room [ 'user_id' ],
'label_id' => $label_id ,
'label_icon' => db :: name ( 'vs_room_label' ) -> where ( 'id' , $room [ 'label_id' ]) -> value ( 'label_icon_room' ),
'room_background' => $room [ 'room_background' ],
'hot_value' => $room [ 'today_hot_value' ],
'chatrooms' => 'room' . $room [ 'id' ],
'pit_list' => $pit_list ,
'room_up_pit_type' => $room [ 'room_up_pit_type' ],
'online_number' => db :: name ( 'vs_room_visitor' ) -> where ([ 'room_id' => $room [ 'id' ], 'on_line' => 1 ]) -> count (),
'head_line' => $headline_data ,
'is_pk' => $room [ 'is_pk' ], //1-默认接受PK, 2不接受',
'last_pk_room_id' => $last_pk_room_id ,
'queue_number' => db :: name ( 'vs_room_pit_apply' ) -> where ([ 'room_id' => $room_id , 'status' => 0 ]) -> count ()
];
//房主信息
$room_owner = db :: name ( 'user' ) -> where ( 'id' , $room [ 'user_id' ]) -> field ( 'id as user_id,user_code,sex,nickname,avatar' ) -> find ();
$room_owner [ 'user_code' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $room [ 'user_id' ], 6 );
//当前用户信息
$user_info = $this -> get_user_info ( $room_id , $user_id , $user_pit , 1 ); //用户进入房间 才会获取声网token, 更新房间不获取声网token
$user_info [ 'is_room_owner' ] = ( $user_id == $room [ 'user_id' ]) ? 1 : 0 ;
//推送信息
$text [ 'text' ] = '欢迎用户 ' . $user_info [ 'nickname' ] . ' 进入房间' ;
$text [ 'jia_jia' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $user_id , 2 );
$text [ 'FromUserInfo' ] = db :: name ( 'user' ) -> where ( 'id' , $user_id ) -> field ( 'id as user_id,nickname,avatar,sex' ) -> find ();
$text [ 'FromUserInfo' ][ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $user_id , 1 );
$text [ 'FromUserInfo' ][ 'mic_dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $user_id , 4 );
$text [ 'FromUserInfo' ][ 'chat_dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $user_id , 5 );
model ( 'api/Chat' ) -> sendMsg ( 1001 , $room_id , $text , $user_id );
//记录用户访问记录
if ( $user_id != $room_owner [ 'user_id' ]){
model ( 'api/User' ) -> add_user_visit_log ( 2 , $user_id , $room_id );
}
2025-08-20 10:17:10 +08:00
//交友相关回值
if ( $room [ 'type_id' ] == 7 ){
$friend = $this -> getRoomFriendData ( $room_id );
//交友状态 交友进行到第几步 1等待邂逅 2心动连线 3牵手良缘
$friend [ 'step' ] = $room [ 'step' ];
} else {
$friend = null ;
}
2025-08-13 10:43:56 +08:00
return [ 'code' => 1 ,
'msg' => '成功' ,
'data' => [ 'room_info' => $room_info ,
'room_owner' => $room_owner ,
'user_info' => $user_info ,
'song_user_info' => $song_list ,
'nextInfo' => $next_song_info ,
'room_auction' => $roomauction ,
'cp_user' => $cp_users ,
'pk_info' => $pk_info ,
2025-08-20 10:17:10 +08:00
'song_pit_list' => $song_pit_list ,
'friend_info' => $friend ,
2025-08-13 10:43:56 +08:00
]
];
}
//房间内当前用户信息
public function get_user_info ( $room_id , $user_id , $user_pit , $is_join = 0 )
{
$user_info = db :: name ( 'user' ) -> where ( 'id' , $user_id ) -> field ( 'id as user_id,user_code,sex,nickname,avatar' ) -> find ();
$user_info [ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $user_id , 1 );
$user_info [ 'user_code' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $user_id , 6 );
$user_info [ 'pit_number' ] = ( isset ( $user_pit [ 'pit_number' ])) ? $user_pit [ 'pit_number' ] : 0 ;
$user_info [ 'count_down' ] = 0 ;
$user_info [ 'is_collect' ] = db :: name ( 'user_follow' ) -> where ([ 'follow_id' => $room_id , 'user_id' => $user_id , 'type' => 2 ]) -> find () ? 1 : 0 ;
$user_info [ 'is_host' ] = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => 1 , 'delete_time' => null ]) -> find () ? 1 : 0 ;
$user_info [ 'is_management' ] = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => 2 , 'delete_time' => null ]) -> find () ? 1 : 0 ;
$user_info [ 'icon' ][ 0 ] = model ( 'api/UserData' ) -> user_wealth_icon ( $user_id ); //财富图标
$user_info [ 'icon' ][ 1 ] = model ( 'api/UserData' ) -> user_charm_icon ( $user_id ); //魅力图标
if ( $is_join ){
$user_info [ 'agora_token' ] = model ( 'api/Agora' ) -> agora_token_info ( $user_id , $room_id );
$user_info [ 'agora_rtm_token' ] = model ( 'api/Agora' ) -> agora_rtm_token_info ( $user_id , $room_id ); //连麦用的
}
$user_info [ 'is_mute' ] = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 1 ]) -> find () ? 1 : 0 ;
$user_info [ 'is_mute_pit' ] = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 2 ]) -> find () ? 1 : 0 ;
return $user_info ;
}
//K歌房 正在播放歌曲和下一首歌曲信息
public function get_song_info ( $room_id , $user_id )
{
//正在演唱的歌曲
$song = db :: name ( 'vs_room_song' ) -> where ([ 'room_id' => $room_id , 'times_status' => 1 , 'status' => 2 ]) -> order ( 'did desc' ) -> find ();
$song_list = null ;
$next_song_info = null ;
if ( $song ){
$song_list = [
'did' => $song [ 'did' ],
'song_code' => $song [ 'song_code' ],
'song_name' => $song [ 'song_name' ],
'singer' => $song [ 'singer' ],
'poster' => $song [ 'poster' ],
'duration' => $song [ 'duration' ],
'user_id' => $song [ 'user_id' ],
'dress' => model ( 'api/Decorate' ) -> user_decorate_detail ( $song [ 'user_id' ], 1 ),
'nickname' => db :: name ( 'user' ) -> where ( 'id' , $song [ 'user_id' ]) -> value ( 'nickname' ),
'avatar' => db :: name ( 'user' ) -> where ( 'id' , $song [ 'user_id' ]) -> value ( 'avatar' ),
'charm' => db :: name ( 'vs_room_user_charm' ) -> where ([ 'user_id' => $song [ 'user_id' ], 'room_id' => $room_id ]) -> value ( 'charm' ),
];
}
//下一首歌
$data = db :: name ( 'vs_room_song' ) -> where ([ 'room_id' => $room_id , 'status' => 1 , 'times_status' => 1 ])
-> order ( 'sort desc' ) -> select ();
if ( array_count_dim ( $data ) >= 1 ){
//有两首以上的歌曲 第二首放入 推送的下一首中
$next_song_info = [
'did' => $data [ 0 ][ 'did' ],
'song_code' => $data [ 0 ][ 'song_code' ],
'song_name' => $data [ 0 ][ 'song_name' ],
'singer' => $data [ 0 ][ 'singer' ],
'poster' => $data [ 0 ][ 'poster' ],
'duration' => $data [ 0 ][ 'duration' ],
'user_id' => $data [ 0 ][ 'user_id' ],
'dress' => model ( 'api/Decorate' ) -> user_decorate_detail ( $data [ 0 ][ 'user_id' ], 1 ),
'nickanme' => db :: name ( 'user' ) -> where ( 'id' , $data [ 0 ][ 'user_id' ]) -> value ( 'nickname' ),
'avatar' => db :: name ( 'user' ) -> where ( 'id' , $data [ 0 ][ 'user_id' ]) -> value ( 'avatar' ),
'charm' => db :: name ( 'vs_room_user_charm' ) -> where ( 'user_id' , $data [ 0 ][ 'user_id' ]) -> value ( 'charm' ),
];
}
//麦位信息
$pit_list = db :: name ( 'vs_room_pit' ) -> alias ( 'a' ) -> join ( 'user b' , 'a.user_id = b.id' , 'left' )
-> where ([ 'a.room_id' => $room_id , 'a.status' => 1 ])
-> field ( 'a.id,a.user_id,a.pit_number,a.is_lock,a.is_mute,a.count_down,b.nickname,b.avatar,b.sex,b.user_code' )
-> order ( 'a.pit_number asc' ) -> select ();
foreach ( $pit_list as & $value ) {
$value [ 'charm' ] = 0 ;
$value [ 'dress' ] = '' ;
if ( isset ( $value [ 'user_id' ]) && $value [ 'user_id' ] > 0 ) {
$value [ 'charm' ] = db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room_id , 'user_id' => $value [ 'user_id' ]]) -> value ( 'charm' ) ? ? 0 ;
$value [ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 1 );
$value [ 'user_code' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 6 );
}
}
$song_pit_list = db :: name ( 'vs_room_pit_simulate' ) -> where ([ 'room_id' => $room_id ]) -> select ();
if ( $song_pit_list ){
foreach ( $song_pit_list as & $value ){
$value [ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 1 );
$value [ 'nickname' ] = db :: name ( 'user' ) -> where ( 'id' , $value [ 'user_id' ]) -> value ( 'nickname' );
$value [ 'avatar' ] = db :: name ( 'user' ) -> where ( 'id' , $value [ 'user_id' ]) -> value ( 'avatar' );
$value [ 'sex' ] = db :: name ( 'user' ) -> where ( 'id' , $value [ 'user_id' ]) -> value ( 'sex' );
$value [ 'charm' ] = db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room_id , 'user_id' => $value [ 'user_id' ]]) -> value ( 'charm' ) ? ? 0 ;
$value [ 'user_code' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 6 );
$value [ 'is_lock' ] = 0 ;
$value [ 'is_mute' ] = 0 ;
$value [ 'count_down' ] = 0 ;
$value [ 'pit_number' ] = 9999 ;
}
}
$user_pit = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
//获取用户麦位信息(K歌模式模拟上麦)
$user_pits = db :: name ( 'vs_room_pit_simulate' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( $user_pits ){
$user_pit [ 'pit_number' ] = 9999 ;
$user_pit [ 'state' ] = 0 ;
$user_pit [ 'count_down' ] = 0 ;
} else {
$user_pit [ 'pit_number' ] = 0 ;
$user_pit [ 'state' ] = 0 ;
$user_pit [ 'count_down' ] = 0 ;
}
//获取主持和嘉宾麦位信息
$host_user_id = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'pit_number' => 9 ]) -> value ( 'user_id' );
$host_user_id2 = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'pit_number' => 10 ]) -> value ( 'user_id' );
if ( $user_id == $host_user_id ){
$user_pit [ 'pit_number' ] = 9 ;
} elseif ( $user_id == $host_user_id2 ){
$user_pit [ 'pit_number' ] = 10 ;
}
return [ 'song_user_info' => $song_list , 'nextInfo' => $next_song_info , 'pit_list' => $pit_list , 'user_pit' => $user_pit , 'song_pit_list' => $song_pit_list ];
}
//拍卖房
public function auction_room ( $room_id , $user_id )
{
//房间正在拍的信息
$auction = db :: name ( 'vs_room_auction' ) -> alias ( 'a' ) -> join ( 'user b' , 'a.user_id = b.id' , 'left' )
-> field ( 'a.auction_id,a.user_id,b.nickname,b.avatar,b.sex,b.user_code,a.auction_type,a.relation_id,a.gift_id,a.gift_price,a.time_day,a.duration' )
-> where ([ 'a.room_id' => $room_id , 'a.status' => 2 ]) -> find ();
// var_dump($auction);exit;
if ( $auction ){
$auction [ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $auction [ 'user_id' ], 1 );
$auction [ 'relation_name' ] = db :: name ( 'vs_relation' ) -> where ( 'id' , $auction [ 'relation_id' ]) -> value ( 'name' );
$auction [ 'relation_icon' ] = db :: name ( 'vs_relation' ) -> where ( 'id' , $auction [ 'relation_id' ]) -> value ( 'icon' );
$auction [ 'base_image' ] = db :: name ( 'vs_gift' ) -> where ( 'gid' , $auction [ 'gift_id' ]) -> value ( 'base_image' );
$auction [ 'gift_name' ] = db :: name ( 'vs_gift' ) -> where ( 'gid' , $auction [ 'gift_id' ]) -> value ( 'gift_name' );
$auction [ 'time_day' ] = $auction [ 'time_day' ] / 60 / 60 ;
$auction [ 'charm' ] = db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room_id , 'user_id' => $auction [ 'user_id' ]]) -> value ( 'charm' ) ? ? 0 ;
$auction_list = model ( 'api/RoomAuction' ) -> room_auction_list_on ( $auction [ 'auction_id' ]);
$auction_user = $auction ;
if ( $auction [ 'user_id' ] == $user_id ){
$user_pit [ 'pit_number' ] = 888 ;
} else {
$user_pit [ 'pit_number' ] = 0 ;
}
} else {
$catdc = Cache :: get ( 'auction_user_' . $room_id );
if ( ! $catdc ){
$auction_list = null ;
$auction_user = null ;
$user_pit [ 'pit_number' ] = 0 ;
} else {
$auction_list = null ;
$users = db :: name ( 'user' ) -> where ( 'id' , $catdc ) -> field ( 'id as user_id,nickname,avatar,sex,user_code' ) -> find ();
$users [ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $catdc , 1 );
$users [ 'charm' ] = db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room_id , 'user_id' => $catdc ]) -> value ( 'charm' ) ? ? 0 ;
$auction_user = $users ;
if ( $catdc == $user_id ){
$user_pit [ 'pit_number' ] = 888 ;
} else {
$user_pit [ 'pit_number' ] = 0 ;
}
}
}
//麦位信息
$pit_list = db :: name ( 'vs_room_pit' ) -> alias ( 'a' ) -> join ( 'user b' , 'a.user_id = b.id' , 'left' )
-> where ([ 'a.room_id' => $room_id , 'a.pit_number' => 9 , 'a.status' => 1 ])
-> field ( 'a.id,a.user_id,a.pit_number,a.is_lock,a.is_mute,a.count_down,b.nickname,b.avatar,b.sex,b.user_code' )
-> select ();
foreach ( $pit_list as & $value ) {
$value [ 'charm' ] = 0 ;
$value [ 'dress' ] = '' ;
if ( isset ( $value [ 'user_id' ]) && $value [ 'user_id' ] > 0 ) {
$value [ 'charm' ] = db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room_id , 'user_id' => $value [ 'user_id' ]]) -> value ( 'charm' ) ? ? 0 ;
$value [ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 1 );
$value [ 'user_code' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 6 );
if ( $value [ 'user_id' ] == $user_id ){
$user_pit [ 'pit_number' ] = 9 ;
}
}
}
return [ 'auction_list' => $auction_list , 'pit_list' => $pit_list , 'auction_user' => $auction_user , 'user_pit' => $user_pit ];
}
//退出房间
//$type 0-正常退出 1-被踢出房间 2-脚本清理
public function quit_room ( $uid , $room_id , $user_id , $type = 0 )
{
if ( $user_id == 0 ){
$nickname = db :: name ( 'user' ) -> where ( 'id' , $uid ) -> value ( 'nickname' );
} else {
$nickname = db :: name ( 'user' ) -> where ( 'id' , $user_id ) -> value ( 'nickname' );
}
if ( $type == 1 ){
if ( ! model ( 'api/QuanXian' ) -> quan_xian ( $uid , $user_id , $room_id )){
return [ 'code' => 0 , 'msg' => '您没有权限操作' , 'data' => null ];
}
}
//记录用户退出房
db :: name ( 'vs_room_visitor' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> delete ();
//房间的模式
$res = model ( 'api/Room' ) -> get_room_label ( $room_id );
$room_label = $res [ 'data' ][ 'label_id' ];
$room_type = $res [ 'data' ][ 'type_id' ];
$apply_type = 0 ;
if ( $room_label == 1 && ( $room_type == 1 || $room_type == 3 || $room_type == 4 )){
$apply_type = 1 ;
} elseif ( $room_label == 2 && ( $room_type == 1 || $room_type == 3 || $room_type == 4 )){
$apply_type = 2 ;
2025-08-21 15:22:03 +08:00
} elseif ( $room_type == 7 ){ //交友房 再开始阶段在麦位上不下麦
$apply_type = 3 ;
2025-08-25 15:33:00 +08:00
} elseif ( $room_type == 6 && $room_label == 5 ){ //交友私密屋
$apply_type = 4 ;
2025-08-13 10:43:56 +08:00
}
if ( $apply_type == 1 ){
//在麦位上 移除用户
$room_pit = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( isset ( $room_pit )) {
model ( 'api/RoomPit' ) -> DownPit ( $user_id , $room_id , $room_pit [ 'pit_number' ]);
}
} elseif ( $apply_type == 2 ){
//在麦位上 移除用户
$room_pit = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( isset ( $room_pit )) {
model ( 'api/RoomPit' ) -> DownPit ( $user_id , $room_id , $room_pit [ 'pit_number' ]);
}
if ( db :: name ( 'vs_room_pit_simulate' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ()){
db :: name ( 'vs_room_pit_simulate' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> delete ();
$FromUserInfo = db :: name ( 'user' ) -> where ( 'id' , $user_id ) -> field ( 'id as user_id,nickname,avatar,sex' ) -> find ();
$FromUserInfo [ 'icon' ][ 0 ] = model ( 'api/UserData' ) -> user_wealth_icon ( $user_id ); //财富图标
$FromUserInfo [ 'icon' ][ 1 ] = model ( 'api/UserData' ) -> user_charm_icon ( $user_id ); //魅力图标
//推送告诉前端下了几号麦位
$text [ 'text' ] = $FromUserInfo [ 'nickname' ] . ' 下麦了 ' ;
$text [ 'FromUserInfo' ] = $FromUserInfo ;
$text [ 'pit_number' ] = '' ;
model ( 'api/Chat' ) -> sendMsg ( 1004 , $room_id , $text );
}
2025-08-21 15:22:03 +08:00
} elseif ( $apply_type == 3 ){
$roomInfoStep = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> value ( 'step' );
2025-09-02 18:29:57 +08:00
$room_pit = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( $roomInfoStep == 1 || ( $roomInfoStep == 2 && ( $room_pit [ 'pit_number' ] == 9 || $room_pit [ 'pit_number' ] == 10 ))){
2025-08-21 15:22:03 +08:00
if ( isset ( $room_pit )) {
model ( 'api/RoomPit' ) -> DownPit ( $user_id , $room_id , $room_pit [ 'pit_number' ]);
}
}
2025-08-25 15:33:00 +08:00
} elseif ( $apply_type == 4 ){
model ( 'api/Friend' ) -> outRoom ( $uid , $room_id );
2025-08-21 15:22:03 +08:00
}
else {
2025-08-13 10:43:56 +08:00
//在麦位上 移除用户
$room_pit = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( isset ( $room_pit )) {
model ( 'api/RoomPit' ) -> DownPit ( $user_id , $room_id , $room_pit [ 'pit_number' ]);
}
}
//是否申请上麦 有责删除
if ( db :: name ( 'vs_room_pit_apply' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ()){
db :: name ( 'vs_room_pit_apply' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> delete ();
}
$FromUserInfo = db :: name ( 'user' ) -> where ( 'id' , $user_id ) -> field ( 'id as user_id,nickname,avatar,sex' ) -> find ();
$FromUserInfo [ 'icon' ][ 0 ] = model ( 'api/UserData' ) -> user_wealth_icon ( $user_id ); //财富图标
$FromUserInfo [ 'icon' ][ 1 ] = model ( 'api/UserData' ) -> user_charm_icon ( $user_id ); //魅力图标
$FromUserInfo [ 'dress' ] = model ( 'api/Decorate' ) -> user_decorate_detail ( $user_id , 1 );
$text [ 'FromUserInfo' ] = $FromUserInfo ;
//1-踢出房间
if ( $type == 1 ){
//房主
$room_owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'room_status' => 1 ]) -> value ( 'user_id' );
$room_host = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'type' => 1 ]) -> value ( 'user_id' );
if ( $uid == $room_owner ){
$room_typer = '房主' ;
} elseif ( $uid == $room_host ){
$room_typer = '主持人' ;
} else {
$room_typer = '管理员' ;
}
db :: name ( 'vs_room_black' ) -> insert ([ 'room_id' => $room_id , 'user_id' => $uid , 'black_id' => $user_id , 'type' => 1 , 'kick_time' => time () + 300 , 'createtime' => time ()]);
//发送消息
$text [ 'text' ] = '用户 ' . $nickname . ' 被 ' . $room_typer . ' 踢出房间' ;
model ( 'api/Chat' ) -> sendMsg ( 1011 , $room_id , $text , $user_id );
//1-禁麦位, 2-清空消息, 3-清空魅力值, 4-加入黑名单, 5-踢出房间, 6-关闭麦克风, 7-申请上麦, 8-同意上麦, 9-拒绝上麦, 10-点歌, 11-开启PK',
model ( 'api/Room' ) -> room_operation_record ( $uid , $room_id , 5 , $user_id );
}
if ( $type == 0 ){
//发送消息
$text [ 'text' ] = '用户 ' . $nickname . ' 退出了房间' ;
model ( 'api/Chat' ) -> sendMsg ( 1002 , $room_id , $text , $user_id );
}
return [ 'code' => 1 , 'msg' => '成功' , 'data' => []];
}
//房间排行
public function room_rank ( $room_id , $type , $timetype , $page , $limit )
{
$where [ 'a.from_id' ] = $room_id ;
$where [ 'a.from' ] = 2 ;
if ( $timetype == 1 ){
//时间榜 查询当前这一小时的数据
$begin_time = strtotime ( date ( 'Y-m-d H:00:00' ));
$end_time = strtotime ( date ( 'Y-m-d H:59:59' ));
$where [ 'a.createtime' ] = [ 'between' , [ $begin_time , $end_time ]];
} elseif ( $timetype == 2 ){
//天榜 查询当天数据
$where [ 'a.createtime' ] = [ 'between' , [ strtotime ( date ( 'Y-m-d' )), time ()]];
} elseif ( $timetype == 3 ){
//周榜 查询当周数据 从周一起查
//周一到周天
$where [ 'a.createtime' ] = [ 'between' , [ strtotime ( 'this week Monday' ), time ()]];
}
if ( $type == 1 ){ //1财富榜, 2魅力榜
// $list = db::name('vs_room_user_charm')->alias('a')
// ->join('user b', 'a.user_id = b.id')
// ->field('a.user_id,b.nickname,b.avatar,a.total_wealth as total')
// ->where($where)
// ->order('a.total_wealth desc')
// ->page($page, $limit)
// ->select();
$list = db :: name ( 'vs_give_gift' ) -> alias ( 'a' )
-> join ( 'user b' , 'a.user_id = b.id' )
-> field ( 'a.user_id,b.nickname,b.avatar,sum(a.total_price) * 10 as total' )
-> where ( $where )
-> order ( 'total desc' )
-> group ( 'a.user_id' )
-> page ( $page , $limit )
-> select ();
} else {
// $list = db::name('vs_room_user_charm')->alias('a')
// ->join('user b', 'a.user_id = b.id')
// ->field('a.user_id,b.nickname,b.avatar,a.total_charm as total')
// ->where($where)
// ->order('a.total_charm desc')
// ->page($page, $limit)
// ->select();
$list = 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,sum(a.total_price) * 10 as total' )
-> where ( $where )
-> order ( 'total desc' )
-> group ( 'a.gift_user' )
-> page ( $page , $limit )
-> select ();
}
if ( isset ( $list )){
foreach ( $list as & $v ){
//用户等级标签
$v [ 'icon' ][ 0 ] = model ( 'UserData' ) -> user_wealth_icon ( $v [ 'user_id' ]); //财富图标
$v [ 'icon' ][ 1 ] = model ( 'UserData' ) -> user_charm_icon ( $v [ 'user_id' ]); //魅力图标
}
}
return [ 'code' => 1 , 'msg' => '成功' , 'data' => $list ];
}
//房间送礼
2025-09-10 16:35:06 +08:00
public function room_gift ( $uid , $to_uid , $gift_id , $gift_num , $type , $room_id , $pit_number , $heart_id , $give_gift_ext = " " )
2025-08-13 10:43:56 +08:00
{
$label_type = model ( 'Room' ) -> get_room_label ( $room_id );
if ( $label_type [ 'code' ] != 1 ){
return [ 'code' => 0 , 'msg' => '房间不存在' , 'data' => null ];
}
//数字判断
if ( ! is_numeric ( $pit_number )){
$pit_number = 0 ;
}
if ( $label_type [ 'data' ][ 'type_id' ] == 1 && $label_type [ 'data' ][ 'label_id' ] == 1 ){ //2卡八麦( 聊天) type_id = 1, label_id = 1
//$from_type 来源 1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼
//$type 1金币购买 2送背包礼物
//送礼人, 接收者( 群) , 礼物id, 礼物数量, 来源, 类型, 来源id( 房间id) , 麦位
$res = model ( 'GiveGift' ) -> give_gift ( $uid , $to_uid , $gift_id , $gift_num , 2 , $type , $room_id , $pit_number );
return $res ;
} elseif (( $label_type [ 'data' ][ 'type_id' ] == 1 || $label_type [ 'data' ][ 'type_id' ] == 3 || $label_type [ 'data' ][ 'type_id' ] == 4 ) && $label_type [ 'data' ][ 'label_id' ] == 2 ) //K歌, type_id = 1, label_id = 2
{
$res = model ( 'GiveGift' ) -> give_gift ( $uid , $to_uid , $gift_id , $gift_num , 2 , $type , $room_id , $pit_number );
if ( $res [ 'code' ] == 1 ){
$room_pits = model ( 'RoomSong' ) -> get_charm_rank ( $room_id );
if ( $room_pits [ 'code' ] == 1 ){
$room_pit = $room_pits [ 'data' ];
//推送给前端
$text = [
'userCharmList' => $room_pit ,
];
model ( 'Chat' ) -> sendMsg ( 1019 , $room_id , $text );
}
}
return $res ;
} elseif ( $label_type [ 'data' ][ 'type_id' ] == 6 ){
2025-09-10 16:35:06 +08:00
return model ( 'GiveGift' ) -> give_gift ( $uid , $to_uid , $gift_id , $gift_num , 6 , $type , $room_id , $pit_number , $give_gift_ext );
2025-08-16 11:29:29 +08:00
} elseif ( $label_type [ 'data' ][ 'type_id' ] == 7 ){
2025-09-10 16:35:06 +08:00
return model ( 'Friend' ) -> room_give_gift ( $uid , $to_uid , $gift_id , $gift_num , 2 , $type , $room_id , $pit_number , $heart_id , $give_gift_ext );
2025-08-13 10:43:56 +08:00
} else {
2025-09-10 16:35:06 +08:00
$res = model ( 'GiveGift' ) -> give_gift ( $uid , $to_uid , $gift_id , $gift_num , 2 , $type , $room_id , $pit_number , $give_gift_ext );
2025-08-13 10:43:56 +08:00
return $res ;
}
}
2025-09-09 10:15:44 +08:00
//背包礼物一键全清
2025-09-10 16:14:05 +08:00
public function room_gift_all_clear ( $uid , $room_id , $user_id , $heart_id )
2025-09-09 10:15:44 +08:00
{
$user_gift_pack = db :: name ( 'vs_user_gift_pack' ) -> where ([ 'user_id' => $uid , 'is_tester' => 1 , 'is_use_give' => 1 , 'num' => [ '>' , 0 ]]) -> select ();
if ( empty ( $user_gift_pack )) {
return [ 'code' => 0 , 'msg' => '用户背包礼物不足' , 'data' => null ];
}
foreach ( $user_gift_pack as $v ){
2025-09-10 16:14:05 +08:00
// model('GiveGift')->give_gift($uid, $user_id, $v['gid'], $v['num'],2,2, $room_id);
$this -> room_gift ( $uid , $user_id , $v [ 'gid' ], $v [ 'num' ], 2 , $room_id , 0 , $heart_id );
2025-09-09 10:15:44 +08:00
}
return [ 'code' => 1 , 'msg' => '成功' , 'data' => null ];
}
2025-08-13 10:43:56 +08:00
//房间在线列表
public function room_online_list ( $room_id , $page , $limit )
{
$lists [ 'on_pit' ] = [];
$lists [ 'off_pit' ] = [];
$label_type = model ( 'Room' ) -> get_room_label ( $room_id );
if ( $label_type [ 'code' ] != 1 ) {
return [ 'code' => 0 , 'msg' => '房间不存在' , 'data' => null ];
}
2025-09-11 17:08:47 +08:00
// //获取在房间的用户
//// $in_room_users = db::name('vs_room_visitor')->where(['room_id' => $room_id])->field('user_id')->select();
//// if($in_room_users){
//// foreach ($in_room_users as $v){
//// $userss = db::name('user')->where(['id' => $v['user_id']])->field('is_online,is_robot')->find();
//// if($userss['is_online'] == 1 && $userss['is_robot'] == 1){//在线或者机器人都设置为在线
//// db::name('vs_room_visitor')->where(['id' => $v['id']])->update(['on_line' => 1]);
//// }else{
//// db::name('vs_room_visitor')->where(['id' => $v['id']])->update(['on_line' => 0]);
//// }
//// }
//// }
//
// //查找数据库用户
// $dblist = db::name('vs_room_visitor')->where(['room_id' => $room_id])->field('user_id')->select();
// //循环获取在线用户ID 拼接数据
// $user_id_array = [];
// //机器人user_id
// $robot_user_id = [];
// foreach ($dblist as $v) {
// //机器人
// if(db::name('user')->where(['id' => $v['user_id']])->value('is_robot')){
// $robot_user_id[] = $v['user_id'];
// continue;
// }
// $user_id_array[] = 'u'.$v['user_id'];
// }
// //获取腾讯的在线用户
// $online_users = model('Tencent')->query_user_online_status($user_id_array);
// $online_user = [];
// if(isset($online_users['ActionStatus']) && $online_users['ActionStatus'] == 'OK'){
// if($online_users['QueryResult']){
// foreach ($online_users['QueryResult'] as $v){
// if($v['Status'] == "Online"){
// //截取用户ID前面的 u 并获取用户ID
// $user_id = substr($v['To_Account'],1);
// $online_user[] = $user_id;
// }
2025-08-29 17:27:49 +08:00
// }
// }
// }
2025-09-11 17:08:47 +08:00
//
// if($dblist){
// $onpit = db::name('vs_room_pit')->field('user_id')->where(['room_id' => $room_id])->select();
// //合并数组
// $array = array_merge($online_user,$robot_user_id);
//// $array = $online_user;
// $arraypit = array_values((array)$onpit);
// foreach ($dblist as &$v){
//// if(in_array($v['user_id'],$arraypit)){
//// //跳过本次循环
//// continue;
//// }
// if(!in_array($v['user_id'],$array)){
// //修改他的状态
// db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>$room_id])->update(['on_line' => 0]);
// //查询他是否在其他房间
// $room_id_list = db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>['neq',$room_id]])->find();
// if($room_id_list){
// db::name('vs_room_visitor')->where(['user_id' => $v['user_id']])->delete();
// }
// }else{
// //修改他的状态
// db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>$room_id])->update(['on_line' => 1]);
2025-08-20 21:33:02 +08:00
// }
2025-09-11 17:08:47 +08:00
// }
// }else{
// $lists = ['on_pit' => [], 'off_pit' => []];
// return ['code' => 1, 'msg' => '成功', 'data' => $lists];
// }
2025-08-13 10:43:56 +08:00
$list = db :: name ( 'vs_room_visitor' ) -> alias ( 'a' )
-> join ( 'user b' , 'a.user_id = b.id' )
-> field ( 'a.user_id,b.nickname,b.avatar' )
2025-09-11 17:08:47 +08:00
-> where ([ 'a.room_id' => $room_id , 'b.is_online' => 1 ])
2025-08-13 10:43:56 +08:00
-> order ( 'a.id asc' )
-> page ( $page , $limit )
-> select ();
if ( $list ) {
foreach ( $list as & $v ) {
$v [ 'icon' ][ 0 ] = model ( 'UserData' ) -> user_wealth_icon ( $v [ 'user_id' ]); //财富图标
$v [ 'icon' ][ 1 ] = model ( 'UserData' ) -> user_charm_icon ( $v [ 'user_id' ]); //魅力图标
//用户的角色
$role = $this -> get_user_role ( $v [ 'user_id' ], $room_id );
$v [ 'role' ] = $role [ 'role' ];
$v [ 'pit_number' ] = $role [ 'pit_number' ];
}
//根据角色排序 房主>管理员>主持人>普通用户
usort ( $list , function ( $a , $b ) {
if ( $a [ 'role' ] == $b [ 'role' ]) {
return 0 ;
}
return ( $a [ 'role' ] < $b [ 'role' ]) ? - 1 : 1 ;
});
}
2025-08-20 21:33:02 +08:00
if ( $label_type [ 'data' ][ 'type_id' ] == 7 || ( $label_type [ 'data' ][ 'type_id' ] == 1 || $label_type [ 'data' ][ 'type_id' ] == 3 || $label_type [ 'data' ][ 'type_id' ] == 4 ) && $label_type [ 'data' ][ 'label_id' ] == 1 ) { //2卡八麦( 聊天) type_id = 1 || 7(交友) , label_id = 1
2025-08-13 10:43:56 +08:00
foreach ( $list as & $val ) {
if ( $val [ 'pit_number' ] > 0 ) {
$lists [ 'on_pit' ][] = $val ;
} else {
$lists [ 'off_pit' ][] = $val ;
}
}
} elseif (( $label_type [ 'data' ][ 'type_id' ] == 1 || $label_type [ 'data' ][ 'type_id' ] == 3 || $label_type [ 'data' ][ 'type_id' ] == 4 ) && $label_type [ 'data' ][ 'label_id' ] == 2 ){
foreach ( $list as & $val ) {
// var_dump($val['pit_number']);exit;
if ( db :: name ( 'vs_room_pit_simulate' ) -> where ([ 'room_id' => $room_id , 'user_id' => $val [ 'user_id' ]]) -> find () || $val [ 'pit_number' ] > 0 ) {
$lists [ 'on_pit' ][] = $val ;
} else {
$lists [ 'off_pit' ][] = $val ;
}
}
} elseif ( $label_type [ 'data' ][ 'type_id' ] == 2 ){
$auction_id = db :: name ( 'vs_room_auction' ) -> where ([ 'room_id' => $room_id ]) -> order ( 'auction_id' , 'desc' ) -> field ( 'auction_id,status,gift_price' ) -> find ();
if ( $auction_id && $auction_id [ 'status' ] == 2 ) {
$auct = db :: name ( 'vs_room_auction_bid_log' ) -> field ( 'user_id, SUM(gift_price) AS gift_prices' )
-> where ([ 'auction_id' => $auction_id [ 'auction_id' ]])
-> group ( 'user_id' )
-> having ( 'gift_prices >= ' . $auction_id [ 'gift_price' ])
-> order ( 'gift_prices DESC' )
-> limit ( 6 )
-> select ();
if ( $auct ){
//获取数组里面的用户ID 组成新的数组
$user_ids = array_column (( array ) $auct , 'user_id' );
foreach ( $list as & $val ) {
if ( in_array ( $val [ 'user_id' ], $user_ids ) || $val [ 'pit_number' ] > 0 ) {
$lists [ 'on_pit' ][] = $val ;
} else {
$lists [ 'off_pit' ][] = $val ;
}
}
} else {
foreach ( $list as & $val ) {
if ( $val [ 'pit_number' ] > 0 ) {
$lists [ 'on_pit' ][] = $val ;
} else {
$lists [ 'off_pit' ][] = $val ;
}
}
}
} else {
foreach ( $list as & $val ) {
// $lists['off_pit'][] = $val;
if ( $val [ 'pit_number' ] > 0 ) {
$lists [ 'on_pit' ][] = $val ;
} else {
$lists [ 'off_pit' ][] = $val ;
}
}
}
}
return [ 'code' => 1 , 'msg' => '成功' , 'data' => $lists ];
}
//用户在房间内的角色
public function get_user_role ( $user_id , $room_id )
{
$return = [];
$room_owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'room_status' => 1 ]) -> value ( 'user_id' );
2025-08-18 18:56:13 +08:00
$room_host = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'type' => 1 , 'delete_time' => null , 'user_id' => $user_id ]) -> value ( 'user_id' );
$room_maner = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'type' => 2 , 'delete_time' => null , 'user_id' => $user_id ]) -> value ( 'user_id' );
2025-08-13 10:43:56 +08:00
if ( $user_id == $room_owner ){
$return [ 'role' ] = 1 ;
} elseif ( $user_id == $room_maner ){
$return [ 'role' ] = 2 ;
} elseif ( $user_id == $room_host ){
$return [ 'role' ] = 3 ;
} else {
$return [ 'role' ] = 4 ;
}
$return [ 'pit_number' ] = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> value ( 'pit_number' ) ? ? 0 ;
return $return ;
}
//房间内用户主页(房间内点头像)
public function room_user_home ( $uid , $room_id , $user_id )
{
$user_info = db :: name ( 'user' ) -> where ([ 'id' => $user_id ]) -> field ( 'id as user_id,user_code,nickname,avatar,sex,profile,red_status' ) -> find ();
$user_info [ 'icon' ][ 0 ] = model ( 'UserData' ) -> user_wealth_icon ( $user_id ); //财富图标
$user_info [ 'icon' ][ 1 ] = model ( 'UserData' ) -> user_charm_icon ( $user_id ); //魅力图标
//是否使用靓号
$user_info [ 'is_use_code' ] = 0 ;
$user_code = model ( 'Decorate' ) -> user_decorate_detail ( $user_info [ 'user_id' ], 6 );
if ( $user_code != $user_info [ 'user_code' ]){
$user_info [ 'user_code' ] = $user_code ;
$user_info [ 'is_use_code' ] = 1 ;
}
//是否在麦上
$user_info [ 'is_in_pit' ] = 0 ;
$room_type = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> field ( 'type_id,label_id' ) -> find ();
if ( $room_type [ 'type_id' ] == 1 && $room_type [ 'label_id' ] == 2 ){
$is_on_pit = db :: name ( 'vs_room_pit_simulate' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( $is_on_pit ){
$user_info [ 'is_in_pit' ] = 1 ;
} else {
$hah = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( $hah ){
$user_info [ 'is_in_pit' ] = 1 ;
}
}
2025-08-20 11:05:24 +08:00
} elseif ( $room_type [ 'type_id' ] == 7 || ( $room_type [ 'type_id' ] == 1 || $room_type [ 'type_id' ] == 3 || $room_type [ 'type_id' ] == 4 ) && $room_type [ 'label_id' ] == 1 ){
2025-08-13 10:43:56 +08:00
$hah = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( $hah ){
$user_info [ 'is_in_pit' ] = 1 ;
}
} elseif ( $room_type [ 'type_id' ] == 2 ){
//获取缓存的用户信息
$users = Cache :: get ( 'auction_user_' . $room_id );
if ( $users ){
$user_info [ 'is_in_pit' ] = 1 ;
} else {
$hah = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( $hah ){
$user_info [ 'is_in_pit' ] = 1 ;
}
}
}
//是否设置开播提醒
$user_info [ 'is_open_live_remind' ] = db :: name ( 'vs_user_live_remind' ) -> where ([ 'user_id' => $uid , 'remind_user_id' => $user_id ]) -> find () ? 1 : 0 ;
//用户所属工会
2025-08-26 16:18:51 +08:00
$guild_id = Db :: name ( 'vs_guild_user' ) -> where ([ 'user_id' => $user_id , 'status' => 1 , 'delete_time' => 0 ]) -> value ( 'guild_id' );
2025-08-13 10:43:56 +08:00
$user_info [ 'is_mute' ] = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 1 ]) -> find () ? 1 : 0 ;
$user_info [ 'is_mute_pit' ] = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 2 ]) -> find () ? 1 : 0 ;
$user_info [ 'is_manager' ] = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => 2 , 'delete_time' => null ]) -> find () ? 1 : 0 ;
$user_info [ 'is_host' ] = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => 1 , 'delete_time' => null ]) -> find () ? 1 : 0 ;
$user_info [ 'is_room_owner' ] = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'user_id' => $user_id ]) -> find () ? 1 : 0 ;
$user_info [ 'is_follow' ] = db :: name ( 'user_follow' ) -> where ([ 'user_id' => $uid , 'follow_id' => $user_id , 'type' => 1 ]) -> find () ? 1 : 0 ;
//近90天内收到的礼物数量
2025-08-19 15:37:41 +08:00
$user_info [ 'gift_num' ] = db :: name ( 'vs_give_gift' ) -> where ([ 'gift_user' => $user_id ]) -> whereTime ( 'createtime' , '>' , strtotime ( '-90 day' )) -> sum ( 'number' ) ? ? 0 ;
2025-08-13 10:43:56 +08:00
if ( $guild_id ){
$guild = Db :: name ( 'vs_guild' ) -> where ( 'id' , $guild_id ) -> value ( 'guild_name' );
} else {
$guild = '' ;
}
$qinmi = null ;
$zhenai = null ;
$guanxi = $this -> relation_card ( $uid , $user_id );
if ( $guanxi [ 'code' ] == 1 ){
$qinmi_arr = $guanxi [ 'data' ][ 'qinmi' ];
if ( ! empty ( $qinmi_arr )){
$qinmi = $qinmi_arr [ 0 ];
}
$zhenai_arr = $guanxi [ 'data' ][ 'zhenai' ];
if ( ! empty ( $zhenai_arr )){
$zhenai = $zhenai_arr [ 0 ];
}
}
$user_info [ 'qinmi' ] = $qinmi ;
$user_info [ 'zhenai' ] = $zhenai ;
$user_info [ 'guild' ] = $guild ;
return [ 'code' => 1 , 'msg' => '成功' , 'data' => $user_info ];
}
//设置开播提醒
public function set_live_reminder ( $uid , $remind_user_id )
{
$is_open = db :: name ( 'vs_user_live_remind' ) -> where ([ 'user_id' => $uid , 'remind_user_id' => $remind_user_id ]) -> find ();
if ( $is_open ){
db :: name ( 'vs_user_live_remind' ) -> where ([ 'user_id' => $uid , 'remind_user_id' => $remind_user_id ]) -> delete ();
return [ 'code' => 1 , 'msg' => '取消提醒成功' , 'data' => null ];
}
db :: name ( 'vs_user_live_remind' ) -> insert ([ 'user_id' => $uid , 'remind_user_id' => $remind_user_id ]);
return [ 'code' => 1 , 'msg' => '设置成功' , 'data' => null ];
}
//设置主持人
public function set_host ( $uid , $room_id , $user_id , $type , $is_add )
{
//判断用户是否是房主
$room_owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'apply_status' => 2 , 'room_status' => 1 ]) -> value ( 'user_id' );
if ( $uid != $room_owner ){
return [ 'code' => 0 , 'msg' => '您不是房主,没有权限操作' , 'data' => null ];
}
if ( ! $user_id ){
return [ 'code' => 0 , 'msg' => '请选择用户' , 'data' => null ];
}
$FromUserInfo = db :: name ( 'user' ) -> where ( 'id' , $user_id ) -> field ( 'id as user_id,nickname,avatar,sex' ) -> find ();
$text = [
'FromUserInfo' => $FromUserInfo ,
'ToUserInfo' => null ,
'GiftInfo' => null ,
'GiftNum' => null
];
if ( $type == 1 ){ //1-主持,2管理
if ( $is_add == 1 ){ //1-添加,2-删除
$typee = 1007 ;
$text [ 'text' ] = '你已被设为主持' ;
} else {
$typee = 1018 ;
$text [ 'text' ] = '你已被取消主持' ;
}
} elseif ( $type == 2 ){
if ( $is_add == 1 ){
$typee = 1006 ;
$text [ 'text' ] = '你已被设为管理' ;
} else {
$typee = 1017 ;
$text [ 'text' ] = '你已被取消管理' ;
}
}
$is_host = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => $type , 'delete_time' => null ]) -> find ();
if ( $is_host && $is_add == 1 ){
return [ 'code' => 1 , 'msg' => '设置成功' , 'data' => null ];
} elseif ( $is_host && $is_add == 2 ){
//删除
$res = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => $type , 'delete_time' => null ]) -> update ([ 'delete_time' => time ()]);
if ( ! $res ){
return [ 'code' => 0 , 'msg' => '设置失败,' , 'data' => null ];
}
model ( 'Chat' ) -> sendMsg ( $typee , $room_id , $text );
return [ 'code' => 1 , 'msg' => '设置成功' , 'data' => null ];
} elseif ( ! $is_host && $is_add == 1 ){
$res = db :: name ( 'vs_room_host' ) -> insert ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => $type , 'createtime' => time ()]);
if ( ! $res ){
return [ 'code' => 0 , 'msg' => '设置失败.' , 'data' => null ];
}
model ( 'Chat' ) -> sendMsg ( $typee , $room_id , $text );
return [ 'code' => 1 , 'msg' => '设置成功' , 'data' => null ];
} elseif ( ! $is_host && $is_add == 2 ){
return [ 'code' => 1 , 'msg' => '设置成功' , 'data' => null ];
} else {
return [ 'code' => 0 , 'msg' => '设置失败。' , 'data' => null ];
}
}
//主持人,管理员列表
public function host_list ( $room_id , $type )
{
$list = db :: name ( 'vs_room_host' ) -> alias ( 'a' )
-> join ( 'user b' , 'a.user_id = b.id' )
-> field ( 'a.ratio,a.id,a.room_id,a.user_id,a.type,b.nickname,b.avatar,b.sex' )
-> where ([ 'a.room_id' => $room_id , 'a.delete_time' => null , 'a.type' => $type ])
-> select ();
if ( $list ){
foreach ( $list as & $v ){
$v [ 'icon' ][ 0 ] = model ( 'UserData' ) -> user_wealth_icon ( $v [ 'user_id' ]); //财富图标
$v [ 'icon' ][ 1 ] = model ( 'UserData' ) -> user_charm_icon ( $v [ 'user_id' ]); //魅力图标
$v [ 'earnings' ] = db :: name ( 'vs_user_money_log' ) -> where ([ 'user_id' => $v [ 'user_id' ], 'room_id' => $room_id , 'money_type' => 2 , 'change_type' => 19 ]) -> sum ( 'change_value' );
}
}
return [ 'code' => 1 , 'msg' => '成功' , 'data' => $list ];
}
//设置主持人收益
public function set_host_profit ( $uid , $room_id , $user_id , $profit )
{
//判断用户是否是房主
$room_owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'apply_status' => 2 , 'room_status' => 1 ]) -> value ( 'user_id' );
if ( $uid != $room_owner ){
return [ 'code' => 0 , 'msg' => '您不是房主,没有权限操作' , 'data' => null ];
}
$is_host = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => 1 , 'delete_time' => null ]) -> find ();
if ( ! $is_host ){
return [ 'code' => 0 , 'msg' => '用户不是主持人,不能设置收益' , 'data' => null ];
}
$res = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => 1 , 'delete_time' => null ])
-> update ([ 'ratio' => $profit ]);
if ( ! $res ){
return [ 'code' => 0 , 'msg' => '设置失败' , 'data' => null ];
}
return [ 'code' => 1 , 'msg' => '设置成功' , 'data' => null ];
}
//清除房间用户的魅力值
2025-08-16 18:48:10 +08:00
public function clear_user_charm ( $user_id , $room_id , $uid = '' )
2025-08-13 10:43:56 +08:00
{
//判断用户是否在主持麦
// $is_host = db::name('vs_room_pit')->where(['room_id' => $room_id,'user_id' => $user_id,'pit_number' => 9])->find();
$owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'user_id' => $user_id ]) -> field ( 'id' ) -> find ();
$management = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'delete_time' => null ]) -> find ();
if ( ! $owner && ! $management ){
return [ 'code' => 0 , 'msg' => '没有权限' , 'data' => null ];
}
if ( $uid <= 0 ){
2025-09-11 15:31:28 +08:00
db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room_id ]) -> update ([ 'charm' => 0 , 'clear_time' => time ()]);
2025-08-13 10:43:56 +08:00
//获取房间内所有用户
2025-09-11 15:31:28 +08:00
// $list = db::name('vs_room_visitor')->field('user_id')->where(['room_id' => $room_id])->select();
//
// //循环清除用户魅力值
// if($list){
// foreach ($list as $v){
// //清除有魅力值的用户
// if(db::name('vs_room_user_charm')->where(['room_id' => $room_id,'user_id' => $v['user_id']])->find()){
// db::name('vs_room_user_charm')->where(['room_id' => $room_id,'user_id' => $v['user_id']])->update(['charm' => 0,'clear_time' => time()]);
// }
// }
// }
2025-09-09 17:59:10 +08:00
//发送消息
$text [ 'text' ] = '清除魅力成功' ;
model ( 'Chat' ) -> sendMsg ( 1021 , $room_id , $text );
2025-08-13 10:43:56 +08:00
} else {
2025-08-16 11:29:29 +08:00
$dd = db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room_id , 'user_id' => $uid ]) -> update ([ 'charm' => 0 , 'clear_time' => time ()]);
2025-09-09 17:59:10 +08:00
//发送消息
$text [ 'text' ] = '清除魅力成功' ;
$text [ 'user_id' ] = $uid ;
model ( 'Chat' ) -> sendMsg ( 1059 , $room_id , $text );
2025-08-13 10:43:56 +08:00
}
2025-09-09 17:59:10 +08:00
2025-08-13 10:43:56 +08:00
//1-禁麦位, 2-清空消息, 3-清空魅力值, 4-加入黑名单, 5-踢出房间, 6-关闭麦克风, 7-申请上麦, 8-同意上麦, 9-拒绝上麦, 10-点歌, 11-开启PK',
model ( 'Room' ) -> room_operation_record ( $user_id , $room_id , 3 );
return [ 'code' => 1 , 'msg' => '成功' , 'data' => null ];
}
//修改房间类型
public function change_room_type ( $uid , $room_id , $type )
{
if ( ! $uid || ! $room_id || ! $type ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
$owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'user_id' => $uid ]) -> field ( 'id' ) -> find ();
$host = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $uid , 'delete_time' => null ]) -> find ();
if ( ! $owner && ! $host ){
return [ 'code' => 0 , 'msg' => '没有权限操作' , 'data' => null ];
}
2025-08-21 15:10:18 +08:00
$roomInfo = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> find ();
if ( $roomInfo [ 'type_id' ] == $type ){
return [ 'code' => 0 , 'msg' => '房间类型已存在' , 'data' => null ];
}
2025-09-02 19:07:01 +08:00
if ( $roomInfo [ 'type_id' ] == 7 && ( $roomInfo [ 'step' ] == 2 || $roomInfo [ 'step' ] == 3 )){
return [ 'code' => 0 , 'msg' => '请先结束交友后在修改房间类型' , 'data' => null ];
}
2025-08-13 10:43:56 +08:00
//开启事务
db :: startTrans ();
2025-08-19 10:21:27 +08:00
$data = [];
2025-08-13 10:43:56 +08:00
if ( $type == 1 || $type == 3 || $type == 4 ){
$data = [
'label_id' => 1 ,
'type_id' => $type ,
'room_up_pit_type' => 1 ,
'is_song' => 1
];
}
if ( $type == 2 ){
$data = [
'label_id' => 3 ,
'type_id' => $type ,
'room_up_pit_type' => 1 ,
'is_song' => 1
];
}
2025-08-16 11:29:29 +08:00
//交友房
if ( $type == 7 ){
$data = [
'label_id' => 5 ,
'type_id' => $type ,
'room_up_pit_type' => 1 ,
];
}
2025-08-13 10:43:56 +08:00
$res = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> update ( $data );
if ( ! $res ){
db :: rollback ();
return [ 'code' => 0 , 'msg' => '修改失败' , 'data' => null ];
}
//如果房间正在点唱中,结束点唱
$romm_song = db :: name ( 'vs_room_song' ) -> where ([ 'room_id' => $room_id ]) -> order ( 'did desc' ) -> find ();
if ( isset ( $romm_song ) && ( $romm_song [ 'status' ] == 1 || $romm_song [ 'status' ] == 2 )){
db :: name ( 'vs_room_song' ) -> where ([ 'room_id' => $room_id , 'status' => [ 'in' ,[ 1 , 2 ]]]) -> update ([ 'status' => 3 ]);
if ( db :: name ( 'vs_room_song' ) -> where ( 'room_id' , $room_id ) -> where ([ 'times_status' => 1 ]) -> find ()){
db :: name ( 'vs_room_song' ) -> where ( 'room_id' , $room_id ) -> update ([ 'times_status' => 2 ]);
}
}
//在麦位上的用户 全部下麦
$on_pit = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'status' => 1 , 'user_id' => [ '>' , 0 ], 'pit_number' => [ '<' , 9 ]]) -> select ();
if ( $on_pit ){
foreach ( $on_pit as $v ){
model ( 'RoomPit' ) -> DownPit ( $v [ 'user_id' ], $room_id , $v [ 'pit_number' ]);
}
}
// db::name('vs_room_pit')->where(['room_id' => $room_id])->update(['user_id' => 0]);
db :: name ( 'vs_room_pit_simulate' ) -> where ([ 'room_id' => $room_id ]) -> delete ();
//申请上麦的全部下麦
model ( 'RoomPit' ) -> clear_apply_pit_list ( $uid , $room_id );
//处理之前修改的用户房间信息
if ( $type == 1 || $type == 3 || $type == 4 ){
db :: name ( 'vs_room_pit' ) -> where ([ 'pit_number' => [ '>' , 10 ]]) -> update ([ 'status' => 2 ]);
}
2025-09-08 20:05:33 +08:00
if ( $type == 1 || $type == 3 || $type == 4 || $type == 7 ){
2025-08-13 10:43:56 +08:00
//查询拍卖房的状态
$room_auction = db :: name ( 'vs_room_auction' ) -> where ([ 'room_id' => $room_id , 'status' => 2 ]) -> select ();
if ( $room_auction ){
foreach ( $room_auction as $v ){
model ( 'RoomAuction' ) -> room_auction_end ( $room_id , $v [ 'auction_id' ]);
}
}
}
if ( $type == 2 ){
//清除房间此前的魅力值
2025-08-16 11:29:29 +08:00
db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room_id ]) -> update ([ 'charm' => 0 , 'clear_time' => time ()]);
2025-08-13 10:43:56 +08:00
//10号麦有人就下去
$pit_10 = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'pit_number' => 10 ]) -> find ();
if ( $pit_10 && $pit_10 [ 'user_id' ] > 0 ){
model ( 'RoomPit' ) -> DownPit ( $pit_10 [ 'user_id' ], $room_id , 10 );
}
}
db :: commit ();
//推送给前端
$text = [
'room_id' => $room_id ,
'type' => $type ,
'text' => '房间类型已修改type--' . $type
];
model ( 'Chat' ) -> sendMsg ( 1012 , $room_id , $text );
return [ 'code' => 1 , 'msg' => '修改成功' , 'data' => null ];
}
//房间的类型
public function get_room_label ( $room_id )
{
$room_info = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> field ( 'id,label_id,type_id' ) -> find ();
if ( ! $room_info ){
return [ 'code' => 0 , 'msg' => '房间不存在' , 'data' => null ];
}
return [ 'code' => 1 , 'msg' => '成功' , 'data' => $room_info ];
}
//更新用户声网的token
public function update_user_token ( $user_id , $room_id )
{
$user_info [ 'agora_token' ] = model ( 'Agora' ) -> agora_token_info ( $user_id , $room_id );
return $user_info ;
}
//更新房间声网的RTM token
public function update_rtm_token ( $user_id , $room_id )
{
$user_info [ 'agora_rtm_token' ] = model ( 'Agora' ) -> agora_rtm_token_info ( $user_id , $room_id );
return $user_info ;
}
//房间信息
public function room_info ( $user_id , $room_id )
{
if ( ! $room_id ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
2025-09-05 11:51:53 +08:00
$user_in_room = db :: name ( 'vs_room_visitor' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> find ();
if ( ! $user_in_room ){
return [ 'code' => 0 , 'msg' => '您已不在此房间' , 'data' => null ];
}
2025-08-13 10:43:56 +08:00
$room = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> find ();
$song_list = null ;
$next_song_info = null ;
$song_pit_list = null ;
$user_pit = 0 ;
$pit_list = null ;
$roomauction = null ;
$cp_users = null ;
2025-08-20 10:44:31 +08:00
if ( $room [ 'type_id' ] == 1 || $room [ 'type_id' ] == 3 || $room [ 'type_id' ] == 4 || $room [ 'type_id' ] == 7 ) {
if ( $room [ 'label_id' ] == 1 || $room [ 'label_id' ] == 5 ){
2025-08-13 10:43:56 +08:00
//麦位信息
$pit_list = db :: name ( 'vs_room_pit' ) -> alias ( 'a' ) -> join ( 'user b' , 'a.user_id = b.id' , 'left' )
-> where ([ 'a.room_id' => $room [ 'id' ], 'a.status' => 1 ])
-> field ( 'a.id,a.user_id,a.pit_number,a.is_lock,a.is_mute,a.count_down,b.nickname,b.avatar,b.sex,b.user_code' ) -> order ( 'a.pit_number asc' ) -> select ();
foreach ( $pit_list as & $value ) {
$value [ 'charm' ] = 0 ;
$value [ 'dress' ] = '' ;
if ( isset ( $value [ 'user_id' ]) && $value [ 'user_id' ] > 0 ) {
$value [ 'charm' ] = db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room [ 'id' ], 'user_id' => $value [ 'user_id' ]]) -> value ( 'charm' );
$value [ 'dress' ] = model ( 'Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 1 );
$value [ 'user_code' ] = model ( 'Decorate' ) -> user_decorate_detail ( $value [ 'user_id' ], 6 );
}
}
$user_pit = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room [ 'id' ], 'user_id' => $user_id ]) -> find ();
} elseif ( $room [ 'label_id' ] == 2 ){
$song = $this -> get_song_info ( $room_id , $user_id );
$song_list = $song [ 'song_user_info' ];
$next_song_info = $song [ 'nextInfo' ];
$pit_list = $song [ 'pit_list' ];
$user_pit = $song [ 'user_pit' ];
$song_pit_list = $song [ 'song_pit_list' ];
}
} elseif ( $room [ 'type_id' ] == 2 ){
$roomauction = $this -> auction_room ( $room_id , $user_id );
$pit_list = $roomauction [ 'pit_list' ];
$user_pit = $roomauction [ 'user_pit' ];
} elseif ( $room [ 'type_id' ] == 6 ){
//查看房间时间是否已到期
$room_time = db :: name ( 'vs_room_cp_movie' ) -> where ([ 'room_id' => $room [ 'id' ]]) -> value ( 'time_day' );
if ( $room_time <= time ()){
return [ 'code' => 0 , 'msg' => 'cp房间已到期' , 'data' => '' ];
}
$cp_users = db :: name ( 'vs_room_cp_movie' ) -> alias ( 'a' )
-> join ( 'user b' , 'a.user_id = b.id' , 'left' )
-> join ( 'user c' , 'a.user_id1 = c.id' , 'left' )
-> where ([ 'room_id' => $room [ 'id' ], 'a.status' => 1 ])
-> field ( 'a.time_day,a.cp_id,a.user_id,a.user_id1,b.nickname,c.nickname as nickname1,b.avatar,c.avatar as avatar1,b.user_code,c.user_code as user_code1' )
-> find ();
$cp_users [ 'dress' ] = model ( 'Decorate' ) -> user_decorate_detail ( $cp_users [ 'user_id' ], 1 );
$cp_users [ 'dress1' ] = model ( 'Decorate' ) -> user_decorate_detail ( $cp_users [ 'user_id1' ], 1 );
if ( $cp_users [ 'user_id' ] == $user_id ){
$room_name = db :: name ( 'user' ) -> where ( 'id' , $cp_users [ 'user_id1' ]) -> value ( 'nickname' );
}
if ( $cp_users [ 'user_id1' ] == $user_id ){
$room_name = db :: name ( 'user' ) -> where ( 'id' , $cp_users [ 'user_id' ]) -> value ( 'nickname' );
}
$room [ 'room_name' ] = '我 ❤️ ' . $room_name ;
}
$room [ 'is_use_code' ] = 0 ;
$liang = model ( 'Decorate' ) -> user_decorate_detail ( $room [ 'id' ], 7 );
if ( $liang != $room [ 'room_number' ]){
$room [ 'is_use_code' ] = 1 ;
$room [ 'room_number' ] = $liang ;
}
//头条
$headline = db :: name ( 'vs_headline' ) -> where ( 'end_time' , '>' , time ()) -> where ( 'is_now' , 1 ) -> find ();
$headline_data = null ;
if ( $headline ){
$config = get_system_config ();
$headline_data = [
'countdown' => $config [ 'headline_time' ], //倒计时时间 单位分钟
'now_money' => $headline [ 'money' ],
'next_money' => $config [ 'headline_incremental_money' ] + $headline [ 'money' ],
];
}
if ( $room [ 'label_id' ] == 3 ){
$label_id = 2 ;
} elseif ( $room [ 'label_id' ] == 4 ){
$label_id = 1 ;
} else {
$label_id = $room [ 'label_id' ];
}
//判断当前房间是否正在pk
//pk信息
$pk_info = null ;
$is_pk = db :: name ( 'vs_room_pk' ) -> where ([ 'room_id_a' => $room_id ]) -> where ([ 'status' => [ 'in' ,[ 2 , 3 , 4 ]]])
-> field ( 'pk_id,create_user_id,room_id_b,create_value_a,receive_value_b,pk_times,start_time,status,updatetime' ) -> find ();
if ( $is_pk ){
$pk_info [ 'pk_room_id' ] = $is_pk [ 'room_id_b' ]; //对方房间id
$pk_info [ 'invite_pk_user_id' ] = $is_pk [ 'create_user_id' ]; //发起pk用户id
$pk_info [ 'pk_id' ] = $is_pk [ 'pk_id' ]; //pkid
$pk_info [ 'pk_end_times' ] = $is_pk [ 'start_time' ] + $is_pk [ 'pk_times' ] * 60 ; //pk结束时间
$pk_info [ 'my_room_value' ] = $is_pk [ 'create_value_a' ]; //自己房间的值
$pk_info [ 'pk_room_value' ] = $is_pk [ 'receive_value_b' ]; //对方房间的值
$pk_info [ 'pk_part' ] = $is_pk [ 'status' ];
if ( $is_pk [ 'status' ] == 2 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'updatetime' ] + 300 ;
} elseif ( $is_pk [ 'status' ] == 3 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'start_time' ] + $is_pk [ 'pk_times' ] * 60 ;
} elseif ( $is_pk [ 'status' ] == 4 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'updatetime' ] + 300 ;
if ( $is_pk [ 'create_value_a' ] > $is_pk [ 'receive_value_b' ]){
$pk_info [ 'create_type' ] = 1 ; //赢
$pk_info [ 'receive_type' ] = 0 ; //输
} elseif ( $is_pk [ 'create_value_a' ] = $is_pk [ 'receive_value_b' ]){
$pk_info [ 'create_type' ] = 2 ; //平局
$pk_info [ 'receive_type' ] = 2 ; //平局
} else {
$pk_info [ 'create_type' ] = 0 ; //输
$pk_info [ 'receive_type' ] = 1 ; //赢
}
}
} else {
$is_pk = db :: name ( 'vs_room_pk' ) -> where ([ 'room_id_b' => $room_id ]) -> where ([ 'status' => [ 'in' ,[ 2 , 3 , 4 ]]])
-> field ( 'pk_id,create_user_id,room_id_a,create_value_a,receive_value_b,pk_times,start_time,status,updatetime' ) -> find ();
if ( $is_pk ){
$pk_info [ 'pk_room_id' ] = $is_pk [ 'room_id_a' ];
$pk_info [ 'invite_pk_user_id' ] = $is_pk [ 'create_user_id' ];
$pk_info [ 'pk_id' ] = $is_pk [ 'pk_id' ];
$pk_info [ 'my_room_value' ] = $is_pk [ 'receive_value_b' ];
$pk_info [ 'pk_room_value' ] = $is_pk [ 'create_value_a' ];
$pk_info [ 'pk_part' ] = $is_pk [ 'status' ];
if ( $is_pk [ 'status' ] == 2 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'updatetime' ] + 300 ;
} elseif ( $is_pk [ 'status' ] == 3 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'start_time' ] + $is_pk [ 'pk_times' ] * 60 ;
} elseif ( $is_pk [ 'status' ] == 4 ){
$pk_info [ 'pk_end_times' ] = $is_pk [ 'updatetime' ] + 300 ;
if ( $is_pk [ 'create_value_a' ] > $is_pk [ 'receive_value_b' ]){
$pk_info [ 'create_type' ] = 1 ; //赢
$pk_info [ 'receive_type' ] = 0 ; //输
} elseif ( $is_pk [ 'create_value_a' ] = $is_pk [ 'receive_value_b' ]){
$pk_info [ 'create_type' ] = 2 ; //平局
$pk_info [ 'receive_type' ] = 2 ; //平局
} else {
$pk_info [ 'create_type' ] = 0 ; //输
$pk_info [ 'receive_type' ] = 1 ; //赢
}
}
}
}
//上次的PK参数
if ( $room [ 'last_pk_room_id' ] > 0 ){
$last_pk_room_id = $room [ 'last_pk_room_id' ];
} else {
$last_pk_info = db :: name ( 'vs_room_pk' ) -> where ([ 'room_id_a' => $room_id ]) -> order ( 'pk_id' , 'desc' ) -> find ();
if ( $last_pk_info ){
$last_pk_room_id = $last_pk_info [ 'room_id_b' ];
} else {
$last_pk_info1 = db :: name ( 'vs_room_pk' ) -> where ([ 'room_id_b' => $room_id ]) -> order ( 'pk_id' , 'desc' ) -> find ();
if ( $last_pk_info1 ){
$last_pk_room_id = $last_pk_info1 [ 'room_id_a' ];
} else {
$last_pk_room_id = 0 ;
}
}
}
//房间信息
$room_info = [
'room_id' => $room [ 'id' ],
'is_use_code' => $room [ 'is_use_code' ],
'room_number' => $room [ 'room_number' ],
'room_name' => $room [ 'room_name' ],
'room_cover' => $room [ 'room_cover' ],
'room_intro' => $room [ 'room_intro' ],
'type_id' => $room [ 'type_id' ],
'type_name' => db :: name ( 'vs_room_type' ) -> where ( 'id' , $room [ 'type_id' ]) -> value ( 'type_name' ),
'user_id' => $room [ 'user_id' ],
'label_id' => $label_id ,
'label_icon' => db :: name ( 'vs_room_label' ) -> where ( 'id' , $room [ 'label_id' ]) -> value ( 'label_icon_room' ),
'room_background' => $room [ 'room_background' ],
'hot_value' => $room [ 'today_hot_value' ],
'chatrooms' => 'room' . $room [ 'id' ],
'pit_list' => $pit_list ,
'room_up_pit_type' => $room [ 'room_up_pit_type' ],
//正在演唱的歌曲用户信息
'song_user_info' => $song_list ,
'online_number' => db :: name ( 'vs_room_visitor' ) -> where ([ 'room_id' => $room [ 'id' ], 'on_line' => 1 ]) -> count (),
'head_line' => $headline_data ,
'is_pk' => $room [ 'is_pk' ], //1-默认接受PK, 2不接受',
'last_pk_room_id' => $last_pk_room_id ,
'queue_number' => db :: name ( 'vs_room_pit_apply' ) -> where ([ 'room_id' => $room_id , 'status' => 0 ]) -> count ()
];
//房主信息
$room_owner = db :: name ( 'user' ) -> where ( 'id' , $room [ 'user_id' ]) -> field ( 'id as user_id,user_code,sex,nickname,avatar' ) -> find ();
$room_owner [ 'user_code' ] = model ( 'Decorate' ) -> user_decorate_detail ( $room [ 'user_id' ], 6 );
//当前用户信息
$user_info = $this -> get_user_info ( $room_id , $user_id , $user_pit );
$user_info [ 'is_room_owner' ] = ( $user_id == $room [ 'user_id' ]) ? 1 : 0 ;
2025-08-20 10:17:10 +08:00
//交友相关回值
if ( $room [ 'type_id' ] == 7 ){
$friend = $this -> getRoomFriendData ( $room_id );
//交友状态 交友进行到第几步 1等待邂逅 2心动连线 3牵手良缘
$friend [ 'step' ] = $room [ 'step' ];
} else {
$friend = null ;
}
2025-08-13 10:43:56 +08:00
return [ 'code' => 1 ,
'msg' => '成功' ,
'data' => [ 'room_info' => $room_info ,
'room_owner' => $room_owner ,
'user_info' => $user_info ,
'song_user_info' => $song_list ,
'nextInfo' => $next_song_info ,
'room_auction' => $roomauction ,
'cp_user' => $cp_users ,
'pk_info' => $pk_info ,
2025-08-20 10:17:10 +08:00
'song_pit_list' => $song_pit_list ,
'friend_info' => $friend ,
2025-08-13 10:43:56 +08:00
]
];
}
//禁言
//1-禁言, 2-禁麦, 3-解禁, 4-解麦
public function set_mute ( $uid , $room_id , $user_id , $is_mute )
{
if ( ! $uid || ! $room_id || ! $user_id ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
//主持人、管理
$is_host = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $uid , 'delete_time' => null ]) -> find ();
//房主
$is_room_owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'user_id' => $uid ]) -> find ();
if ( ! $is_host && ! $is_room_owner ){
return [ 'code' => 0 , 'msg' => '您没有权限' , 'data' => null ];
}
//是否在主持麦位上
// $is_pit = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number' => 9])->value('user_id');
// if($uid != $is_pit){
// return ['code' => 0, 'msg' => '您没有权限', 'data' => null];
// }
if ( ! in_array ( $is_mute , [ 1 , 2 , 3 , 4 ])){
return [ 'code' => 0 , 'msg' => '参数错误!' , 'data' => null ];
}
$FromUserInfo = db :: name ( 'user' ) -> where ( 'id' , $user_id ) -> field ( 'id as user_id,nickname,avatar,sex' ) -> find ();
if ( $is_mute == 1 ){ //1-禁言,
$da = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 1 ]) -> find ();
$is_mute_pit = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 2 ]) -> find () ? 1 : 0 ;
if ( $da ){
return [ 'code' => 0 , 'msg' => '该用户已禁言' , 'data' => null ];
}
$data = [
'room_id' => $room_id ,
'user_id' => $user_id ,
'host_id' => $is_host [ 'user_id' ] ? ? 0 ,
'status' => 1 , //1-禁言, 2-禁麦
];
$da = db :: name ( 'vs_room_user_muted' ) -> insert ( $data );
if ( ! $da ){
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
$text = [
'FromUserInfo' => $FromUserInfo ,
'is_mute' => 1 ,
'is_mute_pit' => $is_mute_pit ,
'text' => '你被禁言了'
];
model ( 'Chat' ) -> sendMsg ( 1016 , $room_id , $text );
//1-禁麦位, 2-清空消息, 3-清空魅力值, 4-加入黑名单, 5-踢出房间, 6-关闭麦克风, 7-申请上麦, 8-同意上麦, 9-拒绝上麦, 10-点歌, 11-开启PK',
model ( 'Room' ) -> room_operation_record ( $uid , $room_id , 1 , $user_id );
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
} elseif ( $is_mute == 2 ){ //2-禁麦,
$da = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 2 ]) -> find ();
$is_mutes = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 1 ]) -> find () ? 1 : 0 ;
if ( $da ){
return [ 'code' => 0 , 'msg' => '该用户已禁麦' , 'data' => null ];
}
$data = [
'room_id' => $room_id ,
'user_id' => $user_id ,
'host_id' => $is_host [ 'user_id' ] ? ? 0 ,
'status' => 2 , //1-禁言, 2-禁麦
];
$da = db :: name ( 'vs_room_user_muted' ) -> insert ( $data );
if ( ! $da ){
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
$text = [
'FromUserInfo' => $FromUserInfo ,
'is_mute' => $is_mutes ,
'is_mute_pit' => 1 ,
'text' => '你被禁麦了'
];
model ( 'Chat' ) -> sendMsg ( 1016 , $room_id , $text );
//1-禁麦位, 2-清空消息, 3-清空魅力值, 4-加入黑名单, 5-踢出房间, 6-关闭麦克风, 7-申请上麦, 8-同意上麦, 9-拒绝上麦, 10-点歌, 11-开启PK',
model ( 'Room' ) -> room_operation_record ( $uid , $room_id , 1 , $user_id );
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
} elseif ( $is_mute == 3 ){ //3-解禁,
$da = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 1 ]) -> delete ();
$is_mute_pit = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 2 ]) -> find () ? 1 : 0 ;
if ( ! $da ){
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
$text = [
'FromUserInfo' => $FromUserInfo ,
'is_mute' => 0 ,
'is_mute_pit' => $is_mute_pit ,
'text' => '你被解除禁言了'
];
model ( 'Chat' ) -> sendMsg ( 1016 , $room_id , $text );
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
} elseif ( $is_mute == 4 ){ //4-解麦
$da = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 2 ]) -> delete ();
$is_mutes = db :: name ( 'vs_room_user_muted' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'status' => 1 ]) -> find () ? 1 : 0 ;
if ( ! $da ){
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
$text = [
'FromUserInfo' => $FromUserInfo ,
'is_mute' => $is_mutes ,
'is_mute_pit' => 0 ,
'text' => '你被解除禁麦了'
];
model ( 'Chat' ) -> sendMsg ( 1016 , $room_id , $text );
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
}
}
//禁麦
public function set_mute_pit ( $uid , $room_id , $pit_number , $is_mute )
{
if ( ! $uid || ! $room_id || ! $pit_number ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
//判断用户是否主持人
$is_host = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $uid , 'type' => 1 , 'delete_time' => null ]) -> find ();
//判断用户是否是房主
$is_room_owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'user_id' => $uid ]) -> find ();
if ( ! $is_host && ! $is_room_owner ){
return [ 'code' => 0 , 'msg' => '您没有权限' , 'data' => null ];
}
$data = [
'room_id' => $room_id ,
'pit_number' => $pit_number ,
];
$da = db :: name ( 'vs_room_pit' ) -> where ( $data ) -> update ([ 'is_mute' => $is_mute ]);
if ( ! $da ){
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
}
//锁麦\解锁
public function set_lock_pit ( $uid , $room_id , $pit_number , $is_mute )
{
if ( ! $uid || ! $room_id || ! $pit_number ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
//判断用户是否主持人
$is_host = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $uid , 'type' => 1 , 'delete_time' => null ]) -> find ();
//判断用户是否是房主
$is_room_owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'user_id' => $uid ]) -> find ();
if ( ! $is_host && ! $is_room_owner ){
return [ 'code' => 0 , 'msg' => '您没有权限' , 'data' => null ];
}
$data = [
'room_id' => $room_id ,
'pit_number' => $pit_number ,
];
$da = db :: name ( 'vs_room_pit' ) -> where ( $data ) -> update ([ 'is_lock' => $is_mute ]);
if ( ! $da ){
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
$FromUserInfo = db :: name ( 'user' ) -> where ( 'id' , $uid ) -> field ( 'id as user_id,nickname,avatar,sex' ) -> find ();
$text = [
'pit_number' => $pit_number ,
'is_lock' => $is_mute
];
model ( 'Chat' ) -> sendMsg ( 1009 , $room_id , $text );
//1-禁麦位, 2-清空消息, 3-清空魅力值, 4-加入黑名单, 5-踢出房间, 6-关闭麦克风, 7-申请上麦, 8-同意上麦, 9-拒绝上麦, 10-点歌, 11-开启PK',
model ( 'Room' ) -> room_operation_record ( $uid , $room_id , 1 , 0 , $pit_number );
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
}
//上传背景图片
public function upload_bg_img ( $uid , $file , $id )
{
if ( $id <= 0 ){
if ( ! $file ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
$data = [
'image_name' => '私有图片' ,
'image_url' => $file ,
'upload_user' => $uid ,
'createtime' => time (),
];
$da = db :: name ( 'vs_room_background' ) -> insert ( $data );
} else {
$da = db :: name ( 'vs_room_background' ) -> where ([ 'id' => $id ]) -> update ([ 'status' => 2 ]);
}
if ( ! $da ){
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
}
//关系卡,关系位
public function relation_card ( $uid , $user_id )
{
if ( ! $user_id ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
$room_auction1 = db :: name ( 'vs_room_auction_relation' ) -> alias ( 'a' )
-> join ( 'user b' , 'a.user_id1 = b.id' , 'left' )
-> join ( 'user c' , 'a.user_id2 = c.id' , 'left' )
-> join ( 'vs_relation d' , 'a.relation_id = d.id' , 'left' ) //关系
-> field ( 'a.relation_id,a.cp_room_id,a.id,a.user_id1,a.user_id2,a.updatetime,a.time_day,a.end_time,b.nickname as nickname1,b.avatar as avatar1,c.nickname as nickname2,c.avatar as avatar2,d.name as relation_name,d.icon as image' )
-> where ([ 'a.user_id1' => $user_id , 'a.end_time' => [ '>' , time ()], 'a.delete_time' => 0 ])
-> order ( 'a.updatetime desc' )
-> select ();
$room_auction2 = db :: name ( 'vs_room_auction_relation' ) -> alias ( 'a' )
-> join ( 'user b' , 'a.user_id1 = b.id' , 'left' )
-> join ( 'user c' , 'a.user_id2 = c.id' , 'left' )
-> join ( 'vs_relation d' , 'a.relation_id = d.id' , 'left' ) //关系
-> field ( 'a.relation_id,a.cp_room_id,a.id,a.user_id1,a.user_id2,a.updatetime,a.time_day,a.end_time,b.nickname as nickname1,b.avatar as avatar1,c.nickname as nickname2,c.avatar as avatar2,d.name as relation_name,d.icon as image' )
-> where ([ 'a.user_id2' => $user_id , 'a.end_time' => [ '>' , time ()], 'a.delete_time' => 0 ])
-> order ( 'a.updatetime desc' )
-> select ();
$room_auction = array_merge (( array ) $room_auction1 , ( array ) $room_auction2 );
$relation = db :: name ( 'vs_relation' ) -> where ( 'type' , 1 ) -> column ( 'id' );
$qinmi = null ;
$zhenai = null ;
foreach ( $room_auction as & $v ){
$v [ 'delete_me_coin' ] = get_system_config_value ( 'delete_relation_card_money' );
if ( $v [ 'cp_room_id' ] > 1 ){
//查找房间ID
$v [ 'heart_value' ] = db :: name ( 'vs_room' ) -> where ( 'id' , $v [ 'cp_room_id' ]) -> value ( 'hot_value' );
} else {
$v [ 'heart_value' ] = 0 ;
}
if ( db :: name ( 'vs_room_auction_relation_top' ) -> where ([ 'user_id' => $user_id , 'au_re_id' => $v [ 'id' ]]) -> find ()){
$v [ 'is_top' ] = 1 ; //置顶
} else {
$v [ 'is_top' ] = 0 ;
}
if ( in_array ( $v [ 'relation_id' ], $relation )){
$zhenai [] = $v ;
} else {
$qinmi [] = $v ;
}
}
//数据重组 根据是否置顶排序 然后根据 time_day 倒序
if ( ! empty ( $qinmi )) {
// 对于未置顶的项目,再根据 time_day 倒序排序
$top_qinmi = array_filter ( $qinmi , function ( $item ) { return $item [ 'is_top' ] == 1 ; });
$untop_qinmi = array_filter ( $qinmi , function ( $item ) { return $item [ 'is_top' ] != 1 ; });
usort ( $untop_qinmi , function ( $a , $b ) {
return $b [ 'time_day' ] <=> $a [ 'time_day' ];
});
$qinmi = array_merge ( $top_qinmi , $untop_qinmi );
$qinmi = array_values ( $qinmi );
}
if ( ! empty ( $zhenai )) {
// 对于未置顶的项目,再根据 time_day 倒序排序
$top_zhenai = array_filter ( $zhenai , function ( $item ) { return $item [ 'is_top' ] == 1 ; });
$untop_zhenai = array_filter ( $zhenai , function ( $item ) { return $item [ 'is_top' ] != 1 ; });
usort ( $untop_zhenai , function ( $a , $b ) {
return $b [ 'time_day' ] <=> $a [ 'time_day' ];
});
$zhenai = array_merge ( $top_zhenai , $untop_zhenai );
$zhenai = array_values ( $zhenai );
}
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => [ 'qinmi' => $qinmi , 'zhenai' => $zhenai ]];
}
//置顶
public function top_relation_card ( $uid , $id )
{
if ( ! $id ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
//根据id查找关系
$room_auction = db :: name ( 'vs_room_auction_relation' ) -> where ( 'id' , $id ) -> find ();
if ( $room_auction [ 'user_id1' ] != $uid && $room_auction [ 'user_id2' ] != $uid ){
return [ 'code' => 0 , 'msg' => '这不是您的关系,无法置顶' , 'data' => null ];
}
if ( db :: name ( 'vs_room_auction_relation_top' ) -> where ([ 'user_id' => $uid , 'au_re_id' => $id ]) -> find ()){
return [ 'code' => 0 , 'msg' => '您已置顶过此关系' , 'data' => null ];
}
$data = [
'user_id' => $uid ,
'au_re_id' => $id ,
'createtime' => time (),
];
$da = db :: name ( 'vs_room_auction_relation_top' ) -> insert ( $data );
if ( ! $da ){
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
}
//删除关系
public function delete_relation_card ( $uid , $id )
{
if ( ! $id ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
//根据id查找关系
$room_auction = db :: name ( 'vs_room_auction_relation' ) -> where ( 'id' , $id ) -> find ();
if ( $room_auction [ 'user_id1' ] != $uid && $room_auction [ 'user_id2' ] != $uid ){
return [ 'code' => 0 , 'msg' => '这不是您的关系,无法删除' , 'data' => null ];
}
$money = get_system_config_value ( 'delete_relation_card_money' );
//开启事务
db :: startTrans ();
if ( $money > 0 ){
$user_money = db :: name ( 'user_wallet' ) -> where ( 'user_id' , $uid ) -> value ( 'coin' );
if ( $user_money < $money ){
return [ 'code' => 0 , 'msg' => '您的余额不足,请充值' , 'data' => null ];
}
$da = db :: name ( 'user_wallet' ) -> where ( 'user_id' , $uid ) -> setDec ( 'coin' , $money );
if ( ! $da ){
db :: rollback ();
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
}
$da = db :: name ( 'vs_room_auction_relation' ) -> where ( 'id' , $id ) -> update ([ 'delete_time' => time ()]);
if ( ! $da ){
db :: rollback ();
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
//记录扣除用户余额
$res5 = db :: name ( 'vs_user_money_log' ) -> insert ([
'user_id' => $uid ,
'change_type' => 24 ,
'money_type' => 1 ,
'change_value' => $money ,
'from_id' => $id ,
'remarks' => '删除关系扣除余额' ,
'createtime' => time (),
]);
if ( ! $res5 ) {
Db :: rollback ();
return [ 'code' => 0 , 'msg' => '记录扣除用户余额失败!' , 'data' => null ];
}
db :: commit ();
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
}
//1-禁麦位, 2-清空消息, 3-清空魅力值, 4-加入黑名单, 5-踢出房间, 6-关闭麦克风, 7-申请上麦, 8-同意上麦, 9-拒绝上麦, 10-点歌, 11-开启PK',
//model('Room')->room_operation_record($user_id,$room_id,$type,$accept_user_id,$pit_number,$accept_id);
//房间操作记录
public function room_operation_record ( $user_id , $room_id , $type , $accept_user_id = 0 , $pit_number = 0 , $accept_id = 0 )
{
$data = [
'user_id' => $user_id ,
'room_id' => $room_id ,
'type' => $type , //1-禁麦位, 2-清空消息, 3-清空魅力值, 4-加入黑名单, 5-踢出房间, 6-关闭麦克风, 7-申请上麦, 8-同意上麦, 9-拒绝上麦, 10-点歌, 11-开启PK',
'accept_user_id' => $accept_user_id ,
'pit_number' => $pit_number ,
'accept_id' => $accept_id ,
'createtime' => time (),
];
db :: name ( 'vs_room_operation_log' ) -> insert ( $data );
}
//用户在线状态
public function user_online_status ( $room_id , $user_id )
{
if ( ! $room_id || ! $user_id ){
return [ 'code' => 0 , 'msg' => '参数错误~' , 'data' => null ];
}
$user = explode ( ',' , $user_id );
//获取腾讯的在线用户
$user_id_array = null ;
foreach ( $user as $v ) {
$user_id_array [] = 'u' . $v ;
}
$online_user = [];
$online_users = model ( 'Tencent' ) -> query_user_online_status ( $user_id_array );
if ( isset ( $online_users [ 'ActionStatus' ]) && $online_users [ 'ActionStatus' ] == 'OK' ){
if ( $online_users [ 'QueryResult' ]){
foreach ( $online_users [ 'QueryResult' ] as $v ){
if ( $v [ 'Status' ] == " Online " ){
//截取用户ID前面的 u 并获取用户ID
$user_id = substr ( $v [ 'To_Account' ], 1 );
$online_user [] = $user_id ;
}
}
}
} else {
return [ 'code' => 0 , 'msg' => $online_users , 'data' => null ];
}
$array = $online_user ;
$data = null ;
foreach ( $user as & $v ){
if ( ! in_array ( $v , $array )){
$data [] = [
'user_id' => $v ,
'is_online' => 0 ,
];
} else {
$data [] = [
'user_id' => $v ,
'is_online' => 1 ,
];
}
}
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => $data ];
}
//隐藏房间
public function hide_room ( $user_id , $room_id )
{
if ( ! $room_id ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
//判断是否是房主
$room_owner = db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id , 'user_id' => $user_id ]) -> find ();
//判断是否是管理
$room_manager = db :: name ( 'vs_room_host' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id , 'type' => 2 , 'delete_time' => null ]) -> find ();
if ( ! $room_owner && ! $room_manager ){
return [ 'code' => 0 , 'msg' => '您不是房主或管理员,无法隐藏房间' , 'data' => null ];
}
$data = [
'is_show_room' => 2 ,
];
$da = db :: name ( 'vs_room' ) -> where ( 'id' , $room_id ) -> update ( $data );
if ( ! $da ){
return [ 'code' => 0 , 'msg' => '操作失败' , 'data' => null ];
}
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => null ];
}
//房间在线人 数
public function room_online_number ( $room_id )
{
if ( ! $room_id ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
//查找数据库用户
$dblist = db :: name ( 'vs_room_visitor' ) -> where ([ 'room_id' => $room_id ]) -> field ( 'user_id' ) -> select ();
$num_robit = 0 ;
foreach ( $dblist as $v ) {
//机器人
if ( db :: name ( 'user' ) -> where ([ 'id' => $v [ 'user_id' ]]) -> value ( 'is_robot' )){
$num_robit ++ ;
}
}
$room_online_number = model ( 'Tencent' ) -> get_group_online_num ( $room_id );
if ( $room_online_number [ 'ActionStatus' ] != 'OK' ){
return [ 'code' => 0 , 'msg' => $room_online_number [ 'ErrorInfo' ] . '-' . $room_online_number [ 'ErrorCode' ], 'data' => null ];
}
$data = [
'online_number' => $room_online_number [ 'OnlineMemberNum' ] + $num_robit ,
];
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => $data ];
}
2025-08-20 10:17:10 +08:00
public function getRoomFriendData ( $room_id )
{
//交友相关回值
$friend = [];
$friend [ 'friend_id' ] = 0 ; //场次ID
//查询用户交友表
2025-09-10 19:44:39 +08:00
$friend_info = db :: name ( 'vs_user_friending' ) -> where ([ 'room_id' => $room_id , 'status' => 1 ]) -> order ( 'id' , 'desc' ) -> find ();
2025-08-20 10:17:10 +08:00
$friend [ 'room_on_line_cp' ] = 0 ;
$friend [ 'heart_list' ] = [];
$friend [ 'is_preside' ] = 0 ;
$friend [ 'end_time' ] = 0 ;
if ( $friend_info ){
$friend [ 'friend_id' ] = $friend_info [ 'id' ];
$friend [ 'end_time' ] = $friend_info [ 'end_time' ];
2025-09-05 19:44:15 +08:00
$friend [ 'heart_list' ] = model ( 'Friend' ) -> pullHeartChange ( $room_id , $friend_info [ 'id' ]);
2025-08-20 10:17:10 +08:00
//获取麦上CP心动值列表
2025-09-05 19:44:15 +08:00
// $heart_list = db::name('vs_user_friending_heart')->where(['room_id' => $room_id, 'friend_id' => $friend_info['id'], 'status' => 1])->order('heart_value', 'desc')->limit(3)->select();
// if($heart_list){
// $heart_list_data = [];
//// $heart_list = $heart_list->toArray();
// $pit_number_array_reverse = [0=>[2,5],1=>[1,6],2=>[3,4]];
// foreach($heart_list as $k=>$v){
// $heart_list_data[$k]['heartId'] = $v['id'];
// $pitnum1 = db::name('vs_room_pit')->where(['room_id' =>$room_id, 'user_id' => $v['user1_id']])->value('pit_number');
// $pitnum2 = db::name('vs_room_pit')->where(['room_id' =>$room_id, 'user_id' => $v['user2_id']])->value('pit_number');
// if(in_array($pitnum1,$pit_number_array_reverse[$k]) && in_array($pitnum2,$pit_number_array_reverse[$k])){
// $heart_list_data[$k]['heartNum'] = $v['heart_value'];
// }else{
// $heart_list_data[$k]['heartNum'] = 0;
// }
// }
// $friend['heart_list'] =$heart_list_data;
// }else{
// $friend['heart_list'] = [];
// }
2025-08-20 10:17:10 +08:00
}
return $friend ;
}
2025-09-08 20:05:33 +08:00
//房间用户当前魅力值列表
public function room_user_charm_list ( $room_id , $user_id )
{
if ( $room_id == '' || $user_id == '' ){
return [ 'code' => 0 , 'msg' => '参数错误' , 'data' => null ];
}
$clear_time = db :: name ( 'vs_room_user_charm' ) -> where ([ 'room_id' => $room_id , 'user_id' => $user_id ]) -> order ( 'id' , 'desc' ) -> value ( 'clear_time' ) ? ? 0 ;
$list = db :: name ( 'vs_give_gift' ) -> alias ( 'a' )
-> join ( 'user b' , 'a.user_id=b.id' )
-> field ( 'a.user_id,sum(a.total_price) as total_price,b.nickname,b.avatar,b.user_code' )
-> where ([ 'a.from_id' => $room_id , 'a.gift_user' => $user_id , 'a.createtime' => [ '>' , $clear_time ], 'a.from' => 2 ]) -> group ( 'a.user_id' ) -> select ();
if ( $list ){
2025-09-10 11:24:28 +08:00
foreach ( $list as & $v ){
2025-09-08 20:05:33 +08:00
$v [ 'charm' ] = $v [ 'total_price' ] * get_system_config_value ( 'coin_charm_exp' );
$v [ 'icon' ][ 0 ] = model ( 'UserData' ) -> user_wealth_icon ( $v [ 'user_id' ]); //财富图标
$v [ 'icon' ][ 1 ] = model ( 'UserData' ) -> user_charm_icon ( $v [ 'user_id' ]); //魅力图标
}
}
return [ 'code' => 1 , 'msg' => '操作成功' , 'data' => $list ];
}
2025-08-13 10:43:56 +08:00
}