Files
mier-php/application/api/model/Room.php
2025-08-11 10:22:05 +08:00

4715 lines
215 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\api\model;
use think\Db;
use think\Model;
class Room extends Model
{
//获取房间列表
public function get_room_list($room_number, $tid, $cate_id, $is_top, $is_hot, $sort, $sort_type, $page, $page_limit)
{
$page = intval($page);
$page_limit = $page_limit < 20 ? $page_limit : 20;
$map = [];
$map[] = ['a.is_delete', '=', 1];
$map[] = ['a.room_status', '=', 1];
if (!empty($is_top)) {
$map[] = ['a.is_top', '=', $is_top];
$page_limit = 9999;
}
if (!empty($is_hot)) {
$map[] = ['a.is_hot', '=', $is_hot];
}
if (!empty($room_number)) {
$map[] = ['a.room_number', '=', $room_number];
}
if (!empty($tid)) {
$map[] = ['a.tid', '=', $tid];
}
if (!empty($cate_id)) {
$map[] = ['a.cate_id', '=', $cate_id];
}
// $map[] = ['c.visitors_num', '>', 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];
}
}
}