新需求: 盲盒转盘开发-转盘抽奖接口开发-盲盒转盘接口列表调整

This commit is contained in:
2025-08-25 19:31:12 +08:00
parent e3cf4be45d
commit d6fd286227
6 changed files with 301 additions and 22 deletions

View File

@@ -1,6 +1,7 @@
<?php
namespace app\api\model;
use app\common\controller\Push;
use think\Model;
use think\Db;
use think\Session;
@@ -18,7 +19,7 @@ class BlindBoxTurntableGift extends Model
protected $table = 'fa_vs_gift';
//获取奖池礼物列表
public function get_gift_list($gift_bag_id)
public function get_gift_list($gift_bag_id,$room_id)
{
$box = db::name('vs_gift_bag')->where('id',$gift_bag_id)->find();
$gifts = db::name('vs_gift_bag_detail')->where('gift_bag_id',$gift_bag_id)->order("id desc")->select();
@@ -34,14 +35,40 @@ class BlindBoxTurntableGift extends Model
$gift_list[$key]['gift_price'] = $gift_data['gift_price'];
}
}
$ext = json_decode($box['ext'],true);
$box_gift = Db::name('vs_gift')->where('gid',$ext['gift_id'])->find();
//巡乐会
$is_xlh = 0;
$xlh_box = db::name('vs_gift_bag')->where('id',13)->find();
$xlh_ext = json_decode($xlh_box['ext'],true);
$xlh = [];
if($xlh_ext['inlet_bag_id'] == $box['id']){
$is_xlh = 1;
$xlh['waiting_start_num'] = $xlh_ext['open_condition']['waiting_start_num'];//等待开奖次数
$xlh['start_num'] = $xlh_ext['open_condition']['start_num'];//开始开奖次数
//本期总次数
$total_number = db::name('vs_gift_bag_detail')->where(['gift_bag_id'=>$gift_bag_id])->sum('quantity')??0;
//本期剩余次数
$remaining_number = db::name('vs_room_pan')->where(['room_id'=>$room_id,'gift_bag_id'=>$gift_bag_id])->sum('remaining_number')??'0';
//当前抽奖次数
$xlh['current_num'] = $total_number - $remaining_number;
//状态
if($xlh['current_num'] >= $xlh_ext['open_condition']['start_num']){
$xlh['status'] = 1;//状态 1:巡乐会开始 2:即将开始开始 0:等待开始
} elseif($xlh['current_num'] >= $xlh_ext['open_condition']['waiting_start_num'] && $xlh['current_num'] < $xlh_ext['open_condition']['start_num']){
$xlh['status'] = 2;//状态 1:巡乐会开始 2:即将开始开始 0:等待开始
}else{
$xlh['status'] = 0;
}
}
$result_data = [
'title' => $box['name'],
'rule_url' => get_system_config_value('web_site')."/api/Page/get_gift_box_rule?box_id=".$box["id"],
'rule' => $ext['introd'],
'box_price' => $box_gift['gift_price'],
'is_xlh' => $is_xlh,
'xlh_data' => $xlh,
'gift_list' => $gift_list,
];
return ['code' => 1, 'msg' => '获取成功', 'data' => $result_data];
@@ -60,6 +87,10 @@ class BlindBoxTurntableGift extends Model
if ($user_waller['coin'] < $bag_gift['gift_price'] * $num) {
return ['code' => 0, 'msg' => '用户金币不足', 'data' => null];
}
$room = db::name('vs_room')->where(['id'=>$room_id])->find();
if ($room['is_open_blind_box_turntable'] != 1) {
return ['code' => 0, 'msg' => '该房间未开启盲盒转盘', 'data' => null];
}
//盲盒转盘抽奖记录
$box_turntable_log = db::name('vs_blind_box_turntable_log')->insertGetId([
'user_id' => $user_id,
@@ -126,12 +157,18 @@ class BlindBoxTurntableGift extends Model
public function draw_gift_one($gift_bag_id, $user_id, $gift_user_id,$gift_price,$periods,$room_id=0,$box_turntable_log=0){
//随机获取一个礼物
$where = [
'gift_bag_id' => $gift_bag_id,
'quantity' => ['>',0],
'remaining_number' => ['>',0]
'a.gift_bag_id' => $gift_bag_id,
'a.quantity' => ['>',0],
'b.remaining_number' => ['>',0],
'b.room_id' => $room_id
];
// 优化:基于剩余数量的加权随机选择
$gift_bag_details = db::name("vs_gift_bag_detail")->where($where)->select();
$gift_bag_details = db::name("vs_gift_bag_detail")
->field('a.id,a.quantity,b.remaining_number,a.weight,a.foreign_id')
->alias('a')
->join('vs_room_pan b','b.gift_bag_detail_id = a.id','left')
->where($where)
->select();
if (empty($gift_bag_details)) {
return ['code' => 0, 'msg' => '当前盲盒无可用礼物', 'data' => []];
}
@@ -181,19 +218,51 @@ class BlindBoxTurntableGift extends Model
return ['code' => 0, 'msg' => '失败,', 'data' => []];
}
//减去盲盒包礼物数量
$ret = db::name("vs_gift_bag_detail")->where('id',$gift_bag_detail['id'])->setDec('remaining_number');
// $ret = db::name("vs_gift_bag_detail")->where('id',$gift_bag_detail['id'])->setDec('remaining_number');
$ret = db::name("vs_room_pan")->where(['room_id'=>$room_id,'gift_bag_detail_id'=>$gift_bag_detail['id']])->setDec('remaining_number',1);
if(!$ret){
return ['code' => 0, 'msg' => '失败.', 'data' => []];
}
//判断剩余数量是否为0 为0重置进入下一期
$gift_bag_num = db::name("vs_gift_bag_detail")->where('gift_bag_id',$gift_bag_id)->sum('remaining_number');
$gift_bag_num = db::name("vs_room_pan")->where(['room_id'=>$room_id,'gift_bag_id'=>$gift_bag_id])->sum('remaining_number');
if($gift_bag_num <= 0){
db::name("vs_gift_bag")->where('id',$gift_bag_id)->setInc('periods');
db::name("vs_gift_bag_detail")->where('gift_bag_id',$gift_bag_id)->update(['remaining_number'=>db::raw('quantity')]);
db::name("vs_room")->where('id',$room_id)->setInc('blind_box_turntable_periods');
db::name("vs_room_pan")->where(['room_id'=>$room_id,'gift_bag_id'=>$gift_bag_id])->update(
['remaining_number' => db::raw('(SELECT quantity FROM fa_vs_gift_bag_detail WHERE id = fa_vs_room_pan.gift_bag_detail_id)')]);
}
}else{
return ['code' => 0, 'msg' => '失败!', 'data' => []];
}
//巡乐会飘屏
$xlh_box = db::name('vs_gift_bag')->where('id',13)->find();
$xlh_ext = json_decode($xlh_box['ext'],true);
if($xlh_ext['inlet_bag_id'] == $gift_bag_id['id']){
$room_name = Db::name('vs_room')->where(['id' => $room_id, 'apply_status' => 2])->value('room_name');
if($total_draw_times == $xlh_ext['open_condition']['waiting_start_num']){
//即将开始推送飘屏
$text = $room_name."的巡乐会即将开始,请大家尽快参与哦!";
}
if($total_draw_times == $xlh_ext['open_condition']['start_num']){
//正式开始推送飘屏
$text = $room_name."的巡乐会正式开始,请大家尽快参与哦!";
}
//推送礼物横幅
$push = new Push(UID, $room_id);
$room_name = Db::name('vs_room')->where(['id' => $room_id, 'apply_status' => 2])->value('room_name');
$text_list_new = [
'text' => $text,
'gift_picture' => "",
'room_id' => $room_id,
'fromUserName' => "",
'toUserName' => "",
'giftName' => "",
'roomId' => $room_id,
'number' => "",
];
$push->giftBanner($text_list_new);
}
$result_data = [
'user_id' => $user_id,
'gift_user_id'=>$gift_user_id,