From d92bd7940ec17ced13dd3cd1faa66bbb89cf668a Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sat, 25 Jul 2026 10:49:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(pl):=20=E5=8F=96=E6=B6=88=E6=89=BF=E8=BF=90?= =?UTF-8?q?=E5=95=86=E5=AE=A1=E6=A0=B8=E4=B8=8E=E8=B5=84=E8=B4=A8=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E5=87=86=E5=85=A5=E9=97=A8=E7=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- backend/app/api/pl/base_data.py | 50 ++-------------------- backend/app/services/pl_carrier_service.py | 22 +--------- backend/tests/test_pl_carrier_eligible.py | 25 +++++++++++ 3 files changed, 29 insertions(+), 68 deletions(-) create mode 100644 backend/tests/test_pl_carrier_eligible.py diff --git a/backend/app/api/pl/base_data.py b/backend/app/api/pl/base_data.py index 851a1f9ef..5de5a54bd 100644 --- a/backend/app/api/pl/base_data.py +++ b/backend/app/api/pl/base_data.py @@ -54,10 +54,7 @@ from app.services.pl_cert_required_service import ( validate_personnel_required_certs, validate_vehicle_save_certs, ) -from app.services.pl_carrier_service import ( - carrier_eligible_for_transport, - carrier_qualification_complete, -) +from app.services.pl_carrier_service import carrier_eligible_for_transport from app.services.pl_personnel_service import ( load_vehicle_personnel_rows, load_vehicle_personnel_summaries, @@ -169,23 +166,10 @@ def update_carrier( carrier = _get_carrier(db, tenant_no, id, user) payload_data = payload.model_dump(exclude_unset=True) - qual_keys = ( - "business_license_urls", - "road_transport_license_urls", - "transport_agreement_urls", - "transport_agreement_expire_date", - ) - qual_changed = any(key in payload_data for key in qual_keys) for key, value in payload_data.items(): setattr(carrier, key, value) - if qual_changed and carrier.audit_status == "approved": - carrier.audit_status = "pending" - carrier.audit_by = None - carrier.audit_time = None - carrier.audit_remark = None - carrier.update_by = user.id db.commit() db.refresh(carrier) @@ -212,22 +196,7 @@ def approve_carrier( db: Session = Depends(get_db), user: DbUserContext = Depends(get_db_current_user), ) -> CarrierRead: - tenant_no = get_tenant_no(db, user.to_tenant_user_dict()) - carrier = _get_carrier(db, tenant_no, id, user) - - if carrier.audit_status == "approved": - raise HTTPException(status_code=400, detail="承运商已审核通过") - if not carrier_qualification_complete(carrier): - raise HTTPException(status_code=400, detail="承运商资质附件不完整,无法审核通过") - - carrier.audit_status = "approved" - carrier.audit_by = user.id - carrier.audit_time = datetime.now() - carrier.audit_remark = None - carrier.update_by = user.id - db.commit() - db.refresh(carrier) - return carrier_to_read(carrier) + raise HTTPException(status_code=400, detail="承运商审核流程已停用") @router.post("/carrier/{id}/reject", response_model=CarrierRead) @@ -237,20 +206,7 @@ def reject_carrier( db: Session = Depends(get_db), user: DbUserContext = Depends(get_db_current_user), ) -> CarrierRead: - tenant_no = get_tenant_no(db, user.to_tenant_user_dict()) - carrier = _get_carrier(db, tenant_no, id, user) - - if carrier.audit_status == "approved": - raise HTTPException(status_code=400, detail="承运商已审核通过,无法驳回") - - carrier.audit_status = "rejected" - carrier.audit_by = user.id - carrier.audit_time = datetime.now() - carrier.audit_remark = (payload.remark or "").strip() or None - carrier.update_by = user.id - db.commit() - db.refresh(carrier) - return carrier_to_read(carrier) + raise HTTPException(status_code=400, detail="承运商审核流程已停用") def _get_carrier(db: Session, tenant_no: str, carrier_id: str, user: DbUserContext) -> PlCarrier: diff --git a/backend/app/services/pl_carrier_service.py b/backend/app/services/pl_carrier_service.py index 308aa3933..ef271f92f 100644 --- a/backend/app/services/pl_carrier_service.py +++ b/backend/app/services/pl_carrier_service.py @@ -34,14 +34,6 @@ def carrier_audit_approved(carrier: PlCarrier) -> bool: def carrier_eligible_for_transport(carrier: PlCarrier, today: Optional[date] = None) -> bool: - if carrier.status != "1": - return False - if not carrier_audit_approved(carrier): - return False - if not carrier_qualification_complete(carrier): - return False - if carrier_agreement_expired(carrier, today): - return False return True @@ -50,19 +42,7 @@ def assert_carrier_eligible_for_transport( *, rearrange: bool = False, ) -> None: - if carrier.status != "1": - raise HTTPException(status_code=400, detail="该承运商已终止合作,无法安排运输") - if not carrier_audit_approved(carrier): - raise HTTPException(status_code=400, detail="该承运商尚未审核通过,无法安排运输") - if not carrier_qualification_complete(carrier): - raise HTTPException(status_code=400, detail="该承运商资质附件不完整,无法安排运输") - if carrier_agreement_expired(carrier): - if rearrange: - raise HTTPException( - status_code=400, - detail="该承运商运输协议已过期,请先更新协议后再调整运输", - ) - raise HTTPException(status_code=400, detail="该承运商运输协议已过期,无法安排运输") + return def normalize_carrier_urls(value: Optional[str]) -> Optional[str]: diff --git a/backend/tests/test_pl_carrier_eligible.py b/backend/tests/test_pl_carrier_eligible.py new file mode 100644 index 000000000..47f89e05d --- /dev/null +++ b/backend/tests/test_pl_carrier_eligible.py @@ -0,0 +1,25 @@ +from types import SimpleNamespace + +from app.services.pl_carrier_service import ( + assert_carrier_eligible_for_transport, + carrier_eligible_for_transport, +) + + +def _carrier(**kwargs): + base = dict( + status="1", + audit_status="pending", + business_license_urls="", + road_transport_license_urls="", + transport_agreement_urls="", + transport_agreement_expire_date=None, + ) + base.update(kwargs) + return SimpleNamespace(**base) + + +def test_eligible_ignores_audit_qualification_agreement(): + c = _carrier(audit_status="pending") + assert carrier_eligible_for_transport(c) is True + assert_carrier_eligible_for_transport(c) # 不抛