review_results.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. """
  2. 审查结果获取接口Mock实现
  3. 模拟风险统计、总结报告和问题条文返回
  4. """
  5. import random
  6. import os
  7. import json
  8. from datetime import datetime
  9. from fastapi import APIRouter, HTTPException, Query
  10. from pydantic import BaseModel
  11. from typing import Optional, Dict, Any
  12. from .schemas.error_schemas import ReviewResultsErrors
  13. from foundation.observability.cachefiles import cache, CacheBaseDir
  14. # 导入文件上传模块的存储
  15. try:
  16. from .file_upload import uploaded_files
  17. except ImportError:
  18. from views.construction_review.file_upload import uploaded_files
  19. class ReviewResultsRequest(BaseModel):
  20. id: str = None
  21. user: str = None
  22. type: str = None # "summary" 或 "issues"
  23. class ReviewResultsResponse(BaseModel):
  24. code: int
  25. data: Dict[str, Any]
  26. review_results_router = APIRouter(prefix="/sgsc", tags=["前端接口"])
  27. @review_results_router.get("/review_results", response_model=ReviewResultsResponse)
  28. async def review_results(
  29. callback_task_id: str = Query(..., description="回调任务ID"),
  30. user: str = Query(..., description="用户ID")
  31. ):
  32. """
  33. 获取审查结果接口 - 从temp目录读取保存的结果文件
  34. """
  35. try:
  36. # 验证参数
  37. if not callback_task_id:
  38. raise HTTPException(status_code=400, detail="缺少callback_task_id参数")
  39. if not user:
  40. raise HTTPException(status_code=400, detail="缺少user参数")
  41. # 验证用户标识(应该是指定用户如user-001)
  42. valid_users = {"user-001", "user-002", "user-003"} # 可以配置化
  43. if user not in valid_users:
  44. raise HTTPException(status_code=403, detail="无效的用户ID")
  45. # 使用 cache_manager 读取结果文件
  46. review_results = cache.load(
  47. subdir="final_result",
  48. filename=f"{callback_task_id}.json",
  49. base_cache_dir=CacheBaseDir.CONSTRUCTION_REVIEW,
  50. default=None
  51. )
  52. if review_results is None:
  53. raise HTTPException(status_code=404, detail="审查结果文件不存在")
  54. # 验证文件中的用户信息是否匹配
  55. if review_results.get("user_id") != user:
  56. raise HTTPException(status_code=403, detail="用户权限验证失败")
  57. return ReviewResultsResponse(
  58. code=200,
  59. data=review_results
  60. )
  61. except HTTPException:
  62. raise
  63. except Exception as e:
  64. raise HTTPException(status_code=500, detail=f"服务器内部错误: {str(e)}")