pre_transit_sample.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 pre_transit_sample as pts_svc
  9. from app.models.models import SysUser
  10. router = APIRouter(prefix="/web/admin", tags=["质量检测"])
  11. def _get_tenant_no(db: Session, user: dict) -> str:
  12. user_id = user.get("user_id")
  13. if not user_id:
  14. raise PermissionError("用户身份信息缺失,无法确定租户")
  15. sys_user = db.query(SysUser).filter(SysUser.id == user_id).first()
  16. if not sys_user or not sys_user.tenant_no:
  17. raise PermissionError("用户租户信息缺失")
  18. return sys_user.tenant_no
  19. def _page_payload(items: list, total: int, page: int, page_size: int) -> dict:
  20. return {
  21. "list": items,
  22. "total": total,
  23. "page": page,
  24. "pageSize": page_size,
  25. "totalPages": pts_svc.total_pages(total, page_size),
  26. }
  27. @router.get("/pre-transit-samples/in-transit")
  28. async def list_in_transit_samples(
  29. page: int = Query(1, ge=1),
  30. pageSize: int = Query(10, ge=1, le=100),
  31. keyword: Optional[str] = None,
  32. sourceType: Optional[str] = None,
  33. createTimeStart: Optional[str] = Query(None, alias="createTimeStart"),
  34. createTimeEnd: Optional[str] = Query(None, alias="createTimeEnd"),
  35. sampleCollectTimeStart: Optional[str] = Query(None, alias="sampleCollectTimeStart"),
  36. sampleCollectTimeEnd: Optional[str] = Query(None, alias="sampleCollectTimeEnd"),
  37. db: Session = Depends(get_db),
  38. user: dict = Depends(
  39. require_any_menu_code(
  40. "biz:preTransitSample:list",
  41. "production:preTransitSample:list",
  42. )
  43. ),
  44. ):
  45. try:
  46. tenant_no = _get_tenant_no(db, user)
  47. items, total = pts_svc.list_in_transit_protocols(
  48. db,
  49. page=page,
  50. page_size=pageSize,
  51. tenant_no=tenant_no,
  52. keyword=keyword,
  53. source_type=sourceType,
  54. create_time_start=createTimeStart,
  55. create_time_end=createTimeEnd,
  56. sample_collect_time_start=sampleCollectTimeStart,
  57. sample_collect_time_end=sampleCollectTimeEnd,
  58. user_info=user,
  59. )
  60. return success_response(_page_payload(items, total, page, pageSize))
  61. except PermissionError as e:
  62. return error_response(403, str(e))
  63. except Exception as e:
  64. return error_response(400, str(e))
  65. @router.get("/pre-transit-samples/pre-delivery")
  66. async def list_pre_delivery_samples(
  67. page: int = Query(1, ge=1),
  68. pageSize: int = Query(10, ge=1, le=100),
  69. keyword: Optional[str] = None,
  70. sourceType: Optional[str] = None,
  71. createTimeStart: Optional[str] = Query(None, alias="createTimeStart"),
  72. createTimeEnd: Optional[str] = Query(None, alias="createTimeEnd"),
  73. sampleCollectTimeStart: Optional[str] = Query(None, alias="sampleCollectTimeStart"),
  74. sampleCollectTimeEnd: Optional[str] = Query(None, alias="sampleCollectTimeEnd"),
  75. db: Session = Depends(get_db),
  76. user: dict = Depends(
  77. require_any_menu_code(
  78. "biz:preTransitSample:list",
  79. "production:preTransitSample:list",
  80. )
  81. ),
  82. ):
  83. try:
  84. tenant_no = _get_tenant_no(db, user)
  85. items, total = pts_svc.list_pre_delivery_protocols(
  86. db,
  87. page=page,
  88. page_size=pageSize,
  89. tenant_no=tenant_no,
  90. keyword=keyword,
  91. source_type=sourceType,
  92. create_time_start=createTimeStart,
  93. create_time_end=createTimeEnd,
  94. sample_collect_time_start=sampleCollectTimeStart,
  95. sample_collect_time_end=sampleCollectTimeEnd,
  96. user_info=user,
  97. )
  98. return success_response(_page_payload(items, total, page, pageSize))
  99. except PermissionError as e:
  100. return error_response(403, str(e))
  101. except Exception as e:
  102. return error_response(400, str(e))