userId; // 获取当前用户的物品变更临时数据 $userItemsTemp = Cache::get($tempKey, []); // 构建物品变更数据 $itemData = [ 'item_id' => $event->itemId, 'instance_id' => $event->instanceId, 'old_quantity' => $event->oldQuantity, 'new_quantity' => $event->newQuantity, 'change_amount' => $event->changeAmount, 'user_item_id' => $event->userItemId, 'old_frozen_status' => $event->oldFrozenStatus, 'new_frozen_status' => $event->newFrozenStatus, 'updated_at' => time(), ]; // 使用用户物品记录ID作为键,避免同一物品的不同堆叠相互覆盖 // 这样可以正确处理拆堆等场景下的多个物品堆状态同步 $userItemsTemp[$event->userItemId] = $itemData; // 将更新后的数据存回临时存储 Cache::put($tempKey, $userItemsTemp, self::TEMP_TTL); Log::info('物品变更数据已临时存储', [ 'user_id' => $event->userId, 'item_id' => $event->itemId, 'change_amount' => $event->changeAmount, ]); } catch (\Exception $e) { Log::error('物品变更数据临时存储失败', [ 'error' => $e->getMessage(), 'user_id' => $event->userId, 'item_id' => $event->itemId, ]); } } /** * 获取用户的物品变更临时数据 * * @param int $userId 用户ID * @return ItemChangeTempDto[] 用户的物品变更数据 */ public static function getUserItemChanges(int $userId): array { $tempKey = self::TEMP_KEY_PREFIX . $userId; $rawData = Cache::get($tempKey, []); $result = []; foreach ($rawData as $userItemId => $itemData) { $result[] = ItemChangeTempDto::fromArray($itemData); } return $result; } /** * 获取用户特定物品的变更临时数据(通过物品ID) * * @param int $userId 用户ID * @param int $itemId 物品ID * @return ItemChangeTempDto[] 该物品的所有变更数据 */ public static function getUserItemChange(int $userId, int $itemId): array { $userItemChanges = self::getUserItemChanges($userId); $result = []; foreach ($userItemChanges as $itemChange) { if ($itemChange->itemId === $itemId) { $result[] = $itemChange; } } return $result; } /** * 获取用户特定用户物品记录的变更临时数据(通过用户物品记录ID) * * @param int $userId 用户ID * @param int $userItemId 用户物品记录ID * @return ItemChangeTempDto|null 物品变更数据,不存在时返回null */ public static function getUserItemChangeByUserItemId(int $userId, int $userItemId): ?ItemChangeTempDto { $tempKey = self::TEMP_KEY_PREFIX . $userId; $rawData = Cache::get($tempKey, []); if (!isset($rawData[$userItemId])) { return null; } return ItemChangeTempDto::fromArray($rawData[$userItemId]); } /** * 清除用户的物品变更临时数据 * * @param int $userId 用户ID * @return void */ public static function clearUserItemChanges(int $userId): void { $tempKey = self::TEMP_KEY_PREFIX . $userId; Cache::put($tempKey, [], 0); } }