', 0]; $map[] = ['a.is_show_room', '=', 1]; // $order_string = 'a.is_online desc,a.sort desc,a.hot_value desc,a.visitor_num desc'; //排序规则 // $sort_string = $sort_type == 1 ? ' desc' : ' asc'; // if ($sort == 1) { // $order_string = 'a.sort ' . $sort_string; // } elseif ($sort == 2) { // $order_string = 'a.hot_value ' . $sort_string; // } elseif ($sort == 3) { // $order_string = 'a.visitor_num ' . $sort_string; // } $order_string = 'a.sort desc,sa_hot desc'; //排序规则 $build_sql = db::name('room_visitor')->field('count(vid) as visitors_num, rid')->group('rid')->buildSql(); $model = Db::name('room')->alias('a')->join('yy_user b', 'a.room_owner_uid = b.uid'); $model = $model->where($map); $list = $model->field('a.rid,a.room_number,a.room_owner_uid,a.tid,a.cate_id,a.room_name,a.base64_room_name,a.room_cover,a.is_need_password,a.is_hot,a.hot_value,if(visitors_num >0,a.today_hot_value,0) as today_hot_value,if(visitors_num >0,a.today_hot_value,0) as sa_hot,a.is_online,a.visitor_num,a.room_status,a.is_hot,a.is_top,a.game_list,a.room_micro,b.base64_nick_name,b.sex,b.special_uid,c.visitors_num,b.head_pic,a.robot_num')->join($build_sql.'c', 'c.rid = a.rid', 'LEFT')->order($order_string)->page($page, $page_limit)->select(); foreach ($list as $k => &$v) { $room_micro = db::name('room_micro')->where('rid', $v['rid'])->column('uid'); $v['room_micro_list'] = []; foreach ($room_micro as $a => &$b){ // dump($b); if($b != 0 && $b != -1){ $users_info = db::name('user')->field('uid,base64_nick_name,head_pic')->find($b); $data = []; $data['uid'] = $users_info['uid']; $data['head_pic'] = localpath_to_netpath($users_info['head_pic']); $v['room_micro_list'][] = $data; } } $v['room_cover'] = localpath_to_netpath($v['room_cover']); $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); $v['category_name'] = $this->get_cate_name_by_id($v['cate_id']); $v['room_name']=mb_convert_encoding(base64_decode($v['base64_room_name']), 'UTF-8', 'UTF-8'); $visitor_num = db::name('room_visitor')->where('rid', $v['rid'])->count(); $v['visitor_num'] = $visitor_num + $v['robot_num']; $v['game_ico_list'] = []; $v['hot_value'] = $v['today_hot_value']; $v['head_pic'] = localpath_to_netpath($v['head_pic']); } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //创建房间 public function user_create_room($uid, $room_name, $cate_id, $room_cover, $room_password, $room_intro, $room_background_id) { $map = []; $map[] = ['uid', '=', $uid]; $user_info = db::name('user')->where($map)->find(); if ($user_info['is_real'] != 1) { return ['code' => 201, 'msg' => '请先进行实名认证通过后操作', 'data' => null]; } $tid = 4; //默认宝箱厅 $map = []; $map[] = ['room_owner_uid', '=', $uid]; $map[] = ['tid', '=', $tid]; $room_info = db::name('room')->where($map)->find(); if (!empty($room_info)) { return ['code' => 201, 'msg' => '已有直播间请勿重复创建', 'data' => null]; } $data = []; $data['tid'] = $tid; $data['room_owner_uid'] = $uid; $data['room_host_uid'] = $uid; $data['room_number'] = $uid; $data['room_name'] = $room_name; $data['base64_room_name'] = base64_encode($room_name); $data['cate_id'] = $cate_id; $data['room_cover'] = $room_cover; $data['room_password'] = $room_password; $data['room_intro'] = $room_intro; $data['room_background_id'] = $room_background_id; $data['room_status'] = 1; $data['is_earnings'] = 1; $validate = validate('admin/room'); $reslut = $validate->scene('apiAdd')->check($data); if ($reslut !== true) { return ['code' => 201, 'msg' => $validate->getError(), 'data' => null]; } Db::startTrans(); try { $reslut = model('admin/room')->save($data); if (!$reslut) { Db::rollback(); return ['code' => 201, 'msg' => '创建失败', 'data' => null]; } //更新用户为厅住身份 $data = []; $data['is_anchor'] = 2; $data['update_time'] = time(); $reslut = db::name('user')->where('uid', $uid)->update($data); if (!$reslut) { Db::rollback(); return ['code' => 201, 'msg' => '创建失败', 'data' => null]; } //当前房间id $room_id = db::name('room')->where('room_owner_uid', $uid)->find(); $reslut = model('Tencent')->create_group($room_id['rid']); if($reslut['code'] != 200){ Db::rollback(); return['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } $rid = db::name('room')->where('room_owner_uid', $uid)->value('rid'); $reslut = model('RoomMicro')->create_room_micro($rid); if($reslut['code'] == 201){ Db::rollback(); return ['code' => 201, 'msg' => '创建失败', 'data' => null]; } Db::commit(); return ['code' => 200, 'msg' => '创建成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 Db::rollback(); return ['code' => 201, 'msg' => '创建失败', 'data' => null]; } } public function modify_room_info($uid, $rid, $room_name, $tid, $cate_id, $game_list, $room_cover, $room_password, $room_intro, $room_background_id, $is_auto_accumulate) { $text = $room_name . $room_intro; if(!empty($text)) { $result = model('Tencent')->content_moderation('Text', $text); if($result['code'] != 200) { return ['code' => 201, 'msg' => '房间名称/介绍存在维禁词!', 'data' => null]; } } $map = []; $map[] = ['rid', '=', $rid]; // $map[] = ['room_owner_uid', '=', $uid]; //打开限制只有房主有修改权限 $room_info = db::name('room')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } // if (empty($game_list)) { // $map = []; // $map[] = ['gid', 'in', $game_list]; // $game_count = db::name('game')->where($map)->count(); // $game_data = explode(',', $game_list); // if ($game_count != count($game_data)) { // return ['code' => 201, 'msg' => '游戏类型选择错误', 'data' => null]; // } // } $data = []; $data['room_name'] = $room_name; $data['base64_room_name'] = base64_encode($room_name); $data['tid'] = $tid; if($room_info['cate_id'] != $cate_id && $cate_id > 0){ if($room_info['cate_id'] == 19){ $map = []; $map[] = ['rid', '=', $rid]; $room_privacy = db::name('room_privacy')->where($map)->select(); if(!empty($room_privacy)){ return ['code' => 201, 'msg' => '当前有小黑屋,暂时无法变更房间', 'data' => null]; } } if($room_info['cate_id'] == 26){ $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_stop', '=', 2]; $map[] = ['is_delete', '=', 1]; $room_auction_info = db::name('room_new_auction_log')->where($map)->find(); if($room_auction_info){ return ['code' => 201, 'msg' => '当前有进行中的新人拍卖,无法切换', 'data' => null]; } } if($room_info['cate_id'] == 27){ //当前是否已有进行中的K歌 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_auction_info = db::name('room_song_log')->where($map)->find(); if($room_auction_info){ return ['code' => 201, 'msg' => '当前K歌进行中,无法切换', 'data' => null]; } } if($room_info['cate_id'] == 28){ $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['status', '=', 2]; $map[] = ['is_delete', '=', 1]; $room_auction_info = db::name('room_auction_log')->where($map)->find(); if($room_auction_info){ return ['code' => 201, 'msg' => '当前有尚未结束的拍卖,无法切换', 'data' => null]; } } if($room_info['cate_id'] == 29){ $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_dating_log = db::name('room_dating_log')->where($map)->find(); if($room_dating_log){ return ['code' => 201, 'msg' => '当前玩法进行中,无法切换', 'data' => null]; } } if(in_array($room_info['cate_id'],[36,37])){ $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_dating_log = db::name('room_xq1')->where($map)->find(); if($room_dating_log){ return ['code' => 201, 'msg' => '当前玩法进行中,无法切换', 'data' => null]; } } $data['cate_id'] = $cate_id; } // $data['game_list'] = $game_list; $data['room_cover'] = $room_cover; $data['room_password'] = $room_password; $data['is_need_password'] = 1; if(!empty($room_password)){ $data['is_need_password'] = 2; } $data['room_intro'] = $room_intro; $data['room_background_id'] = $room_background_id; $validate = validate('admin/room'); $reslut = $validate->scene('apiEdit')->check($data); if ($reslut !== true) { return ['code' => 201, 'msg' => $validate->getError(), 'data' => null]; } Db::startTrans(); try { $reslut = model('admin/room')->save($data, ['rid' => $rid]); if (!$reslut) { Db::rollback(); return ['code' => 201, 'msg' => '编辑失败', 'data' => null]; } if($cate_id != $room_info['cate_id']){ //清理该房间所有麦位魅力值 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['charm_value', '>', 0]; $list = db::name('room_user_cc')->where($map)->select(); if(!empty($list)){ foreach ($list as $k => $v){ $reslut = db::name('room_user_micro_charm_log')->where('cid', $v['cid'])->update(['change_value' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '编辑失败', 'data' => '']; } } $reslut = db::name('room_user_cc')->where($map)->update(['charm_value' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '编辑失败', 'data' => '']; } } } Db::commit(); if($cate_id != $room_info['cate_id']){ $push_room_data = []; $push_room_data['rid'] = $rid; $push_room_data['type'] = 1; $push_data = []; $push_data['code'] = 369; $push_data['msg'] = "房间类型变更推送"; $push_data['data'] = $push_room_data; $reslut = model('api/WebSocketPush')->send_to_group($rid, $push_data); } return ['code' => 200, 'msg' => '编辑成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 Db::rollback(); return ['code' => 201, 'msg' => '编辑失败', 'data' => null]; } } //房间类型审核情况 public function room_cate_applys($uid, $rid){ $arr_cate_id = [19,28,29,36,37]; $map = []; $map[] = ['rc.tid', '=', 4]; $map[] = ['rc.is_delete', '=', 1]; $map[] = ['rc.cate_id', 'in', $arr_cate_id]; $list = db::name('room_category') ->alias('rc') ->join('yy_room_apply ra',"ra.rid = {$rid} and apply_status in (1,2) and ra.cate_id = rc.cate_id",'left') ->field('rc.category_name,rc.tid,IFNULL(ra.apply_status,0) as apply_status,rc.cate_id') ->where($map) ->order('rc.sort desc') ->select(); return ['code' => 200, 'msg' => 'success', 'data' => $list]; } //修改房间 public function user_apply_room($uid, $rid, $cate_id) { $map = []; $map[] = ['rid', '=', $rid]; // $map[] = ['room_owner_uid', '=', $uid]; //打开限制只有房主有修改权限 $room_info = db::name('room')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } try { Db::startTrans(); if(!in_array($cate_id,[19,28,29,36,37])){ return ['code' => 201, 'msg' => '该房间类型无需审核!', 'data' => null]; } // 待审核 2审核通过 3审核失败 $room_apply_info = db::name('room_apply')->where(['rid'=>$rid,'cate_id'=>$cate_id])->where([['apply_status','in',[1,2]]])->find(); if(!empty($room_apply_info)){ if($room_apply_info['apply_status'] == 1){ return ['code' => 201, 'msg' => '您已提交过该房间类型的审核!', 'data' => null]; } if($room_apply_info['apply_status'] == 2){ return ['code' => 201, 'msg' => '该房间类型审核已通过', 'data' => null]; } } db::name('room_apply')->insert(['rid'=>$rid,'room_owner_uid'=>$room_info['room_owner_uid'],'room_name'=>$room_info['room_name'],'base64_room_name'=>$room_info['base64_room_name'],'cate_id'=>$cate_id,'apply_status'=>1,'add_time'=>time(),'update_time'=>time()]); Db::commit(); return ['code' => 200, 'msg' => '申请成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 Db::rollback(); return ['code' => 201, 'msg' => '申请失败', 'data' => null]; } } //获取权限房间类型 public function get_power_room_cate($uid, $rid){ $t_cate_id = db::name('room_apply')->where(['rid'=>$rid,'apply_status'=>2])->column('cate_id'); $arr_cate_id = array_diff([19,28,29,36,37],$t_cate_id); $map = []; $map[] = ['tid', '=', 4]; $map[] = ['is_delete', '=', 1]; $map[] = ['cate_id', 'not in', $arr_cate_id]; $list = db::name('room_category')->field('category_name,cate_id,tid')->where($map)->order('sort desc')->select(); return ['code' => 200, 'msg' => 'success', 'data' => $list]; } //获取指定用户房间信息 public function user_get_room_info($uid) { $map = []; $map[] = ['room_owner_uid', '=', $uid]; $room_info = db::name('room')->field('rid,room_number,room_name,base64_room_name,cate_id,room_cover,room_password,room_intro,room_background_id,room_status,is_auto_accumulate')->where($map)->order('rid desc')->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } $room_info['http_room_cover'] = localpath_to_netpath($room_info['room_cover']); $room_info['room_name']=mb_convert_encoding(base64_decode($room_info['base64_room_name']), 'UTF-8', 'UTF-8'); return ['code' => 200, 'msg' => '获取成功', 'data' => $room_info]; } //获取房间信息 public function enter_room_info($uid, $rid, $password) { $map = []; $map['is_delete'] = 1; $map['rid'] = $rid; $room_info = db::name('room')->field('rid,room_number,tid,cate_id,game_list,is_need_password,room_name,room_cover,room_owner_uid,room_host_uid,room_intro,room_background_id,room_password,room_admin_uid,room_micro,is_online,visitor_num,room_status,pretty_room_number,is_look,is_auto_accumulate,is_show_dial,game_id,game_status')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } if ($room_info['room_status'] == 2) { return ['code' => 201, 'msg' => '房间已封禁', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($room_info['room_status'] == 3 && $uid != $room_info['room_owner_uid'] && !in_array($uid, $room_host_uid_arr)) { return ['code' => 201, 'msg' => '当前房间暂无主持,已关闭', 'data' => null]; } //判断用户是否在黑名单 $where = []; $where[] = ['type', '=', 2]; $where[] = ['rid', '=', $rid]; $where[] = ['receive_uid', '=', $uid]; $blacklist = db::name('user_black')->where($where)->find(); if($blacklist){ return ['code' => 201, 'msg' => '你已被拉进房间黑名单', 'data' => null]; } //房间拉黑 $is_black = db::name('room_user_black')->where(['rid'=>$rid,'black_id'=>$uid])->field('uid')->find(); if(!empty($is_black)){ return ['code' => 201, 'msg' => '您已被该房间列入黑名单!', 'data' => null]; } //判断该用户是否被踢出过房间 $room_forbid_user = []; $room_forbid_user[] = ['type', '=', 3]; $room_forbid_user[] = ['uid', '=', $uid]; $room_forbid_user[] = ['rid', '=', $rid]; $room_forbid_user_info = db::name('room_forbid_user')->where($room_forbid_user)->find(); if($room_forbid_user_info){ if(time() < $room_forbid_user_info['over_time']){ return ['code' => 201, 'msg' => '你已被房主踢出房间暂时无法进入', 'data' => null]; } } //判断用户是否已在房间 $visitor_info = db::name('room_visitor')->where(['uid' => $uid,'rid'=>$rid, 'is_delete' => 1])->find(); if (empty($visitor_info)) { if ($room_info['is_need_password'] == 2 && $password != $room_info['room_password'] && $uid != $room_info['room_owner_uid']) { return ['code' => 202, 'msg' => '密码错误', 'data' => null]; } } //删除密码 unset($room_info['room_password']); $room_info['room_cover'] = localpath_to_netpath($room_info['room_cover']); $room_info['room_background_image'] = $this->get_room_background_info($room_info['room_background_id']); //判断该房间是否被收藏 $reslut = model('UserCollectRoom')->is_collect_room($uid, $rid); $room_info['is_collect'] = 1; //未收藏 if ($reslut['code'] == 200) { $room_info['is_collect'] = 2; //已收藏 } //房间欢迎语 $config = model('admin/Config')->get_system_config(); $room_info['room_welcome'] = $config['room_welcome']; $room_info['open_box_status'] = $config['open_box_status']; $room_info['open_silver_box_status'] = $config['is_show_dial']; $open_box_integral = $config['open_box_integral']; $room_info['is_calculator'] = $config['is_calculator']; $room_info['is_look_box'] = 2; //获取用户身份 $user_type = 5; //游客 $user_type_name = ''; $room_info['is_host'] = 2; if ($uid == $room_info['room_owner_uid']) { $user_type = 1; //厅主 $room_info['is_look_box'] = $room_info['is_look']; $user_type_name = '房'; } else if (in_array($uid, $room_admin_uid_arr)) { $user_type = 2; //管理员 $user_type_name = '管'; }else if(in_array($uid, $room_host_uid_arr)){ $user_type = 2; //管理员 $user_type_name = '主持'; } if(in_array($uid, $room_host_uid_arr)){ $room_info['is_host'] = 1; } $room_info['enter_user_type'] = $user_type; //是否有靓号房号 // if($room_info['is_pretty'] == 2){ // $room_info['pretty_room_number'] = $room_info['room_number']; // }else{ // $room_info['pretty_room_number'] = 0; // } //获取用户详情 $user_info = db::name('user')->field('uid,base64_nick_name,sex,integral,is_tester,add_time')->find($uid); $room_info['is_new'] = 2; $is_new_time = $user_info['add_time'] + (60*60*24*7); if(time() < $is_new_time){ $room_info['is_new'] = 1; } $map = []; $map[] = ['uid','=',$uid]; $user_money_log = db::name('user_contribution_count_day')->where($map)->sum('amount'); $user_charm_info = model('User')->get_user_charm_contribution_info($uid); $data = []; $data['uid'] = $user_info['uid']; $data['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['sex'] = $user_info['sex']; $data['charm_level_image'] = $user_charm_info['data']['charm_level_image']; $data['contribution_level_image'] = $user_charm_info['data']['contribution_level_image']; $data['user_type_name'] = $user_type_name; $data['is_new'] = $room_info['is_new']; $room_info['is_open_box'] = 0; if($user_info['is_tester'] == 1){ if($user_money_log >= $open_box_integral){ $room_info['is_open_box'] = 1; } }else{ $room_info['is_open_box'] = 1; } $xq_talent_time = 0; if(in_array($room_info['cate_id'],[36,37])){ $room_xq1_activity = db::name('room_xq1')->where(['rid'=>$rid,'is_delete'=>1])->order(['id'=>'desc'])->find(); if(!empty($room_xq1_activity)){ $xq_talent_time = $room_xq1_activity['end_time'] - time(); $xq_talent_time = ($xq_talent_time >0) ? $xq_talent_time:0; } } $room_info['xq_talent_time'] = $xq_talent_time; //获取房间游戏列表 // $map = []; // $map[] = ['gid', 'in', $room_info['game_list']]; // $map[] = ['is_delete', '=', 1]; // $map[] = ['is_show', '=', 1]; // $game_list = db::name('game')->field('gid,game_name')->where($map)->select(); // $room_info['game_list'] = $game_list; //声网信息 $room_info['agora_token'] = model('Agora')->agora_token_info($uid, $rid); $agora_app_id = $config['agora_app_id']; // $room_info['agora_app_id'] = substr($agora_app_id,10).substr($agora_app_id,0,10); $room_info['agora_app_id'] = $agora_app_id; $room_info['agora_rtm_token'] = model('Agora')->agora_rtm_token_info($uid); //推送进入房间信息 $push_data = []; $push_data['code'] = 300; $push_data['msg'] = "用户进入房间"; $push_data['data'] = $data; model('api/WebSocketPush')->send_to_group($rid, $push_data); unset($room_info['room_admin_uid']); unset($room_info['room_micro']); // $user_box_times = db::name('user_box_statics')->where(['uid'=>$uid,'box_date'=>date('Y-m-d')])->value('box_times'); // $room_info['user_box_times'] = $user_box_times; return ['code' => 200, 'msg' => '获取成功', 'data' => $room_info]; } //是否有在其他房间 public function is_visitor_room($uid, $rid){ $map = []; $map[] = ['uid', '=', $uid]; $map[] = ['rid', 'neq', $rid]; $map[] = ['is_delete', '=', 1]; $quit_room = Db::name('room_visitor')->where($map)->select(); if(!empty($quit_room)) { foreach ($quit_room as $k => $v){ model('room')->quit_room($uid, $v['rid']); $count = Db::name('room_visitor')->where('rid', $v['rid'])->where('is_delete', 1)->count(); $data = [ 'onilne_num' => $count, ]; $push_data = []; $push_data['code'] = 210; $push_data['msg'] = "用户退出房间"; $push_data['data'] = $data; $result = model('WebSocketPush')->send_to_group($v['rid'], $push_data); } } return true; } //获取进入房间用户特权 public function get_room_user_vip($uid, $rid) { $data = []; /* //获取用户头像 $map = []; $map[] = ['a.uid', '=', $uid]; $map[] = ['a.is_using', '=', 1]; $map[] = ['a.type', '=', 1]; $map[] = ['a.end_time', '>', time()]; $map[] = ['b.show_status', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $model = Db::name('user_decorate')->alias('a')->join('yy_decorate b', 'a.did = b.did'); $model = $model->where($map); $user_decorate_info = $model->order('udid desc')->find(); if (!empty($user_decorate_info)) { $data['tx_play_image'] = $user_decorate_info['play_image']; $data['tx_title'] = $user_decorate_info['title']; } else { $data['tx_play_image'] = ''; $data['tx_title'] = ''; } */ // 获取用户气泡 $map = []; $map[] = ['a.uid', '=', $uid]; $map[] = ['a.is_using', '=', 1]; $map[] = ['a.type', '=', 5]; $map[] = ['a.end_time', '>', time()]; $map[] = ['b.show_status', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $model = Db::name('user_decorate')->alias('a')->join('yy_decorate b', 'a.did = b.did'); $model = $model->where($map); $user_decorate_info = $model->order('udid desc')->find(); if (!empty($user_decorate_info)) { $data['qp_play_image'] = localpath_to_netpath($user_decorate_info['play_image']); $data['qp_base_image'] = localpath_to_netpath($user_decorate_info['base_image']); $data['qp_title'] = $user_decorate_info['title']; } else { $data['qp_play_image'] = ''; $data['qp_base_image'] = ''; $data['qp_title'] = ''; } //获取用户坐骑 $map = []; $map[] = ['a.uid', '=', $uid]; $map[] = ['a.is_using', '=', 1]; $map[] = ['a.type', '=', 2]; $map[] = ['a.end_time', '>', time()]; $map[] = ['b.show_status', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $model = Db::name('user_decorate')->alias('a')->join('yy_decorate b', 'a.did = b.did'); $model = $model->where($map); $user_decorate_info = $model->order('udid desc')->find(); if (!empty($user_decorate_info)) { $data['zq_play_image'] = localpath_to_netpath($user_decorate_info['play_image']); $data['zq_title'] = '驾驶' . $user_decorate_info['title'] . '进入房间'; } else { $data['zq_play_image'] = ''; $data['zq_title'] = ''; } //获取用户魅力等级 $user_info = db::name('user')->find($uid); $data['is_room_hiding'] = $user_info['is_room_hiding']; //查询7号麦是否隐身 $room_xq1_activity = db::name('room_xq1')->where(['rid'=>$rid,'is_delete'=>1])->order(['id'=>'desc'])->find(); $uid7 = 0; if(!empty($room_xq1_activity)){ if($room_xq1_activity['xq_uid_sm'] == 2){ //神秘人 $uid7 = db::name('room_micro')->where(['rid'=>$rid,'micro_id'=>7])->value('uid'); } } if($uid7 == $uid){ $data['is_room_hiding'] = 1; } $user_charm_info = model('User')->get_user_charm_contribution_info($user_info); $data['charm_level_image'] = $user_charm_info['data']['charm_level_image']; //获取用户财富等级 $data['contribution_level_image'] = $user_charm_info['data']['contribution_level_image']; $user_nobility_info = model('user')->get_user_nobility_info($uid); $data['nobility_image'] = $user_nobility_info['data']['nobility_image']; //获取当前用户cp $map = []; $map[] = ['uid|receive_uid', '=', $uid]; $map[] = ['is_delete', '=', 1]; $user_cp_info = db::name('user_coupling')->where($map)->find(); if(!empty($user_cp_info)){ if($uid == $user_cp_info['uid']){ $other_uid = $user_cp_info['receive_uid']; }else{ $other_uid = $user_cp_info['uid']; } $other_in_room = db::name('room_visitor')->where(['uid'=>$other_uid,'rid'=>$rid,'is_delete'=>1])->find(); if(!empty($other_in_room)){ //cp特效 $texiao_img = db::name('user_decorate') ->alias('ud') ->where(['ud.uid'=>$uid,'ud.type'=>9,'ud.is_using'=>1]) ->where('ud.end_time',">",time()) ->where(['d.is_delete'=>1,'d.show_status'=>1]) ->join('yy_decorate d','d.did = ud.did') ->value("play_image"); if(!empty($texiao_img)){ //获取两个头像框 $map = []; $map[] = ['a.uid', 'in', [$user_cp_info['uid'],$user_cp_info['receive_uid']]]; $map[] = ['a.is_using', '=', 1]; $map[] = ['a.end_time', '>', time()]; $map[] = ['a.type', '=', 1]; $map[] = ['b.show_status', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $model = Db::name('user_decorate')->alias('a')->join('yy_decorate b', 'a.did = b.did'); $user_decorate_list = $model->field('b.base_image,b.play_image,b.title,a.uid')->where($map)->select(); $user_decorate_list_data = []; foreach ($user_decorate_list as $k => $v) { $user_decorate_list_data[$v['uid']] = $v; } $data['cp_info']['texiao_img'] = localpath_to_netpath($texiao_img); $data['cp_info']['uid'] = $user_cp_info['uid']; $cp_user_info = db::name('user')->where('uid', $user_cp_info['uid'])->find(); $data['cp_info']['nick_name'] = mb_convert_encoding(base64_decode($cp_user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['cp_info']['head_pic'] = localpath_to_netpath($cp_user_info['head_pic']); if(!empty($user_decorate_list_data[$user_cp_info['uid']]['play_image'])){ $data['cp_info']['avatar_play_image'] = localpath_to_netpath($user_decorate_list_data[$user_cp_info['uid']]['play_image']); }else{ $data['cp_info']['avatar_play_image'] = ""; } $cp_receive_info = db::name('user')->where('uid', $user_cp_info['receive_uid'])->find(); $data['cp_info']['receive_uid'] = $user_cp_info['receive_uid']; $data['cp_info']['receive_nick_name'] = mb_convert_encoding(base64_decode($cp_receive_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['cp_info']['receive_head_pic'] = localpath_to_netpath($cp_receive_info['head_pic']); if(!empty($user_decorate_list_data[$user_cp_info['receive_uid']]['play_image'])){ $data['cp_info']['receive_avatar_play_image'] = localpath_to_netpath($user_decorate_list_data[$user_cp_info['receive_uid']]['play_image']); }else{ $data['cp_info']['receive_avatar_play_image'] = ""; } } } } if(empty($texiao_img)){ $data['cp_info']['texiao_img'] = ""; $data['cp_info']['uid'] = 0; $data['cp_info']['nick_name'] = ''; $data['cp_info']['head_pic'] = ''; $data['cp_info']['avatar_play_image'] = ''; $data['cp_info']['receive_uid'] = 0; $data['cp_info']['receive_nick_name'] = ''; $data['cp_info']['receive_head_pic'] = ''; $data['cp_info']['receive_avatar_play_image'] = ""; } // if($user_cp_info){ // $data['cp_info']['uid'] = $user_cp_info['uid']; // $cp_user_info = db::name('user')->where('uid', $user_cp_info['uid'])->find(); // $data['cp_info']['nick_name'] = mb_convert_encoding(base64_decode($cp_user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); // $data['cp_info']['head_pic'] = localpath_to_netpath($cp_user_info['head_pic']); // $cp_receive_info = db::name('user')->where('uid', $user_cp_info['receive_uid'])->find(); // $data['cp_info']['receive_uid'] = $user_cp_info['receive_uid']; // $data['cp_info']['receive_nick_name'] = mb_convert_encoding(base64_decode($cp_receive_info['base64_nick_name']), 'UTF-8', 'UTF-8'); // $data['cp_info']['receive_head_pic'] = localpath_to_netpath($cp_receive_info['head_pic']); // }else{ // $data['cp_info']['uid'] = 0; // $data['cp_info']['nick_name'] = ''; // $data['cp_info']['head_pic'] = ''; // $data['cp_info']['receive_uid'] = 0; // $data['cp_info']['receive_nick_name'] = ''; // $data['cp_info']['receive_head_pic'] = ''; // } return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //获取房间详情 public function get_room_info($rid) { $map = []; $map['is_delete'] = 1; $map['rid'] = $rid; $room_info = db::name('room')->field('rid,room_number,tid,cate_id,room_name,base64_room_name,room_cover,room_owner_uid,room_admin_uid,room_intro,room_background_id,room_micro,is_online,visitor_num,room_status,is_auto_accumulate,room_password,is_need_password')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } if ($room_info['room_status'] == 2) { return ['code' => 201, 'msg' => '房间已封禁', 'data' => null]; } if ($room_info['room_status'] == 3) { return ['code' => 201, 'msg' => '房间已关闭', 'data' => null]; } $room_info['room_name'] = mb_convert_encoding(base64_decode($room_info['base64_room_name']), 'UTF-8', 'UTF-8'); $room_info['room_cover'] = localpath_to_netpath($room_info['room_cover']); $room_info['room_background_image'] = $this->get_room_background_info($room_info['room_background_id']); //加工审核状态 审核备注信息 $room_info['apply_status'] = 0; $room_info['reamrks'] = ""; $room_apply = db::name('room_apply')->where(['rid'=>$rid])->order(['id'=>'desc'])->find(); if(!empty($room_apply)){ $room_info['apply_status'] = $room_apply['apply_status']; $room_info['reamrks'] = trim($room_apply['reamrks']); } return ['code' => 200, 'msg' => '获取成功', 'data' => $room_info]; } //礼物及背包礼物列表 public function get_gift_list($uid) { $map = []; $map[] = ['is_show', '=', 1]; // $map[] = ['is_can_buy', '=', 1]; $map[] = ['is_delete', '=', 1]; $gift_list = db::name('gift')->where($map)->field('gid,gift_type,gift_name,gift_price,base_image,play_image,is_public_screen,is_public_server,tag_name,sort')->order('sort desc')->select(); $map = []; $map[] = ['uid', '=', $uid]; $map[] = ['num', '>', 0]; $map[] = ['is_use_give', '=', 1]; $user_pack_gift_list = db::name('user_gift_pack')->field('gid,num')->where($map)->select(); $gift_data = []; foreach ($gift_list as $k => $v) { $v['play_image'] = localpath_to_netpath($v['play_image']); $v['base_image'] = localpath_to_netpath($v['base_image']); $gift_data[$v['gid']] = $v; } $user_pack_gift_total_price = 0; foreach ($user_pack_gift_list as $m => &$n) { $n['gift_name'] = $gift_data[$n['gid']]['gift_name']; $n['play_image'] = $gift_data[$n['gid']]['play_image']; $n['base_image'] = $gift_data[$n['gid']]['base_image']; $n['gift_price'] = $gift_data[$n['gid']]['gift_price']; $user_pack_gift_total_price += $n['gift_price'] * $n['num']; } $gift_list = array_values($gift_data); array_multisort(array_column($user_pack_gift_list, 'gift_price'), SORT_ASC, $user_pack_gift_list); //当前余额 $integral = db::name('user')->where(['uid' => $uid])->value('integral'); $blind_gid = [37,38,39]; $map = []; $map[] = ['is_show', '=', 1]; $map[] = ['is_can_buy', '=', 1]; $map[] = ['is_delete', '=', 1]; $map[] = ['gid', 'not in', $blind_gid]; $gift_list = db::name('gift')->where($map)->field('gid,gift_type,gift_name,gift_price,base_image,play_image,is_public_screen,is_public_server,tag_name,sort')->order('sort desc')->select(); $gift_data = []; foreach ($gift_list as $k => $v) { $v['play_image'] = localpath_to_netpath($v['play_image']); $v['base_image'] = localpath_to_netpath($v['base_image']); $gift_data[$v['gid']] = $v; } $gift_list = array_values($gift_data); $blind_box = []; $map = []; $map[] = ['is_show', '=', 1]; $map[] = ['is_can_buy', '=', 1]; $map[] = ['is_delete', '=', 1]; $map[] = ['gid', 'in', $blind_gid]; $blind_list = db::name('gift')->where($map)->field('gid,gift_type,gift_name,gift_price,base_image,play_image,is_public_screen,is_public_server,tag_name,sort')->order('sort desc')->select(); $gift_data = []; foreach ($blind_list as $k => $v) { $v['play_image'] = localpath_to_netpath($v['play_image']); $v['base_image'] = localpath_to_netpath($v['base_image']); $gift_data[$v['gid']] = $v; } $blind_box = array_values($gift_data); $arr = []; $arr['gift_list'] = $gift_list; //礼物列表 $arr['user_pack_gift_list'] = $user_pack_gift_list; //背包礼物列表 $arr['user_pack_gift_total_price'] = $user_pack_gift_total_price; //背包礼物总价值 $arr['integral'] = $integral; $arr['blind_box_list'] = $blind_box; return ['code' => 200, 'msg' => '获取成功', 'data' => $arr]; } public function get_category_list($tid) { $map = []; $map[] = ['tid', '=', $tid]; $map[] = ['is_delete', '=', 1]; // $map[] = ['cate_id', 'not in', [36,28,30,35]]; $list = db::name('room_category')->field('category_name,cate_id,tid')->where($map)->order('sort desc')->select(); return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } public function get_room_background_list($page, $page_limit) { $page = intval($page); $page_limit = $page_limit < 100 ? $page_limit : 100; $map = []; $map[] = ['status', '=', 1]; $map[] = ['is_delete', '=', 1]; $list = db::name('room_background')->field('bid,image_name,image_url')->where($map)->page($page, $page_limit)->order('bid desc')->select(); foreach ($list as $k => &$v) { $v['image_url'] = localpath_to_netpath($v['image_url']); } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //房间音乐列表 public function get_room_music_list($music_type, $page, $page_limit) { $page = intval($page); $page_limit = $page_limit < 30 ? $page_limit : 30; $map = []; if (empty($music_type)) { $map[] = ['music_type', '=', $music_type]; } $map[] = ['b.status', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $model = Db::name('user_music')->alias('a')->join('yy_music b', 'a.mid = b.mid'); $model = $model->where($map); $list = $model->field('b.mid,b.music_name,b.music_type,b.singer,b.music_url,b.music_size')->order('b.mid desc')->page($page, $page_limit)->select(); foreach ($list as $k => &$v) { $v['music_url'] = localpath_to_netpath($v['music_url']); } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //获取房间麦位详情 public function get_room_micro_info($rid) { $map = []; $map[] = ['rid', '=', $rid]; $room_info = Db::name('room')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '信息不存在', 'data' => null]; } $max_micro_num = 0; if ($room_info['cate_id'] == 26) {//新人 $max_micro_num = 1; $room_new_auction = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find(); } elseif ($room_info['cate_id'] == 27) {//K歌 $max_micro_num = 8; } elseif ($room_info['cate_id'] == 28) {//拍卖 $max_micro_num = 9; $room_auctions_info = db::name('room_auction_log')->where('rid', $rid)->where('is_delete', 1)->order('id', 'desc')->find(); } elseif ($room_info['cate_id'] == 29) {//交友 $max_micro_num = 7; } elseif (in_array($room_info['cate_id'],[36,37])) {//交友 $max_micro_num = 8; }elseif ($room_info['cate_id'] == 19){//酒吧 $max_micro_num = 7; } else {//常规房间 $max_micro_num = 9; } // $user_list_array = explode(',', $room_info['room_micro']); $user_list_array = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); $user_list_array[] = $room_info['room_owner_uid']; //厅主 // $room_info['room_host_uid'] = $room_info['room_owner_uid']; $user_list_array[] = $room_info['room_host_uid']; //普通厅主持位,相亲厅 主持位 $map = []; $map[] = ['uid', 'in', $user_list_array]; $user_list = db::name('user')->alias('a') ->leftJoin('nobility b', 'a.nobility_id = b.lid') ->field('a.uid,a.head_pic,a.base64_nick_name,a.charm_value,a.sex,a.add_time,a.nobility_id,b.nick_name_color') ->where($map)->select(); $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', 'in', $user_list_array]; $room_user_cc_list = db::name('room_user_cc')->where($map)->field('uid,charm_value')->select(); foreach ($user_list as $p => &$q) { if(empty($q['nick_name_color'])){ $q['nick_name_color'] = ''; } $q['charm_value'] = 0; foreach ($room_user_cc_list as $m => $n) { if ($q['uid'] == $n['uid']) { // dump($n); $q['charm_value'] = $n['charm_value']; //使用用户房间内魅力值 } } // dump($q); } // dump($room_user_cc_list); //获取用户禁言、禁音状态 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['over_time', '>', time()]; $room_forbid_user_list = Db::name('room_forbid_user')->field('type,uid,rid')->where($map)->select(); $room_forbid_user_micro_list = []; //用户禁音列表 $room_forbid_user_world_list = []; //用户禁言列表 $room_forbid_user_black_list = []; //用户黑名单列表 foreach ($room_forbid_user_list as $k => $v) { if ($v['type'] == 1) { $room_forbid_user_world_list[] = $v['uid']; } elseif ($v['type'] == 2) { $room_forbid_user_micro_list[] = $v['uid']; } elseif ($v['type'] == 3) { $room_forbid_user_black_list[] = $v['uid']; } } //获取用户头像框装扮 $map = []; $map[] = ['a.is_using', '=', 1]; $map[] = ['a.end_time', '>', time()]; $map[] = ['a.type', '=', 1]; $map[] = ['b.show_status', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $model = Db::name('user_decorate')->alias('a')->join('yy_decorate b', 'a.did = b.did'); $user_decorate_list = $model->field('b.base_image,b.play_image,b.title,a.uid')->where($map)->select(); $user_decorate_list_data = []; foreach ($user_decorate_list as $k => $v) { $user_decorate_list_data[$v['uid']] = $v; } $map = []; $map[] = ['a.is_using', '=', 1]; $map[] = ['a.end_time', '>', time()]; $map[] = ['a.type', '=', 4]; $map[] = ['b.show_status', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $model = Db::name('user_decorate')->alias('a')->join('yy_decorate b', 'a.did = b.did'); $user_decorate_list = $model->field('b.base_image,b.play_image,b.title,a.uid')->where($map)->select(); $user_decorate_micro_list_data = []; foreach ($user_decorate_list as $k => $v) { $user_decorate_micro_list_data[$v['uid']] = $v; } //相亲厅信息 $room_xq_stage = 1;//状态 1准备阶段 2才艺展示 3心动选择 $is_xq_uid_sm = 2; //2神秘人 $xq_talent_time = 0; if(in_array($room_info['cate_id'],[36,37])){ $room_xq1_activity = db::name('room_xq1')->where(['rid'=>$rid,'is_delete'=>1])->order(['id'=>'desc'])->find(); if(!empty($room_xq1_activity)){ $room_xq_stage = $room_xq1_activity['stage']; $is_xq_uid_sm = $room_xq1_activity['xq_uid_sm']; //2神秘 1展示 $xq_talent_time = $room_xq1_activity['end_time'] - time(); $xq_talent_time = ($xq_talent_time >0) ? $xq_talent_time:0; } } //拍卖厅信息 // $map = []; // $map[] = ['rid', '=', $rid]; // $map[] = ['status', '=', 2]; // $map[] = ['is_delete', '=', 1]; // $room_auction_info111 = db::name('room_auction_log')->where($map)->order('id desc')->find(); // if(!empty($room_auction_info111)){ // $raid = $room_auction_info111['id']; // $map = []; // $map[] = ['rid', '=', $rid]; // $map[] = ['raid', '=', $raid]; // $auction_log22 = db::name('user_room_auction_log')->where($map)->order('total_price desc')->limit(3)->column('auction_uid','total_price'); // // $user_auction_arr = db::name('user_room_auction_log')->where($map)->order('total_price desc')->limit(3)->column('auction_uid'); // } $user_list_data = []; foreach ($user_list_array as $m => $n) { $ls_data = []; if ($n == -1) { $ls_data['mc_status'] = 1; //锁麦 } elseif ($n == 0) { $ls_data['mc_status'] = 2; //麦上没人 } $ls_data['mc_user_info'] = []; $ls_data['mc_user_info']['uid'] = ''; foreach ($user_list as $k => &$v) { if ($n == $v['uid']) { $ls_data['mc_user_info']['uid'] = $v['uid']; $ls_data['mc_user_info']['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); $ls_data['mc_user_info']['head_pic'] = localpath_to_netpath($v['head_pic']); $ls_data['mc_user_info']['sex'] = $v['sex']; $ls_data['mc_user_info']['charm_value'] = $v['charm_value']; $ls_data['mc_user_info']['nick_name_color'] = $v['nick_name_color']; $ls_data['mc_user_info']['is_new'] = 2; $ls_data['mc_user_info']['auction_price'] = 0; // $ls_data['mc_user_info']['auction_price'] = 0; $is_new_time = $v['add_time'] + (60*60*24*7); if(time() < $is_new_time){ $ls_data['mc_user_info']['is_new'] = 1; } if($room_info['cate_id'] == 26 && !empty($room_new_auction)){ $ls_data['mc_user_info']['auction_price'] = (int)$room_new_auction['start_value']; } $ls_data['mc_user_info']['is_online'] = 2; if($v['uid'] == $room_info['room_host_uid']){ $ls_data['mc_user_info']['is_online'] = 1; } $user_micro_info = db::name('room_micro')->where('uid', $v['uid'])->where('rid', $rid)->find(); $ls_data['mc_user_info']['light_type'] = $user_micro_info['light_type']; $ls_data['mc_user_info']['is_spotlight'] = $user_micro_info['is_spotlight']; $ls_data['mc_user_info']['trac_line'] = $user_micro_info['trac_line']; //1已牵线 2未牵线 //男神 女神 并且是 7号麦 if(in_array($room_info['cate_id'],[36,37])){ //不是神秘人 if($user_micro_info['micro_id'] == 7){ $ls_data['mc_user_info']['xq_uid_sm'] = $is_xq_uid_sm; $ls_data['mc_user_info']['user_role'] = 1; //相亲人员 }else{ $ls_data['mc_user_info']['xq_uid_sm'] = 1; $ls_data['mc_user_info']['user_role'] = 2; //嘉宾 } } // if(!empty($user_micro_info)){ // $ls_data['mc_user_info']['is_online'] = $user_micro_info['is_online']; // } $is_enter_room = db::name('room_visitor')->where(['uid'=> $v['uid'],'rid'=>$rid])->find(); if(!empty($is_enter_room)){ $ls_data['mc_user_info']['is_online'] = 1; } $ls_data['mc_user_info']['is_forbid_micro'] = 1; //1不禁麦 2禁麦 if (in_array($v['uid'], $room_forbid_user_micro_list)) { $ls_data['mc_user_info']['is_forbid_micro'] = 2; //1不禁麦 2禁麦 } if (!empty($user_decorate_list_data[$v['uid']])) { $ls_data['mc_user_info']['avatar_play_image'] = localpath_to_netpath($user_decorate_list_data[$v['uid']]['play_image']); $ls_data['mc_user_info']['avatar_base_image'] = localpath_to_netpath($user_decorate_list_data[$v['uid']]['base_image']); } else { $ls_data['mc_user_info']['avatar_play_image'] = ''; $ls_data['mc_user_info']['avatar_base_image'] = ''; } if (!empty($user_decorate_micro_list_data[$v['uid']])) { $ls_data['mc_user_info']['micro_play_image'] = localpath_to_netpath($user_decorate_micro_list_data[$v['uid']]['play_image']); $ls_data['mc_user_info']['micro_base_image'] = localpath_to_netpath($user_decorate_micro_list_data[$v['uid']]['base_image']); } else { $ls_data['mc_user_info']['micro_play_image'] = ''; $ls_data['mc_user_info']['micro_base_image'] = ''; } //麦位贡献值 $ls_data['mc_user_info']['contribution_value'] = 0; $room_visitor = db::name('room_visitor')->where('rid', $rid)->where('uid', $v['uid'])->find(); if(!empty($room_visitor)){ $ls_data['mc_user_info']['contribution_value'] = $room_visitor['change_value']; } //竞拍价 $ls_data['mc_user_info']['user_auction_price'] = 0; if($room_info['cate_id'] == 28 && !empty($room_auctions_info)){ $user_auction_info = db::name('user_room_auction_log')->where('raid', $room_auctions_info['id'])->where('auction_uid', $v['uid'])->find(); if(!empty($user_auction_info)){ $ls_data['mc_user_info']['user_auction_price'] = intval($user_auction_info['total_price']); } } //点歌信息 $ls_data['mc_user_info']['song_name'] = ''; if($room_info['cate_id'] == 27){ $user_song_dot = db::name('agora_song_dot')->where('rid', $rid)->where('uid', $v['uid'])->where('is_delete', 1)->find(); if(!empty($user_song_dot)){ $ls_data['mc_user_info']['song_name'] = db::name('agora_song')->where('song_code', $user_song_dot['song_code'])->value('song_name'); } } //是否有相亲房信息 if($room_info['cate_id'] == 19 && in_array($m,[0,1,2,3,4,5])){ $map = []; $map[] = ['uid', '=', $v['uid']]; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $map[] = ['status', '=', 1]; $user_room_date_micro = db::name('room_date_micro')->where($map)->order('id desc')->find(); if(!empty($user_room_date_micro)){ $ls_data['mc_user_info']['micro_surplus_time'] = $user_room_date_micro['end_time'] - time(); if($ls_data['mc_user_info']['micro_surplus_time'] < 0){ $ls_data['mc_user_info']['micro_surplus_time'] = 0; } if(!empty($user_room_date_micro['wish_gid'])){ $ls_data['mc_user_info']['is_set_wish_gift'] = 1; $ls_data['mc_user_info']['wish_gift_name'] = $user_room_date_micro['wish_gift_name']; } } } //麦位礼物信息 $ls_data['mc_user_info']['frame_gid_image'] = ''; $ls_data['mc_user_info']['centre_gid_image'] = ''; $ls_data['mc_user_info']['above_gid_image'] = ''; $ls_data['mc_user_info']['below_gid_image'] = ''; $ls_data['mc_user_info']['left_gid_image'] = ''; $ls_data['mc_user_info']['right_gid_image'] = ''; $ls_data['mc_user_info']['frame_gid_images'] = ''; $ls_data['mc_user_info']['centre_gid_images'] = ''; $ls_data['mc_user_info']['above_gid_images'] = ''; $ls_data['mc_user_info']['below_gid_images'] = ''; $ls_data['mc_user_info']['left_gid_images'] = ''; $ls_data['mc_user_info']['right_gid_images'] = ''; if($v['uid'] == $room_info['room_host_uid']){ if(!empty($room_info['frame_gid'])){ $frame = db::name('gift')->where('gid', $room_info['frame_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['frame_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['frame_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($room_info['centre_gid'])){ $frame = db::name('gift')->where('gid', $room_info['centre_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['centre_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['centre_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($room_info['above_gid'])){ $frame = db::name('gift')->where('gid', $room_info['above_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['above_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['above_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($room_info['below_gid'])){ $frame = db::name('gift')->where('gid', $room_info['below_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['below_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['below_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($room_info['left_gid'])){ $frame = db::name('gift')->where('gid', $room_info['left_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['left_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['left_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($room_info['right_gid'])){ $frame = db::name('gift')->where('gid', $room_info['right_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['right_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['right_gid_images'] = localpath_to_netpath($frame['play_image']); } }else if(!empty($user_micro_info)){ if(!empty($user_micro_info['frame_gid'])){ $frame = db::name('gift')->where('gid', $user_micro_info['frame_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['frame_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['frame_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($user_micro_info['centre_gid'])){ $frame = db::name('gift')->where('gid', $user_micro_info['centre_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['centre_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['centre_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($user_micro_info['above_gid'])){ $frame = db::name('gift')->where('gid', $user_micro_info['above_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['above_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['above_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($user_micro_info['below_gid'])){ $frame = db::name('gift')->where('gid', $user_micro_info['below_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['below_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['below_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($user_micro_info['left_gid'])){ $frame = db::name('gift')->where('gid', $user_micro_info['left_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['left_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['left_gid_images'] = localpath_to_netpath($frame['play_image']); } if(!empty($user_micro_info['right_gid'])){ $frame = db::name('gift')->where('gid', $user_micro_info['right_gid'])->field('base_image,play_image')->find(); $ls_data['mc_user_info']['right_gid_image'] = localpath_to_netpath($frame['base_image']); $ls_data['mc_user_info']['right_gid_images'] = localpath_to_netpath($frame['play_image']); } } } } if ($ls_data['mc_user_info']['uid'] != "") { $ls_data['mc_status'] = 3; //麦上有人 } $user_list_data[] = $ls_data; if ($m >= $max_micro_num && $m != 12 && $m != 13) { unset($user_list_data[$m]); } } //新人厅竞拍状态 $room_new_auction_status = 2; if($room_info['cate_id'] == 26 && !empty($room_new_auction)){ $room_new_auction_status = 1; } //交友厅连线数值 $room_dating_stage = 1; $dating_surplus_time = 0; $room_micro_line_data = []; $room_micro_line_data['room_line_1']['is_line'] = 2; $room_micro_line_data['room_line_1']['rank_value'] = 0; $room_micro_line_data['room_line_2']['is_line'] = 2; $room_micro_line_data['room_line_2']['rank_value'] = 0; $room_micro_line_data['room_line_3']['is_line'] = 2; $room_micro_line_data['room_line_3']['rank_value'] = 0; if($room_info['cate_id'] == 29){ $room_dating_log = db::name('room_dating_log')->where('rid', $rid)->where('is_delete', 1)->find(); if(!empty($room_dating_log)){ $room_dating_stage = $room_dating_log['stage']; $dating_surplus_time = $room_dating_log['end_time'] - time(); if($dating_surplus_time < 0){ $dating_surplus_time = 0; } $room_micro_data = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); if($room_micro_data[0] != 0 && $room_micro_data[1] != 0){ $where = []; $where[] = ['pid', '=', $room_dating_log['id']]; $where[] = ['uid|receive_uid', '=', $room_micro_data[0]]; $where[] = ['uid|receive_uid', '=', $room_micro_data[1]]; $micro_line_info_1 = db::name('user_room_dating_line')->where($where)->find(); if(!empty($micro_line_info_1)){ $micro_line_1 = []; $micro_line_1['is_line'] = 1; $micro_line_1['rank_value'] = $micro_line_info_1['rank_value'] *10; }else{ $micro_line_1 = []; $micro_line_1['is_line'] = 2; $micro_line_1['rank_value'] = 0; } }else{ $micro_line_1 = []; $micro_line_1['is_line'] = 2; $micro_line_1['rank_value'] = 0; } $room_micro_line_data['room_line_1'] = $micro_line_1; if($room_micro_data[2] != 0 && $room_micro_data[3] != 0){ $where = []; $where[] = ['pid', '=', $room_dating_log['id']]; $where[] = ['uid|receive_uid', '=', $room_micro_data[2]]; $where[] = ['uid|receive_uid', '=', $room_micro_data[3]]; $micro_line_info_2 = db::name('user_room_dating_line')->where($where)->find(); if(!empty($micro_line_info_2)){ $micro_line_2 = []; $micro_line_2['is_line'] = 1; $micro_line_2['rank_value'] = $micro_line_info_2['rank_value'] * 10; }else{ $micro_line_2 = []; $micro_line_2['is_line'] = 2; $micro_line_2['rank_value'] = 0; } }else{ $micro_line_2 = []; $micro_line_2['is_line'] = 2; $micro_line_2['rank_value'] = 0; } $room_micro_line_data['room_line_2'] = $micro_line_2; if($room_micro_data[4] != 0 && $room_micro_data[5] != 0){ $where = []; $where[] = ['pid', '=', $room_dating_log['id']]; $where[] = ['uid|receive_uid', '=', $room_micro_data[4]]; $where[] = ['uid|receive_uid', '=', $room_micro_data[5]]; $micro_line_info_3 = db::name('user_room_dating_line')->where($where)->find(); if(!empty($micro_line_info_3)){ $micro_line_3 = []; $micro_line_3['is_line'] = 1; $micro_line_3['rank_value'] = $micro_line_info_3['rank_value'] * 10; }else{ $micro_line_3 = []; $micro_line_3['is_line'] = 2; $micro_line_3['rank_value'] = 0; } }else{ $micro_line_3 = []; $micro_line_3['is_line'] = 2; $micro_line_3['rank_value'] = 0; } $room_micro_line_data['room_line_3'] = $micro_line_3; } } //拍卖厅信息 $room_auction_stage = 1; $auction_surplus_time = 0; $room_auction_info = []; $room_auction_info['relation_id'] = 0; $room_auction_info['relation_name'] = ''; $room_auction_info['gid'] = 0; $room_auction_info['gift_name'] = ''; $room_auction_info['gift_img'] = ''; $room_auction_info['day'] = 0; if($room_info['cate_id'] == 28){ if(!empty($room_auctions_info)){ //拍卖剩余时间 $auction_surplus_time = $room_auctions_info['end_time'] - time(); if($auction_surplus_time < 0){ $auction_surplus_time = 0; } if(!empty($room_auctions_info['relation_id'])){ $room_auction_info['relation_id'] = $room_auctions_info['relation_id']; $room_auction_info['relation_name'] = db::name('relation')->where('id', $room_auctions_info['relation_id'])->value('name'); } if(!empty($room_auctions_info['gid'])){ $gift_info99 = db::name('gift')->where('gid', $room_auctions_info['gid'])->field('gid,base_image,gift_name')->find(); $room_auction_info['gid'] = $room_auctions_info['gid']; $room_auction_info['gift_name'] = $gift_info99['gift_name']; $room_auction_info['gift_img'] = localpath_to_netpath($gift_info99['base_image']); } if(!empty($room_auctions_info['day'])){ $room_auction_info['day'] = $room_auctions_info['day']; } $room_auction_stage = $room_auctions_info['status']; } } //K歌厅信息 $room_song_stage = 1;//状态 1未开启 2唱歌 3签约 $room_song_info = []; $room_song_info['is_user_auction'] = 2;//是否有人出价 1是2否 $room_song_info['is_producer'] = 2; //是否有制作人 1是2否 $room_song_info['surplus_time'] = 0; //剩余唱歌时间 $room_song_info['user_info']['uid'] = 0; //当前进行中的用户 $room_song_info['user_info']['head_pic'] = ''; $room_song_info['user_info']['auction_price'] = 0; $room_song_info['user_info']['charm_value'] = 0; $room_song_info['user_auction_info']['uid'] = 0;//当前出价用户信息 $room_song_info['user_auction_info']['nick_name'] = ''; $room_song_info['user_auction_info']['head_pic'] = ''; $room_song_info['user_auction_info']['auction_price'] = 0; $room_song_info['producer_info']['uid'] = 0;//当前进行中的用户制作人信息 $room_song_info['producer_info']['head_pic'] = ''; if($room_info['cate_id'] == 27){ //当前房间是否有开始中的 $room_song_auction_info = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find(); if($room_song_auction_info){ //当前用户进行状态 $room_song_user_log = db::name('room_song_user_log')->where('rsid', $room_song_auction_info['id'])->where('uid', $room_song_auction_info['uid'])->find(); if($room_song_user_log['status'] == 1){ $room_song_stage = 2; $room_song_info['surplus_time'] = $room_song_user_log['song_end_time'] - time(); }else if($room_song_user_log['status'] == 2){ $room_song_stage = 3; } //当前进行中的用户 $song_user_info = db::name('user')->where('uid', $room_song_auction_info['uid'])->field('uid,head_pic,social')->find(); $room_song_info['user_info']['uid'] = $room_song_auction_info['uid']; $room_song_info['user_info']['head_pic'] = localpath_to_netpath($song_user_info['head_pic']); if(!empty($song_user_info['social']) && $song_user_info['social'] > 0){ $room_song_info['user_info']['auction_price'] = (int)$song_user_info['social']; }else{ $room_song_info['user_info']['auction_price'] = 70; } $song_user_charm = db::name('room_user_cc')->where('rid', $rid)->where('uid', $room_song_auction_info['uid'])->field('uid,charm_value')->find(); if(!empty($song_user_charm)){ $room_song_info['user_info']['charm_value'] = $song_user_charm['charm_value']; } //当前用户是否有制作人 $user_producer_info = db::name('user_sign_contract')->where('sign_uid', $room_song_auction_info['uid'])->where('is_delete', 1)->find(); if($user_producer_info){ $room_song_info['is_producer'] = 1; $room_song_info['producer_info']['uid'] = $user_producer_info['uid'];//当前进行中的用户制作人信息 $producer_info = db::name('user')->where('uid', $user_producer_info['uid'])->field('uid,head_pic')->find(); $room_song_info['producer_info']['head_pic'] = localpath_to_netpath($producer_info['head_pic']); } //当前出价用户信息 $user_room_song_auction = db::name('user_room_song_auction')->where('rsid', $room_song_auction_info['id'])->where('uid', $room_song_auction_info['uid'])->order('price desc')->find(); if(!empty($user_room_song_auction)){ $room_song_info['is_user_auction'] = 1; $user_auction_info = db::name('user')->where('uid', $user_room_song_auction['auction_uid'])->field('uid,base64_nick_name,head_pic')->find(); $room_song_info['user_auction_info']['uid'] = $user_room_song_auction['uid']; $room_song_info['user_auction_info']['nick_name'] = mb_convert_encoding(base64_decode($user_auction_info['base64_nick_name']), 'UTF-8', 'UTF-8');; $room_song_info['user_auction_info']['head_pic'] = localpath_to_netpath($user_auction_info['head_pic']); $room_song_info['user_auction_info']['auction_price'] = (int)$user_room_song_auction['price']; } } } $data = []; $data['owner_info'] = $user_list_data[12]; $data['host_info'] = $user_list_data[13]; unset($user_list_data[12]); unset($user_list_data[13]); $data['mc_list'] = $user_list_data; $data['room_new_auction_status'] = $room_new_auction_status; $data['room_micro_line_data'] = $room_micro_line_data; $data['room_dating_stage'] = $room_dating_stage; $data['dating_surplus_time'] = $dating_surplus_time; $data['room_auction_status'] = $room_auction_stage; $data['room_auction_info'] = $room_auction_info; $data['auction_surplus_time'] = $auction_surplus_time; $data['room_song_status'] = $room_song_stage; $data['room_song_info'] = $room_song_info; //相亲厅 $data['room_xq_stage'] = $room_xq_stage; $data['xq_talent_time'] = $xq_talent_time; return ['code' => 200, 'msg' => 'success', 'data' => $data]; } public function push_room_micro_data($rid) { $push_data = []; $push_data['code'] = 301; $push_data['msg'] = "房间麦位信息"; $data = $this->get_room_micro_info($rid); $push_data['data'] = $data['data']; $a = model('api/WebSocketPush')->send_to_group($rid, $push_data); } //用户自主上麦 public function user_up_micro($uid, $rid, $micro_id, $type) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,cate_id,room_micro,room_owner_uid,room_host_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } if ($room_info['tid'] == 1 || $room_info['tid'] == 2) { return ['code' => 201, 'msg' => '该房间不能主动上麦', 'data' => null]; } $micro_id = (int) $micro_id; $micro_ids = $micro_id; $micro_id = $micro_id + 1; //该用户是否是改房间房主 // if($uid == $room_info['room_owner_uid']){ // return ['code' => 201, 'msg' => '房主不能在自己房间跳麦', 'data' => null]; // } //用户是否在其他麦上 $user_room_micro = db::name('room_micro')->where('rid', $rid)->where('uid', $uid)->find(); if($type == 1){ if(in_array($room_info['cate_id'], [26,27,28,29])){ if($room_info['cate_id'] == 27){ $activity_info = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find(); if(!empty($activity_info)){ return ['code' => 201, 'msg' => '活动进行中', 'data' => null]; } if(!empty($user_room_micro) && in_array($micro_id, [1,2,3,4])){ }else{ return ['code' => 201, 'msg' => '请申请上麦', 'data' => null]; } }else{ if($room_info['cate_id'] == 29){ $room_dating = db::name('room_dating_log')->where(['rid'=>$rid,'is_delete'=>1])->find(); if(!empty($room_dating)){ return ['code' => 201, 'msg' => '活动进行中,请申请上麦', 'data' => null]; } }else{ return ['code' => 201, 'msg' => '请申请上麦', 'data' => null]; } } }elseif(in_array($room_info['cate_id'], [36,37])){ $is_xqing = db::name('room_xq1')->where(['rid'=>$rid,'is_delete'=>1])->order('id','desc')->find(); if(!empty($is_xqing)){ return ['code' => 201, 'msg' => '请申请上麦', 'data' => null]; }else{ $room_micro = db::name('room_micro')->where([['rid','=',$rid],['uid','=',$uid],['micro_id','in',[1,2,3,4,5,6]]])->find(); if(empty($room_micro)){ return ['code' => 201, 'msg' => '请申请上麦', 'data' => null]; } } }else if($room_info['cate_id'] == 19 && ($micro_id != 7)){ //清除之前在麦状态 $map = []; $map[] = ['uid', '=', $uid]; $map[] = ['is_delete', '=', 1]; $update = []; $update['is_delete'] = 2; $update['update_time'] = time(); $info = db::name('room_date_micro')->where($map)->find(); if($info){ $reslut = db::name('room_date_micro')->where($map)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //生成用户在麦数据 $insert = []; $insert['user_id'] = $uid; $insert['type'] = 3; $insert['uid'] = $uid; $insert['rid'] = $rid; $insert['micro_id'] = $micro_ids; $insert['sustain_time'] = 5; $insert['add_time'] = time(); $insert['status'] = 1; $insert['end_time'] = time() + (5 * 60); $rdm_id = db::name('room_date_micro')->insertGetId($insert); if(!$rdm_id){ return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } //推送个人消息 // $push_user_up_micro_data = []; // $push_user_up_micro_data['id'] = $rdm_id; // $push_user_up_micro_data['uid'] = $uid; // $push_user_up_micro_data['rid'] = $rid; // $push_user_up_micro_data['micro_id'] = $micro_ids; // $push_user_up_micro_data['time'] = 5; // $push_data = []; // $push_data['code'] = 362; // $push_data['msg'] = "抱人上麦申请信息"; // $push_data['data'] = $push_user_up_micro_data; // model('api/WebSocketPush')->send_to_one($uid, $push_data); }else{ //是否在房间麦位 if(!$user_room_micro){ return ['code' => 201, 'msg' => '请申请上麦', 'data' => null]; } } } $max_micro_num = 0; if ($room_info['cate_id'] == 26) {//新人 $max_micro_num = 1; } elseif ($room_info['cate_id'] == 27) {//K歌 $max_micro_num = 8; } elseif ($room_info['cate_id'] == 28) {//拍卖 $max_micro_num = 9; } elseif ($room_info['cate_id'] == 29) {//交友 $max_micro_num = 7; } elseif ($room_info['cate_id'] == 19) {//酒吧 $max_micro_num = 7; } else {//常规房间 $max_micro_num = 9; } if ($micro_id > $max_micro_num) { return ['code' => 201, 'msg' => '麦位不存在', 'data' => null]; } // $room_micro_array = explode(',', $room_info['room_micro']); $room_micro_array = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); if ($room_micro_array[$micro_ids] == -1) { return ['code' => 201, 'msg' => '麦位已锁定', 'data' => null]; } if ($room_micro_array[$micro_ids] != 0) { return ['code' => 201, 'msg' => '麦位已被占用', 'data' => null]; } Db::startTrans(); try { if($user_room_micro){ if($user_room_micro['micro_id'] == $micro_id){ return ['code' => 201, 'msg' => '你已在该麦位上', 'data' => null]; } if(!in_array($room_info['cate_id'],[27,28])){ $reslut = db::name('room_micro')->where('id', $user_room_micro['id'])->update(['uid' => 0, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '上麦失败', 'data' => null]; } }else{ if(!in_array($user_room_micro['micro_id'], [5,6,7,8])){ $reslut = db::name('room_micro')->where('id', $user_room_micro['id'])->update(['uid' => 0, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '上麦失败', 'data' => null]; } } } } //上麦 $reslut = db::name('room_micro')->where('rid', $rid)->where('micro_id', $micro_id) ->update(['uid' => $uid, 'is_online' => 1, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '上麦失败', 'data' => null]; } //是否是主持 if($room_info['room_host_uid'] == $uid){ $reslut = db::name('room')->where('rid', $rid)->update(['room_host_uid' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '上麦失败', 'data' => null]; } } Db::commit(); $this->push_room_micro_data($rid); return ['code' => 200, 'msg' => '上麦成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '上麦失败', 'data' => null]; } } //用户下麦 public function user_down_micro($uid, $rid, $type = 1, $micro_id = -1) { $micro_id = (int) $micro_id; $micro_id = $micro_id + 1; $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,cate_id')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } $map = []; $map[] = ['rid', '=', $rid]; if($micro_id > 0){ $map[] = ['micro_id', '=', $micro_id]; } $room_micro_array = db::name('room_micro')->where($map)->order('micro_id asc')->column('uid'); if (!in_array($uid, $room_micro_array)) { return ['code' => 201, 'msg' => '您已下麦', 'data' => null]; } Db::startTrans(); try { $is_down = 1; if($room_info['cate_id'] == 26 && $type == 1){ $info = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find(); if(!empty($info) && $uid == $info['uid']){ $is_down = 2; } } //用户所属麦位id $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $uid]; if($micro_id > 0){ $map[] = ['micro_id', '=', $micro_id]; } $user_micro_id = db::name('room_micro')->where($map)->order('micro_id','asc')->value('micro_id'); if($room_info['cate_id'] == 27){ $activity_info = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find(); if(!empty($activity_info)){ $uid_array = explode(',', trim($activity_info['uid_array'], ',')); if(in_array($uid, $uid_array)){ return ['code' => 201, 'msg' => '活动进行中,无法下麦', 'data' => null]; } } if(in_array($user_micro_id, [5,6,7,8])){ return ['code' => 201, 'msg' => '老板麦位用户无法下麦', 'data' => null]; } } if($room_info['cate_id'] == 28){ $activity_info = db::name('room_auction_log')->where('rid', $rid)->where('status', 2)->where('is_delete', 1)->find(); if(!empty($activity_info) && $uid == $activity_info['uid']){ return ['code' => 201, 'msg' => '拍卖进行中,无法下麦', 'data' => null]; } if(in_array($user_micro_id,[2,3,4])){ return ['code' => 201, 'msg' => '竞拍麦位用户无法下麦', 'data' => null]; } if(in_array($user_micro_id, [5,6,7,8])){ return ['code' => 201, 'msg' => '老板麦位用户无法下麦', 'data' => null]; } } if($room_info['cate_id'] == 29){ $activity_info = db::name('room_dating_log')->where('rid', $rid)->where('is_delete', 1)->find(); if(!empty($activity_info)){ $uid_array = explode(',', trim($activity_info['participate_uid'], ',')); if(in_array($uid, $uid_array)){ return ['code' => 201, 'msg' => '玩法进行中,无法下麦', 'data' => null]; } } } //男神 女神 if(in_array($room_info['cate_id'],[36,37])){ $is_xqing = db::name('room_xq1')->where(['rid'=>$rid,'is_delete'=>1])->find(); if(!empty($is_xqing)){ return ['code' => 201, 'msg' => '活动进行中,无法下麦', 'data' => null]; } } if($is_down == 2){ return ['code' => 201, 'msg' => '当前无法下麦', 'data' => null]; }else{ $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $uid]; if($micro_id > 0){ $map[] = ['micro_id', '=', $micro_id]; } $reslut = db::name('room_micro')->where($map)->update(['uid' => 0, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid' => 0, 'right_gid' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '下麦失败2', 'data' => null]; } if($room_info['cate_id'] == 28){ $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $uid]; $map[] = ['is_delete', '=', 1]; $info = db::name('room_auction_log')->where($map)->find(); if(!empty($info)){ $reslut = db::name('room_auction_log')->where('id', $info['id'])->update(['is_delete' => 2, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '下麦失败2', 'data' => null]; } } } } Db::commit(); $this->push_room_micro_data($rid); return ['code' => 200, 'msg' => '下麦成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '下麦失败', 'data' => null]; } } //主持自主上麦 public function host_up_micro($uid, $rid) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid,room_host_uid,room_status,cate_id')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); // dump($room_host_uid_arr);exit; // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_host_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if ($room_info['room_host_uid'] != 0) { return ['code' => 201, 'msg' => '麦位暂无法使用', 'data' => null]; } Db::startTrans(); try { //该用户是否在其他麦位 $user_room_micro = db::name('room_micro')->where('rid', $rid)->where('uid', $uid)->find(); if($user_room_micro){ if($room_info['cate_id'] == 28 && in_array($user_room_micro['micro_id'], [2,3,4])){ return ['code' => 201, 'msg' => '您已在竞拍麦上,无法上主持麦', 'data' => null]; } if($room_info['cate_id'] == 27 && in_array($user_room_micro['micro_id'], [1,2,3,4])){ return ['code' => 201, 'msg' => '您已在K歌麦上,无法上主持麦', 'data' => null]; } if($room_info['cate_id'] == 29 && in_array($user_room_micro['micro_id'], [1,2,3,4,5,6])){ return ['code' => 201, 'msg' => '您已在交友麦上,无法上主持麦', 'data' => null]; } if(!in_array($room_info['cate_id'], [27,28])){ $reslut = db::name('room_micro')->where('id', $user_room_micro['id'])->update(['uid' => 0, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '上麦失败', 'data' => null]; } }else{ if(!in_array($user_room_micro['micro_id'], [5,6,7,8])){ $reslut = db::name('room_micro')->where('id', $user_room_micro['id'])->update(['uid' => 0, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '上麦失败', 'data' => null]; } } } } $data = []; $data['rid'] = $rid; $data['room_host_uid'] = $uid; $data['update_time'] = time(); if($room_info['room_status'] == 3){ $data['room_status'] = 1; } $data['down_up_time'] = 0; $reslut = db::name('room')->update($data); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '上麦失败', 'data' => null]; } model('Statistics')->room_host_online_time($uid, $rid, 1); Db::commit(); $this->push_room_micro_data($rid); return ['code' => 200, 'msg' => '上麦成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '上麦失败', 'data' => null]; } } //主持自主下麦 public function host_down_micro($uid, $rid) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid,room_host_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_host_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } $data = []; $data['rid'] = $rid; $data['room_host_uid'] = 0; $data['frame_gid'] = 0; $data['centre_gid'] = 0; $data['above_gid'] = 0; $data['below_gid'] = 0; $data['left_gid'] = 0; $data['right_gid'] = 0; $data['update_time'] = time(); $data['down_up_time'] = time(); $reslut = db::name('room')->update($data); if ($reslut) { //推送麦位信息 $this->push_room_micro_data($rid); model('Statistics')->room_host_online_time($uid, $rid, 2); return ['code' => 200, 'msg' => '下麦成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '下麦失败', 'data' => null]; } } //管理员 自主抱人上麦 public function room_owner_up_micro($uid, $up_uid, $rid, $micro_id, $time) { $map = []; $map['rid'] = $rid; $map['is_delete'] = 1; $room_info = db::name('room')->field('rid,tid,cate_id,room_micro,room_owner_uid,room_host_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } $micro_id = (int) $micro_id; $micro_ids = $micro_id; $micro_id = $micro_id + 1; $max_micro_num = 0; $up_user_info = db::name('user')->field('uid,add_time,sex')->find($up_uid); if(in_array($room_info['cate_id'],[36,37])){ $sex = $up_user_info['sex']; //男神厅 if($room_info['cate_id']==36){ if($sex==1){ if(!in_array($micro_id,[7,8])){ return ['code' => 201, 'msg' => '请上指定性别麦位!', 'data' => null]; } }else{ if(!in_array($micro_id,[1,2,3,4,5,6,8])){ return ['code' => 201, 'msg' => '请上指定性别麦位!', 'data' => null]; } } } //女神厅 if($room_info['cate_id']==37){ if($sex==1){ if(!in_array($micro_id,[1,2,3,4,5,6,8])){ return ['code' => 201, 'msg' => '请上指定性别麦位!', 'data' => null]; } }else{ if(!in_array($micro_id,[7,8])){ return ['code' => 201, 'msg' => '请上指定性别麦位!', 'data' => null]; } } } } if ($room_info['cate_id'] == 26) {//新人 $max_micro_num = 1; //该用户是否是新人 $is_new_time = $up_user_info['add_time'] + (60*60*24*7); if(time() > $is_new_time){ return ['code' => 201, 'msg' => '该用户不是新人无法被抱上麦', 'data' => null]; } //该用户是否已被签约 $map = []; $map[] = ['sign_uid', '=', $up_uid]; $map[] = ['is_delete', '=', 1]; $user_contract = db::name('user_sign_contract')->where($map)->find(); if($user_contract){ return ['code' => 201, 'msg' => '该用户已签约过,无法被抱上麦', 'data' => null]; } } elseif ($room_info['cate_id'] == 27) {//K歌 $max_micro_num = 8; if(in_array($micro_id, [5,6,7,8])){ return ['code' => 201, 'msg' => '老板麦无法抱人上麦', 'data' => null]; } } elseif ($room_info['cate_id'] == 28) {//拍卖 $max_micro_num = 9; if(in_array($micro_id, [2,3,4,5,6,7])){ return ['code' => 201, 'msg' => '竞拍位无法抱人上麦', 'data' => null]; } // if(in_array($micro_id, [5,6,7,8])){ // return ['code' => 201, 'msg' => '老板麦无法抱人上麦', 'data' => null]; // } } elseif ($room_info['cate_id'] == 29) {//交友 $max_micro_num = 7; } elseif(in_array($room_info['cate_id'],[36,37])){ $max_micro_num = 8; } elseif ($room_info['cate_id'] == 19) {//酒吧 $max_micro_num = 7; } else {//常规房间 $max_micro_num = 9; } if ($micro_id > $max_micro_num) { return ['code' => 201, 'msg' => '麦位不存在', 'data' => null]; } $room_micro_array = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); $user_room_micro = db::name('room_micro')->where('rid', $rid)->where('uid', $up_uid)->find(); if ($room_micro_array[$micro_ids] == -1) { return ['code' => 201, 'msg' => '麦位已锁定', 'data' => null]; } if ($room_micro_array[$micro_ids] != 0) { return ['code' => 201, 'msg' => '麦位已被占用', 'data' => null]; } if(in_array($room_info['cate_id'], [27,28])){ if(!empty($user_room_micro)){ if(in_array($user_room_micro['micro_id'], [1,2,3,4,9]) || $up_uid == $room_info['room_host_uid']){ return ['code' => 201, 'msg' => '该用户已在麦位', 'data' => null]; } } }else{ if (in_array($up_uid, $room_micro_array) || $up_uid == $room_info['room_host_uid']) { return ['code' => 201, 'msg' => '该用户已在麦位', 'data' => null]; } } //判断用户是否在房间 $reslut = model('RoomVisitor')->user_is_in_room($up_uid, $rid); if ($reslut['code'] != 200) { return ['code' => $reslut['code'], 'msg' => $reslut['msg'], 'data' => null]; } Db::startTrans(); try { if($room_info['cate_id'] == 29){ $room_dating_log = db::name('room_dating_log')->where('rid', $rid)->where('is_delete', 1)->find(); if($room_dating_log && in_array($micro_ids, [0,1,2,3,4,5])){ return ['code' => 201, 'msg' => '当前心动连线已开始无法拉人上麦', 'data' => null]; } $is_path = db::name('room_privacy')->whereRaw('FIND_IN_SET('.$up_uid.',uid_data)')->field('prid')->find(); if(!empty($is_path)){ return ['code' => 201, 'msg' => '该用户正在私密小屋,无法上麦', 'data' => null]; } } if($room_info['cate_id'] == 27){ $activity_info = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find(); if(!empty($activity_info)){ $uid_array = explode(',', trim($activity_info['uid_array'], ',')); if(!in_array($uid, $uid_array)){ return ['code' => 201, 'msg' => '活动进行中,无法抱人上麦', 'data' => null]; } } } if($room_info['cate_id'] == 26){ //推送邀请用户上麦 $insert = []; $insert['rid'] = $rid; $insert['user_id'] = $uid; $insert['uid'] = $up_uid; $insert['add_time'] = time(); $insert['end_time'] = time() + 30; $reslut = db::name('room_admin_up_micro_log')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } }else if($room_info['cate_id'] == 19 && ($micro_id != 7)){ if($time < 1){ return ['code' => 201, 'msg' => '时间不能小于1', 'data' => null]; } if(ceil($time) != $time){ return ['code' => 201, 'msg' => '时间必须为整数', 'data' => null]; } //清除之前在麦状态 $map = []; $map[] = ['uid', '=', $up_uid]; $map[] = ['is_delete', '=', 1]; $update = []; $update['is_delete'] = 2; $update['update_time'] = time(); $info = db::name('room_date_micro')->where($map)->find(); if($info){ $reslut = db::name('room_date_micro')->where($map)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //生成用户在麦数据 $insert = []; $insert['user_id'] = $uid; $insert['type'] = 2; $insert['uid'] = $up_uid; $insert['rid'] = $rid; $insert['micro_id'] = $micro_ids; $insert['sustain_time'] = $time; $insert['add_time'] = time(); $insert['status'] = 2; $rdm_id = db::name('room_date_micro')->insertGetId($insert); if(!$rdm_id){ return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } }else{ $reslut = db::name('room_micro')->where('rid', $rid)->where('micro_id', $micro_id)->update(['uid' => $up_uid, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time(),'light_type'=>0,'is_spotlight'=>2,'trac_line'=>2]); if (!$reslut) { Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } if($room_info['cate_id'] == 28 && $micro_id == 1){ //清除之前拍卖信息 $infos = db::name('room_auction_log')->where('rid', $rid)->where('is_delete', 1)->find(); if(!empty($infos)){ db::name('room_auction_log')->where('rid', $rid)->where('is_delete', 1)->update(['is_delete' => 2, 'update_time' => time()]); } //用户上拍卖麦位添加拍卖信息 // $paimai_long_time = get_uncache_system_config('paimai_long_time'); $insert = []; $insert['rid'] = $rid; $insert['uid'] = $up_uid; $insert['add_time'] = time(); // $insert['paimai_long_time'] = $paimai_long_time; $reslut = db::name('room_auction_log')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //男神位 女神位 if(in_array($room_info['cate_id'],[36,37])){ $xq_room_info = db::name('room_xq1')->where(['rid'=>$rid,'is_delete'=>1])->find(); if(!empty($xq_room_info) && ($micro_id == 7)){ db::name('room_xq1')->where(['id'=>$xq_room_info['id']])->update(['xq_uid'=>$up_uid,'update_time'=>time()]); } } } model('RoomApplyMicro')->quit_user_room_micro_aisle($up_uid,$rid); Db::commit(); if($room_info['cate_id'] == 26){ $push_user_data = []; $push_user_data['uid'] = $up_uid; $push_user_data['rid'] = $rid; $push_user_data['micro_id'] = $micro_id - 1; $push_user_data['surplus_time'] = 30; $push_data = []; $push_data['code'] = 601; $push_data['msg'] = "邀请上麦推送"; $push_data['data'] = $push_user_data; model('api/WebSocketPush')->send_to_one($up_uid, $push_data); }else if($room_info['cate_id'] == 19 && ($micro_id != 7)){ //推送个人消息 $push_user_up_micro_data = []; $push_user_up_micro_data['id'] = $rdm_id; $push_user_up_micro_data['uid'] = $up_uid; $push_user_up_micro_data['rid'] = $rid; $push_user_up_micro_data['micro_id'] = $micro_ids; $push_user_up_micro_data['time'] = $time; $push_data = []; $push_data['code'] = 362; $push_data['msg'] = "抱人上麦申请信息"; $push_data['data'] = $push_user_up_micro_data; model('api/WebSocketPush')->send_to_one($up_uid, $push_data); }else{ //推送麦位信息 $this->push_room_micro_data($rid); } return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //同意、拒绝被抱上麦 public function user_agree_up_micro($uid, $rid, $micro_id, $type){ $user_info = db::name('user')->field('uid')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } if($type == 2){//拒绝 return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } $map = []; $map['rid'] = $rid; $map['is_delete'] = 1; $room_info = db::name('room')->field('rid,tid,cate_id,room_micro,room_owner_uid,room_host_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } $micro_id = (int) $micro_id; $micro_ids = $micro_id; $micro_id = $micro_id + 1; $max_micro_num = 0; if ($room_info['cate_id'] == 26) {//新人 $max_micro_num = 1; } elseif ($room_info['cate_id'] == 27) {//K歌 $max_micro_num = 8; } elseif ($room_info['cate_id'] == 28) {//拍卖 $max_micro_num = 9; } elseif ($room_info['cate_id'] == 29) {//交友 $max_micro_num = 7; } elseif ($room_info['cate_id'] == 19) {//交友 $max_micro_num = 7; } else {//常规房间 $max_micro_num = 9; } if ($micro_id > $max_micro_num) { return ['code' => 201, 'msg' => '麦位不存在', 'data' => null]; } $room_micro_array = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); if ($room_micro_array[$micro_ids] == -1) { return ['code' => 201, 'msg' => '麦位已锁定', 'data' => null]; } if ($room_micro_array[$micro_ids] != 0) { return ['code' => 201, 'msg' => '麦位已被占用', 'data' => null]; } if (in_array($uid, $room_micro_array) || $uid == $room_info['room_host_uid']) { return ['code' => 201, 'msg' => '您已在麦位', 'data' => null]; } // dump($micro_id); //上麦 $reslut = db::name('room_micro')->where('rid', $rid)->where('micro_id', $micro_id)->update(['uid' => $uid, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time()]); if ($reslut) { //推送麦位信息 $this->push_room_micro_data($rid); return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //同意、拒绝被抱上麦 public function operate_room_owner_up_micro($uid, $id, $rid, $micro_id, $type){ $user_info = db::name('user')->field('uid')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $map = []; $map[] = ['id', '=', $id]; $map[] = ['uid', '=', $uid]; $map[] = ['rid', '=', $rid]; $map[] = ['micro_id', '=', $micro_id]; $room_date_micro_info = db::name('room_date_micro')->where($map)->find(); if(!$room_date_micro_info){ return ['code' => 201, 'msg' => '该邀请上麦信息不存在', 'data' => null]; } $room_info = db::name('room')->where('rid', $rid)->find(); if(!$room_info){ return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null]; } // $micro_id = (int) $micro_id; // $micro_ids = $micro_id - 1; $micro_id = (int) $micro_id; $micro_ids = $micro_id; $micro_id = $micro_id + 1; // Db::startTrans(); try { if($type == 1){//同意 $update = []; $update['status'] = 1; $update['end_time'] = time() + ($room_date_micro_info['sustain_time'] * 60); $update['update_time'] = time(); $reslut = db::name('room_date_micro')->where('id', $id)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } //上麦 // $room_micro_array = explode(',', $room_info['room_micro']); $room_micro_array = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); if ($room_micro_array[$micro_ids] == -1) { return ['code' => 201, 'msg' => '麦位已锁定', 'data' => null]; } if ($room_micro_array[$micro_ids] != 0) { return ['code' => 201, 'msg' => '麦位已被占用', 'data' => null]; } if (in_array($uid, $room_micro_array) || $uid == $room_info['room_host_uid']) { return ['code' => 201, 'msg' => '你已在麦位上', 'data' => null]; } //上麦 $reslut = db::name('room_micro')->where('rid', $rid)->where('micro_id', $micro_id)->update(['uid' => $uid, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } }else if($type == 2){//拒绝 $update = []; $update['status'] = 3; $update['update_time'] = time(); $update['is_delete'] = 2; $reslut = db::name('room_date_micro')->where('id', $id)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } Db::commit(); $this->push_room_micro_data($rid); return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //管理强制 下麦 public function room_owner_down_micro($uid, $down_uid, $rid, $micro_id = -1) { $micro_id = (int) $micro_id; $micro_id = $micro_id + 1; $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid,cate_id,room_host_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if($down_uid == $room_info['room_host_uid'] && $uid != $room_info['room_owner_uid']){ return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } $map = []; $map[] = ['rid', '=', $rid]; if($micro_id > 0){ $map[] = ['micro_id', '=', $micro_id]; } $room_micro_array = db::name('room_micro')->where($map)->order('micro_id asc')->column('uid'); if (!in_array($down_uid, $room_micro_array) && $room_info['room_host_uid'] != $down_uid) { return ['code' => 201, 'msg' => '该用户已不在麦位', 'data' => null]; } if ($uid == $down_uid) { return ['code' => 201, 'msg' => '不能设置自己下麦', 'data' => null]; } if($down_uid == $room_info['room_host_uid']){ $data = []; $data['rid'] = $rid; $data['room_host_uid'] = 0; $data['frame_gid'] = 0; $data['centre_gid'] = 0; $data['above_gid'] = 0; $data['below_gid'] = 0; $data['left_gid'] = 0; $data['right_gid'] = 0; $data['update_time'] = time(); $data['down_up_time'] = time(); $reslut = db::name('room')->update($data); if ($reslut) { //推送麦位信息 $this->push_room_micro_data($rid); return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //当前用户所在麦位 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $down_uid]; if($micro_id > 0){ $map[] = ['micro_id', '=', $micro_id]; } $user_micro_id = db::name('room_micro')->where($map)->order('micro_id asc')->value('micro_id'); //进行中无法下麦 if($room_info['cate_id'] == 26){ $activity_info = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find(); if(!empty($activity_info) && $down_uid == $activity_info['uid']){ return ['code' => 201, 'msg' => '拍卖进行中,无法抱下麦', 'data' => null]; } } if($room_info['cate_id'] == 27){ $activity_info = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find(); if(!empty($activity_info)){ $uid_array = explode(',', trim($activity_info['uid_array'], ',')); if(!in_array($down_uid, $uid_array)){ return ['code' => 201, 'msg' => '活动进行中,无法抱下麦', 'data' => null]; } } if(in_array($user_micro_id, [5,6,7,8])){ return ['code' => 201, 'msg' => '老板麦位用户无法抱下麦', 'data' => null]; } } if($room_info['cate_id'] == 28){ $activity_info = db::name('room_auction_log')->where('rid', $rid)->where('status', 2)->where('is_delete', 1)->find(); if(!empty($activity_info) && $down_uid == $activity_info['uid']){ return ['code' => 201, 'msg' => '拍卖进行中,无法抱下麦', 'data' => null]; } if(in_array($user_micro_id,[2,3,4,5,6,7])){ return ['code' => 201, 'msg' => '竞拍麦位用户无法抱下麦', 'data' => null]; } // if(in_array($user_micro_id, [5,6,7,8])){ // return ['code' => 201, 'msg' => '老板麦位用户无法抱下麦', 'data' => null]; // } } if($room_info['cate_id'] == 29){ $activity_info = db::name('room_dating_log')->where('rid', $rid)->where('is_delete', 1)->find(); if(!empty($activity_info)){ $uid_array = explode(',', trim($activity_info['participate_uid'], ',')); if(in_array($down_uid, $uid_array)){ return ['code' => 201, 'msg' => '玩法进行中,无法抱下麦', 'data' => null]; } } } //男神位 女神位 if(in_array($room_info['cate_id'],[36,37])){ $xq_room_info = db::name('room_xq1')->where(['rid'=>$rid,'is_delete'=>1])->find(); if(!empty($xq_room_info)){ $xq_microinfo = db::name('room_micro')->where(['rid'=>$rid,'micro_id'=>7,'uid'=>$down_uid])->find(); if(!empty($xq_microinfo)){ db::name('room_xq1')->where(['id'=>$xq_room_info['id']])->update(['xq_uid'=>0,'update_time'=>time()]); } } } $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $down_uid]; if($micro_id > 0){ $map[] = ['micro_id', '=', $micro_id]; } $reslut = db::name('room_micro')->where($map)->update(['uid' => 0, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid' => 0, 'right_gid' => 0, 'update_time' => time(),'light_type'=>0,'is_spotlight'=>2,'trac_line'=>2]); if ($reslut) { //推送麦位信息 $this->push_room_micro_data($rid); return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //设置管理员 public function set_room_admin($uid, $rid, $room_admin_uid) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } if ($uid != $room_info['room_owner_uid']) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if ($uid == $room_admin_uid) { return ['code' => 201, 'msg' => '不能设置自己为管理员', 'data' => null]; } //是否已被添加为管理员 $user_room_admin_info = db::name('room_admin')->where('rid', $rid)->where('uid', $room_admin_uid)->where('is_delete', 1)->find(); if($user_room_admin_info){ return ['code' => 201, 'msg' => '该用户已经是本房间管理', 'data' => null]; } $insert = []; $insert['rid'] = $rid; $insert['uid'] = $room_admin_uid; $insert['add_time'] = time(); $reslut = db::name('room_admin')->insert($insert); if ($reslut) { //推送麦位信息 $this->push_room_micro_data($rid); return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //取消管理员 public function unset_room_admin($uid, $rid, $room_admin_uid) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } if ($uid != $room_info['room_owner_uid']) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if ($uid == $room_admin_uid) { return ['code' => 201, 'msg' => '不能设置自己为管理员', 'data' => null]; } //该用户是否是管理 $user_room_admin_info = db::name('room_admin')->where('rid', $rid)->where('uid', $room_admin_uid)->where('is_delete', 1)->find(); if(!$user_room_admin_info){ return ['code' => 201, 'msg' => '该用户不是本房间管理', 'data' => null]; } $reslut = db::name('room_admin')->where('id', $user_room_admin_info['id'])->update(['is_delete' => 2, 'update_time' => time()]); if ($reslut) { //推送麦位信息 $this->push_room_micro_data($rid); return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //获取房间魅力排行榜 public function get_room_rank($rid, $time, $type, $uid) { //用户是否是房主或者管理员 $map = []; $map[] = ['rid', '=', $rid]; $room_info = db::name('room')->where($map)->find(); if(!$room_info){ return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',',$room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $user_info = db::name('user')->where('uid', $uid)->find(); //time 统计周期 1日2周3总 //type 1 贡献榜 2魅力榜 $start_time = 0; if ($time == 1) { $start_time = strtotime(date('Y-m-d')); } elseif ($time == 2) { // $start_time = mktime(0, 0, 0, date('m'), (date('d') - (date('w') > 0 ? date('w') : 7) + 1), date('Y')); $start_time = strtotime(date('Y-m-d', strtotime("this week Monday"))); } elseif ($time == 3) { $start_time = strtotime(date('Y-m-01')); } else { return ['code' => 201, 'msg' => '参数非法', 'data' => null]; } $group = ''; if ($type == 1) { $group = 'uid'; } elseif ($type == 2) { $group = 'receive_uid'; } else{ return ['code' => 201, 'msg' => '参数非法', 'data' => null]; } $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['add_time', '>', $start_time]; $list = db::name('user_send_gift')->field('sum(gift_total_price) as total_gift_total_price,uid,receive_uid')->where($map)->group($group)->limit(100)->order('total_gift_total_price desc')->select(); if (empty($list)) { $data = []; $data['all_gift_total_value'] = 0; $data['list'] = $list; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //获取人气统计总值 // $all_gift_total_price = db::name('user_send_gift')->where($map)->sum('gift_total_price'); $all_gift_total_price = 0; $user_id_list = []; foreach ($list as $k => $v) { if ($type == 1) { $user_id_list[] = $v['uid']; }else { $user_id_list[] = $v['receive_uid']; } } //获取排行榜用户基本信息 $map = []; $map[] = ['uid', 'in', $user_id_list]; $user_list = db::name('user')->field('uid,base64_nick_name,head_pic,sex,special_uid,charm_level,charm_value,contribution_level,contribution_value')->where($map)->select(); $user_list_data = []; foreach ($user_list as $k => &$v) { $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); $v['head_pic'] = localpath_to_netpath($v['head_pic']); $user_list_data[$v['uid']] = $v; } //获取用户头像框 $map = []; $map[] = ['a.is_using', '=', 1]; $map[] = ['a.end_time', '>', time()]; $map[] = ['a.type', '=', 1]; $map[] = ['b.show_status', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $model = Db::name('user_decorate')->alias('a')->join('yy_decorate b', 'a.did = b.did'); $user_decorate_list = $model->field('b.base_image,b.play_image,b.title,a.uid')->where($map)->select(); $user_decorate_list_data = []; foreach ($user_decorate_list as $k => $v) { $user_decorate_list_data[$v['uid']] = $v; } //获取用户财富值、魅力值等级 $map = []; $map[] = ['is_delete', '=', 1]; $user_level_list = db::name('user_level')->cache(600)->where($map)->order('level asc')->select(); $user_level_charm_list_data = []; $user_level_contribution_list_data = []; foreach ($user_level_list as $k => $v) { if ($v['type'] == 1) { $user_level_charm_list_data[$v['level']] = $v; } elseif ($v['type'] == 2) { $user_level_contribution_list_data[$v['level']] = $v; } } foreach ($user_list_data as $k => &$v) { $v['charm_image'] = ''; $v['contribution_image'] = ''; $v['avatar_play_image'] = ''; if (!empty($user_level_charm_list_data[$v['charm_level']])) { $v['charm_image'] = localpath_to_netpath($user_level_charm_list_data[$v['charm_level']]['image']); } if (!empty($user_level_contribution_list_data[$v['contribution_level']])) { $v['contribution_image'] = localpath_to_netpath($user_level_contribution_list_data[$v['contribution_level']]['image']); } foreach ($user_decorate_list_data as $m => $n) { if ($v['uid'] == $n['uid']) { $v['avatar_play_image'] = localpath_to_netpath($n['play_image']); } } } foreach ($list as $m => $n) { if ($type == 1) { $ls_data = $user_list_data[$n['uid']]; }else { $ls_data = $user_list_data[$n['receive_uid']]; } //dump($ls_data); // if($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr) && $user_info['is_look_rank'] != 1){ // $ls_data['rank_value'] = '******'; // }else{ // $ls_data['rank_value'] = (int)$n['total_gift_total_price']; // } $ls_data['rank_value'] = (int)$n['total_gift_total_price']; // if($m >= 1){ // $total_gift_total_price = (int)$up_one_level - (int)$n['total_gift_total_price']; // if($total_gift_total_price > 10000){ // $ls_data['rank_value'] = '距上一名差'.$total_gift_total_price; // }else if($total_gift_total_price > 1000){ // $ls_data['rank_value'] = '距上一名差'.$total_gift_total_price; // }else{ // $ls_data['rank_value'] = '距上一名差'.$total_gift_total_price; // } // }else{ // if($n['total_gift_total_price'] > 10000){ // $ls_data['rank_value'] = $n['total_gift_total_price']; // }else if($n['total_gift_total_price'] > 1000){ // $ls_data['rank_value'] = $n['total_gift_total_price']; // }else{ // $ls_data['rank_value'] = $n['total_gift_total_price']; // } // } // if($m >= 0){ // $up_one_level = $n['total_gift_total_price']; // } $list[$m] = $ls_data; // $list[$m]['total_value']=$n['total_gift_total_price']; } $data = []; $data['all_gift_total_value'] = $all_gift_total_price; $data['list'] = $list; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //获取房间魅力排行榜 public function get_user_rank($time, $type, $page_limit, $uid) { $page_limit = $page_limit < 30 ? $page_limit : 30; //time 统计周期 1日2周3总 //type 1 贡献榜 2魅力榜 $start_time = 0; if ($time == 1) { $start_time = strtotime(date('Y-m-d')); } elseif ($time == 2) { // $start_time = mktime(0, 0, 0, date('m'), (date('d') - (date('w') > 0 ? date('w') : 7) + 1), date('Y')); $start_time = strtotime(date('Y-m-d', strtotime("this week Monday"))); } elseif ($time == 3) { $start_time = strtotime(date('Y-m-01')); } else { return ['code' => 201, 'msg' => '参数非法', 'data' => null]; } $group = ''; if ($type == 1) { $group = 'uid'; } elseif ($type == 2) { $group = 'receive_uid'; } else { return ['code' => 201, 'msg' => '参数非法', 'data' => null]; } $user_info = db::name('user')->where('uid', $uid)->find(); $map = []; $map[] = ['add_time', '>', $start_time]; $list = db::name('user_send_gift')->field('sum(gift_total_price) as total_gift_total_price,uid,receive_uid')->where($map)->group($group)->limit(100)->order('total_gift_total_price desc')->select(); if (empty($list)) { $data = []; $data['all_gift_total_value'] = 0; $data['list'] = $list; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //获取人气统计总值 // $all_gift_total_price = db::name('user_send_gift')->where($map)->sum('gift_total_price'); $all_gift_total_price = 0; $user_id_list = []; foreach ($list as $k => $v) { if ($type == 1) { $user_id_list[] = $v['uid']; } else { $user_id_list[] = $v['receive_uid']; } } //获取排行榜用户基本信息 $map = []; $map[] = ['uid', 'in', $user_id_list]; $user_list = db::name('user')->field('uid,base64_nick_name,head_pic,sex,special_uid,charm_level,charm_value,contribution_level,contribution_value')->where($map)->select(); $user_list_data = []; foreach ($user_list as $k => &$v) { $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); $v['head_pic'] = localpath_to_netpath($v['head_pic']); $user_list_data[$v['uid']] = $v; } //获取用户头像框 $map = []; $map[] = ['a.is_using', '=', 1]; $map[] = ['a.end_time', '>', time()]; $map[] = ['a.type', '=', 1]; $map[] = ['b.show_status', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $model = Db::name('user_decorate')->alias('a')->join('yy_decorate b', 'a.did = b.did'); $user_decorate_list = $model->field('b.base_image,b.play_image,b.title,a.uid')->where($map)->select(); $user_decorate_list_data = []; foreach ($user_decorate_list as $k => $v) { $user_decorate_list_data[$v['uid']] = $v; } //获取用户财富值、魅力值等级 $map = []; $map[] = ['is_delete', '=', 1]; $user_level_list = db::name('user_level')->cache(600)->where($map)->order('level asc')->select(); $user_level_charm_list_data = []; $user_level_contribution_list_data = []; foreach ($user_level_list as $k => $v) { if ($v['type'] == 1) { $user_level_charm_list_data[$v['level']] = $v; } elseif ($v['type'] == 2) { $user_level_contribution_list_data[$v['level']] = $v; } } foreach ($user_list_data as $k => &$v) { $v['charm_image'] = ''; $v['contribution_image'] = ''; $v['avatar_play_image'] = ''; if (!empty($user_level_charm_list_data[$v['charm_level']])) { $v['charm_image'] = localpath_to_netpath($user_level_charm_list_data[$v['charm_level']]['image']); } if (!empty($user_level_contribution_list_data[$v['contribution_level']])) { $v['contribution_image'] = localpath_to_netpath($user_level_contribution_list_data[$v['contribution_level']]['image']); } foreach ($user_decorate_list_data as $m => $n) { if ($v['uid'] == $n['uid']) { $v['avatar_play_image'] = localpath_to_netpath($n['play_image']); } } } // dump($list);exit; foreach ($list as $m => $n) { if ($type == 1) { $ls_data = $user_list_data[$n['uid']]; } else { $ls_data = $user_list_data[$n['receive_uid']]; } //dump($ls_data); $ls_data['rank_value'] = (int)$n['total_gift_total_price']; // if($user_info['is_look_rank'] == 1 || $user_info['uid'] == $n['uid']){ // $ls_data['rank_value'] = $n['total_gift_total_price']; // }else{ // $ls_data['rank_value'] = '******'; // } // if($m >= 1){ // $total_gift_total_price = (int)$up_one_level - (int)$n['total_gift_total_price']; // if($total_gift_total_price > 10000){ // $ls_data['rank_value'] = '距上一名差'.$total_gift_total_price; // }else if($total_gift_total_price > 1000){ // $ls_data['rank_value'] = '距上一名差'.$total_gift_total_price; // }else{ // $ls_data['rank_value'] = '距上一名差'.$total_gift_total_price; // } // }else{ // if($n['total_gift_total_price'] > 10000){ // $ls_data['rank_value'] = $n['total_gift_total_price']; // }else if($n['total_gift_total_price'] > 1000){ // $ls_data['rank_value'] = $n['total_gift_total_price']; // }else{ // $ls_data['rank_value'] = $n['total_gift_total_price']; // } // } // if($m >= 0){ // $up_one_level = $n['total_gift_total_price']; // } // $ls_data['rank_value'] = $n['total_gift_total_price']; $list[$m] = $ls_data; // $list[$m]['total_value']=$n['total_gift_total_price']; } $data = []; $data['all_gift_total_value'] = $all_gift_total_price; $data['list'] = $list; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } public function get_user_rank_top() { $user_charm_list = db::name('user')->field('uid,base64_nick_name,head_pic,charm_value')->order('charm_value desc')->limit(3)->select(); $user_contribution_list = db::name('user')->field('uid,head_pic,base64_nick_name,contribution_value')->order('contribution_value desc')->limit(3)->select(); foreach ($user_charm_list as $k => &$v) { $v['head_pic'] = localpath_to_netpath($v['head_pic']); $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); } foreach ($user_contribution_list as $k => &$v) { $v['head_pic'] = localpath_to_netpath($v['head_pic']); $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); } $data = []; $data['user_charm_rank_list'] = $user_charm_list; $data['user_contribution_rank_list'] = $user_contribution_list; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } public function get_room_charm_top(){ $start_time = time()-86400; $map = []; $map[] = ['add_time', '>', $start_time]; $list = db::name('user_send_gift')->field('sum(gift_total_price) as total_room_charm_value,rid')->where($map)->group("rid")->limit(3)->order('total_room_charm_value desc')->select(); $map = []; $map[] = ['rid', 'in', array_column($list,'rid')]; $room_data = db::name('room')->where($map)->column("*","rid"); foreach ($list as $k => &$v) { $v['room_name']=mb_convert_encoding(base64_decode($room_data[$v['rid']]['base64_room_name']), 'UTF-8', 'UTF-8'); $v['room_cover']=localpath_to_netpath($room_data[$v['rid']]['room_cover']); } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } private function get_room_background_info($room_background_id) { $map = []; $map[] = ['bid', '=', $room_background_id]; $map[] = ['status', '=', 1]; $map[] = ['is_delete', '=', 1]; $image_url = db::name('room_background')->where($map)->value('image_url'); if (empty($image_url)) { $map = []; $map[] = ['status', '=', 1]; $map[] = ['is_delete', '=', 1]; $image_url = db::name('room_background')->where($map)->value('image_url'); } return localpath_to_netpath($image_url); } private function get_cate_name_by_id($cate_id) { $map = []; $map[] = ['is_delete', '=', 1]; $list = db::name('room_category')->where($map)->column('category_name', 'cate_id'); return !empty($list[$cate_id]) ? $list[$cate_id] : ''; } //获取房间类型 public function get_room_type() { $list = db::name('room_type')->field('tid,type_name,image')->where(['is_delete' => 1])->select(); foreach ($list as $k => &$v) { $v['image'] = localpath_to_netpath($v['image']); } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //获取表情列表 // public function get_room_emoji_list($page, $page_limit) // { // $list = db::name('room_emoji')->field('eid,name,second,image')->where(['is_delete' => 1, 'show_status' => 1, 'pid' => 0])->page($page, $page_limit)->select(); // foreach ($list as $k => &$v) { // $v['image'] = localpath_to_netpath($v['image']); // } // return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; // } //获取表情列表 public function get_room_emoji_list($uid, $page, $page_limit) { $user_info = db::name('user')->field('nobility_id')->find($uid); $list = []; $list_1 = []; $list_2 = []; $list_1 = db::name('room_emoji')->field('eid, emoji_type, nid, name, second, image')->where(['is_delete' => 1, 'show_status' => 1, 'pid' => 0, 'emoji_type' => 1])->order('sort desc, eid asc')->select(); foreach ($list_1 as $k => &$v) { $v['label'] = ''; $v['image'] = localpath_to_netpath($v['image']); } // dump($list_1); if(!empty($user_info['nobility_id'])){ $where = []; $where[] = ['emoji_type', '=', 2]; $where[] = ['pid', '=', 0]; $where[] = ['show_status', '=', 1]; $where[] = ['is_delete', '=', 1]; $where[] = ['nid', '<=', $user_info['nobility_id']]; $list_2 = db::name('room_emoji')->field('eid, emoji_type, nid, name, second, image')->where($where)->order('sort desc, eid asc')->select(); foreach ($list_2 as $k => &$v){ $v['label'] = db::name('nobility')->where('lid', $v['nid'])->value('name'); $v['image'] = localpath_to_netpath($v['image']); } } $list = array_merge($list_1, $list_2); return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //获取表情 public function get_room_emoji_info($eid) { $map = []; $map[] = ['is_delete', '=', 1]; $map[] = ['show_status', '=', 1]; $room_emoji_list = db::name('room_emoji')->cache(60)->where($map)->order('pid asc')->select(); //必须正序排列 $room_emoji_data = []; foreach ($room_emoji_list as $k => &$v) { $v['image'] = localpath_to_netpath($v['image']); if ($v['pid'] == 0) { $room_emoji_data[$v['eid']]['p_info'] = $v; if (empty($room_emoji_data[$v['eid']]['child_list'])) { $room_emoji_data[$v['eid']]['child_list'] = []; } } else { $room_emoji_data[$v['pid']]['child_list'][] = $v; unset($v); } } $emoji_info = []; if (empty($room_emoji_data[$eid]['child_list'])) { $emoji_info = $room_emoji_data[$eid]['p_info']; $emoji_info['result'] = 0; } else { $emoji_info = $room_emoji_data[$eid]['child_list'][array_rand($room_emoji_data[$eid]['child_list'])]; if(count($room_emoji_data[$eid]['child_list']) == 1){ $emoji_info['result'] = 0; }else{ $emoji_info['result'] = 1; } } $data = []; $data['name'] = $emoji_info['name']; $data['type'] = $emoji_info['type']; $data['image'] = $emoji_info['image']; $data['second'] = $emoji_info['second']; $data['result'] = $emoji_info['result']; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //获取我收藏的房间列表 public function get_user_collect_list($uid, $page, $page_limit) { $list = db::name('user_collect_room') ->where(['uid' => $uid]) ->page($page, $page_limit) ->select(); foreach ($list as $k => &$v) { $room_info = db::name('room')->where(['rid' => $v['rid']])->find(); $v['is_online'] = Db::name('user')->where('uid', $room_info['room_owner_uid'])->value('is_online'); $v['room_owner_uid'] = $room_info['room_owner_uid']; $v['room_number'] = $room_info['room_number']; //room_owner_uid $v['room_name'] = mb_convert_encoding(base64_decode($room_info['base64_room_name']), 'UTF-8', 'UTF-8'); $v['room_cover'] = localpath_to_netpath($room_info['room_cover']); $v['hot_value'] = $room_info['hot_value']; } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //收藏房间 public function collect_room($uid, $rid) { $find = db::name('user_collect_room')->where(['uid' => $uid, 'rid' => $rid])->find(); if ($find) { return ['code' => 201, 'msg' => '已添加过收藏', 'data' => null]; } $arr = []; $arr['uid'] = $uid; $arr['rid'] = $rid; $arr['add_time'] = time(); $arr['update_time'] = time(); $res = db::name('user_collect_room')->insert($arr); if ($res) { return ['code' => 200, 'msg' => '收藏成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '收藏失败', 'data' => null]; } } //取消收藏 public function un_collect_room($uid, $rid) { $res = db::name('user_collect_room')->where(['uid' => $uid, 'rid' => $rid])->delete(); if ($res) { return ['code' => 200, 'msg' => '取消成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '取消失败', 'data' => null]; } } //退出房间-执行操作 public function quit_room($uid, $rid) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } //厅住下线 if ($room_info['room_owner_uid'] == $uid && $room_info['room_host_uid'] == $uid) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['room_host_uid', '=', $uid]; $data = []; $data['room_host_uid'] = 0; $data['update_time'] = time(); $data['frame_gid'] = 0; $data['centre_gid'] = 0; $data['above_gid'] = 0; $data['below_gid'] = 0; $data['left_gid'] = 0; $data['right_gid'] = 0; $data['down_up_time'] = time(); DB::name('room')->where($map)->update($data); } //主持下线 if($room_info['room_host_uid'] != $room_info['room_owner_uid']){ if ($room_info['room_host_uid'] == $uid) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['room_host_uid', '=', $uid]; $data = []; $data['room_host_uid'] = 0; $data['update_time'] = time(); $data['frame_gid'] = 0; $data['centre_gid'] = 0; $data['above_gid'] = 0; $data['below_gid'] = 0; $data['left_gid'] = 0; $data['right_gid'] = 0; $data['down_up_time'] = time(); DB::name('room')->where($map)->update($data); } } $is_down = 1; //麦位用户下线 $user_room_micro = db::name('room_micro')->where('rid', $rid)->where('uid', $uid)->order('micro_id asc')->find(); if($user_room_micro){ if($room_info['cate_id'] == 26){ $activity_info = db::name('room_new_auction_log')->where('rid', $rid)->where('is_stop', 2)->where('is_delete', 1)->find(); if(!empty($activity_info) && $uid == $activity_info['uid']){ $is_down = 2; } } if($room_info['cate_id'] == 27){ $activity_info = db::name('room_song_log')->where('rid', $rid)->where('status', 2)->where('is_delete', 1)->find(); if(!empty($activity_info)){ $uid_array = explode(',', trim($activity_info['uid_array'], ',')); if(in_array($uid, $uid_array)){ $is_down = 2; } } } if($room_info['cate_id'] == 28){ $activity_info = db::name('room_auction_log')->where('rid', $rid)->where('status', 2)->where('is_delete', 1)->find(); // if(!empty($activity_info) && $uid == $activity_info['uid'] ){ // $is_down = 2; // } // if(!empty($activity_info) && in_array($user_room_micro['id'],[1,2,3,4,5,6,7])){ // $is_down = 2; // } if(!empty($activity_info)){ $auction_uid_data = db::name('user_room_auction_log')->where('raid', $activity_info['id'])->column('auction_uid'); if($uid == $activity_info['uid']){ $is_down = 2; }else if(in_array($uid, $auction_uid_data)){ $is_down = 2; } } } if($room_info['cate_id'] == 29){ $activity_info = db::name('room_dating_log')->where('rid', $rid)->where('is_delete', 1)->find(); if(!empty($activity_info)){ $uid_array = explode(',', trim($activity_info['participate_uid'], ',')); if(in_array($uid, $uid_array)){ $is_down = 2; } } } if(in_array($room_info['cate_id'],[36,37])){ $xq_activity = db::name('room_xq1')->where(['rid'=>$rid,'is_delete'=>1])->find(); if(!empty($xq_activity)){ $is_down = 2; } } if($is_down == 1){ db::name('room_micro')->where('rid', $rid)->where('uid', $uid)->update(['uid' => 0, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time(),'light_type'=>0,'is_spotlight'=>2,'trac_line'=>2]); $info = db::name('room_auction_log')->where('rid', $rid)->where('uid', $uid)->where('is_delete', 1)->find(); if(!empty($info)){ db::name('room_auction_log')->where('id', $info['id'])->update(['is_delete' => 2, 'update_time' => time()]); } }else{ if(!in_array($room_info['cate_id'],[36,37])){ db::name('room_micro')->where('id', $user_room_micro['id'])->update(['is_online' => 2, 'update_time' => time()]); //是否有在老板麦 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $uid]; if($room_info['cate_id'] == 29) { $map[] = ['micro_id', 'in', [7,8]]; }elseif($room_info['cate_id'] == 28){ $map[] = ['micro_id', 'in', [8,9,10,11,12]]; //拍卖房没有老板麦 } else { $map[] = ['micro_id', 'in', [5,6,7,8]]; } $is_boss_micro = db::name('room_micro')->where($map)->find(); if(!empty($is_boss_micro)){ db::name('room_micro')->where('id', $is_boss_micro['id'])->update(['uid' => 0, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time(),'light_type'=>0,'is_spotlight'=>2,'trac_line'=>2]); } }else{ db::name('room_micro')->where('id', $user_room_micro['id'])->update(['is_online' => 2, 'update_time' => time()]); //是否有在老板麦 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $uid]; $map[] = ['micro_id', 'in', [8]]; $is_boss_micro = db::name('room_micro')->where($map)->find(); if($is_boss_micro){ db::name('room_micro')->where('id', $is_boss_micro['id'])->update(['uid' => 0, 'is_online' => 1, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time(),'light_type'=>0,'is_spotlight'=>2,'trac_line'=>2]); } } } } //游客下线 $room_visitor = db::name('room_visitor')->where(['uid' => $uid, 'rid' => $rid])->find(); if($room_visitor){ // if(empty($room_visitor['change_value'])){ $reslut = DB::name('room_visitor')->where('vid', $room_visitor['vid'])->delete(); // }else{ // $end_time = time() + 300; // $reslut = DB::name('room_visitor')->where('vid', $room_visitor['vid'])->update(['is_delete' => 2, 'end_time' => $end_time, 'update_time' => time()]); // } if ($reslut) { //更新房间在线人数 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['visitor_num', '>=', 1]; db::name('room')->where($map)->setDec('visitor_num', 1); } } if($is_down == 1){ //清除魅力值 $user_charm = db::name('room_user_cc')->where('rid', $rid)->where('uid',$uid)->find(); if(!empty($user_charm)){ db::name('room_user_cc')->where('cid', $user_charm['cid'])->update(['charm_value'=>0, 'update_time' => time()]); db::name('room_user_micro_charm_log')->where('cid', $user_charm['cid'])->update(['change_value' => 0, 'update_time' => time()]); } } // if(in_array($room_info['cate_id'], [27,28])){ // //更新老板麦信息 // model('RoomBossMicro')->update_room_boss_micro($rid); // } if(in_array($room_info['cate_id'], [27])){ //更新老板麦信息 model('RoomBossMicro')->update_room_boss_micro($rid); } //推送麦位信息 $this->push_room_micro_data($room_info['rid']); model('RoomApplyMicro')->quit_user_room_micro_aisle($uid,$rid); if($is_down == 1){ model('Agora')->user_quit_song_del($uid, $rid); } if($room_info['room_host_uid'] == $uid){ model('Statistics')->room_host_online_time($uid, $rid, 2); } //房间人数由长连接服务主动推送 return ['code' => 200, 'msg' => '退出成功', 'data' => null]; } //锁麦 public function lock_room_micro($uid, $rid, $position) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,cate_id,room_micro,room_owner_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if ($position < 0) { return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $position = $position + 1; $max_micro_num = 0; if ($room_info['cate_id'] == 26) {//新人 $max_micro_num = 1; } elseif ($room_info['cate_id'] == 27) {//K歌 $max_micro_num = 8; if(in_array($position, [5,6,7,8])){ return ['code' => 201, 'msg' => '老板麦无法锁麦', 'data' => null]; } } elseif ($room_info['cate_id'] == 28) {//拍卖 $max_micro_num = 9; if(in_array($position, [2,3,4,5,6,7])){ return ['code' => 201, 'msg' => '竞拍位无法锁麦', 'data' => null]; } // if(in_array($position, [5,6,7,8])){ // return ['code' => 201, 'msg' => '老板麦无法锁麦', 'data' => null]; // } } elseif ($room_info['cate_id'] == 29) {//交友 $max_micro_num = 7; } elseif ($room_info['cate_id'] == 19) {//酒吧 $max_micro_num = 7; }else {//常规房间 $max_micro_num = 9; } if ($position > $max_micro_num) { return ['code' => 201, 'msg' => '麦位不存在', 'data' => null]; } $res = db::name('room_micro')->where('rid', $rid)->where('micro_id', $position)->update(['uid' => -1, 'update_time' => time()]); if ($res) { //推送麦位信息 $this->push_room_micro_data($room_info['rid']); return ['code' => 200, 'msg' => '锁定麦位成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '锁定麦位失败', 'data' => null]; } } //开放麦位 public function unlock_room_micro($uid, $rid, $position) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,cate_id,room_micro,room_owner_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if ($position < 0) { return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $position = $position + 1; $max_micro_num = 0; if ($room_info['cate_id'] == 26) {//新人 $max_micro_num = 1; } elseif ($room_info['cate_id'] == 27) {//K歌 $max_micro_num = 8; } elseif ($room_info['cate_id'] == 28) {//拍卖 $max_micro_num = 9; } elseif ($room_info['cate_id'] == 29) {//交友 $max_micro_num = 7; }elseif ($room_info['cate_id'] == 19) {//酒吧 $max_micro_num = 7; } else {//常规房间 $max_micro_num = 9; } if ($position > $max_micro_num) { return ['code' => 201, 'msg' => '麦位不存在', 'data' => null]; } $res = db::name('room_micro')->where('rid', $rid)->where('micro_id', $position)->update(['uid' => 0, 'update_time' => time()]); if ($res) { //推送麦位信息 $this->push_room_micro_data($room_info['rid']); return ['code' => 200, 'msg' => '解锁麦位成功', 'data' => null]; } else { return ['code' => 201, 'msg' => '解锁麦位失败', 'data' => null]; } } //关闭用户麦克风 public function lock_user_micro($uid, $rid, $user_id) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid,room_host_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if($user_id == $room_info['room_owner_uid']){ return ['code' => 201, 'msg' => '房主无法被禁言', 'data' => null]; } if($user_id == $room_info['room_host_uid']){ return ['code' => 201, 'msg' => '主持无法被禁言', 'data' => null]; } $user_id_info = db::name('user')->where('uid', $user_id)->find(); if($user_id_info['nobility_id'] > 5){ return ['code' => 201, 'msg' => '该用户爵位国王无法被禁言', 'data' => null]; } $forbid_micro_time = get_system_config('forbid_micro_time'); $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $user_id]; $map[] = ['type', '=', 2]; $data = []; $data['user_id'] = $uid; $data['over_time'] = time() + $forbid_micro_time; //默认禁言 $data['update_time'] = time() + $forbid_micro_time; //默认禁言 $data['operator_uid'] = $uid; //默认禁言 $info = db::name('room_forbid_user')->where($map)->find(); if($info){ $reslut = db::name('room_forbid_user')->where('fid', $info['fid'])->update($data); }else{ $data = []; $data['type'] = 2; $data['user_id'] = $uid; $data['operator_uid'] = $uid; //默认禁言 $data['uid'] = $user_id; $data['rid'] = $rid; $now_time = time(); $data['over_time'] = $now_time + $forbid_micro_time; $data['add_time'] = $now_time; $data['update_time'] = $now_time; $reslut = db::name('room_forbid_user')->insert($data); } if(!$reslut){ return ['code' => 201, 'msg' => '添加禁声失败', 'data' => null]; }else{ //推送麦位信息 $this->push_room_micro_data($room_info['rid']); return ['code' => 200, 'msg' => '添加禁声成功', 'data' => null]; } } //开放用户声音麦克风 public function unlock_user_micro($uid, $rid, $user_id) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } $forbid_micro_time = get_system_config('forbid_micro_time'); $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $user_id]; $map[] = ['type', '=', 2]; $data = []; $data['over_time'] = time() - 1; //默认禁言 $data['update_time'] = time() + $forbid_micro_time; //默认禁言 db::name('room_forbid_user')->where($map)->update($data); //推送麦位信息 $this->push_room_micro_data($room_info['rid']); return ['code' => 200, 'msg' => '解除成功', 'data' => null]; } //查看用户是否被禁言 public function get_user_world_status($uid, $rid) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $uid]; $map[] = ['type', '=', 1]; $map[] = ['over_time', '>', time()]; $room_forbid_user_info = db::name('room_forbid_user')->where($map)->find(); $data = []; if (empty($room_forbid_user_info)) { $data['lock_status'] = 1; //未锁定 $data['lock_status_str'] = '未锁定'; //未锁定 } else { $data['lock_status'] = 2; //未锁定 $data['lock_status_str'] = '已锁定'; //未锁定 } return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //添加用户禁言 public function lock_user_world($uid, $rid, $user_id) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid,room_host_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if($user_id == $room_info['room_owner_uid']){ return ['code' => 201, 'msg' => '房主无法被禁言', 'data' => null]; } if($user_id == $room_info['room_host_uid']){ return ['code' => 201, 'msg' => '主持无法被禁言', 'data' => null]; } $user_id_info = db::name('user')->where('uid', $user_id)->find(); if($user_id_info['nobility_id'] > 5){ return ['code' => 201, 'msg' => '该用户爵位国王无法被禁言', 'data' => null]; } $forbid_micro_time = get_system_config('forbid_micro_time'); $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $user_id]; $map[] = ['type', '=', 1]; $data = []; $data['user_id'] = $uid; $data['over_time'] = time() + $forbid_micro_time; //默认禁言 $data['update_time'] = time() + $forbid_micro_time; //默认禁言 $data['operator_uid'] = $uid; //默认禁言 $info = db::name('room_forbid_user')->where($map)->find(); if($info){ $reslut = db::name('room_forbid_user')->where('fid', $info['fid'])->update($data); }else{ $data = []; $data['type'] = 1; $data['user_id'] = $uid; $data['operator_uid'] = $uid; //默认禁言 $data['uid'] = $user_id; $data['rid'] = $rid; $now_time = time(); $data['over_time'] = $now_time + $forbid_micro_time; $data['add_time'] = $now_time; $data['update_time'] = $now_time; $reslut = db::name('room_forbid_user')->insert($data); } if(!$reslut){ return ['code' => 201, 'msg' => '添加禁言失败', 'data' => null]; }else{ //推送麦位信息 $this->push_room_micro_data($room_info['rid']); return ['code' => 200, 'msg' => '添加禁言成功', 'data' => null]; } } //解除用户禁言 public function unlock_user_world($uid, $rid, $user_id) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } $forbid_micro_time = get_system_config('forbid_micro_time'); $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $user_id]; $map[] = ['type', '=', 1]; $data = []; $data['over_time'] = time() - 1; //默认禁言 $data['update_time'] = time() + $forbid_micro_time; //默认禁言 db::name('room_forbid_user')->where($map)->update($data); //推送麦位信息 $this->push_room_micro_data($room_info['rid']); return ['code' => 200, 'msg' => '解除禁言成功', 'data' => null]; } //房间内获取其他人信息 public function get_room_user_info($uid, $rid, $user_id) { $config = get_uncache_system_config(); //用户信息 $user_info = db::name('user')->field('uid,base64_nick_name,head_pic,sex,birthday,special_uid,charm_level,contribution_level,add_time,social')->where(['uid' => $user_id])->find(); if (empty($user_info)) { return ['code' => 201, 'msg' => '用户不存在', 'data' => null]; } $user_info['nick_name'] = base64_decode($user_info['base64_nick_name']); unset($user_info['base64_nick_name']); $user_info['head_pic'] = localpath_to_netpath($user_info['head_pic']); //是否互相关注 $user_info['is_follow'] = 1; //否 $follow_info = db::name('user_follow')->where(['uid' => $uid, 'follow_uid' => $user_id])->find(); if (!empty($follow_info)) { $user_info['is_follow'] = 2; //是 } //房间信息 $room_info = db::name('room')->field('rid,room_owner_uid,room_admin_uid')->where(['rid' => $rid])->find(); if (empty($room_info)) { // return ['code' => 201, 'msg' => '房间不存在', 'data' => null]; } $user_info['is_have_producer'] = 2; $user_info['producer_uid'] = 0; $user_info['producer_nick_name'] = ''; $user_info['producer_head_pic'] = ''; //自己的制作人信息 $user_sign_contract = db::name('user_sign_contract')->where('sign_uid', $user_id)->where('is_delete', 1)->find(); if($user_sign_contract){ $producer_info = db::name('user')->where('uid', $user_sign_contract['uid'])->find(); $user_info['is_have_producer'] = 1; $user_info['producer_uid'] = $user_sign_contract['uid']; $user_info['producer_nick_name'] = mb_convert_encoding(base64_decode($producer_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $user_info['producer_head_pic'] = localpath_to_netpath($producer_info['head_pic']); } $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $user_id]; $map[] = ['over_time', '>', time()]; $room_forbid_user_info = db::name('room_forbid_user')->where($map)->select(); $user_info['user_micro_status'] = 1; //未禁音 $user_info['user_world_status'] = 1; //未禁言 foreach ($room_forbid_user_info as $k => $v) { if ($v['type'] == 1) { $user_info['user_world_status'] = 2; //禁音 } elseif ($v['type'] == 2) { $user_info['user_micro_status'] = 2; //禁麦 } } $user_info['user_type'] = 5; // 1厅主 2管理 3游客 // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($user_id == $room_info['room_owner_uid']) { $user_info['user_type'] = 1; } elseif (in_array($user_id, $room_admin_uid_arr)) { $user_info['user_type'] = 2; } elseif (in_array($user_id, $room_host_uid_arr)){ $user_info['user_type'] = 2; } $user_info['is_new'] = 2; $is_new_time = $user_info['add_time'] + (60*60*24*7); if(time() < $is_new_time){ $user_info['is_new'] = 1; } //该用户是否已被签约 $map = []; $map[] = ['sign_uid', '=', $user_id]; $map[] = ['is_delete', '=', 1]; $user_contract = db::name('user_sign_contract')->where($map)->find(); if($user_contract){ $user_info['is_new'] = 2; } //CP信息 $user_cp_info = model('Coupling')->user_coupling_info($user_id); $user_info['user_cp_info'] = $user_cp_info['data']; if($user_info['social']<1){ $user_info['social'] = $config['initial_user_social']; } //艺人数量 $sign_contract = db::name('user_sign_contract')->where('uid', $user_id)->where('is_delete', 1)->count(); $user_info['sign_contract_num'] = $sign_contract; //关系数量 $map = []; $map[] = ['uid|receive_uid', '=', $user_id]; $map[] = ['is_delete', '=', 1]; $user_relation_binding = db::name('user_relation_binding')->where($map)->count(); $user_info['relation_num'] = $user_relation_binding; //获取用户头像框 $user_avatar_info = model('User')->get_user_avatar_info($user_id); $user_info['avatar_play_image'] = $user_avatar_info['data']['avatar_play_image']; //获取用户贡献、财富等级图标 $charm_contribution_data = model('User')->get_user_charm_contribution_info($user_info); $user_info['charm_level_image'] = $charm_contribution_data['data']['charm_level_image']; $user_info['contribution_level_image'] = $charm_contribution_data['data']['contribution_level_image']; $user_nobility_info = model('user')->get_user_nobility_info($user_id); $user_info['nobility_image'] = $user_nobility_info['data']['nobility_image']; //获取用户自己是否有代充权限 $user_recharge_info = model('User')->get_user_info($uid); $user_info['is_can_recharge'] = $user_recharge_info['data']['is_can_recharge']; //房间拉黑 $is_room_black = db::name('room_user_black')->where(['rid'=>$rid,'black_id'=>$user_id])->field('uid')->find(); if(!empty($is_room_black)){ $user_info['is_room_black'] = 1; }else{ $user_info['is_room_black'] = 2; } return ['code' => 200, 'msg' => '获取成功', 'data' => $user_info]; } // 获取房间内所有用户 public function get_room_user_list($rid, $uid, $page, $page_limit) { $page = intval($page); $page_limit = $page_limit < 999 ? $page_limit : 999; $data = []; $data['micro_user_list'] = []; $data['unmicro_user_list'] = []; $room_info = DB::name('room')->where(['rid' => $rid])->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_micro_array = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); //查询7号麦是否隐身 $room_xq1_activity = db::name('room_xq1')->where(['rid'=>$rid,'is_delete'=>1])->order(['id'=>'desc'])->find(); $uid7 = 0; if(!empty($room_xq1_activity)){ if($room_xq1_activity['xq_uid_sm'] == 2){ //神秘人 $uid7 = db::name('room_micro')->where(['rid'=>$rid,'micro_id'=>7])->value('uid'); } } //获取麦位用户信息 $map = []; $map[] = ['uid', 'in', $room_micro_array]; $map[] = ['uid', '<>', $uid7]; if (!empty($uid)) { $map[] = ['uid|special_uid', '=', $uid]; } $user_list = db::name('user')->field('uid,base64_nick_name,head_pic,sex,special_uid,charm_level,contribution_level')->where($map)->select(); foreach ($user_list as $k => &$v) { $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); $v['head_pic'] = localpath_to_netpath($v['head_pic']); $user_type = 5; if($room_info['room_owner_uid'] == $v['uid']){ $user_type = 1; } if(in_array($v['uid'], $room_admin_uid_arr)){ $user_type = 2; } if(in_array($v['uid'], $room_host_uid_arr)){ $user_type = 3; } $v['user_type'] = $user_type; $data['micro_user_list'][] = $v; } //获取麦下用户信息 //获取游客信息 $map = []; // $map[] = ['rid', '=', $rid]; // $user_id_list = db::name('room_visitor')->where($map)->column('uid'); $map[] = ['a.rid', '=', $rid]; $map[] = ['b.is_room_hiding', '=', 2]; $map[] = ['a.is_delete', '=', 1]; $user_id_list = db::name('room_visitor')->alias('a')->join('yy_user b', 'a.uid = b.uid')->where($map)->column('a.uid'); //获取机器人uid $robot_uids = db::name('user')->where(['is_sys_tester'=>1,'belong_rid'=>$rid])->column('uid'); $user_id_list = array_merge($user_id_list,$robot_uids); if (!empty($user_id_list)) { $map = []; $map[] = ['uid', 'in', $user_id_list]; $map[] = ['uid', 'not in', $room_micro_array]; if (!empty($uid)) { $map[] = ['uid|special_uid', '=', $uid]; } $user_list = db::name('user')->field('uid,base64_nick_name,head_pic,sex,special_uid,charm_level,contribution_level')->where($map)->page($page, $page_limit)->select(); foreach ($user_list as $k => &$v) { $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); $v['head_pic'] = localpath_to_netpath($v['head_pic']); $user_type = 5; if($room_info['room_owner_uid'] == $v['uid']){ $user_type = 1; } if(in_array($v['uid'], $room_admin_uid_arr)){ $user_type = 2; } if(in_array($v['uid'], $room_host_uid_arr)){ $user_type = 3; } $v['user_type'] = $user_type; $data['unmicro_user_list'][] = $v; } } return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } // 获取房间管理员及所有用户 public function get_room_admin_list($rid, $uid, $page, $page_limit) { $page = intval($page); $page_limit = $page_limit < 999 ? $page_limit : 999; $data = []; $data['room_admin_list'] = []; $data['room_visitor_list'] = []; $room_info = DB::name('room')->where(['rid' => $rid])->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间不存在', 'data' => null]; } $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); //获取麦位用户信息 $map = []; $map[] = ['uid', 'in', $room_admin_uid_arr]; if (!empty($uid)) { $map[] = ['uid|special_uid', '=', $uid]; } $user_list = db::name('user')->field('uid,base64_nick_name,head_pic,sex,special_uid,charm_level,contribution_level')->where($map)->select(); foreach ($user_list as $k => &$v) { $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); $v['head_pic'] = localpath_to_netpath($v['head_pic']); $data['room_admin_list'][] = $v; } //获取麦下用户信息 //获取游客信息 $map = []; // $map[] = ['rid', '=', $rid]; // $user_id_list = db::name('room_visitor')->where($map)->column('uid'); $map[] = ['a.rid', '=', $rid]; $map[] = ['b.is_room_hiding', '=', 2]; $map[] = ['a.is_delete', '=', 1]; $user_id_list = db::name('room_visitor')->alias('a')->join('yy_user b', 'a.uid = b.uid')->where($map)->column('a.uid'); if (!empty($user_id_list)) { $map = []; $map[] = ['uid', 'in', $user_id_list]; $map[] = ['uid', 'not in', $room_admin_uid_arr]; if (!empty($uid)) { $map[] = ['uid|special_uid', '=', $uid]; } $user_list = db::name('user')->field('uid,base64_nick_name,head_pic,sex,special_uid,charm_level,contribution_level')->where($map)->page($page, $page_limit)->select(); foreach ($user_list as $k => &$v) { $v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8'); $v['head_pic'] = localpath_to_netpath($v['head_pic']); $data['room_visitor_list'][] = $v; } } return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //踢出房间 public function out_room($uid, $rid, $user_id) { if (empty($uid)) { return ['code' => 201, 'msg' => '踢出用户参数错误', 'data' => null]; } $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid,room_host_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if($user_id == $room_info['room_owner_uid']){ return ['code' => 201, 'msg' => '房主无法被踢出房间', 'data' => null]; } if($user_id == $room_info['room_host_uid'] && $uid != $room_info['room_owner_uid']){ return ['code' => 201, 'msg' => '主持无法被踢出房间', 'data' => null]; } if($uid != $room_info['room_owner_uid'] && in_array($user_id, $room_admin_uid_arr)){ return ['code' => 201, 'msg' => '您无权踢出该管理', 'data' => null]; } if($uid != $room_info['room_owner_uid'] && in_array($user_id, $room_host_uid_arr)){ return ['code' => 201, 'msg' => '您无权踢出该主持', 'data' => null]; } $user_id_info = db::name('user')->where('uid', $user_id)->find(); //是否是爵位防踢 if($user_id_info['nobility_id'] > 5){ return ['code' => 201, 'msg' => '该用户爵位国王无法被踢', 'data' => null]; } $forbid_black_time = get_system_config('forbid_black_time'); $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', '=', $user_id]; $map[] = ['type', '=', 3]; $data = []; $data['user_id'] = $uid; $data['over_time'] = time() + $forbid_black_time; //默认禁言 $data['update_time'] = time(); $data['operator_uid'] = $uid; //默认禁言 $info = db::name('room_forbid_user')->where($map)->find(); if($info){ $reslut = db::name('room_forbid_user')->where('fid', $info['fid'])->update($data); }else{ $data = []; $data['type'] = 3; $data['uid'] = $user_id; $data['rid'] = $rid; $now_time = time(); $data['over_time'] = $now_time + $forbid_black_time; $data['add_time'] = $now_time; $data['update_time'] = $now_time; $data['operator_uid'] = $uid; //默认禁言 $reslut = db::name('room_forbid_user')->insert($data); } if(!$reslut){ return ['code' => 201, 'msg' => '踢出房间失败', 'data' => null]; } //执行退出房间逻辑 $reslut = $this->quit_room($user_id, $rid); if ($reslut['code'] != 200) { return ['code' => $reslut['code'], 'msg' => $reslut['msg'], 'data' => $reslut['data']]; } return ['code' => 200, 'msg' => '踢出房间成功', 'data' => null]; } //清空魅力值 public function clear_user_charm($uid, $rid, $user_id) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } Db::startTrans(); try { $map = []; $map[] = ['uid', '=', $user_id]; $map[] = ['rid', '=', $rid]; $data = []; $data['charm_value'] = 0; $data['update_time'] = time(); $info = db::name('room_user_cc')->where($map)->find(); if($info){ $reslut = db::name('room_user_micro_charm_log')->where('cid', $info['cid'])->update(['change_value' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => "失败", 'data' => null]; } $reslut = db::name('room_user_cc')->where($map)->update($data); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => "失败", 'data' => null]; } } Db::commit(); $this->push_room_micro_data($room_info['rid']); return ['code' => 200, 'msg' => "成功", 'data' => null]; } catch (\Exception $e) { dump($e); //回滚事务 Db::rollback(); return ['code' => 201, 'msg' => "失败", 'data' => null]; } } //清空房间内麦上人的魅力值 public function clear_user_charm_all($uid, $rid){ $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_host_uid,room_admin_uid,room_micro')->where($map)->find(); if(empty($room_info)){ return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } // $room_info['room_micro'] = $room_info['room_micro'] .','. $room_info['room_owner_uid']; // $room_micro = explode(',',$room_info['room_micro']); Db::startTrans(); try { $room_micro = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); $room_micro[] = $room_info['room_host_uid']; $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['uid', 'in', $room_micro]; // $map[] = ['uid', '=', $room_info['room_owner_uid']]; $data = []; $data['charm_value'] = 0; $data['update_time'] = time(); $list = db::name('room_user_cc')->where($map)->select(); if(!empty($list)){ foreach ($list as $k => $v){ $reslut = db::name('room_user_micro_charm_log')->where('cid', $v['cid'])->update(['change_value' => 0, 'update_time' => time()]); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '失败', 'data' => '']; } } $reslut = db::name('room_user_cc')->where($map)->update($data); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => "失败", 'data' => null]; } } Db::commit(); $this->push_room_micro_data($room_info['rid']); return ['code' => 200, 'msg' => "成功", 'data' => null]; } catch (\Exception $e) { dump($e); //回滚事务 Db::rollback(); return ['code' => 201, 'msg' => "失败", 'data' => null]; } } //发起PK public function launch_room_pk($uid, $rid, $group_a, $group_b, $pk_type, $pk_time) { $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_close', '=', 1]; $info = db::name('room_pk')->where($map)->find(); if (!empty($info)) { return ['code' => 201, 'msg' => '当前房间已有PK进行中', 'data' => null]; } $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_info = db::name('room')->field('rid,tid,room_micro,room_owner_uid,room_admin_uid')->where($map)->find(); if (empty($room_info)) { return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } //判断分组内人是否再麦位 $group_a_arr = explode(",", $group_a); $group_b_arr = explode(",", $group_b); if (count($group_a_arr) < 1) { return ['code' => 201, 'msg' => 'A组至少添加一人', 'data' => null]; } if (count($group_b_arr) < 1) { return ['code' => 201, 'msg' => 'B组至少添加一人', 'data' => null]; } $group_all = array_merge($group_a_arr, $group_b_arr); $now_room_micro = explode(",", $room_info['room_micro']); //PK选择用户与麦位用户求交集 如果交集元素数量不等于PK选择用户数量 则选择人员有误 $diff_group_all = array_intersect($group_all, $now_room_micro); if (count($diff_group_all) != count($group_all)) { return ['code' => 201, 'msg' => '麦位用户发生变化,请重新选择', 'data' => null]; } if (!in_array($pk_type, [1, 2])) { return ['code' => 201, 'msg' => 'PK类型参数非法', 'data' => null]; } //判断PK时间是否合法 if (intval($pk_time) != $pk_time) { return ['code' => 201, 'msg' => 'PK时间必须为整数', 'data' => null]; } if ($pk_time < 10 || $pk_time > 3600) { return ['code' => 201, 'msg' => 'PK时间必须再1~60分钟之间', 'data' => null]; } $data = []; $data['create_uid'] = $uid; $data['rid'] = $rid; $data['uid'] = $group_a; $data['receive_uid'] = $group_b; $data['uid_value'] = 0; $data['receive_uid_value'] = 0; $data['pk_type'] = $pk_type; $data['is_close'] = 1; $data['pk_time'] = $pk_time; $now_time = time(); $data['pk_time'] = $pk_time; $data['over_time'] = $now_time + $pk_time; $data['add_time'] = $now_time; $data['update_time'] = $now_time; $status = db::name('room_pk')->insert($data); if ($status) { //推送房间内开始PK $data = $this->get_room_pk_push_data($rid); $push_data = []; $push_data['code'] = 220; $push_data['msg'] = "PK结果数据"; $push_data['data'] = $data['data']; model('api/WebSocketPush')->send_to_group($rid, $push_data); } return ['code' => 200, 'msg' => '创建成功', 'data' => null]; } //获取房间PK信息 public function get_room_pk_info($rid) { $data = $this->get_room_pk_push_data($rid); if ($data['data']['is_close'] != 1) { return ['code' => 200, 'msg' => '获取成功', 'data' => null]; } return ['code' => 200, 'msg' => '获取成功', 'data' => $data['data']]; } //获取PK数据推送内容 public function get_room_pk_push_data($rid) { $map = []; $map[] = ['rid', '=', $rid]; $info = db::name('room_pk')->where($map)->order('pkid desc')->find(); if (empty($info)) { return ['code' => 201, 'msg' => 'PK场次不存在', 'data' => null]; } $uid_arr = explode(",", $info['uid']); $receive_uid_arr = explode(",", $info['receive_uid']); $group_a_uid_info = model('api/User')->get_base_user_info($uid_arr[0]); $group_b_uid_info = model('api/User')->get_base_user_info($receive_uid_arr[0]); $data = []; $data['group_a_user_info']['nick_name'] = $group_a_uid_info['data']['nick_name']; $data['group_a_user_info']['head_pic'] = $group_a_uid_info['data']['head_pic']; $data['group_b_user_info']['nick_name'] = $group_b_uid_info['data']['nick_name']; $data['group_b_user_info']['head_pic'] = $group_b_uid_info['data']['head_pic']; $data['group_a_value'] = $info['uid_value']; $data['group_b_value'] = $info['receive_uid_value']; $data['pk_type'] = $info['pk_type']; $data['end_seconds'] = $info['over_time'] - time(); $data['is_close'] = $info['is_close']; if ($data['is_close'] == 1) { $data['winner_group'] = 0; //未出结果 } else { if ($info['uid_value'] > $info['receive_uid_value']) { $data['winner_group'] = 1; //A组胜利 } elseif ($info['uid_value'] < $info['receive_uid_value']) { $data['winner_group'] = 2; //B组胜利 } else { $data['winner_group'] = 3; //平局; } } return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //获取房间PK历史记录 public function get_room_pk_list($rid, $page, $page_limit) { $page = intval($page); $page_limit = $page_limit < 10 ? $page_limit : 10; $map = []; $map[] = ['rid', '=', $rid]; $list = db::name('room_pk')->field('pkid,uid,receive_uid,uid_value,receive_uid_value,pk_type,pk_time,is_close,add_time')->where($map)->order('pkid desc')->select(); foreach ($list as $k => &$v) { $uid_arr = explode(",", $v['uid']); $receive_uid_arr = explode(",", $v['receive_uid']); $group_a_uid_info = model('User')->get_base_user_info($uid_arr[0]); $group_b_uid_info = model('User')->get_base_user_info($receive_uid_arr[0]); $v['group_a_user_info']['nick_name'] = $group_a_uid_info['data']['nick_name']; $v['group_a_user_info']['head_pic'] = $group_a_uid_info['data']['head_pic']; $v['group_b_user_info']['nick_name'] = $group_b_uid_info['data']['nick_name']; $v['group_b_user_info']['head_pic'] = $group_b_uid_info['data']['head_pic']; if ($v['is_close'] == 1) { $v['winner_nick_name'] = $group_a_uid_info['nick_name']; } else { if ($v['uid_value'] > $v['receive_uid_value']) { } elseif ($v['uid_value'] < $v['receive_uid_value']) { $v['winner_nick_name'] = $group_b_uid_info['nick_name']; } else { $v['winner_nick_name'] = '平局'; } } } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //结束房间PK public function close_room_pk() { $map = []; $map[] = ['is_close', '=', 1]; $room_pk_list = db::name('room_pk')->where($map)->select(); $pkid_list = array_column($room_pk_list, 'pkid'); $map = []; $map[] = ['pkid', 'in', $pkid_list]; $map[] = ['is_close', '=', 1]; $map[] = ['over_time', '<', time()]; $data = []; $data['is_close'] = 2; $data['close_time'] = time(); db::name('room_pk')->where($map)->update($data); foreach ($room_pk_list as $k => $v) { if ($v['over_time'] < time()) { $data = $this->get_room_pk_push_data($v['rid']); $push_data = []; $push_data['code'] = 220; $push_data['msg'] = "PK结果数据"; $push_data['data'] = $data['data']; model('api/WebSocketPush')->send_to_group($v['rid'], $push_data); } } return ['code' => 200, 'msg' => '执行成功', 'data' => null]; } //webscket调用事件 public function user_enter_room($uid, $rid) { //增加房间在线人数 $map = []; $map[] = ['rid', '=', $rid]; db::name('room')->where($map)->setInc('visitor_num', 1); //添加房间访客记录 $data = []; $data['uid'] = $uid; $data['rid'] = $rid; $data['add_time'] = time(); $data['update_time'] = time(); db::name('room_visitor')->insert($data); $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['room_owner_uid', '=', $uid]; $data = []; $data['is_online'] = 2; db::name('room')->where($map)->update($data); } //清除房间当天热度值 public function clear_room_hot_value(){ $where = []; $where[] = ['today_hot_value', '>', 0]; $data = []; $data['today_hot_value'] = 0; $reslut = db::name('room')->where($where)->update($data); return ['code' => 200, 'msg' => '修改成功', 'data' => $reslut]; } //房间流水统计 public function flowing_water(){ $list=db::name('room')->where(array("room_status"=>1))->field("rid,room_owner_uid")->select(); $start_time=strtotime(date("Y-m-d",time())); $end_time=$start_time+60*60*24; foreach ($list as $k=>$v){ $gift_total_price =db::name('user_send_gift')->where(array("receive_uid"=>$v['room_owner_uid']))->whereTime('add_time','between',[$start_time,$end_time])->sum("gift_total_price"); $reslut = db::name('room')->where(array("rid"=>$v['rid'],"room_owner_uid"=>$v['room_owner_uid']))->update(array("today_hot_value" => $gift_total_price)); } return ['code' => 200, 'msg' => '修改成功', 'data' => $reslut]; } // public function get_uid_room_micro_list($uid){ $room_info = db::name('room')->where('room_owner_uid', $uid)->find(); $rid = $room_info['rid']; //麦位列表 $room_micro = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); $room_micro_list = []; foreach ($room_micro as $a => &$b){ // dump($b); if($b != 0 && $b != -1){ $data = []; $data['uid'] = $b; $head_pic = db::name('user')->where('uid', $b)->value('head_pic'); $data['head_pic'] = localpath_to_netpath($head_pic); $room_micro_list[] = $data; } } //在线人数 $where = []; $where[] = ['a.rid', '=', $room_info['rid']]; $where[] = ['a.uid', 'not in', $room_micro]; $where[] = ['b.is_room_hiding', '=', 2]; $where[] = ['a.is_delete', '=', 1]; $room_number = db::name('room_visitor')->alias('a')->join('yy_user b', 'a.uid = b.uid')->where($where)->count(); $room_number = count($room_micro_list) + $room_number; if(empty($room_info['rid'])){ $rid = 0; }else{ $rid = $room_info['rid']; } $data = []; $data['rid'] = $rid; $data['room_number'] = $room_number; $data['room_micro_list'] = $room_micro_list; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //房间榜 public function get_rooms_rank($uid, $time){ if(!in_array($time, [1,2,3])){ return ['code' => 201, 'msg' => '参数类型非法', 'data' => null]; } if($time == 1){ $whereTime = 'today'; }else if($time == 2){ $whereTime = 'week'; }else if($time == 3){ $whereTime = 'month'; } $map = []; $map[] = ['b.room_status', '=', 1]; $list = db::name('user_contribution_count_day')->alias('a')->join('yy_room b', 'a.rid = b.rid')->where($map)->whereTime('a.add_time', $whereTime)->field('a.rid, sum(a.amount) as total_amount,b.room_name,b.base64_room_name,b.room_cover,b.room_owner_uid,b.room_number')->group('a.rid')->order('total_amount desc')->limit(100)->select(); foreach ($list as $k => &$v){ $v['room_name'] = mb_convert_encoding(base64_decode($v['base64_room_name']), 'UTF-8', 'UTF-8'); $v['room_cover'] = localpath_to_netpath($v['room_cover']); } $data = []; $data['list'] = $list; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //房主 主持 管理员 public function exec_room_user_black($uid, $rid, $black_id,$status){ $room_info = db::name('room')->alias('a')->where(['rid'=>$rid])->field('rid,room_admin_uid,room_owner_uid')->find(); if(empty($room_info)){ return ['code' => 201, 'msg' => '房间不存在!', 'data' => null]; } //房主 主持 管理员 $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } //房主不可被拉黑 [被拉黑人员判断] if($black_id == $room_info['room_owner_uid']){ return ['code' => 201, 'msg' => '房主不可被拉黑', 'data' => null]; }else{ //被拉黑人员不是房主 执行人员也不是房主 if($uid != $room_info['room_owner_uid']){ if(in_array($black_id, $room_admin_uid_arr)){ return ['code' => 201, 'msg' => '管理员不可被拉黑!', 'data' => null]; } if(in_array($black_id, $room_host_uid_arr)){ return ['code' => 201, 'msg' => '主持不可被拉黑!', 'data' => null]; } } } if(!in_array($status,[1,2])){ return ['code' => 201, 'msg' => '状态设置有误!', 'data' => null]; } $is_black = db::name('user')->where(['uid'=>$black_id])->field('uid')->find(); if(empty($black_id)){ return ['code' => 201, 'msg' => '被拉黑人员不存在!', 'data' => null]; } $is_black = db::name('room_user_black')->where(['rid'=>$rid,'black_id'=>$black_id])->field('uid')->find(); if($status==1){ if(!empty($is_black)){ return ['code' => 201, 'msg' => '已经拉黑过该人员了!', 'data' => null]; } }else{ if(empty($is_black)){ return ['code' => 201, 'msg' => '该人员已经取消过拉黑了!', 'data' => null]; } } //拉黑 if($status==1){ db::name('room_user_black')->insert([ 'rid'=>$rid, 'uid'=>$uid, 'black_id'=>$black_id, 'add_time'=>time(), 'update_time'=>time() ]); $push_data = []; $push_data['code'] = 1211; $push_data['msg'] = "房间内被拉黑"; $push_data['data'] = ['rid'=>$rid,'uid'=>$black_id]; model('api/WebSocketPush')->send_to_one($black_id, $push_data); }else{ db::name('room_user_black')->where(['rid'=>$rid,'black_id'=>$black_id])->delete(); } return ['code' => 200, 'msg' => '操作成功!', 'data' => null]; } public function get_room_user_black_list($uid , $rid, $page, $page_limit){ //房主 主持 管理员 $room_info = db::name('room')->where(['rid'=>$rid])->field('rid,room_admin_uid,room_owner_uid')->find(); if(empty($room_info)){ return ['code' => 201, 'msg' => '房间不存在!', 'data' => null]; } $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); $room_host_uid_arr = db::name('room_host')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) { return ['code' => 201, 'msg' => '暂无权限查看!', 'data' => null]; } $list = db::name('room_user_black') ->alias('rb') ->where(['rb.rid'=>$rid]) ->field('rb.*,u.nick_name,u.base64_nick_name,head_pic,u.special_uid') ->join('yy_user u','u.uid = rb.black_id') ->page($page, $page_limit) ->select(); array_walk($list,function(&$item){ $item['nick_name'] = mb_convert_encoding(base64_decode($item['base64_nick_name']), 'UTF-8', 'UTF-8'); $item['head_pic'] = localpath_to_netpath($item['head_pic']); $item['uid'] = $item['black_id']; //获取用户魅力 财富等级 $reslut = model('api/User')->get_user_charm_contribution_info($item['black_id']); $item['user_charm_contribution_info'] = $reslut['data']; $user_nobility_info = model('user')->get_user_nobility_info($item['black_id']); $item['nobility_image'] = $user_nobility_info['data']['nobility_image']; unset($item['black_id'],$item['base64_nick_name']); }); if(empty($list)){ $list = null; } return ['code' => 200, 'msg' => 'success', 'data' => $list]; } //清理机器人房间 public function auto_clear_robot_room(){ //有机器人的房间 $now_robot_rids = db::name('room')->where([['robot_num','>',0]])->column('rid'); //有人的房间 $now_robot_person_rids = db::name('room_visitor')->where('rid','in',$now_robot_rids)->group('rid')->column('rid'); //没人的房间 $now_robot_empty_rids = array_diff($now_robot_rids,$now_robot_person_rids); if(empty($now_robot_empty_rids)){ return ['code' => 201, 'msg' => '没有检索到空房间', 'data' => null]; } try { Db::startTrans(); //新机器人 if(!empty($now_robot_empty_rids)){ //取消机器人 db::name('room')->where([['rid','in',$now_robot_empty_rids]])->update(['robot_num'=>0]); db::name('user')->where([['is_sys_tester','=',1],['belong_rid','in',$now_robot_empty_rids]])->update(['belong_rid'=>0,'update_time'=>time()]); } Db::commit(); return ['code' => 200, 'msg' => '清理成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 Db::rollback(); return ['code' => 201, 'msg' => '清理失败', 'data' => null]; } } }