Explorar o código

v0.0.4-修复整体大纲sse推送中的异常状态
- "status": "completed",避免前端异常错判任务完成标志

WangXuMing hai 2 meses
pai
achega
25c9c8ed3e

+ 1 - 1
core/construction_review/component/reviewers/outline_reviewer.py

@@ -224,7 +224,7 @@ class OutlineReviewer:
                     callback_task_id=state["callback_task_id"],
                     stage_name=f"{stage_name} - 阶段1:整体大纲审查",
                     current=None,  # 明确不更新current,保持主流程进度
-                    status="completed",
+                    status="processing",
                     message=message,
                     issues=filtered_issues,
                     event_type="processing"  # 使用专门的事件类型

+ 1 - 1
core/construction_review/component/reviewers/prep_basis_reviewer.py

@@ -611,7 +611,7 @@ class BasisReviewService:
                     callback_task_id=callback_task_id,
                     stage_name="编制依据审查",
                     current=15,
-                    status="completed",
+                    status="processing",
                     message=f"编制依据审查完成,共{total_items}项,其中{standard_items}项为标准,耗时{elapsed_time:.2f}秒",
                     overall_task_status="processing",
                     event_type="processing"

+ 7 - 25
views/construction_review/launch_review.py

@@ -433,34 +433,16 @@ async def launch_review_sse(request_data: LaunchReviewRequest):
             yield format_sse_event("error", error_data)
 
         finally:
-            # 延迟清理,给后台任务时间完成最后的回调
+            # 清理回调连接(确保资源被正确释放)
             try:
-                # 等待可能的最后回调(3秒)
-                import asyncio
-                await asyncio.sleep(3)
+                sse_callback_manager.unregister_callback(callback_task_id)
+            except Exception as cleanup_error:
+                logger.warning(f"清理回调连接时出错: {callback_task_id}, 错误: {str(cleanup_error)}")
 
-                # 检查任务状态后再决定是否清理
-                # 使用文件顶部已导入的 progress_manager 实例
-                try:
-                    task_progress = await progress_manager.get_progress(callback_task_id)
-
-                    # 如果任务状态不存在,说明任务已完成且状态已被清理
-                    if task_progress is None:
-                        logger.info(f"任务已完成且状态已清理,清理SSE回调: {callback_task_id}")
-                        sse_callback_manager.unregister_callback(callback_task_id)
-                    elif task_progress.get("overall_task_status") in ["completed", "failed"]:
-                        # 任务明确标记为完成或失败
-                        logger.info(f"任务已完成,清理SSE回调: {callback_task_id}")
-                        sse_callback_manager.unregister_callback(callback_task_id)
-                    else:
-                        # 任务仍在进行中
-                        logger.warning(f"任务可能仍在进行中,保留SSE连接: {callback_task_id}")
-                except Exception as status_check_error:
-                    logger.warning(f"检查任务状态失败,强制清理: {callback_task_id}, 错误: {str(status_check_error)}")
-                    # 如果无法检查状态,还是进行清理以避免资源泄露
-                    sse_callback_manager.unregister_callback(callback_task_id)
+            try:
+                await unified_sse_manager.close_connection(callback_task_id)
             except Exception as cleanup_error:
-                logger.warning(f"延迟清理SSE连接时出错: {callback_task_id}, 错误: {str(cleanup_error)}")
+                logger.warning(f"断开SSE连接时出错: {callback_task_id}, 错误: {str(cleanup_error)}")
 
             logger.debug(f"启动审查SSE流已结束: {callback_task_id}")