| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- """运输计划现场链接读模型"""
- from __future__ import annotations
- import json
- from sqlalchemy.orm import Session
- from app.models.pl_models import PlTransportSiteLink
- from app.schemas.pl.transport import TransportSiteLinkRead
- from app.services.db_inventory_site_token import build_site_transport_url
- def build_transport_site_link_read(
- db: Session,
- *,
- plan_product_id: str,
- product_name: str,
- site_link_id: str,
- plan_no: str,
- business_type: str,
- site_access_token: str | None = None,
- ) -> TransportSiteLinkRead:
- token = (site_access_token or "").strip()
- if not token and site_link_id:
- row = (
- db.query(PlTransportSiteLink)
- .filter(
- PlTransportSiteLink.id == site_link_id,
- PlTransportSiteLink.del_flag == 0,
- )
- .first()
- )
- if row:
- token = (row.site_access_token or "").strip()
- site_url = build_site_transport_url(token) if token else None
- return TransportSiteLinkRead(
- plan_product_id=plan_product_id,
- product_name=product_name,
- site_link_id=site_link_id,
- plan_no=plan_no,
- business_type=business_type,
- site_access_token=token or None,
- site_url=site_url,
- )
- def build_transport_site_link_read_from_row(row: PlTransportSiteLink, product_name: str = "") -> TransportSiteLinkRead:
- token = (row.site_access_token or "").strip()
- return TransportSiteLinkRead(
- plan_product_id=row.plan_product_id,
- product_name=product_name or row.product or "",
- site_link_id=row.id,
- plan_no=row.plan_no or "",
- business_type=row.business_type,
- site_access_token=token or None,
- site_url=build_site_transport_url(token) if token else None,
- site_feedback_remark=row.site_feedback_remark,
- site_feedback_images=_parse_feedback_images(row.site_feedback_images),
- site_feedback_time=row.site_feedback_time,
- )
- def _parse_feedback_images(raw: str | None) -> list[str]:
- if not raw:
- return []
- try:
- parsed = json.loads(raw)
- if isinstance(parsed, list):
- return [str(item) for item in parsed if item]
- except (TypeError, json.JSONDecodeError):
- pass
- return [part.strip() for part in raw.split(",") if part.strip()]
|