| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- """车辆 ETC/加油充值 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_recharge import (
- VehicleRechargeApplyCreate,
- VehicleRechargeApplyListResponse,
- VehicleRechargeApplyOption,
- VehicleRechargeApplyRead,
- VehicleRechargeApplyUpdate,
- VehicleRechargeDisburseBoardListResponse,
- VehicleRechargeRecordCreate,
- VehicleRechargeRecordListResponse,
- VehicleRechargeRecordRead,
- VehicleRechargeRecordUpdate,
- )
- from app.services import pl_vehicle_recharge_service as svc
- apply_router = APIRouter(prefix="/vehicle-recharge-apply", tags=["运输计划-ETC加油申请"])
- record_router = APIRouter(prefix="/vehicle-recharge-record", tags=["运输计划-ETC加油发放"])
- @apply_router.get("/", response_model=VehicleRechargeApplyListResponse)
- def list_applies(
- q: Optional[str] = Query(default=None),
- recharge_type: Optional[str] = Query(default=None, alias="rechargeType"),
- 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),
- ) -> VehicleRechargeApplyListResponse:
- tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
- items, total = svc.list_applies(
- db,
- tenant_no,
- user,
- q=q,
- recharge_type=recharge_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 VehicleRechargeApplyListResponse(
- items=items, total=total, page=page, pageSize=page_size
- )
- @apply_router.get("/pending-options", response_model=list[VehicleRechargeApplyOption])
- def pending_apply_options(
- db: Session = Depends(get_db),
- user: DbUserContext = Depends(get_db_current_user),
- ) -> list[VehicleRechargeApplyOption]:
- tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
- rows = svc.list_pending_apply_options(db, tenant_no, user)
- return [VehicleRechargeApplyOption.model_validate(row) for row in rows]
- @apply_router.get("/{id}", response_model=VehicleRechargeApplyRead)
- def get_apply(
- id: str,
- db: Session = Depends(get_db),
- user: DbUserContext = Depends(get_db_current_user),
- ) -> VehicleRechargeApplyRead:
- 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=VehicleRechargeApplyRead, status_code=status.HTTP_201_CREATED)
- def create_apply(
- payload: VehicleRechargeApplyCreate,
- db: Session = Depends(get_db),
- user: DbUserContext = Depends(get_db_current_user),
- ) -> VehicleRechargeApplyRead:
- 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=VehicleRechargeApplyRead)
- def update_apply(
- id: str,
- payload: VehicleRechargeApplyUpdate,
- db: Session = Depends(get_db),
- user: DbUserContext = Depends(get_db_current_user),
- ) -> VehicleRechargeApplyRead:
- 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=VehicleRechargeApplyRead)
- def cancel_apply(
- id: str,
- db: Session = Depends(get_db),
- user: DbUserContext = Depends(get_db_current_user),
- ) -> VehicleRechargeApplyRead:
- 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)
- @record_router.get("/", response_model=VehicleRechargeRecordListResponse)
- def list_records(
- q: Optional[str] = Query(default=None),
- recharge_type: Optional[str] = Query(default=None, alias="rechargeType"),
- recharge_date_from: Optional[date] = Query(default=None, alias="rechargeDateFrom"),
- recharge_date_to: Optional[date] = Query(default=None, alias="rechargeDateTo"),
- gas_station: Optional[str] = Query(default=None, alias="gasStation"),
- apply_no: Optional[str] = Query(default=None, alias="applyNo"),
- 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),
- ) -> VehicleRechargeRecordListResponse:
- tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
- items, total = svc.list_records(
- db,
- tenant_no,
- user,
- q=q,
- recharge_type=recharge_type,
- recharge_date_from=recharge_date_from,
- recharge_date_to=recharge_date_to,
- gas_station=gas_station,
- apply_no=apply_no,
- page=page,
- page_size=page_size,
- )
- return VehicleRechargeRecordListResponse(
- items=items, total=total, page=page, pageSize=page_size
- )
- @record_router.get("/disburse-board", response_model=VehicleRechargeDisburseBoardListResponse)
- def list_disburse_board(
- q: Optional[str] = Query(default=None),
- recharge_type: Optional[str] = Query(default=None, alias="rechargeType"),
- 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"),
- recharge_date_from: Optional[date] = Query(default=None, alias="rechargeDateFrom"),
- recharge_date_to: Optional[date] = Query(default=None, alias="rechargeDateTo"),
- 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),
- ) -> VehicleRechargeDisburseBoardListResponse:
- tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
- items, total = svc.list_disburse_board(
- db,
- tenant_no,
- user,
- q=q,
- recharge_type=recharge_type,
- apply_status=apply_status,
- apply_date_from=apply_date_from,
- apply_date_to=apply_date_to,
- recharge_date_from=recharge_date_from,
- recharge_date_to=recharge_date_to,
- page=page,
- page_size=page_size,
- )
- return VehicleRechargeDisburseBoardListResponse(
- items=items, total=total, page=page, pageSize=page_size
- )
- @record_router.get("/{id}", response_model=VehicleRechargeRecordRead)
- def get_record(
- id: str,
- db: Session = Depends(get_db),
- user: DbUserContext = Depends(get_db_current_user),
- ) -> VehicleRechargeRecordRead:
- tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
- return svc.get_record(db, tenant_no, user, id)
- @record_router.post("/", response_model=VehicleRechargeRecordRead, status_code=status.HTTP_201_CREATED)
- def create_record(
- payload: VehicleRechargeRecordCreate,
- db: Session = Depends(get_db),
- user: DbUserContext = Depends(get_db_current_user),
- ) -> VehicleRechargeRecordRead:
- tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
- return svc.create_record(db, tenant_no, user, payload)
- @record_router.put("/{id}", response_model=VehicleRechargeRecordRead)
- def update_record(
- id: str,
- payload: VehicleRechargeRecordUpdate,
- db: Session = Depends(get_db),
- user: DbUserContext = Depends(get_db_current_user),
- ) -> VehicleRechargeRecordRead:
- tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
- return svc.update_record(db, tenant_no, user, id, payload)
- @record_router.delete("/{ids}", status_code=status.HTTP_204_NO_CONTENT)
- def delete_records(
- 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())
- record_ids = [item for item in ids.split(",") if item]
- svc.delete_records(db, tenant_no, user, record_ids)
|