feat(pl): add helper for user personnel vehicle plates
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
6f6793d7d1
commit
a903206dbe
2 files changed
+138
No files matched your search
@@ -0,0 +1,40 @@
|
||||
"""当前用户关联驾押人员所挂靠车辆的车牌集合。"""
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Optional, Set
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.models.pl_models import PlVehicle, PlVehiclePersonnel
|
||||
from app.services.pl_driver_plan_service import resolve_personnel_for_user
|
||||
|
||||
|
||||
def license_plates_for_user_personnel(
|
||||
db: Session, tenant_no: str, user_id: str
|
||||
) -> Set[str]:
|
||||
personnel = resolve_personnel_for_user(db, tenant_no=tenant_no, user_id=user_id)
|
||||
if not personnel:
|
||||
return set()
|
||||
rows = (
|
||||
db.query(PlVehicle.license_plate)
|
||||
.join(
|
||||
PlVehiclePersonnel,
|
||||
PlVehiclePersonnel.vehicle_id == PlVehicle.id,
|
||||
)
|
||||
.filter(
|
||||
PlVehiclePersonnel.personnel_id == personnel.id,
|
||||
PlVehiclePersonnel.tenant_no == tenant_no,
|
||||
PlVehiclePersonnel.del_flag == 0,
|
||||
PlVehicle.tenant_no == tenant_no,
|
||||
PlVehicle.del_flag == 0,
|
||||
)
|
||||
.all()
|
||||
)
|
||||
return {str(r[0]).strip() for r in rows if r and r[0] and str(r[0]).strip()}
|
||||
|
||||
|
||||
def resolve_personnel_id_for_user(
|
||||
db: Session, tenant_no: str, user_id: str
|
||||
) -> Optional[str]:
|
||||
p = resolve_personnel_for_user(db, tenant_no=tenant_no, user_id=user_id)
|
||||
return p.id if p else None
|
||||
@@ -0,0 +1,98 @@
|
||||
"""mineVehicles:车辆人员归属过滤与写校验。"""
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date, datetime
|
||||
from types import SimpleNamespace
|
||||
|
||||
import pytest
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
from app.models.pl_models import (
|
||||
PlPersonnel,
|
||||
PlVehicle,
|
||||
PlVehiclePersonnel,
|
||||
PlVehicleRechargeApply,
|
||||
)
|
||||
|
||||
|
||||
def _make_session():
|
||||
engine = create_engine("sqlite://")
|
||||
for table in (
|
||||
PlVehicle.__table__,
|
||||
PlPersonnel.__table__,
|
||||
PlVehiclePersonnel.__table__,
|
||||
PlVehicleRechargeApply.__table__,
|
||||
):
|
||||
table.create(engine)
|
||||
return sessionmaker(bind=engine)()
|
||||
|
||||
|
||||
def _user(uid: str = "u-driver") -> SimpleNamespace:
|
||||
return SimpleNamespace(id=uid, name="司机甲", dept_id="d1", role="driver", tenant_no="t1")
|
||||
|
||||
|
||||
def _seed_person_vehicle(db, *, user_id="u-driver", plate="鄂A11111", vehicle_id="veh-a"):
|
||||
db.add(
|
||||
PlVehicle(
|
||||
id=vehicle_id,
|
||||
vehicle_type="self",
|
||||
license_plate=plate,
|
||||
tenant_no="t1",
|
||||
create_dept_id="d1",
|
||||
del_flag=0,
|
||||
)
|
||||
)
|
||||
db.add(
|
||||
PlPersonnel(
|
||||
id="p-1",
|
||||
personnel_name="司机甲",
|
||||
personnel_type="driver",
|
||||
personnel_affiliation="self",
|
||||
status="1",
|
||||
sys_user_id=user_id,
|
||||
tenant_no="t1",
|
||||
create_dept_id="d1",
|
||||
del_flag=0,
|
||||
)
|
||||
)
|
||||
db.add(
|
||||
PlVehiclePersonnel(
|
||||
id="vp-1",
|
||||
vehicle_id=vehicle_id,
|
||||
personnel_id="p-1",
|
||||
role="driver",
|
||||
is_default=1,
|
||||
tenant_no="t1",
|
||||
create_dept_id="d1",
|
||||
del_flag=0,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def test_license_plates_for_user_personnel():
|
||||
from app.services.pl_vehicle_mine_vehicles import license_plates_for_user_personnel
|
||||
|
||||
db = _make_session()
|
||||
_seed_person_vehicle(db)
|
||||
db.add(
|
||||
PlVehicle(
|
||||
id="veh-b",
|
||||
vehicle_type="self",
|
||||
license_plate="鄂A22222",
|
||||
tenant_no="t1",
|
||||
create_dept_id="d1",
|
||||
del_flag=0,
|
||||
)
|
||||
)
|
||||
db.commit()
|
||||
plates = license_plates_for_user_personnel(db, "t1", "u-driver")
|
||||
assert plates == {"鄂A11111"}
|
||||
|
||||
|
||||
def test_license_plates_empty_when_no_personnel():
|
||||
from app.services.pl_vehicle_mine_vehicles import license_plates_for_user_personnel
|
||||
|
||||
db = _make_session()
|
||||
db.commit()
|
||||
assert license_plates_for_user_personnel(db, "t1", "u-nobody") == set()
|
||||
Reference in new issue
Block a user