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

227 lines
7.8 KiB
PHP
Raw Normal View History

2026-01-04 19:00:02 +08:00
<?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];
}
2026-01-06 19:57:31 +08:00
2026-01-04 19:00:02 +08:00
//实在房间麦位时长
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];
}
2026-01-06 19:57:31 +08:00
2026-01-04 19:00:02 +08:00
//上麦选择礼物
2026-01-05 14:25:31 +08:00
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();
2026-01-05 14:25:31 +08:00
$pit_time = db::name('vs_room_bar')->where('id',$room_id)->value('pit_time');
$end_time = time()+$pit_time * 60;
2026-01-04 19:00:02 +08:00
if($pit_gift){
2026-01-05 14:25:31 +08:00
// 使用WHERE条件和影响行数验证确保并发安全
$result = db::name('vs_room_bar_pit_gift')
->where(['id' => $pit_gift['id'], 'delete_time' => 0])
->update([
'gift_id' => $gift_id,
'end_time' => $end_time,
'updatetime' => time(),
'delete_time' => 0,
2026-01-05 14:25:31 +08:00
]);
2026-01-04 19:00:02 +08:00
} else{
2026-01-05 14:25:31 +08:00
// 执行插入操作
$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];
2026-01-04 19:00:02 +08:00
}
return ['code' => 1, 'msg' => '成功', 'data' => null];
}
2026-01-06 19:57:31 +08:00
2026-01-04 19:00:02 +08:00
//约Ta礼物详情
public function get_gift_info_ta($user_id,$room_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(['id' => $pit_gift['gift_id'], 'delete_time' => 0])->find();
if(empty($gift)){
return ['code' => 0, 'msg' => '礼物不存在', 'data' => null];
}
$return_data = [
'gift_id' => $pit_gift['gift_id'],
'gift_name' => $gift['name'],
'base_image' => $gift['base_image'],
'gift_price' => $gift['gift_price'],
];
}
return ['code' => 1, 'msg' => '成功', 'data' => $return_data];
}
2026-01-06 19:57:31 +08:00
//撩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;
//调用送礼接口
2026-01-06 20:44:50 +08:00
$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];
}
2026-01-06 19:57:31 +08:00
//一键全撩
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])->value('user_id');
if(empty($room_pit_Users)){
return ['code' => 0, 'msg' => '没有麦上用户', 'data' => null];
}
$to_user_ids = [];
2026-01-06 19:57:31 +08:00
foreach ($room_pit_Users as $key => $value) {
2026-01-07 16:37:26 +08:00
if($user_id == $value){//自己
continue;
}
2026-01-06 19:57:31 +08:00
//调用送礼接口
$to_user_ids[] = $value;
}
2026-01-06 19:57:31 +08:00
$to_user_ids = implode(',',$to_user_ids);
2026-01-06 20:44:50 +08:00
$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];
}
2026-01-06 19:57:31 +08:00
//获取撩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;
}
2026-01-06 20:44:50 +08:00
//约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,
2026-01-06 20:44:50 +08:00
'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];
}
2026-01-07 16:37:26 +08:00
//小黑屋列表
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];
}
2026-01-04 19:00:02 +08:00
}