Files
mier-php/application/api/model/RoomApplyMicro.php

865 lines
35 KiB
PHP
Raw Normal View History

2025-08-11 10:22:05 +08:00
<?php
namespace app\api\model;
use think\Db;
use think\Model;
class RoomApplyMicro extends Model
{
//申请上台列表
public function apply_room_micro($uid, $rid){
$user_info = db::name('user')->field('uid,add_time')->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($room_info['cate_id'] == 26){
//该用户是否是新人
$is_new_time = $user_info['add_time'] + (60*60*24*7);
if(time() > $is_new_time){
return ['code' => 201, 'msg' => '您不是新人,无法申请', 'data' => null];
}
//该用户是否已被签约
$map = [];
$map[] = ['sign_uid', '=', $uid];
$map[] = ['is_delete', '=', 1];
$user_contract = db::name('user_sign_contract')->where($map)->find();
if($user_contract){
return ['code' => 201, 'msg' => '您已签约过,无法再次申请', 'data' => null];
}
}
if($uid == $room_info['room_host_uid']){
return ['code' => 201, 'msg' => '您已在主持麦,无法申请', 'data' => null];
}
//用户是否在麦上
$room_micro_list = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid');
$user_room_micro = db::name('room_micro')->where('rid', $rid)->where('uid', $uid)->find();
if(in_array($room_info['cate_id'], [27,28])){
if(in_array($user_room_micro['micro_id'], [1,2,3,4,9])){
return ['code' => 201, 'msg' => '您已在麦上,请勿再次申请', 'data' => null];
}
}else{
if(in_array($uid, $room_micro_list)){
return ['code' => 201, 'msg' => '您已在麦上,请勿再次申请', 'data' => null];
}
}
//是否已申请
$map = [];
$map[] = ['uid', '=', $uid];
$map[] = ['rid', '=', $rid];
$map[] = ['status', '=', 2];
$map[] = ['is_delete', '=', 1];
$room_micro_aisle = db::name('room_micro_aisle')->where($map)->find();
if($room_micro_aisle){
return ['code' => 201, 'msg' => '您已提交过该申请', 'data' => null];
}
//是否已达申请上限
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['status', '=', 2];
$map[] = ['is_delete', '=', 1];
$map[] = ['type', '=', 1];
$apply_common_count = db::name('room_micro_aisle')->where($map)->count();
if($apply_common_count >= 20){
return ['code' => 201, 'msg' => '申请人数已达上限,请稍后', 'data' => null];
}
//
Db::startTrans();
try {
//添加申请
$insert = [];
$insert['uid'] = $uid;
$insert['rid'] = $rid;
$insert['type'] = 1;
$insert['add_time'] = time();
$insert['status'] = 2;
$reslut = db::name('room_micro_aisle')->insert($insert);
if(!$reslut){
return ['code' => 201, 'msg' => '申请失败', 'data' => null];
}
Db::commit();
$this->update_room_micro_aisle($uid, $rid);
return ['code' => 200, 'msg' => '申请成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
dump($e);
Db::rollback();
return ['code' => 201, 'msg' => '申请失败', 'data' => null];
}
}
//取消申请
public function unapply_room_micro($uid, $rid, $id){
$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];
}
$map = [];
$map[] = ['id', '=', $id];
$map[] = ['uid', '=', $uid];
$user_room_micro_aisle = db::name('room_micro_aisle')->where($map)->find();
if(!$user_room_micro_aisle){
return ['code' => 201, 'msg' => '该申请不存在', 'data' => null];
}
if($user_room_micro_aisle['is_delete'] == 2 || $user_room_micro_aisle['status'] != 2){
return ['code' => 201, 'msg' => '该申请已被处理', 'data' => null];
}
Db::startTrans();
try {
$update = [];
$update['user_id'] = $uid;
$update['is_delete'] = 2;
$update['update_time'] = time();
$reslut = db::name('room_micro_aisle')->where('id', $id)->update($update);
if(!$reslut){
return ['code' => 201, 'msg' => '取消失败', 'data' => null];
}
Db::commit();
$this->update_room_micro_aisle($uid, $rid);
return ['code' => 200, 'msg' => '取消成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
dump($e);
Db::rollback();
return ['code' => 201, 'msg' => '取消失败', 'data' => null];
}
}
//取消用户通道
public function quit_user_room_micro_aisle($uid, $rid){
$map = [];
$map[] = ['status', '=', 2];
$map[] = ['uid', '=', $uid];
$map[] = ['rid', '=', $rid];
$map[] = ['is_delete', '=', 1];
$room_micro_aisle = db::name('room_micro_aisle')->where($map)->find();
if($room_micro_aisle){
$update = [];
$update['user_id'] = $uid;
$update['is_delete'] = 2;
$update['update_time'] = time();
db::name('room_micro_aisle')->where('id', $room_micro_aisle['id'])->update($update);
}
$this->update_room_micro_aisle($uid, $rid);
return ['code' => 200, 'msg' => '取消成功', 'data' => null];
}
//更新通道信息
public function update_room_micro_aisle($uid, $rid){
$room_info = db::name('room')->field('rid')->find($rid);
if(!$room_info){
return ['code' => 201, 'msg' => '该房间不存在', 'data' => null];
}
$push_data = [];
$push_data['code'] = 361;
$push_data['msg'] = "更新通道信息";
$data = $this->get_room_micro_list($uid, $rid);
$push_data['data'] = $data['data'];
// dump($push_data);exit;
model('api/WebSocketPush')->send_to_group($rid, $push_data);
}
//等待上台列表
public function get_room_micro_list($uid, $rid){
$user_info = db::name('user')->field('uid')->find($uid);
if(!$user_info){
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
}
$room_info = db::name('room')->field('rid,help_micro_gid')->find($rid);
if(!$room_info){
return ['code' => 201, 'msg' => '该房间不存在', 'data' => null];
}
$gid = 0;
$gift_name = '';
$base_image = '';
if(!empty($room_info['help_micro_gid'])){
$gift_info = db::name('gift')->find($room_info['help_micro_gid']);
$gid = $room_info['help_micro_gid'];
$gift_name = $gift_info['gift_name'];
$base_image = localpath_to_netpath($gift_info['base_image']);
}
$data = [];
$data['priority_aisle'] = [];
$data['priority_count'] = 0;
$data['priority_total_count'] = 20;
$data['common_aisle'] = [];
$data['common_count'] = 0;
$data['common_total_count'] = 20;
$data['gid'] = $gid;
$data['gift_name'] = $gift_name;
$data['base_image'] = $base_image;
//普通通道列表
$map = [];
$map[] = ['a.rid', '=', $rid];
$map[] = ['a.type', '=', 1];
$map[] = ['a.is_delete', '=', 1];
$map[] = ['a.status', '=', 2];
$common_aisle = db::name('room_micro_aisle')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('a.id,a.uid,a.rid,a.type,a.rank_value,b.nick_name,b.base64_nick_name,b.head_pic')->where($map)->order('a.id asc')->select();
foreach ($common_aisle as $k => &$v){
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
$v['head_pic'] = localpath_to_netpath($v['head_pic']);
}
if(!empty($common_aisle)){
$data['common_aisle'] = $common_aisle;
$data['common_count'] = count($common_aisle);
}
//优先通道列表
$map = [];
$map[] = ['a.rid', '=', $rid];
$map[] = ['a.type', '=', 2];
$map[] = ['a.is_delete', '=', 1];
$map[] = ['a.status', '=', 2];
$priority_aisle = db::name('room_micro_aisle')->alias('a')->join('yy_user b', 'a.uid = b.uid')->field('a.id,a.uid,a.rid,a.type,a.rank_value,b.nick_name,b.base64_nick_name,b.head_pic')->where($map)->order('a.rank_value desc')->select();
foreach ($priority_aisle as $a => &$b){
$b['nick_name'] = mb_convert_encoding(base64_decode($b['base64_nick_name']), 'UTF-8', 'UTF-8');
$b['head_pic'] = localpath_to_netpath($b['head_pic']);
}
if(!empty($priority_aisle)){
$data['priority_aisle'] = $priority_aisle;
$data['priority_count'] = count($priority_aisle);
}
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//清空上台列表
public function clears_room_micro_list($uid, $rid){
$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];
}
// $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']);
$room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid');
$room_host_uid_arr = db::name('room_host')->where('rid', $rid)->column('uid');
if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) {
// if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) {
return ['code' => 201, 'msg' => '无权限操作', 'data' => null];
}
Db::startTrans();
try {
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['is_delete', '=', 1];
$map[] = ['status', '=', 2];
$map[] = ['type', 'in', [1,2]];
$room_micro_aisle_list = db::name('room_micro_aisle')->where($map)->find();
if(empty($room_micro_aisle_list)){
return ['code' => 201, 'msg' => '当前尚未有申请上台用户', 'data' => null];
}
$update = [];
$update['user_id'] = $uid;
$update['is_delete'] = 2;
$update['update_time'] = time();
$reslut = db::name('room_micro_aisle')->where($map)->update($update);
if(!$reslut){
return ['code' => 201, 'msg' => '清空失败', 'data' => null];
}
Db::commit();
$this->update_room_micro_aisle($uid, $rid);
return ['code' => 200, 'msg' => '清空成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
dump($e);
Db::rollback();
return ['code' => 201, 'msg' => '清空失败', 'data' => null];
}
}
//同意、拒绝上台
public function operate_user_micro($uid, $rid, $id, $type, $seat, $time){
$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];
}
$map = [];
$map[] = ['id', '=', $id];
$user_room_micro_aisle = db::name('room_micro_aisle')->where($map)->find();
if(!$user_room_micro_aisle){
return ['code' => 201, 'msg' => '该申请不存在', 'data' => null];
}
$receive_user_info = db::name('user')->where('uid', $user_room_micro_aisle['uid'])->field('uid, sex')->find();
if(!in_array($type, [1,2])){
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
}
// $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']);
$room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid');
$room_host_uid_arr = db::name('room_host')->where('rid', $rid)->column('uid');
if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr) && !in_array($uid, $room_host_uid_arr)) {
return ['code' => 201, 'msg' => '无权限操作', 'data' => null];
}
//用户是否在麦上
// $room_micro_list = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid');
// if(in_array($user_room_micro_aisle['uid'], $room_micro_list)){
// return ['code' => 201, 'msg' => '该用户已在麦上', 'data' => null];
// }
if($room_info['room_host_uid'] == $user_room_micro_aisle['uid']){
return ['code' => 201, 'msg' => '该用户已在主持麦上', 'data' => null];
}
$user_room_micro_info = db::name('room_micro')->where('rid', $rid)->where('uid', $user_room_micro_aisle['uid'])->find();
if($user_room_micro_info){
if(!in_array($room_info['cate_id'], [27,28])){
return ['code' => 201, 'msg' => '该用户已在麦上', 'data' => null];
}else{
if(!in_array($user_room_micro_info['micro_id'],[5,6,7,8])){
return ['code' => 201, 'msg' => '该用户已在麦上', 'data' => null];
}
}
}
if($room_info['cate_id'] == 29 && $type == 1){
$room_dating_log = db::name('room_dating_log')->where('rid', $rid)->where('is_delete', 1)->find();
if($room_dating_log){
return ['code' => 201, 'msg' => '当前心动连线已开始无法同意上麦', 'data' => null];
}
$is_path = db::name('room_privacy')->whereRaw('FIND_IN_SET('.$user_room_micro_aisle['uid'].',uid_data)')->field('prid')->find();
if(!empty($is_path)){
return ['code' => 201, 'msg' => '该用户正在私密小屋,无法同意上麦', 'data' => null];
}
}
if($room_info['cate_id'] == 27 && $type == 1){
$activity_info = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find();
if(!empty($activity_info)){
$uid_array = explode(',', trim($activity_info['uid_array'], ','));
if(in_array($user_room_micro_aisle['uid'], $uid_array)){
return ['code' => 201, 'msg' => '活动进行中,无法同意上麦', 'data' => null];
}
}
}
// if(in_array($room_info['cate_id'],[36,37]) && $type == 1){
// }
// $time = strtotime(date("Y-m-d"));
Db::startTrans();
try {
if($type == 1){//同意
$room_micro_data = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid');
// dump($room_micro_data);
$update = [];
$update['user_id'] = $uid;
$update['status'] = 1;
$update['is_delete'] = 2;
$update['update_time'] = time();
$reslut = db::name('room_micro_aisle')->where('id', $id)->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '操作失败', 'data' => null];
}
$micro_id = 0;
//上麦,变更麦位
$user_micro_id = $this->user_room_micro_id($room_info['cate_id'], $room_micro_data, $seat,$receive_user_info['sex']);
if($user_micro_id['code'] == 201){
Db::rollback();
return ['code' => 201, 'msg' => $user_micro_id['msg'], 'data' => null];
}
$micro_id = $user_micro_id['data'] - 1;
if($room_info['cate_id'] == 19 && ($micro_id != 6)){
if($time < 1){
return ['code' => 201, 'msg' => '上麦时间不能小于一分钟', 'data' => null];
}
//清除之前在麦状态
$map = [];
$map[] = ['uid', '=', $receive_user_info['uid']];
$map[] = ['is_delete', '=', 1];
$update = [];
$update['is_delete'] = 2;
$update['update_time'] = time();
$info = db::name('room_date_micro')->where($map)->find();
if($info){
$reslut = db::name('room_date_micro')->where($map)->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '操作失败', 'data' => null];
}
}
//添加在麦时间记录
$insert = [];
$insert['user_id'] = $uid;
$insert['uid'] = $receive_user_info['uid'];
$insert['rid'] = $rid;
$insert['micro_id'] = $micro_id;
$insert['sustain_time'] = $time;
$insert['add_time'] = time();
$insert['end_time'] = time() + ($time * 60);
$reslut = db::name('room_date_micro')->insert($insert);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '操作失败', 'data' => null];
}
}
$reslut = model('room')->user_up_micro($receive_user_info['uid'], $rid, $micro_id, 2);
if($reslut['code'] != 200){
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
if($room_info['cate_id'] == 28){
//清除之前拍卖信息
$infos = db::name('room_auction_log')->where('rid', $rid)->where('is_delete', 1)->find();
if(!empty($infos)){
db::name('room_auction_log')->where('rid', $rid)->where('is_delete', 1)->update(['is_delete' => 2, 'update_time' => time()]);
}
//用户上拍卖麦位添加拍卖信息
// $paimai_long_time = get_uncache_system_config('paimai_long_time');
$insert = [];
$insert['rid'] = $rid;
$insert['uid'] = $receive_user_info['uid'];
$insert['add_time'] = time();
// $insert['paimai_long_time'] = $paimai_long_time;
$reslut = db::name('room_auction_log')->insert($insert);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '操作失败', 'data' => null];
}
}
}else if($type == 2){//拒绝
$update = [];
$update['user_id'] = $uid;
$update['status'] = 3;
$update['is_delete'] = 2;
$update['update_time'] = time();
$reslut = db::name('room_micro_aisle')->where('id', $id)->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '操作失败', 'data' => null];
}
}
Db::commit();
$this->update_room_micro_aisle($uid, $rid);
return ['code' => 200, 'msg' => '操作成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
dump($e);
Db::rollback();
return ['code' => 201, 'msg' => '操作失败', 'data' => null];
}
}
//获取用户可上麦位ID
public function user_room_micro_id($catd_id, $room_micro_data, $seat,$sex=0){
if ($catd_id == 26) {//新人
$max_micro_num = 1;
} elseif ($catd_id == 27) {//K歌
$max_micro_num = 8;
} elseif ($catd_id == 28) {//拍卖
$max_micro_num = 1;
} elseif ($catd_id == 29) {//交友
$max_micro_num = 6;
}elseif (in_array($catd_id,[36,37])) {//交友
$max_micro_num = 8;
} else {//常规房间
$max_micro_num = 8;
}
$micro_id = 0;
if($catd_id == 29 && !empty($seat)){
if($seat == 1){//左边
if($room_micro_data[0] == 0){
$micro_id = 1;
}else if($room_micro_data[2] == 0){
$micro_id = 3;
}else if($room_micro_data[4] == 0){
$micro_id = 5;
}
}else if($seat == 2){//右边
if($room_micro_data[1] == 0){
$micro_id = 2;
}else if($room_micro_data[3] == 0){
$micro_id = 4;
}else if($room_micro_data[5] == 0){
$micro_id = 6;
}
}
}elseif($catd_id==36){ //男生
if($sex==1){
if($room_micro_data[6] == 0){
$micro_id = 7;
}else if($room_micro_data[7] == 0){
$micro_id = 8;
}
}elseif($sex==2 || $sex==0){
if($room_micro_data[0] == 0){
$micro_id = 1;
}else if($room_micro_data[1] == 0){
$micro_id = 2;
}else if($room_micro_data[2] == 0){
$micro_id = 3;
}else if($room_micro_data[3] == 0){
$micro_id = 4;
}else if($room_micro_data[4] == 0){
$micro_id = 5;
}else if($room_micro_data[5] == 0){
$micro_id = 6;
}else if($room_micro_data[7] == 0){
$micro_id = 8;
}
}else{
if($room_micro_data[7] == 0){
$micro_id = 8;
}
}
}elseif($catd_id==37){ //女生
if($sex==1){
if($room_micro_data[0] == 0){
$micro_id = 1;
}else if($room_micro_data[1] == 0){
$micro_id = 2;
}else if($room_micro_data[2] == 0){
$micro_id = 3;
}else if($room_micro_data[3] == 0){
$micro_id = 4;
}else if($room_micro_data[4] == 0){
$micro_id = 5;
}else if($room_micro_data[5] == 0){
$micro_id = 6;
}else if($room_micro_data[7] == 0){
$micro_id = 8;
}
}elseif($sex==2 || $sex==0){
if($room_micro_data[6] == 0){
$micro_id = 7;
}else if($room_micro_data[7] == 0){
$micro_id = 8;
}
}else{
if($room_micro_data[7] == 0){
$micro_id = 8;
}
}
}else{
for ($i = 0; $i <= ($max_micro_num - 1); $i++){
if($room_micro_data[$i] == 0){
$micro_id = $i + 1;
break;
}
}
}
if($micro_id == 0){
return ['code' => 201, 'msg' => '当前没有空麦位', 'data' => null];
}else{
return ['code' => 200, 'msg' => '获取成功', 'data' => $micro_id];
}
}
//送礼物更新通道状态
public function send_gift_micro_aisle_update($uid, $rid, $change_value, $user_id = 0){
$map = [];
$map[] = ['uid', '=', $uid];
$map[] = ['rid', '=', $rid];
$map[] = ['is_delete', '=', 1];
$map[] = ['status', '=', 2];
$user_room_micro_aisle = db::name('room_micro_aisle')->where($map)->find();
if($user_room_micro_aisle){
Db::startTrans();
try {
$update = [];
$update['update_time'] = time();
$reslut = db::name('room_micro_aisle')->where('id', $user_room_micro_aisle['id'])->inc('rank_value', $change_value)->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '失败1', 'data' => null];
}
//更新通道排名
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['is_delete', '=', 1];
$map[] = ['status', '=', 2];
$map[] = ['rank_value', '>', 0];
$room_priority_aisle_array = db::name('room_micro_aisle')->where($map)->order('rank_value desc')->limit(20)->column('id');
if(!empty($room_priority_aisle_array)){
$map = [];
$map[] = ['id', 'in', $room_priority_aisle_array];
$map[] = ['type', '=', 1];
$map[] = ['is_delete', '=', 1];
$map[] = ['status', '=', 2];
$info = db::name('room_micro_aisle')->where($map)->select();
if(!empty($info)){
$update = [];
$update['type'] = 2;
$update['update_time'] = time();
$reslut = db::name('room_micro_aisle')->where($map)->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '失败2', 'data' => null];
}
}
$map = [];
$map[] = ['id', 'not in', $room_priority_aisle_array];
$map[] = ['type', '=', 2];
$map[] = ['is_delete', '=', 1];
$map[] = ['status', '=', 2];
$infos = db::name('room_micro_aisle')->where($map)->select();
if(!empty($infos)){
$update = [];
$update['type'] = 1;
$update['update_time'] = time();
$reslut = db::name('room_micro_aisle')->where($map)->update($update);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '失败3', 'data' => null];
}
}
}
if(!empty($user_id)){
$map = [];
$map[] = ['uid', '=', $user_id];
$map[] = ['pid', '=', $user_room_micro_aisle['id']];
$help_dating_micro_info = db::name('room_micro_help_log')->where($map)->find();
if($help_dating_micro_info){
$update = [];
$update['update_time'] = time();
$reslut = db::name('room_micro_help_log')->where('id', $help_dating_micro_info['id'])->inc('rank_value', $change_value)->update($update);
}else{
$insert = [];
$insert['uid'] = $user_id;
$insert['pid'] = $user_room_micro_aisle['id'];
$insert['rank_value'] = $change_value;
$insert['add_time'] = time();
$reslut = db::name('room_micro_help_log')->insert($insert);
}
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '失败4', 'data' => null];
}
}
Db::commit();
$this->update_room_micro_aisle($uid, $rid);
return ['code' => 200, 'msg' => '成功', 'data' => null];
} catch (\Exception $e) {
dump($e);
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => '失败', 'data' => null];
}
}
return ['code' => 200, 'msg' => '成功', 'data' => null];
}
//助力礼物列表
public function get_help_gift_list($uid, $page = 1, $page_limit = 20){
$config = get_uncache_system_config();
$map = [];
$map[] = ['type', 'in', [1,2]];
$map[] = ['is_show', '=', 1];
if(!empty($config['cp_gift_id'])){
$map[] = ['gid', 'neq', $config['cp_gift_id']];
}
$map[] = ['is_can_buy', '=', 1];
$map[] = ['is_delete', '=', 1];
$gift_list = db::name('gift')->where($map)->field('gid, gift_name, base_image, gift_price')->order('gift_price asc')->page($page, $page_limit)->select();
foreach($gift_list as $k => &$v){
$v['base_image'] = localpath_to_netpath($v['base_image']);
}
return ['code' => 200, 'msg' => '获取成功', 'data' => $gift_list];
}
//设置房间助力礼物
public function operate_room_help_gift($uid, $rid, $gid){
$user_info = db::name('user')->field('uid')->find($uid);
if(!$user_info){
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
}
$room_info = db::name('room')->field('rid,room_owner_uid, room_admin_uid, help_micro_gid')->find($rid);
if(!$room_info){
return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null];
}
// $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']);
$room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid');
if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) {
return ['code' => 201, 'msg' => '无权限操作', 'data' => null];
}
$map = [];
$map[] = ['type', 'in', [1,2]];
$map[] = ['is_show', '=', 1];
$map[] = ['is_can_buy', '=', 1];
$map[] = ['is_delete', '=', 1];
$map[] = ['gid', '=', $gid];
$gift_info = db::name('gift')->where($map)->find();
if(!$gift_info){
return ['code' => 201, 'msg' => '该礼物不存在', 'data' => null];
}
$update = [];
$update['help_micro_gid'] = $gid;
$update['update_time'] = time();
$reslut = db::name('room')->where('rid', $rid)->update($update);
if($reslut){
$this->update_room_micro_aisle($uid, $rid);
return ['code' => 200, 'msg' => '设置成功', 'data' => null];
}else{
return ['code' => 201, 'msg' => '设置失败', 'data' => null];
}
}
//助力送礼
public function send_gift_user_micro_help($uid, $rid, $help_uid, $gid, $num){
$user_info = db::name('user')->field('uid')->find($uid);
if(!$user_info){
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
}
$room_info = db::name('room')->field('rid, room_host_uid,help_micro_gid')->find($rid);
if(!$room_info){
return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null];
}
if(empty($room_info['room_host_uid'])){
return ['code' => 201, 'msg' => '当前尚无主持,无法助力', 'data' => null];
}
if(empty($room_info['help_micro_gid'])){
return ['code' => 201, 'msg' => '当前房间尚未设置助力礼物', 'data' => null];
}
if(empty($gid)){
return ['code' => 201, 'msg' => '该礼物不存在', 'data' => null];
}
if($gid != $room_info['help_micro_gid']){
return ['code' => 201, 'msg' => '赠送礼物与助力礼物不匹配', 'data' => null];
}
if($num < 1){
return ['code' => 201, 'msg' => '助力礼物数量不能小于1', 'data' => null];
}
$help_user_info = db::name('user')->field('uid')->find($help_uid);
if(!$help_user_info){
return ['code' => 201, 'msg' => '助力用户不存在', 'data' => null];
}
$gift_info = db::name('gift')->find($gid);
if(!$gift_info){
return ['code' => 201, 'msg' => '该礼物不存在', 'data' => null];
}
$total_gift_price = $gift_info['gift_price'] * $num;
Db::startTrans();
try {
$reslut = model('gift')->send_gift($uid, $room_info['room_host_uid'], $rid, $gid, $num, 1, 0);
if($reslut['code'] == 201){
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
$reslut = $this->send_gift_micro_aisle_update($help_uid, $rid, $total_gift_price, $uid);
if($reslut['code'] == 201){
Db::rollback();
return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null];
}
Db::commit();
return ['code' => 200, 'msg' => '成功', 'data' => null];
} catch (\Exception $e) {
dump($e);
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => '失败', 'data' => null];
}
}
}