Files
midi-php/application/api/model/Room.php

2535 lines
120 KiB
PHP
Raw Normal View History

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];
}
2025-09-18 15:40:00 +08:00
//检查房间名称是否包含官方等词
//名称中不能有 系统管理 等关键字
if(!nickname_filter($room_name)){
return ['code' => 0, 'msg' => '名称中不能有 系统、管理、官方等相关敏感字', 'data' => null];
}
2025-08-13 10:43:56 +08:00
if($type <= 0){
$room_info = db::name('vs_room')->where(['user_id' => $uid, 'type_id' => ['<>',6], 'apply_status' => ['<>',3]])->find();
2025-08-13 10:43:56 +08:00
if (!empty($room_info)) {
if($room_info['apply_status'] == 2){
return ['code' => 0, 'msg' => '已有直播间请勿重复创建', 'data' => null];
}elseif($room_info['apply_status'] == 1){
return ['code' => 0, 'msg' => '房间审核中,请耐心等待', 'data' => null];
}
2025-08-13 10:43:56 +08:00
}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;
2025-09-18 17:35:26 +08:00
$room_bg_img = db::name('vs_room_background')->where(['id' => 2])->value('image_url');
$data['room_background'] = $room_bg_img ?? get_system_config_value('web_site').'/data/default/delfultroombackground.jpg';
2025-08-13 10:43:56 +08:00
$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) {
2025-09-17 16:00:43 +08:00
return ['code' => 0, 'msg' => '请勿重复提交', 'data' => null];
2025-08-13 10:43:56 +08:00
}
}
//推送消息
$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')
2025-09-19 14:42:02 +08:00
->where($map)->order('hot_value desc, id asc')->page($page, $page_limit)->select();
2025-09-19 15:40:22 +08:00
foreach ($list as &$v){
2025-08-13 10:43:56 +08:00
$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');
}
2025-09-19 15:40:22 +08:00
2025-08-13 10:43:56 +08:00
//版本号
$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 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)
2025-09-23 19:51:00 +08:00
->where(['type_id' => ['<>',6],'room_status' =>1,'apply_status' => ['<>',3]])
2025-08-13 10:43:56 +08:00
->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;
}
2025-09-17 00:16:08 +08:00
if($type == 1) {//1-我主持的
//今日收益
2025-09-17 00:31:47 +08:00
$v['today_profit'] = round( $this->get_room_today_earnings($v['room_id'],$uid),4);
2025-09-17 00:16:08 +08:00
}else{
//今日流水
//金币与魅力比例
$ratio = get_system_config_value('coin_charm_exp');
$v['today_profit'] = $this->get_room_today_profit($v['room_id']) * $ratio;
}
2025-08-13 10:43:56 +08:00
//关注数
$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;
$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;
}
2025-09-17 00:16:08 +08:00
//房间今日流水
2025-08-13 10:43:56 +08:00
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;
}
2025-09-17 00:16:08 +08:00
//房间今日主持收益
public function get_room_today_earnings($room_id,$user_id)
{
$today_start_time = strtotime(date('Y-m-d'));
$today_end_time = $today_start_time + 86400;
return Db::name('vs_user_money_log')
->where(['room_id' => $room_id,'user_id' => $user_id,'change_type' =>19])
->whereBetween('createtime', [$today_start_time, $today_end_time])
->sum('change_value');
}
2025-08-13 10:43:56 +08:00
//房间补贴
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];
}
2025-09-19 15:40:22 +08:00
$room_user_ratio = get_system_config_value('room_author_ratio')/100;
2025-08-13 10:43:56 +08:00
//根据日期查询房间流水
$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]];
}
$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_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) {
2025-09-24 15:13:22 +08:00
// $room = db::name('vs_room')->where(['id' => $room_id,'apply_status' => 2])->find();
$room = db::name('vs_room')->where(['id' => $room_id,'apply_status' => ['in',[1,2]]])->find();
2025-08-13 10:43:56 +08:00
if (!isset($room)) {
return ['code' => 0, 'msg' => '房间不存在', 'data' => ''];
}
2025-09-24 15:13:22 +08:00
if($room['apply_status'] == 1){
return ['code' => 0, 'msg' => '房间正在审核中……', 'data' => ''];
}
2025-08-13 10:43:56 +08:00
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();
}
}
//用户是否在其他房间
2025-09-19 15:40:22 +08:00
$room_user = db::name('vs_room_visitor')->where(['user_id' => $user_id])->order('id desc')->value('room_id');
2025-09-22 20:36:30 +08:00
if (isset($room_user) && $room_user != $room_id && $room_user != 0) {
2025-09-19 15:40:22 +08:00
//根据所在房间状态判断是否要退出房间并且下麦
2025-08-13 10:43:56 +08:00
$roomInfo = db::name('vs_room')->where(['id' => $room_user,'apply_status' => 2])->find();
2025-09-19 15:40:22 +08:00
if(($roomInfo['type_id'] == 1 || $roomInfo['type_id'] == 3 || $roomInfo['type_id'] == 4 || $roomInfo['type_id'] == 8)&& $roomInfo['label_id'] == 1){
2025-08-13 10:43:56 +08:00
//退出其他房间
$this->quit_room($user_id, $room_user,$user_id);
2025-09-19 15:40:22 +08:00
}elseif(($roomInfo['type_id'] == 1 || $roomInfo['type_id'] == 3 || $roomInfo['type_id'] == 4 || $roomInfo['type_id'] == 8)&& $roomInfo['label_id'] == 2){//k歌
2025-08-13 10:43:56 +08:00
//他的点歌列表
$song_list = db::name('vs_room_song')->where(['room_id' => $room_user, 'user_id' => $user_id])->select();
if(count($song_list) > 0){
2025-09-19 15:40:22 +08:00
foreach ($song_list as $value){
2025-08-13 10:43:56 +08:00
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);
2025-09-19 15:40:22 +08:00
}elseif($roomInfo['type_id'] == 2){
2025-08-13 10:43:56 +08:00
//是否在拍卖位
$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-09-19 15:40:22 +08:00
if($room['type_id'] == 1 || $room['type_id'] == 3 || $room['type_id'] == 4 || $room['type_id'] == 7 || $room['type_id'] == 8) {//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()]);
}
2025-09-22 20:36:30 +08:00
// db::name('user_data')->where('user_id', $user_id)->update(['room_id' => $room_id]);
2025-08-13 10:43:56 +08:00
$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-默认接受PK2不接受',
'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-09-22 14:27:35 +08:00
$xlh_info['xlh_info'] = model('BlindBoxTurntableGift')->get_user_xlh_info($room_id);
2025-08-20 10:17:10 +08:00
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-09-22 14:27:35 +08:00
'gift_cycle' => $xlh_info,
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;
2025-09-19 15:40:22 +08:00
if($room_label == 1 && ($room_type == 1 || $room_type == 3 || $room_type == 4 || $room_type == 8)){
2025-08-13 10:43:56 +08:00
$apply_type = 1;
2025-09-19 15:40:22 +08:00
}elseif ($room_label == 2 && ($room_type == 1 || $room_type == 3 || $room_type == 4 || $room_type == 8)){
2025-08-13 10:43:56 +08:00
$apply_type = 2;
}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);
}
}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))){
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);
}
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);
}
2025-09-11 17:20:41 +08:00
if($type == 2){
$text['text'] = '用户 ' . $nickname . ' 被 踢出房间';
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);
}
2025-08-13 10:43:56 +08:00
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_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_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];
}
//房间送礼
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 = 1label_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,0,$give_gift_ext);
2025-08-13 10:43:56 +08:00
return $res;
2025-09-19 15:40:22 +08:00
}elseif (($label_type['data']['type_id'] == 1 || $label_type['data']['type_id'] == 3 || $label_type['data']['type_id'] == 4 || $label_type['data']['type_id'] == 8) && $label_type['data']['label_id'] == 2)//K歌type_id = 1label_id = 2
2025-08-13 10:43:56 +08:00
{
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number,0,$give_gift_ext);
2025-08-13 10:43:56 +08:00
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){
return model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,6,$type, $room_id,$pit_number,0,$give_gift_ext);
2025-08-16 11:29:29 +08:00
}elseif($label_type['data']['type_id'] == 7){
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-19 15:40:22 +08:00
return model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number,0,$give_gift_ext);
2025-08-13 10:43:56 +08:00
}
}
2025-09-09 10:15:44 +08:00
//背包礼物一键全清
public function room_gift_all_clear($uid, $room_id, $user_id,$heart_id,$auction_id = 0)
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){
if($auction_id){//竞拍
model('RoomAuction')->room_auction_join($auction_id,$uid,$v['gid'],$v['num'],2);
}else{
$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-23 21:22:25 +08:00
//查询房间里面的用户
$room_user = db::name('vs_room_visitor')->where(['room_id' => $room_id])->select();
if($room_user){
foreach ($room_user as $vv){
if(Db::name('user')->where('id', $vv['user_id'])->value('is_online') == 0){
model('Room')->quit_room($vv['user_id'], $room_id,$vv['user_id'],2);
}
}
}
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-09-19 15:40:22 +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']['type_id'] == 8) && $label_type['data']['label_id'] == 1) {//2卡八麦聊天type_id = 1 || 7(交友label_id = 1
foreach ($list as $val) {
2025-08-13 10:43:56 +08:00
if ($val['pit_number'] > 0) {
$lists['on_pit'][] = $val;
} else {
$lists['off_pit'][] = $val;
}
}
2025-09-19 15:40:22 +08:00
}elseif(($label_type['data']['type_id'] == 1 || $label_type['data']['type_id'] == 3 || $label_type['data']['type_id'] == 4 || $label_type['data']['type_id'] == 8) && $label_type['data']['label_id'] == 2){
foreach ($list as $val) {
2025-08-13 10:43:56 +08:00
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');
2025-09-19 15:40:22 +08:00
foreach ($list as $val) {
2025-08-13 10:43:56 +08:00
if (in_array($val['user_id'], $user_ids) || $val['pit_number'] > 0) {
$lists['on_pit'][] = $val;
} else {
$lists['off_pit'][] = $val;
}
}
}else{
2025-09-19 15:40:22 +08:00
foreach ($list as $val) {
2025-08-13 10:43:56 +08:00
if ($val['pit_number'] > 0) {
$lists['on_pit'][] = $val;
} else {
$lists['off_pit'][] = $val;
}
}
}
}else{
2025-09-19 15:40:22 +08:00
foreach ($list as $val) {
2025-08-13 10:43:56 +08:00
if ($val['pit_number'] > 0) {
$lists['on_pit'][] = $val;
} else {
$lists['off_pit'][] = $val;
}
}
}
}
2025-09-23 21:22:25 +08:00
2025-08-13 10:43:56 +08:00
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-09-19 15:40:22 +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['type_id'] == 8) && $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
];
2025-09-19 15:40:22 +08:00
$typee = 0;
2025-08-13 10:43:56 +08:00
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
{
$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-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-09-19 15:40:22 +08:00
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-09-13 18:20:50 +08:00
if($roomInfo['type_id'] == 2){
$room_auction = db::name('vs_room_auction')->where(['room_id' => $room_id,'status' => 2])->select();
if($room_auction){
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-09-19 15:40:22 +08:00
if($type == 1 || $type == 3 || $type == 4 || $type == 8){
2025-08-13 10:43:56 +08:00
$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-09-19 15:40:22 +08:00
//交友房(互娱)
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 || $type == 7 || $type == 8){
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']);
}
2025-09-23 23:28:28 +08:00
}
//拍卖位上是否有人
$an = Cache::get('auction_user_'.$room_id);
if($an){
//拍卖位下麦
model('api/RoomPit')->host_user_pit($uid,$room_id,888,$an,2);
2025-08-13 10:43:56 +08:00
}
}
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);
2025-09-19 19:22:05 +08:00
//查询房间里面的用户
$room_user = db::name('vs_room_visitor')->where(['room_id' => $room_id])->select();
if($room_user){
foreach ($room_user as $v){
if(Db::name('user')->where('id', $v['user_id'])->value('is_online') == 0){
model('Room')->quit_room($v['user_id'], $room_id,$v['user_id'],2);
}
}
}
2025-08-13 10:43:56 +08:00
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];
}
$user_in_room = db::name('vs_room_visitor')->where(['room_id' => $room_id,'user_id' => $user_id])->find();
if(!$user_in_room){
2025-09-18 18:18:16 +08:00
// return ['code' => 0, 'msg' => '您已不在此房间', 'data' => null];
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-09-19 15:40:22 +08:00
if($room['type_id'] == 1 || $room['type_id'] == 3 || $room['type_id'] == 4 || $room['type_id'] == 7 || $room['type_id'] == 8) {
2025-08-20 10:44:31 +08:00
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-默认接受PK2不接受',
'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-09-22 14:27:35 +08:00
$xlh_info['xlh_info'] = model('BlindBoxTurntableGift')->get_user_xlh_info($room_id);
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-09-22 14:27:35 +08:00
'gift_cycle' => $xlh_info,
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];
}
2025-09-19 15:40:22 +08:00
2025-08-13 10:43:56 +08:00
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')
2025-09-22 09:23:40 +08:00
->where(['a.user_id1' => $user_id,'a.end_time' =>['>',time()],'a.delete_time' => 0,'d.id' => ['>',0]])
2025-08-13 10:43:56 +08:00
->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
}
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];
}
2025-09-15 16:11:38 +08:00
$clear_time = db::name('vs_room_user_charm')->where(['room_id' => $room_id, 'user_id' => $user_id])
->order('id', 'desc')->value('clear_time') ?? 0;
2025-09-08 20:05:33 +08:00
$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')
2025-09-15 16:11:38 +08:00
->where(['a.from_id' => $room_id, 'a.gift_user' => $user_id, 'a.createtime' => ['>',$clear_time],'a.from' => 2])
->group('a.user_id')->select();
2025-09-08 20:05:33 +08:00
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-09-22 20:36:30 +08:00
//用户重连
public function user_reconnect($user_id,$room_id)
{
if(!$room_id){
$room_id = Db::name('vs_room_visitor')->where('user_id', $user_id)->order('id desc')->value('room_id');
}
$room_info = db::name('vs_room_visitor')->insert(['room_id' => $room_id, 'user_id' => $user_id, 'createtime' => time()]);
if(!$room_info){
return ['code' => 0, 'msg' => '加入房间失败', 'data' => null];
}
return ['code' => 1, 'msg' => '操作成功', 'data' => null];
}
2025-08-13 10:43:56 +08:00
}