639 lines
28 KiB
PHP
639 lines
28 KiB
PHP
<?php
|
|
|
|
namespace app\api\model;
|
|
|
|
use think\Db;
|
|
use think\Model;
|
|
|
|
class KtvRoom extends Model
|
|
{
|
|
|
|
|
|
//开始K歌活动
|
|
public function open_auction($uid, $rid)
|
|
{
|
|
$config = get_uncache_system_config();
|
|
$user_info = db::name('user')->field('uid')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$room_info = db::name('room')->find($rid);
|
|
if(!$room_info){
|
|
return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null];
|
|
}
|
|
|
|
//是否有权限
|
|
if($uid != $room_info['room_host_uid'] && $uid != $room_info['room_owner_uid']){
|
|
return ['code' => 201, 'msg' => '您无权限进行该操作', 'data' => null];
|
|
}
|
|
|
|
//是否有人在K歌麦上
|
|
$map = [];
|
|
$map[] = ['rid', '=', $rid];
|
|
$map[] = ['micro_id', 'in', [1,2,3,4]];
|
|
$map[] = ['uid', '>', 0];
|
|
$room_micro_info = db::name('room_micro')->where($map)->find();
|
|
if(!$room_micro_info){
|
|
return ['code' => 201, 'msg' => '当前尚未有人在麦上,无法开启', 'data' => null];
|
|
}
|
|
|
|
//当前是否已有进行中的K歌
|
|
$map = [];
|
|
$map[] = ['rid', '=', $rid];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$room_auction_info = db::name('room_song_log')->where($map)->find();
|
|
if($room_auction_info){
|
|
return ['code' => 201, 'msg' => '当前已有进行中的,请勿重复开启', 'data' => null];
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
//当前前四个麦位在线用户
|
|
$map = [];
|
|
$map[] = ['rid', '=', $rid];
|
|
$map[] = ['micro_id', 'in', [1,2,3,4]];
|
|
$map[] = ['uid', '>', 0];
|
|
$uid_arr = db::name('room_micro')->where($map)->order('micro_id asc')->column('uid');
|
|
$uid_array = implode(',', $uid_arr);
|
|
|
|
//添加K歌活动记录记录
|
|
$insert = [];
|
|
$insert['rid'] = $rid;
|
|
$insert['uid_array'] = $uid_array;
|
|
$insert['uid'] = $uid_arr[0];
|
|
$insert['status'] = 2;
|
|
$insert['add_time'] = time();
|
|
$rsid = db::name('room_song_log')->insertGetId($insert);
|
|
if(!$rsid){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开始失败', 'data' => null];
|
|
}
|
|
|
|
$now_time = time();
|
|
|
|
$insert_data = [];
|
|
//添加K歌麦上用户记录
|
|
foreach ($uid_arr as $k => $v){
|
|
$micro_id = db::name('room_micro')->where('rid', $rid)->where('uid', $v)->value('micro_id');
|
|
|
|
//是否有制作人
|
|
$producer_uid = 0;
|
|
$user_sign_contract = db::name('user_sign_contract')->where('sign_uid', $v)->where('is_delete', 1)->find();
|
|
if($user_sign_contract){
|
|
$producer_uid = $user_sign_contract['uid'];
|
|
}
|
|
|
|
//用户身价
|
|
$social = $config['initial_user_social'];
|
|
$user_social = db::name('user')->where('uid', $v)->find();
|
|
if(!empty(ceil($user_social['social']))){
|
|
$social = $user_social['social'];
|
|
}
|
|
$insert = [];
|
|
$insert['rid'] = $rid;
|
|
$insert['rsid'] = $rsid;
|
|
$insert['uid'] = $v;
|
|
$insert['micro_id'] = $micro_id;
|
|
$insert['producer_uid'] = $producer_uid;
|
|
if($k == 0){
|
|
$insert['song_start_time'] = $now_time;
|
|
$insert['song_end_time'] = $now_time + $config['ktv_room_start_time'];
|
|
}else{
|
|
$insert['song_start_time'] = 0;
|
|
$insert['song_end_time'] = 0;
|
|
}
|
|
$insert['start_price'] = $social;
|
|
$insert['end_price'] = $social;
|
|
$insert['add_time'] = $now_time;
|
|
$insert_data[] = $insert;
|
|
}
|
|
|
|
$reslut = db::name('room_song_user_log')->insertAll($insert_data);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开始失败', 'data' => null];
|
|
}
|
|
|
|
|
|
|
|
Db::commit();
|
|
|
|
model('api/room')->push_room_micro_data($rid);
|
|
|
|
return ['code' => 200, 'msg' => '开始成功', 'data' => null];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开始失败', 'data' => null];
|
|
}
|
|
}
|
|
|
|
//定时结束唱歌时间
|
|
public function colse_room_song_user_status(){
|
|
set_time_limit(0);
|
|
ini_set('memory_limit', '1024M');
|
|
|
|
$map = [];
|
|
$map[] = ['song_end_time', '>', 0];
|
|
$map[] = ['song_end_time', '<', time()];
|
|
$map[] = ['status', '=', 1];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$list = db::name('room_song_user_log')->where($map)->select();
|
|
foreach ($list as $k => $v){
|
|
db::name('room_song_user_log')->where('id', $v['id'])->update(['status' => 2, 'update_time' => time()]);
|
|
model('api/room')->push_room_micro_data($v['rid']);
|
|
model('api/Agora')->user_quit_song_del($v['uid'], $v['rid']);
|
|
}
|
|
|
|
echo date('Y-m-d H:i:s').'定时结束唱歌时间 执行成功';
|
|
|
|
}
|
|
|
|
//送礼物增加唱歌时长
|
|
public function send_gift_add_song_time($uid, $user_id, $rid, $gid, $num, $total_gift_price){
|
|
|
|
$map = [];
|
|
$map[] = ['rid', '=', $rid];
|
|
$map[] = ['uid', '=', $user_id];
|
|
$map[] = ['song_start_time', '>', 0];
|
|
$map[] = ['status', '=', 1];
|
|
$map[] = ['is_delete', '=', 1];
|
|
$room_song_user_log = db::name('room_song_user_log')->where($map)->find();
|
|
if($room_song_user_log){
|
|
$surplus_time = $room_song_user_log['song_end_time'] - $room_song_user_log['song_start_time'];
|
|
$max_time = $room_song_user_log['song_start_time'] + 300;
|
|
if($room_song_user_log['song_end_time'] > time() && $room_song_user_log['song_end_time'] < $max_time){
|
|
$add_time = ceil($total_gift_price/10) * 2;
|
|
if($add_time > 0){
|
|
$song_add_time = $room_song_user_log['song_end_time'] + $add_time;
|
|
if($song_add_time > $max_time){
|
|
$song_add_time = $max_time;
|
|
}
|
|
|
|
//增加唱歌时长
|
|
$reslut = db::name('room_song_user_log')->where('id', $room_song_user_log['id'])->update(['song_end_time' => $song_add_time, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
return ['code' => 201, 'msg' => '失败', 'data' => null];
|
|
}
|
|
|
|
//记录
|
|
$insert = [];
|
|
$insert['uid'] = $uid;
|
|
$insert['user_id'] = $user_id;
|
|
$insert['gid'] = $gid;
|
|
$insert['num'] = $num;
|
|
$insert['total_price'] = $total_gift_price;
|
|
$insert['song_time'] = $song_add_time;
|
|
$insert['add_time'] = time();
|
|
$reslut = db::name('user_room_song_time')->insert($insert);
|
|
if(!$reslut){
|
|
return ['code' => 201, 'msg' => '失败', 'data' => null];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return ['code' => 200, 'msg' => '获取成功', 'data' => null];
|
|
}
|
|
|
|
//用户出价
|
|
public function user_auction_price($uid, $rid, $user_id, $price){
|
|
$user_info = db::name('user')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$room_info = db::name('room')->find($rid);
|
|
if(!$room_info){
|
|
return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null];
|
|
}
|
|
|
|
//该价位是否存在
|
|
$auction_price = db::name('auction_price')->where('price', $price)->where('is_delete', 1)->find();
|
|
if(!$auction_price){
|
|
return ['code' => 201, 'msg' => '该加价信息不存在', 'data' => null];
|
|
}
|
|
|
|
if($uid == $user_id){
|
|
return ['code' => 201, 'msg' => '自己不能竞拍自己', 'data' => null];
|
|
}
|
|
|
|
//当前拍卖信息
|
|
$room_song_log = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find();
|
|
if(!$room_song_log){
|
|
return ['code' => 201, 'msg' => '当前尚未开始', 'data' => null];
|
|
}
|
|
|
|
//该用户是否处于竞拍阶段
|
|
$room_song_user_log = db::name('room_song_user_log')->where('rsid', $room_song_log['id'])->where('uid', $user_id)->where('is_delete', 1)->find();
|
|
if(!$room_song_user_log){
|
|
return ['code' => 201, 'msg' => '跟当前用户不符', 'data' => null];
|
|
}
|
|
|
|
if($room_song_user_log['status'] != 2){
|
|
return ['code' => 201, 'msg' => '当前尚未处于签约阶段', 'data' => null];
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
//当前竞拍价
|
|
$now_auction_price = $room_song_user_log['end_price'];
|
|
|
|
//当前用户金额是否可以加价
|
|
$user_auction_price = model('NewRoom')->get_user_auction_price($uid);
|
|
if($user_info['integral'] < ($user_auction_price + $price + $now_auction_price)){
|
|
return ['code' => 201, 'msg' => '您当前的金币不足以加价', 'data' => null];
|
|
}
|
|
|
|
//用户加价信息
|
|
$user_auction_info = db::name('user_room_song_auction')->where('rsid', $room_song_log['id'])->where('auction_uid', $uid)->where('uid', $user_id)->find();
|
|
if($user_auction_info){
|
|
$update = [];
|
|
$update['price'] = $now_auction_price + $price;
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('user_room_song_auction')->where('id', $user_auction_info['id'])->update($update);
|
|
|
|
}else{
|
|
$insert = [];
|
|
$insert['rid'] = $rid;
|
|
$insert['rsid'] = $room_song_log['id'];
|
|
$insert['uid'] = $user_id;
|
|
$insert['auction_uid'] = $uid;
|
|
$insert['price'] = $now_auction_price + $price;
|
|
$insert['add_time'] = time();
|
|
$reslut = db::name('user_room_song_auction')->insert($insert);
|
|
|
|
}
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '加价失败', 'data' => null];
|
|
}
|
|
|
|
//用户加价记录
|
|
$insert_data = [];
|
|
$insert_data['rsid'] = $room_song_log['id'];
|
|
$insert_data['rid'] = $rid;
|
|
$insert_data['auction_uid'] = $uid;
|
|
$insert_data['uid'] = $user_id;
|
|
$insert_data['now_price'] = $now_auction_price;
|
|
$insert_data['price'] = $price;
|
|
$insert_data['add_time'] = time();
|
|
$reslut = db::name('user_room_song_auction_log')->insert($insert_data);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
|
}
|
|
|
|
//修改当前用户当前最高竞拍价
|
|
$update = [];
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('room_song_user_log')->where('id', $room_song_user_log['id'])->inc('end_price', $price)->update($update);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
|
}
|
|
|
|
//是否提醒制作人
|
|
$is_push = 2;
|
|
if(!empty($room_song_user_log['producer_uid'])){
|
|
$producer_info = db::name('user')->where('uid', $room_song_user_log['producer_uid'])->find();
|
|
if($producer_info){
|
|
$send_producer_message = db::name('send_producer_message')->where('rsid', $room_song_log['id'])->where('uid', $user_id)->where('producer_uid', $room_song_user_log['producer_uid'])->find();
|
|
if(empty($send_producer_message)){
|
|
$insert = [];
|
|
$insert['rsid'] = $room_song_log['id'];
|
|
$insert['uid'] = $user_id;
|
|
$insert['producer_uid'] = $room_song_user_log['producer_uid'];
|
|
$insert['add_time'] = time();
|
|
$reslut = db::name('send_producer_message')->insert($insert);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '开启失败', 'data' => null];
|
|
}
|
|
$is_push = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
Db::commit();
|
|
|
|
model('api/room')->push_room_micro_data($rid);
|
|
|
|
//提醒制作人
|
|
if($is_push == 1){
|
|
$push_message = [];
|
|
$push_message['rid'] = $rid;
|
|
|
|
//提示制作人自己的艺人被拍
|
|
$push_data = [];
|
|
$push_data['code'] = 3010;
|
|
$push_data['msg'] = "提示制作人自己的艺人被拍";
|
|
$push_data['data'] = $push_message;
|
|
model('api/WebSocketPush')->send_to_one($room_song_user_log['producer_uid'], $push_data);
|
|
}
|
|
|
|
return ['code' => 200, 'msg' => '加价成功', 'data' => null];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '加价失败', 'data' => null];
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//结束K歌活动
|
|
public function finish_auction($uid, $rid, $user_id){
|
|
$config = get_uncache_system_config();
|
|
|
|
$user_info = db::name('user')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$user_id_info = db::name('user')->find($user_id);
|
|
if(!$user_id_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$room_info = db::name('room')->find($rid);
|
|
if(!$room_info){
|
|
return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null];
|
|
}
|
|
|
|
//是否有权限结束
|
|
if($room_info['room_host_uid'] != $uid){
|
|
return ['code' => 201, 'msg' => '当前麦上主持才可结束', 'data' => null];
|
|
}
|
|
|
|
//当前房间是否正在进行的K歌活动
|
|
$room_song_log = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find();
|
|
if(!$room_song_log){
|
|
return ['code' => 201, 'msg' => '当前尚未开始', 'data' => null];
|
|
}
|
|
|
|
//该用户是否处于竞拍阶段
|
|
$room_song_user_log = db::name('room_song_user_log')->where('rsid', $room_song_log['id'])->where('uid', $user_id)->where('is_delete', 1)->find();
|
|
if(!$room_song_user_log){
|
|
return ['code' => 201, 'msg' => '跟当前用户不符', 'data' => null];
|
|
}
|
|
|
|
if($room_song_user_log['status'] != 2){
|
|
return ['code' => 201, 'msg' => '当前尚未处于签约阶段', 'data' => null];
|
|
}
|
|
|
|
//
|
|
Db::startTrans();
|
|
try {
|
|
$now_time = time();
|
|
|
|
//是否有最高出价
|
|
$user_room_song_auction = db::name('user_room_song_auction')->where('rsid', $room_song_log['id'])->where('uid', $user_id)->order('price desc')->limit(1)->find();
|
|
if(empty($user_room_song_auction)){//流拍
|
|
//当前用户K歌拍卖结束
|
|
$reslut = db::name('room_song_user_log')->where('id', $room_song_user_log['id'])->update(['status' => 3, 'is_delete' => 2, 'update_time' => time(), 'end_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
$is_push = 2;
|
|
}else{//签约
|
|
|
|
//是否何他签过约
|
|
$user_sign_contract = db::name('user_sign_contract')->where('uid', $user_room_song_auction['auction_uid'])->where('sign_uid', $user_room_song_auction['uid'])->where('is_delete',1)->find();
|
|
if(!empty($user_sign_contract)){
|
|
$update = [];
|
|
$update['price'] = $user_room_song_auction['price'];
|
|
$update['end_time'] = $user_sign_contract['end_time'] + (60*60*24*7);
|
|
$update['update_time'] = time();
|
|
$reslut = db::name('user_sign_contract')->where('id', $user_sign_contract['id'])->update($update);
|
|
}else{
|
|
//解除该用户之前的签约
|
|
$last_sign_contract = db::name('user_sign_contract')->where('sign_uid', $user_room_song_auction['uid'])->where('is_delete', 1)->find();
|
|
if(!empty($last_sign_contract)){
|
|
$reslut = db::name('user_sign_contract')->where('id', $last_sign_contract['id'])->update(['is_delete' => 2, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
}
|
|
|
|
$insert = [];
|
|
$insert['uid'] = $user_room_song_auction['auction_uid'];
|
|
$insert['sign_uid'] = $user_room_song_auction['uid'];
|
|
$insert['price'] = $user_room_song_auction['price'];
|
|
$insert['add_time'] = $now_time;
|
|
$insert['end_time'] = $now_time + (60*60*24*7);
|
|
$reslut = db::name('user_sign_contract')->insert($insert);
|
|
|
|
}
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
//修改用户身价及是否签约
|
|
$reslut = db::name('user')->where('uid', $user_room_song_auction['uid'])->update(['social' => $user_room_song_auction['price'], 'is_sign' => 1, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
//修改用户制作人身份
|
|
$is_producer = db::name('user')->where('uid', $user_room_song_auction['auction_uid'])->value('is_producer');
|
|
if($is_producer == 2){
|
|
$reslut = db::name('user')->where('uid', $user_room_song_auction['auction_uid'])->update(['is_producer' => 1, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
}
|
|
|
|
//扣除拍卖人的金币
|
|
$reslut = model('admin/User')->change_user_money_by_uid($user_room_song_auction['auction_uid'], -$user_room_song_auction['price'], 2, 24, "拍卖签约扣除金币", $user_room_song_auction['auction_uid'], 0, $rid);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
|
|
//签约用户是否有制作人,扣除百分之十给前制作人
|
|
if(!empty($room_song_user_log['producer_uid'])){
|
|
$producer_price = $user_room_song_auction['price'] * 0.9;
|
|
$reslut = model('admin/User')->change_user_money_by_uid($room_song_user_log['producer_uid'], $producer_price, 2, 26, "前制作人获取签约用户被拍金币", $room_song_user_log['producer_uid'], 0, $rid);
|
|
if ($reslut['code'] == 201) {
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
}
|
|
}
|
|
|
|
//当前用户K歌拍卖结束
|
|
$reslut = db::name('room_song_user_log')->where('id', $room_song_user_log['id'])->update(['auction_uid' => $user_room_song_auction['auction_uid'], 'end_price' => $user_room_song_auction['price'],'status' => 3, 'is_delete' => 2, 'update_time' => time(), 'end_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
$is_push = 1;
|
|
}
|
|
|
|
//新人签约用户唱前三首歌获取收益
|
|
$user_new_time = $user_id_info['add_time'] + (60*60*24*7);
|
|
// if($user_new_time > $now_time){
|
|
// //是否是前三首歌
|
|
// $user_song_count = db::name('room_song_user_log')->where('uid', $user_id)->where('status', 3)->where('is_delete', 2)->count();
|
|
// if($user_song_count < 3){
|
|
// $user_song_money = 1;
|
|
// $reslut = model('admin/User')->change_user_money_by_uid($user_id, $user_song_money, 1, 27, "新人签约唱歌获取金币", $user_id, 0, $rid);
|
|
// if ($reslut['code'] == 201) {
|
|
// Db::rollback();
|
|
// return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
|
|
//是否有下一个用户
|
|
$next_user_song_auction = db::name('room_song_user_log')->where('rsid', $room_song_log['id'])->where('is_delete', 1)->order('micro_id asc')->find();
|
|
if(!empty($next_user_song_auction)){//有则进行下一个
|
|
$update = [];
|
|
$update['song_start_time'] = $now_time;
|
|
$update['song_end_time'] = $now_time + $config['ktv_room_start_time'];
|
|
$update['update_time'] = $now_time;
|
|
$reslut = db::name('room_song_user_log')->where('id', $next_user_song_auction['id'])->update($update);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
$reslut = db::name('room_song_log')->where('id', $room_song_log['id'])->update(['uid' => $next_user_song_auction['uid'], 'update_time' => time()]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
}else{//没有则结束该活动
|
|
$reslut = db::name('room_song_log')->where('id', $room_song_log['id'])->update(['uid' => 0, 'status' => 3, 'update_time' => time(), 'is_delete' => 2]);
|
|
if(!$reslut){
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
//拍卖用户下麦
|
|
$map = [];
|
|
$map[] = ['rid', '=', $rid];
|
|
$map[] = ['micro_id', 'in', [1,2,3,4]];
|
|
$map[] = ['uid', '>', 0];
|
|
$reslut = db::name('room_micro')->where($map)->update(['uid' => 0, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time()]);
|
|
// if(!$reslut){
|
|
// Db::rollback();
|
|
// return ['code' => 201, 'msg' => '结束失败10', 'data' => null];
|
|
// }
|
|
|
|
//更新老板麦位
|
|
model('RoomBossMicro')->update_room_boss_micro($rid);
|
|
}
|
|
|
|
Db::commit();
|
|
|
|
model('api/room')->push_room_micro_data($rid);
|
|
|
|
if($is_push == 1){
|
|
$auction_user_info = db::name('user')->find($user_room_song_auction['auction_uid']);
|
|
$sign_user_info = db::name('user')->find($user_room_song_auction['uid']);
|
|
|
|
$push_message = [];
|
|
$push_message['auction_user_info']['uid'] = $user_room_song_auction['auction_uid'];
|
|
$push_message['auction_user_info']['nick_name'] = mb_convert_encoding(base64_decode($auction_user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$push_message['auction_user_info']['head_pic'] = localpath_to_netpath($auction_user_info['head_pic']);
|
|
$push_message['sign_user_info']['uid'] = $user_room_song_auction['uid'];
|
|
$push_message['sign_user_info']['nick_name'] = mb_convert_encoding(base64_decode($sign_user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
|
|
$push_message['sign_user_info']['head_pic'] = localpath_to_netpath($sign_user_info['head_pic']);
|
|
|
|
//提示签约成功
|
|
$push_data = [];
|
|
$push_data['code'] = 3012;
|
|
$push_data['msg'] = "签约成功";
|
|
$push_data['data'] = $push_message;
|
|
model('api/WebSocketPush')->send_to_group($rid, $push_data);
|
|
}
|
|
|
|
|
|
return ['code' => 200, 'msg' => '结束成功', 'data' => null];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '结束失败', 'data' => null];
|
|
}
|
|
|
|
}
|
|
|
|
//结束当前用户唱歌阶段
|
|
public function finish_user_song($uid, $rid, $user_id){
|
|
$user_info = db::name('user')->find($uid);
|
|
if(!$user_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$user_id_info = db::name('user')->find($user_id);
|
|
if(!$user_id_info){
|
|
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
|
|
}
|
|
|
|
$room_info = db::name('room')->find($rid);
|
|
if(!$room_info){
|
|
return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null];
|
|
}
|
|
|
|
//是否有权限结束
|
|
if($room_info['room_host_uid'] != $uid){
|
|
return ['code' => 201, 'msg' => '当前麦上主持才可操作', 'data' => null];
|
|
}
|
|
|
|
//当前房间是否正在进行的K歌活动
|
|
$room_song_log = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find();
|
|
if(!$room_song_log){
|
|
return ['code' => 201, 'msg' => '当前尚未开始', 'data' => null];
|
|
}
|
|
|
|
//该用户是否处于竞拍阶段
|
|
$room_song_user_log = db::name('room_song_user_log')->where('rsid', $room_song_log['id'])->where('uid', $user_id)->where('is_delete', 1)->find();
|
|
if(!$room_song_user_log){
|
|
return ['code' => 201, 'msg' => '跟当前用户不符', 'data' => null];
|
|
}
|
|
|
|
if($room_song_user_log['status'] != 1){
|
|
return ['code' => 201, 'msg' => '当前尚未处于唱歌阶段', 'data' => null];
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
|
|
$reslut = db::name('room_song_user_log')->where('id', $room_song_user_log['id'])->update(['status' => 2, 'update_time' => time()]);
|
|
if(!$reslut){
|
|
return ['code' => 201, 'msg' => '失败', 'data' => null];
|
|
}
|
|
|
|
|
|
Db::commit();
|
|
model('api/room')->push_room_micro_data($rid);
|
|
model('api/Agora')->user_quit_song_del($user_id, $rid);
|
|
|
|
return ['code' => 200, 'msg' => '成功', 'data' => null];
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
dump($e);
|
|
Db::rollback();
|
|
return ['code' => 201, 'msg' => '失败', 'data' => null];
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|