From 80ff392b5a9deb3dfe9e1830c8c4027a52ecae46 Mon Sep 17 00:00:00 2001 From: jade Date: Mon, 20 Jul 2026 16:44:12 +0900 Subject: [PATCH] feat: Add SampleMciToolService for MCI integration sample --- .../dap/mcc/service/SampleMciToolService.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/SampleMciToolService.java 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 new file mode 100644 index 0000000..cc9bd25 --- /dev/null +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/mcc/service/SampleMciToolService.java @@ -0,0 +1,85 @@ +package io.shinhanlife.dap.mcc.service; + +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; +import io.shinhanlife.dap.mcc.annotation.McpFunction; +import io.shinhanlife.dap.mcc.annotation.McpTool; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; + +/** + * @package io.shinhanlife.dap.mcc.service + * @className SampleMciToolService + * @description AX HUB 시스템 처리 클래스 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ----------
+ * 수정일      수정자    수정내용
+ * ---------- -------- ---------------------------
+ * 2026.09.01  김형식    최초생성
+ * 
+ * 
+ */ +@Slf4j +@RequiredArgsConstructor +@McpTool(routingType = "MCI", categoryKey = "other") // MCP Tool 등록 어노테이션 +public class SampleMciToolService { + + // EIMS/MCI 발송을 담당하는 Sender 주입 + private final ShinhanMciSender shinhanMciSender; + + @Value("${shinhan.integration.mci.default-url:http://localhost:8081/api/mock/esb/api}") + private String mciTargetUrl; + + // AI가 인식할 파라미터 DTO + @Data + public static class SampleMciReqDto { + private String customerId; + private String inquiryType; + } + + /** + * AI Agent가 호출하게 될 메서드입니다. + */ + @McpFunction( + name = "inquiry_customer_mci", + displayName = "고객 정보 조회 (MCI)", + description = "MCI 연동을 통해 고객의 상세 정보를 조회합니다.", + prompt = "고객 정보를 조회해줘.", + mappingId = "CUST_INQ_001" + ) + public Object inquiryCustomerInfo(SampleMciReqDto req) { + log.info("[MCI Tool] 고객 정보 조회 요청 수신. 고객ID: {}", req.getCustomerId()); + + try { + // 1. MCI 전문 통신을 위한 Wrapper 객체 생성 + MciRequestWrapper wrapper = new MciRequestWrapper<>(); + + // 2. 공통 헤더 세팅 (인터페이스 ID, 서비스 ID 등 업무에 맞게 설정) + ShinhanCommonHeaderDto header = new ShinhanCommonHeaderDto(); + header.setItrIfId("CUST_INQ_001"); + header.setRcvSvcId("INQ9040"); + wrapper.setTgrmCmnnhddValu(header); + + // 3. 비즈니스 데이터(Body) 세팅 + wrapper.setBody(req); + + // 4. ShinhanMciSender를 통해 실제 연동 수행 및 응답 수신 + log.info("[MCI Tool] ShinhanMciSender 연동 시작... (URL: {})", mciTargetUrl); + String responseJson = shinhanMciSender.send(mciTargetUrl, wrapper); + + log.info("[MCI Tool] MCI 연동 성공. 응답 수신 완료"); + + // 결과 반환 (이 문자열은 JSON 파싱되거나 그대로 AI에게 전달됩니다) + return responseJson; + + } catch (Exception e) { + log.error("[MCI Tool] MCI 연동 중 오류 발생: {}", e.getMessage(), e); + return "{\"status\":\"ERROR\", \"message\":\"MCI 통신 실패: " + e.getMessage() + "\"}"; + } + } +}