pilot_infusion_confirm.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. """中试应用确认 API"""
  2. from typing import Optional
  3. from fastapi import APIRouter, Depends, Query
  4. from pydantic import BaseModel
  5. from sqlalchemy.orm import Session
  6. from app.core.database import get_db
  7. from app.core.menu_guard import require_admin_or_super_admin
  8. from app.core.response import error_response, success_response
  9. from app.crud import pilot_infusion_confirm as svc
  10. from app.models.models import SysUser
  11. router = APIRouter(prefix="/web/admin", tags=["中试应用确认"])
  12. def _get_tenant_no(db: Session, user: dict) -> str:
  13. user_id = user.get("user_id")
  14. if not user_id:
  15. raise PermissionError("用户身份信息缺失")
  16. sys_user = db.query(SysUser).filter(SysUser.id == user_id).first()
  17. if not sys_user or not sys_user.tenant_no:
  18. raise PermissionError("用户租户信息缺失")
  19. return sys_user.tenant_no
  20. class IdBody(BaseModel):
  21. id: str
  22. class ConfirmCreateBody(BaseModel):
  23. infusionScheduleId: str
  24. confirmDesc: Optional[str] = None
  25. remark: Optional[str] = None
  26. class ConfirmUpdateBody(BaseModel):
  27. id: str
  28. confirmDesc: Optional[str] = None
  29. remark: Optional[str] = None
  30. @router.post("/pilot-infusion-confirm/create")
  31. async def api_create(
  32. body: ConfirmCreateBody,
  33. user: dict = Depends(require_admin_or_super_admin),
  34. db: Session = Depends(get_db),
  35. ):
  36. try:
  37. tenant_no = _get_tenant_no(db, user)
  38. result = svc.create_infusion_confirm(
  39. db,
  40. schedule_id=body.infusionScheduleId,
  41. tenant_no=tenant_no,
  42. user_id=user.get("user_id"),
  43. create_dept_id=user.get("region_id", ""),
  44. confirm_desc=body.confirmDesc or "",
  45. remark=body.remark or "",
  46. )
  47. db.commit()
  48. return success_response(result, message="创建成功")
  49. except ValueError as e:
  50. return error_response(400, str(e))
  51. @router.get("/pilot-infusion-confirm/list")
  52. async def api_list(
  53. applicationId: str = Query(...),
  54. user: dict = Depends(require_admin_or_super_admin),
  55. db: Session = Depends(get_db),
  56. ):
  57. tenant_no = _get_tenant_no(db, user)
  58. result = svc.list_confirms_by_application(
  59. db, application_id=applicationId, tenant_no=tenant_no
  60. )
  61. return success_response(result)
  62. @router.get("/pilot-infusion-confirm/detail")
  63. async def api_detail(
  64. id: str = Query(...),
  65. user: dict = Depends(require_admin_or_super_admin),
  66. db: Session = Depends(get_db),
  67. ):
  68. tenant_no = _get_tenant_no(db, user)
  69. result = svc.get_confirm_by_id(db, confirm_id=id, tenant_no=tenant_no)
  70. if result is None:
  71. return success_response(None)
  72. return success_response(result)
  73. @router.post("/pilot-infusion-confirm/confirm")
  74. async def api_confirm(
  75. body: IdBody,
  76. user: dict = Depends(require_admin_or_super_admin),
  77. db: Session = Depends(get_db),
  78. ):
  79. try:
  80. tenant_no = _get_tenant_no(db, user)
  81. result = svc.confirm_infusion(
  82. db, confirm_id=body.id, tenant_no=tenant_no, user_id=user.get("user_id")
  83. )
  84. return success_response(result, message="确认成功")
  85. except ValueError as e:
  86. return error_response(400, str(e))
  87. @router.put("/pilot-infusion-confirm/update")
  88. async def api_update(
  89. body: ConfirmUpdateBody,
  90. user: dict = Depends(require_admin_or_super_admin),
  91. db: Session = Depends(get_db),
  92. ):
  93. try:
  94. tenant_no = _get_tenant_no(db, user)
  95. result = svc.update_infusion_confirm(
  96. db,
  97. confirm_id=body.id,
  98. tenant_no=tenant_no,
  99. user_id=user.get("user_id"),
  100. confirmDesc=body.confirmDesc,
  101. remark=body.remark,
  102. )
  103. return success_response(result, message="更新成功")
  104. except ValueError as e:
  105. return error_response(400, str(e))
  106. @router.delete("/pilot-infusion-confirm/delete")
  107. async def api_delete(
  108. body: IdBody,
  109. user: dict = Depends(require_admin_or_super_admin),
  110. db: Session = Depends(get_db),
  111. ):
  112. try:
  113. tenant_no = _get_tenant_no(db, user)
  114. svc.delete_infusion_confirm(
  115. db, confirm_id=body.id, tenant_no=tenant_no, user_id=user.get("user_id")
  116. )
  117. return success_response(None, message="删除成功")
  118. except ValueError as e:
  119. return error_response(400, str(e))