diff --git a/application/api/model/BlindBoxTurntableGiftDrawWorldNew.php b/application/api/model/BlindBoxTurntableGiftDrawWorldNew.php index 3fc572e8..00ea8921 100644 --- a/application/api/model/BlindBoxTurntableGiftDrawWorldNew.php +++ b/application/api/model/BlindBoxTurntableGiftDrawWorldNew.php @@ -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]; diff --git a/application/api/model/SendGift.php b/application/api/model/SendGift.php index 8cbdaa73..97d47b0c 100644 --- a/application/api/model/SendGift.php +++ b/application/api/model/SendGift.php @@ -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)