酒吧房:->相关接口提交-盲盒转盘-送礼接口修改

This commit is contained in:
2026-01-06 20:11:56 +08:00
parent 38705cc76a
commit 8ee7b255f3
2 changed files with 245 additions and 24 deletions

View File

@@ -689,7 +689,7 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model
$this->batchInsertGiftBagReceiveLog($bag_data,$user_id, $boxTurntableLog,$room_id, $precomputedResults);
// 5. 发送礼物
$result = $this->sendGiftsToRecipients($precomputedResults, $room_id,$user_id,$heart_id,$auction_id);
$result = $this->sendGiftsToRecipients($bag_data,$precomputedResults, $room_id,$user_id,$heart_id,$auction_id);
if (isset($result['code']) && $result['code'] !== 1) {
throw new \Exception($result['msg']);
}
@@ -815,7 +815,7 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model
/**
* 发送礼物给接收者
*/
private function sendGiftsToRecipients($precomputedResults, $room_id,$user_id,$heart_id,$auction_id)
private function sendGiftsToRecipients($bag_data,$precomputedResults, $room_id,$user_id,$heart_id,$auction_id)
{
// 统计每个用户每个礼物的数量
$giftUserCounts = [];
@@ -837,28 +837,7 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model
if($userGift['count'] > 9){ //防止礼物超发礼物超10个则不发送
continue;
}
$giveGiftExt = [
'gift_id' => $userGift['gift_id'],
'count' => $userGift['count'],
'gift_price' => $userGift['gift_price'],
'all_gift_price' => $userGift['gift_price'] * $userGift['count'],
'is_draw_gift' => 1
];
if(!empty($auction_id)){ //竞拍
model('RoomAuction')->room_auction_join($auction_id,$user_id,$userGift['gift_id'],$userGift['count'],2,$giveGiftExt);
}else{
$res = model('Room')->room_gift(
$user_id,
$userGift['gift_user_id'],
$userGift['gift_id'],
$userGift['count'],
1,
$room_id,
0,
$heart_id,
$giveGiftExt
);
}
$res = model("api/SendGift")->single_send_gift_pan($user_id,$userGift['gift_user_id'],$userGift['gift_id'],$userGift['count'],1,$room_id,$bag_data['gift_bag_id'], $heart_id);
if (isset($res) && $res['code'] != 1) {
Log::record('发送礼物失败: ' . $res['msg'] . $userGift['gift_user_id'], "info");
return ['code' => 0, 'msg' => $res['msg'], 'data' => null];

View File

@@ -918,6 +918,248 @@ class SendGift extends Model
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);
//获取送礼用户信息
$FromUserInfo = model('User')->get_user_base_info($uid);
//送给一人礼物的总价格
$gift_price = $gift_info['gift_price'] * $num;
//送礼 开启事务
Db::startTrans();
$receive_gift_total = 0;//收礼人收到的礼物总值
$give_gift = 0;//送礼记录表ID雪花ID
$gift_box = [];//开出的盲盒
//收礼记录行为日志
$give_gift = $this -> change_user_give_gift_log($uid,$gid,$gift_price,$num,$to_uid,2,$type,$room_id);
if(!$give_gift){
Db::rollback();
return ['code' => 0, 'msg' => '送礼失败,请重试!', 'data' => null];
}
//计算收礼人得益 //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'=>$to_uid,'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];
}
}
}
}
}
//记录送礼利率和各方收益
//平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益
$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
$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');//魅力
//推送其他时刻需要的信息 其他放到异步回调里
//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)