vehicle_maintenance.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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_maintenance import (
  10. VehicleMaintenanceApplyCreate,
  11. VehicleMaintenanceApplyListResponse,
  12. VehicleMaintenanceApplyRead,
  13. VehicleMaintenanceApplyReminder,
  14. VehicleMaintenanceApplyUpdate,
  15. VehicleMaintenanceProcessBoardListResponse,
  16. VehicleMaintenanceProcessCreate,
  17. VehicleMaintenanceProcessRead,
  18. VehicleMaintenanceProcessUpdate,
  19. )
  20. from app.services import pl_vehicle_maintenance_service as svc
  21. apply_router = APIRouter(prefix="/vehicle-maintenance-apply", tags=["运输计划-车辆维保申请"])
  22. process_router = APIRouter(prefix="/vehicle-maintenance-process", tags=["运输计划-车辆维保处理"])
  23. @apply_router.get("/", response_model=VehicleMaintenanceApplyListResponse)
  24. def list_applies(
  25. q: Optional[str] = Query(default=None),
  26. maintenance_type: Optional[str] = Query(default=None, alias="maintenanceType"),
  27. status: Optional[str] = Query(default=None),
  28. apply_date_from: Optional[date] = Query(default=None, alias="applyDateFrom"),
  29. apply_date_to: Optional[date] = Query(default=None, alias="applyDateTo"),
  30. applicant_id: Optional[str] = Query(default=None, alias="applicantId"),
  31. page: int = Query(default=1, ge=1),
  32. page_size: int = Query(default=20, ge=1, le=100, alias="pageSize"),
  33. db: Session = Depends(get_db),
  34. user: DbUserContext = Depends(get_db_current_user),
  35. ) -> VehicleMaintenanceApplyListResponse:
  36. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  37. items, total = svc.list_applies(
  38. db,
  39. tenant_no,
  40. user,
  41. q=q,
  42. maintenance_type=maintenance_type,
  43. status=status,
  44. apply_date_from=apply_date_from,
  45. apply_date_to=apply_date_to,
  46. applicant_id=applicant_id,
  47. page=page,
  48. page_size=page_size,
  49. )
  50. return VehicleMaintenanceApplyListResponse(
  51. items=items, total=total, page=page, pageSize=page_size
  52. )
  53. @apply_router.get("/reminders", response_model=list[VehicleMaintenanceApplyReminder])
  54. def list_reminders(
  55. license_plate: str = Query(..., alias="licensePlate"),
  56. exclude_apply_id: Optional[str] = Query(default=None, alias="excludeApplyId"),
  57. db: Session = Depends(get_db),
  58. user: DbUserContext = Depends(get_db_current_user),
  59. ) -> list[VehicleMaintenanceApplyReminder]:
  60. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  61. return svc.list_reminders(
  62. db,
  63. tenant_no,
  64. user,
  65. license_plate,
  66. exclude_apply_id=exclude_apply_id,
  67. )
  68. @apply_router.get("/{id}", response_model=VehicleMaintenanceApplyRead)
  69. def get_apply(
  70. id: str,
  71. db: Session = Depends(get_db),
  72. user: DbUserContext = Depends(get_db_current_user),
  73. ) -> VehicleMaintenanceApplyRead:
  74. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  75. return svc.get_apply(db, tenant_no, user, id)
  76. @apply_router.post("/", response_model=VehicleMaintenanceApplyRead, status_code=status.HTTP_201_CREATED)
  77. def create_apply(
  78. payload: VehicleMaintenanceApplyCreate,
  79. db: Session = Depends(get_db),
  80. user: DbUserContext = Depends(get_db_current_user),
  81. ) -> VehicleMaintenanceApplyRead:
  82. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  83. return svc.create_apply(db, tenant_no, user, payload)
  84. @apply_router.put("/{id}", response_model=VehicleMaintenanceApplyRead)
  85. def update_apply(
  86. id: str,
  87. payload: VehicleMaintenanceApplyUpdate,
  88. db: Session = Depends(get_db),
  89. user: DbUserContext = Depends(get_db_current_user),
  90. ) -> VehicleMaintenanceApplyRead:
  91. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  92. return svc.update_apply(db, tenant_no, user, id, payload)
  93. @apply_router.post("/{id}/cancel", response_model=VehicleMaintenanceApplyRead)
  94. def cancel_apply(
  95. id: str,
  96. db: Session = Depends(get_db),
  97. user: DbUserContext = Depends(get_db_current_user),
  98. ) -> VehicleMaintenanceApplyRead:
  99. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  100. return svc.cancel_apply(db, tenant_no, user, id)
  101. @apply_router.delete("/{ids}", status_code=status.HTTP_204_NO_CONTENT)
  102. def delete_applies(
  103. ids: str,
  104. db: Session = Depends(get_db),
  105. user: DbUserContext = Depends(get_db_current_user),
  106. ) -> None:
  107. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  108. apply_ids = [item for item in ids.split(",") if item]
  109. svc.delete_applies(db, tenant_no, user, apply_ids)
  110. @process_router.get("/process-board", response_model=VehicleMaintenanceProcessBoardListResponse)
  111. def list_process_board(
  112. q: Optional[str] = Query(default=None),
  113. maintenance_type: Optional[str] = Query(default=None, alias="maintenanceType"),
  114. apply_status: Optional[str] = Query(default=None, alias="applyStatus"),
  115. apply_date_from: Optional[date] = Query(default=None, alias="applyDateFrom"),
  116. apply_date_to: Optional[date] = Query(default=None, alias="applyDateTo"),
  117. process_date_from: Optional[date] = Query(default=None, alias="processDateFrom"),
  118. process_date_to: Optional[date] = Query(default=None, alias="processDateTo"),
  119. page: int = Query(default=1, ge=1),
  120. page_size: int = Query(default=20, ge=1, le=100, alias="pageSize"),
  121. db: Session = Depends(get_db),
  122. user: DbUserContext = Depends(get_db_current_user),
  123. ) -> VehicleMaintenanceProcessBoardListResponse:
  124. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  125. items, total = svc.list_process_board(
  126. db,
  127. tenant_no,
  128. user,
  129. q=q,
  130. maintenance_type=maintenance_type,
  131. apply_status=apply_status,
  132. apply_date_from=apply_date_from,
  133. apply_date_to=apply_date_to,
  134. process_date_from=process_date_from,
  135. process_date_to=process_date_to,
  136. page=page,
  137. page_size=page_size,
  138. )
  139. return VehicleMaintenanceProcessBoardListResponse(
  140. items=items, total=total, page=page, pageSize=page_size
  141. )
  142. @process_router.get("/{id}", response_model=VehicleMaintenanceProcessRead)
  143. def get_process(
  144. id: str,
  145. db: Session = Depends(get_db),
  146. user: DbUserContext = Depends(get_db_current_user),
  147. ) -> VehicleMaintenanceProcessRead:
  148. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  149. return svc.get_process(db, tenant_no, user, id)
  150. @process_router.post("/", response_model=VehicleMaintenanceProcessRead, status_code=status.HTTP_201_CREATED)
  151. def create_process(
  152. payload: VehicleMaintenanceProcessCreate,
  153. db: Session = Depends(get_db),
  154. user: DbUserContext = Depends(get_db_current_user),
  155. ) -> VehicleMaintenanceProcessRead:
  156. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  157. return svc.create_process(db, tenant_no, user, payload)
  158. @process_router.put("/{id}", response_model=VehicleMaintenanceProcessRead)
  159. def update_process(
  160. id: str,
  161. payload: VehicleMaintenanceProcessUpdate,
  162. db: Session = Depends(get_db),
  163. user: DbUserContext = Depends(get_db_current_user),
  164. ) -> VehicleMaintenanceProcessRead:
  165. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  166. return svc.update_process(db, tenant_no, user, id, payload)
  167. @process_router.delete("/{ids}", status_code=status.HTTP_204_NO_CONTENT)
  168. def delete_processes(
  169. ids: str,
  170. db: Session = Depends(get_db),
  171. user: DbUserContext = Depends(get_db_current_user),
  172. ) -> None:
  173. tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
  174. process_ids = [item for item in ids.split(",") if item]
  175. svc.delete_processes(db, tenant_no, user, process_ids)