From 74ea89bf1c71c4fd01fa38d60c840fc7a722491c Mon Sep 17 00:00:00 2001 From: jade Date: Fri, 24 Jul 2026 10:24:00 +0900 Subject: [PATCH] refactor: apply naming convention for MCI interface IO objects (CLCNNB00001_I, CUST_INQ_001_I) and separate layers --- .../itrf/mci/cfp/a/io/CLCNNB00001_I.java | 91 +++++++++++++++++++ .../itrf/mci/cfp/a/io/CLCNNB00001_O.java | 16 ++++ .../itrf/mci/cfp/a/io/MciCfpaClient.java | 37 +++++++- .../itrf/mci/sample/io/CUST_INQ_001_I.java | 16 ++++ .../itrf/mci/sample/io/CUST_INQ_001_O.java | 15 +++ .../dap/mcc/service/SampleMciToolService.java | 2 +- .../impl/SampleMciToolServiceImpl.java | 15 +-- 7 files changed, 183 insertions(+), 9 deletions(-) create mode 100644 dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_I.java create mode 100644 dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_O.java create mode 100644 dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/sample/io/CUST_INQ_001_I.java create mode 100644 dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/sample/io/CUST_INQ_001_O.java diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_I.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_I.java new file mode 100644 index 00000000..7de87b33 --- /dev/null +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_I.java @@ -0,0 +1,91 @@ +package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io + * @className CLCNNB00001_I + * @description 보장분석결과조회 MCI 요청 전문 + * @author 0986406 + * @create 2026.09.01 + */ +@Data +public class CLCNNB00001_I { + + @JsonProperty("unfcPrbuIrcoAddu") + private UnfcPrbuIrcoAdduDto unfcPrbuIrcoAddu; + + @JsonProperty("dalScCd") + private String dalScCd; + + @JsonProperty("cstSucoRltyCd") + private String cstSucoRltyCd; + + @JsonProperty("csNo") + private String csNo; + + @JsonProperty("rdreNo") + private String rdreNo; + + @JsonProperty("unfcPvsCalReqYn") + private String unfcPvsCalReqYn; + + @JsonProperty("kcisPymmTnnrRequest") + private String kcisPymmTnnrRequest; + + @JsonProperty("lmovYn") + private String lmovYn; + + @JsonProperty("genPsthApvTrgtYn") + private String genPsthApvTrgtYn; + + @JsonProperty("ircoLmovEcpbTrgtYn") + private String ircoLmovEcpbTrgtYn; + + @JsonProperty("digCalYn") + private String digCalYn; + + @JsonProperty("prbuIciDigCalYn") + private String prbuIciDigCalYn; + + @JsonProperty("sucoIspaBasDto") + private SucoIspaBasDto sucoIspaBasDto; + + @Data + public static class UnfcPrbuIrcoAdduDto { + } + + @Data + public static class SucoIspaBasDto { + @JsonProperty("ccnDalTypCd") + private String ccnDalTypCd; + + @JsonProperty("nwcnptCursCd") + private String nwcnptCursCd; + + @JsonProperty("induAsctScCd") + private String induAsctScCd; + + @JsonProperty("cepeOgnzNo") + private String cepeOgnzNo; + + @JsonProperty("cepePrafNo") + private String cepePrafNo; + + @JsonProperty("clmoOgnzNo") + private String clmoOgnzNo; + + @JsonProperty("clmoPrafNo") + private String clmoPrafNo; + + @JsonProperty("sucoYmd") + private String sucoYmd; + + @JsonProperty("ispDt") + private String ispDt; + + @JsonProperty("contYmd") + private String contYmd; + } +} diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_O.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_O.java new file mode 100644 index 00000000..fcb0f3fc --- /dev/null +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_O.java @@ -0,0 +1,16 @@ +package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io; + +import lombok.Data; + +/** + * @package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io + * @className CLCNNB00001_O + * @description 보장분석결과조회 MCI 응답 전문 + * @author 0986406 + * @create 2026.09.01 + */ +@Data +public class CLCNNB00001_O { + // 응답 전문 필드 정의 (필요에 따라 추가) + private Object resultData; +} diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/MciCfpaClient.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/MciCfpaClient.java index 9c2c79f9..66012339 100644 --- a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/MciCfpaClient.java +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/MciCfpaClient.java @@ -47,8 +47,41 @@ public class MciCfpaClient { * @return 출력 객체 */ public Object callCfpa0001(Onnba3011Request inDto) throws Exception { + // 인터페이스 IO 객체 생성 및 매핑 + CLCNNB00001_I mciReq = new CLCNNB00001_I(); + mciReq.setDalScCd(inDto.getDalScCd()); + mciReq.setCstSucoRltyCd(inDto.getCstSucoRltyCd()); + mciReq.setCsNo(inDto.getCsNo()); + mciReq.setRdreNo(inDto.getRdreNo()); + mciReq.setUnfcPvsCalReqYn(inDto.getUnfcPvsCalReqYn()); + mciReq.setKcisPymmTnnrRequest(inDto.getKcisPymmTnnrRequest()); + mciReq.setLmovYn(inDto.getLmovYn()); + mciReq.setGenPsthApvTrgtYn(inDto.getGenPsthApvTrgtYn()); + mciReq.setIrcoLmovEcpbTrgtYn(inDto.getIrcoLmovEcpbTrgtYn()); + mciReq.setDigCalYn(inDto.getDigCalYn()); + mciReq.setPrbuIciDigCalYn(inDto.getPrbuIciDigCalYn()); + + if (inDto.getUnfcPrbuIrcoAddu() != null) { + mciReq.setUnfcPrbuIrcoAddu(new CLCNNB00001_I.UnfcPrbuIrcoAdduDto()); + } + + if (inDto.getSucoIspaBasDto() != null) { + CLCNNB00001_I.SucoIspaBasDto sucoIspa = new CLCNNB00001_I.SucoIspaBasDto(); + sucoIspa.setCcnDalTypCd(inDto.getSucoIspaBasDto().getCcnDalTypCd()); + sucoIspa.setNwcnptCursCd(inDto.getSucoIspaBasDto().getNwcnptCursCd()); + sucoIspa.setInduAsctScCd(inDto.getSucoIspaBasDto().getInduAsctScCd()); + sucoIspa.setCepeOgnzNo(inDto.getSucoIspaBasDto().getCepeOgnzNo()); + sucoIspa.setCepePrafNo(inDto.getSucoIspaBasDto().getCepePrafNo()); + sucoIspa.setClmoOgnzNo(inDto.getSucoIspaBasDto().getClmoOgnzNo()); + sucoIspa.setClmoPrafNo(inDto.getSucoIspaBasDto().getClmoPrafNo()); + sucoIspa.setSucoYmd(inDto.getSucoIspaBasDto().getSucoYmd()); + sucoIspa.setIspDt(inDto.getSucoIspaBasDto().getIspDt()); + sucoIspa.setContYmd(inDto.getSucoIspaBasDto().getContYmd()); + mciReq.setSucoIspaBasDto(sucoIspa); + } + // 인터페이스 호출 - Transfer resTransfer = mci.callTo(INTERFACE_CODE, inDto, Object.class); + Transfer resTransfer = mci.callTo(INTERFACE_CODE, mciReq, CLCNNB00001_O.class); // 응답 검증 validateResponse(resTransfer); @@ -59,7 +92,7 @@ public class MciCfpaClient { return resTransfer.getBody(); } - private void validateResponse(Transfer resTransfer) { + private void validateResponse(Transfer resTransfer) { log.info("응답 검증 로직 수행"); } diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/sample/io/CUST_INQ_001_I.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/sample/io/CUST_INQ_001_I.java new file mode 100644 index 00000000..0ba817c9 --- /dev/null +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/sample/io/CUST_INQ_001_I.java @@ -0,0 +1,16 @@ +package io.shinhanlife.dap.mcc.infra.itrf.mci.sample.io; + +import lombok.Data; + +/** + * @package io.shinhanlife.dap.mcc.infra.itrf.mci.sample.io + * @className CUST_INQ_001_I + * @description 고객 정보 조회 샘플 MCI 요청 전문 + * @author 0986406 + * @create 2026.09.01 + */ +@Data +public class CUST_INQ_001_I { + private String customerId; + private String inquiryType; +} diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/sample/io/CUST_INQ_001_O.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/sample/io/CUST_INQ_001_O.java new file mode 100644 index 00000000..5049112f --- /dev/null +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/sample/io/CUST_INQ_001_O.java @@ -0,0 +1,15 @@ +package io.shinhanlife.dap.mcc.infra.itrf.mci.sample.io; + +import lombok.Data; + +/** + * @package io.shinhanlife.dap.mcc.infra.itrf.mci.sample.io + * @className CUST_INQ_001_O + * @description 고객 정보 조회 샘플 MCI 응답 전문 + * @author 0986406 + * @create 2026.09.01 + */ +@Data +public class CUST_INQ_001_O { + private Object resultData; +} diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/SampleMciToolService.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/SampleMciToolService.java index 9baf46db..f655cd91 100644 --- a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/SampleMciToolService.java +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/SampleMciToolService.java @@ -3,5 +3,5 @@ package io.shinhanlife.dap.mcc.service; import io.shinhanlife.dap.mcc.dto.*; public interface SampleMciToolService { - Object inquiryCustomerInfo(io.shinhanlife.dap.mcc.service.impl.SampleMciToolServiceImpl.SampleMciReqDto req); + Object inquiryCustomerInfo(io.shinhanlife.dap.mcc.service.impl.SampleMciToolServiceImpl.SampleMciRequest req); } diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/impl/SampleMciToolServiceImpl.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/impl/SampleMciToolServiceImpl.java index a62d263f..dbf01220 100644 --- a/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/impl/SampleMciToolServiceImpl.java +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/impl/SampleMciToolServiceImpl.java @@ -1,5 +1,6 @@ package io.shinhanlife.dap.mcc.service.impl; +import io.shinhanlife.dap.mcc.infra.itrf.mci.sample.io.CUST_INQ_001_I; import io.shinhanlife.dap.common.adapter.sender.ShinhanMciSender; import io.shinhanlife.dap.common.integration.mci.dto.MciRequestWrapper; import io.shinhanlife.dap.common.integration.mci.dto.ShinhanCommonHeaderDto; @@ -39,7 +40,7 @@ public class SampleMciToolServiceImpl implements SampleMciToolService { // AI가 인식할 파라미터 DTO @Data - public static class SampleMciReqDto { + public static class SampleMciRequest { private String customerId; private String inquiryType; } @@ -53,13 +54,12 @@ public class SampleMciToolServiceImpl implements SampleMciToolService { prompt = "고객 정보를 조회해줘.", mappingId = "CUST_INQ_001" ) - @Override - public Object inquiryCustomerInfo(SampleMciReqDto req) { + public Object inquiryCustomerInfo(SampleMciRequest req) { log.info("[MCI Tool] 고객 정보 조회 요청 수신. 고객ID: {}", req.getCustomerId()); try { // 1. MCI 전문 통신을 위한 Wrapper 객체 생성 - MciRequestWrapper wrapper = new MciRequestWrapper<>(); + MciRequestWrapper wrapper = new MciRequestWrapper<>(); // 2. 공통 헤더 세팅 (인터페이스 ID, 서비스 ID 등 업무에 맞게 설정) ShinhanCommonHeaderDto header = new ShinhanCommonHeaderDto(); @@ -67,8 +67,11 @@ public class SampleMciToolServiceImpl implements SampleMciToolService { header.setRcvSvcId("INQ9040"); wrapper.setTgrmCmnnhddValu(header); - // 3. 비즈니스 데이터(Body) 세팅 - wrapper.setBody(req); + // 3. 비즈니스 데이터(Body) 세팅 (인터페이스 IO 매핑) + CUST_INQ_001_I mciReq = new CUST_INQ_001_I(); + mciReq.setCustomerId(req.getCustomerId()); + mciReq.setInquiryType(req.getInquiryType()); + wrapper.setBody(mciReq); // 4. ShinhanMciSender를 통해 실제 연동 수행 및 응답 수신 log.info("[MCI Tool] ShinhanMciSender 연동 시작... (URL: {})", mciTargetUrl);