db_inventory_site_token.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. """出入库单现场免登录 token"""
  2. from __future__ import annotations
  3. import secrets
  4. from app.core.config import settings
  5. from app.models.db_models import DbInboundOutbound
  6. def ensure_site_access_token(row: DbInboundOutbound) -> str:
  7. token = (row.site_access_token or "").strip()
  8. if not token:
  9. token = secrets.token_urlsafe(32)[:64]
  10. row.site_access_token = token
  11. return token
  12. def build_site_inventory_url(token: str) -> str:
  13. origin = (settings.PUBLIC_WEB_ORIGIN or "").rstrip("/")
  14. return f"{origin}/#/public/db/inventory/{token}"
  15. def build_site_transport_url(token: str) -> str:
  16. """运输计划现场链接(pl_transport_site_link,与地磅出入库单解耦)。"""
  17. origin = (settings.PUBLIC_WEB_ORIGIN or "").rstrip("/")
  18. return f"{origin}/#/public/pl/site/{token}"
  19. def site_link_fields_for_inventory(
  20. inventory: DbInboundOutbound | None,
  21. ) -> tuple[str | None, str | None]:
  22. if not inventory:
  23. return None, None
  24. token = (inventory.site_access_token or "").strip()
  25. if not token:
  26. return None, None
  27. return token, build_site_inventory_url(token)