This commit is contained in:
2025-10-20 09:59:39 +08:00
parent e73091cdf3
commit a4858d47fc
2834 changed files with 6510 additions and 438740 deletions

View File

@@ -28,10 +28,20 @@ class Room extends Model
return ['code' => 0, 'msg' => '请先进行实名认证通过后操作', 'data' => null];
}
//检查房间名称是否包含官方等词
//名称中不能有 系统管理 等关键字
if(!nickname_filter($room_name)){
return ['code' => 0, 'msg' => '名称中不能有 系统、管理、官方等相关敏感字', 'data' => null];
}
if($type <= 0){
$room_info = db::name('vs_room')->where(['user_id' => $uid, 'type_id' => ['<>',6]])->find();
$room_info = db::name('vs_room')->where(['user_id' => $uid, 'type_id' => ['<>',6], 'apply_status' => ['<>',3]])->find();
if (!empty($room_info)) {
return ['code' => 0, 'msg' => '已有直播间请勿重复创建', 'data' => null];
if($room_info['apply_status'] == 2){
return ['code' => 0, 'msg' => '已有直播间请勿重复创建', 'data' => null];
}elseif($room_info['apply_status'] == 1){
return ['code' => 0, 'msg' => '房间审核中,请耐心等待', 'data' => null];
}
}else{
//首次建立房间【完成任务】
model('DailyTasks')->tasks_complete($uid,15);
@@ -42,20 +52,29 @@ class Room extends Model
$data['room_number'] = $this->get_user_code();
$data['type_id'] = 1;
$data['apply_status'] = 1;
}else{//cp电影房
$data['label_id'] = 1;
}elseif ($type == 7){
$data['room_number'] = $this->get_user_code();
$data['type_id'] = 6;//cp电影房
$room_intro = $room_intro.'('.$type.')';
$data['apply_status'] = 2;
$data['label_id'] = 5;
}
else{//cp电影房
$data['room_number'] = $this->get_user_code();
$data['type_id'] = 6;//cp电影房
$room_intro = $room_intro.'('.$type.')';
$data['apply_status'] = 2;
$data['label_id'] = 1;
}
$data['user_id'] = $uid;
$data['room_name'] = $room_name;
$data['room_cover'] = $room_cover;
$data['room_intro'] = $room_intro;
$data['room_background'] = get_system_config_value('web_site').'/data/default/delfultroombackground.jpg';
$room_bg_img = db::name('vs_room_background')->where(['id' => 2])->value('image_url');
$data['room_background'] = $room_bg_img ?? get_system_config_value('web_site').'/data/default/delfultroombackground.jpg';
$data['is_earnings'] = 1;
$data['label_id'] = 1;
$data['createtime'] = time();
Db::startTrans();
@@ -143,7 +162,7 @@ class Room extends Model
if(!empty($data)){
$reslut = $this->where('id', $room_id)->update($data);
if (!$reslut) {
return ['code' => 0, 'msg' => '修改失败', 'data' => null];
return ['code' => 0, 'msg' => '请勿重复提交', 'data' => null];
}
}
//推送消息
@@ -182,24 +201,14 @@ class Room extends Model
}
$list = db::name('vs_room')->field('id as room_id,room_number,user_id,room_name,room_cover,room_password,today_hot_value as hot_value,label_id,is_show_room')
->where($map)->order('hot_value desc')->page($page, $page_limit)->select();
// var_dump($list);
foreach ($list as $k => &$v){
if($v['is_show_room'] == 2){ //是否显示房间 1是2否
//查询当前房间是否有主持在麦上
$room_host_info = db::name('vs_room_pit')->where(['room_id' => $v['room_id'], 'pit_number' => 9])->value('user_id');
if($room_host_info == 0){
unset($list[$k]);
continue;
}
}
// $v['hot_value'] = $v['hot_value'] * 10;
->where($map)->order('hot_value desc, id asc')->page($page, $page_limit)->select();
foreach ($list as &$v){
$v['user_list'] = model('RoomUser')->get_room_user_list($v['room_id']);
$v['label_name'] = db::name('vs_room_label')->where('id', $v['label_id'])->value('label_name');
$v['label_icon'] = db::name('vs_room_label')->where('id', $v['label_id'])->value('label_icon');
}
//$list 不为空 数组重组
$list = array_values((array)$list);
//版本号
$app_version = request()->header('App-Version');
$system = request()->header('system');
@@ -215,32 +224,6 @@ class Room extends Model
return ['code' => 1, 'msg' => '获取成功', 'data' => $list, 'api_version' => $api_version];
}
//关注的用户现在所在房间(废弃)
public function user_follow_in_room_list($uid ,$page, $page_limit)
{
//关注的用户列表
$follow_list = db::name('user_follow')->where('user_id', $uid)->field('follow_user_id')->select();
if(!empty($follow_list)){
$user_room_list = [];
foreach ($follow_list as $k => $v){
//用户是否在房间中
$user_room_info = db::name('vs_room_visitor')->where('user_id', $v['follow_user_id'])->field('room_id')->find();
if(!empty($user_room_info)){
$user_room_list[] = $user_room_info['room_id'];
}
}
}
if(!empty($user_room_list)){
$list = db::name('vs_room')->field('id as room_id,room_number,user_id,room_name,room_cover,room_password,today_hot_value as hot_value')
->where('id', 'in', $user_room_list)->order('hot_value desc')->page($page, $page_limit)->select();
foreach ($list as $k => &$v){
// $v['hot_value'] = $v['hot_value'] * 10;
$v['user_list'] = model('RoomUser')->get_room_user_list($v['id']);
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $list];
}
return ['code' => 1, 'msg' => '获取成功', 'data' => []];
}
//首页弹出的房间
public function index_recommend_room()
@@ -289,7 +272,7 @@ class Room extends Model
$roomInfo = db::name('vs_room')
->field('id as room_id,room_number,user_id,room_name,room_cover,apply_status,type_id,room_status,label_id')
->where('user_id' , $uid)
->where(['type_id' => ['<>',6],'room_status' =>1])
->where(['type_id' => ['<>',6],'room_status' =>1,'apply_status' => ['<>',3]])
->page($page, $page_limit)
->select();
}
@@ -305,8 +288,15 @@ class Room extends Model
$v['is_use_code'] = 1;
$v['room_number'] = $liang;
}
//今日收益
$v['today_profit'] = $this->get_room_today_profit($v['room_id']) * 10;
if($type == 1) {//1-我主持的
//今日收益
$v['today_profit'] = round( $this->get_room_today_earnings($v['room_id'],$uid),4);
}else{
//今日流水
//金币与魅力比例
$ratio = get_system_config_value('coin_charm_exp');
$v['today_profit'] = $this->get_room_today_profit($v['room_id']) * $ratio;
}
//关注数
$v['follow_num'] = db::name('user_follow')->where('follow_id', $v['room_id'])->where('type', 2)->count();
//访问数
@@ -352,7 +342,6 @@ class Room extends Model
}
$cp_room[$i]['room_id'] = $v['room_id'];
// $cp_room[$i]['room_name'] = '我 ❤️ '.$room_name.db::name('vs_room')->where('id', $v['room_id'])->value('room_name');
$cp_room[$i]['room_name'] = '我 ❤️ '.$room_name;
$cp_room[$i]['room_number'] = db::name('vs_room')->where('id', $v['room_id'])->value('room_number');
$cp_room[$i]['end_time'] = $v['time_day'];
@@ -366,7 +355,7 @@ class Room extends Model
return $cp_room;
}
//房间今日收益
//房间今日流水
public function get_room_today_profit($room_id)
{
$room_type = db::name('vs_room')->where('id', $room_id)->value('type_id');
@@ -381,6 +370,17 @@ class Room extends Model
return $profit;
}
//房间今日主持收益
public function get_room_today_earnings($room_id,$user_id)
{
$today_start_time = strtotime(date('Y-m-d'));
$today_end_time = $today_start_time + 86400;
return Db::name('vs_user_money_log')
->where(['room_id' => $room_id,'user_id' => $user_id,'change_type' =>19])
->whereBetween('createtime', [$today_start_time, $today_end_time])
->sum('change_value');
}
//房间补贴
public function room_ubsidy($room_id){
$room_type = db::name('vs_room')->where('id', $room_id)->value('type_id');
@@ -461,17 +461,8 @@ class Room extends Model
if(!$room){
return ['code' => 0, 'msg' => '房间不存在', 'data' => null];
}
//获取房间名称
// $room_name = $room['room_name'];
//查询房主是否加入公会
// $guild_id = model('Guild')->user_is_join($room['user_id']);
// //获取房主收益比例
// if($guild_id > 0){
// $room_user_ratio = get_system_config_value('room_author_guild_ratio')/100;
// }else{
$room_user_ratio = get_system_config_value('room_author_ratio')/100;
// }
$room_user_ratio = get_system_config_value('room_author_ratio')/100;
//根据日期查询房间流水
$field = "b.nickname as sender_nickname,b.avatar as sender_avatar,c.nickname as receive_nickname,c.avatar as receive_avatar,dd.gift_name,a.number,a.total_price,{$group_field} as time";
@@ -487,17 +478,9 @@ class Room extends Model
$where['a.createtime'] = ['between', [$begin_time, $end_time]];
}
// $count = db::name('vs_give_gift')->alias('a')->field($field)
// ->join('user b', 'a.user_id = b.id')
// ->join('user c', 'a.gift_user = c.id')
// ->join('vs_give_gift d', 'a.gift_id = d.id')
// ->where($where)
// ->count();
$list = db::name('vs_give_gift')->alias('a')->field($field)
->join('user b', 'a.user_id = b.id')
->join('user c', 'a.gift_user = c.id')
// ->join('vs_give_gift d', 'a.gift_id = d.id')
->join('vs_gift dd', 'a.gift_id = dd.gid')
->where($where)
->page($page,$page_limit)
@@ -547,10 +530,13 @@ class Room extends Model
//进入房间
public function join_room($user_id, $room_id, $password) {
$room = db::name('vs_room')->where(['id' => $room_id,'apply_status' => 2])->find();
$room = db::name('vs_room')->where(['id' => $room_id,'apply_status' => ['in',[1,2]]])->find();
if (!isset($room)) {
return ['code' => 0, 'msg' => '房间不存在', 'data' => ''];
}
if($room['apply_status'] == 1){
return ['code' => 0, 'msg' => '房间正在审核中……', 'data' => ''];
}
if(isset($room['password']) && $user_id != $room['user_id']){
if (empty($password) || $room['password'] != md5($password)) {
return ['code' => 0, 'msg' => '密码错误', 'data' => ''];
@@ -584,19 +570,18 @@ class Room extends Model
}
//用户是否在其他房间
$room_user = db::name('vs_room_visitor')->where(['user_id' => $user_id])->value('room_id');
if (isset($room_user) && $room_user != $room_id) {
// return ['code' => 0, 'msg' => '您已在其他房间', 'data' => ''];
//根据房间状态判断是否要退出房间并且下麦
$room_user = db::name('vs_room_visitor')->where(['user_id' => $user_id])->order('id desc')->value('room_id');
if (isset($room_user) && $room_user != $room_id && $room_user != 0) {
//根据所在房间状态判断是否要退出房间并且下麦
$roomInfo = db::name('vs_room')->where(['id' => $room_user,'apply_status' => 2])->find();
if(($roomInfo['type_id'] == 1 || $roomInfo['type_id'] == 3 || $roomInfo['type_id'] == 4)&& $roomInfo['label_id'] == 1){
if(($roomInfo['type_id'] == 1 || $roomInfo['type_id'] == 3 || $roomInfo['type_id'] == 4 || $roomInfo['type_id'] == 8)&& $roomInfo['label_id'] == 1){
//退出其他房间
$this->quit_room($user_id, $room_user,$user_id);
}elseif(($roomInfo['type_id'] == 1 || $roomInfo['type_id'] == 3 || $roomInfo['type_id'] == 4)&& $roomInfo['label_id'] == 2){//k歌
}elseif(($roomInfo['type_id'] == 1 || $roomInfo['type_id'] == 3 || $roomInfo['type_id'] == 4 || $roomInfo['type_id'] == 8)&& $roomInfo['label_id'] == 2){//k歌
//他的点歌列表
$song_list = db::name('vs_room_song')->where(['room_id' => $room_user, 'user_id' => $user_id])->select();
if(count($song_list) > 0){
foreach ($song_list as $key => $value){
foreach ($song_list as $value){
if($value['status'] == 2 && $value['times_status'] == 1){
//切歌
model('api/RoomSong')->change_song($room_id,$value['did']);
@@ -608,7 +593,7 @@ class Room extends Model
}
//记录用户退出房
$this->quit_room($user_id, $room_user,$user_id);
}elseif($roomInfo['type_id'] == 3){
}elseif($roomInfo['type_id'] == 2){
//是否在拍卖位
$pitNumber = Cache::get('auction_user_'.$room_user);
if(isset($pitNumber) && $pitNumber == $user_id){
@@ -636,7 +621,7 @@ class Room extends Model
$user_pit = 0;
$pit_list = [];
$cp_users = null;
if($room['type_id'] == 1 || $room['type_id'] == 3 || $room['type_id'] == 4) {//1点唱3男神4女神
if($room['type_id'] == 1 || $room['type_id'] == 3 || $room['type_id'] == 4 || $room['type_id'] == 7 || $room['type_id'] == 8) {//1点唱3男神4女神
if($room['label_id'] == 2){//K歌
$song = $this->get_song_info($room_id,$user_id);
$song_list = $song['song_user_info'];
@@ -706,6 +691,7 @@ class Room extends Model
if (!$is_join) {
db::name('vs_room_visitor')->insert(['room_id' => $room_id, 'user_id' => $user_id, 'createtime' => time()]);
}
db::name('user_data')->where('user_id', $user_id)->update(['room_id' => $room_id]);
$room['is_use_code'] = 0;
$liang = model('api/Decorate')->user_decorate_detail($room['id'],7);
@@ -853,6 +839,27 @@ class Room extends Model
if($user_id != $room_owner['user_id']){
model('api/User')->add_user_visit_log(2,$user_id, $room_id);
}
//交友相关回值
if($room['type_id'] == 7){
$friend = $this->getRoomFriendData($room_id);
//交友状态 交友进行到第几步 1等待邂逅 2心动连线 3牵手良缘
$friend['step'] =$room['step'];
}else{
$friend = null;
}
$xlh_info['xlh_info'] = model('BlindBoxTurntableGift')->get_user_xlh_info($room_id);
$open_time = db::name('vs_hour_ranking_config')->where('id', 1)->value('open_time');
if($open_time > 0){
if($open_time <= time()){
$hour_open = 1;//开启
}else{
$hour_open = 0;//关闭
}
}else{
$hour_open = 0;//关闭
}
return ['code' => 1,
'msg' => '成功',
'data' => ['room_info' => $room_info,
@@ -863,7 +870,10 @@ class Room extends Model
'room_auction'=>$roomauction,
'cp_user'=>$cp_users,
'pk_info' => $pk_info,
'song_pit_list' => $song_pit_list
'song_pit_list' => $song_pit_list,
'friend_info' => $friend,
'gift_cycle' => $xlh_info,
'hour_ranking_open' => $hour_open
]
];
}
@@ -1072,10 +1082,14 @@ class Room extends Model
$room_label = $res['data']['label_id'];
$room_type = $res['data']['type_id'];
$apply_type = 0;
if($room_label == 1 && ($room_type == 1 || $room_type == 3 || $room_type == 4)){
if($room_label == 1 && ($room_type == 1 || $room_type == 3 || $room_type == 4 || $room_type == 8)){
$apply_type = 1;
}elseif ($room_label == 2 && ($room_type == 1 || $room_type == 3 || $room_type == 4)){
}elseif ($room_label == 2 && ($room_type == 1 || $room_type == 3 || $room_type == 4 || $room_type == 8)){
$apply_type = 2;
}elseif ($room_type == 7){//交友房 再开始阶段在麦位上不下麦
$apply_type = 3;
}elseif($room_type == 6 && $room_label == 5){ //交友私密屋
$apply_type = 4;
}
if($apply_type == 1){
@@ -1101,7 +1115,18 @@ class Room extends Model
$text['pit_number'] = '';
model('api/Chat')->sendMsg(1004,$room_id,$text);
}
}else{
}elseif ($apply_type == 3){
$roomInfoStep = db::name('vs_room')->where(['id' => $room_id])->value('step');
$room_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $user_id])->find();
if($roomInfoStep == 1 || ($roomInfoStep == 2 && ($room_pit['pit_number'] == 9 || $room_pit['pit_number'] == 10))){
if (isset($room_pit)) {
model('api/RoomPit')->DownPit($user_id, $room_id, $room_pit['pit_number']);
}
}
}elseif ($apply_type == 4){
model('api/Friend')->outRoom($uid, $room_id);
}
else{
//在麦位上 移除用户
$room_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $user_id])->find();
if (isset($room_pit)) {
@@ -1132,7 +1157,7 @@ class Room extends Model
}else{
$room_typer = '管理员';
}
db::name('vs_room_black')->insert(['room_id' => $room_id, 'user_id' => $uid,'black_id' => $user_id,'type' => 1,'kick_time' => time()+300,'createtime' => time()]);
db::name('vs_room_black')->insert(['room_id' => $room_id, 'user_id' => $uid,'black_id' => $user_id,'type' => 1,'kick_time' => time()+600,'createtime' => time()]);
//发送消息
$text['text'] = '用户 ' . $nickname . ' 被 '. $room_typer .' 踢出房间';
@@ -1140,6 +1165,12 @@ class Room extends Model
//1-禁麦位2-清空消息3-清空魅力值4-加入黑名单5-踢出房间6-关闭麦克风7-申请上麦8-同意上麦9-拒绝上麦10-点歌11-开启PK',
model('api/Room')->room_operation_record($uid,$room_id,5,$user_id);
}
if($type == 2){
$text['text'] = '用户 ' . $nickname . ' 被 踢出房间';
model('api/Chat')->sendMsg(1011,$room_id,$text,$user_id);
//1-禁麦位2-清空消息3-清空魅力值4-加入黑名单5-踢出房间6-关闭麦克风7-申请上麦8-同意上麦9-拒绝上麦10-点歌11-开启PK',
model('api/Room')->room_operation_record($uid,$room_id,5,$user_id);
}
if($type == 0){
//发送消息
$text['text'] = '用户 ' . $nickname .' 退出了房间';
@@ -1168,13 +1199,6 @@ class Room extends Model
$where['a.createtime'] = ['between', [strtotime('this week Monday'), time()]];
}
if($type == 1){//1财富榜2魅力榜
// $list = db::name('vs_room_user_charm')->alias('a')
// ->join('user b', 'a.user_id = b.id')
// ->field('a.user_id,b.nickname,b.avatar,a.total_wealth as total')
// ->where($where)
// ->order('a.total_wealth desc')
// ->page($page, $limit)
// ->select();
$list = db::name('vs_give_gift')->alias('a')
->join('user b', 'a.user_id = b.id')
->field('a.user_id,b.nickname,b.avatar,sum(a.total_price) * 10 as total')
@@ -1184,13 +1208,6 @@ class Room extends Model
->page($page, $limit)
->select();
}else{
// $list = db::name('vs_room_user_charm')->alias('a')
// ->join('user b', 'a.user_id = b.id')
// ->field('a.user_id,b.nickname,b.avatar,a.total_charm as total')
// ->where($where)
// ->order('a.total_charm desc')
// ->page($page, $limit)
// ->select();
$list = db::name('vs_give_gift')->alias('a')
->join('user b', 'a.gift_user = b.id')
->field('a.gift_user as user_id,b.nickname,b.avatar,sum(a.total_price) * 10 as total')
@@ -1213,7 +1230,7 @@ class Room extends Model
//房间送礼
public function room_gift($uid, $to_uid, $gift_id, $gift_num,$type, $room_id, $pit_number)
public function room_gift($uid, $to_uid, $gift_id, $gift_num,$type, $room_id, $pit_number, $heart_id,$give_gift_ext="")
{
$label_type = model('Room')->get_room_label($room_id);
if($label_type['code'] != 1){
@@ -1228,11 +1245,11 @@ class Room extends Model
//$from_type 来源 1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼
//$type 1金币购买 2送背包礼物
//送礼人接收者礼物id礼物数量来源类型来源id房间id麦位
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number);
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number,0,$give_gift_ext);
return $res;
}elseif (($label_type['data']['type_id'] == 1 || $label_type['data']['type_id'] == 3 || $label_type['data']['type_id'] == 4) && $label_type['data']['label_id'] == 2)//K歌type_id = 1label_id = 2
}elseif (($label_type['data']['type_id'] == 1 || $label_type['data']['type_id'] == 3 || $label_type['data']['type_id'] == 4 || $label_type['data']['type_id'] == 8) && $label_type['data']['label_id'] == 2)//K歌type_id = 1label_id = 2
{
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number);
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number,0,$give_gift_ext);
if($res['code'] == 1){
$room_pits = model('RoomSong')->get_charm_rank($room_id);
if($room_pits['code'] == 1){
@@ -1246,13 +1263,31 @@ class Room extends Model
}
return $res;
}elseif($label_type['data']['type_id'] == 6){
return model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,6,$type, $room_id,$pit_number);
return model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,6,$type, $room_id,$pit_number,0,$give_gift_ext);
}elseif($label_type['data']['type_id'] == 7){
return model('Friend')->room_give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number,$heart_id,$give_gift_ext);
}else{
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number);
return $res;
return model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number,0,$give_gift_ext);
}
}
//背包礼物一键全清
public function room_gift_all_clear($uid, $room_id, $user_id,$heart_id,$auction_id = 0)
{
$user_gift_pack = db::name('vs_user_gift_pack')->where(['user_id'=>$uid,'is_tester'=>1,'is_use_give'=>1,'num'=>['>',0]])->select();
if (empty($user_gift_pack)) {
return ['code' => 0, 'msg' => '用户背包礼物不足', 'data' => null];
}
foreach ($user_gift_pack as $v){
if($auction_id){//竞拍
model('RoomAuction')->room_auction_join($auction_id,$uid,$v['gid'],$v['num'],2);
}else{
$this->room_gift($uid, $user_id, $v['gid'], $v['num'],2,$room_id, 0,$heart_id);
}
}
return ['code' => 1, 'msg' => '成功', 'data' => null];
}
//房间在线列表
public function room_online_list($room_id, $page, $limit)
@@ -1263,83 +1298,29 @@ class Room extends Model
if ($label_type['code'] != 1) {
return ['code' => 0, 'msg' => '房间不存在', 'data' => null];
}
//获取在房间的用户
$in_room_users = db::name('vs_room_visitor')->where(['room_id' => $room_id])->field('user_id')->select();
if($in_room_users){
foreach ($in_room_users as $v){
$userss = db::name('user')->where(['id' => $v['user_id']])->field('is_online,is_robot')->find();
if($userss['is_online'] == 1 && $userss['is_robot'] == 1){//在线或者机器人都设置为在线
db::name('vs_room_visitor')->where(['id' => $v['id']])->update(['on_line' => 1]);
//查询房间里面的用户
$room_user = db::name('vs_room_visitor')->where(['room_id' => $room_id])->select();
if($room_user){
foreach ($room_user as $vv){
if(($label_type['data']['type_id'] == 1 || $label_type['data']['type_id'] == 8) && $label_type['data']['label_id'] == 1){
//不做处理
}else{
db::name('vs_room_visitor')->where(['id' => $v['id']])->update(['on_line' => 0]);
//查询是否有切后台的操作
$bg_room = db::name('vs_user_in_room_bg')->where(['room_id' => $room_id,'user_id' => $vv['user_id']])->find();
if(Db::name('user')->where('id', $vv['user_id'])->value('is_online') == 0 && !$bg_room){
model('Room')->quit_room($vv['user_id'], $room_id,$vv['user_id'],2);
}
}
}
}
// //查找数据库用户
// $dblist = db::name('vs_room_visitor')->where(['room_id' => $room_id])->field('user_id')->select();
// //循环获取在线用户ID 拼接数据
// $user_id_array = [];
// //机器人user_id
// $robot_user_id = [];
// foreach ($dblist as $v) {
// //机器人
// if(db::name('user')->where(['id' => $v['user_id']])->value('is_robot')){
// $robot_user_id[] = $v['user_id'];
// continue;
// }
// $user_id_array[] = 'u'.$v['user_id'];
// }
// //获取腾讯的在线用户
// $online_users = model('Tencent')->query_user_online_status($user_id_array);
// $online_user = [];
// if(isset($online_users['ActionStatus']) && $online_users['ActionStatus'] == 'OK'){
// if($online_users['QueryResult']){
// foreach ($online_users['QueryResult'] as $v){
// if($v['Status'] == "Online"){
// //截取用户ID前面的 u 并获取用户ID
// $user_id = substr($v['To_Account'],1);
// $online_user[] = $user_id;
// }
// }
// }
// }
//
// if($dblist){
// $onpit = db::name('vs_room_pit')->field('user_id')->where(['room_id' => $room_id])->select();
// //合并数组
// $array = array_merge($online_user,$robot_user_id);
//// $array = $online_user;
// $arraypit = array_values((array)$onpit);
// foreach ($dblist as &$v){
//// if(in_array($v['user_id'],$arraypit)){
//// //跳过本次循环
//// continue;
//// }
// if(!in_array($v['user_id'],$array)){
// //修改他的状态
// db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>$room_id])->update(['on_line' => 0]);
// //查询他是否在其他房间
// $room_id_list = db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>['neq',$room_id]])->find();
// if($room_id_list){
// db::name('vs_room_visitor')->where(['user_id' => $v['user_id']])->delete();
// }
// }else{
// //修改他的状态
// db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>$room_id])->update(['on_line' => 1]);
// }
// }
// }else{
// $lists = ['on_pit' => [], 'off_pit' => []];
// return ['code' => 1, 'msg' => '成功', 'data' => $lists];
// }
$list = db::name('vs_room_visitor')->alias('a')
->join('user b', 'a.user_id = b.id')
->field('a.user_id,b.nickname,b.avatar')
->where(['a.room_id' => $room_id,'on_line' => 1])
->where(['a.room_id' => $room_id,'b.is_online' => 1])
->group('a.user_id')
->order('a.id asc')
->page($page, $limit)
->select();
@@ -1361,17 +1342,16 @@ class Room extends Model
});
}
if($label_type['data']['type_id'] == 7 || ($label_type['data']['type_id'] == 1 || $label_type['data']['type_id'] == 3 || $label_type['data']['type_id'] == 4) && $label_type['data']['label_id'] == 1) {//2卡八麦聊天type_id = 1 || 7(交友label_id = 1
foreach ($list as &$val) {
if($label_type['data']['type_id'] == 7 || ($label_type['data']['type_id'] == 1 || $label_type['data']['type_id'] == 3 || $label_type['data']['type_id'] == 4 || $label_type['data']['type_id'] == 8) && $label_type['data']['label_id'] == 1) {//2卡八麦聊天type_id = 1 || 7(交友label_id = 1
foreach ($list as $val) {
if ($val['pit_number'] > 0) {
$lists['on_pit'][] = $val;
} else {
$lists['off_pit'][] = $val;
}
}
}elseif(($label_type['data']['type_id'] == 1 || $label_type['data']['type_id'] == 3 || $label_type['data']['type_id'] == 4) && $label_type['data']['label_id'] == 2){
foreach ($list as &$val) {
// var_dump($val['pit_number']);exit;
}elseif(($label_type['data']['type_id'] == 1 || $label_type['data']['type_id'] == 3 || $label_type['data']['type_id'] == 4 || $label_type['data']['type_id'] == 8) && $label_type['data']['label_id'] == 2){
foreach ($list as $val) {
if (db::name('vs_room_pit_simulate')->where(['room_id' => $room_id,'user_id' => $val['user_id']])->find() || $val['pit_number'] > 0) {
$lists['on_pit'][] = $val;
} else {
@@ -1391,7 +1371,7 @@ class Room extends Model
if($auct){
//获取数组里面的用户ID 组成新的数组
$user_ids = array_column((array)$auct, 'user_id');
foreach ($list as &$val) {
foreach ($list as $val) {
if (in_array($val['user_id'], $user_ids) || $val['pit_number'] > 0) {
$lists['on_pit'][] = $val;
} else {
@@ -1399,7 +1379,7 @@ class Room extends Model
}
}
}else{
foreach ($list as &$val) {
foreach ($list as $val) {
if ($val['pit_number'] > 0) {
$lists['on_pit'][] = $val;
} else {
@@ -1409,8 +1389,7 @@ class Room extends Model
}
}else{
foreach ($list as &$val) {
// $lists['off_pit'][] = $val;
foreach ($list as $val) {
if ($val['pit_number'] > 0) {
$lists['on_pit'][] = $val;
} else {
@@ -1420,6 +1399,7 @@ class Room extends Model
}
}
return ['code' => 1, 'msg' => '成功', 'data' => $lists];
}
@@ -1472,7 +1452,7 @@ class Room extends Model
$user_info['is_in_pit'] = 1;
}
}
}elseif (($room_type['type_id'] == 1 || $room_type['type_id'] == 3 || $room_type['type_id'] == 4) && $room_type['label_id'] == 1){
}elseif ($room_type['type_id'] == 7 || ($room_type['type_id'] == 1 || $room_type['type_id'] == 3 || $room_type['type_id'] == 4 || $room_type['type_id'] == 8) && $room_type['label_id'] == 1){
$hah = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $user_id])->find();
if($hah){
$user_info['is_in_pit'] = 1;
@@ -1558,6 +1538,7 @@ class Room extends Model
'GiftInfo' => null,
'GiftNum' => null
];
$typee = 0;
if($type == 1){//1-主持,2管理
if($is_add == 1){//1-添加,2-删除
$typee = 1007;
@@ -1633,6 +1614,9 @@ class Room extends Model
if(!$is_host){
return ['code' => 0, 'msg' => '用户不是主持人,不能设置收益', 'data' => null];
}
if($profit < 0 || $profit > 100){
return ['code' => 0, 'msg' => '请输入正确的比例 0-100', 'data' => null];
}
$res = db::name('vs_room_host')->where(['room_id' => $room_id,'user_id' => $user_id,'type' => 1,'delete_time' => null])
->update(['ratio' => $profit]);
if(!$res){
@@ -1642,10 +1626,8 @@ class Room extends Model
}
//清除房间用户的魅力值
public function clear_user_charm($user_id ,$room_id,$uid)
public function clear_user_charm($user_id ,$room_id,$uid='')
{
//判断用户是否在主持麦
// $is_host = db::name('vs_room_pit')->where(['room_id' => $room_id,'user_id' => $user_id,'pit_number' => 9])->find();
$owner = db::name('vs_room')->where(['id' => $room_id, 'user_id' => $user_id])->field('id')->find();
$management = db::name('vs_room_host')->where(['room_id' => $room_id, 'user_id' => $user_id,'delete_time' => null])->find();
if(!$owner && !$management){
@@ -1653,24 +1635,18 @@ class Room extends Model
}
if($uid <= 0){
//获取房间内所有用户
$list = db::name('vs_room_visitor')->field('user_id')->where(['room_id' => $room_id])->select();
//循环清除用户魅力值
if($list){
foreach ($list as $v){
//清除有魅力值的用户
if(db::name('vs_room_user_charm')->where(['room_id' => $room_id,'user_id' => $v['user_id']])->find()){
db::name('vs_room_user_charm')->where(['room_id' => $room_id,'user_id' => $v['user_id']])->update(['charm' => 0]);
}
}
}
db::name('vs_room_user_charm')->where(['room_id' => $room_id])->update(['charm' => 0,'clear_time' => time()]);
//发送消息
$text['text'] = '清除魅力成功';
model('Chat')->sendMsg(1021,$room_id,$text);
}else{
$dd = db::name('vs_room_user_charm')->where(['room_id' => $room_id,'user_id' => $uid])->update(['charm' => 0]);
db::name('vs_room_user_charm')->where(['room_id' => $room_id,'user_id' => $uid])->update(['charm' => 0,'clear_time' => time()]);
//发送消息
$text['text'] = '清除魅力成功';
$text['user_id'] = $uid;
model('Chat')->sendMsg(1059,$room_id,$text);
}
//发送消息
$text['text'] = '清除魅力成功';
model('Chat')->sendMsg(1021,$room_id,$text);
//1-禁麦位2-清空消息3-清空魅力值4-加入黑名单5-踢出房间6-关闭麦克风7-申请上麦8-同意上麦9-拒绝上麦10-点歌11-开启PK',
model('Room')->room_operation_record($user_id,$room_id,3);
return ['code' => 1, 'msg' => '成功', 'data' => null];
@@ -1694,9 +1670,21 @@ class Room extends Model
return ['code' => 0, 'msg' => '房间类型已存在', 'data' => null];
}
if($roomInfo['type_id'] == 7 && ($roomInfo['step'] == 2 || $roomInfo['step'] == 3)){
return ['code' => 0, 'msg' => '请先结束交友后在修改房间类型', 'data' => null];
}
if($roomInfo['type_id'] == 2){
$room_auction = db::name('vs_room_auction')->where(['room_id' => $room_id,'status' => 2])->select();
if($room_auction){
return ['code' => 0, 'msg' => '请先结束竞拍后在修改房间类型', 'data' => null];
}
}
//开启事务
db::startTrans();
if($type == 1 || $type == 3 || $type == 4){
$data = [];
if($type == 1 || $type == 3 || $type == 4 || $type == 8){
$data = [
'label_id' => 1,
'type_id' => $type,
@@ -1712,6 +1700,14 @@ class Room extends Model
'is_song' => 1
];
}
//交友房(互娱)
if($type == 7){
$data = [
'label_id' => 5,
'type_id' => $type,
'room_up_pit_type' => 1,
];
}
$res = db::name('vs_room')->where(['id' => $room_id])->update($data);
if(!$res){
@@ -1737,12 +1733,8 @@ class Room extends Model
db::name('vs_room_pit_simulate')->where(['room_id' => $room_id])->delete();
//申请上麦的全部下麦
model('RoomPit')->clear_apply_pit_list($uid, $room_id);
//处理之前修改的用户房间信息
if($type == 1 || $type == 3 || $type == 4){
db::name('vs_room_pit')->where(['pit_number' =>['>',10]])->update(['status' => 2]);
}
if($type == 1 || $type == 3 || $type == 4){
if($type == 1 || $type == 3 || $type == 4 || $type == 7 || $type == 8){
//查询拍卖房的状态
$room_auction = db::name('vs_room_auction')->where(['room_id' => $room_id,'status' => 2])->select();
if($room_auction){
@@ -1750,10 +1742,16 @@ class Room extends Model
model('RoomAuction')->room_auction_end($room_id,$v['auction_id']);
}
}
//拍卖位上是否有人
$an = Cache::get('auction_user_'.$room_id);
if($an){
//拍卖位下麦
model('api/RoomPit')->host_user_pit($uid,$room_id,888,$an,2);
}
}
if($type == 2){
//清除房间此前的魅力值
db::name('vs_room_user_charm')->where(['room_id' => $room_id])->update(['charm' => 0]);
db::name('vs_room_user_charm')->where(['room_id' => $room_id])->update(['charm' => 0,'clear_time' => time()]);
//10号麦有人就下去
$pit_10 = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number' => 10])->find();
if($pit_10 && $pit_10['user_id'] > 0){
@@ -1769,6 +1767,15 @@ class Room extends Model
'text' => '房间类型已修改type--'.$type
];
model('Chat')->sendMsg(1012,$room_id,$text);
//查询房间里面的用户
$room_user = db::name('vs_room_visitor')->where(['room_id' => $room_id])->select();
if($room_user){
foreach ($room_user as $v){
if(Db::name('user')->where('id', $v['user_id'])->value('is_online') == 0){
model('Room')->quit_room($v['user_id'], $room_id,$v['user_id'],2);
}
}
}
return ['code' => 1, 'msg' => '修改成功', 'data' => null];
}
@@ -1805,6 +1812,11 @@ class Room extends Model
if(!$room_id){
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
}
$user_in_room = db::name('vs_room_visitor')->where(['room_id' => $room_id,'user_id' => $user_id])->find();
if(!$user_in_room){
// return ['code' => 0, 'msg' => '您已不在此房间', 'data' => null];
return ['code' => 0, 'msg' => '', 'data' => null];
}
$room = db::name('vs_room')->where(['id' => $room_id])->find();
$song_list = null;
$next_song_info = null;
@@ -1813,8 +1825,8 @@ class Room extends Model
$pit_list = null;
$roomauction = null;
$cp_users = null;
if($room['type_id'] == 1 || $room['type_id'] == 3 || $room['type_id'] == 4) {
if($room['label_id'] == 1){
if($room['type_id'] == 1 || $room['type_id'] == 3 || $room['type_id'] == 4 || $room['type_id'] == 7 || $room['type_id'] == 8) {
if($room['label_id'] == 1 || $room['label_id'] == 5){
//麦位信息
$pit_list = db::name('vs_room_pit')->alias('a')->join('user b', 'a.user_id = b.id', 'left')
->where(['a.room_id' => $room['id'],'a.status' => 1])
@@ -2002,6 +2014,27 @@ class Room extends Model
$user_info = $this ->get_user_info($room_id,$user_id,$user_pit);
$user_info['is_room_owner'] = ($user_id == $room['user_id']) ? 1 : 0;
//交友相关回值
if($room['type_id'] == 7){
$friend = $this->getRoomFriendData($room_id);
//交友状态 交友进行到第几步 1等待邂逅 2心动连线 3牵手良缘
$friend['step'] =$room['step'];
}else{
$friend = null;
}
$xlh_info['xlh_info'] = model('BlindBoxTurntableGift')->get_user_xlh_info($room_id);
$open_time = db::name('vs_hour_ranking_config')->order('id', 'desc')->value('open_time');
if($open_time > 0){
if($open_time <= time()){
$hour_open = 1;//开启
}else{
$hour_open = 0;//关闭
}
}else{
$hour_open = 0;//关闭
}
return ['code' => 1,
'msg' => '成功',
'data' => ['room_info' => $room_info,
@@ -2012,7 +2045,10 @@ class Room extends Model
'room_auction'=>$roomauction,
'cp_user'=>$cp_users,
'pk_info'=>$pk_info,
'song_pit_list'=>$song_pit_list
'song_pit_list'=>$song_pit_list,
'friend_info' => $friend,
'gift_cycle' => $xlh_info,
'hour_ranking_open' => $hour_open
]
];
}
@@ -2032,11 +2068,7 @@ class Room extends Model
if(!$is_host && !$is_room_owner){
return ['code' => 0, 'msg' => '您没有权限', 'data' => null];
}
//是否在主持麦位上
// $is_pit = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number' => 9])->value('user_id');
// if($uid != $is_pit){
// return ['code' => 0, 'msg' => '您没有权限', 'data' => null];
// }
if(!in_array($is_mute, [1,2,3,4])){
return ['code' => 0, 'msg' => '参数错误!', 'data' => null];
}
@@ -2222,7 +2254,7 @@ class Room extends Model
->join('user c','a.user_id2 = c.id','left')
->join('vs_relation d','a.relation_id = d.id','left')//关系
->field('a.relation_id,a.cp_room_id,a.id,a.user_id1,a.user_id2,a.updatetime,a.time_day,a.end_time,b.nickname as nickname1,b.avatar as avatar1,c.nickname as nickname2,c.avatar as avatar2,d.name as relation_name,d.icon as image')
->where(['a.user_id1' => $user_id,'a.end_time' =>['>',time()],'a.delete_time' => 0])
->where(['a.user_id1' => $user_id,'a.end_time' =>['>',time()],'a.delete_time' => 0,'a.relation_id' => ['>',0]])
->order('a.updatetime desc')
->select();
$room_auction2 = db::name('vs_room_auction_relation')->alias('a')
@@ -2230,7 +2262,7 @@ class Room extends Model
->join('user c','a.user_id2 = c.id','left')
->join('vs_relation d','a.relation_id = d.id','left')//关系
->field('a.relation_id,a.cp_room_id,a.id,a.user_id1,a.user_id2,a.updatetime,a.time_day,a.end_time,b.nickname as nickname1,b.avatar as avatar1,c.nickname as nickname2,c.avatar as avatar2,d.name as relation_name,d.icon as image')
->where(['a.user_id2' => $user_id,'a.end_time' =>['>',time()],'a.delete_time' => 0])
->where(['a.user_id2' => $user_id,'a.end_time' =>['>',time()],'a.delete_time' => 0,'a.relation_id' => ['>',0]])
->order('a.updatetime desc')
->select();
@@ -2475,4 +2507,128 @@ class Room extends Model
return ['code' => 1, 'msg' => '操作成功', 'data' => $data];
}
public function getRoomFriendData($room_id)
{
//交友相关回值
$friend = [];
$friend['friend_id'] = 0;//场次ID
//查询用户交友表
$friend_info = db::name('vs_user_friending')->where(['room_id' => $room_id,'status' => 1])->order('id', 'desc')->find();
$friend['room_on_line_cp'] = 0;
$friend['heart_list'] = [];
$friend['is_preside'] = 0;
$friend['end_time'] = 0;
if($friend_info){
$friend['friend_id'] = $friend_info['id'];
$friend['end_time'] = $friend_info['end_time'];
$friend['heart_list'] = model('Friend')->pullHeartChange($room_id, $friend_info['id']);
}
return $friend;
}
//房间用户当前魅力值列表
public function room_user_charm_list($room_id, $user_id)
{
if($room_id == '' || $user_id == ''){
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
}
$clear_time = db::name('vs_room_user_charm')->where(['room_id' => $room_id, 'user_id' => $user_id])
->order('id', 'desc')->value('clear_time') ?? 0;
$list = db::name('vs_give_gift')->alias('a')
->join('user b', 'a.user_id=b.id')
->field('a.user_id,sum(a.total_price) as total_price,b.nickname,b.avatar,b.user_code')
->where(['a.from_id' => $room_id, 'a.gift_user' => $user_id, 'a.createtime' => ['>',$clear_time],'a.from' => 2])
->group('a.user_id')->select();
if($list){
foreach ($list as &$v){
$v['charm'] = $v['total_price'] * get_system_config_value('coin_charm_exp');
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标
}
}
return ['code' => 1, 'msg' => '操作成功', 'data' => $list];
}
//用户重连
public function user_reconnect($user_id,$room_id)
{
if(!$room_id){
// $room_id = Db::name('user_data')->where('user_id', $user_id)->value('room_id');
}
if(!$room_id){
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
}
//查询用户在几个房间
$room = db::name('vs_room_visitor')->where('user_id', $user_id)->select();
if($room){
$userinroom = 0;
foreach ($room as $v){
if($v['room_id'] == $room_id){
$userinroom = $room_id;
break;
}
}
if($userinroom == $room_id){
$room_info = db::name('vs_room_visitor')->where(['id' => $room_id])->update(['room_id' => $room_id, 'user_id' => $user_id, 'updatetime' => time(),'remarks' =>'断线后重连']);
if(!$room_info){
return ['code' => 0, 'msg' => '更新加入房间失败', 'data' => null];
}
}else
{
$room_info = db::name('vs_room_visitor')->insert(['room_id' => $room_id, 'user_id' => $user_id, 'createtime' => time(),'remarks' =>'断线后重连']);
if(!$room_info){
return ['code' => 0, 'msg' => '加入房间失败', 'data' => null];
}
}
}else{
$room_info = db::name('vs_room_visitor')->insert(['room_id' => $room_id, 'user_id' => $user_id, 'createtime' => time(),'remarks' =>'断线后重连']);
if(!$room_info){
return ['code' => 0, 'msg' => '加入房间失败', 'data' => null];
}
}
return ['code' => 1, 'msg' => '操作成功', 'data' => null];
}
//用户在房间内切后台保留机制
public function user_in_room_background($user_id,$room_id,$type)
{
if(!$room_id){
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
}
$room_t = db::name('vs_room')->field('type_id,label_id')->where('id',$room_id)->find();
if(!(($room_t['type_id'] == 1 || $room_t['type_id'] == 8) && $room_t['label_id'] == 1)){
if($type == 1){//1-切后台2-切前台
$is_bg = db::name('vs_user_in_room_bg')->where(['user_id' => $user_id,'room_id' => $room_id])->find();
if($is_bg){
$up_bg = [
'updatetime' => time(),
];
db::name('vs_user_in_room_bg')->where('id',$is_bg['id'])->update($up_bg);
}else{
$data = [
'user_id' => $user_id,
'room_id' => $room_id,
'createtime' => time(),
'updatetime' => time(),
];
$room_background = db::name('vs_user_in_room_bg')->insert($data);
if(!$room_background){
return ['code' => 0, 'msg' => '操作失败', 'data' => null];
}
}
}else{
db::name('vs_user_in_room_bg')->where(['user_id' => $user_id,'room_id' => $room_id])->delete();
}
}
return ['code' => 1, 'msg' => '操作成功', 'data' => null];
}
}