feat: 海运查价带贸易条款且不带运输分类

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-20 17:47:12 +08:00
co-authored by Cursor
parent 27aeebb593
commit 3a6884e27d
6 changed files with 67 additions and 5 deletions
@@ -93,6 +93,7 @@ public class InquiryTmsQueryService {
if (items != null) {
segment.put("containerItems", items);
}
segment.put("tradeTerms", first(facts.get("贸易条款"), facts.get("trade_terms"), facts.get("tradeTerms")));
} else if ("LAND".equals(line)) {
// 陆运不套空运包装/件数;分类和中港装载只在工单,mapper 不会放进出站。
segment.putAll(TmsLandSegmentMapper.build(facts));
@@ -623,8 +624,8 @@ public class InquiryTmsQueryService {
* 对不上机场也要查,TMS 自己回无价或 1003。
*/
/**
* 海运出站必填:工单号、报价日期、起运/目的名称、品名、货量、整柜或拼柜、箱型箱量。
* 不要求机场三字码、件数、重量、体积、包装。
* 海运出站必填:工单号、报价日期、起运/目的名称、品名、货量、整柜或拼柜、箱型箱量、贸易条款。
* 不要求机场三字码、件数、重量、体积、包装;运输分类不进出站。
*/
private static List<String> missingSeaQuery(String workOrderNo, String quoteDate,
Map<String, Object> segment, Map<String, Object> facts) {
@@ -649,6 +650,9 @@ public class InquiryTmsQueryService {
if (blank(facts.get("箱型箱量"))) {
missing.add("箱型箱量");
}
if (blank(facts.get("贸易条款")) && blank(facts.get("trade_terms")) && blank(facts.get("tradeTerms"))) {
missing.add("贸易条款");
}
return missing;
}
@@ -113,6 +113,7 @@ public final class TmsV2RequestMapper {
}
put(target, "containerType", type);
put(target, "containerQty", asInteger(qty));
put(target, "tradeTerms", first(source, "tradeTerms", "贸易条款", "trade_terms"));
}
/**
@@ -130,4 +130,27 @@ public class TmsV2RequestMapperTest {
assertFalse(segs.get(0).containsKey("landRouteCategory"));
assertFalse(segs.get(0).containsKey("landClass"));
}
@Test
public void seaSendsTradeTermsOmitsClass() {
Map<String, Object> seg = new HashMap<>();
seg.put("origin", "上海");
seg.put("destination", "洛杉矶");
seg.put("cargoName", "普货");
seg.put("cargoQty", "20吨");
seg.put("loadType", "整柜");
seg.put("containerSpec", "1x40HQ");
seg.put("tradeTerms", "FOB");
seg.put("运输分类", "Port to Port");
Map<String, Object> internal = new HashMap<>();
internal.put("transportMode", "SEA");
internal.put("quoteDate", "2026-09-15");
internal.put("segments", Collections.singletonList(seg));
Map<String, Object> body = TmsV2RequestMapper.quote(internal);
@SuppressWarnings("unchecked")
List<Map<String, Object>> segs = (List<Map<String, Object>>) body.get("segments");
assertEquals("FOB", segs.get(0).get("tradeTerms"));
assertFalse(segs.get(0).containsKey("运输分类"));
assertFalse(body.containsKey("运输分类"));
}
}