This commit is contained in:
zlwu committed 2026-07-12 17:55:11 +08:00
1 parent c2cba3e668
commit 2142b33cfa
24 files changed
+4834 -3684

No files matched your search

+42 -6
View File
@@ -26,6 +26,7 @@ from app.schemas.pl import (
CarrierRead,
CarrierUpdate,
carrier_to_read,
CertRead,
DriverCreate,
DriverListResponse,
DriverRead,
@@ -45,6 +46,7 @@ from app.schemas.pl import (
from app.services.pl_cert_service import (
certs_to_read,
list_owner_certs,
list_owner_certs_batch,
nearest_expire_date,
save_owner_certs,
)
@@ -276,12 +278,16 @@ def _vehicle_to_read(
vehicle: PlVehicle,
summary: Optional[str] = None,
default_driver_name: Optional[str] = None,
*,
cert_list: Optional[list[CertRead]] = None,
) -> VehicleRead:
data = VehicleRead.model_validate(vehicle)
if summary is not None:
data.personnel_summary = summary
if default_driver_name is not None:
data.default_driver_name = default_driver_name
if cert_list is not None:
data.cert_list = cert_list
return data
@@ -296,7 +302,7 @@ def _vehicle_to_detail(
)
base = _vehicle_to_read(vehicle, summary, default_name)
return VehicleDetailRead(
**base.model_dump(by_alias=False),
**base.model_dump(by_alias=False, exclude={"cert_list"}),
personnel_list=personnel_list,
cert_list=cert_list,
)
@@ -373,8 +379,15 @@ def list_vehicles(
summaries = load_vehicle_personnel_summaries(
db, tenant_no, [v.id for v in vehicles]
)
certs_by_owner = list_owner_certs_batch(
db, tenant_no, "vehicle", [v.id for v in vehicles]
)
items = [
_vehicle_to_read(v, *summaries.get(v.id, ("", None)))
_vehicle_to_read(
v,
*summaries.get(v.id, ("", None)),
cert_list=certs_to_read(certs_by_owner.get(v.id, [])),
)
for v in vehicles
]
return VehicleListResponse(total=len(items), list=items)
@@ -385,10 +398,17 @@ def list_vehicles(
summaries = load_vehicle_personnel_summaries(
db, tenant_no, [v.id for v in vehicles]
)
certs_by_owner = list_owner_certs_batch(
db, tenant_no, "vehicle", [v.id for v in vehicles]
)
return VehicleListResponse(
total=total,
list=[
_vehicle_to_read(v, *summaries.get(v.id, ("", None)))
_vehicle_to_read(
v,
*summaries.get(v.id, ("", None)),
cert_list=certs_to_read(certs_by_owner.get(v.id, [])),
)
for v in vehicles
],
)
@@ -591,11 +611,17 @@ def _get_vehicle(db: Session, tenant_no: str, vehicle_id: str, user: DbUserConte
def _personnel_to_read(
db: Session, tenant_no: str, personnel: PlPersonnel
db: Session,
tenant_no: str,
personnel: PlPersonnel,
*,
cert_list: Optional[list[CertRead]] = None,
) -> PersonnelRead:
nearest = nearest_expire_date(db, tenant_no, "personnel", personnel.id)
data = PersonnelRead.model_validate(personnel)
data.nearest_expire_date = nearest
if cert_list is not None:
data.cert_list = cert_list
return data
@@ -607,7 +633,7 @@ def _personnel_to_detail(
list_owner_certs(db, tenant_no, "personnel", personnel.id)
)
return PersonnelDetailRead(
**base.model_dump(by_alias=False),
**base.model_dump(by_alias=False, exclude={"cert_list"}),
cert_list=cert_list,
)
@@ -653,9 +679,19 @@ def list_personnel(
total = query.count()
offset = (page - 1) * page_size
rows = query.offset(offset).limit(page_size).all()
personnel_ids = [p.id for p in rows]
certs_by_owner = list_owner_certs_batch(db, tenant_no, "personnel", personnel_ids)
return PersonnelListResponse(
total=total,
list=[_personnel_to_read(db, tenant_no, p) for p in rows],
list=[
_personnel_to_read(
db,
tenant_no,
p,
cert_list=certs_to_read(certs_by_owner.get(p.id, [])),
)
for p in rows
],
)