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