From baa4d81be9fb8c8897897fae5920373d6baf529f Mon Sep 17 00:00:00 2001 From: jillion <439912596@qq.com> Date: Thu, 8 Oct 2026 18:30:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=86=E8=BF=90=E4=B8=AD=E6=B8=AF=E6=95=B4?= =?UTF-8?q?=E8=BD=A6=E5=92=8C=E4=B8=AD=E6=B8=AF=E9=9B=B6=E6=8B=85/?= =?UTF-8?q?=E9=9B=86=E6=8B=BC=E6=9F=A5=E4=BB=B7=E6=97=B6=EF=BC=8CTMS=20?= =?UTF-8?q?=E5=8F=AA=E8=AE=A4=E3=80=8C=E4=B8=AD=E6=B8=AF=E3=80=8D=E3=80=82?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E4=BB=8D=E4=BF=9D=E7=95=99=E7=BB=86=E7=B1=BB?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E6=8A=8A=E4=B8=A4=E7=B1=BB=E5=8E=9F?= =?UTF-8?q?=E6=A0=B7=E4=BC=A0=E5=87=BA=E5=8E=BB=E5=AF=B9=E4=B8=8D=E4=B8=8A?= =?UTF-8?q?=E8=BF=90=E4=BB=B7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- inquiry-agent/agent/schema/tms_land_query.py | 10 +++++----- inquiry-agent/tests/test_tms_land_query.py | 3 ++- .../jeecg/modules/inquiry/tms/TmsLandEnumMapper.java | 10 ++++++++-- .../modules/inquiry/tms/TmsLandSegmentMapper.java | 4 ++-- .../jeecg/modules/inquiry/tms/TmsV2RequestMapper.java | 2 +- .../modules/inquiry/tms/TmsLandEnumMapperTest.java | 7 +++++++ .../modules/inquiry/tms/TmsLandSegmentMapperTest.java | 4 ++-- 7 files changed, 27 insertions(+), 13 deletions(-) diff --git a/inquiry-agent/agent/schema/tms_land_query.py b/inquiry-agent/agent/schema/tms_land_query.py index 4880785..c283fc7 100644 --- a/inquiry-agent/agent/schema/tms_land_query.py +++ b/inquiry-agent/agent/schema/tms_land_query.py @@ -3,8 +3,8 @@ 本文件职责:核对卡通过后、建单查价前,确认当前运输类型的货物字段能拼出查价正文。 带去:运输类型、线路类别、始发/目的/品名/报价日期,以及该类型的体积重量或车型/数量;通关口岸有值才带。 -出站类型/线路必须译成 TMS 6.1.1 英文枚举,线路键名 routeCategory。工单与卡片仍用中文。 -中港整车、中港零担/集拼出站类型都是 CHINA_HK。中港整车不带车型/数量。 +出站类型/线路译成 TMS 用的值,线路键名 routeCategory。工单与卡片仍用销售中文。 +中港整车、中港零担/集拼出站类型都只写「中港」。中港整车不带车型/数量。 禁止:把运输分类放进出站;直连 TMS;改六态。 线程:纯函数。 """ @@ -29,8 +29,8 @@ _TYPE_ENUM = { "国内运输整车": "DOMESTIC_FTL", "跨境集拼": "CROSS_BORDER_LTL", "跨境整车": "CROSS_BORDER_FTL", - "中港整车": "CHINA_HK", - "中港零担/集拼": "CHINA_HK", + "中港整车": "中港", + "中港零担/集拼": "中港", } _ROUTE_ENUM = { "国内长途/零担": "DOMESTIC_LONG_LTL", @@ -45,7 +45,7 @@ _TAIL_QTY = re.compile(r"^(.*?)[\s,,]+(\d+)\s*(台|辆)?$") def tms_land_type_code(raw: str) -> str: - """销售中文运输类型 → TMS 6.1.1 landTransportType。对不上空串。""" + """销售中文运输类型 → 查价 landTransportType。中港两类都是「中港」。对不上空串。""" text = (raw or "").strip() if text in _TYPE_ENUM: return _TYPE_ENUM[text] diff --git a/inquiry-agent/tests/test_tms_land_query.py b/inquiry-agent/tests/test_tms_land_query.py index 4e2d75d..a5ce6e0 100644 --- a/inquiry-agent/tests/test_tms_land_query.py +++ b/inquiry-agent/tests/test_tms_land_query.py @@ -30,7 +30,7 @@ class TmsLandQueryTest(unittest.TestCase): got = assemble_land_query(facts) self.assertTrue(got["ok"]) out = got["outbound"] - self.assertEqual(out["landTransportType"], "CHINA_HK") + self.assertEqual(out["landTransportType"], "中港") self.assertEqual(out["routeCategory"], "SOUTHEAST_ASIA") self.assertNotIn("landRouteCategory", out) self.assertEqual(out["vehicleType"], "9米6") @@ -52,6 +52,7 @@ class TmsLandQueryTest(unittest.TestCase): got = assemble_land_query(facts) self.assertTrue(got["ok"]) out = got["outbound"] + self.assertEqual(out["landTransportType"], "中港") self.assertNotIn("vehicleType", out) self.assertNotIn("quantity", out) diff --git a/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsLandEnumMapper.java b/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsLandEnumMapper.java index e010535..69d6296 100644 --- a/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsLandEnumMapper.java +++ b/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsLandEnumMapper.java @@ -4,6 +4,7 @@ package org.jeecg.modules.inquiry.tms; * 陆运运输类型 / 线路类别出站:产品要求原文直传,不再翻成 TMS 英文枚举。 *

* 职责:统一 trim;空串表示未填。工单/卡片/拉人本来就是中文,出站与之一致。 + * 中港整车、中港零担/集拼查价只传「中港」,工单仍留细类。 * 禁止:再把「跨境整车」写成 CROSS_BORDER_FTL;把运输分类、中港装载方式塞进出站。 * 历史英文码若仍传入,原样放过(兼容旧快照),不做双向翻译。 */ @@ -14,10 +15,15 @@ public final class TmsLandEnumMapper { /** * @param raw 销售中文(或历史英文码) - * @return trim 后原文;空则 "" + * @return 中港两类收成「中港」;其余 trim 后原文;空则 "" */ public static String transportType(String raw) { - return trimOrEmpty(raw); + String text = trimOrEmpty(raw); + if ("中港整车".equals(text) || "中港零担/集拼".equals(text)) { + // zhonggang: 两类细类查价都只传「中港」 + return "中港"; + } + return text; } /** diff --git a/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsLandSegmentMapper.java b/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsLandSegmentMapper.java index 2acbf5f..ccc7d81 100644 --- a/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsLandSegmentMapper.java +++ b/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsLandSegmentMapper.java @@ -18,8 +18,8 @@ import java.util.regex.Pattern; * 职责:把工单 facts 里的中文键写成 TMS 段;运输分类只留在工单,不进出站。 * 拼车/跨境集拼带体积重量;国内整车/跨境整车/中港零担带「车型/数量」一项再拆成出站车型与台数; * 中港整车不带车型/数量。通关口岸有值才放。 - * 中港整车、中港零担/集拼:出站类型仍用销售中文「中港整车」「中港零担/集拼」(产品要求不做英文枚举映射)。 - * 类型/线路键名仍是 landTransportType / routeCategory,值用中文原文。 + * 中港整车、中港零担/集拼:出站 landTransportType 只写「中港」,工单事实仍留细类。 + * 类型/线路键名仍是 landTransportType / routeCategory。除中港两类外,值用中文原文。 * 禁止:按空运要包装件数;把分类当查价条件;直连 TMS;再把中文翻成 CROSS_BORDER_*。 */ public final class TmsLandSegmentMapper { diff --git a/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsV2RequestMapper.java b/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsV2RequestMapper.java index cd891e6..2fbb6de 100644 --- a/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsV2RequestMapper.java +++ b/inquiry-api/jeecg-module-inquiry/src/main/java/org/jeecg/modules/inquiry/tms/TmsV2RequestMapper.java @@ -151,7 +151,7 @@ public final class TmsV2RequestMapper { } /** - * 陆运出站:类型+线路用销售中文原文(产品要求不做英文枚举映射);线路字段名是 routeCategory。 + * 陆运出站:类型+线路用销售中文;中港整车、中港零担/集拼收成「中港」。线路字段名是 routeCategory。 * 分类和中港装载即使误放在 source 也不抄走。 */ private static void applyLandFields(Map source, Map target) { diff --git a/inquiry-api/jeecg-module-inquiry/src/test/java/org/jeecg/modules/inquiry/tms/TmsLandEnumMapperTest.java b/inquiry-api/jeecg-module-inquiry/src/test/java/org/jeecg/modules/inquiry/tms/TmsLandEnumMapperTest.java index 8264cee..a1bc73b 100644 --- a/inquiry-api/jeecg-module-inquiry/src/test/java/org/jeecg/modules/inquiry/tms/TmsLandEnumMapperTest.java +++ b/inquiry-api/jeecg-module-inquiry/src/test/java/org/jeecg/modules/inquiry/tms/TmsLandEnumMapperTest.java @@ -27,6 +27,13 @@ public class TmsLandEnumMapperTest { assertEquals("", TmsLandEnumMapper.routeCategory(" ")); } + @Test + public void hkTypesCollapseToZhonggang() { + assertEquals("中港", TmsLandEnumMapper.transportType("中港整车")); + assertEquals("中港", TmsLandEnumMapper.transportType("中港零担/集拼")); + assertEquals("中港集拼", TmsLandEnumMapper.transportType("中港集拼")); + } + @Test public void legacyEnglishCodesPassThrough() { assertEquals("DOMESTIC_LTL", TmsLandEnumMapper.transportType("DOMESTIC_LTL")); diff --git a/inquiry-api/jeecg-module-inquiry/src/test/java/org/jeecg/modules/inquiry/tms/TmsLandSegmentMapperTest.java b/inquiry-api/jeecg-module-inquiry/src/test/java/org/jeecg/modules/inquiry/tms/TmsLandSegmentMapperTest.java index 687a919..eac1d48 100644 --- a/inquiry-api/jeecg-module-inquiry/src/test/java/org/jeecg/modules/inquiry/tms/TmsLandSegmentMapperTest.java +++ b/inquiry-api/jeecg-module-inquiry/src/test/java/org/jeecg/modules/inquiry/tms/TmsLandSegmentMapperTest.java @@ -46,7 +46,7 @@ public class TmsLandSegmentMapperTest { facts.put("车型/数量", "9米6/1"); facts.put("体积", "99"); Map seg = TmsLandSegmentMapper.build(facts); - assertEquals("中港零担/集拼", seg.get("landTransportType")); + assertEquals("中港", seg.get("landTransportType")); assertEquals("9米6", seg.get("vehicleType")); assertNull(seg.get("volumeCbm")); assertFalse(seg.containsKey("hkLoadType")); @@ -62,7 +62,7 @@ public class TmsLandSegmentMapperTest { facts.put("目的港", "香港"); facts.put("品名", "衣服"); Map seg = TmsLandSegmentMapper.build(facts); - assertEquals("中港整车", seg.get("landTransportType")); + assertEquals("中港", seg.get("landTransportType")); assertNull(seg.get("vehicleType")); assertNull(seg.get("quantity")); java.util.List missing = TmsLandSegmentMapper.missingQuery(