review_results.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. # 导入文件上传模块的存储
  14. try:
  15. from .file_upload import uploaded_files
  16. except ImportError:
  17. from views.construction_review.file_upload import uploaded_files
  18. class ReviewResultsRequest(BaseModel):
  19. id: str = None
  20. user: str = None
  21. type: str = None # "summary" 或 "issues"
  22. class ReviewResultsResponse(BaseModel):
  23. code: int
  24. data: Dict[str, Any]
  25. review_results_router = APIRouter(prefix="/sgsc", tags=["前端接口"])
  26. @review_results_router.get("/review_results", response_model=ReviewResultsResponse)
  27. async def review_results(
  28. callback_task_id: str = Query(..., description="回调任务ID"),
  29. user: str = Query(..., description="用户ID")
  30. ):
  31. """
  32. 获取审查结果接口 - 从temp目录读取保存的结果文件
  33. """
  34. try:
  35. # 验证参数
  36. if not callback_task_id:
  37. raise HTTPException(status_code=400, detail="缺少callback_task_id参数")
  38. if not user:
  39. raise HTTPException(status_code=400, detail="缺少user参数")
  40. # 验证用户标识(应该是指定用户如user-001)
  41. valid_users = {"user-001", "user-002", "user-003"} # 可以配置化
  42. if user not in valid_users:
  43. raise HTTPException(status_code=403, detail="无效的用户ID")
  44. # 构建文件路径
  45. temp_dir = "temp"
  46. file_path = os.path.join(temp_dir, f"{callback_task_id}.json")
  47. # 检查文件是否存在
  48. if not os.path.exists(file_path):
  49. raise HTTPException(status_code=404, detail="审查结果文件不存在")
  50. # 读取文件内容
  51. try:
  52. with open(file_path, 'r', encoding='utf-8') as f:
  53. review_results = json.load(f)
  54. except json.JSONDecodeError:
  55. raise HTTPException(status_code=500, detail="审查结果文件格式错误")
  56. except Exception as e:
  57. raise HTTPException(status_code=500, detail=f"读取文件失败: {str(e)}")
  58. # 验证文件中的用户信息是否匹配
  59. if review_results.get("user_id") != user:
  60. raise HTTPException(status_code=403, detail="用户权限验证失败")
  61. return ReviewResultsResponse(
  62. code=200,
  63. data=review_results
  64. )
  65. except HTTPException:
  66. raise
  67. except Exception as e:
  68. raise HTTPException(status_code=500, detail=f"服务器内部错误: {str(e)}")