From 7cf865a39ff3eef0ceeb1c1c923a716030c824cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E9=92=8A?= Date: Sat, 27 Sep 2025 11:11:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E8=B6=85=E5=87=BA=E5=8F=91?= =?UTF-8?q?=E6=94=BE=E7=A4=BC=E7=89=A9=E9=97=AE=E9=A2=98-=E5=B7=A1?= =?UTF-8?q?=E4=B9=90=E4=BC=9A-=E6=97=A5=E5=BF=97=E5=8A=A0=E7=BC=93?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/model/BlindBoxTurntableGiftDraw.php | 56 +++++++++++++------ 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/application/api/model/BlindBoxTurntableGiftDraw.php b/application/api/model/BlindBoxTurntableGiftDraw.php index 362c000..b2a6517 100644 --- a/application/api/model/BlindBoxTurntableGiftDraw.php +++ b/application/api/model/BlindBoxTurntableGiftDraw.php @@ -7,7 +7,8 @@ use think\Log; use think\Model; use think\Db; use think\Session; -use think\cache\driver\Redis; +//use think\cache\driver\Redis; +use Redis; /* * 盲盒转盘优化后方法 @@ -20,7 +21,16 @@ class BlindBoxTurntableGiftDraw extends Model public function __construct() { parent::__construct(); - $this->redis = new Redis(['database' => 1]); + try { + $this->redis = new Redis(); + // 连接到Redis服务器 + $this->redis->connect(config('redis.host'), config('redis.port')); // 根据实际配置调整主机和端口 + // 选择数据库1 + $this->redis->select(1); + } catch (\Exception $e) { + Log::record('Redis连接失败: ' . $e->getMessage(), 'error'); + $this->redis = null; + } } /** @@ -60,7 +70,6 @@ class BlindBoxTurntableGiftDraw extends Model $expectedCount = count(explode(',', $gift_user_ids)) * $num; if(count($precomputedResults) != $expectedCount){ - Log::record('抽奖结果数量与预期数量不一致,请重试!预期: '.$expectedCount.', 实际: '.count($precomputedResults).': ' . $room_id."【数据】".var_export($precomputedResults, true),"infos-mhzp"); // 记录错误到Redis $this->recordDrawErrorToRedis($expectedCount, count($precomputedResults), $room_id, $user_id, $gift_bag_id, $num, $gift_user_ids, $precomputedResults); return ['code' => 0, 'msg' => '抽奖结果数量与预期数量不一致,请重试! ', 'data' => null]; @@ -1566,21 +1575,32 @@ class BlindBoxTurntableGiftDraw extends Model */ private function recordDrawErrorToRedis($expectedCount, $actualCount, $room_id, $user_id, $gift_bag_id, $num, $gift_user_ids, $precomputedResults) { - $errorData = [ - 'timestamp' => time(), - 'expected_count' => $expectedCount, - 'actual_count' => $actualCount, - 'room_id' => $room_id, - 'user_id' => $user_id, - 'gift_bag_id' => $gift_bag_id, - 'num' => $num, - 'gift_user_ids' => $gift_user_ids, - 'precomputed_results_count' => count($precomputedResults), - 'precomputed_results' => $precomputedResults, - 'error_type' => 'draw_count_mismatch' - ]; + // 检查Redis连接是否可用 + if (!$this->redis) { + Log::record('Redis连接不可用,无法记录错误日志', 'error'); + return; + } - // 将错误信息推送到Redis列表中 - $this->redis->set('blind_box_draw_errors', json_encode($errorData),86400 * 7); + try { + $errorData = [ + 'timestamp' => time(), + 'expected_count' => $expectedCount, + 'actual_count' => $actualCount, + 'room_id' => $room_id, + 'user_id' => $user_id, + 'gift_bag_id' => $gift_bag_id, + 'num' => $num, + 'gift_user_ids' => $gift_user_ids, + 'precomputed_results_count' => count($precomputedResults), + 'precomputed_results' => $precomputedResults, + 'error_type' => 'draw_count_mismatch' + ]; + + // 使用正确的Redis方法存储数据 + $key = 'blind_box_draw_errors_' . date('Y-m-d-H-i-s'); + $this->redis->setex($key, 86400 * 7, json_encode($errorData)); + } catch (\Exception $e) { + Log::record('Redis操作失败: ' . $e->getMessage(), 'error'); + } } }