盲盒转盘优化-调试-加日志监控
This commit is contained in:
@@ -236,24 +236,24 @@ class BlindBoxTurntableGiftDrawWorld extends Model
|
|||||||
|
|
||||||
// 2. 获取可用礼物
|
// 2. 获取可用礼物
|
||||||
$availableGifts = $this->getAvailableGifts($bag_data['id'], $totalDrawTimes);
|
$availableGifts = $this->getAvailableGifts($bag_data['id'], $totalDrawTimes);
|
||||||
if (empty($availableGifts)) {
|
// if (empty($availableGifts)) {
|
||||||
$availableGifts = $this->resetPoolAndReload($bag_data['id']); //重置奖池并重新加载
|
// $availableGifts = $this->resetPoolAndReload($bag_data['id']); //重置奖池并重新加载
|
||||||
if (empty($availableGifts)) {
|
// if (empty($availableGifts)) {
|
||||||
throw new \Exception('重置奖池后仍无可用礼物');
|
// throw new \Exception('重置奖池后仍无可用礼物');
|
||||||
}
|
// }
|
||||||
$totalDrawTimes = 0;//总抽奖次数重置
|
// $totalDrawTimes = 0;//总抽奖次数重置
|
||||||
}
|
// }
|
||||||
// 在处理奖池重置逻辑之前添加检查
|
// 在处理奖池重置逻辑之前添加检查
|
||||||
if (!is_array($availableGifts)) {
|
// if (!is_array($availableGifts)) {
|
||||||
throw new \Exception('可用礼物数据格式错误');
|
// throw new \Exception('可用礼物数据格式错误');
|
||||||
}
|
// }
|
||||||
// 3. 预加载礼物信息(减少后续查询)
|
// 3. 预加载礼物信息(减少后续查询)
|
||||||
$giftInfoMap = $this->preloadGiftInfo($availableGifts);
|
$giftInfoMap = $this->preloadGiftInfo($availableGifts);
|
||||||
|
|
||||||
// 4. 处理奖池重置逻辑 - 优化版本
|
// 4. 处理奖池重置逻辑 - 优化版本
|
||||||
$needGiftNum = count($toarray) * $num; //总需要的礼物数
|
$needGiftNum = count($toarray) * $num; //总需要的礼物数
|
||||||
$remaining_available_gifts = [];
|
$remaining_available_gifts = [];
|
||||||
$remainingGiftCount = array_sum(array_column($availableGifts, 'remaining_number'));
|
$remainingGiftCount = array_sum(array_column($availableGifts, 'remaining_number')) ?? 0;
|
||||||
|
|
||||||
if ($remainingGiftCount < $needGiftNum) {
|
if ($remainingGiftCount < $needGiftNum) {
|
||||||
// 如果当前奖池礼物不足以满足需求
|
// 如果当前奖池礼物不足以满足需求
|
||||||
@@ -552,7 +552,7 @@ class BlindBoxTurntableGiftDrawWorld extends Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 3. 批量更新库存(按ID排序避免死锁)
|
// 3. 批量更新库存(按ID排序避免死锁)
|
||||||
$this->batchUpdateGiftInventory($availableGiftss);
|
$this->batchUpdateGiftInventory($availableGiftss,$bag_data['id']);
|
||||||
|
|
||||||
// 4. 批量插入礼包发放记录
|
// 4. 批量插入礼包发放记录
|
||||||
$this->batchInsertGiftBagReceiveLog($user_id, $boxTurntableLog, $bag_data, $room_id, $precomputedResults);
|
$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分组统计需要减少的数量
|
// 按礼物ID分组统计需要减少的数量
|
||||||
$inventoryUpdates = [];
|
$inventoryUpdates = [];
|
||||||
@@ -620,6 +620,12 @@ class BlindBoxTurntableGiftDrawWorld extends Model
|
|||||||
throw new \Exception('更新礼物剩余数量失败');
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user