陆运多条线路按段展示 TMS 费用名和时效,选定后再写回该条成本。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-22 18:28:29 +08:00
co-authored by Cursor
parent e769eb9c1d
commit 49faa35f47
23 changed files with 2323 additions and 55 deletions
@@ -158,6 +158,52 @@ def h5_air_route_pick(token: str, index: int = Form(default=-1)) -> HTMLResponse
return HTMLResponse(render_air_route_ok())
@router.get("/land-routes/{token}", response_class=HTMLResponse)
def h5_land_route_open(token: str) -> HTMLResponse:
"""打开陆运选线路页。身份只认 token。"""
from agent.channel.h5.land_route_page import expired_land_route_page, render_land_route_page
from agent.channel.h5.land_route_store import lookup_land_route_token
rec = lookup_land_route_token(token)
if rec is None:
return HTMLResponse(expired_land_route_page(), status_code=410)
return HTMLResponse(render_land_route_page(rec))
@router.post("/land-routes/{token}", response_class=HTMLResponse)
def h5_land_route_pick(token: str, index: int = Form(default=-1)) -> HTMLResponse:
"""
选定陆运线路。请求线程只验 token、入出站队列,不查 TMS、不跑整图。
"""
from agent.channel.h5.land_route_page import (
expired_land_route_page,
render_land_route_ok,
render_land_route_page,
)
from agent.channel.h5.land_route_store import lookup_land_route_token
from agent.channel.queue import get_message_store
from agent.policy.land_text_flow import get_land_text_flow
rec = lookup_land_route_token(token)
if rec is None:
return HTMLResponse(expired_land_route_page(), status_code=410)
sender_id = str(rec.get("sender_id") or "").strip()
if not sender_id:
return HTMLResponse(expired_land_route_page(), status_code=410)
def reply(text: str, extra=None) -> None:
store = get_message_store()
store.enqueue_outbound(touser=sender_id, content=text, payload=dict(extra or {}))
phase = get_land_text_flow().select_land_route(
sender_id=sender_id, index=int(index), reply=reply
)
logger.info("h5.land_route pick sender=%s phase=%s idx=%s", sender_id, phase, index)
if phase in {"route_expired", "route_invalid"}:
return HTMLResponse(render_land_route_page(rec), status_code=400)
return HTMLResponse(render_land_route_ok())
@router.get("/{token}")
def h5_open(token: str) -> dict[str, Any]:
"""