feat: add vehicle recharge approval pending approve reject disburse

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-09-26 20:56:14 +08:00
1 parent ea8c2c0362
commit f80a29fb8d
8 files changed
+15288 -12531

No files matched your search

+2
View File
@@ -6,6 +6,7 @@ from app.api.pl import (
base_data,
vehicle_fuel,
vehicle_recharge,
vehicle_recharge_approval,
vehicle_maintenance,
vehicle_urea,
transport_address,
@@ -55,6 +56,7 @@ pl_router.include_router(menu_badges.router)
# ETC/加油充值
pl_router.include_router(vehicle_recharge.apply_router)
pl_router.include_router(vehicle_recharge.record_router)
pl_router.include_router(vehicle_recharge_approval.approval_router)
pl_router.include_router(vehicle_fuel.router)
@@ -0,0 +1,90 @@
"""车辆充值审批 API"""
from typing import Optional
from fastapi import APIRouter, Depends, Query
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 (
VehicleRechargeApplyListResponse,
VehicleRechargeApplyRead,
VehicleRechargeOpinionBody,
VehicleRechargeRecordCreate,
)
from app.services import pl_vehicle_recharge_approval_service as approval_svc
approval_router = APIRouter(
prefix="/vehicle-recharge-approval", tags=["运输计划-ETC加油充值审批"]
)
@approval_router.get("/pending", response_model=VehicleRechargeApplyListResponse)
def list_pending(
page: int = Query(default=1, ge=1),
page_size: int = Query(default=20, ge=1, le=500, 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 = approval_svc.list_pending(
db, tenant_no, user, page=page, page_size=page_size
)
return VehicleRechargeApplyListResponse(
items=items, total=total, page=page, pageSize=page_size
)
@approval_router.get("/done", response_model=VehicleRechargeApplyListResponse)
def list_done(
page: int = Query(default=1, ge=1),
page_size: int = Query(default=20, ge=1, le=500, 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 = approval_svc.list_done(
db, tenant_no, user, page=page, page_size=page_size
)
return VehicleRechargeApplyListResponse(
items=items, total=total, page=page, pageSize=page_size
)
@approval_router.post("/{apply_id}/approve", response_model=VehicleRechargeApplyRead)
def approve_apply(
apply_id: str,
body: Optional[VehicleRechargeOpinionBody] = None,
db: Session = Depends(get_db),
user: DbUserContext = Depends(get_db_current_user),
) -> VehicleRechargeApplyRead:
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
opinion = body.opinion if body else None
return approval_svc.approve_apply(
db, tenant_no, user, apply_id, opinion=opinion
)
@approval_router.post("/{apply_id}/reject", response_model=VehicleRechargeApplyRead)
def reject_apply(
apply_id: str,
body: VehicleRechargeOpinionBody,
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 approval_svc.reject_apply(
db, tenant_no, user, apply_id, opinion=body.opinion
)
@approval_router.post("/{apply_id}/disburse", response_model=VehicleRechargeApplyRead)
def disburse_apply(
apply_id: str,
payload: VehicleRechargeRecordCreate,
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 approval_svc.disburse_apply(db, tenant_no, user, apply_id, payload)