From e2aea224c96ce68102e6b970c83e7310c66c8c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E9=92=8A?= Date: Wed, 29 Oct 2025 15:11:50 +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-=E9=87=8D=E6=9E=84-=E4=BF=AE=E6=94=B9=E8=B0=83?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/adminapi/controller/BlindBox.php | 27 +++++++++++-------- .../BlindBoxTurntableGiftDrawWorldNew.php | 26 +++++------------- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/application/adminapi/controller/BlindBox.php b/application/adminapi/controller/BlindBox.php index 96a121c..fb3aa9c 100644 --- a/application/adminapi/controller/BlindBox.php +++ b/application/adminapi/controller/BlindBox.php @@ -62,17 +62,14 @@ class BlindBox extends adminApi $lists[$key]['gift_id'] = $value['foreign_id']; $lists[$key]['gift_name'] = $value['name']; $gift_data = db::name('vs_gift')->where(['gid'=>$value['foreign_id']])->find(); - if(empty($gift_data)){ - continue; - } - $lists[$key]['base_image'] = $gift_data['base_image']; - $lists[$key]['gift_price'] = $gift_data['gift_price']; - $lists[$key]['quantity'] = $value['quantity']; - $lists[$key]['remaining_number'] = $value['remaining_number']; - $lists[$key]['is_public_screen'] = $gift_data['is_public_screen']; - $lists[$key]['is_public_server'] = $gift_data['is_public_server']; - $lists[$key]['is_world_show'] = $value['is_world_show']; - $lists[$key]['weight'] = $value['weight']; + $lists[$key]['base_image'] = $gift_data['base_image'] ?? ""; + $lists[$key]['gift_price'] = $gift_data['gift_price'] ?? 0; + $lists[$key]['quantity'] = $value['quantity'] ?? 0; + $lists[$key]['remaining_number'] = $value['remaining_number'] ?? 0; + $lists[$key]['is_public_screen'] = $gift_data['is_public_screen'] ?? 0; + $lists[$key]['is_public_server'] = $gift_data['is_public_server'] ?? 0; + $lists[$key]['is_world_show'] = $value['is_world_show'] ?? 0; + $lists[$key]['weight'] = $value['weight'] ?? 0; $lists[$key]['createtime'] = date('Y-m-d H:i:s', $value['createtime']); } @@ -354,6 +351,14 @@ class BlindBox extends adminApi foreach ($gift_bag_detail as $k=>$v){ $bag_data = db::name($this->table)->where(['id'=>$v['id']])->update(['remaining_number'=>$v['quantity']]); } + // 清除缓存 + Cache::rm("pan_gift_bag".$gift_bag_id); + Cache::rm("pan_gift_bag_detail".$gift_bag_id); + Cache::rm("pan_total_quantity".$gift_bag_id); + Cache::rm("pan_total_remaining".$gift_bag_id); + Cache::rm("pan_total_draw".$gift_bag_id); + Cache::rm("pan_gift_info_map".$gift_bag_id); + return V(1,"成功"); } diff --git a/application/api/model/BlindBoxTurntableGiftDrawWorldNew.php b/application/api/model/BlindBoxTurntableGiftDrawWorldNew.php index 3b5e2c6..6ea911e 100644 --- a/application/api/model/BlindBoxTurntableGiftDrawWorldNew.php +++ b/application/api/model/BlindBoxTurntableGiftDrawWorldNew.php @@ -25,7 +25,7 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model $this->redis->connect(config('redis.host'), config('redis.port')); // 根据实际配置调整主机和端口 // 选择数据库1 $this->redis->select(1); - $this->cache_time = 60 *24; + $this->cache_time = 60*60; //缓存一小时 } catch (\Exception $e) { Log::record('Redis连接失败: ' . $e->getMessage(), 'error'); $this->redis = null; @@ -336,7 +336,7 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model Cache::set($cacheKey, $pan_gift_bag_detail, $this->cache_time); Cache::set("pan_total_quantity".$gift_bag_id, $total_quantity, $this->cache_time); Cache::set("pan_total_remaining".$gift_bag_id, $total_remaining, $this->cache_time); - Cache::set("pan_total_draw_times".$gift_bag_id, $total_draw_times, $this->cache_time); + Cache::set("pan_total_draw".$gift_bag_id, $total_draw_times, $this->cache_time); } return $pan_gift_bag_detail; } @@ -708,30 +708,18 @@ class BlindBoxTurntableGiftDrawWorldNew extends Model // 批量更新 foreach ($inventoryUpdates as $giftId => $count) { - $giftBagDetail = Db::name("vs_gift_bag_detail") - ->where('id', $giftId) - ->find(); $giftBagDetailCached = $this->getCachedGiftBagDetailItem($gift_bag_id, $giftId); - if (!$giftBagDetail) { - throw new \Exception("礼物详情不存在,ID: " . $giftId); - } - $upRemainingNumber = $giftBagDetail['remaining_number'] - $count; - if($upRemainingNumber!=$giftBagDetailCached['remaining_number']){ - $this->redis->setex( 'blind_box_draw_errors_' . date('Y-m-d-H-i-s'), 86400 * 7, "有并发:礼物数量不一致,礼物ID: " . $giftId . '数据库数量: '.$upRemainingNumber. '缓存数量: '.$giftBagDetailCached['remaining_number']. ' ' .json_encode($giftBagDetail) . ' ' .json_encode($giftBagDetailCached)); + if(empty($giftBagDetailCached)){ + $giftBagDetail = db::name("vs_gift_bag_detail")->where('id',$giftId)->find(); + $upRemainingNumber = $giftBagDetail['remaining_number'] - $count; + }else{ $upRemainingNumber = $giftBagDetailCached['remaining_number']; } - // 检查库存是否足够 - if ($upRemainingNumber < 0) { - throw new \Exception("礼物库存不足,ID: " . $giftId); - } - if($upRemainingNumber = $giftBagDetail['remaining_number']){ - return; - } $ret = db::name("vs_gift_bag_detail")->where('id',$giftId)->update([ 'remaining_number' => $upRemainingNumber ]); if (!$ret) { - throw new \Exception('更新礼物剩余数量失败'); + throw new \Exception('更新礼物剩余数量失败 ID: ' . $giftId); } } }