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

196 lines
7.2 KiB
PHP
Raw Normal View History

2025-08-07 20:21:47 +08:00
<?php
namespace app\api\model;
2025-12-25 16:20:02 +08:00
use think\Cache;
2025-08-07 20:21:47 +08:00
use think\Model;
use think\Db;
use think\Session;
class Gift extends Model
{
// 开启自动写入时间戳字段
protected $autoWriteTimestamp = true;
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 定义字段类型
protected $label = [1=>'热门',2=>'趣味', 3=>'情侣', 4=>'挂件'];
protected $table = 'fa_vs_gift';
//获取礼物类型
public function get_gift_label($type,$no_label = [])
2025-08-07 20:21:47 +08:00
{
if($type == 2) {//打赏 不需要热度卡
$no_label = [1013];
}
2025-12-25 16:28:50 +08:00
$giftType = [];
2026-01-23 17:33:26 +08:00
//礼物
2026-01-20 11:28:26 +08:00
$giftTypeData = db::name('vs_gift_label')
->where('delete_time',0)
->where('tid',1)
->whereNotIn('id',$no_label)
->order("sort asc,id desc")
->select();
2025-08-07 20:21:47 +08:00
foreach ($giftTypeData as $key => $value) {
$giftType[$key]['id'] = $value['id'];
$giftType[$key]['name'] = $value['name'];
2026-01-23 17:41:40 +08:00
$giftType[$key]['sort'] = $value['sort'];
2025-08-07 20:21:47 +08:00
}
//增加房间热度卡
if (!in_array(1013, $no_label)) {
$giftType[] = ['id' => 1013, 'name' => '房间热度卡', 'sort' => 0];
2026-01-23 17:36:02 +08:00
}
2026-01-23 17:36:02 +08:00
//排序 1013排到最前面去
usort($giftType, function($a, $b) {
2026-01-23 17:41:40 +08:00
return $a['sort'] <=> $b['sort'];
2026-01-23 17:36:02 +08:00
});
2025-08-07 20:21:47 +08:00
return ['code' => 1, 'msg' => '获取成功', 'data' => $giftType];
}
2025-12-25 16:20:02 +08:00
//拉取礼物列表
public function get_gift_list($label = 0,$room_id = 0,$user_id = 0)
2025-08-07 20:21:47 +08:00
{
2026-01-23 17:20:31 +08:00
if($label == 1013){//房间热度卡
$list = db::name('vs_user_decorate')
->field('a.udid,a.num,b.title,b.base_image,b.price,b.ext_value')
->alias('a')
->join('vs_decorate b','a.did=b.did')
->where([
'a.user_id'=>$user_id,
'a.type'=>13,
'a.num' => ['>',0]
])
->order('a.num desc')
->select();
$return_data = [];
if($list){
foreach ($list as $k=>$v) {
$return_data[$k]['gift_id'] = $v['udid'];
$return_data[$k]['gift_name'] = $v['title'];
$return_data[$k]['base_image'] = $v['base_image'];
$return_data[$k]['gift_price'] = $v['price'];
2026-01-23 17:33:26 +08:00
$return_data[$k]['num'] = $v['num'];
2026-01-26 09:55:06 +08:00
$return_data[$k]['label'] = 1013;
2026-01-23 17:20:31 +08:00
}
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $return_data];
}
//其他礼物类型
$is_lock = 0;
if ($label == 13) { // 专属礼物
$Nobility = model('api/Nobility')->getUserNobilityInfo($user_id);
$power_list_ids = array_column($Nobility['power_list'],'id');
if(!in_array(5,$power_list_ids)){
$is_lock = 1;
}
}
2025-12-25 16:20:02 +08:00
//先从缓存获取
if($is_lock){
$cache_key = 'gift_list_'.$label.'_'.$is_lock;
}else{
$cache_key = 'gift_list_'.$label;
}
$list = json_decode(Cache::get($cache_key), true);
if($list){
return ['code' => 1, 'msg' => '获取成功', 'data' => $list];
}
2025-08-07 20:21:47 +08:00
$map['delete_time'] = 0;
$where['is_show'] = 1;
if ($label == 99) { // 拍卖卡关系选择的礼物
2025-08-07 20:21:47 +08:00
$gift_price = get_system_config_value('room_love_auction_cion');
$where['gift_price'] = ['>',$gift_price];
$where['label'] = ['in',[1,5]];
}elseif ($label == 100) {// 哥单礼物
$gift_price = get_system_config_value('singer_lowest_cion');//歌单最低价格
$where['gift_price'] = ['>',$gift_price];
$where['label'] = ['in',[1,5]];
}elseif($label == 0){// 其他普通礼物
$where['label'] = ['in',[1,5]];
}else{
$map['label'] = $label;
2025-08-07 20:21:47 +08:00
}
2025-12-25 16:20:02 +08:00
2025-12-17 12:57:36 +08:00
$is_open_blind_box_turntable = 1;
2025-12-31 03:19:22 +08:00
$list = $this->field('gid as gift_id,gift_name,base_image,gift_price,icon')->where($map)->where($where)->order('sort desc, gift_price asc')->select();
2025-08-07 20:21:47 +08:00
if($label==2){
2025-10-20 09:59:39 +08:00
$list_data = [];
2025-08-07 20:21:47 +08:00
foreach ($list as &$v) {
//获取盲盒列表
2025-10-20 09:59:39 +08:00
$box_list = Db::name('vs_gift_bag')->where(['status'=>1])->where(['activities_id'=>["in",[4,5]]])->select();
2025-08-07 20:21:47 +08:00
foreach ($box_list as $key =>$box) {
$ext = json_decode($box['ext'],true);
if ($ext['gift_id'] == $v['gift_id']) {
$v['gift_bag_name'] = $box['name'];
$v['rule'] = $ext['description'];
$v['rule_url'] = get_system_config_value('web_site')."/api/Page/get_gift_box_rule?box_id=".$box["id"];
2025-10-20 09:59:39 +08:00
$v['activities_id'] = $box['activities_id'];
$v['gift_bag'] = $box['id'];
2025-08-07 20:21:47 +08:00
break;
}
}
2025-12-25 14:49:41 +08:00
//爆币
$pool_gift_id = db::name('bb_lottery_config')->where(['key' => 'pool_gift_id'])->value('value');
if($pool_gift_id == $v['gift_id']){
2025-12-25 16:29:14 +08:00
$v['gift_bag_name'] = "幸运币活动";
$v['rule'] = "幸运羽币";
$v['rule_url'] = get_system_config_value('web_site')."/api/Page/page_show?id=35";
2025-12-25 14:49:41 +08:00
$v['activities_id'] = 88;
$v['gift_bag'] = 0;
}
2025-08-07 20:21:47 +08:00
}
2025-10-20 09:59:39 +08:00
foreach ($list as $gift) {
if($is_open_blind_box_turntable == 1){
$list_data[] = $gift;
}else{
if(isset($gift['activities_id']) && $gift['activities_id'] == 4){
$list_data[] = $gift;
}
}
}
2025-12-31 03:19:22 +08:00
// usort($list_data, function($a, $b) {
// return $a['gift_id'] <=> $b['gift_id'];
// });
2025-10-20 09:59:39 +08:00
$list = $list_data;
2025-08-07 20:21:47 +08:00
}
2025-12-25 16:20:02 +08:00
2025-11-18 17:42:58 +08:00
//获取配置里面的CP礼物
$cp_gift_ids = explode(',', get_system_config_value('cp_gift_id'));
2025-12-12 18:27:36 +08:00
$teacher_gift_ids = explode(',', get_system_config_value('master_special_gift'));
2025-11-18 18:21:32 +08:00
$cp_gift = [];
2025-12-12 18:27:36 +08:00
$teacher_gift = [];
2025-11-18 18:21:32 +08:00
foreach ($list as $key =>&$v) {
$v['is_lock'] = $is_lock;
2025-11-18 17:42:58 +08:00
if (in_array($v['gift_id'], $cp_gift_ids)) {
$v['is_cp'] = 1;
2025-11-18 18:21:32 +08:00
$cp_gift[] = $v;
unset($list[$key]);
2025-11-18 17:42:58 +08:00
}else{
$v['is_cp'] = 0;
}
2025-12-12 18:27:36 +08:00
if (in_array($v['gift_id'], $teacher_gift_ids)) {
$v['is_teacher'] = 1;
$teacher_gift[] = $v;
unset($list[$key]);
}else{
$v['is_teacher'] = 0;
}
}
2025-11-18 18:21:32 +08:00
//如果有CP礼物 则放在最前面
if ($cp_gift) {
array_unshift($list, ...$cp_gift);
}
2025-12-12 18:27:36 +08:00
if ($teacher_gift) {
array_unshift($list, ...$teacher_gift);
}
2025-12-25 16:20:02 +08:00
//设置缓存
Cache::set($cache_key, json_encode($list), 3600);
2025-08-07 20:21:47 +08:00
return ['code' => 1, 'msg' => '获取成功', 'data' => $list];
}
}