Files
yusheng-php/application/api/model/BarRoom.php

230 lines
8.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\api\model;
use think\Cache;
use think\Model;
use think\Db;
/*
* 酒吧房
*/
class BarRoom extends Model
{
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = true;
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 麦位时长配置
protected $pitDuration = [
'1' => 5,
'2' => 10,
'3' => 15,
'4' => 20,
'5' => 25,
'6' => 30,
];
//麦位时长列表
public function get_pit_duration_list(){
foreach ($this->pitDuration as $key => $value) {
$list[] = [
'time' => $value,
'time_str' => $value.'分钟',
];
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $list];
}
//设置房间麦位时长
public function set_pit_duration($room_id,$time){
$room = db::name('vs_room')->where(['id' => $room_id, 'delete_time' => 0, 'room_status' => 1])->find();
if(!$room){
return ['code' => 0, 'msg' => '房间不存在', 'data' => null];
}
$room_data = db::name('vs_room_bar')->where('id',$room['id'])->find();
if($room_data){
if($room_data['pit_time'] != $time){
db::name('vs_room_bar')->where('id',$room_id)->update(['pit_time' => $time]);
}
}else{
db::name('vs_room_bar')->insert([
'id' => $room_id,
'pit_time' => $time,
]);
}
//推送麦位时长
return ['code' => 1, 'msg' => '成功', 'data' => null];
}
//上麦选择礼物
public function join_pit_choose_gift($user_id,$room_id,$gift_id){
$pit_gift = db::name('vs_room_bar_pit_gift')->where(['room_id' => $room_id,'user_id' => $user_id])->find();
$pit_time = db::name('vs_room_bar')->where('id',$room_id)->value('pit_time')??5;
$end_time = time() + ($pit_time * 60);
if($pit_gift){
// 使用WHERE条件和影响行数验证确保并发安全
$result = db::name('vs_room_bar_pit_gift')
->where(['id' => $pit_gift['id']])
->update([
'gift_id' => $gift_id,
'end_time' => $end_time,
'updatetime' => time(),
'delete_time' => 0,
]);
} else{
// 执行插入操作
$result = db::name('vs_room_bar_pit_gift')->insert([
'room_id' => $room_id,
'user_id' => $user_id,
'gift_id' => $gift_id,
'end_time' => $end_time,
'createtime' => time(),
]);
}
if(!$result){
return ['code' => 0, 'msg' => '失败', 'data' => null];
}
return ['code' => 1, 'msg' => '成功', 'data' => null];
}
//约Ta礼物详情
public function get_gift_info_ta($room_id,$user_id){
$return_data = [];
$pit_gift = db::name('vs_room_bar_pit_gift')->where(['room_id' => $room_id,'user_id' => $user_id, 'delete_time' => 0])->find();
if($pit_gift){
$gift = db::name('vs_gift')->where(['gid' => $pit_gift['gift_id'], 'delete_time' => 0])->find();
if(empty($gift)){
return ['code' => 0, 'msg' => '礼物不存在', 'data' => null];
}
//当前用户钱包余额(金币)
$wallet_coin = db::name('user_wallet_coin')->where(['user_id' => $user_id])->value('coin') ?? 0;
$return_data = [
'gift_id' => $pit_gift['gift_id'],
'gift_name' => $gift['gift_name'],
'base_image' => $gift['base_image'],
'gift_price' => $gift['gift_price'],
'user_wallet_coin' => $wallet_coin,
];
}
return ['code' => 1, 'msg' => '成功', 'data' => $return_data];
}
//撩TA
public function liao_ta($room_id,$user_id,$to_user_id){
//查询撩TA礼物
$liao_ta_gif = $this->get_liao_ta_gift();
$liao_ta_gif_id = $liao_ta_gif['gid']??0;
//调用送礼接口
$re = model("api/SendGift")->send_gift($user_id,$to_user_id,$liao_ta_gif_id,1,1,$room_id);
if($re['code'] != 1){
return ['code' => 0, 'msg' => $re['msg'], 'data' => null];
}
return ['code' => 1, 'msg' => '成功', 'data' => null];
}
//一键全撩
public function one_key_liao_ta($room_id,$user_id){
//查询撩TA礼物
$liao_ta_gif = $this->get_liao_ta_gift();
$liao_ta_gif_id = $liao_ta_gif['gid']??0;
//查询麦上用户
$room_pit_Users = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7],'user_id'=>['>',0],'status' => 1])->column('user_id');
if(empty($room_pit_Users)){
return ['code' => 0, 'msg' => '没有麦上用户', 'data' => null];
}
$to_user_ids = [];
foreach ($room_pit_Users as $key => $value) {
if($user_id == $value){//自己
continue;
}
//调用送礼接口
$to_user_ids[] = $value;
}
$to_user_ids = implode(',',$to_user_ids);
$re = model("api/SendGift")->send_gift($user_id,$to_user_ids,$liao_ta_gif_id,1,1,$room_id);
if($re['code'] != 1){
return ['code' => 0, 'msg' => $re['msg'], 'data' => null];
}
return ['code' => 1, 'msg' => '成功', 'data' => null];
}
//获取撩TA礼物
public function get_liao_ta_gift(){
$cache_key = 'gift_list_17';
//2,缓存获取
$gift_data = json_decode(Cache::get($cache_key), true);
//获取到就返回
if($gift_data){
return $gift_data;
}
//查询撩TA礼物
$where = [];
$where['type'] = 4;
$where['label'] = 17;
$where['is_show'] = 1;
$where['is_can_buy'] = 1;
$where['delete_time'] = 0;
$gift_data = db::name('vs_gift')->where($where)->order('gid desc')->find();
//设置缓存
Cache::set($cache_key, json_encode($gift_data), 3600*24);
return $gift_data;
}
//约TA
public function meeting_ta($user_id,$room_id,$meet_user_id,$gift_id){
//走送礼流程
$res = model("api/SendGift")->send_gift($user_id,$meet_user_id,$gift_id,1,1,$room_id);
if($res['code'] != 1){
return ['code' => 0, 'msg' => $res['msg'], 'data' => null];
}
//创建私密房间 并告知前端拉谁进入
$room_ids = model('api/Room')->user_create_room($user_id,'酒吧私密房',get_system_config_value('web_site').'/data/avatar/head_pic.png','酒吧房产生的一次性房间',11);
if($room_ids['code'] != 1){
return ['code' => 0, 'msg' => $room_ids['msg'], 'data' => null];
}else{
//记录小房间
$datda = [
'room_id' => $room_ids['data'],
'p_room_id' => $room_id,
'user_id' => $user_id,
'meet_user_id' => $meet_user_id,
'end_time' => time() + get_system_config_value('bar_room_timea') * 60,
'createtime' => time(),
'status' => 1 //1-正常2-结束
];
db::name('vs_room_bar_movie')->insert($datda);
$text['text'] = '约TA并创建房间';
$text['room_id'] = $room_ids['data'];//前端用来让用户跳转的房间id
$text['user_id'] = $user_id;
$text['meet_user_id'] = $meet_user_id;
model('api/Chat')->sendMsg(1201,$room_id,$text);
}
return ['code' => 1, 'msg' => '成功', 'data' => null];
}
//小黑屋列表
public function black_room_list($room_id){
$list = db::name('vs_room_bar_movie')->where(['p_room_id' => $room_id,'status' => 1,'end_time' => ['>',time()]])->select();
return ['code' => 1, 'msg' => '成功', 'data' => $list];
}
}