diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/service/ExecuteService.java b/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/service/ExecuteService.java index f003541..1f05976 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/service/ExecuteService.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/service/ExecuteService.java @@ -252,6 +252,9 @@ public class ExecuteService { JsonNode data = null; try { data = toolInvoker.invoke(pagePayload, executeApiUrl); + } catch (org.springframework.web.client.RestClientResponseException e) { + // HTTP 4xx, 5xx 에러는 연결 오류가 아니라 비즈니스 로직 오류이거나 검증 실패이므로 원본 에러를 그대로 반환 + throw new ToolExecutionException(FailureType.SERVER_ERROR, "Tool Pod HTTP 에러 (" + e.getStatusCode() + "): " + e.getResponseBodyAsString()); } catch (Exception e) { if (executeApiUrl.contains("http://tool-")) { String fallbackUrl = executeApiUrl.replaceAll("http://tool-[a-zA-Z0-9-]+", "http://localhost"); diff --git a/dap-tool-core/src/main/java/io/shinhanlife/dap/common/integration/mci/dto/ShinhanMessageDto.java b/dap-tool-core/src/main/java/io/shinhanlife/dap/common/integration/mci/dto/ShinhanMessageDto.java new file mode 100644 index 0000000..f7d540b --- /dev/null +++ b/dap-tool-core/src/main/java/io/shinhanlife/dap/common/integration/mci/dto/ShinhanMessageDto.java @@ -0,0 +1,51 @@ +package io.shinhanlife.dap.common.integration.mci.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @package io.shinhanlife.dap.common.integration.mci.dto + * @className ShinhanMessageDto + * @description AX HUB 시스템 처리 클래스 - MCI 전문 메시지부 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShinhanMessageDto { + + private MsgHddvValu msgHddvValu; // 메시지헤더부값 + private MsgDtdvValu msgDtdvValu; // 메시지데이터부값 + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class MsgHddvValu { + private String msgTnsmTypeCd; // 메시지전송유형코드 + private Integer msdvLencn; // 메시지부길이 + private Integer msgRpttCc; // 메시지반복건수 + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class MsgDtdvValu { + private String msgCd; // 메시지코드 + private String msgPrnAttrCd; // 메시지출력속성코드 + private String msgCt; // 메시지내용 + private String anxMsgCt; // 부가메시지내용 + } +} diff --git a/dap-tool-core/src/main/java/io/shinhanlife/dap/common/integration/mci/dto/ShinhanTelegramWrapper.java b/dap-tool-core/src/main/java/io/shinhanlife/dap/common/integration/mci/dto/ShinhanTelegramWrapper.java new file mode 100644 index 0000000..b324391 --- /dev/null +++ b/dap-tool-core/src/main/java/io/shinhanlife/dap/common/integration/mci/dto/ShinhanTelegramWrapper.java @@ -0,0 +1,38 @@ +package io.shinhanlife.dap.common.integration.mci.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import com.fasterxml.jackson.annotation.JsonUnwrapped; + +/** + * @package io.shinhanlife.dap.common.integration.mci.dto + * @className ShinhanTelegramWrapper + * @description AX HUB 시스템 처리 클래스 - MCI 전문 전체 래퍼 (공통헤더부 + 메시지부 + 데이터부) + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShinhanTelegramWrapper
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ +@Data +public class MciSampleRequestDto { + @McpParameter(description = "인터페이스 ID (입력 예시: S001)") + private String interfaceId; + + @McpParameter(description = "메시지 전송 유형 (입력 예시: T001)") + private String messageType; + + @McpParameter(description = "조회 대상 고객명 (입력 예시: 홍길동)") + private String customerName; +} diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/other/dto/MyBizDataDto.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/other/dto/MyBizDataDto.java new file mode 100644 index 0000000..afecf61 --- /dev/null +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/other/dto/MyBizDataDto.java @@ -0,0 +1,40 @@ +package io.shinhanlife.dap.other.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyDescription; +import io.shinhanlife.dap.mcc.annotation.McpParameter; + +/** + * @package io.shinhanlife.dap.other.dto + * @className MyBizDataDto + * @description AX HUB 시스템 처리 클래스 - 샘플 비즈니스 데이터 DTO + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MyBizDataDto { + + @McpParameter(description = "고객 이름", required = true) + private String customerName; + + @McpParameter(description = "조회 대상 일자 (YYYYMMDD)", required = true) + private String targetDate; + + @McpParameter(description = "비고 내용") + private String remarks; +} diff --git a/dap-tool-other/src/main/java/io/shinhanlife/dap/other/tool/MciSampleTool.java b/dap-tool-other/src/main/java/io/shinhanlife/dap/other/tool/MciSampleTool.java new file mode 100644 index 0000000..93db27a --- /dev/null +++ b/dap-tool-other/src/main/java/io/shinhanlife/dap/other/tool/MciSampleTool.java @@ -0,0 +1,65 @@ +package io.shinhanlife.dap.other.tool; + +import io.shinhanlife.dap.mcc.annotation.McpFunction; +import io.shinhanlife.dap.mcc.annotation.McpTool; +import io.shinhanlife.dap.common.integration.mci.dto.ShinhanTelegramWrapper; +import io.shinhanlife.dap.common.integration.mci.dto.ShinhanCommonHeaderDto; +import io.shinhanlife.dap.common.integration.mci.dto.ShinhanMessageDto; +import io.shinhanlife.dap.common.integration.mci.dto.ShinhanMessageDto.MsgHddvValu; +import io.shinhanlife.dap.other.dto.MyBizDataDto; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.UUID; + +import io.shinhanlife.dap.other.dto.MciSampleRequestDto; + +/** + * @package io.shinhanlife.dap.other.tool + * @className MciSampleTool + * @description AX HUB 시스템 처리 클래스 - MCI 연동 샘플 툴 + * @author 김형식 + * @create 2026.09.01 + *
+ * ---------- 개정이력 ---------- + * 수정일 수정자 수정내용 + * ---------- -------- --------------------------- + * 2026.09.01 김형식 최초생성 + * + *+ */ +@Slf4j +@Service +@McpTool(routingType = "MCI", categoryKey = "common") +public class MciSampleTool { + + @McpFunction(displayName = "MCI 샘플 전송", name = "send_mci_sample", description = "MCI 표준 헤더, 메시지부, 데이터부 구조를 갖는 샘플 연동") + public ShinhanTelegramWrapper