userId; // 获取当前用户的任务变更临时数据 $userTasksTemp = Cache::get($tempKey, []); // 构建任务变更数据 $taskData = [ 'task_id' => $event->taskId, 'task_name' => $event->taskName, 'change_type' => 'completed', 'status' => 'completed', 'completed_at' => $event->completedAt ? $event->completedAt->timestamp : time(), 'updated_at' => time(), ]; // 使用任务ID作为键,避免同一任务的多次变更相互覆盖 $userTasksTemp[$event->taskId] = $taskData; // 将更新后的数据存回临时存储 Cache::put($tempKey, $userTasksTemp, self::TEMP_TTL); Log::info('任务完成数据已临时存储', [ 'user_id' => $event->userId, 'task_id' => $event->taskId, 'task_name' => $event->taskName, ]); } catch (\Exception $e) { Log::error('任务完成数据临时存储失败', [ 'error' => $e->getMessage(), 'user_id' => $event->userId, 'task_id' => $event->taskId, ]); } } /** * 处理任务奖励领取事件 * * 将任务奖励领取数据临时存储,按用户ID进行存储 * * @param TaskRewardClaimedEvent $event 任务奖励领取事件 * @return void */ public static function handleTaskRewardClaimed(TaskRewardClaimedEvent $event): void { try { // 构建临时数据键,按用户ID进行存储 $tempKey = self::TEMP_KEY_PREFIX . $event->userId; // 获取当前用户的任务变更临时数据 $userTasksTemp = Cache::get($tempKey, []); // 构建任务变更数据 $taskData = [ 'task_id' => $event->taskId, 'task_name' => $event->taskName, 'change_type' => 'reward_claimed', 'status' => 'rewarded', 'rewards' => $event->rewards, 'rewarded_at' => $event->claimedAt ? $event->claimedAt->timestamp : time(), 'updated_at' => time(), ]; // 使用任务ID作为键,避免同一任务的多次变更相互覆盖 $userTasksTemp[$event->taskId] = $taskData; // 将更新后的数据存回临时存储 Cache::put($tempKey, $userTasksTemp, self::TEMP_TTL); Log::info('任务奖励领取数据已临时存储', [ 'user_id' => $event->userId, 'task_id' => $event->taskId, 'task_name' => $event->taskName, 'rewards_count' => count($event->rewards), ]); } catch (\Exception $e) { Log::error('任务奖励领取数据临时存储失败', [ 'error' => $e->getMessage(), 'user_id' => $event->userId, 'task_id' => $event->taskId, ]); } } /** * 处理任务进度更新 * * 将任务进度更新数据临时存储,按用户ID进行存储 * * @param int $userId 用户ID * @param int $taskId 任务ID * @param string $taskName 任务名称 * @param int $progress 进度百分比 * @param array $progressDetails 进度详情 * @return void */ public static function handleTaskProgressUpdated(int $userId, int $taskId, string $taskName, int $progress, array $progressDetails = []): void { try { // 构建临时数据键,按用户ID进行存储 $tempKey = self::TEMP_KEY_PREFIX . $userId; // 获取当前用户的任务变更临时数据 $userTasksTemp = Cache::get($tempKey, []); // 构建任务变更数据 $taskData = [ 'task_id' => $taskId, 'task_name' => $taskName, 'change_type' => 'progress_updated', 'status' => 'in_progress', 'progress' => $progress, 'progress_details' => $progressDetails, 'updated_at' => time(), ]; // 使用任务ID作为键,避免同一任务的多次变更相互覆盖 $userTasksTemp[$taskId] = $taskData; // 将更新后的数据存回临时存储 Cache::put($tempKey, $userTasksTemp, self::TEMP_TTL); Log::info('任务进度更新数据已临时存储', [ 'user_id' => $userId, 'task_id' => $taskId, 'task_name' => $taskName, 'progress' => $progress, ]); } catch (\Exception $e) { Log::error('任务进度更新数据临时存储失败', [ 'error' => $e->getMessage(), 'user_id' => $userId, 'task_id' => $taskId, ]); } } /** * 获取用户的任务变更临时数据 * * @param int $userId 用户ID * @return TaskChangeTempDto[] 用户的任务变更数据 */ public static function getUserTaskChanges(int $userId): array { $tempKey = self::TEMP_KEY_PREFIX . $userId; $rawData = Cache::get($tempKey, []); $result = []; foreach ($rawData as $taskId => $taskData) { $result[] = TaskChangeTempDto::fromArray($taskData); } return $result; } /** * 获取用户指定任务的变更临时数据 * * @param int $userId 用户ID * @param int $taskId 任务ID * @return TaskChangeTempDto|null 任务变更数据 */ public static function getUserTaskChange(int $userId, int $taskId): ?TaskChangeTempDto { $tempKey = self::TEMP_KEY_PREFIX . $userId; $rawData = Cache::get($tempKey, []); if (isset($rawData[$taskId])) { return TaskChangeTempDto::fromArray($rawData[$taskId]); } return null; } /** * 清理用户的任务变更临时数据 * * @param int $userId 用户ID * @return void */ public static function clearUserTaskChanges(int $userId): void { $tempKey = self::TEMP_KEY_PREFIX . $userId; \Illuminate\Support\Facades\Cache::forget($tempKey); Log::info('已清理用户任务变更临时数据', ['user_id' => $userId]); } /** * 清理用户指定任务的变更临时数据 * * @param int $userId 用户ID * @param int $taskId 任务ID * @return void */ public static function clearUserTaskChange(int $userId, int $taskId): void { $tempKey = self::TEMP_KEY_PREFIX . $userId; $rawData = Cache::get($tempKey, []); if (isset($rawData[$taskId])) { unset($rawData[$taskId]); Cache::put($tempKey, $rawData, self::TEMP_TTL); Log::info('已清理用户指定任务变更临时数据', [ 'user_id' => $userId, 'task_id' => $taskId ]); } } }