protocol_sample_collection.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """采集协议样本采集信息 API"""
  2. from typing import Optional
  3. from fastapi import APIRouter, Depends, Query
  4. from sqlalchemy.orm import Session
  5. from app.core.database import get_db
  6. from app.core.menu_guard import require_any_menu_code
  7. from app.core.response import error_response, success_response
  8. from app.crud import protocol_sample_collection as svc
  9. from app.crud.collection_protocol import total_pages
  10. from app.models.models import SysUser
  11. router = APIRouter(prefix="/web/admin", tags=["采集协议样本采集信息"])
  12. _SAMPLE_INFO_MENU = require_any_menu_code(
  13. "cell-storage:sample-info:list",
  14. )
  15. def _get_tenant_no(db: Session, user: dict) -> str:
  16. user_id = user.get("user_id")
  17. if not user_id:
  18. raise PermissionError("用户身份信息缺失,无法确定租户")
  19. sys_user = db.query(SysUser).filter(SysUser.id == user_id).first()
  20. if not sys_user or not sys_user.tenant_no:
  21. raise PermissionError("用户租户信息缺失")
  22. return sys_user.tenant_no
  23. def _page_payload(items: list, total: int, page: int, page_size: int) -> dict:
  24. return {
  25. "list": items,
  26. "total": total,
  27. "page": page,
  28. "pageSize": page_size,
  29. "totalPages": total_pages(total, page_size),
  30. }
  31. @router.get("/protocol-sample-collections/list")
  32. async def list_protocol_sample_collections(
  33. page: int = Query(1, ge=1),
  34. pageSize: int = Query(10, ge=1, le=100),
  35. keyword: Optional[str] = None,
  36. sampleStatus: Optional[str] = Query(None, alias="sampleStatus"),
  37. db: Session = Depends(get_db),
  38. user: dict = Depends(_SAMPLE_INFO_MENU),
  39. ):
  40. try:
  41. tenant_no = _get_tenant_no(db, user)
  42. items, total = svc.list_protocol_sample_collections(
  43. db,
  44. page=page,
  45. page_size=pageSize,
  46. tenant_no=tenant_no,
  47. keyword=keyword,
  48. sample_status=sampleStatus,
  49. user_info=user,
  50. )
  51. return success_response(_page_payload(items, total, page, pageSize))
  52. except PermissionError as e:
  53. return error_response(403, str(e))
  54. except Exception as e:
  55. return error_response(400, str(e))