vehicle_urea.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. """车辆尿素 API"""
  2. from datetime import date
  3. from typing import Optional
  4. from fastapi import APIRouter, Depends, Query, status
  5. from sqlalchemy.orm import Session
  6. from app.core.database import get_db
  7. from app.core.db_auth import DbUserContext, get_db_current_user
  8. from app.core.tenant_context import get_tenant_no
  9. from app.schemas.pl.vehicle_urea import (
  10. VehicleUreaApplyCreate,
  11. VehicleUreaApplyListResponse,
  12. VehicleUreaApplyRead,
  13. VehicleUreaApplyUpdate,
  14. VehicleUreaDisburseBoardListResponse,
  15. VehicleUreaDisburseCreate,
  16. VehicleUreaDisburseRead,
  17. VehicleUreaDisburseUpdate,
  18. )
  19. from app.services import pl_vehicle_urea_service as svc
  20. apply_router = APIRouter(prefix="/vehicle-urea-apply", tags=["运输计划-车辆尿素申请"])
  21. disburse_router = APIRouter(prefix="/vehicle-urea-disburse", tags=["运输计划-车辆尿素发放"])
  22. @apply_router.get("/", response_model=VehicleUreaApplyListResponse)
  23. def list_applies(
  24. q: Optional[str] = Query(default=None),
  25. status: Optional[str] = Query(default=None),
  26. apply_date_from: Optional[date] = Query(default=None, alias="applyDateFrom"),
  27. apply_date_to: Optional[date] = Query(default=None, alias="applyDateTo"),
  28. applicant_id: Optional[str] = Query(default=None, alias="applicantId"),
  29. page: int = Query(default=1, ge=1),
  30. page_size: int = Query(default=20, ge=1, le=100, alias="pageSize"),
  31. db: Session = Depends(get_db),
  32. user: DbUserContext = Depends(get_db_current_user),
  33. ) -> VehicleUreaApplyListResponse:
  34. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  35. items, total = svc.list_applies(
  36. db,
  37. tenant_no,
  38. user,
  39. q=q,
  40. status=status,
  41. apply_date_from=apply_date_from,
  42. apply_date_to=apply_date_to,
  43. applicant_id=applicant_id,
  44. page=page,
  45. page_size=page_size,
  46. )
  47. return VehicleUreaApplyListResponse(
  48. items=items, total=total, page=page, pageSize=page_size
  49. )
  50. @apply_router.get("/{id}", response_model=VehicleUreaApplyRead)
  51. def get_apply(
  52. id: str,
  53. db: Session = Depends(get_db),
  54. user: DbUserContext = Depends(get_db_current_user),
  55. ) -> VehicleUreaApplyRead:
  56. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  57. return svc.get_apply(db, tenant_no, user, id)
  58. @apply_router.post("/", response_model=VehicleUreaApplyRead, status_code=status.HTTP_201_CREATED)
  59. def create_apply(
  60. payload: VehicleUreaApplyCreate,
  61. db: Session = Depends(get_db),
  62. user: DbUserContext = Depends(get_db_current_user),
  63. ) -> VehicleUreaApplyRead:
  64. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  65. return svc.create_apply(db, tenant_no, user, payload)
  66. @apply_router.put("/{id}", response_model=VehicleUreaApplyRead)
  67. def update_apply(
  68. id: str,
  69. payload: VehicleUreaApplyUpdate,
  70. db: Session = Depends(get_db),
  71. user: DbUserContext = Depends(get_db_current_user),
  72. ) -> VehicleUreaApplyRead:
  73. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  74. return svc.update_apply(db, tenant_no, user, id, payload)
  75. @apply_router.post("/{id}/cancel", response_model=VehicleUreaApplyRead)
  76. def cancel_apply(
  77. id: str,
  78. db: Session = Depends(get_db),
  79. user: DbUserContext = Depends(get_db_current_user),
  80. ) -> VehicleUreaApplyRead:
  81. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  82. return svc.cancel_apply(db, tenant_no, user, id)
  83. @apply_router.delete("/{ids}", status_code=status.HTTP_204_NO_CONTENT)
  84. def delete_applies(
  85. ids: str,
  86. db: Session = Depends(get_db),
  87. user: DbUserContext = Depends(get_db_current_user),
  88. ) -> None:
  89. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  90. apply_ids = [item for item in ids.split(",") if item]
  91. svc.delete_applies(db, tenant_no, user, apply_ids)
  92. @disburse_router.get("/disburse-board", response_model=VehicleUreaDisburseBoardListResponse)
  93. def list_disburse_board(
  94. q: Optional[str] = Query(default=None),
  95. apply_status: Optional[str] = Query(default=None, alias="applyStatus"),
  96. apply_date_from: Optional[date] = Query(default=None, alias="applyDateFrom"),
  97. apply_date_to: Optional[date] = Query(default=None, alias="applyDateTo"),
  98. disburse_date_from: Optional[date] = Query(default=None, alias="disburseDateFrom"),
  99. disburse_date_to: Optional[date] = Query(default=None, alias="disburseDateTo"),
  100. page: int = Query(default=1, ge=1),
  101. page_size: int = Query(default=20, ge=1, le=100, alias="pageSize"),
  102. db: Session = Depends(get_db),
  103. user: DbUserContext = Depends(get_db_current_user),
  104. ) -> VehicleUreaDisburseBoardListResponse:
  105. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  106. items, total = svc.list_disburse_board(
  107. db,
  108. tenant_no,
  109. user,
  110. q=q,
  111. apply_status=apply_status,
  112. apply_date_from=apply_date_from,
  113. apply_date_to=apply_date_to,
  114. disburse_date_from=disburse_date_from,
  115. disburse_date_to=disburse_date_to,
  116. page=page,
  117. page_size=page_size,
  118. )
  119. return VehicleUreaDisburseBoardListResponse(
  120. items=items, total=total, page=page, pageSize=page_size
  121. )
  122. @disburse_router.get("/{id}", response_model=VehicleUreaDisburseRead)
  123. def get_disburse(
  124. id: str,
  125. db: Session = Depends(get_db),
  126. user: DbUserContext = Depends(get_db_current_user),
  127. ) -> VehicleUreaDisburseRead:
  128. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  129. return svc.get_disburse(db, tenant_no, user, id)
  130. @disburse_router.post("/", response_model=VehicleUreaDisburseRead, status_code=status.HTTP_201_CREATED)
  131. def create_disburse(
  132. payload: VehicleUreaDisburseCreate,
  133. db: Session = Depends(get_db),
  134. user: DbUserContext = Depends(get_db_current_user),
  135. ) -> VehicleUreaDisburseRead:
  136. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  137. return svc.create_disburse(db, tenant_no, user, payload)
  138. @disburse_router.put("/{id}", response_model=VehicleUreaDisburseRead)
  139. def update_disburse(
  140. id: str,
  141. payload: VehicleUreaDisburseUpdate,
  142. db: Session = Depends(get_db),
  143. user: DbUserContext = Depends(get_db_current_user),
  144. ) -> VehicleUreaDisburseRead:
  145. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  146. return svc.update_disburse(db, tenant_no, user, id, payload)
  147. @disburse_router.delete("/{ids}", status_code=status.HTTP_204_NO_CONTENT)
  148. def delete_disburses(
  149. ids: str,
  150. db: Session = Depends(get_db),
  151. user: DbUserContext = Depends(get_db_current_user),
  152. ) -> None:
  153. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  154. disburse_ids = [item for item in ids.split(",") if item]
  155. svc.delete_disburses(db, tenant_no, user, disburse_ids)