From c4cfcb393fd2b4bf3e1140c6b6c83b1cb86083d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E9=92=8A?= Date: Sat, 25 Oct 2025 12:01:22 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B2=E7=9B=92=E8=BD=AC=E7=9B=98=E4=BC=98?= =?UTF-8?q?=E5=8C=96-=E8=B0=83=E8=AF=95-=E5=8A=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/BlindBoxTurntableGiftDrawWorld.php | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/application/api/model/BlindBoxTurntableGiftDrawWorld.php b/application/api/model/BlindBoxTurntableGiftDrawWorld.php index b572ae0..342f002 100644 --- a/application/api/model/BlindBoxTurntableGiftDrawWorld.php +++ b/application/api/model/BlindBoxTurntableGiftDrawWorld.php @@ -236,24 +236,24 @@ class BlindBoxTurntableGiftDrawWorld extends Model // 2. 获取可用礼物 $availableGifts = $this->getAvailableGifts($bag_data['id'], $totalDrawTimes); - if (empty($availableGifts)) { - $availableGifts = $this->resetPoolAndReload($bag_data['id']); //重置奖池并重新加载 - if (empty($availableGifts)) { - throw new \Exception('重置奖池后仍无可用礼物'); - } - $totalDrawTimes = 0;//总抽奖次数重置 - } +// if (empty($availableGifts)) { +// $availableGifts = $this->resetPoolAndReload($bag_data['id']); //重置奖池并重新加载 +// if (empty($availableGifts)) { +// throw new \Exception('重置奖池后仍无可用礼物'); +// } +// $totalDrawTimes = 0;//总抽奖次数重置 +// } // 在处理奖池重置逻辑之前添加检查 - if (!is_array($availableGifts)) { - throw new \Exception('可用礼物数据格式错误'); - } +// if (!is_array($availableGifts)) { +// throw new \Exception('可用礼物数据格式错误'); +// } // 3. 预加载礼物信息(减少后续查询) $giftInfoMap = $this->preloadGiftInfo($availableGifts); // 4. 处理奖池重置逻辑 - 优化版本 $needGiftNum = count($toarray) * $num; //总需要的礼物数 $remaining_available_gifts = []; - $remainingGiftCount = array_sum(array_column($availableGifts, 'remaining_number')); + $remainingGiftCount = array_sum(array_column($availableGifts, 'remaining_number')) ?? 0; if ($remainingGiftCount < $needGiftNum) { // 如果当前奖池礼物不足以满足需求 @@ -552,7 +552,7 @@ class BlindBoxTurntableGiftDrawWorld extends Model } // 3. 批量更新库存(按ID排序避免死锁) - $this->batchUpdateGiftInventory($availableGiftss); + $this->batchUpdateGiftInventory($availableGiftss,$bag_data['id']); // 4. 批量插入礼包发放记录 $this->batchInsertGiftBagReceiveLog($user_id, $boxTurntableLog, $bag_data, $room_id, $precomputedResults); @@ -585,7 +585,7 @@ class BlindBoxTurntableGiftDrawWorld extends Model /** * 批量更新礼物库存 */ - private function batchUpdateGiftInventory($precomputedResults) + private function batchUpdateGiftInventory($precomputedResults,$gift_bag_id) { // 按礼物ID分组统计需要减少的数量 $inventoryUpdates = []; @@ -620,6 +620,12 @@ class BlindBoxTurntableGiftDrawWorld extends Model throw new \Exception('更新礼物剩余数量失败'); } } + $total_remaining_number = db::name("vs_gift_bag_detail") + ->where(['gift_bag_id' => $gift_bag_id]) + ->sum('remaining_number'); + if($total_remaining_number <= 0){ + $this->reset_gift_pool($gift_bag_id); + } } /**