feat(api): filter vehicle options by mineVehicles personnel

Limit GET /transport/vehicle to plates linked via pl_vehicle_personnel for the current user.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-09-27 18:36:28 +08:00
1 parent 0a9d5ba2ed
commit 48aef9f233
1 file changed
+18
+18
View File
@@ -443,6 +443,11 @@ def list_vehicles(
alias="excludeIneligibleCarrier",
description="排除资质不全或协议过期的承运商车辆",
),
mine_vehicles: Optional[bool] = Query(
default=None,
alias="mineVehicles",
description="仅返回当前用户关联驾押人员所挂靠车辆",
),
page: int = Query(default=1, ge=1),
page_size: int = Query(default=20, ge=1, le=500, alias="pageSize"),
db: Session = Depends(get_db),
@@ -455,6 +460,7 @@ def list_vehicles(
vehicleType=vehicle_type,
carrierId=carrier_id,
vehicleStatus=vehicle_status,
mineVehicles=mine_vehicles,
)
query = db.query(PlVehicle).filter(
PlVehicle.tenant_no == tenant_no,
@@ -483,6 +489,18 @@ def list_vehicles(
if column_filters:
query = query.filter(*column_filters)
mine_flag = _param_get(params, "mineVehicles", "mine_vehicles")
if mine_flag is True or (
mine_flag is not None
and str(mine_flag).strip().lower() in {"1", "true", "yes", "y"}
):
from app.services.pl_vehicle_mine_vehicles import license_plates_for_user_personnel
plates = license_plates_for_user_personnel(db, tenant_no, user.id)
if not plates:
return VehicleListResponse(total=0, list=[])
query = query.filter(PlVehicle.license_plate.in_(list(plates)))
# 车辆为主数据,列表不做 create_by 数据范围过滤
query = query.order_by(
case((PlVehicle.order_num.is_(None), 1), else_=0).asc(),