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