落地陆运群内协同:按填写样例拉群并只列本单协同项,进群把私聊已抽到的字段带上。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-18 13:38:02 +08:00
co-authored by Cursor
parent be95d823a2
commit 982b3a2317
25 changed files with 1451 additions and 315 deletions
+10 -12
View File
@@ -4,8 +4,8 @@
本文件职责:核对卡通过后、建单查价前,确认当前运输类型的货物字段能拼出查价正文。
带去:运输类型、线路类别、始发/目的/品名/报价日期,以及该类型的体积重量或车型/数量;通关口岸有值才带。
出站类型/线路必须译成 TMS 6.1.1 英文枚举,线路键名 routeCategory。工单与卡片仍用中文。
中港整车不带车型/数量。车型/数量是一个字段,出站再拆。
禁止:把运输分类、中港装载方式放进出站;直连 TMS;改六态。
中港整车、中港零担/集拼出站类型都是 CHINA_HK。中港整车不带车型/数量。
禁止:把运输分类放进出站;直连 TMS;改六态。
线程:纯函数。
"""
@@ -16,20 +16,21 @@ import re
from typing import Any
from agent.schema.field_validate import apply_quote_date_default, normalize_facts
from agent.schema.land_options import canonicalize_hk_load
logger = logging.getLogger(__name__)
LCL_TYPES = frozenset({"国内运输拼车", "跨境集拼"})
FTL_TYPES = frozenset({"国内运输整车", "跨境整车"})
CUSTOMS_TYPES = frozenset({"跨境集拼", "跨境整车", "中港"})
FTL_TYPES = frozenset({"国内运输整车", "跨境整车", "中港零担/集拼"})
HK_FTL_TYPE = "中港整车"
CUSTOMS_TYPES = frozenset({"跨境集拼", "跨境整车", "中港整车", "中港零担/集拼"})
_TYPE_ENUM = {
"国内运输拼车": "DOMESTIC_LTL",
"国内运输整车": "DOMESTIC_FTL",
"跨境集拼": "CROSS_BORDER_LTL",
"跨境整车": "CROSS_BORDER_FTL",
"中港": "CHINA_HK",
"中港整车": "CHINA_HK",
"中港零担/集拼": "CHINA_HK",
}
_ROUTE_ENUM = {
"国内长途/零担": "DOMESTIC_LONG_LTL",
@@ -91,13 +92,12 @@ def assemble_land_query(facts: dict[str, Any] | None) -> dict[str, Any]:
"""
把已采集陆运字段拼成 TMS 查价参数。
不齐则 ok=False,missing 给销售补问。齐了也不带分类/中港装载。
不齐则 ok=False,missing 给销售补问。齐了也不带分类。
改了运输类型后,outbound 只带当前类型需要的键。
"""
src = apply_quote_date_default(
normalize_facts({str(k): v for k, v in dict(facts or {}).items() if v is not None})
)
# 选项键不走港口别名折叠,再从原文补回
raw = {str(k): str(v).strip() for k, v in dict(facts or {}).items() if v is not None}
land_type = (raw.get("运输类型") or src.get("运输类型") or "").strip()
route = (raw.get("线路类别") or src.get("线路类别") or "").strip()
@@ -106,7 +106,6 @@ def assemble_land_query(facts: dict[str, Any] | None) -> dict[str, Any]:
cargo = (src.get("品名") or "").strip()
quote_date = (src.get("报价日期") or "").strip()
customs = (raw.get("通关口岸") or src.get("通关口岸") or "").strip()
hk_load = canonicalize_hk_load(raw.get("中港装载方式") or src.get("中港装载方式") or "")
missing: list[str] = []
if not land_type:
@@ -141,10 +140,9 @@ def assemble_land_query(facts: dict[str, Any] | None) -> dict[str, Any]:
missing.append("毛重")
else:
outbound["weightKg"] = wgt
elif land_type == "中港" and hk_load != "零担/集拼":
# 中港整车(或尚未选定装载)不采集、不带出车型/数量
elif land_type == HK_FTL_TYPE:
pass
elif land_type in FTL_TYPES or land_type == "中港":
elif land_type in FTL_TYPES:
combo = (
src.get("车型/数量")
or raw.get("车型/数量")