1689 lines
87 KiB
PHP
1689 lines
87 KiB
PHP
<?php
|
||
|
||
namespace app\api\model;
|
||
|
||
use app\common\controller\Push;
|
||
use app\common\library\GiftQueue;
|
||
use app\common\library\Snowflake;
|
||
use app\common\model\GiveGiftBase;
|
||
use think\Log;
|
||
use think\Model;
|
||
use think\Db;
|
||
|
||
class SendGift extends Model
|
||
{
|
||
|
||
/*
|
||
* 送礼物 :送礼用户,收礼用户组,礼物ID,数量,礼物类型,房间ID
|
||
* @param int $uid 用户id
|
||
* @param str $to_uid 接收礼物用户组 (逗号分隔 id字符串)
|
||
* @param int $gid 礼物id
|
||
* @param int $num 礼物数量
|
||
* @param int $type 金币购买 1金币购买 2送背包礼物
|
||
* @param int $room_id
|
||
* @param int $gift_bag_id 背包礼物类型:7-初级,8-中级,9-高级
|
||
* @param int $heart_id 助力ID
|
||
* @return array
|
||
*/
|
||
public function send_gift($uid, $to_uid, $gid, $num, $type, $room_id, $gift_bag_id = 0, $heart_id = 0)
|
||
{
|
||
$toarray = explode(',',$to_uid);
|
||
|
||
if(in_array($uid,$toarray)){
|
||
return ['code' => 0, 'msg' => '收礼人不能包含自己', 'data' => null];
|
||
}
|
||
|
||
if(count($toarray) <= 1){
|
||
$res = $this->single_send_gift($uid,$to_uid,$gid,$num,$type,$room_id,$gift_bag_id,$heart_id);
|
||
}else{
|
||
$res = $this->send_gift_to_users($uid,$toarray,$gid,$num,$type,$room_id,$gift_bag_id,$heart_id);
|
||
}
|
||
|
||
return $res;
|
||
}
|
||
|
||
|
||
//送一个人的礼物
|
||
public function single_send_gift($uid,$to_uid,$gid,$num,$type,$room_id,$gift_bag_id,$heart_id)
|
||
{
|
||
//送的礼物信息
|
||
$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_server')->find();
|
||
|
||
if(empty($gift_info)){
|
||
return ['code' => 0, 'msg' => '礼物已下架,请重新选择!', 'data' => null];
|
||
}
|
||
|
||
$mobile = Db::name('user')->where(['id'=>$to_uid])->value('mobile');
|
||
$is_real = db::name('user_auth')->where('mobile' , $mobile)->value('is_real') ?? 0;
|
||
if($is_real != 1){
|
||
return ['code' => 0, 'msg' => '该用户未实名,暂不支持收礼', 'data' => null];
|
||
}
|
||
|
||
$room_type = model('Room')->get_room_type($room_id);
|
||
$room_label = db::name('vs_room')->where(['id' => $room_id])->value('label_id');
|
||
|
||
//获取送礼用户信息
|
||
$FromUserInfo = model('User')->get_user_base_info($uid);
|
||
|
||
//送给一人礼物的总价格
|
||
$gift_price = $gift_info['gift_price'] * $num;
|
||
|
||
//送礼人的金币
|
||
$user_coin = db::name('user_wallet_coin')->where(['user_id'=>$uid])->value('coin');
|
||
|
||
//送礼 开启事务
|
||
Db::startTrans();
|
||
//酒吧房下的小黑屋 房间流水和送礼记录、收益 都记录在酒吧房
|
||
if($room_label == 11){
|
||
$p_room_id = db::name('vs_room_bar_movie')->where('room_id',$room_id)->value('p_room_id');
|
||
//金币购买送礼 1金币购买 2送背包礼物
|
||
if($type == 1){
|
||
//判断是否有足够的金币
|
||
if ($user_coin < $gift_price) {
|
||
return ['code' => 0, 'msg' => '金币不足,请充值购买!', 'data' => null];
|
||
}
|
||
|
||
//扣除用户金币并记录日志(酒吧房下的小黑屋 记录记在所属酒吧房)
|
||
$wallet_update = model('api/UserWallet')->change_user_cion_log($uid,$gift_price,$p_room_id,10,'小黑屋-购买礼物');
|
||
if(!$wallet_update){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-1', 'data' => null];
|
||
}
|
||
|
||
}else{
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '类型错误', 'data' => null];
|
||
}
|
||
|
||
$receive_gift_total = $gift_price;//收礼人收到的礼物总值
|
||
$gift_box = [];//开出的盲盒
|
||
|
||
//计算收礼人得益 //1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 99房主收益 98主持人收益
|
||
$receiver_earnings = model('GiveGift') -> receiver_earnings($to_uid,$receive_gift_total,2);
|
||
if($receiver_earnings > 0){
|
||
//增加收益并记录日志
|
||
$receiver = model('api/UserWallet')->change_user_earnings_log($to_uid,$receiver_earnings,$p_room_id,11,'小黑屋-收礼增加收益');
|
||
if(!$receiver){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-4', 'data' => null];
|
||
}
|
||
}
|
||
|
||
//用户魅力等级更新(这个里面有推送魅力 所以房间使用原房间)
|
||
$user_level = model('Level')->user_level_data_update($to_uid,$receive_gift_total,2,$room_id);
|
||
if(!$user_level){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null];
|
||
}
|
||
|
||
$guild_earnings = 0;//公会会长收益
|
||
$guid_ratio = 0;//公会长收益率
|
||
$receive_ratio = get_system_config_value('room_gift_ratio');//房间收礼人收益
|
||
|
||
//房主收益 计算酒吧房去
|
||
$room_owner = Db::name('vs_room')->where(['id' => $p_room_id,'apply_status' => 2])->value('user_id');
|
||
//计算房主收益//room_author_ratio
|
||
$room_owner_earnings = model('GiveGift') -> receiver_earnings($room_owner,$receive_gift_total,99);//结果是钻石
|
||
if($room_owner_earnings > 0){
|
||
//在主持位的主持人 计算酒吧房去
|
||
$host_id = Db::name('vs_room_pit')->where(['room_id'=>$p_room_id,'pit_number'=>9])->value('user_id');
|
||
if($host_id){
|
||
//计算主持人收益
|
||
$ratio = db::name('vs_room_host')->where(['room_id'=>$p_room_id,'user_id'=>$host_id,'delete_time'=>null,'type'=>1])->value('ratio');
|
||
if(!$ratio){
|
||
$ratio = 0;
|
||
}
|
||
$host_earnings = round($room_owner_earnings * $ratio / 100,4);
|
||
if($host_earnings > 0){
|
||
//增加主持人收益并记录日志
|
||
$host_earnings_earning = model('api/UserWallet')->change_user_earnings_log($host_id,$host_earnings,$p_room_id,19,'小黑屋-主持人收益');
|
||
if(!$host_earnings_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-7', 'data' => null];
|
||
}
|
||
//增加房主收益并记录日志
|
||
$room_owner_earningss = $room_owner_earnings - $host_earnings;
|
||
if($room_owner_earningss > 0){
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earningss,$p_room_id,18,'小黑屋-房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-8', 'data' => null];
|
||
}
|
||
}
|
||
|
||
}else{
|
||
//增加房主收益并记录日志
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earnings,$p_room_id,18,'小黑屋-房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-9', 'data' => null];
|
||
}
|
||
}
|
||
}else{
|
||
//增加房主收益并记录日志
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earnings,$p_room_id,18,'小黑屋-房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-10', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
|
||
//收礼人是否加入公会
|
||
$is_join_guild = Db::name('vs_guild_user')->where(['user_id'=>$to_uid,'status'=>1,'quit_time' => 0])->field('guild_id,settlement_ratio')->find();
|
||
if($is_join_guild){
|
||
//公会长收益 房间收礼人收益+房间收礼人加入公会后增加收益
|
||
$max_settlement_ratio = get_system_config_value('room_gift_ratio') + get_system_config_value('room_gift_guild_ratio');
|
||
$receive_ratio = $is_join_guild['settlement_ratio'] ?? 0;//加入公会后 公会长设置的收益
|
||
$guid_ratio = $max_settlement_ratio - $receive_ratio;
|
||
if($guid_ratio > 0){
|
||
//公会长收益
|
||
$guild_earnings = coin_earning($receive_gift_total,$guid_ratio);
|
||
if($guild_earnings > 0){
|
||
$guild_user = db::name('vs_guild')->where(['id' => $is_join_guild['guild_id']])->value('user_id');
|
||
$guild_earnings_in = model('api/UserWallet')
|
||
->change_user_earnings_log($guild_user,$guild_earnings,$p_room_id,21,'小黑屋-工会长收益');
|
||
if(!$guild_earnings_in){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-11', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//收礼记录行为日志
|
||
$give_gift = $this -> change_user_give_gift_logs($uid,$gid,$gift_price,$num,$to_uid,2,$type,$p_room_id,'小黑屋房间');
|
||
if(!$give_gift){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '送礼失败,请重试!', 'data' => null];
|
||
}
|
||
|
||
//记录送礼利率和各方收益
|
||
//平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益
|
||
$room_owner_ratio = get_system_config_value('room_author_ratio');
|
||
$app_ratio = 100 - $receive_ratio - $room_owner_ratio - $guid_ratio;
|
||
$app_earning = coin_earning($gift_price, $app_ratio);
|
||
|
||
$gift_rate = $this->change_give_gift_profit($give_gift, $receive_ratio, $receiver_earnings, $room_owner_ratio, $room_owner_earnings, $app_ratio, $app_earning,$guid_ratio,$guild_earnings);
|
||
if(!$gift_rate){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-12', 'data' => null];
|
||
}
|
||
|
||
//增加房间火热值hot_value
|
||
$gift_totalaa = $receive_gift_total * get_system_config_value('coin_charm_exp');
|
||
db::name('vs_room')->where(['id' => $p_room_id])->inc('hot_value', $gift_totalaa)->inc('today_hot_value', $gift_totalaa)->update();
|
||
db::name('vs_room')->where(['id' => $room_id])->inc('hot_value', $gift_totalaa)->inc('today_hot_value', $gift_totalaa)->update();
|
||
|
||
Db::commit();
|
||
|
||
//推送消息 私密房 倒计时增加
|
||
$add_time_str = get_system_config_value('room_bar_movie_add_time') ?? '10,1';//默认10金币增加1秒
|
||
//变成数组
|
||
$add_time_array = explode(',', $add_time_str);
|
||
$add_time = floor($receive_gift_total/$add_time_array[0])*$add_time_array[1];
|
||
if($add_time > 0){
|
||
db::name('vs_room_bar_movie')->where('room_id', $room_id)
|
||
->setInc('end_time', $add_time);//1金币加1秒
|
||
$text111 = [
|
||
'room_id' => $room_id,
|
||
'time_day' => db::name('vs_room_bar_movie')->where('room_id', $room_id)->value('end_time'),
|
||
'text' => '房间结束时间变化'
|
||
];
|
||
//聊天室推送系统消息
|
||
model('Chat')->sendMsg(1052,$room_id,$text111);
|
||
}
|
||
}else{
|
||
//金币购买送礼 1金币购买 2送背包礼物
|
||
if($type == 1){
|
||
//判断是否有足够的金币
|
||
if ($user_coin < $gift_price) {
|
||
return ['code' => 0, 'msg' => '金币不足,请充值购买!', 'data' => null];
|
||
}
|
||
|
||
//扣除用户金币并记录日志
|
||
$wallet_update = model('api/UserWallet')->change_user_cion_log($uid,$gift_price,$room_id,10,'购买礼物');
|
||
if(!$wallet_update){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-1', '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) {
|
||
return ['code' => 0, 'msg' => '用户背包礼物不足', 'data' => null];
|
||
}
|
||
|
||
//扣除背包礼物并记录日志
|
||
$gift_pack = $this -> change_user_gift_pack_log(3,$uid,$gid,$num,'房间送礼');
|
||
if(!$gift_pack){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-2', 'data' => null];
|
||
}
|
||
}
|
||
|
||
$receive_gift_total = 0;//收礼人收到的礼物总值
|
||
$gift_box = [];//开出的盲盒
|
||
$gift_box_str = '';
|
||
$gift_box_map = [];
|
||
|
||
//查询礼物是否是盲盒
|
||
if($gift_info['label'] == 2){//趣味礼物(盲盒)
|
||
for($i = 0; $i < $num; $i++){
|
||
//开盲盒
|
||
$gift_box1[$i] = $this -> open_box($gid,$uid,$to_uid,$room_id,$gift_bag_id);
|
||
if($gift_box1[$i]['code'] != 1){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-3'.$gift_box1[$i]['msg'], 'data' => null];
|
||
}
|
||
$gift_box[$i] = $gift_box1[$i]['data'];
|
||
|
||
//礼物整合
|
||
$gift_id = $gift_box[$i]['gift_id'];
|
||
$gift_name = $gift_box[$i]['gift_name'];
|
||
|
||
if(isset($gift_box_map[$gift_id])){
|
||
// 如果礼物ID已存在,数量加1
|
||
$gift_box_map[$gift_id]['count']++;
|
||
}else{
|
||
// 如果礼物ID不存在,添加新项
|
||
$gift_box_map[$gift_id] = [
|
||
'name' => $gift_name,
|
||
'count' => 1
|
||
];
|
||
}
|
||
|
||
//开出的礼物价值
|
||
$receive_gift_total += $gift_box[$i]['gift_price'];
|
||
|
||
//使用收礼用户 和礼物ID 查询礼物墙
|
||
$gift_wall = db::name('user_gift_wall')->where(['user_id'=>$to_uid,'gift_id'=>$gift_id])->find();
|
||
if($gift_wall){
|
||
db::name('user_gift_wall')->where(['id'=>$gift_wall['id']])->inc('count',1)->update();
|
||
$userIds = explode(',',$gift_wall['give_user_ids']);
|
||
if(!in_array($uid,$userIds)){
|
||
$userIds[] = $uid;
|
||
db::name('user_gift_wall')->where(['id'=>$gift_wall['id']])->update(['give_user_ids'=>implode(',',$userIds)]);
|
||
}
|
||
}else{
|
||
db::name('user_gift_wall')->insert([
|
||
'user_id' => $to_uid,
|
||
'gift_id' => $gift_id,
|
||
'count' => 1,
|
||
'give_user_ids' => $uid,
|
||
'updatetime' => time()
|
||
]);
|
||
}
|
||
}
|
||
if(!empty($gift_box_map)){
|
||
//拼接礼物字符串 (娃哈哈 * 2 / 娃哈哈1 * 1)这种格式
|
||
$gift_box_str_parts = [];
|
||
foreach($gift_box_map as $gift_id => $gift_info_data){
|
||
$gift_box_str_parts[] = $gift_info_data['name'] . ' * ' . $gift_info_data['count'];
|
||
}
|
||
$gift_box_str = implode(' / ', $gift_box_str_parts);
|
||
}
|
||
|
||
}else{
|
||
$receive_gift_total = $gift_price;
|
||
}
|
||
|
||
//计算收礼人得益 //1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 99房主收益 98主持人收益
|
||
$receiver_earnings = model('GiveGift') -> receiver_earnings($to_uid,$receive_gift_total,2);
|
||
if($receiver_earnings > 0){
|
||
//增加收益并记录日志
|
||
$receiver = model('api/UserWallet')->change_user_earnings_log($to_uid,$receiver_earnings,$room_id,11,'收礼增加收益');
|
||
if(!$receiver){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-4', 'data' => null];
|
||
}
|
||
}
|
||
|
||
//用户魅力等级更新
|
||
$user_level = model('Level')->user_level_data_update($to_uid,$receive_gift_total,2,$room_id);
|
||
if(!$user_level){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null];
|
||
}
|
||
|
||
$room_owner_earnings = 0;//房主收益
|
||
$guild_earnings = 0;//公会会长收益
|
||
$guid_ratio = 0;//公会长收益率
|
||
$receive_ratio = get_system_config_value('room_gift_ratio');//房间收礼人收益
|
||
|
||
if($room_type == 6){
|
||
//cp电影房
|
||
//房主有收益 room_cp_room_user_ratio
|
||
if(get_system_config_value('room_cp_room_user_ratio') > 0){
|
||
$room_owner = Db::name('vs_room')->where(['id'=>$room_id,'apply_status'=>2])->value('user_id');
|
||
//计算房主收益//room_author_ratio //1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 99房主收益 98主持人收益 699-cp房房主收益
|
||
$room_owner_earnings = model('GiveGift') -> receiver_earnings($room_owner,$receive_gift_total,699);
|
||
if($room_owner_earnings > 0){
|
||
//增加收益并记录日志
|
||
$room_owner_earning = model('api/UserWallet')
|
||
->change_user_earnings_log($room_owner,$room_owner_earnings,$room_id,18,'私密房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-5', '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');
|
||
//计算会长收益 //1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 99房主收益 98主持人收益 699-cp房房主收益 698 - cp房里面收益 公会长收益
|
||
$guild_earnings = model('GiveGift') -> receiver_earnings($room_guild,$receive_gift_total,698);
|
||
if($guild_earnings > 0){
|
||
//增加收益并记录日志
|
||
$guild_earnings_in = model('api/UserWallet')
|
||
->change_user_earnings_log($room_guild,$guild_earnings,$room_id,21,'私密房工会长收益');
|
||
if(!$guild_earnings_in){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-6', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}else{
|
||
$room_owner = Db::name('vs_room')->where(['id'=>$room_id,'apply_status'=>2])->value('user_id');
|
||
//计算房主收益//room_author_ratio
|
||
$room_owner_earnings = model('GiveGift') -> receiver_earnings($room_owner,$receive_gift_total,99);//结果是钻石
|
||
if($room_owner_earnings > 0){
|
||
//在主持位的主持人
|
||
$host_id = Db::name('vs_room_pit')->where(['room_id'=>$room_id,'pit_number'=>9])->value('user_id');
|
||
if($host_id){
|
||
//计算主持人收益
|
||
$ratio = db::name('vs_room_host')->where(['room_id'=>$room_id,'user_id'=>$host_id,'delete_time'=>null,'type'=>1])->value('ratio');
|
||
if(!$ratio){
|
||
$ratio = 0;
|
||
}
|
||
$host_earnings = round($room_owner_earnings * $ratio / 100,4);
|
||
if($host_earnings > 0){
|
||
//增加主持人收益并记录日志
|
||
$host_earnings_earning = model('api/UserWallet')->change_user_earnings_log($host_id,$host_earnings,$room_id,19,'主持人收益');
|
||
if(!$host_earnings_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-7', 'data' => null];
|
||
}
|
||
//增加房主收益并记录日志
|
||
$room_owner_earningss = $room_owner_earnings - $host_earnings;
|
||
if($room_owner_earningss > 0){
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earningss,$room_id,18,'房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-8', 'data' => null];
|
||
}
|
||
}
|
||
|
||
}else{
|
||
//增加房主收益并记录日志
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earnings,$room_id,18,'房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-9', 'data' => null];
|
||
}
|
||
}
|
||
}else{
|
||
//增加房主收益并记录日志
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earnings,$room_id,18,'房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-10', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
|
||
//收礼人是否加入公会
|
||
$is_join_guild = Db::name('vs_guild_user')->where(['user_id'=>$to_uid,'status'=>1,'quit_time' => 0])->field('guild_id,settlement_ratio')->find();
|
||
if($is_join_guild){
|
||
//公会长收益 房间收礼人收益+房间收礼人加入公会后增加收益
|
||
$max_settlement_ratio = get_system_config_value('room_gift_ratio') + get_system_config_value('room_gift_guild_ratio');
|
||
$receive_ratio = $is_join_guild['settlement_ratio'] ?? 0;//加入公会后 公会长设置的收益
|
||
$guid_ratio = $max_settlement_ratio - $receive_ratio;
|
||
if($guid_ratio > 0){
|
||
//公会长收益
|
||
$guild_earnings = coin_earning($receive_gift_total,$guid_ratio);
|
||
if($guild_earnings > 0){
|
||
$guild_user = db::name('vs_guild')->where(['id' => $is_join_guild['guild_id']])->value('user_id');
|
||
$guild_earnings_in = model('api/UserWallet')
|
||
->change_user_earnings_log($guild_user,$guild_earnings,$room_id,21,'工会长收益');
|
||
if(!$guild_earnings_in){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-11', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if($gift_info['label'] == 2) {//趣味礼物(盲盒)
|
||
$give_gift = $this -> change_user_give_gift_logs($uid,$gid,$receive_gift_total,$num,$to_uid,2,$type,$room_id,$gift_box_str,0,2);
|
||
}else{
|
||
//收礼记录行为日志
|
||
$give_gift = $this -> change_user_give_gift_logs($uid,$gid,$gift_price,$num,$to_uid,2,$type,$room_id,'');
|
||
if(!$give_gift){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '送礼失败,请重试!', 'data' => null];
|
||
}
|
||
}
|
||
|
||
//记录送礼利率和各方收益
|
||
//平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益
|
||
$room_owner_ratio = get_system_config_value('room_author_ratio');
|
||
$app_ratio = 100 - $receive_ratio - $room_owner_ratio - $guid_ratio;
|
||
$app_earning = coin_earning($receive_gift_total, $app_ratio);
|
||
|
||
$gift_rate = $this->change_give_gift_profit($give_gift, $receive_ratio, $receiver_earnings, $room_owner_ratio, $room_owner_earnings, $app_ratio, $app_earning,$guid_ratio,$guild_earnings);
|
||
if(!$gift_rate){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-12', 'data' => null];
|
||
}
|
||
|
||
//增加房间火热值hot_value
|
||
$gift_totalaa = $receive_gift_total * get_system_config_value('coin_charm_exp');
|
||
db::name('vs_room')->where(['id' => $room_id])->inc('hot_value', $gift_totalaa)->inc('today_hot_value', $gift_totalaa)->update();
|
||
|
||
Db::commit();
|
||
}
|
||
|
||
//各种需要的及时推送========================================
|
||
//pk信息
|
||
$room_pk = Db::name('vs_room_pk')->where(['status' => 3, 'room_id_a' => $room_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', $receive_gift_total * 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' => $room_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', $receive_gift_total * 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($room_type == 6 && $room_label != 11){
|
||
//推送消息 交友房创建的私密房 倒计时增加
|
||
$add_time_str = get_system_config_value('room_cp_movie_add_time') ?? '1,1';//默认1金币增加1秒
|
||
//变成数组
|
||
$add_time_array = explode(',', $add_time_str);
|
||
$add_time = floor($receive_gift_total/$add_time_array[0])*$add_time_array[1];
|
||
$value = db::name('vs_room_cp_movie')->where('room_id', $room_id)->where('type',1)
|
||
->value('time_day');
|
||
if($value){
|
||
db::name('vs_room_cp_movie')->where('room_id', $room_id)->where('type',1)
|
||
->setInc('time_day', $add_time);//1金币加1秒
|
||
$text111 = [
|
||
'room_id' => $room_id,
|
||
'time_day' => db::name('vs_room_cp_movie')->where('room_id', $room_id)->where('type',1)->value('time_day'),
|
||
'text' => '房间结束时间变化'
|
||
];
|
||
//聊天室推送系统消息
|
||
model('Chat')->sendMsg(1052,$room_id,$text111);
|
||
}
|
||
}
|
||
|
||
$ToUserInfo = model('User')->get_user_base_info($to_uid);
|
||
$ToUserInfo['charm'] = db::name('vs_room_user_charm')->where(['user_id' => $to_uid,'room_id' => $room_id])->value('charm');//魅力
|
||
|
||
//盲盒礼物推送信息整合
|
||
if($gift_info['label'] == 2){
|
||
//循环开出来的盲盒,相同的礼物只推送一次,消息推送为$FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 趣味礼物 ' .$gift_inf['gift_name'].' x 多少';
|
||
if($gift_box){
|
||
// 统计相同礼物的数量
|
||
$giftCount = [];
|
||
foreach ($gift_box as $key=>$gv) {
|
||
$gift_infos = 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_server')->find();
|
||
if (isset($giftCount[$gv['gift_id']])) {
|
||
$giftCount[$gv['gift_id']]['count']++;
|
||
} else {
|
||
$giftCount[$gv['gift_id']] = [
|
||
'gift_info' => $gift_infos,
|
||
'count' => 1
|
||
];
|
||
}
|
||
$gift_box[$key]['gift_name'] = $gift_infos['gift_name'];
|
||
}
|
||
|
||
// 构建文字消息内容
|
||
$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,
|
||
'GiftInfos' => array_values($gift_box),
|
||
'GiftNum' => $num,
|
||
'text' => $textMessage
|
||
];
|
||
// 聊天室推送文字消息
|
||
model('Chat')->sendMsg(1038,$room_id,$textData);
|
||
|
||
// 循环推送每个礼物的特效消息
|
||
foreach ($giftCount as $giftId => $giftData) {
|
||
$gift_inf = $giftData['gift_info'];
|
||
$count = $giftData['count'];
|
||
|
||
// 推送礼物特效消息
|
||
$effectData = [
|
||
'FromUserInfo' => $FromUserInfo,
|
||
'ToUserInfo' => $ToUserInfo,
|
||
'GiftInfo' => $gift_inf,
|
||
'gift_num' => $count,
|
||
'text' => null
|
||
];
|
||
|
||
// 聊天室推送礼物特效消息
|
||
model('Chat')->sendMsg(1005,$room_id,$effectData);
|
||
|
||
if($room_type == 6){
|
||
//推送消息
|
||
$hot_value = db::name('vs_room')->where('id', $room_id)->value('hot_value');
|
||
$text1 = [
|
||
'room_id' => $room_id,
|
||
'hot_value' => $hot_value,
|
||
'text' => '房间心动值变化'
|
||
];
|
||
//聊天室推送系统消息
|
||
model('Chat')->sendMsg(1028,$room_id,$text1);
|
||
}else{
|
||
if($gift_inf['is_public_server'] == 1){
|
||
//推送礼物横幅
|
||
$push = new Push(UID, $room_id);
|
||
$room_name = Db::name('vs_room')->where(['id' => $room_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' => $room_id,
|
||
'fromUserName' => $FromUserInfo['nickname'],
|
||
'toUserName' => $ToUserInfo['nickname'],
|
||
'giftName' => $gift_inf['gift_name'],
|
||
'roomId' => $room_id,
|
||
'number' => $count,
|
||
];
|
||
$push->giftBanner($text_list_new);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}else{
|
||
if($gift_info['label'] == 17){
|
||
$text = $FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 礼物 ' .$gift_info['gift_name'].' x ' .$num;
|
||
$texts = [
|
||
'FromUserInfo' => $FromUserInfo,
|
||
'ToUserInfos' => [$ToUserInfo],
|
||
'GiftInfo' => $gift_info,
|
||
'gift_num' => $num,
|
||
'text' => $text
|
||
];
|
||
//聊天室推送系统消息
|
||
model('Chat')->sendMsg(1200, $room_id, $texts);
|
||
}else{
|
||
$text = $FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 礼物 ' .$gift_info['gift_name'].' x ' .$num;
|
||
$text = [
|
||
'FromUserInfo' => $FromUserInfo,
|
||
'ToUserInfo' => $ToUserInfo,
|
||
'GiftInfo' => $gift_info,
|
||
'gift_num' => $num,
|
||
'text' => $text
|
||
];
|
||
//聊天室推送系统消息
|
||
model('Chat')->sendMsg(1005,$room_id,$text);
|
||
}
|
||
|
||
if($room_type == 6){
|
||
//推送消息
|
||
$hot_value = db::name('vs_room')->where('id', $room_id)->value('hot_value');
|
||
$text1 = [
|
||
'room_id' => $room_id,
|
||
'hot_value' => $hot_value,
|
||
'text' => '房间心动值变化'
|
||
];
|
||
//聊天室推送系统消息
|
||
model('Chat')->sendMsg(1028,$room_id,$text1);
|
||
}else{
|
||
if($gift_info['is_public_server'] == 1){
|
||
//推送礼物横幅
|
||
$push = new Push($uid, $room_id);
|
||
$room_name = Db::name('vs_room')->where(['id' => $room_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' => $room_id,
|
||
'fromUserName' => $FromUserInfo['nickname'],
|
||
'toUserName' => $ToUserInfo['nickname'],
|
||
'giftName' => $gift_info['gift_name'],
|
||
'roomId' => $room_id,
|
||
'number' => $num,
|
||
];
|
||
$push->giftBanner($text_list_new);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
$textt = '';
|
||
$textt1 = '';
|
||
//cp检测且处理升级事宜
|
||
$cp_type = model('api/UserCp')->checkGift($uid, $gid, $to_uid, $room_id, $num,$receive_gift_total);//0-不处理,1-表明心意,2-组成Cp
|
||
if($cp_type == 1){
|
||
$textt1 = "亲爱的用户,您好!\n".$FromUserInfo['nickname'] . ' 的 【' .$gift_info['gift_name'].' 】 已送达,这是他的心动信号。回赠一个,即可锁定这份缘分!';
|
||
$textt = '';
|
||
}elseif ($cp_type == 2){
|
||
//接受方弹起的 信息
|
||
$textt1 = "恭喜你!". $FromUserInfo['nickname'] ."也向您回赠了【" .$gift_info['gift_name']."】,并接受了你的心动信号。\n从现在起,你们正式成为彼此的专属CP,共同开启一段甜蜜的旅程。\n【心动空间】已为你们敞开大门!这里将记录你们在一起的点滴,见证所有心动与陪伴。快去心动空间,开启你们的CP升级之旅吧!";
|
||
$textt = '【心动空间】已为你们敞开大门!这里将记录你们在一起的点滴,见证所有心动与陪伴。快去心动空间,开启你们的CP升级之旅吧!';//发送方弹起的信息
|
||
}
|
||
$gift_user_data = [];//收礼人信息和收到的金币 交友和参与拍卖使用
|
||
if($cp_type != 0){
|
||
$gift_user_data[] = [
|
||
'user_id' => $to_uid,
|
||
'gift_price' => $receive_gift_total,
|
||
];
|
||
}else{
|
||
$gift_user_data[] = [
|
||
'user_id' => $to_uid,
|
||
'gift_price' => $receive_gift_total,
|
||
];
|
||
}
|
||
if($room_type == 7){
|
||
$reslut = [
|
||
'data' => ['gift_total' => $receive_gift_total,'gift_user_data' =>$gift_user_data,]
|
||
];
|
||
model('api/Friend')->room_give_gift($uid, $to_uid,$room_id,$reslut,$heart_id);
|
||
}
|
||
|
||
//gift_total:收礼人收礼金币总和,交友和参与拍卖使用;cp_type:cp交友使用,gift_user_data:cp交友使用,
|
||
return ['code' => 1, 'msg' => '送礼成功', 'data' => ['gift_total' => $receive_gift_total,'gift_user_data' =>$gift_user_data,'cp_type' => ['cp_type' => $cp_type,'text' => $textt,'text1' => $textt1,'gift_id' => $gid]]];
|
||
}
|
||
|
||
|
||
//送多人礼物
|
||
public function send_gift_to_users($uid,$to_array,$gid,$num,$type,$room_id,$gift_bag_id,$heart_id){
|
||
//送的礼物信息
|
||
$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_server')->find();
|
||
|
||
if(empty($gift_info)){
|
||
return ['code' => 0, 'msg' => '礼物已下架,请重新选择!', 'data' => null];
|
||
}
|
||
|
||
//循环查询用户是否实名
|
||
foreach ($to_array as $key => $value){
|
||
$mobile = Db::name('user')->where(['id'=>$value])->value('mobile');
|
||
$is_real = db::name('user_auth')->where('mobile' , $mobile)->field('id,is_real')->find();
|
||
if($is_real){
|
||
if($is_real['is_real'] != 1){
|
||
return ['code' => 0, 'msg' => '收礼用户中有未实名,暂不支持收礼', 'data' => null];
|
||
}
|
||
}else{
|
||
return ['code' => 0, 'msg' => '收礼用户中有未实名,暂不支持收礼', 'data' => null];
|
||
}
|
||
}
|
||
|
||
$room_type = model('Room')->get_room_type($room_id);
|
||
$room_owner = Db::name('vs_room')->where(['id'=>$room_id,'apply_status'=>2])->value('user_id');
|
||
|
||
//获取送礼用户信息
|
||
$FromUserInfo = model('User')->get_user_base_info($uid);
|
||
|
||
//送给一人礼物的总价格
|
||
$gift_price = $gift_info['gift_price'] * $num;
|
||
|
||
//送礼人的金币
|
||
$user_coin = db::name('user_wallet_coin')->where(['user_id'=>$uid])->value('coin');
|
||
|
||
//金币购买送礼 1金币购买 2送背包礼物
|
||
if($type == 1){
|
||
//送给所有人的总价格
|
||
$all_gift_price = $gift_price * count($to_array);
|
||
|
||
//判断是否有足够的金币
|
||
if ($user_coin < $all_gift_price) {
|
||
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($to_array)) {
|
||
return ['code' => 0, 'msg' => '用户背包礼物不足', 'data' => null];
|
||
}
|
||
|
||
}
|
||
|
||
$room_hotvalue = 0;//房间热度(所有收礼人的礼物总值)
|
||
$gift_user_data = [];//收礼人收礼金币总和,交友和参与拍卖使用;
|
||
$label_text = '';//酒吧房撩TA的信息
|
||
$ToUserInfos = [];//酒吧房被撩用户集合
|
||
|
||
foreach ($to_array as $k => $to_uid){
|
||
$gift_box_str = '';
|
||
$gift_user_data[]['user_id'] = $to_uid;
|
||
$receive_gift_total = 0;//收礼人收到的礼物总值
|
||
$gift_box = [];//开出的盲盒
|
||
//送礼 开启事务
|
||
Db::startTrans();
|
||
|
||
if($type == 1) {
|
||
//扣除用户金币并记录日志
|
||
$wallet_update = model('api/UserWallet')->change_user_cion_log($uid, $gift_price, $room_id, 10, '购买礼物');
|
||
if (!$wallet_update) {
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-1', 'data' => null];
|
||
}
|
||
}else{
|
||
//扣除背包礼物并记录日志
|
||
$gift_pack = $this -> change_user_gift_pack_log(3,$uid,$gid,$num,'房间送礼');
|
||
if(!$gift_pack){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-2', 'data' => null];
|
||
}
|
||
}
|
||
|
||
//查询礼物是否是盲盒
|
||
if($gift_info['label'] == 2){//趣味礼物(盲盒)
|
||
$gift_box_map = [];
|
||
for($i = 0; $i < $num; $i++){
|
||
//开盲盒
|
||
$gift_box1[$i] = $this -> open_box($gid,$uid,$to_uid,$room_id,$gift_bag_id);
|
||
if($gift_box1[$i]['code'] != 1){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-3', 'data' => null];
|
||
}
|
||
$gift_box[$i] = $gift_box1[$i]['data'];
|
||
//开出的礼物价值
|
||
$receive_gift_total += $gift_box[$i]['gift_price'];
|
||
|
||
//礼物整合
|
||
$gift_id = $gift_box[$i]['gift_id'];
|
||
$gift_name = $gift_box[$i]['gift_name'];
|
||
|
||
if(isset($gift_box_map[$gift_id])){
|
||
// 如果礼物ID已存在,数量加1
|
||
$gift_box_map[$gift_id]['count']++;
|
||
}else{
|
||
// 如果礼物ID不存在,添加新项
|
||
$gift_box_map[$gift_id] = [
|
||
'name' => $gift_name,
|
||
'count' => 1
|
||
];
|
||
}
|
||
|
||
//使用收礼用户 和礼物ID 查询礼物墙
|
||
$gift_wall = db::name('user_gift_wall')->where(['user_id'=>$to_uid,'gift_id'=>$gift_id])->find();
|
||
if($gift_wall){
|
||
db::name('user_gift_wall')->where(['id'=>$gift_wall['id']])->inc('count',1)->update();
|
||
$userIds = explode(',',$gift_wall['give_user_ids']);
|
||
if(!in_array($uid,$userIds)){
|
||
$userIds[] = $uid;
|
||
db::name('user_gift_wall')->where(['id'=>$gift_wall['id']])->update(['give_user_ids'=>implode(',',$userIds)]);
|
||
}
|
||
}else{
|
||
db::name('user_gift_wall')->insert([
|
||
'user_id' => $to_uid,
|
||
'gift_id' => $gift_id,
|
||
'count' => 1,
|
||
'give_user_ids' => $uid,
|
||
'updatetime' => time()
|
||
]);
|
||
}
|
||
}
|
||
if(!empty($gift_box_map)){
|
||
//拼接礼物字符串 (娃哈哈 * 2 / 娃哈哈1 * 1)这种格式
|
||
$gift_box_str_parts = [];
|
||
foreach($gift_box_map as $gift_id => $gift_info_data){
|
||
$gift_box_str_parts[] = $gift_info_data['name'] . ' * ' . $gift_info_data['count'];
|
||
}
|
||
$gift_box_str = implode(' / ', $gift_box_str_parts);
|
||
}
|
||
}else{
|
||
$receive_gift_total = $gift_price;
|
||
}
|
||
$gift_user_data[$k]['gift_price'] = $receive_gift_total;
|
||
|
||
//计算收礼人得益 //1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 99房主收益 98主持人收益
|
||
$receiver_earnings = model('GiveGift') -> receiver_earnings($to_uid,$receive_gift_total,2);
|
||
if($receiver_earnings > 0){
|
||
//增加收益并记录日志
|
||
$receiver = model('api/UserWallet')->change_user_earnings_log($to_uid,$receiver_earnings,$room_id,11,'收礼增加收益');
|
||
if(!$receiver){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-4', 'data' => null];
|
||
}
|
||
}
|
||
|
||
//用户魅力等级更新
|
||
$user_level = model('Level')->user_level_data_update($to_uid,$receive_gift_total,2,$room_id);
|
||
if(!$user_level){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null];
|
||
}
|
||
|
||
$room_owner_earnings = 0;//房主收益
|
||
$guild_earnings = 0;//公会会长收益
|
||
$guid_ratio = 0;//公会长收益率
|
||
$receive_ratio = get_system_config_value('room_gift_ratio');//房间收礼人收益
|
||
|
||
//计算房主收益//room_author_ratio
|
||
$room_owner_earnings = model('GiveGift') -> receiver_earnings($room_owner,$receive_gift_total,99);//结果是钻石
|
||
if($room_owner_earnings > 0){
|
||
//在主持位的主持人
|
||
$host_id = Db::name('vs_room_pit')->where(['room_id'=>$room_id,'pit_number'=>9])->value('user_id');
|
||
if($host_id){
|
||
//计算主持人收益
|
||
$ratio = db::name('vs_room_host')->where(['room_id'=>$room_id,'user_id'=>$host_id,'delete_time'=>null,'type'=>1])->value('ratio');
|
||
if(!$ratio){
|
||
$ratio = 0;
|
||
}
|
||
$host_earnings = round($room_owner_earnings * $ratio / 100,4);
|
||
if($host_earnings > 0){
|
||
//增加主持人收益并记录日志
|
||
$host_earnings_earning = model('api/UserWallet')->change_user_earnings_log($host_id,$host_earnings,$room_id,19,'主持人收益');
|
||
if(!$host_earnings_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-7', 'data' => null];
|
||
}
|
||
//增加房主收益并记录日志
|
||
$room_owner_earningss = $room_owner_earnings - $host_earnings;
|
||
if($room_owner_earningss > 0){
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earningss,$room_id,18,'房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-8', 'data' => null];
|
||
}
|
||
}
|
||
|
||
}else{
|
||
//增加房主收益并记录日志
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earnings,$room_id,18,'房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-9', 'data' => null];
|
||
}
|
||
}
|
||
}else{
|
||
//增加房主收益并记录日志
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earnings,$room_id,18,'房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-10', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
|
||
//收礼人是否加入公会
|
||
$is_join_guild = Db::name('vs_guild_user')->where(['user_id'=>$to_uid,'status'=>1,'quit_time' => 0])->field('guild_id,settlement_ratio')->find();
|
||
if($is_join_guild){
|
||
//公会长收益 房间收礼人收益+房间收礼人加入公会后增加收益
|
||
$max_settlement_ratio = get_system_config_value('room_gift_ratio') + get_system_config_value('room_gift_guild_ratio');
|
||
$receive_ratio = $is_join_guild['settlement_ratio'] ?? 0;//加入公会后 公会长设置的收益
|
||
$guid_ratio = $max_settlement_ratio - $receive_ratio;
|
||
if($guid_ratio > 0){
|
||
//公会长收益
|
||
$guild_earnings = coin_earning($receive_gift_total,$guid_ratio);
|
||
if($guild_earnings > 0){
|
||
$guild_user = db::name('vs_guild')->where(['id' => $is_join_guild['guild_id']])->value('user_id');
|
||
$guild_earnings_in = model('api/UserWallet')
|
||
->change_user_earnings_log($guild_user,$guild_earnings,$room_id,21,'工会长收益');
|
||
if(!$guild_earnings_in){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-11', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if($gift_info['label'] == 2) {//趣味礼物(盲盒)
|
||
// if($gift_box){
|
||
// foreach ($gift_box as $i => $v){
|
||
// //记录一下收礼记录
|
||
// $give_gift = $this -> change_user_give_gift_logs($uid,$v['gift_id'],$v['gift_price'],1,$to_uid,2,$type,$room_id,'',0,2);
|
||
// if(!$give_gift){
|
||
// Db::rollback();
|
||
// return ['code' => 0, 'msg' => '送礼失败,请重试!!', 'data' => null];
|
||
// }
|
||
// }
|
||
// }
|
||
$give_gift = $this -> change_user_give_gift_logs($uid,$gid,$receive_gift_total,$num,$to_uid,2,$type,$room_id,$gift_box_str,0,2);
|
||
}else{
|
||
//收礼记录行为日志
|
||
$give_gift = $this -> change_user_give_gift_logs($uid,$gid,$gift_price,$num,$to_uid,2,$type,$room_id,'');
|
||
if(!$give_gift){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '送礼失败,请重试!', 'data' => null];
|
||
}
|
||
}
|
||
|
||
//记录送礼利率和各方收益
|
||
//平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益
|
||
$room_owner_ratio = get_system_config_value('room_author_ratio');
|
||
$app_ratio = 100 - $receive_ratio - $room_owner_ratio - $guid_ratio;
|
||
$app_earning = coin_earning($receive_gift_total, $app_ratio);
|
||
|
||
$gift_rate = $this->change_give_gift_profit($give_gift, $receive_ratio, $receiver_earnings, $room_owner_ratio, $room_owner_earnings, $app_ratio, $app_earning,$guid_ratio,$guild_earnings);
|
||
if(!$gift_rate){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-12', 'data' => null];
|
||
}
|
||
$room_hotvalue += $receive_gift_total;
|
||
Db::commit();
|
||
|
||
//各种需要的及时推送
|
||
$room_pk = Db::name('vs_room_pk')->where(['status' => 3, 'room_id_a' => $room_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', $receive_gift_total * 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' => $room_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', $receive_gift_total * 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);
|
||
}
|
||
}
|
||
|
||
$ToUserInfo = model('User')->get_user_base_info($to_uid);
|
||
$ToUserInfo['charm'] = db::name('vs_room_user_charm')->where(['user_id' => $to_uid,'room_id' => $room_id])->value('charm');//魅力
|
||
|
||
//推送其他时刻需要的信息 其他放到异步回调里
|
||
if($gift_info['label'] == 2){
|
||
//循环开出来的盲盒,相同的礼物只推送一次,消息推送为$FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 趣味礼物 ' .$gift_inf['gift_name'].' x 多少';
|
||
if($gift_box){
|
||
// 统计相同礼物的数量
|
||
$giftCount = [];
|
||
foreach ($gift_box as $key=>$gv) {
|
||
$gift_infos = 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_server')->find();
|
||
if (isset($giftCount[$gv['gift_id']])) {
|
||
$giftCount[$gv['gift_id']]['count']++;
|
||
} else {
|
||
$giftCount[$gv['gift_id']] = [
|
||
'gift_info' => $gift_infos,
|
||
'count' => 1
|
||
];
|
||
}
|
||
$gift_box[$key]['gift_name'] = $gift_infos['gift_name'];
|
||
}
|
||
|
||
// 构建文字消息内容
|
||
$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,
|
||
'GiftInfos' => array_values($gift_box),
|
||
'GiftNum' => $num,
|
||
'text' => $textMessage
|
||
];
|
||
// 聊天室推送文字消息
|
||
model('Chat')->sendMsg(1038,$room_id,$textData);
|
||
|
||
// 循环推送每个礼物的特效消息
|
||
foreach ($giftCount as $giftId => $giftData) {
|
||
$gift_inf = $giftData['gift_info'];
|
||
$count = $giftData['count'];
|
||
|
||
// 推送礼物特效消息
|
||
$effectData = [
|
||
'FromUserInfo' => $FromUserInfo,
|
||
'ToUserInfo' => $ToUserInfo,
|
||
'GiftInfo' => $gift_inf,
|
||
'gift_num' => $count,
|
||
'text' => null
|
||
];
|
||
|
||
// 聊天室推送礼物特效消息
|
||
model('Chat')->sendMsg(1005,$room_id,$effectData);
|
||
|
||
if($gift_inf['is_public_server'] == 1){
|
||
//推送礼物横幅
|
||
$push = new Push(UID, $room_id);
|
||
$room_name = Db::name('vs_room')->where(['id' => $room_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' => $room_id,
|
||
'fromUserName' => $FromUserInfo['nickname'],
|
||
'toUserName' => $ToUserInfo['nickname'],
|
||
'giftName' => $gift_inf['gift_name'],
|
||
'roomId' => $room_id,
|
||
'number' => $count,
|
||
];
|
||
$push->giftBanner($text_list_new);
|
||
}
|
||
}
|
||
}
|
||
|
||
}else{
|
||
if($gift_info['label'] == 17) {
|
||
$label_text .= $FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'] . ' 礼物 ' . $gift_info['gift_name'] . ' x ' . $num . "\n";
|
||
$ToUserInfos[] = $ToUserInfo;
|
||
}else{
|
||
$text = $FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'] . ' 礼物 ' . $gift_info['gift_name'] . ' x ' . $num;
|
||
$text = [
|
||
'FromUserInfo' => $FromUserInfo,
|
||
'ToUserInfo' => $ToUserInfo,
|
||
'GiftInfo' => $gift_info,
|
||
'gift_num' => $num,
|
||
'text' => $text
|
||
];
|
||
//聊天室推送系统消息
|
||
model('Chat')->sendMsg(1005, $room_id, $text);
|
||
}
|
||
if($gift_info['is_public_server'] == 1){
|
||
//推送礼物横幅
|
||
$push = new Push($uid, $room_id);
|
||
$room_name = Db::name('vs_room')->where(['id' => $room_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' => $room_id,
|
||
'fromUserName' => $FromUserInfo['nickname'],
|
||
'toUserName' => $ToUserInfo['nickname'],
|
||
'giftName' => $gift_info['gift_name'],
|
||
'roomId' => $room_id,
|
||
'number' => $num,
|
||
];
|
||
$push->giftBanner($text_list_new);
|
||
}
|
||
}
|
||
}
|
||
|
||
if($gift_info['label'] == 17) {
|
||
$label_text = rtrim($label_text, "\n");
|
||
$texts = [
|
||
'FromUserInfo' => $FromUserInfo,
|
||
'ToUserInfos' => $ToUserInfos,
|
||
'GiftInfo' => $gift_info,
|
||
'gift_num' => $num,
|
||
'text' => $label_text
|
||
];
|
||
//聊天室推送系统消息
|
||
model('Chat')->sendMsg(1200, $room_id, $texts);
|
||
}
|
||
//增加房间火热值hot_value
|
||
$gift_totalaa = $room_hotvalue * get_system_config_value('coin_charm_exp');
|
||
db::name('vs_room')->where(['id' => $room_id])->inc('hot_value', $gift_totalaa)->inc('today_hot_value', $gift_totalaa)->update();
|
||
|
||
if($room_type == 7){
|
||
$reslut = [
|
||
'data' => ['gift_total' => $gift_totalaa,'gift_user_data' =>$gift_user_data,]
|
||
];
|
||
model('api/Friend')->room_give_gift($uid, $to_array,$room_id,$reslut,$heart_id);
|
||
}
|
||
//gift_total:收礼人收礼金币总和,交友和参与拍卖使用;cp_type:cp交友使用,gift_user_data:cp交友使用,
|
||
return ['code' => 1, 'msg' => '送礼成功', 'data' => ['gift_total' => $room_hotvalue,'gift_user_data' =>null,'cp_type' => null]];
|
||
}
|
||
|
||
//送一个人的礼物-盘(天空之境)
|
||
public function single_send_gift_pan($uid,$to_uid,$gid,$num,$type,$room_id,$gift_bag_id,$heart_id)
|
||
{
|
||
//送的礼物信息
|
||
$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_server')->find();
|
||
|
||
// if(empty($gift_info)){
|
||
// return ['code' => 0, 'msg' => '礼物已下架,请重新选择!', 'data' => null];
|
||
// }
|
||
|
||
$mobile = Db::name('user')->where(['id'=>$to_uid])->value('mobile');
|
||
$is_real = db::name('user_auth')->where('mobile' , $mobile)->value('is_real');
|
||
if($is_real != 1){
|
||
return ['code' => 0, 'msg' => '该用户未实名,暂不支持收礼', 'data' => null];
|
||
}
|
||
|
||
$room_type = model('Room')->get_room_type($room_id);
|
||
|
||
//送给一人礼物的总价格
|
||
$gift_price = $gift_info['gift_price'] * $num;
|
||
|
||
//送礼 开启事务
|
||
Db::startTrans();
|
||
$receive_gift_total = $gift_price;//收礼人收到的礼物总值
|
||
|
||
//计算收礼人得益 //1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 99房主收益 98主持人收益
|
||
$receiver_earnings = model('GiveGift') -> receiver_earnings($to_uid,$receive_gift_total,2);
|
||
if($receiver_earnings > 0){
|
||
//增加收益并记录日志
|
||
$receiver = model('api/UserWallet')->change_user_earnings_log($to_uid,$receiver_earnings,$room_id,11,'收礼增加收益');
|
||
if(!$receiver){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-4', 'data' => null];
|
||
}
|
||
}
|
||
|
||
//用户魅力等级更新
|
||
$user_level = model('Level')->user_level_data_update($to_uid,$receive_gift_total,2,$room_id);
|
||
if(!$user_level){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null];
|
||
}
|
||
|
||
$guild_earnings = 0;//公会会长收益
|
||
$guid_ratio = 0;//公会长收益率
|
||
$receive_ratio = get_system_config_value('room_gift_ratio');//房间收礼人收益
|
||
|
||
$room_owner = Db::name('vs_room')->where(['id'=>$room_id,'apply_status'=>2])->value('user_id');
|
||
//计算房主收益//room_author_ratio
|
||
$room_owner_earnings = model('GiveGift') -> receiver_earnings($room_owner,$receive_gift_total,99);//结果是钻石
|
||
if($room_owner_earnings > 0){
|
||
//在主持位的主持人
|
||
$host_id = Db::name('vs_room_pit')->where(['room_id'=>$room_id,'pit_number'=>9])->value('user_id');
|
||
if($host_id){
|
||
//计算主持人收益
|
||
$ratio = db::name('vs_room_host')->where(['room_id'=>$room_id,'user_id'=>$host_id,'delete_time'=>null,'type'=>1])->value('ratio');
|
||
if(!$ratio){
|
||
$ratio = 0;
|
||
}
|
||
$host_earnings = round($room_owner_earnings * $ratio / 100,4);
|
||
if($host_earnings > 0){
|
||
//增加主持人收益并记录日志
|
||
$host_earnings_earning = model('api/UserWallet')->change_user_earnings_log($host_id,$host_earnings,$room_id,19,'主持人收益');
|
||
if(!$host_earnings_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-7', 'data' => null];
|
||
}
|
||
//增加房主收益并记录日志
|
||
$room_owner_earningss = $room_owner_earnings - $host_earnings;
|
||
if($room_owner_earningss > 0){
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earningss,$room_id,18,'房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-8', 'data' => null];
|
||
}
|
||
}
|
||
|
||
}else{
|
||
//增加房主收益并记录日志
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earnings,$room_id,18,'房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-9', 'data' => null];
|
||
}
|
||
}
|
||
}else{
|
||
//增加房主收益并记录日志
|
||
$room_owner_earning = model('api/UserWallet')->change_user_earnings_log($room_owner,$room_owner_earnings,$room_id,18,'房主收益');
|
||
if(!$room_owner_earning){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-10', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
|
||
//收礼人是否加入公会
|
||
$is_join_guild = Db::name('vs_guild_user')->where(['user_id'=>$to_uid,'status'=>1,'quit_time' => 0])->field('guild_id,settlement_ratio')->find();
|
||
if($is_join_guild){
|
||
//公会长收益 房间收礼人收益+房间收礼人加入公会后增加收益
|
||
$max_settlement_ratio = get_system_config_value('room_gift_ratio') + get_system_config_value('room_gift_guild_ratio');
|
||
$receive_ratio = $is_join_guild['settlement_ratio'] ?? 0;//加入公会后 公会长设置的收益
|
||
$guid_ratio = $max_settlement_ratio - $receive_ratio;
|
||
if($guid_ratio > 0){
|
||
//公会长收益
|
||
$guild_earnings = coin_earning($receive_gift_total,$guid_ratio);
|
||
if($guild_earnings > 0){
|
||
$guild_user = db::name('vs_guild')->where(['id' => $is_join_guild['guild_id']])->value('user_id');
|
||
$guild_earnings_in = model('api/UserWallet')
|
||
->change_user_earnings_log($guild_user,$guild_earnings,$room_id,21,'工会长收益');
|
||
if(!$guild_earnings_in){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-11', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//收礼记录行为日志
|
||
$give_gift = $this -> change_user_give_gift_logs($uid,$gid,$gift_price,$num,$to_uid,2,$type,$room_id,'');
|
||
if(!$give_gift){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '送礼失败,请重试!', 'data' => null];
|
||
}
|
||
|
||
//记录送礼利率和各方收益
|
||
//平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益
|
||
$room_owner_ratio = get_system_config_value('room_author_ratio');
|
||
$app_ratio = 100 - $receive_ratio - $room_owner_ratio - $guid_ratio;
|
||
$app_earning = coin_earning($gift_price, $app_ratio);
|
||
|
||
$gift_rate = $this->change_give_gift_profit($give_gift, $receive_ratio, $receiver_earnings, $room_owner_ratio, $room_owner_earnings, $app_ratio, $app_earning,$guid_ratio,$guild_earnings);
|
||
if(!$gift_rate){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '网络错误-12', 'data' => null];
|
||
}
|
||
|
||
//增加房间火热值hot_value
|
||
$gift_totalaa = $receive_gift_total * get_system_config_value('coin_charm_exp');
|
||
db::name('vs_room')->where(['id' => $room_id])->inc('hot_value', $gift_totalaa)->inc('today_hot_value', $gift_totalaa)->update();
|
||
|
||
Db::commit();
|
||
|
||
//各种需要的及时推送
|
||
$room_pk = Db::name('vs_room_pk')->where(['status' => 3, 'room_id_a' => $room_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', $receive_gift_total * 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' => $room_id])->field('pk_id')->find();
|
||
if (!empty($room_pk_b)) {
|
||
// 当前 room_id 是 room_id_b
|
||
Db::name('vs_room_pk')->where('pk_id', $room_pk_b['pk_id'])->setInc('receive_value_b', $receive_gift_total * 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);
|
||
}
|
||
}
|
||
|
||
$ToUserInfo = model('User')->get_user_base_info($to_uid);
|
||
$ToUserInfo['charm'] = db::name('vs_room_user_charm')->where(['user_id' => $to_uid,'room_id' => $room_id])->value('charm');//魅力
|
||
|
||
//推送其他时刻需要的信息 其他放到异步回调里
|
||
//cp检测且处理升级事宜
|
||
$cp_type = model('api/UserCp')->checkGift($uid, $gid, $to_uid, $room_id, $num,$receive_gift_total);//0-不处理,1-表明心意,2-组成Cp
|
||
$gift_user_data = [];//收礼人信息和收到的金币 交友和参与拍卖使用
|
||
if($cp_type != 0){
|
||
$gift_user_data[] = [
|
||
'user_id' => $to_uid,
|
||
'gift_price' => $receive_gift_total,
|
||
];
|
||
}
|
||
if($room_type == 7){
|
||
$reslut = [
|
||
'data' => ['gift_total' => $receive_gift_total,'gift_user_data' =>$gift_user_data,]
|
||
];
|
||
model('api/Friend')->room_give_gift($uid, $to_uid,$room_id,$reslut,$heart_id);
|
||
}
|
||
return ['code' => 1, 'msg' => '送礼成功', 'data' => null];
|
||
}
|
||
|
||
|
||
//记录用户赠送背包礼物日志
|
||
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;
|
||
}
|
||
|
||
|
||
/*
|
||
* 开盲盒
|
||
*/
|
||
public function open_box($gift_id,$user_id,$gift_user_id,$room_id,$gift_bag_id){
|
||
//获取盲盒配置
|
||
if($gift_bag_id){
|
||
$gift_bag = db::name("vs_gift_bag")->where(['id'=>$gift_bag_id])->find();
|
||
if(!$gift_bag){
|
||
return ['code' => 0, 'msg' => '当前盲盒不存在', 'data' => []];
|
||
}
|
||
$periods = $gift_bag['periods'] ?? 0;
|
||
$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_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;
|
||
}
|
||
|
||
}
|
||
//关禁闭----限制某个房间抽奖只能抽盘里数量最多的礼物--------
|
||
$gift_bag_details = db::name("vs_gift_bag_detail")->where([ 'gift_bag_id' => $gift_bag_id,'remaining_number' => ['>',0]])->order('remaining_number', 'desc')->find();
|
||
if($gift_bag_details && in_array($room_id,[49])){
|
||
$gift_bag_detail = $gift_bag_details;
|
||
}
|
||
//关禁闭---------------------------------------------
|
||
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'],
|
||
'gift_name'=>$gift['gift_name'],
|
||
'is_public_screen'=>$gift['is_public_screen'],
|
||
];
|
||
return ['code' => 1, 'msg' => '成功', 'data' => $result_data];
|
||
}
|
||
|
||
|
||
//记录用户送礼日志(送单人)
|
||
public function change_user_give_gift_log($uid,$gid,$gift_price,$num,$to_id,$from_type,$type,$from_id,$remarks,$pit_number = 0,$gitf_type =1)
|
||
{
|
||
$data = [
|
||
'id' => Snowflake::generate(),// 生成雪花ID
|
||
'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送背包礼物
|
||
'remarks' => $remarks??'',
|
||
'createtime' => time(),
|
||
];
|
||
|
||
// 插入数据库
|
||
$model = new GiveGiftBase();
|
||
$result = $model->addGiftRecord($data);
|
||
if($result !== false){
|
||
//记录小时榜
|
||
model('api/RoomHourRanking')->addGiftHourlySum($from_id,$gift_price);
|
||
|
||
//记录房间流水 ($roomId, $amount)
|
||
model('api/RoomDailyIncome')->addDailyIncome($from_id,$gift_price);
|
||
|
||
//收礼人认证歌手等级升级
|
||
model('api/SingerSong')->singerLevelUp($to_id,$gift_price);
|
||
|
||
//收礼人身价计算 这里的增长身价是收礼物的价值按比率产生的身价值 身价=收礼产生的身价+签约时的溢价
|
||
$coin_market_value = get_system_config_value('coin_market_value');
|
||
if(!$coin_market_value){
|
||
$coin_market_value = '100,1';
|
||
}
|
||
$coin_market_values = explode(',', $coin_market_value);
|
||
$change_value = ceil($gift_price / ($coin_market_values[0] ?? 100) * ($coin_market_values[1] ?? 1));
|
||
model('api/MarketValue')->change($to_id,$change_value,0);
|
||
|
||
//收礼人是否被签约 给上级返佣
|
||
model('api/Sign')->check_sign_gift($to_id,$gid,$num,$gift_price,$from_id);
|
||
|
||
//记录公会流水
|
||
if($from_id > 0){
|
||
model('api/Guild')->guild_flow($from_id,$gift_price,$data['id']);
|
||
}
|
||
|
||
//查询是否第一次送礼
|
||
$is_first_gift = db::name('user_data')->where(['user_id'=>$uid])->value('first_give_gift');
|
||
if($is_first_gift == 0){
|
||
//任务:7-第一次送礼
|
||
model('api/Tasks')->tasks_complete($uid,7);
|
||
db::name('user_data')->where(['user_id'=>$uid])->update(['first_give_gift'=>1]);
|
||
}
|
||
//查询是否第一次收礼
|
||
$is_first_receive_gift = db::name('user_data')->where(['user_id'=>$to_id])->value('first_receive_gift');
|
||
if($is_first_receive_gift == 0){
|
||
//任务:8-第一次收礼
|
||
model('api/Tasks')->tasks_complete($to_id,8);
|
||
db::name('user_data')->where(['user_id'=>$to_id])->update(['first_receive_gift'=>1]);
|
||
}
|
||
|
||
//查询收礼人和送礼人的师徒关系
|
||
//获取系统配置的特殊礼物
|
||
$special_gift = explode(',',get_system_config_value('master_special_gift'));
|
||
//收礼人是否是送礼人的师父
|
||
$is_master = db::name('vs_user_sign')->where(['parent_user_id'=>$to_id,'sign_user_id'=>$uid,'end_time' => ['>=',time()]])->find();
|
||
if($is_master){
|
||
if(in_array($gid,$special_gift)){
|
||
//任务:14-每日给师傅送一个特定的礼物
|
||
model('api/Tasks')->tasks_complete($uid,14);
|
||
//查询今天是否送过礼物了
|
||
$is_today_gift = db::name('vs_give_gift')
|
||
->where(['user_id'=>$uid,'gift_user'=>$to_id,'createtime' => ['>=',strtotime(date('Y-m-d'))],'gift_id' => ['in',$special_gift]])->count();
|
||
if($is_today_gift <= 1){
|
||
//任务:13-每日收到至少3个徒弟的特殊徐礼物
|
||
model('api/Tasks')->tasks_complete($to_id,13);
|
||
}
|
||
}
|
||
}
|
||
//收礼人是否是送礼人的徒弟
|
||
$is_student = db::name('vs_user_sign')->where(['parent_user_id'=>$uid,'sign_user_id'=>$to_id,'end_time' => ['>=',time()]])->find();
|
||
if($is_student){
|
||
if(in_array($gid,$special_gift)){
|
||
//查询徒弟是否是首签的徒弟 sign_user_type:被签用户的类型:0-首次被签,1-签约过期,2-违约签
|
||
$is_students = db::name('vs_user_sign')
|
||
->where(['parent_user_id' => $uid,'sign_user_id' => $to_id,'sign_user_type' => 0,'end_time' => ['>',time()]])->value('id');
|
||
if($is_students){
|
||
//获取房间的类型
|
||
$room_type = db::name('vs_room')->where(['id' => $from_id])->value('type_id');
|
||
if($room_type == 2){
|
||
//任务:21-邀请徒弟在拍卖房停留(0/5)分钟,并送给徒弟(0/1 ,特殊礼物)
|
||
model('api/Tasks')->tasks_complete($uid,21,2,$to_id);
|
||
}
|
||
if($room_type == 9){
|
||
//任务:22-邀请徒弟在点唱房点歌(0/1)首,并送给徒弟(0/1 ,特殊礼物)
|
||
model('api/Tasks')->tasks_complete($uid,22,2,$to_id);
|
||
}
|
||
if($room_type == 7) {
|
||
//任务:23-邀请徒弟在交友房停留(0/5)分钟,并送给徒弟(0/1 ,特殊礼物)
|
||
model('api/Tasks')->tasks_complete($uid, 23, 2,$to_id);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return $data['id'];
|
||
}else{
|
||
return false;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
//记录用户送礼日志 (送多人)
|
||
public function change_user_give_gift_logs($uid,$gid,$gift_price,$num,$to_id,$from_type,$type,$from_id,$remarks,$pit_number = 0,$gitf_type =1)
|
||
{
|
||
$data = [
|
||
'id' => Snowflake::generate(),// 生成雪花ID
|
||
'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送背包礼物
|
||
'remarks' => $remarks??'',
|
||
'createtime' => time(),
|
||
];
|
||
|
||
GiftQueue::push($data);//推入队列
|
||
//记录小时榜
|
||
model('api/RoomHourRanking')->addGiftHourlySum($from_id,$gift_price);
|
||
return $data['id'];
|
||
}
|
||
|
||
|
||
/*
|
||
* 送礼利率收益等具体记录
|
||
* @param $give_gift_id 送礼记录表ID
|
||
* @param $gift_user_ratio 收礼人 收礼时的收益率(单位%)
|
||
* @param $gift_user_earning 收礼人的收益
|
||
* @param $room_owner_ratio 房主收益率(单位 %)
|
||
* @param $room_owner_earning 房主收益
|
||
* @param $app_ratio 平台收益率(单位 %)
|
||
* @param $app_earning 平台收益
|
||
* @param $guid_ratio 公会收益率(单位 %)
|
||
* @param $guild_earning 公会收益
|
||
* @return bool
|
||
*/
|
||
public function change_give_gift_profit($give_gift_id,$gift_user_ratio,$gift_user_earning = 0,$room_owner_ratio = 0,$room_owner_earning = 0,$app_ratio = 0,$app_earning = 0,$guid_ratio=0,$guild_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,
|
||
'guid_ratio' => $guid_ratio,
|
||
'guid_ratio_earning' => $guild_earning,
|
||
'createtime' => time(),
|
||
];
|
||
$res = Db::name('vs_give_gift_ratio_log')->insert($data);
|
||
if(!$res){
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
} |