240 lines
8.4 KiB
PHP
240 lines
8.4 KiB
PHP
<?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,$to_user_id,$user_id){
|
||
$return_data = [];
|
||
$pit_gift = db::name('vs_room_bar_pit_gift')->where(['room_id' => $room_id,'user_id' => $to_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'] = 6;
|
||
$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];
|
||
}
|
||
|
||
//预测版块 上线前注释掉 ======👇======
|
||
//获取 房间ID
|
||
$room_last_id = db::name('vs_room')->order('id desc')->value('id');
|
||
if($room_last_id >= 19998){
|
||
return ['code' => 0, '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];
|
||
}
|
||
|
||
} |