storage_release_review.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. from typing import Optional
  2. from fastapi import APIRouter, Depends, Query
  3. from sqlalchemy.orm import Session
  4. from app.core.database import get_db
  5. from app.core.menu_guard import require_admin_or_super_admin, require_menu_code
  6. from app.core.response import error_response, success_response
  7. from app.crud import storage_release_review as srr_svc
  8. from app.models.models import SysUser
  9. from app.schemas.storage_release_review import (
  10. BatchReviewBody,
  11. BatchStoreBody,
  12. ReviewSubmitBody,
  13. )
  14. router = APIRouter(prefix="/web/admin", tags=["入库放行审核"])
  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 _get_current_user_id(user: dict) -> str:
  24. user_id = user.get("user_id")
  25. if not user_id:
  26. raise PermissionError("用户身份信息缺失")
  27. return str(user_id)
  28. @router.get("/storage-release-reviews")
  29. async def list_storage_release_reviews(
  30. page: int = Query(1, ge=1),
  31. pageSize: int = Query(10, ge=1, le=100),
  32. keyword: Optional[str] = None,
  33. receptionSource: Optional[str] = None,
  34. reviewConclusion: Optional[str] = None,
  35. storageStatus: Optional[str] = None,
  36. db: Session = Depends(get_db),
  37. user: dict = Depends(require_menu_code("biz:storageReleaseReview:list")),
  38. ):
  39. try:
  40. tenant_no = _get_tenant_no(db, user)
  41. result = srr_svc.list_reviews(
  42. db,
  43. tenant_no=tenant_no,
  44. page=page,
  45. page_size=pageSize,
  46. reception_source=receptionSource,
  47. review_conclusion=reviewConclusion,
  48. storage_status=storageStatus,
  49. keyword=keyword,
  50. user_info=user,
  51. )
  52. return success_response(result)
  53. except PermissionError as e:
  54. return error_response(403, str(e))
  55. except Exception as e:
  56. return error_response(400, str(e))
  57. @router.get("/storage-release-reviews/{review_id}")
  58. async def get_storage_release_review_detail(
  59. review_id: str,
  60. db: Session = Depends(get_db),
  61. user: dict = Depends(require_menu_code("biz:storageReleaseReview:list")),
  62. ):
  63. try:
  64. tenant_no = _get_tenant_no(db, user)
  65. detail = srr_svc.get_review_detail(db, review_id, tenant_no)
  66. if not detail:
  67. return error_response(404, "审核记录不存在")
  68. return success_response(detail)
  69. except PermissionError as e:
  70. return error_response(403, str(e))
  71. except Exception as e:
  72. return error_response(400, str(e))
  73. @router.put("/storage-release-reviews/{review_id}/review")
  74. async def submit_single_review(
  75. review_id: str,
  76. body: ReviewSubmitBody,
  77. db: Session = Depends(get_db),
  78. user: dict = Depends(require_admin_or_super_admin),
  79. ):
  80. try:
  81. tenant_no = _get_tenant_no(db, user)
  82. user_id = _get_current_user_id(user)
  83. rev = srr_svc.submit_review(
  84. db,
  85. review_id,
  86. review_conclusion=body.reviewConclusion,
  87. review_remark=body.reviewRemark,
  88. review_attachments=body.reviewAttachments,
  89. tenant_no=tenant_no,
  90. user_id=user_id,
  91. )
  92. db.commit()
  93. return success_response(srr_svc._row_to_dict(rev))
  94. except PermissionError as e:
  95. return error_response(403, str(e))
  96. except ValueError as e:
  97. return error_response(400, str(e))
  98. except Exception as e:
  99. return error_response(400, str(e))
  100. @router.put("/storage-release-reviews/batch-review")
  101. async def batch_review(
  102. body: BatchReviewBody,
  103. db: Session = Depends(get_db),
  104. user: dict = Depends(require_admin_or_super_admin),
  105. ):
  106. try:
  107. tenant_no = _get_tenant_no(db, user)
  108. user_id = _get_current_user_id(user)
  109. result = srr_svc.batch_submit_review(
  110. db,
  111. body.ids,
  112. review_conclusion=body.reviewConclusion,
  113. review_remark=body.reviewRemark,
  114. review_attachments=body.reviewAttachments,
  115. tenant_no=tenant_no,
  116. user_id=user_id,
  117. )
  118. db.commit()
  119. return success_response(result)
  120. except PermissionError as e:
  121. return error_response(403, str(e))
  122. except ValueError as e:
  123. return error_response(400, str(e))
  124. except Exception as e:
  125. return error_response(400, str(e))
  126. @router.put("/storage-release-reviews/{review_id}/store")
  127. async def store_single_sample(
  128. review_id: str,
  129. db: Session = Depends(get_db),
  130. user: dict = Depends(require_admin_or_super_admin),
  131. ):
  132. try:
  133. tenant_no = _get_tenant_no(db, user)
  134. user_id = _get_current_user_id(user)
  135. rev = srr_svc.store_sample(
  136. db,
  137. review_id,
  138. tenant_no=tenant_no,
  139. user_id=user_id,
  140. )
  141. db.commit()
  142. return success_response(srr_svc._row_to_dict(rev))
  143. except PermissionError as e:
  144. return error_response(403, str(e))
  145. except ValueError as e:
  146. return error_response(400, str(e))
  147. except Exception as e:
  148. return error_response(400, str(e))
  149. @router.put("/storage-release-reviews/batch-store")
  150. async def batch_store_samples(
  151. body: BatchStoreBody,
  152. db: Session = Depends(get_db),
  153. user: dict = Depends(require_admin_or_super_admin),
  154. ):
  155. try:
  156. tenant_no = _get_tenant_no(db, user)
  157. user_id = _get_current_user_id(user)
  158. result = srr_svc.batch_store_samples(
  159. db,
  160. body.ids,
  161. tenant_no=tenant_no,
  162. user_id=user_id,
  163. )
  164. db.commit()
  165. return success_response(result)
  166. except PermissionError as e:
  167. return error_response(403, str(e))
  168. except ValueError as e:
  169. return error_response(400, str(e))
  170. except Exception as e:
  171. return error_response(400, str(e))