2025-08-07 20:21:47 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace app\api\model;
|
|
|
|
|
|
use app\common\controller\Push;
|
|
|
|
|
|
use think\Loader;
|
|
|
|
|
|
use think\Log;
|
|
|
|
|
|
use think\Model;
|
|
|
|
|
|
use think\Session;
|
|
|
|
|
|
use think\Db;
|
|
|
|
|
|
|
|
|
|
|
|
class GiveGift extends Model
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
// 开启自动写入时间戳字段
|
|
|
|
|
|
protected $autoWriteTimestamp = 'int';
|
|
|
|
|
|
// 定义时间戳字段名
|
|
|
|
|
|
protected $createTime = 'createtime';
|
|
|
|
|
|
protected $updateTime = 'updatetime';
|
|
|
|
|
|
private $redis;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct($data = [])
|
|
|
|
|
|
{
|
|
|
|
|
|
parent::__construct($data);
|
|
|
|
|
|
$this->redis = \think\Cache::store('redis')->handler();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
* 送礼物
|
|
|
|
|
|
* @param int $uid 用户id
|
|
|
|
|
|
* @param int $from_id 来源id
|
|
|
|
|
|
* @param str $to_uid 接收礼物用户id字符串逗号分隔
|
|
|
|
|
|
* @param int $gid 礼物id
|
|
|
|
|
|
* @param int $num 礼物数量
|
|
|
|
|
|
* @param int $from_type 来源 1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼
|
|
|
|
|
|
* @param int $type 金币购买 1金币购买 2送背包礼物
|
|
|
|
|
|
* @param int $pit_number 坑位编号
|
|
|
|
|
|
* @return array
|
|
|
|
|
|
* 用户,在房间中,给谁,送了什么礼物,多少个,来源
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function give_gift($uid,$to_uid,$gid,$num,$from_type,$type,$from_id = 0,$pit_number = 0,$change_type = 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
//送的礼物信息
|
|
|
|
|
|
$gift_info = Db::name('vs_gift')->where(['gid'=>$gid])
|
|
|
|
|
|
->field('gid as gift_id,gift_name,gift_price,file_type,base_image,play_image,gift_type,label,is_public_screen')->find();
|
|
|
|
|
|
if(empty($gift_info)){
|
|
|
|
|
|
return ['code' => 0, 'msg' => '礼物不存在', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
if(!$to_uid){
|
|
|
|
|
|
return ['code' => 0, 'msg' => '请选择收礼人', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
$toarray = explode(',',$to_uid);
|
|
|
|
|
|
if(in_array($uid,$toarray)){
|
|
|
|
|
|
return ['code' => 0, 'msg' => '收礼人不能包含自己', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
if (ceil($num) != $num) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '打赏礼物数量必须为整数', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
if ($num < 1) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '打赏礼物数量必须大于零', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
$user_info = Db::name('user')->where(['id'=>$uid,'status'=>1])->find();
|
|
|
|
|
|
if(empty($user_info)){
|
|
|
|
|
|
return ['code' => 301, 'msg' => '当前用户登录失效', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//获取送礼用户昵称
|
|
|
|
|
|
$FromUserInfo = db::name('user')->where('id',$uid)->field('id as user_id,nickname,avatar,sex')->find();
|
|
|
|
|
|
$FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($uid);//财富图标
|
|
|
|
|
|
$FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($uid);//魅力图标
|
|
|
|
|
|
|
|
|
|
|
|
//送给一人礼物的总价格(扣除用户的数额)
|
|
|
|
|
|
$gift_price = $gift_info['gift_price'] * $num;
|
|
|
|
|
|
//送礼 开启事务
|
|
|
|
|
|
Db::startTrans();
|
|
|
|
|
|
$roomId = 0;
|
|
|
|
|
|
if($from_type == 2 || $from_type == 3 || $from_type == 6){
|
|
|
|
|
|
$roomId = $from_id;
|
|
|
|
|
|
}
|
|
|
|
|
|
//金币购买送礼 1金币购买 2送背包礼物
|
|
|
|
|
|
if ($type == 1) {
|
|
|
|
|
|
//送给所有人的总价格
|
|
|
|
|
|
$all_gift_price = $gift_info['gift_price'] * $num * count($toarray);
|
|
|
|
|
|
//判断是否有足够的金币
|
|
|
|
|
|
$user_waller = db::name('user_wallet')->where(['user_id'=>$uid])->find();
|
|
|
|
|
|
if ($user_waller['coin'] < $all_gift_price) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '用户金币不足', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//扣除用户金币并记录日志
|
|
|
|
|
|
$wallet_update = $this -> change_user_cion_or_earnings_log($uid,$all_gift_price,$from_id,1,10,'用户金币购买礼物');
|
|
|
|
|
|
if(!$wallet_update){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '扣除用户金币失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//用户财富等级更新
|
|
|
|
|
|
$user_level = model('Level')->user_level_data_update($uid,$all_gift_price,1,$roomId);
|
|
|
|
|
|
if(!$user_level){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
//背包礼物是否充足
|
|
|
|
|
|
$user_gift_pack = db::name('vs_user_gift_pack')->where(['user_id'=>$uid,'gid'=>$gid])->find();
|
|
|
|
|
|
if (empty($user_gift_pack)) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '用户背包礼物不足', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
if ($user_gift_pack['num'] < $num * count($toarray)) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '用户背包礼物不足', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//扣除背包礼物并记录日志
|
|
|
|
|
|
if($from_type == 1 || $from_type == 2 || $from_type == 3 || $from_type == 6){//1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务
|
|
|
|
|
|
$packType = 3;//1系统赠送2礼包获得3礼物赠送4系统扣除,5动态打赏
|
|
|
|
|
|
$remark = '聊天或房间礼物赠送';
|
|
|
|
|
|
}elseif ($from_type == 4){
|
|
|
|
|
|
$packType = 5;
|
|
|
|
|
|
$remark = '动态打赏';
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$packType = -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
$gift_pack = $this -> change_user_gift_pack_log($packType,$uid,$gid,$num * count($toarray),$remark);
|
|
|
|
|
|
if(!$gift_pack){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '扣除用户背包礼物失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//循环送礼
|
|
|
|
|
|
$gift_total = 0;
|
|
|
|
|
|
$give_gift = 0;
|
|
|
|
|
|
foreach ($toarray as $to_id){
|
|
|
|
|
|
$gift_box1 = [];
|
|
|
|
|
|
$gift_box = [];
|
|
|
|
|
|
//查询礼物是否是盲盒
|
|
|
|
|
|
if($gift_info['label'] == 2){//趣味礼物(盲盒)
|
|
|
|
|
|
$gift_price_box = 0;
|
|
|
|
|
|
for($i = 0; $i < $num; $i++){
|
|
|
|
|
|
$gift_box1[$i] = $this -> open_box($gid,$uid,$to_id,$from_id);
|
|
|
|
|
|
if($gift_box1[$i]['code'] != 1){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '盲盒配置有误请联系管理员'.$gift_box1[$i]['msg'], 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
$gift_box[$i] = $gift_box1[$i]['data'];
|
|
|
|
|
|
//记录一下收礼记录
|
|
|
|
|
|
$give_gift = $this -> change_user_give_gift_log($uid,$gift_box[$i]['gift_id'],$gift_box[$i]['gift_price'],1,$to_id,$from_type,$type,$from_id,$pit_number,2);
|
|
|
|
|
|
if(!$give_gift){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '送礼失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
$gift_box[$i]['give_gift_id'] = $give_gift;
|
|
|
|
|
|
$gift_price_box += $gift_box[$i]['gift_price'];
|
|
|
|
|
|
Log::record("盲盒礼物".json_encode($gift_box1),"info");
|
|
|
|
|
|
}
|
|
|
|
|
|
$gift_total += $gift_price_box;
|
|
|
|
|
|
$gift_price = $gift_price_box;
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$gift_total += $gift_price;
|
|
|
|
|
|
//收礼记录行为日志
|
|
|
|
|
|
$give_gift = $this -> change_user_give_gift_log($uid,$gid,$gift_price,$num,$to_id,$from_type,$type,$from_id,$pit_number);
|
|
|
|
|
|
if(!$give_gift){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '送礼失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//计算收礼人得益
|
|
|
|
|
|
$receiver_earnings = $this -> receiver_earnings($to_id,$gift_price,$from_type);
|
|
|
|
|
|
if($receiver_earnings <= 0){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '收礼人收益配置有误', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼
|
|
|
|
|
|
if($from_type == 1 || $from_type == 2 || $from_type == 3 ||$from_type == 4 || $from_type == 6){
|
|
|
|
|
|
//增加收益并记录日志
|
|
|
|
|
|
$receiver = $this -> change_user_cion_or_earnings_log($to_id,$receiver_earnings,$from_id,2,11,'收礼增加收益');
|
|
|
|
|
|
}elseif($from_type == 5){
|
|
|
|
|
|
//增加收益并记录日志
|
|
|
|
|
|
$receiver = $this -> change_user_cion_or_earnings_log($to_id,$receiver_earnings,$from_id,1,$change_type,'活动增加金币');
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$receiver = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(!$receiver){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '收礼人收益失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//用户魅力等级更新
|
|
|
|
|
|
$user_level = model('Level')->user_level_data_update($to_id,$gift_price,2,$roomId);
|
|
|
|
|
|
if(!$user_level){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$room_owner_earnings = 0;//房主收益
|
|
|
|
|
|
$room_owner_earningsg = 0;//公会会长收益
|
|
|
|
|
|
//是否在房间
|
|
|
|
|
|
if(isset($from_id) && ($from_type == 2 || $from_type == 6)){
|
|
|
|
|
|
if($from_type == 6){ //cp电影房
|
|
|
|
|
|
//房主有收益
|
|
|
|
|
|
if(get_system_config_value('room_cp_room_user_ratio') > 0){
|
|
|
|
|
|
$room_owner = Db::name('vs_room')->where(['id'=>$from_id,'apply_status'=>2])->value('user_id');
|
|
|
|
|
|
//计算房主收益//room_author_ratio
|
|
|
|
|
|
$room_owner_earnings = $this -> receiver_earnings($room_owner,$gift_price,699);
|
|
|
|
|
|
if($room_owner_earnings > 0){
|
|
|
|
|
|
//增加收益并记录日志
|
|
|
|
|
|
$room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earnings,$from_id,2,18,'房主收益');
|
|
|
|
|
|
if(!$room_owner_earning){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '房主收益失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//公会长收益
|
|
|
|
|
|
if(get_system_config_value('room_cp_guild_user_ratio') > 0){
|
|
|
|
|
|
$guild_id = Db::name('vs_guild_user')->where(['user_id'=>$to_uid,'status'=>1])->value('guild_id');
|
|
|
|
|
|
if($guild_id){
|
|
|
|
|
|
$room_guild = Db::name('vs_guild')->where(['id'=>$guild_id])->value('user_id');
|
|
|
|
|
|
//计算会长收益
|
|
|
|
|
|
$room_owner_earningsg = $this -> receiver_earnings($room_guild,$gift_price,698);
|
|
|
|
|
|
//增加收益并记录日志
|
|
|
|
|
|
$room_owner_earningg = $this -> change_user_cion_or_earnings_log($room_guild,$room_owner_earningsg,$from_id,2,21,'工会长收益');
|
|
|
|
|
|
if(!$room_owner_earningg){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '工会长收益失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$room_owner = Db::name('vs_room')->where(['id'=>$from_id,'apply_status'=>2])->value('user_id');
|
|
|
|
|
|
//计算房主收益//room_author_ratio
|
|
|
|
|
|
$room_owner_earnings = $this -> receiver_earnings($room_owner,$gift_price,99);
|
|
|
|
|
|
if($room_owner_earnings > 0){
|
|
|
|
|
|
//主持人收益
|
|
|
|
|
|
//在主持位的主持人
|
|
|
|
|
|
$host_id = Db::name('vs_room_pit')->where(['room_id'=>$from_id,'pit_number'=>9])->value('user_id');
|
|
|
|
|
|
if($host_id){
|
|
|
|
|
|
//计算主持人收益
|
|
|
|
|
|
$host_earnings = $this -> receiver_earnings($host_id,$room_owner_earnings,98,$from_id);
|
|
|
|
|
|
if($host_earnings > 0){
|
|
|
|
|
|
//增加主持人收益并记录日志
|
|
|
|
|
|
$host_earnings_earning = $this -> change_user_cion_or_earnings_log($host_id,$host_earnings,$from_id,2,19,'主持人收益');
|
|
|
|
|
|
if(!$host_earnings_earning){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '主持人收益失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//增加房主收益并记录日志
|
|
|
|
|
|
$room_owner_earningss = $room_owner_earnings - $host_earnings;
|
|
|
|
|
|
$room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earningss,$from_id,2,18,'房主收益');
|
|
|
|
|
|
if(!$room_owner_earning){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '房主收益失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
//增加房主收益并记录日志
|
|
|
|
|
|
$room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earnings,$from_id,2,18,'房主收益');
|
|
|
|
|
|
if(!$room_owner_earning){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '房主收益失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if($gift_info['label'] == 2){
|
|
|
|
|
|
foreach ($gift_box as $gv) {
|
|
|
|
|
|
//记录送礼利率和各方收益
|
|
|
|
|
|
//收礼人是否加入公会
|
|
|
|
|
|
$configs = get_system_config();
|
|
|
|
|
|
$is_join_guild = Db::name('vs_guild_user')->where(['user_id' => $to_uid, 'status' => 1, 'quit_time' => 0])->field('guild_id')->find();
|
|
|
|
|
|
//收益增加 加入工会的收益
|
|
|
|
|
|
if ($is_join_guild) {
|
|
|
|
|
|
$ratiog = $configs['room_gift_guild_ratio'];
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$ratiog = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
//未加入工会的收益
|
|
|
|
|
|
$ratiogr = $configs['room_gift_ratio'];
|
|
|
|
|
|
//收礼人最终的收益比例
|
|
|
|
|
|
$ratio = $ratiogr + $ratiog;
|
|
|
|
|
|
//房主收益大于0 就代表有收益 且在房间
|
|
|
|
|
|
if ($room_owner_earningsg > 0) {
|
|
|
|
|
|
$guid_ratio = $configs['room_cp_guild_user_ratio'];
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$guid_ratio = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
//平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益
|
|
|
|
|
|
$app_ratio = 100 - $ratio - $configs['room_author_ratio'] - $guid_ratio;
|
|
|
|
|
|
$app_earning = coin_earning($gv['gift_price'], $app_ratio);
|
|
|
|
|
|
$gift_rate = $this->change_give_gift_profit($gv['give_gift_id'], $ratio, $receiver_earnings, $configs['room_author_ratio'], $room_owner_earnings, $app_ratio, $app_earning);
|
|
|
|
|
|
if (!$gift_rate) {
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '礼物记录失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
//记录送礼利率和各方收益
|
|
|
|
|
|
//收礼人是否加入公会
|
|
|
|
|
|
$configs = get_system_config();
|
|
|
|
|
|
$is_join_guild = Db::name('vs_guild_user')->where(['user_id' => $to_uid, 'status' => 1, 'quit_time' => 0])->field('guild_id')->find();
|
|
|
|
|
|
//收益增加 加入工会的收益
|
|
|
|
|
|
if ($is_join_guild) {
|
|
|
|
|
|
$ratiog = $configs['room_gift_guild_ratio'];
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$ratiog = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
//未加入工会的收益
|
|
|
|
|
|
$ratiogr = $configs['room_gift_ratio'];
|
|
|
|
|
|
//收礼人最终的收益比例
|
|
|
|
|
|
$ratio = $ratiogr + $ratiog;
|
|
|
|
|
|
//房主收益大于0 就代表有收益 且在房间
|
|
|
|
|
|
if ($room_owner_earningsg > 0) {
|
|
|
|
|
|
$guid_ratio = $configs['room_cp_guild_user_ratio'];
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$guid_ratio = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
//平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益
|
|
|
|
|
|
$app_ratio = 100 - $ratio - $configs['room_author_ratio'] - $guid_ratio;
|
|
|
|
|
|
$app_earning = coin_earning($gift_price, $app_ratio);
|
|
|
|
|
|
$gift_rate = $this->change_give_gift_profit($give_gift, $ratio, $receiver_earnings, $configs['room_author_ratio'], $room_owner_earnings, $app_ratio, $app_earning);
|
|
|
|
|
|
if (!$gift_rate) {
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code' => 0, 'msg' => '礼物记录失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$ToUserInfo = Db::name('user')->where(['id' => $to_id])->field('id as user_id,nickname,avatar,sex')->find();
|
|
|
|
|
|
$ToUserInfo['icon'][0] = model('UserData')->user_wealth_icon($to_id);//财富图标
|
|
|
|
|
|
$ToUserInfo['icon'][1] = model('UserData')->user_charm_icon($to_id);//魅力图标
|
|
|
|
|
|
$ToUserInfo['charm'] = db::name('vs_room_user_charm')->where(['user_id' => $to_id,'room_id' => $from_id])->value('charm');//魅力
|
|
|
|
|
|
|
|
|
|
|
|
if(isset($from_id) && ($from_type == 2 || $from_type == 6)){
|
|
|
|
|
|
//查询房间是否在PK中 是fa_vs_room_pk 表中的 room_id_a,还是room_id_b
|
|
|
|
|
|
$room_pk = Db::name('vs_room_pk')->where(['status' => 3, 'room_id_a' => $from_id])->field('pk_id')->find();
|
|
|
|
|
|
if (!empty($room_pk)) {
|
|
|
|
|
|
// 当前 room_id 是 room_id_a 修改create_value_a
|
|
|
|
|
|
$rooma = Db::name('vs_room_pk')->where('pk_id', $room_pk['pk_id'])->setInc('create_value_a', $gift_price * 10);
|
|
|
|
|
|
$roomPKinfo = Db::name('vs_room_pk')->where('pk_id', $room_pk['pk_id'])->find();
|
|
|
|
|
|
//推送变化
|
|
|
|
|
|
$text = [
|
|
|
|
|
|
'room_id_a' => $roomPKinfo['room_id_a'],//发起者房间id
|
|
|
|
|
|
'create_value_a' => $roomPKinfo['create_value_a'],//发起者房间值
|
|
|
|
|
|
'room_id_b' => $roomPKinfo['room_id_b'],//接受者房间id
|
|
|
|
|
|
'receive_value_b' => $roomPKinfo['receive_value_b'],//接受者房间值
|
|
|
|
|
|
'text' => ''
|
|
|
|
|
|
];
|
|
|
|
|
|
model('Chat')->sendMsg(1015,$roomPKinfo['room_id_a'],$text);
|
|
|
|
|
|
model('Chat')->sendMsg(1015,$roomPKinfo['room_id_b'],$text);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// 当前 room_id 不是 room_id_a,可能是 room_id_b 或者不存在
|
|
|
|
|
|
$room_pk_b = Db::name('vs_room_pk')->where(['status' => 3, 'room_id_b' => $from_id])->field('pk_id')->find();
|
|
|
|
|
|
if (!empty($room_pk_b)) {
|
|
|
|
|
|
// 当前 room_id 是 room_id_b
|
|
|
|
|
|
$roomb = Db::name('vs_room_pk')->where('pk_id', $room_pk_b['pk_id'])->setInc('receive_value_b', $gift_price * 10);
|
|
|
|
|
|
$roomPKinfo = Db::name('vs_room_pk')->where('pk_id', $room_pk_b['pk_id'])->find();
|
|
|
|
|
|
//推送变化
|
|
|
|
|
|
$text = [
|
|
|
|
|
|
'room_id_a' => $roomPKinfo['room_id_a'],//发起者房间id
|
|
|
|
|
|
'create_value_a' => $roomPKinfo['create_value_a'],//发起者房间值
|
|
|
|
|
|
'room_id_b' => $roomPKinfo['room_id_b'],//接受者房间id
|
|
|
|
|
|
'receive_value_b' => $roomPKinfo['receive_value_b'],//接受者房间值
|
|
|
|
|
|
'text' => ''
|
|
|
|
|
|
];
|
|
|
|
|
|
model('Chat')->sendMsg(1015,$roomPKinfo['room_id_a'],$text);
|
|
|
|
|
|
model('Chat')->sendMsg(1015,$roomPKinfo['room_id_b'],$text);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//推送礼物特效
|
|
|
|
|
|
if($gift_info['label'] == 2){
|
|
|
|
|
|
//循环开出来的盲盒,相同的礼物只推送一次,消息推送为$FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 趣味礼物 ' .$gift_inf['gift_name'].' x 多少';
|
|
|
|
|
|
if($gift_box){
|
|
|
|
|
|
// 统计相同礼物的数量
|
|
|
|
|
|
$giftCount = [];
|
|
|
|
|
|
foreach ($gift_box as $gv) {
|
|
|
|
|
|
if (isset($giftCount[$gv['gift_id']])) {
|
|
|
|
|
|
$giftCount[$gv['gift_id']]['count']++;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$giftCount[$gv['gift_id']] = [
|
|
|
|
|
|
'gift_info' => Db::name('vs_gift')->where(['gid'=>$gv['gift_id']])
|
|
|
|
|
|
->field('gid as gift_id,gift_name,gift_price,file_type,base_image,play_image,gift_type,label,is_public_screen')->find(),
|
|
|
|
|
|
'count' => 1
|
|
|
|
|
|
];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 构建文字消息内容
|
|
|
|
|
|
$giftTextList = [];
|
|
|
|
|
|
foreach ($giftCount as $giftData) {
|
|
|
|
|
|
$gift_inf = $giftData['gift_info'];
|
|
|
|
|
|
$count = $giftData['count'];
|
|
|
|
|
|
$giftTextList[] = $gift_inf['gift_name'].' X'.$count;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 推送文字消息 (格式: 张三 送给 李四 趣味礼物 礼物名1 X2,礼物2 X4)
|
|
|
|
|
|
$textMessage = $FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 趣味礼物 ' . implode(',', $giftTextList);
|
|
|
|
|
|
$textData = [
|
|
|
|
|
|
'FromUserInfo' => $FromUserInfo,
|
|
|
|
|
|
// 'ToUserInfo' => $ToUserInfo,
|
|
|
|
|
|
// 'GiftInfo' => $gift_info,
|
|
|
|
|
|
// 'GiftNum' => $num,
|
|
|
|
|
|
'text' => $textMessage
|
|
|
|
|
|
];
|
|
|
|
|
|
// 聊天室推送文字消息
|
|
|
|
|
|
model('Chat')->sendMsg(1038,$from_id,$textData);
|
|
|
|
|
|
|
|
|
|
|
|
// 循环推送每个礼物的特效消息
|
|
|
|
|
|
foreach ($giftCount as $giftId => $giftData) {
|
|
|
|
|
|
$gift_inf = $giftData['gift_info'];
|
|
|
|
|
|
$count = $giftData['count'];
|
|
|
|
|
|
|
|
|
|
|
|
// 推送礼物特效消息
|
|
|
|
|
|
$effectData = [
|
|
|
|
|
|
'FromUserInfo' => $FromUserInfo,
|
|
|
|
|
|
'ToUserInfo' => $ToUserInfo,
|
|
|
|
|
|
'GiftInfo' => $gift_inf,
|
|
|
|
|
|
'GiftNum' => $count,
|
|
|
|
|
|
'text' => null
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
// 聊天室推送礼物特效消息
|
|
|
|
|
|
model('Chat')->sendMsg(1005,$from_id,$effectData);
|
|
|
|
|
|
|
|
|
|
|
|
$roomtype = Db::name('vs_room')->where(['id' => $from_id])->value('type_id');
|
|
|
|
|
|
if($roomtype == 6){
|
|
|
|
|
|
//推送消息
|
|
|
|
|
|
$hot_value = db::name('vs_give_gift')->where('from_id', $from_id)->where('from',6)
|
|
|
|
|
|
->sum('total_price');
|
|
|
|
|
|
$text1 = [
|
|
|
|
|
|
'room_id' => $from_id,
|
|
|
|
|
|
'hot_value' => $hot_value * 10,
|
|
|
|
|
|
'text' => '房间心动值变化'
|
|
|
|
|
|
];
|
|
|
|
|
|
//聊天室推送系统消息
|
|
|
|
|
|
model('Chat')->sendMsg(1028,$from_id,$text1);
|
|
|
|
|
|
}else{
|
|
|
|
|
|
if($gift_inf['is_public_screen'] == 1){
|
|
|
|
|
|
//推送礼物横幅
|
|
|
|
|
|
$push = new Push(UID, $from_id);
|
|
|
|
|
|
$room_name = Db::name('vs_room')->where(['id' => $from_id, 'apply_status' => 2])->value('room_name');
|
|
|
|
|
|
$bannerText = $FromUserInfo['nickname'] . '在' . $room_name . '房间送给了' . $ToUserInfo['nickname'] . $gift_inf['gift_name'] . 'X' . $count;
|
|
|
|
|
|
$text_list_new = [
|
|
|
|
|
|
'text' => $bannerText,
|
|
|
|
|
|
'gift_picture' => $gift_inf['base_image'],
|
|
|
|
|
|
'room_id' => $from_id,
|
|
|
|
|
|
'fromUserName' => $FromUserInfo['nickname'],
|
|
|
|
|
|
'toUserName' => $ToUserInfo['nickname'],
|
|
|
|
|
|
'giftName' => $gift_inf['gift_name'],
|
|
|
|
|
|
'roomId' => $from_id,
|
|
|
|
|
|
'number' => $count,
|
|
|
|
|
|
];
|
|
|
|
|
|
$push->giftBanner($text_list_new);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$text = $FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 礼物 ' .$gift_info['gift_name'].' x ' .$num;
|
|
|
|
|
|
$text = [
|
|
|
|
|
|
'FromUserInfo' => $FromUserInfo,
|
|
|
|
|
|
'ToUserInfo' => $ToUserInfo,
|
|
|
|
|
|
'GiftInfo' => $gift_info,
|
|
|
|
|
|
'GiftNum' => $num,
|
|
|
|
|
|
'text' => $text
|
|
|
|
|
|
];
|
|
|
|
|
|
//聊天室推送系统消息
|
|
|
|
|
|
model('Chat')->sendMsg(1005,$from_id,$text);
|
|
|
|
|
|
$roomtype = Db::name('vs_room')->where(['id' => $from_id])->value('type_id');
|
|
|
|
|
|
if($roomtype == 6){
|
|
|
|
|
|
//推送消息
|
|
|
|
|
|
$hot_value = db::name('vs_give_gift')->where('from_id', $from_id)->where('from',6)
|
|
|
|
|
|
->sum('total_price');
|
|
|
|
|
|
$text1 = [
|
|
|
|
|
|
'room_id' => $from_id,
|
|
|
|
|
|
'hot_value' => $hot_value * 10,
|
|
|
|
|
|
'text' => '房间心动值变化'
|
|
|
|
|
|
];
|
|
|
|
|
|
//聊天室推送系统消息
|
|
|
|
|
|
model('Chat')->sendMsg(1028,$from_id,$text1);
|
|
|
|
|
|
}else{
|
|
|
|
|
|
if($gift_info['is_public_screen'] == 1){
|
|
|
|
|
|
//推送礼物横幅
|
|
|
|
|
|
$push = new Push(UID, $from_id);
|
|
|
|
|
|
$room_name = Db::name('vs_room')->where(['id' => $from_id, 'apply_status' => 2])->value('room_name');
|
|
|
|
|
|
$text = $FromUserInfo['nickname'] . '在' . $room_name . '房间送给了' . $ToUserInfo['nickname'] . $gift_info['gift_name'] . 'X' . $num;
|
|
|
|
|
|
$text_list_new = [
|
|
|
|
|
|
'text' => $text,
|
|
|
|
|
|
'gift_picture' => $gift_info['base_image'],
|
|
|
|
|
|
'room_id' => $from_id,
|
|
|
|
|
|
'fromUserName' => $FromUserInfo['nickname'],
|
|
|
|
|
|
'toUserName' => $ToUserInfo['nickname'],
|
|
|
|
|
|
'giftName' => $gift_info['gift_name'],
|
|
|
|
|
|
'roomId' => $from_id,
|
|
|
|
|
|
'number' => $num,
|
|
|
|
|
|
];
|
|
|
|
|
|
$push->giftBanner($text_list_new);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//直播间送礼物 每日任务
|
|
|
|
|
|
model('DailyTasks')->tasks_complete($uid,3);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//增加房间火热值hot_value
|
|
|
|
|
|
$gift_totalaa = $gift_total * get_system_config_value('coin_charm_exp');
|
|
|
|
|
|
Db::name('vs_room')->where(['id'=>$from_id,'apply_status'=>2])->setInc('hot_value',$gift_totalaa);
|
2025-08-11 17:49:11 +08:00
|
|
|
|
Db::name('vs_room')->where(['id'=>$from_id,'apply_status'=>2])->setInc('today_hot_value',$gift_totalaa);
|
2025-08-07 20:21:47 +08:00
|
|
|
|
|
|
|
|
|
|
Db::commit();
|
|
|
|
|
|
return ['code' => 1, 'msg' => '送礼成功', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//送礼特效
|
|
|
|
|
|
public function give_gift_effect($to_id,$FromUserInfo,$gift_info,$num,$from_id)
|
|
|
|
|
|
{
|
|
|
|
|
|
//推送礼物特效
|
|
|
|
|
|
$ToUserInfo = Db::name('user')->where(['id' => $to_id])->field('id as user_id,nickname,avatar,sex')->find();
|
|
|
|
|
|
$ToUserInfo['icon'][0] = model('UserData')->user_wealth_icon($to_id);//财富图标
|
|
|
|
|
|
$ToUserInfo['icon'][1] = model('UserData')->user_charm_icon($to_id);//魅力图标
|
|
|
|
|
|
$text = $FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 礼物 ' .$gift_info['gift_name'].' x ' .$num;
|
|
|
|
|
|
$text = [
|
|
|
|
|
|
'FromUserInfo' => $FromUserInfo,
|
|
|
|
|
|
'ToUserInfo' => $ToUserInfo,
|
|
|
|
|
|
'GiftInfo' => $gift_info,
|
|
|
|
|
|
'GiftNum' => $num,
|
|
|
|
|
|
'text' => $text
|
|
|
|
|
|
];
|
|
|
|
|
|
//聊天室推送系统消息
|
|
|
|
|
|
model('Chat')->sendMsg(1005,$from_id,$text);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//计算收礼人得到的收益
|
|
|
|
|
|
public function receiver_earnings($to_uid,$all_gift_price,$from_type,$room_id = 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
$configs = get_system_config();
|
|
|
|
|
|
if($from_type == 1){//1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 99房主收益 98主持人收益
|
|
|
|
|
|
$ratio = $configs['gift_chat_earning'];
|
|
|
|
|
|
}elseif ($from_type == 2 || $from_type == 3){
|
|
|
|
|
|
//收礼人是否加入公会
|
|
|
|
|
|
$is_join_guild = Db::name('vs_guild_user')->where(['user_id'=>$to_uid,'status'=>1,'quit_time' => 0])->field('guild_id')->find();
|
|
|
|
|
|
//收益增加 加入工会的收益
|
|
|
|
|
|
if($is_join_guild){
|
|
|
|
|
|
$ratiog = $configs['room_gift_guild_ratio'];
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$ratiog = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
$ratiogr = $configs['room_gift_ratio'];
|
|
|
|
|
|
$ratio = $ratiogr +$ratiog;
|
|
|
|
|
|
}elseif ($from_type == 4){
|
|
|
|
|
|
$ratio = $configs['gift_zone_earnings'];
|
|
|
|
|
|
}elseif ($from_type == 99){
|
|
|
|
|
|
$ratio = $configs['room_author_ratio'];
|
|
|
|
|
|
}elseif ($from_type == 98){
|
|
|
|
|
|
$ratio = db::name('vs_room_host')->where(['room_id'=>$room_id,'user_id'=>$to_uid,'delete_time'=>null,'type'=>1])->value('ratio');
|
|
|
|
|
|
if(!$ratio){
|
|
|
|
|
|
$ratio = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}elseif ($from_type == 6){//Cp电影房
|
|
|
|
|
|
$ratio = $configs['room_cp_user_ratio'];
|
|
|
|
|
|
}elseif ($from_type == 699){
|
|
|
|
|
|
$ratio = $configs['room_cp_room_user_ratio'];
|
|
|
|
|
|
}elseif ($from_type == 698){
|
|
|
|
|
|
$ratio = $configs['room_cp_guild_user_ratio'];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//计算收礼人收益
|
|
|
|
|
|
return coin_earning($all_gift_price,$ratio);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//操作用户金币和收益并记录日志
|
|
|
|
|
|
public function change_user_cion_or_earnings_log($user_id,$money,$room_id,$money_type,$change_type,$remarks)
|
|
|
|
|
|
{ //change_type
|
|
|
|
|
|
// 1.系统调节 2.充值 3.提现 4.金币转增(送出) 5.每日任务奖励 6.充值返利 7.购买装扮
|
|
|
|
|
|
// 8.礼盒奖励 9.房间补贴 10.购买礼物 11.收礼增加收益 12.工会补贴 13.转赠金币(接收) 14.收益兑换
|
|
|
|
|
|
// 15.首充 16.天降好礼充值 17.退出工会扣款 18.房主收益 19.主持人收益 20.抢头条 21.公会长收益,22.提现驳回或提现失败返还,23.财富等级奖励金币领取,24.删除关系扣金币,
|
|
|
|
|
|
if(in_array($change_type,[1,2,3,4,5,6,7,8,12,13,14,15,16,17,20])){
|
|
|
|
|
|
$room_ids = 0;
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$room_ids = $room_id;
|
|
|
|
|
|
}
|
|
|
|
|
|
$data = [
|
|
|
|
|
|
'user_id' => $user_id,
|
|
|
|
|
|
'change_value' => $money,
|
|
|
|
|
|
'room_id' => $room_ids,
|
|
|
|
|
|
'money_type' => $money_type,
|
|
|
|
|
|
'change_type' => $change_type,
|
|
|
|
|
|
'from_id' => $room_id,
|
|
|
|
|
|
'remarks' => $remarks,
|
|
|
|
|
|
'createtime' => time()
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
$res = Db::name('vs_user_money_log')->insert($data);
|
|
|
|
|
|
if(!$res){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//根据类型判断是操作金币还是钻石得增加或减少
|
|
|
|
|
|
if($money_type == 1){//1金币
|
|
|
|
|
|
//增加用户金币类型
|
|
|
|
|
|
$in_types = [2,5,6,8,13,14,15,16];
|
|
|
|
|
|
//减少用户金币类型
|
|
|
|
|
|
$out_types = [4,7,10,17,20];
|
|
|
|
|
|
if(in_array($change_type,$in_types)){
|
|
|
|
|
|
//增加用户金币
|
|
|
|
|
|
$res1 = Db::name('user_wallet')->where(['user_id'=>$user_id])->setInc('coin',$money);
|
|
|
|
|
|
if(!$res1){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}elseif(in_array($change_type,$out_types)){
|
|
|
|
|
|
//减少用户金币
|
|
|
|
|
|
$res1 = Db::name('user_wallet')->where(['user_id'=>$user_id])->setDec('coin',$money);
|
|
|
|
|
|
if(!$res1){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}elseif ($money_type == 2){//2钻石
|
|
|
|
|
|
//增加用户钻石类型
|
|
|
|
|
|
$in_types = [9,11,12,18,19,21];
|
|
|
|
|
|
//减少用户钻石类型
|
|
|
|
|
|
$out_types = [3,14];
|
|
|
|
|
|
if(in_array($change_type,$in_types)){
|
|
|
|
|
|
//增加用户
|
|
|
|
|
|
$res1 = Db::name('user_wallet')->where(['user_id'=>$user_id])->setInc('earnings',$money);
|
|
|
|
|
|
if(!$res1){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}elseif(in_array($change_type,$out_types)){
|
|
|
|
|
|
//减少用户
|
|
|
|
|
|
$res1 = Db::name('user_wallet')->where(['user_id'=>$user_id])->setDec('earnings',$money);
|
|
|
|
|
|
if(!$res1){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//记录用户送礼日志
|
|
|
|
|
|
public function change_user_give_gift_log($uid,$gid,$gift_price,$num,$to_id,$from_type,$type,$from_id,$pit_number = 0,$gitf_type =1)
|
|
|
|
|
|
{
|
|
|
|
|
|
$data = [
|
|
|
|
|
|
'user_id' => $uid,
|
|
|
|
|
|
'gift_id' => $gid,
|
|
|
|
|
|
'gift_type' => $gitf_type,
|
|
|
|
|
|
'number' => $num,
|
|
|
|
|
|
'gift_user' => $to_id,
|
|
|
|
|
|
'pit_number' => $pit_number,
|
|
|
|
|
|
'from_id' => $from_id,//来源ID,(房间ID或动态ID)
|
|
|
|
|
|
'total_price' => $gift_price,
|
|
|
|
|
|
'from' => $from_type,//1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 6Cp电影房
|
|
|
|
|
|
'type' => $type,//1金币购买 2送背包礼物
|
|
|
|
|
|
'createtime' => time(),
|
|
|
|
|
|
];
|
|
|
|
|
|
$res = Db::name('vs_give_gift')->insertGetId($data);
|
|
|
|
|
|
if(!$res){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
return $res;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//记录用户赠送背包礼物日志
|
|
|
|
|
|
public function change_user_gift_pack_log($packType,$uid,$gid,$num,$remark)
|
|
|
|
|
|
{
|
|
|
|
|
|
$user_gift_pack = db::name('vs_user_gift_pack')->where(['user_id'=>$uid,'gid'=>$gid])->find();
|
|
|
|
|
|
$user_gift_packs['num'] = $user_gift_pack['num'] - $num;
|
|
|
|
|
|
$user_gift_packs['updatetime'] = time();
|
|
|
|
|
|
$gift_pack_update = db::name('vs_user_gift_pack')->where(['user_id'=>$uid,'gid'=>$gid])->update($user_gift_packs);
|
|
|
|
|
|
if(!$gift_pack_update){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
$data = [
|
|
|
|
|
|
'user_id' => $uid,
|
|
|
|
|
|
'gid' => $gid,
|
|
|
|
|
|
'change_num' => $num,
|
|
|
|
|
|
'type' => $packType,
|
|
|
|
|
|
'remarks' => $remark,
|
|
|
|
|
|
'createtime' => time(),
|
|
|
|
|
|
];
|
|
|
|
|
|
$res = Db::name('vs_user_gift_pack_log')->insert($data);
|
|
|
|
|
|
if(!$res){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
* 送礼利率收益等具体记录
|
|
|
|
|
|
* `give_gift_id` int(11) NOT NULL DEFAULT '0' COMMENT '送礼记录表ID',
|
|
|
|
|
|
`gift_user_ratio` varchar(255) NOT NULL DEFAULT '0' COMMENT '收礼人 收礼时的收益率(单位%)',
|
|
|
|
|
|
`gift_user_earning` decimal(10,0) DEFAULT '0' COMMENT '收礼人的收益',
|
|
|
|
|
|
`room_owner_ratio` varchar(255) DEFAULT '0' COMMENT '房主收益率(单位 %)',
|
|
|
|
|
|
`room_owner_earning` decimal(10,0) DEFAULT '0' COMMENT '房主收益',
|
|
|
|
|
|
`app_ratio` varchar(255) DEFAULT '0' COMMENT '平台收益率(单位 %)',
|
|
|
|
|
|
`app_earning` decimal(10,0) DEFAULT '0' COMMENT '平台收益',
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
public function change_give_gift_profit($give_gift_id,$gift_user_ratio,$gift_user_earning,$room_owner_ratio = 0,$room_owner_earning = 0,$app_ratio = 0,$app_earning = 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
$data = [
|
|
|
|
|
|
'give_gift_id' => $give_gift_id,
|
|
|
|
|
|
'gift_user_ratio' => $gift_user_ratio,
|
|
|
|
|
|
'gift_user_earning' => $gift_user_earning,
|
|
|
|
|
|
'room_owner_ratio' => $room_owner_ratio,
|
|
|
|
|
|
'room_owner_earning' => $room_owner_earning,
|
|
|
|
|
|
'app_ratio' => $app_ratio,
|
|
|
|
|
|
'app_earning' => $app_earning,
|
|
|
|
|
|
'createtime' => time(),
|
|
|
|
|
|
];
|
|
|
|
|
|
$res = Db::name('vs_give_gift_ratio_log')->insert($data);
|
|
|
|
|
|
if(!$res){
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
* 聊天送礼物 (音信)
|
|
|
|
|
|
* @param int $user_id 用户id
|
|
|
|
|
|
* @param int $gid 礼物id
|
|
|
|
|
|
* @param int $num 礼物数量
|
|
|
|
|
|
* @param int $to_uid 接收礼物用户id
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return array
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function chat_give_gift($user_id,$gid,$num,$to_uid,$gift_type=1)
|
|
|
|
|
|
{
|
|
|
|
|
|
$gift_info = Db::name('vs_gift')->where(['gid'=>$gid])->find();
|
|
|
|
|
|
if(empty($gift_info)){
|
|
|
|
|
|
return ['code' => 0, 'msg' => '礼物不存在', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
if($user_id == $to_uid){
|
|
|
|
|
|
return ['code' => 0, 'msg' => '不能给自己送礼物', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
if (ceil($num) != $num) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '打赏礼物数量必须为整数', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
if ($num < 1) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '打赏礼物数量必须大于零', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$user_info = Db::name('user')->where(['id'=>$user_id])->find();
|
|
|
|
|
|
if(empty($user_info)){
|
|
|
|
|
|
return ['code' => 0, 'msg' => '送礼用户不存在', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
$to_user_info = Db::name('user')->where(['id'=>$to_uid])->find();
|
|
|
|
|
|
if(empty($to_user_info)){
|
|
|
|
|
|
return ['code' => 0, 'msg' => '收礼用户不存在', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//查询收益比例
|
|
|
|
|
|
$all_gift_price = $gift_info['gift_price'] * $num; //总礼物价格
|
|
|
|
|
|
$configs = get_system_config();
|
|
|
|
|
|
$gift_chat_earning = $configs['gift_chat_earning'];//聊天打赏礼物收益比例
|
|
|
|
|
|
$gift_earning = coin_earning($all_gift_price,$gift_chat_earning);
|
|
|
|
|
|
if($gift_type == 1){
|
|
|
|
|
|
//操作送礼人金币
|
|
|
|
|
|
$res = model('common/UserWallet')->change_user_money($user_id, $all_gift_price, model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::OPERATION_GIFT,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::OPERATION_GIFT),0,$to_uid,0);
|
|
|
|
|
|
if($res['code'] == 1){
|
|
|
|
|
|
//操作收礼人收益
|
|
|
|
|
|
$res = model('common/UserWallet')->change_user_money($to_uid, $gift_earning, model('common/UserWallet')::MONEYTYPEARNINGS, model('common/UserWallet')::GIVE_GIFT_EARNING,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::GIVE_GIFT_EARNING),0,$to_uid,0);
|
|
|
|
|
|
if($res['code'] == 1){
|
|
|
|
|
|
//插入送礼记录
|
|
|
|
|
|
$data = [
|
|
|
|
|
|
'user_id' => $user_id,
|
|
|
|
|
|
'gift_user' => $to_uid,
|
|
|
|
|
|
'gift_id' => $gid,
|
|
|
|
|
|
'number' => $num,
|
|
|
|
|
|
'from_id' => 0,
|
|
|
|
|
|
'total_price' => $all_gift_price,
|
|
|
|
|
|
'type' => 1,
|
|
|
|
|
|
'from' => 1,
|
|
|
|
|
|
'createtime' => time(),
|
|
|
|
|
|
'updatetime' => time()
|
|
|
|
|
|
];
|
|
|
|
|
|
$re = Db::name('vs_give_gift')->insertGetId($data);
|
|
|
|
|
|
if($re){
|
|
|
|
|
|
$app_ratio = 100 - $gift_chat_earning;
|
|
|
|
|
|
$app_earning = coin_earning($all_gift_price,$app_ratio);
|
|
|
|
|
|
$this->change_give_gift_profit($re,$gift_chat_earning,$gift_earning,0,0,$app_ratio,$app_earning);
|
|
|
|
|
|
return ['code' => 1, 'msg' => '送礼成功', 'data' => null];
|
|
|
|
|
|
}else{
|
|
|
|
|
|
return ['code' => 0, 'msg' => '送礼失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{//背包礼物
|
|
|
|
|
|
$remarks = "赠送 ".$to_user_info['nickname']." 背包礼物 ";
|
|
|
|
|
|
$res = model('UserGiftPack')->change_user_gift_pack($user_id,$gid,$num * -1,model('UserGiftPack')::GIFT_USE,$remarks);
|
|
|
|
|
|
if($res['code'] == 1){
|
|
|
|
|
|
//操作收礼人收益
|
|
|
|
|
|
$res = model('common/UserWallet')->change_user_money($to_uid, $gift_earning, model('common/UserWallet')::MONEYTYPEARNINGS, model('common/UserWallet')::GIVE_GIFT_EARNING,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::GIVE_GIFT_EARNING),0,$to_uid,0);
|
|
|
|
|
|
//插入送礼记录
|
|
|
|
|
|
$data = [
|
|
|
|
|
|
'user_id' => $user_id,
|
|
|
|
|
|
'gift_user' => $to_uid,
|
|
|
|
|
|
'gift_id' => $gid,
|
|
|
|
|
|
'number' => $num,
|
|
|
|
|
|
'from_id' => 0,
|
|
|
|
|
|
'total_price' => $all_gift_price,
|
|
|
|
|
|
'type' => 2,
|
|
|
|
|
|
'from' => 1,
|
|
|
|
|
|
'createtime' => time(),
|
|
|
|
|
|
'updatetime' => time()
|
|
|
|
|
|
];
|
|
|
|
|
|
$re = Db::name('vs_give_gift')->insertGetId($data);
|
|
|
|
|
|
if($re){
|
|
|
|
|
|
$app_ratio = 100 - $gift_chat_earning;
|
|
|
|
|
|
$app_earning = coin_earning($all_gift_price,$app_ratio);
|
|
|
|
|
|
$this->change_give_gift_profit($re,$gift_chat_earning,$gift_earning,0,0,$app_ratio,$app_earning);
|
|
|
|
|
|
return ['code' => 1, 'msg' => '送礼成功', 'data' => null];
|
|
|
|
|
|
}else{
|
|
|
|
|
|
return ['code' => 0, 'msg' => '送礼失败', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return ['code' => $res['code'], 'msg' => $res['msg'], 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//动态打赏
|
|
|
|
|
|
public function reward_zone($uid,$zid,$gift_id,$num,$is_pack)
|
|
|
|
|
|
{
|
|
|
|
|
|
$zone = Db::name('user_zone')->where('id',$zid)->find();
|
|
|
|
|
|
if(!$zone){
|
|
|
|
|
|
return ['code'=>0,'msg'=>'动态不存在','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
if($uid == $zone['user_id']){
|
|
|
|
|
|
return ['code'=>0,'msg'=>'不能给自己打赏','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//礼物金额
|
|
|
|
|
|
$gift_price = Db::name('vs_gift')->where('gid',$gift_id)->value('gift_price');
|
|
|
|
|
|
//总金额
|
|
|
|
|
|
$total_gift_price = $gift_price * $num;
|
|
|
|
|
|
//数据库配置
|
|
|
|
|
|
$config = get_system_config();
|
|
|
|
|
|
|
|
|
|
|
|
//开启事务
|
|
|
|
|
|
Db::startTrans();
|
|
|
|
|
|
if($is_pack == 2){
|
|
|
|
|
|
//背包礼物
|
|
|
|
|
|
$pack_give_gift = $this->give_pack_gift($uid,$gift_id,$num);
|
|
|
|
|
|
if($pack_give_gift['code'] != 1){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code'=>$pack_give_gift['code'],'msg'=>$pack_give_gift['msg'],'data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
//金币礼物
|
|
|
|
|
|
$coin_give_gift = $this->give_coin_buy_gift($uid,$total_gift_price,$zid);
|
|
|
|
|
|
if($coin_give_gift['code'] != 1){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code'=>$coin_give_gift['code'],'msg'=>$coin_give_gift['msg'],'data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//增加用户的收益并记录日志
|
|
|
|
|
|
$earnings = coin_earning($total_gift_price,$config['gift_zone_earnings']);
|
|
|
|
|
|
$user = Db::name('user_wallet')->where('user_id',$zone['user_id'])->setInc('earnings',$earnings);
|
|
|
|
|
|
if(!$user){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code'=>0,'msg'=>'打赏礼物失败!!','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//记录打赏
|
|
|
|
|
|
$reward_data = [
|
|
|
|
|
|
'user_id'=>$uid,
|
|
|
|
|
|
'zone_id'=>$zid,
|
|
|
|
|
|
'gift_id'=>$gift_id,
|
|
|
|
|
|
'gift_price'=>$gift_price,
|
|
|
|
|
|
'number'=>$num,
|
|
|
|
|
|
'gift_price_total'=> $total_gift_price,
|
|
|
|
|
|
'createtime' => time()
|
|
|
|
|
|
];
|
|
|
|
|
|
$reward_res = Db::name('user_zone_rewards')->insert($reward_data);
|
|
|
|
|
|
if(!$reward_res){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code'=>0,'msg'=>'打赏礼物失败!!!','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//送礼日志
|
|
|
|
|
|
$give_gift_data = [
|
|
|
|
|
|
'gift_user'=>$zone['user_id'],
|
|
|
|
|
|
'gift_id'=>$gift_id,
|
|
|
|
|
|
'from_id'=>$zid,
|
|
|
|
|
|
'number'=>$num,
|
|
|
|
|
|
'user_id'=>$uid,
|
|
|
|
|
|
'total_price'=>$total_gift_price,
|
|
|
|
|
|
'type'=>$is_pack,
|
|
|
|
|
|
'from'=>4//1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏'
|
|
|
|
|
|
];
|
|
|
|
|
|
$give_gift_res = Db::name('vs_give_gift')->insertGetId($give_gift_data);
|
|
|
|
|
|
if(!$give_gift_res){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code'=>0,'msg'=>'打赏礼物失败','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//用户收益日志
|
|
|
|
|
|
$user_earnings_data = [
|
|
|
|
|
|
'user_id'=>$zone['user_id'],
|
|
|
|
|
|
'from_id'=>$zid,
|
|
|
|
|
|
'change_type'=>11,//收礼增加收益
|
|
|
|
|
|
'money_type'=>2,
|
|
|
|
|
|
'change_value'=>$earnings,
|
|
|
|
|
|
'remarks'=>'动态打赏增加收益',
|
|
|
|
|
|
'createtime'=>time()
|
|
|
|
|
|
];
|
|
|
|
|
|
$user_earnings_res = Db::name('vs_user_money_log')->insert($user_earnings_data);
|
|
|
|
|
|
if(!$user_earnings_res){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code'=>0,'msg'=>'打赏礼物失败!','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
$app_ratio = 100 - $config['gift_zone_earnings'];
|
|
|
|
|
|
$app_earning = coin_earning($total_gift_price,$app_ratio);
|
|
|
|
|
|
$this->change_give_gift_profit($give_gift_res,$config['gift_zone_earnings'],$earnings,0,0,$app_ratio,$app_earning);
|
|
|
|
|
|
Db::commit();
|
|
|
|
|
|
return ['code'=>1,'msg'=>'赠送成功','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//赠送背包礼物
|
|
|
|
|
|
public function give_pack_gift($uid,$gift_id,$num)
|
|
|
|
|
|
{
|
|
|
|
|
|
//背包礼物数量
|
|
|
|
|
|
$pack_num = Db::name('vs_user_gift_pack')->where('user_id',$uid)->where('gid',$gift_id)->value('num');
|
|
|
|
|
|
if($pack_num < $num){
|
|
|
|
|
|
return ['code'=>0,'msg'=>'背包礼物不足','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//扣除背包礼物数量
|
|
|
|
|
|
$resel = Db::name('vs_user_gift_pack')->where('user_id',$uid)->where('gid',$gift_id)->setDec('num',$num);
|
|
|
|
|
|
if(!$resel){
|
|
|
|
|
|
return ['code'=>0,'msg'=>'扣除背包礼物失败','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//背包礼物日志
|
|
|
|
|
|
$data = [];
|
|
|
|
|
|
$data['user_id'] = $uid;
|
|
|
|
|
|
$data['type'] = 5;
|
|
|
|
|
|
$data['gid'] = $gift_id;
|
|
|
|
|
|
$data['change_num'] = $num;
|
|
|
|
|
|
$data['remarks'] = '动态打赏背包礼物';
|
|
|
|
|
|
$data['createtime'] = time();
|
|
|
|
|
|
$data['updatetime'] = time();
|
|
|
|
|
|
$reslut = db::name('vs_user_gift_pack_log')->insert($data);
|
|
|
|
|
|
if (!$reslut) {
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code'=>0,'msg'=>'打赏礼物失败!','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return ['code'=>1,'msg'=>'扣除背包礼物成功','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//赠送金币购买礼物
|
|
|
|
|
|
public function give_coin_buy_gift($uid,$total_gift_price,$zid)
|
|
|
|
|
|
{
|
|
|
|
|
|
//用户金额
|
|
|
|
|
|
$user_coin = Db::name('user_wallet')->where('user_id',$uid)->value('coin');
|
|
|
|
|
|
|
|
|
|
|
|
if($user_coin < $total_gift_price){
|
|
|
|
|
|
return ['code'=>0,'msg'=>'余额不足','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//扣除用户金额
|
|
|
|
|
|
$re = Db::name('user_wallet')->where('user_id',$uid)->setDec('coin',$total_gift_price);
|
|
|
|
|
|
if(!$re){
|
|
|
|
|
|
return ['code'=>0,'msg'=>'扣除用户金额失败','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//用户资金日志
|
|
|
|
|
|
$user_earnings_data = [
|
|
|
|
|
|
'user_id'=>$uid,
|
|
|
|
|
|
'from_id'=>$zid,
|
|
|
|
|
|
'change_type'=>10,//购买礼物
|
|
|
|
|
|
'money_type'=>1,
|
|
|
|
|
|
'change_value'=>$total_gift_price,
|
|
|
|
|
|
'remarks'=>'动态打赏',
|
|
|
|
|
|
'createtime'=>time()
|
|
|
|
|
|
];
|
|
|
|
|
|
$user_earnings_res = Db::name('vs_user_money_log')->insert($user_earnings_data);
|
|
|
|
|
|
if(!$user_earnings_res){
|
|
|
|
|
|
Db::rollback();
|
|
|
|
|
|
return ['code'=>0,'msg'=>'打赏礼物失败!','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return ['code'=>1,'msg'=>'扣除用户金额成功','data'=>null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//动态打赏列表
|
|
|
|
|
|
public function zone_reward_list($uid, $zid, $page, $page_limit){
|
|
|
|
|
|
$list = Db::name('vs_give_gift')->alias('a')
|
|
|
|
|
|
->join('user b','a.user_id = b.id')
|
|
|
|
|
|
->field('a.user_id,sum(a.total_price) total_price,b.nickname,b.avatar,b.user_code')
|
|
|
|
|
|
->where('a.from',4)
|
|
|
|
|
|
->where('a.from_id',$zid)
|
|
|
|
|
|
->order('total_price desc')
|
|
|
|
|
|
->page($page,$page_limit)
|
|
|
|
|
|
->group('a.user_id')
|
|
|
|
|
|
->select();
|
|
|
|
|
|
foreach ($list as &$v){
|
|
|
|
|
|
//用户是否在线
|
|
|
|
|
|
$v['is_online'] = $this->redis->get('user_online_' . $v['user_id']) ? 1: 0;//是否在线 在redis里获取
|
|
|
|
|
|
}
|
|
|
|
|
|
return $list;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
* 开盲盒
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function open_box($gift_id,$user_id,$gift_user_id,$room_id=0){
|
|
|
|
|
|
//获取盲盒配置
|
|
|
|
|
|
$bag_list = db::name("vs_gift_bag")->field('id,name,ext,periods')->where(['activities_id'=>4,'status'=>1])->select();
|
|
|
|
|
|
$gift_bag_id = 0;
|
|
|
|
|
|
foreach ($bag_list as $k=>$v){
|
|
|
|
|
|
$ext = json_decode($v['ext'],true);
|
|
|
|
|
|
if($ext){
|
|
|
|
|
|
if($ext['gift_id'] == $gift_id){
|
|
|
|
|
|
$gift_bag_id = $v['id'];
|
|
|
|
|
|
$periods = $v['periods'];
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if($gift_bag_id){
|
|
|
|
|
|
$bag_gift = db::name("vs_gift")->where(['gid'=>$gift_id])->find();// 获取盲盒信息
|
|
|
|
|
|
//随机获取一个礼物
|
|
|
|
|
|
$where = [
|
|
|
|
|
|
'gift_bag_id' => $gift_bag_id,
|
|
|
|
|
|
'quantity' => ['>',0],
|
|
|
|
|
|
'remaining_number' => ['>',0]
|
|
|
|
|
|
];
|
|
|
|
|
|
// $gift_bag_detail = db::name("vs_gift_bag_detail")->where($where)->orderRaw('rand()')->find();
|
|
|
|
|
|
// 优化:基于剩余数量的加权随机选择
|
|
|
|
|
|
$gift_bag_details = db::name("vs_gift_bag_detail")->where($where)->select();
|
|
|
|
|
|
if (empty($gift_bag_details)) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '当前盲盒无可用礼物', 'data' => []];
|
|
|
|
|
|
}
|
|
|
|
|
|
// 实现加权随机算法:剩余数量越多,被抽中的概率越大
|
|
|
|
|
|
$total_remaining = 0;
|
|
|
|
|
|
foreach ($gift_bag_details as $gift) {
|
|
|
|
|
|
$total_remaining += $gift['remaining_number'];
|
|
|
|
|
|
}
|
|
|
|
|
|
$rand_value = mt_rand(1, $total_remaining);
|
|
|
|
|
|
$current_sum = 0;
|
|
|
|
|
|
$gift_bag_detail = null;
|
|
|
|
|
|
foreach ($gift_bag_details as $gift) {
|
|
|
|
|
|
if($gift['remaining_number'] <= 0){
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
$current_sum += $gift['remaining_number'];
|
|
|
|
|
|
if ($rand_value <= $current_sum) {
|
|
|
|
|
|
$gift_bag_detail = $gift;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
if($gift_bag_detail){
|
|
|
|
|
|
//获取开出礼物的信息
|
|
|
|
|
|
$gift = db::name("vs_gift")->where(['gid'=>$gift_bag_detail['foreign_id']])->find();
|
|
|
|
|
|
//处理礼包发放记录表
|
|
|
|
|
|
$data = [];
|
|
|
|
|
|
$data['user_id'] = $user_id;
|
|
|
|
|
|
$data['gift_user_id'] = $gift_user_id;
|
|
|
|
|
|
$data['gift_bag_id'] = $gift_bag_id;
|
|
|
|
|
|
$data['gift_id'] = $gift_bag_detail['foreign_id'];
|
|
|
|
|
|
$data['periods'] = $periods;
|
|
|
|
|
|
$data['room_id'] = $room_id;
|
|
|
|
|
|
$data['gift_price'] = $gift['gift_price'];
|
|
|
|
|
|
$data['bag_price'] = $bag_gift['gift_price'];
|
|
|
|
|
|
$data['createtime'] = time();
|
|
|
|
|
|
$result = db::name("vs_gift_bag_receive_log")->insert($data);
|
|
|
|
|
|
if(!$result){
|
|
|
|
|
|
return ['code' => 0, 'msg' => '失败,', 'data' => []];
|
|
|
|
|
|
}
|
|
|
|
|
|
//减去盲盒包礼物数量
|
|
|
|
|
|
$ret = db::name("vs_gift_bag_detail")->where('id',$gift_bag_detail['id'])->setDec('remaining_number');
|
|
|
|
|
|
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');
|
|
|
|
|
|
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')]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
return ['code' => 0, 'msg' => '失败!', 'data' => []];
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
return ['code' => 0, 'msg' => '失败!!', 'data' => []];
|
|
|
|
|
|
}
|
|
|
|
|
|
$result_data = [
|
|
|
|
|
|
'gift_id'=>$gift_bag_detail['foreign_id'],
|
|
|
|
|
|
'gift_price'=>$gift['gift_price'],
|
|
|
|
|
|
'is_public_screen'=>$gift['is_public_screen'],
|
|
|
|
|
|
];
|
|
|
|
|
|
return ['code' => 1, 'msg' => '成功', 'data' => $result_data];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|