Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
2025-12-10 10:27:20 +08:00
7 changed files with 355 additions and 34 deletions

View File

@@ -215,7 +215,7 @@ class Room extends BaseCom
{
$room_id = input('room_id', 0);
$page = input('page', 1);
$limit = input('limit', 50);
$limit = input('limit', 5);
$reslut = model('Room')->room_online_list($room_id, $page, $limit);
return V($reslut['code'], $reslut['msg'], $reslut['data']);
}
@@ -425,16 +425,6 @@ class Room extends BaseCom
}
//房间在线列表
public function room_online_list_ceshi()
{
$room_id = input('room_id', 0);
$page = input('page', 1);
$limit = input('limit', 50);
$reslut = model('Room')->room_online_list($room_id, $page, $limit);
return V($reslut['code'], $reslut['msg'], $reslut['data']);
}
//房间用户当前魅力值列表
public function room_user_charm_list()
{

View File

@@ -34,8 +34,10 @@ class Sms extends Api
//检测是否注销过
$config_time = get_system_config_value('cancel_no_login');
$is_del = db::name('user')->where(['mobile' => $mobile,'delete_time' => ['<>', 0]])->find();
if (time() - $is_del['delete_time'] < $config_time * 24 * 3600) {//30天内注销过
return V(0, '注销30天内不可操作。');
if ($is_del) {
if (time() - $is_del['delete_time'] < $config_time * 24 * 3600) {//30天内注销过
return V(0, '注销30天内不可操作。');
}
}
//频率控制

View File

@@ -167,7 +167,18 @@ class Friend extends Model
->where(['id'=>$friending_heart['id']])
->update(['status' => 3,'friend_config_id' =>$friending_config_id]);
$msg = '';
if ($originalPairs) {
// 修改当前交友阶段
$res = db::name('vs_room')->where(['id' => $room_id])->update(['step' => 1]);
$res2 = db::name('vs_user_friending')->where(['id' => $friend_id])->update(['status' => 2]);
if ($originalPairs && $res && $res2) {
//所有人下麦
$on_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7],'user_id' => ['<>',0]])->select();
if($on_pit){
foreach ($on_pit as $pit){
model('RoomPit')->DownPit($pit['user_id'], $room_id,$pit['pit_number']);
}
}
$relation = db::name('vs_relation')->where('id',$friending_config_id)->value('name');
if($friending_heart['heart_value'] >= get_system_config_value('friend_heart_create_room') && $friending_config_id > 0){
//创建小房间
@@ -196,6 +207,7 @@ class Friend extends Model
}else{
$text['text'] = '交友结束未创建房间';
}
$text['relation_name'] = $relation;
$text['user1_id'] = $user1;
$text['user2_id'] = $user2;
@@ -205,17 +217,6 @@ class Friend extends Model
$text['user2_nickname'] = db::name('user')->where(['id'=>$user2])->value('nickname');
model('api/Chat')->sendMsg(1051,$room_id,$text);
// 修改当前交友阶段
db::name('vs_room')->where(['id' => $room_id])->update(['step' => 1]);
db::name('vs_user_friending')->where(['id' => $friend_id])->update(['status' => 2]);
//所有人下麦
$on_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7],'user_id' => ['<>',0]])->select();
if($on_pit){
foreach ($on_pit as $pit){
model('RoomPit')->DownPit($pit['user_id'], $room_id,$pit['pit_number']);
}
}
$shijian = floor($friending_heart['heart_value']/get_system_config_value('friend_heart_value')) * get_system_config_value('friend_heart_times');
$friendendtime = time() + $shijian * 3600;
@@ -226,17 +227,20 @@ class Friend extends Model
$room_auction = model('RoomAuction')->room_auction_create_or_add($user1_id,$user2_id,$friending_config_id,$shijian*3600,0);
//推送给前端消息
$text1['text'] = '交友结束';
$text1['step'] = 1;//1 等待邂逅 2 心动连线 3 牵手良缘
model('api/Chat')->sendMsg(1049,$room_id,$text1);
return ['code' => 1, 'msg' => '创建关系成功!'.$msg, 'data' => null];
} else {
$ress = db::name('vs_user_friending')->where(['id' => $friend_id])->update(['status' => 2]);
$re2s = db::name('vs_room')->where(['id' => $room_id])->update(['step' => 1]);
//推送给前端消息
$text['status1'] = $ress.'<=>'.$re2s.'<=>'.$res.'<=>'.$res2.'<=>'.$originalPairs;
$text['text'] = '交友结束';
$text['step'] = 1;//1 等待邂逅 2 心动连线 3 牵手良缘
model('api/Chat')->sendMsg(1049,$room_id,$text);
return ['code' => 1, 'msg' => '创建关系成功!'.$msg, 'data' => null];
} else {
//推送给前端消息
$text['text'] = '交友结束';
$text['step'] = 1;//1 等待邂逅 2 心动连线 3 牵手良缘
model('api/Chat')->sendMsg(1049,$room_id,$text);
db::name('vs_user_friending')->where(['id' => $friend_id])->update(['status' => 2]);
return ['code' => 0, 'msg' => '创建关系失败!', 'data' => null];
}
}

View File

@@ -28,6 +28,16 @@ class Login extends Model
return ['code' => 0, 'msg' => 'ip已被封禁', 'data' => null];
}
if($user_name){
$config_time = get_system_config_value('cancel_no_login');
$is_del = db::name('user')->where(['mobile' => $user_name,'delete_time' => ['<>', 0]])->find();
if ($is_del) {
if (time() - $is_del['delete_time'] < $config_time * 24 * 3600) {//30天内注销过
return V(0, '注销30天内不可操作。');
}
}
}
$data = [];
$user_code = $this->get_user_code(); //获取用户code_id 过滤靓号

View File

@@ -203,6 +203,7 @@ class Room extends Model
}
if($label_id >= 1){
$map['label_id'] = $label_id;
$map['type_id'] = ['<>',6];
}
}
@@ -890,7 +891,7 @@ class Room extends Model
$is_hide = db::name('user')->where('id', $user_id)->value('hide_status');
if($is_hide != 1){//不是隐身
$Nobility = model('Nobility')->getUserNobilityInfo($user_id);
$Nobility = model('api/Nobility')->getUserNobilityInfo($user_id);
$text['FromUserInfo']['enter_image'] = $Nobility['enter_image'];
$text['FromUserInfo']['enter_text'] = '欢迎 ' . $Nobility['nobility_name'] .' 进入房间';
model('api/Chat')->sendMsg(1001,$room_id,$text,$user_id);
@@ -1290,6 +1291,7 @@ class Room extends Model
$text['FromUserInfo'] = $FromUserInfo;
$text['pit_number'] = '';
model('api/Chat')->sendMsg(1004,$room_id,$text);
db::name('vs_room_visitor')->where(['user_id' => $user_id,'room_id' => $room_id])->update(['is_onpit' => 1]);
}
}elseif ($apply_type == 3){
$roomInfoStep = db::name('vs_room')->where(['id' => $room_id])->value('step');
@@ -1504,7 +1506,7 @@ class Room extends Model
//房间在线列表
public function room_online_list($room_id, $page, $limit)
public function room_online_lists($room_id, $page, $limit)
{
$lists['on_pit'] = [];
$lists['off_pit'] = [];
@@ -1623,6 +1625,312 @@ class Room extends Model
}
//房间在线列表
public function room_online_list1($room_id, $page, $limit)
{
if (!$room_id) {
return ['code' => 0, 'msg' => '参数错误'];
}
$roomType = db::name('vs_room')->where(['id' => $room_id])->field('type_id,label_id')->find();
if (!$roomType) {
return ['code' => 0, 'msg' => '房间不存在'];
}
$onPitUserIds = [];
$lists['on_pit'] = db::name('vs_room_pit')->alias('a')
->join('user b', 'a.user_id = b.id')
->where(['a.room_id' => $room_id, 'a.user_id' => ['>', 0]])
->field('a.user_id,b.nickname,b.avatar,a.pit_number')
->select();
// 处理麦位上的用户信息
if (!empty($lists['on_pit']) && is_array($lists['on_pit'])) {
foreach ($lists['on_pit'] as &$v) {
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_wealth_icon($v['user_id'], 1);//等级图标
$isSinger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
if ($isSinger) {
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinger, 'deletetime' => 0])->value('image');//等级图标
}
//用户的角色
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
}
unset($v); // 释放引用
// 根据角色排序 房主>管理员>主持人>普通用户
usort($lists['on_pit'], function ($a, $b) {
if ($a['role'] == $b['role']) {
return 0;
}
return ($a['role'] < $b['role']) ? -1 : 1;
});
$onPitUserIds = array_column($lists['on_pit'], 'user_id');
} else {
$lists['on_pit'] = [];
}
// 根据房间类型处理不同情况下的麦位用户
if ($roomType['type_id'] == 10 || $roomType['type_id'] == 9 || $roomType['type_id'] == 7 ||
($roomType['type_id'] == 1 && $roomType['label_id'] == 1)) {
// 这些房间类型已处理过麦位用户,无需额外处理
} elseif ($roomType['type_id'] == 1 && $roomType['label_id'] == 2) { // K歌房
// 处理K歌房的模拟麦位用户
$onPitUser = db::name('vs_room_pit_simulate')->alias('a')
->join('user b', 'a.user_id = b.id')
->field('a.user_id,b.nickname,b.avatar')
->where(['a.room_id' => $room_id])
->select();
if (!empty($onPitUser) && is_array($onPitUser)) {
foreach ($onPitUser as &$v) {
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_wealth_icon($v['user_id'], 1);//等级图标
$isSinger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
if ($isSinger) {
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinger, 'deletetime' => 0])->value('image');//等级图标
}
//用户的角色
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
}
unset($v); // 释放引用
// 把模拟麦位用户添加到麦位用户列表后面
$lists['on_pit'] = array_merge($lists['on_pit'], $onPitUser);
// 重新根据角色排序 房主>管理员>主持人>普通用户
usort($lists['on_pit'], function ($a, $b) {
if ($a['role'] == $b['role']) {
return 0;
}
return ($a['role'] < $b['role']) ? -1 : 1;
});
$onPitUserIds = array_column($lists['on_pit'], 'user_id');
}
} elseif ($roomType['type_id'] == 2) { // 拍卖房
$auction_id = db::name('vs_room_auction')
->where(['room_id' => $room_id])
->order('auction_id', 'desc')
->field('auction_id,status,gift_price')
->find();
if ($auction_id && $auction_id['status'] == 2) {
$auct = db::name('vs_room_auction_bid_log')->alias('a')
->join('user b', 'a.user_id = b.id')
->field('a.user_id, SUM(a.gift_price) AS gift_prices, b.nickname,b.avatar')
->where(['a.auction_id' => $auction_id['auction_id']])
->group('user_id')
->having('gift_prices >= ' . $auction_id['gift_price'])
->order('gift_prices DESC')
->limit(6)
->select();
if (!empty($auct) && is_array($auct)) {
foreach ($auct as &$v) {
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_wealth_icon($v['user_id'], 1);//等级图标
$isSinger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
if ($isSinger) {
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinger, 'deletetime' => 0])->value('image');//等级图标
}
//用户的角色
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
}
unset($v); // 释放引用
// 把竞拍用户添加到麦位用户列表后面
$lists['on_pit'] = array_merge($lists['on_pit'], $auct);
// 重新根据角色排序 房主>管理员>主持人>普通用户
usort($lists['on_pit'], function ($a, $b) {
if ($a['role'] == $b['role']) {
return 0;
}
return ($a['role'] < $b['role']) ? -1 : 1;
});
$onPitUserIds = array_column($lists['on_pit'], 'user_id');
}
}
}
// 处理不在麦位上的用户(观众)
$lists['off_pit'] = 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,
'b.hide_status' => 0, // 非隐身用户
'a.user_id' => ['not in', empty($onPitUserIds) ? [0] : $onPitUserIds] // 不在麦位上的用户
])
->page($page, $limit)
->select();
if (!empty($lists['off_pit']) && is_array($lists['off_pit'])) {
foreach ($lists['off_pit'] as &$v) {
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_wealth_icon($v['user_id'], 1);//等级图标
$isSinger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
if ($isSinger) {
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinger, 'deletetime' => 0])->value('image');//等级图标
}
//用户的角色
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
}
unset($v); // 释放引用
// 根据角色排序 房主>管理员>主持人>普通用户
usort($lists['off_pit'], function ($a, $b) {
if ($a['role'] == $b['role']) {
return 0;
}
return ($a['role'] < $b['role']) ? -1 : 1;
});
} else {
$lists['off_pit'] = [];
}
return ['code' => 1, 'msg' => '成功', 'data' => $lists];
}
//房间在线列表
public function room_online_list($room_id, $page = 1, $limit = 5)
{
if (!$room_id) {
return ['code' => 0, 'msg' => '参数错误'];
}
$lists['on_pit'] = [];
$lists['off_pit'] = [];
// 修改count计算逻辑在麦上的用户即使隐身也要计算在内
$lists['count'] = db::name('vs_room_visitor')->alias('a')
->join('user b', 'a.user_id = b.id','left')
->where(function($query) use ($room_id) {
$query->where(['a.room_id' => $room_id,'b.hide_status'=>0]) // 非隐身用户
->whereOr(function($query2) use ($room_id) {
// 或者是隐身但已在麦上的用户
$query2->where(['a.room_id' => $room_id,'b.hide_status'=>1,'a.is_onpit'=>0]);
});
})
->count();
// 第一页特殊处理,显示麦上用户
if ($page == 1) {
$onPitUser = db::name('vs_room_visitor')->alias('a')
->join('user b', 'a.user_id = b.id','left')
->field('a.user_id,b.nickname,b.avatar,b.hide_status,a.is_onpit')
->where(['a.room_id' => $room_id,'a.is_onpit' => 0])//is_onpit1-未上麦0-已上麦
->select();
if(!empty($onPitUser)){
foreach ($onPitUser as &$v) {
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标
//判断是否是歌手 如果是 返回等级图标
$isSinnger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
if ($isSinnger) {
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger, 'deletetime' => 0])->value('image');//等级图标
}
//用户的角色
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
$v['pit_number'] = $role['pit_number'];
}
unset($v); // 释放引用
$lists['on_pit'] = $onPitUser;
}
}
// 获取麦下用户(非隐身用户)
if ($page == 1) {
$offPitUser = db::name('vs_room_visitor')->alias('a')
->join('user b', 'a.user_id = b.id','left')
->field('a.user_id,b.nickname,b.avatar,b.hide_status,a.is_onpit')
->where(['a.room_id' => $room_id,'b.hide_status' => 0,'a.is_onpit' => 1]) // 非隐身且未上麦
->page($page, $limit)
->order('a.id', 'desc')
->select();
if(!empty($offPitUser)){
foreach ($offPitUser as &$v) {
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标
//判断是否是歌手 如果是 返回等级图标
$isSinnger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
if ($isSinnger) {
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger, 'deletetime' => 0])->value('image');//等级图标
}
//用户的角色
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
$v['pit_number'] = $role['pit_number'];
}
unset($v); // 释放引用
$lists['off_pit'] = $offPitUser;
}
} else {
$offPitUser = db::name('vs_room_visitor')->alias('a')
->join('user b', 'a.user_id = b.id','left')
->field('a.user_id,b.nickname,b.avatar,b.hide_status,a.is_onpit')
->where(['a.room_id' => $room_id,'b.hide_status' => 0,'a.is_onpit' => 1]) // 非隐身且未上麦
->page($page, $limit)
->order('a.id', 'desc')
->select();
if(!empty($offPitUser)){
foreach ($offPitUser as &$v) {
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标
//判断是否是歌手 如果是 返回等级图标
$isSinnger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
if ($isSinnger) {
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger, 'deletetime' => 0])->value('image');//等级图标
}
//用户的角色
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
$v['pit_number'] = $role['pit_number'];
}
unset($v); // 释放引用
$lists['off_pit'] = $offPitUser;
}
}
// 对麦位上用户按角色排序
if (!empty($lists['on_pit']) && is_array($lists['on_pit'])) {
usort($lists['on_pit'], function ($a, $b) {
if ($a['role'] == $b['role']) {
return 0;
}
return ($a['role'] < $b['role']) ? -1 : 1;
});
}
// 对麦位下用户按角色排序
if (!empty($lists['off_pit']) && is_array($lists['off_pit'])) {
usort($lists['off_pit'], function ($a, $b) {
if ($a['role'] == $b['role']) {
return 0;
}
return ($a['role'] < $b['role']) ? -1 : 1;
});
}
return ['code' => 1, 'msg' => '成功', 'data' => $lists];
}
//用户在房间内的角色
public function get_user_role($user_id, $room_id)
{

View File

@@ -105,6 +105,7 @@ class RoomPit extends Model
$text['pit_number'] = $pit_number;
//聊天室推送系统消息
model('Chat')->sendMsg(1003,$room_id,$text);
db::name('vs_room_visitor')->where(['user_id' => $user_id,'room_id' => $room_id])->update(['is_onpit' => 0]);
//查看此房间是否处于pk中
$is_pk = db::name('vs_room_pk')->where(['room_id_a' => $room_id])->where(['status' => ['in',[2,3,4]]])->value('room_id_b') ?? 0;
@@ -260,6 +261,7 @@ class RoomPit extends Model
model('Chat')->sendMsg(1022,$room_id,$text);
}else{
model('Chat')->sendMsg(1004,$room_id,$text);
db::name('vs_room_visitor')->where(['user_id' => $user_id,'room_id' => $room_id])->update(['is_onpit' => 1]);
//查看此房间是否处于pk中
$is_pk = db::name('vs_room_pk')->where(['room_id_a' => $room_id])->where(['status' => ['in',[2,3,4]]])->value('room_id_b') ?? 0;
if(!$is_pk){
@@ -752,6 +754,7 @@ class RoomPit extends Model
$text['FromUserInfo'] = $FromUserInfo;
$text['pit_number'] = 9999;
model('Chat')->sendMsg(1003,$room_id,$text);
db::name('vs_room_visitor')->where(['user_id' => $value,'room_id' => $room_id])->update(['is_onpit' => 0]);
//1-禁麦位2-清空消息3-清空魅力值4-加入黑名单5-踢出房间6-关闭麦克风7-申请上麦8-同意上麦9-拒绝上麦10-点歌11-开启PK',
model('Room')->room_operation_record($user_id,$room_id,8,$value);
}
@@ -883,6 +886,7 @@ class RoomPit extends Model
$text['pit_number'] = 1;
//聊天室推送系统消息
model('Chat')->sendMsg(1003,$room_id,$text);
db::name('vs_room_visitor')->where(['user_id' => $uid,'room_id' => $room_id])->update(['is_onpit' => 0]);
//删除他的申请上麦
db::name('vs_room_pit_apply')->where(['user_id' => $uid, 'room_id' => $room_id, 'status' => 0])->delete();
@@ -1136,6 +1140,7 @@ class RoomPit extends Model
$text['pit_number'] = $pit_number;
//聊天室推送系统消息
model('Chat')->sendMsg(1003,$room_id,$text);
db::name('vs_room_visitor')->where(['user_id' => $accept_user_id,'room_id' => $room_id])->update(['is_onpit' => 0]);
//查找当前用户是否有申请上麦 有就删掉
$is_apply_pit = db::name('vs_room_pit_apply')->where(['room_id' => $room_id, 'user_id' => $accept_user_id])->find();

View File

@@ -559,6 +559,7 @@ class RoomSong extends Model
}
//聊天室推送系统消息
model('Chat')->sendMsg(1003,$room_id,$text);
db::name('vs_room_visitor')->where(['user_id' => $user_id,'room_id' => $room_id])->update(['is_onpit' => 0]);
return ['code' => 1, 'msg' => '上麦成功', 'data' => null];
}else{
//检查用户是否已经申请
@@ -618,6 +619,7 @@ class RoomSong extends Model
$text['FromUserInfo'] = $FromUserInfo;
$text['pit_number'] = '';
model('Chat')->sendMsg(1004,$room_id,$text);
db::name('vs_room_visitor')->where(['user_id' => $user_id,'room_id' => $room_id])->update(['is_onpit' => 1]);
return ['code' => 1, 'msg' => '下麦成功', 'data' => null];
}
}