203 lines
7.6 KiB
Python
203 lines
7.6 KiB
Python
"""车辆维保 API"""
|
|
from datetime import date
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Depends, Query, status
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.core.database import get_db
|
|
from app.core.db_auth import DbUserContext, get_db_current_user
|
|
from app.core.tenant_context import get_tenant_no
|
|
from app.schemas.pl.vehicle_maintenance import (
|
|
VehicleMaintenanceApplyCreate,
|
|
VehicleMaintenanceApplyListResponse,
|
|
VehicleMaintenanceApplyRead,
|
|
VehicleMaintenanceApplyReminder,
|
|
VehicleMaintenanceApplyUpdate,
|
|
VehicleMaintenanceProcessBoardListResponse,
|
|
VehicleMaintenanceProcessCreate,
|
|
VehicleMaintenanceProcessRead,
|
|
VehicleMaintenanceProcessUpdate,
|
|
)
|
|
from app.services import pl_vehicle_maintenance_service as svc
|
|
|
|
apply_router = APIRouter(prefix="/vehicle-maintenance-apply", tags=["运输计划-车辆维保申请"])
|
|
process_router = APIRouter(prefix="/vehicle-maintenance-process", tags=["运输计划-车辆维保处理"])
|
|
|
|
|
|
@apply_router.get("/", response_model=VehicleMaintenanceApplyListResponse)
|
|
def list_applies(
|
|
q: Optional[str] = Query(default=None),
|
|
maintenance_type: Optional[str] = Query(default=None, alias="maintenanceType"),
|
|
status: Optional[str] = Query(default=None),
|
|
apply_date_from: Optional[date] = Query(default=None, alias="applyDateFrom"),
|
|
apply_date_to: Optional[date] = Query(default=None, alias="applyDateTo"),
|
|
applicant_id: Optional[str] = Query(default=None, alias="applicantId"),
|
|
page: int = Query(default=1, ge=1),
|
|
page_size: int = Query(default=20, ge=1, le=100, alias="pageSize"),
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> VehicleMaintenanceApplyListResponse:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
items, total = svc.list_applies(
|
|
db,
|
|
tenant_no,
|
|
user,
|
|
q=q,
|
|
maintenance_type=maintenance_type,
|
|
status=status,
|
|
apply_date_from=apply_date_from,
|
|
apply_date_to=apply_date_to,
|
|
applicant_id=applicant_id,
|
|
page=page,
|
|
page_size=page_size,
|
|
)
|
|
return VehicleMaintenanceApplyListResponse(
|
|
items=items, total=total, page=page, pageSize=page_size
|
|
)
|
|
|
|
|
|
@apply_router.get("/reminders", response_model=list[VehicleMaintenanceApplyReminder])
|
|
def list_reminders(
|
|
license_plate: str = Query(..., alias="licensePlate"),
|
|
exclude_apply_id: Optional[str] = Query(default=None, alias="excludeApplyId"),
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> list[VehicleMaintenanceApplyReminder]:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
return svc.list_reminders(
|
|
db,
|
|
tenant_no,
|
|
user,
|
|
license_plate,
|
|
exclude_apply_id=exclude_apply_id,
|
|
)
|
|
|
|
|
|
@apply_router.get("/{id}", response_model=VehicleMaintenanceApplyRead)
|
|
def get_apply(
|
|
id: str,
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> VehicleMaintenanceApplyRead:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
return svc.get_apply(db, tenant_no, user, id)
|
|
|
|
|
|
@apply_router.post("/", response_model=VehicleMaintenanceApplyRead, status_code=status.HTTP_201_CREATED)
|
|
def create_apply(
|
|
payload: VehicleMaintenanceApplyCreate,
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> VehicleMaintenanceApplyRead:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
return svc.create_apply(db, tenant_no, user, payload)
|
|
|
|
|
|
@apply_router.put("/{id}", response_model=VehicleMaintenanceApplyRead)
|
|
def update_apply(
|
|
id: str,
|
|
payload: VehicleMaintenanceApplyUpdate,
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> VehicleMaintenanceApplyRead:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
return svc.update_apply(db, tenant_no, user, id, payload)
|
|
|
|
|
|
@apply_router.post("/{id}/cancel", response_model=VehicleMaintenanceApplyRead)
|
|
def cancel_apply(
|
|
id: str,
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> VehicleMaintenanceApplyRead:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
return svc.cancel_apply(db, tenant_no, user, id)
|
|
|
|
|
|
@apply_router.delete("/{ids}", status_code=status.HTTP_204_NO_CONTENT)
|
|
def delete_applies(
|
|
ids: str,
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> None:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
apply_ids = [item for item in ids.split(",") if item]
|
|
svc.delete_applies(db, tenant_no, user, apply_ids)
|
|
|
|
|
|
@process_router.get("/process-board", response_model=VehicleMaintenanceProcessBoardListResponse)
|
|
def list_process_board(
|
|
q: Optional[str] = Query(default=None),
|
|
maintenance_type: Optional[str] = Query(default=None, alias="maintenanceType"),
|
|
apply_status: Optional[str] = Query(default=None, alias="applyStatus"),
|
|
apply_date_from: Optional[date] = Query(default=None, alias="applyDateFrom"),
|
|
apply_date_to: Optional[date] = Query(default=None, alias="applyDateTo"),
|
|
process_date_from: Optional[date] = Query(default=None, alias="processDateFrom"),
|
|
process_date_to: Optional[date] = Query(default=None, alias="processDateTo"),
|
|
page: int = Query(default=1, ge=1),
|
|
page_size: int = Query(default=20, ge=1, le=100, alias="pageSize"),
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> VehicleMaintenanceProcessBoardListResponse:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
items, total = svc.list_process_board(
|
|
db,
|
|
tenant_no,
|
|
user,
|
|
q=q,
|
|
maintenance_type=maintenance_type,
|
|
apply_status=apply_status,
|
|
apply_date_from=apply_date_from,
|
|
apply_date_to=apply_date_to,
|
|
process_date_from=process_date_from,
|
|
process_date_to=process_date_to,
|
|
page=page,
|
|
page_size=page_size,
|
|
)
|
|
return VehicleMaintenanceProcessBoardListResponse(
|
|
items=items, total=total, page=page, pageSize=page_size
|
|
)
|
|
|
|
|
|
@process_router.get("/{id}", response_model=VehicleMaintenanceProcessRead)
|
|
def get_process(
|
|
id: str,
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> VehicleMaintenanceProcessRead:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
return svc.get_process(db, tenant_no, user, id)
|
|
|
|
|
|
@process_router.post("/", response_model=VehicleMaintenanceProcessRead, status_code=status.HTTP_201_CREATED)
|
|
def create_process(
|
|
payload: VehicleMaintenanceProcessCreate,
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> VehicleMaintenanceProcessRead:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
return svc.create_process(db, tenant_no, user, payload)
|
|
|
|
|
|
@process_router.put("/{id}", response_model=VehicleMaintenanceProcessRead)
|
|
def update_process(
|
|
id: str,
|
|
payload: VehicleMaintenanceProcessUpdate,
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> VehicleMaintenanceProcessRead:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
return svc.update_process(db, tenant_no, user, id, payload)
|
|
|
|
|
|
@process_router.delete("/{ids}", status_code=status.HTTP_204_NO_CONTENT)
|
|
def delete_processes(
|
|
ids: str,
|
|
db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user),
|
|
) -> None:
|
|
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
|
process_ids = [item for item in ids.split(",") if item]
|
|
svc.delete_processes(db, tenant_no, user, process_ids)
|