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

139 lines
5.1 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,$pit_id,$gift_id){
$pit_gift = db::name('vs_room_bar_pit_gift')->where(['room_id' => $room_id,'pit_id' => $pit_id, 'delete_time' => 0])->find();
if($pit_gift){
// 使用事务确保操作的原子性
db::startTrans();
try {
// 使用WHERE条件和影响行数验证确保并发安全
$result = db::name('vs_room_bar_pit_gift')
->where(['id' => $pit_gift['id'], 'delete_time' => 0])
->update([
'user_id' => $user_id,
'gift_id' => $gift_id,
'updatetime' => time(),
]);
if ($result > 0) {
db::commit();
} else {
db::rollback();
return ['code' => 0, 'msg' => '麦位上已有人', 'data' => null];
}
} catch (\Exception $e) {
db::rollback();
return ['code' => 0, 'msg' => '麦位上已有人:' . $e->getMessage(), 'data' => null];
}
} else{
// 对于插入操作也使用事务
db::startTrans();
try {
// 检查在此期间是否已经有其他请求创建了记录
$existing = db::name('vs_room_bar_pit_gift')
->where(['room_id' => $room_id, 'pit_id' => $pit_id, 'delete_time' => 0])
->find();
if ($existing) {
db::rollback();
return ['code' => 0, 'msg' => '麦位上已有人', 'data' => null];
} else {
// 执行插入操作
$insertResult = db::name('vs_room_bar_pit_gift')->insert([
'room_id' => $room_id,
'pit_id' => $pit_id,
'user_id' => $user_id,
'gift_id' => $gift_id,
'createtime' => time(),
]);
if ($insertResult) {
db::commit();
} else {
db::rollback();
return ['code' => 0, 'msg' => '插入失败', 'data' => null];
}
}
} catch (\Exception $e) {
db::rollback();
return ['code' => 0, 'msg' => '操作失败:' . $e->getMessage(), 'data' => null];
}
}
return ['code' => 1, 'msg' => '成功', 'data' => null];
}
//约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];
}
}