fix: 海运贸易条款出站改用 TMS 的 transportTerms

销售卡片仍写贸易条款,查价请求不再用对不上的 tradeTerms。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-20 19:50:41 +08:00
co-authored by Cursor
parent 19acbb9156
commit 6140eaf932
3 changed files with 15 additions and 6 deletions
@@ -93,7 +93,11 @@ public class InquiryTmsQueryService {
if (items != null) { if (items != null) {
segment.put("containerItems", items); segment.put("containerItems", items);
} }
segment.put("tradeTerms", first(facts.get("贸易条款"), facts.get("trade_terms"), facts.get("tradeTerms"))); segment.put("transportTerms", first(
facts.get("贸易条款"),
facts.get("trade_terms"),
facts.get("transportTerms"),
facts.get("tradeTerms")));
} else if ("LAND".equals(line)) { } else if ("LAND".equals(line)) {
// 陆运不套空运包装/件数;分类和中港装载只在工单,mapper 不会放进出站。 // 陆运不套空运包装/件数;分类和中港装载只在工单,mapper 不会放进出站。
segment.putAll(TmsLandSegmentMapper.build(facts)); segment.putAll(TmsLandSegmentMapper.build(facts));
@@ -654,7 +658,8 @@ public class InquiryTmsQueryService {
if (blank(facts.get("箱型箱量"))) { if (blank(facts.get("箱型箱量"))) {
missing.add("箱型箱量"); missing.add("箱型箱量");
} }
if (blank(facts.get("贸易条款")) && blank(facts.get("trade_terms")) && blank(facts.get("tradeTerms"))) { if (blank(facts.get("贸易条款")) && blank(facts.get("trade_terms"))
&& blank(facts.get("transportTerms")) && blank(facts.get("tradeTerms"))) {
missing.add("贸易条款"); missing.add("贸易条款");
} }
return missing; return missing;
@@ -113,7 +113,8 @@ public final class TmsV2RequestMapper {
} }
put(target, "containerType", type); put(target, "containerType", type);
put(target, "containerQty", asInteger(qty)); put(target, "containerQty", asInteger(qty));
put(target, "tradeTerms", first(source, "tradeTerms", "贸易条款", "trade_terms")); // TMS 查询字段是 transportTerms。工单/卡片仍写「贸易条款」,这里只改出站名。
put(target, "transportTerms", first(source, "transportTerms", "tradeTerms", "贸易条款", "trade_terms"));
} }
/** /**
@@ -132,7 +132,7 @@ public class TmsV2RequestMapperTest {
} }
@Test @Test
public void seaSendsTradeTermsOmitsClass() { public void seaSendsTransportTermsOmitsClass() {
Map<String, Object> seg = new HashMap<>(); Map<String, Object> seg = new HashMap<>();
seg.put("origin", "上海"); seg.put("origin", "上海");
seg.put("destination", "洛杉矶"); seg.put("destination", "洛杉矶");
@@ -140,7 +140,8 @@ public class TmsV2RequestMapperTest {
seg.put("cargoQty", "20吨"); seg.put("cargoQty", "20吨");
seg.put("loadType", "整柜"); seg.put("loadType", "整柜");
seg.put("containerSpec", "1x40HQ"); seg.put("containerSpec", "1x40HQ");
seg.put("tradeTerms", "FOB"); // 测服 WO202609200019:工单仍是贸易条款,出站必须写成 transportTerms,不能写 tradeTerms。
seg.put("贸易条款", "4");
seg.put("运输分类", "Port to Port"); seg.put("运输分类", "Port to Port");
Map<String, Object> internal = new HashMap<>(); Map<String, Object> internal = new HashMap<>();
internal.put("transportMode", "SEA"); internal.put("transportMode", "SEA");
@@ -149,7 +150,9 @@ public class TmsV2RequestMapperTest {
Map<String, Object> body = TmsV2RequestMapper.quote(internal); Map<String, Object> body = TmsV2RequestMapper.quote(internal);
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<Map<String, Object>> segs = (List<Map<String, Object>>) body.get("segments"); List<Map<String, Object>> segs = (List<Map<String, Object>>) body.get("segments");
assertEquals("FOB", segs.get(0).get("tradeTerms")); assertEquals("4", segs.get(0).get("transportTerms"));
assertFalse(segs.get(0).containsKey("tradeTerms"));
assertFalse(segs.get(0).containsKey("贸易条款"));
assertFalse(segs.get(0).containsKey("运输分类")); assertFalse(segs.get(0).containsKey("运输分类"));
assertFalse(body.containsKey("运输分类")); assertFalse(body.containsKey("运输分类"));
} }