From 785528218ab1accfb7791930d95a98df4cd900d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Wed, 19 Nov 2025 12:40:03 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=B0=A8=EB=9F=89=EA=B8=B0=EB=B3=B8?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20request=20=EA=B5=AC=EC=84=B1=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VehicleInterfaceController.java | 14 +++---- .../model/basic/BasicRequest.java | 40 ++++++++++++------- .../model/basic/CarBassMatterInqireVO.java | 12 ++++-- .../interfaceapp/service/RequestEnricher.java | 20 ++++++++-- 4 files changed, 56 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/vmis/interfaceapp/controller/VehicleInterfaceController.java b/src/main/java/com/vmis/interfaceapp/controller/VehicleInterfaceController.java index fa500a4..053879c 100644 --- a/src/main/java/com/vmis/interfaceapp/controller/VehicleInterfaceController.java +++ b/src/main/java/com/vmis/interfaceapp/controller/VehicleInterfaceController.java @@ -111,13 +111,13 @@ public class VehicleInterfaceController { name = "기본사항조회 예제", value = """ { - "data": [ - { - "VHRNO": "12가3456", - "LEVY_STDDE": "20250101", - "VIN": "KMHAB812345678901" - } - ] + "data": [{ + "record": [{ + "LEVY_STDDE": "20250101", + "VHRNO": "12가3456", + "VIN": null + }] + }] } """ ) diff --git a/src/main/java/com/vmis/interfaceapp/model/basic/BasicRequest.java b/src/main/java/com/vmis/interfaceapp/model/basic/BasicRequest.java index 4c44665..5acb31f 100644 --- a/src/main/java/com/vmis/interfaceapp/model/basic/BasicRequest.java +++ b/src/main/java/com/vmis/interfaceapp/model/basic/BasicRequest.java @@ -43,21 +43,9 @@ public class BasicRequest { @JsonProperty("CHARGER_NM") private String chargerNm; - @Schema(description = "부과기준일", example = "20250101") - @JsonProperty("LEVY_STDDE") - private String levyStdde; - - @Schema(description = "조회구분코드 (자동설정: VHRNO not null → 3:자동차번호, VIN not null → 2:차대번호)") - @JsonProperty("INQIRE_SE_CODE") - private String inqireSeCode; - - @Schema(description = "자동차등록번호", example = "12가3456") - @JsonProperty("VHRNO") - private String vhrno; - - @Schema(description = "차대번호", example = "KMHAB812345678901") - @JsonProperty("VIN") - private String vin; + @Schema(description = "조회 대상 record 배열") + @JsonProperty("record") + private java.util.List record; /* // 추가 항목 (명세 샘플 기준) @@ -87,4 +75,26 @@ public class BasicRequest { private String detailExpression; */ + @JsonInclude(JsonInclude.Include.NON_NULL) + @Getter + @Setter + @Schema(name = "BasicRequest.Record", description = "기본사항 요청 record 항목") + public static class Record { + @Schema(description = "부과기준일", example = "20250101") + @JsonProperty("LEVY_STDDE") + private String levyStdde; + + @Schema(description = "조회구분코드 (자동설정: VHRNO not null → 3:자동차번호, VIN not null → 2:차대번호)") + @JsonProperty("INQIRE_SE_CODE") + private String inqireSeCode; + + @Schema(description = "자동차등록번호", example = "12가3456") + @JsonProperty("VHRNO") + private String vhrno; + + @Schema(description = "차대번호", example = "KMHAB812345678901") + @JsonProperty("VIN") + private String vin; + } + } diff --git a/src/main/java/com/vmis/interfaceapp/model/basic/CarBassMatterInqireVO.java b/src/main/java/com/vmis/interfaceapp/model/basic/CarBassMatterInqireVO.java index 07400cf..701d35e 100644 --- a/src/main/java/com/vmis/interfaceapp/model/basic/CarBassMatterInqireVO.java +++ b/src/main/java/com/vmis/interfaceapp/model/basic/CarBassMatterInqireVO.java @@ -23,6 +23,10 @@ public class CarBassMatterInqireVO { // ==== Static factory/mapping methods (moved from Service) ==== public static CarBassMatterInqireVO fromRequest(BasicRequest request) { + BasicRequest.Record first = null; + if (request != null && request.getRecord() != null && !request.getRecord().isEmpty()) { + first = request.getRecord().get(0); + } return CarBassMatterInqireVO.builder() .infoSysId(request.getInfoSysId()) .infoSysIp(request.getInfoSysIp()) @@ -31,10 +35,10 @@ public class CarBassMatterInqireVO { .chargerId(request.getChargerId()) .chargerIp(request.getChargerIp()) .chargerNm(request.getChargerNm()) - .dmndLevyStdde(request.getLevyStdde()) - .dmndInqireSeCode(request.getInqireSeCode()) - .dmndVhrno(request.getVhrno()) - .dmndVin(request.getVin()) + .dmndLevyStdde(first != null ? first.getLevyStdde() : null) + .dmndInqireSeCode(first != null ? first.getInqireSeCode() : null) + .dmndVhrno(first != null ? first.getVhrno() : null) + .dmndVin(first != null ? first.getVin() : null) .rgtr(ApiConstant.DEFAULT_REGISTRANT) .build(); } diff --git a/src/main/java/com/vmis/interfaceapp/service/RequestEnricher.java b/src/main/java/com/vmis/interfaceapp/service/RequestEnricher.java index 88aba5b..770f800 100644 --- a/src/main/java/com/vmis/interfaceapp/service/RequestEnricher.java +++ b/src/main/java/com/vmis/interfaceapp/service/RequestEnricher.java @@ -34,6 +34,7 @@ public class RequestEnricher { String cntc = props.getGov().getServices().getBasic().getCntcInfoCode(); for (BasicRequest req : envelope.getData()) { if (req == null) continue; + // 메타 필드 보강 (data level) req.setInfoSysId(sys.getInfoSysId()); req.setInfoSysIp(sys.getInfoSysIp()); req.setSigunguCode(sys.getSigunguCode()); @@ -42,12 +43,23 @@ public class RequestEnricher { req.setChargerIp(sys.getChargerIp()); req.setChargerNm(sys.getChargerNm()); + // record 배열이 없으면 생성 (최소 1개) + java.util.List records = req.getRecord(); + if (records == null || records.isEmpty()) { + BasicRequest.Record r = new BasicRequest.Record(); + java.util.ArrayList list = new java.util.ArrayList<>(); + list.add(r); + req.setRecord(list); + records = list; + } + // 자동차 기본사항 조회 시 INQIRE_SE_CODE 자동 설정 // VHRNO(차량번호) not null → 3:자동차번호, VIN(차대번호) not null → 2:차대번호 - if (req.getVhrno() != null && !req.getVhrno().trim().isEmpty()) { - req.setInqireSeCode("3"); - } else if (req.getVin() != null && !req.getVin().trim().isEmpty()) { - req.setInqireSeCode("2"); + BasicRequest.Record first = records.get(0); + if (first.getVhrno() != null && !first.getVhrno().trim().isEmpty()) { + first.setInqireSeCode("3"); + } else if (first.getVin() != null && !first.getVin().trim().isEmpty()) { + first.setInqireSeCode("2"); } } log.debug("[ENRICH] basic: applied INFO_SYS_ID={}, INFO_SYS_IP={}, SIGUNGU_CODE={}, CNTC_INFO_CODE={}",