From 7a703e3cfd631eb82f7fd494504ad1ac0945ddad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E9=92=8A?= Date: Thu, 16 Oct 2025 22:18:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E9=9C=80=E6=B1=82-=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E9=9C=80=E6=B1=82-=E7=9B=B2=E7=9B=92=E8=BD=AC=E7=9B=98?= =?UTF-8?q?=E8=B0=83=E9=80=9A=E7=9B=98-=E5=B7=A1=E4=B9=90=E4=BC=9A-?= =?UTF-8?q?=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/BlindBoxTurntableGiftDrawWorld.php | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/application/api/model/BlindBoxTurntableGiftDrawWorld.php b/application/api/model/BlindBoxTurntableGiftDrawWorld.php index d23c6af..87c42c2 100644 --- a/application/api/model/BlindBoxTurntableGiftDrawWorld.php +++ b/application/api/model/BlindBoxTurntableGiftDrawWorld.php @@ -37,9 +37,9 @@ class BlindBoxTurntableGiftDrawWorld extends Model public function draw_gift($gift_bag_id, $user_id, $gift_user_ids, $num = 1, $room_id = 0, $heart_id = 0,$auction_id = 0) { // 最大重试次数 -// $maxRetries = 3; -// for ($attempt = 0; $attempt < $maxRetries; $attempt++) { -// try { + $maxRetries = 3; + for ($attempt = 0; $attempt < $maxRetries; $attempt++) { + try { // 1. 验证参数并提前处理错误 $validationResult = $this->validateDrawParameters($gift_bag_id, $user_id, $gift_user_ids); if ($validationResult !== true) { @@ -107,29 +107,29 @@ class BlindBoxTurntableGiftDrawWorld extends Model // 6. 构建并返回结果 return $this->buildDrawResult($boxTurntableLog, $giftCounts); -// } catch (\Exception $e) { -// $key = 'blind_box_draw_errors_' . date('Y-m-d-H-i-s'); -// $errorData = [ -// 'gift_bag_id' => $gift_bag_id, -// 'user_id' => $user_id, -// 'gift_user_ids' => $gift_user_ids, -// 'num' => $num, -// 'room_id' => $room_id, -// 'heart_id' => $heart_id, -// 'auction_id' => $auction_id, -// ]; -// if ($this->redis) { -// $this->redis->setex($key, 86400 * 7, $e->getMessage() . ' ' . json_encode($errorData)); -// } -// // 如果是死锁且还有重试机会 -// if (strpos($e->getMessage(), 'Deadlock') !== false && $attempt < $maxRetries - 1) { -// // 随机延迟后重试 -// usleep(rand(50000, 200000)); // 50-200ms -// continue; -// } -// return ['code' => 0, 'msg' => "网络加载失败,请重试!", 'data' => null]; -// } -// } + } catch (\Exception $e) { + $key = 'blind_box_draw_errors_' . date('Y-m-d-H-i-s'); + $errorData = [ + 'gift_bag_id' => $gift_bag_id, + 'user_id' => $user_id, + 'gift_user_ids' => $gift_user_ids, + 'num' => $num, + 'room_id' => $room_id, + 'heart_id' => $heart_id, + 'auction_id' => $auction_id, + ]; + if ($this->redis) { + $this->redis->setex($key, 86400 * 7, $e->getMessage() . ' ' . json_encode($errorData)); + } + // 如果是死锁且还有重试机会 + if (strpos($e->getMessage(), 'Deadlock') !== false && $attempt < $maxRetries - 1) { + // 随机延迟后重试 + usleep(rand(50000, 200000)); // 50-200ms + continue; + } + return ['code' => 0, 'msg' => "网络加载失败,请重试!", 'data' => null]; + } + } } /** * 验证抽奖参数 @@ -495,9 +495,9 @@ class BlindBoxTurntableGiftDrawWorld extends Model $bagGiftPrice = $bag_data['gift_price'] * $num * $gift_user_num; // 增加重试机制 -// $maxRetries = 3; -// for ($retry = 0; $retry < $maxRetries; $retry++) { -// try { + $maxRetries = 3; + for ($retry = 0; $retry < $maxRetries; $retry++) { + try { db::startTrans(); // 按照固定顺序处理事务步骤 // 1. 扣除用户金币(优先处理) @@ -542,17 +542,17 @@ class BlindBoxTurntableGiftDrawWorld extends Model 'gift_counts' => $giftCounts ] ]; -// } catch (\Exception $e) { -// db::rollback(); -// // 检查是否是死锁错误 -// if (strpos($e->getMessage(), 'Deadlock') !== false && $retry < $maxRetries - 1) { -// // 等待随机时间后重试 -// usleep(rand(10000, 100000)); // 10-100ms -// continue; -// } -// return ['code' => 0, 'msg' => $e->getMessage(), 'data' => null]; -// } -// } + } catch (\Exception $e) { + db::rollback(); + // 检查是否是死锁错误 + if (strpos($e->getMessage(), 'Deadlock') !== false && $retry < $maxRetries - 1) { + // 等待随机时间后重试 + usleep(rand(10000, 100000)); // 10-100ms + continue; + } + return ['code' => 0, 'msg' => $e->getMessage(), 'data' => null]; + } + } return ['code' => 0, 'msg' => '操作超时,请重试', 'data' => null]; }