From 47457337daa23106a994be970294c635ae0c2dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E9=92=8A?= Date: Fri, 26 Sep 2025 03:17:47 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=81=E7=9B=B2=E7=9B=92=E8=BD=AC=E7=9B=98?= =?UTF-8?q?=20=E6=8A=A5=E9=94=99=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/model/BlindBoxTurntableGiftDraw.php | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/application/api/model/BlindBoxTurntableGiftDraw.php b/application/api/model/BlindBoxTurntableGiftDraw.php index e1a4733..9a2bd60 100644 --- a/application/api/model/BlindBoxTurntableGiftDraw.php +++ b/application/api/model/BlindBoxTurntableGiftDraw.php @@ -47,7 +47,16 @@ class BlindBoxTurntableGiftDraw extends Model $availableGiftss = $precomputeResult['data']['availableGifts']; $currentXlhPeriodsNum = $precomputeResult['data']['current_xlh_periods_num']; $xlhIsPiaoPing = $precomputeResult['data']['xlh_is_piao_ping']; + if(count($precomputedResults) != count(explode(',', $gift_user_ids)) * $num){ + Log::record('抽奖结果数量与预期数量不一致,请重试! ('.count($precomputedResults).'): ' . $room_id."【数据】".var_export($precomputedResults, true),"infos-mhzp"); + return ['code' => 0, 'msg' => '抽奖结果数量与预期数量不一致,请重试!', 'data' => null]; + } + //兼容送礼判断,主持人比例设置为100% 送礼方法里报错,快速解决,把送礼方法前置,送完礼再处理盲盒转盘记录 + $result = $this->sendGiftsToRecipients($precomputedResults, $room_id,$user_id); + if ($result['code'] !== 1) { + return $result; + } // 4. 执行抽奖事务(核心操作) $transactionResult = $this->executeDrawTransaction( $bag_data, @@ -285,13 +294,10 @@ class BlindBoxTurntableGiftDraw extends Model unset($remaining_available_gifts[$key]); } $numm = $num; -// echo "好好玩"; }else{ $numm = $num+$remaining_num; } -// echo $numm."---"; for ($i = 0; $i < $numm; $i++) { -// echo "好好呀"; // 使用Alias Method选择礼物(O(1)复杂度) $selectedGift = $this->selectGiftWithAliasMethod($aliasTable); if (!$selectedGift) { @@ -591,8 +597,8 @@ class BlindBoxTurntableGiftDraw extends Model // 1. 批量插入盲盒转盘结果记录 $this->batchInsertBlindBoxResults($precomputedResults, $boxTurntableLog, $room_id); - // 2. 发送礼物给接收者 - $this->sendGiftsToRecipients($precomputedResults, $boxTurntableLog, $room_id,$user_id); + // 2. 发送礼物给接收者 (已前置) +// $this->sendGiftsToRecipients($precomputedResults, $room_id,$user_id); // 3. 处理巡乐会相关操作 if (!empty($xlh_ext) && $xlh_ext['inlet_bag_id'] == $precomputedResults[0]['gift_bag_detail']['gift_bag_id']) { @@ -643,7 +649,7 @@ class BlindBoxTurntableGiftDraw extends Model /** * 发送礼物给接收者 */ - private function sendGiftsToRecipients($precomputedResults, $boxTurntableLog, $room_id,$user_id) + private function sendGiftsToRecipients($precomputedResults, $room_id,$user_id) { // 统计每个用户每个礼物的数量 $giftUserCounts = []; @@ -662,6 +668,9 @@ class BlindBoxTurntableGiftDraw extends Model // 批量发送礼物 foreach ($giftUserCounts as $userGift) { + if($userGift['count'] > 9){ //防止礼物超发,礼物超10个则不发送 + continue; + } $giveGiftExt = [ 'gift_id' => $userGift['gift_id'], 'count' => $userGift['count'], @@ -1299,7 +1308,10 @@ class BlindBoxTurntableGiftDraw extends Model // 7. 批量处理结果记录 try { db::startTrans(); - + if(count($drawn_gifts) > $num){ + Log::record('巡乐会抽奖失败-数量超限: ' . count($drawn_gifts),"infos"); + return ['code' => 0, 'msg' => "抽奖中,请稍等...", 'data' => null]; + } // 批量插入礼包发放记录 $gift_records = []; $periods = $room_pan_data[0]['periods'] ?? 0;