diff --git a/backend/app/services/async_transcription_service.py b/backend/app/services/async_transcription_service.py index 4d34a73..d03101e 100644 --- a/backend/app/services/async_transcription_service.py +++ b/backend/app/services/async_transcription_service.py @@ -340,7 +340,8 @@ class AsyncTranscriptionService: error_message = task_data.get('error_message') or None updated_at = task_data.get('updated_at') or updated_at else: - cached_status = self.redis_client.hgetall(status_cache_key) + cached_status_raw = self.redis_client.hgetall(status_cache_key) + cached_status = self._normalize_redis_mapping(cached_status_raw) if cached_status_raw else {} if cached_status and cached_status.get('status') in {'pending', 'processing'}: current_status = cached_status.get('status', 'pending') progress = int(cached_status.get('progress') or 0) @@ -433,10 +434,17 @@ class AsyncTranscriptionService: task_data = self._normalize_redis_mapping(task_data_raw) if task_data.get('paraformer_task_id'): return task_data + if str(task_data.get('status') or '').lower() in {'pending', 'processing', 'completed', 'failed'}: + return task_data # 如果Redis没有,从数据库回源 task_data_from_db = self._get_task_from_db(business_task_id) - if not task_data_from_db or not task_data_from_db.get('paraformer_task_id'): + if not task_data_from_db: + raise Exception("Task not found in DB") + if ( + not task_data_from_db.get('paraformer_task_id') + and str(task_data_from_db.get('status') or '').lower() not in {'pending', 'processing', 'completed', 'failed'} + ): raise Exception("Task not found in DB or paraformer_task_id is missing") # 将从DB获取的数据缓存回Redis