Selaa lähdekoodia

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>
zlwu 1 kuukausi sitten
vanhempi
commit
48aef9f233
1 muutettua tiedostoa jossa 18 lisäystä ja 0 poistoa
  1. 18 0
      backend/app/api/pl/base_data.py

+ 18 - 0
backend/app/api/pl/base_data.py

@@ -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(),