This commit is contained in:
@@ -1,29 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.converter;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.CcCstUnfcNotiCarhDto;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerGuidanceToolRequest;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d.io.ONILD0320_I;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d.io.ONILD0320_O.CstUnfcNotiCarhInqrOutDto;
|
||||
import org.mapstruct.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
|
||||
public interface CustomerGuidanceToolConverter {
|
||||
|
||||
/**
|
||||
* 고객통합이력조회 전사 Request -> I/F
|
||||
*/
|
||||
@Mapping(target = "cstUnfcNotiCarhInqrInDto.inqrEndYmd", source = "inqrEndYmd")
|
||||
@Mapping(target = "cstUnfcNotiCarhInqrInDto.inqrStrtYmd", source = "inqrStrYmd")
|
||||
@Mapping(target = "cstUnfcNotiCarhInqrInDto.notiPmlMdCd", source = "notiPmlMdCd")
|
||||
@Mapping(target = "cstUnfcNotiCarhInqrInDto.ntleCd", source = "ntleCd")
|
||||
@Mapping(target = "cstUnfcNotiCarhInqrInDto.csNo", source = "csNo")
|
||||
public abstract ONILD0320_I toONILD0320_I(CustomerGuidanceToolRequest req);
|
||||
|
||||
@Named("toCcCstUnfcNotiCarhDto")
|
||||
public abstract CcCstUnfcNotiCarhDto toCcCstUnfcNotiCarhDto(CstUnfcNotiCarhInqrOutDto cstUnfcNotiCarhInqrOutDto);
|
||||
|
||||
@IterableMapping(qualifiedByName = "toCcCstUnfcNotiCarhDto")
|
||||
public abstract List<CcCstUnfcNotiCarhDto> toCcCstUnfcNotiCarhDtoList(List<CstUnfcNotiCarhInqrOutDto> cstUnfcNotiCarhInqrOutDto);
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.converter;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaCommonCodeRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaCommonCodeResponse;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_I;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_O;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.converter
|
||||
* @className MetaCommonCodeConverter
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface MetaCommonCodeConverter {
|
||||
@Mapping(target = "csNo", source = "groupCode", defaultValue = "GRP_COMM_CD")
|
||||
CLCNNB00001_I toLegacyRequest(MetaCommonCodeRequest req);
|
||||
|
||||
@Mapping(target = "codeList", ignore = true)
|
||||
MetaCommonCodeResponse toResponse(CLCNNB00001_O mciRes);
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.converter;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaTableRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaTableResponse;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_I;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_O;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.converter
|
||||
* @className MetaTableConverter
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface MetaTableConverter {
|
||||
@Mapping(target = "csNo", source = "tableName", defaultValue = "TB_META_BAS")
|
||||
CLCNNB00001_I toLegacyRequest(MetaTableRequest req);
|
||||
|
||||
@Mapping(target = "tableList", ignore = true)
|
||||
MetaTableResponse toResponse(CLCNNB00001_O mciRes);
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class AnalysisDataQueryRequest {
|
||||
@Schema(description = "데이터 조회를 시작할 날짜", example = "2024-01-01")
|
||||
private String startDate;
|
||||
|
||||
@Schema(description = "데이터 조회를 종료할 날짜", example = "2024-12-31")
|
||||
private String endDate;
|
||||
|
||||
@Schema(description = "분석할 데이터 카테고리", example = "sales")
|
||||
private String category;
|
||||
|
||||
@Schema(description = "지역 필터", example = "seoul")
|
||||
private String region;
|
||||
|
||||
@Schema(description = "조회할 결과 수 제한", example = "100")
|
||||
private Integer limit;
|
||||
|
||||
@Schema(description = "조회할 결과 시작 위치", example = "0")
|
||||
private Integer offset;
|
||||
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
@Data
|
||||
public class CcCstUnfcNotiCarhDto {
|
||||
@Schema(description = "고객번호", example = "CUST123")
|
||||
private String csNo;
|
||||
|
||||
@Schema(description = "안내일시", example = "20260812093000")
|
||||
private String notiDt;
|
||||
|
||||
@Schema(description = "발송일련번호", example = "1")
|
||||
private int pmlSriaNo;
|
||||
|
||||
@Schema(description = "안내신청상세일시", example = "20260812092500")
|
||||
private String notiPetDtptDt;
|
||||
|
||||
@Schema(description = "안내장코드", example = "NT001")
|
||||
private String ntleCd;
|
||||
|
||||
@Schema(description = "안내장명", example = "카드대금 결제일 안내")
|
||||
private String ntleNm;
|
||||
|
||||
@Schema(description = "안내발송일련번호", example = "10")
|
||||
private int notiPmlSriaNo;
|
||||
|
||||
@Schema(description = "안내발송방법코드", example = "SMS")
|
||||
private String notiPmlMdCd;
|
||||
|
||||
@Schema(description = "안내수신정보암호화내용", example = "AbC123EncRypTed==")
|
||||
private String notiRcvInfoEncrCt;
|
||||
|
||||
@Schema(description = "메시지ID", example = "MSG20260812000001")
|
||||
private String msgId;
|
||||
|
||||
@Schema(description = "안내내용", example = "8월 카드대금 결제일은 8월 25일입니다.")
|
||||
private String notiCt;
|
||||
|
||||
@Schema(description = "통합안내발송결과코드", example = "00")
|
||||
private String unfcNotiPmlRsltCd;
|
||||
|
||||
@Schema(description = "통합안내발송결과상세코드", example = "0001")
|
||||
private String unfcNotiPmlRsltDtptCd;
|
||||
|
||||
@Schema(description = "발송시스템코드", example = "SYS01")
|
||||
private String pmlSystCd;
|
||||
|
||||
@Schema(description = "발송조직번호", example = "1001")
|
||||
private String pmlOgnzNo;
|
||||
|
||||
@Schema(description = "발송조직명", example = "고객지원팀")
|
||||
private String pmlOgnzNm;
|
||||
|
||||
@Schema(description = "발신기관조직명", example = "카드사업본부")
|
||||
private String msdilttOgnzNm;
|
||||
|
||||
@Schema(description = "조회구분명", example = "전체")
|
||||
private String inqrDvsnNm;
|
||||
|
||||
@Schema(description = "등록일시", example = "20260812090000")
|
||||
private String rgiDt;
|
||||
|
||||
@Schema(description = "등록자명", example = "홍길동")
|
||||
private String rgstNm;
|
||||
|
||||
@Schema(description = "등록자조직명", example = "고객지원팀")
|
||||
private String rgstOgnzNm;
|
||||
|
||||
@Schema(description = "최종변경자명", example = "김철수")
|
||||
private String lstPrwpNm;
|
||||
|
||||
@Schema(description = "최종변경일시", example = "20260812101500")
|
||||
private String lstChgDt;
|
||||
|
||||
@Schema(description = "최종변경자조직명", example = "운영지원팀")
|
||||
private String lstPrwpOgnzNm;
|
||||
|
||||
@Schema(description = "원천회사구분코드", example = "01")
|
||||
private String oriCpnyDvsnCd;
|
||||
|
||||
@Schema(description = "고객한글명", example = "이보람")
|
||||
private String cstHanNm;
|
||||
|
||||
@Schema(description = "시스템등록인사번호", example = "20260001")
|
||||
private String systRgiPrafNo;
|
||||
|
||||
@Schema(description = "시스템변경인사번호", example = "20260002")
|
||||
private String systChgPrafNo;
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
@Data
|
||||
@Getter
|
||||
@Builder
|
||||
public class CustomerGuidanceToolRequest {
|
||||
@Schema(description = "고객번호", example = "CUST123")
|
||||
private String csNo;
|
||||
|
||||
@Schema(description = "안내장코드", example = "ab12321")
|
||||
private String ntleCd;
|
||||
|
||||
@Schema(description = "안내발송방법코드", example = "aa")
|
||||
private String notiPmlMdCd;
|
||||
|
||||
@Schema(description = "조회시작일자", example = "20260101")
|
||||
private String inqrStrYmd;
|
||||
|
||||
@Schema(description = "조회종료일자", example = "20260101")
|
||||
private String inqrEndYmd;
|
||||
|
||||
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class CustomerGuidanceToolResponse {
|
||||
|
||||
private String resultCode;
|
||||
|
||||
private String resultMessage;
|
||||
|
||||
private List<CcCstUnfcNotiCarhDto> ccCstUnfcNotiCarhDtoList;
|
||||
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.shinhanlife.glow.GlowMciFieldInfo;
|
||||
import lombok.Data;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.dto
|
||||
* @className MciSampleStringResponse
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MciSampleStringResponse {
|
||||
@GlowMciFieldInfo(order = 1, length = 10, description = "이름")
|
||||
private String name;
|
||||
|
||||
@GlowMciFieldInfo(order = 2, length = 3, description = "나이")
|
||||
private int age;
|
||||
|
||||
@GlowMciFieldInfo(order = 3, length = 8, description = "가입일자(YYYYMMDD)")
|
||||
private String joinDate;
|
||||
|
||||
@GlowMciFieldInfo(order = 4, length = 2, description = "상태코드")
|
||||
private String statusCode;
|
||||
|
||||
@GlowMciFieldInfo(order = 5, length = 30, description = "타겟 리스트", target = MciSampleTargetDto.class)
|
||||
private List<MciSampleTargetDto> targetList;
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
import io.shinhanlife.glow.GlowMciFieldInfo;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.dto
|
||||
* @className MciSampleTargetDto
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
*/
|
||||
@Data
|
||||
public class MciSampleTargetDto {
|
||||
@GlowMciFieldInfo(order = 1, length = 5, description = "항목 코드")
|
||||
private String itemCode;
|
||||
|
||||
@GlowMciFieldInfo(order = 2, length = 5, description = "항목 값")
|
||||
private String itemValue;
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.dto
|
||||
* @className MetaCommonCodeRequest
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MetaCommonCodeRequest {
|
||||
@McpToolParam(description = "통합코드 그룹 ID (예: GRP_SYS_01, GRP_COMM_CD)", required = false)
|
||||
@Schema(example = "GRP_001")
|
||||
private String groupCode;
|
||||
|
||||
|
||||
@McpToolParam(description = "코드명 검색 키워드 (예: 사용, 상태)", required = false)
|
||||
private String codeName;
|
||||
|
||||
@McpToolParam(description = "사용여부 (예: Y, N)", required = false)
|
||||
@Schema(example = "Y")
|
||||
private String useYn;
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.dto
|
||||
* @className MetaCommonCodeResponse
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MetaCommonCodeResponse {
|
||||
private List<MetaCommonCodeItem> codeList;
|
||||
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public static class MetaCommonCodeItem {
|
||||
private String groupCode;
|
||||
private String code;
|
||||
private String codeName;
|
||||
private String codeDesc;
|
||||
private Integer sortSeq;
|
||||
private String useYn;
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.dto
|
||||
* @className MetaTableRequest
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MetaTableRequest {
|
||||
@McpToolParam(description = "테이블 물리명 키워드 (예: TB_CUST_BAS, TB_CONT)", required = false)
|
||||
@Schema(example = "TB_USER")
|
||||
private String tableName;
|
||||
|
||||
|
||||
@McpToolParam(description = "테이블 논리명(한글) 키워드 (예: 고객기본, 계약)", required = false)
|
||||
@Schema(example = "고객기본")
|
||||
private String tableLogicalName;
|
||||
|
||||
@McpToolParam(description = "스키마/소유자명 (예: DAPADM, SHLOWN)", required = false)
|
||||
@Schema(example = "DAPADM")
|
||||
private String owner;
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.dto
|
||||
* @className MetaTableResponse
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MetaTableResponse {
|
||||
private List<MetaTableItem> tableList;
|
||||
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public static class MetaTableItem {
|
||||
private String owner;
|
||||
private String tableName;
|
||||
private String tableLogicalName;
|
||||
private String tableDesc;
|
||||
private Integer columnCount;
|
||||
private Long rowCount;
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.dto
|
||||
* @className SampleStringRequest
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class SampleStringRequest {
|
||||
@Schema(example = "test query")
|
||||
private String query;
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.shinhanlife.glow.communication.annotation.GlowTrgmField;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.dto
|
||||
* @className SampleStringResponse
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class SampleStringResponse {
|
||||
@GlowTrgmField(order = 1, length = 10, description = "이름")
|
||||
private String name;
|
||||
|
||||
@GlowTrgmField(order = 2, length = 3, description = "나이")
|
||||
private int age;
|
||||
|
||||
@GlowTrgmField(order = 3, length = 8, description = "가입일자(YYYYMMDD)")
|
||||
private String joinDate;
|
||||
|
||||
@GlowTrgmField(order = 4, length = 2, description = "상태코드")
|
||||
private String statusCode;
|
||||
|
||||
@GlowTrgmField(order = 5, length = 10, description = "타겟")
|
||||
private String target;
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.dto;
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.dto
|
||||
* @className TemplateDownloadRequest
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Getter
|
||||
@Builder
|
||||
@ToString
|
||||
@NoArgsConstructor(access = AccessLevel.PROTECTED)
|
||||
@AllArgsConstructor
|
||||
public class TemplateDownloadRequest {
|
||||
|
||||
/**
|
||||
* 다운로드할 템플릿의 종류 ID (예: CUSTOMER_EXCEL, PRODUCT_PDF 등)
|
||||
*/
|
||||
@Schema(example = "TPL_001")
|
||||
private String templateId;
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
|
||||
|
||||
import io.shinhanlife.glow.BaseResponse;
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerGuidanceToolRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerGuidanceToolResponse;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.usecase
|
||||
* @className CustomerGuidanceToolUseCase
|
||||
* @description AX HUB ?쒖뒪??泥섎━ ?대옒??
|
||||
* @author Boram
|
||||
* @create 2026.08.12
|
||||
* <pre>
|
||||
* ---------- 媛쒖젙?대젰 ----------
|
||||
* ?섏젙?? ?섏젙?? ?섏젙?댁슜
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.08.12 Boram 理쒖큹?앹꽦
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
public interface CustomerGuidanceToolUseCase {
|
||||
|
||||
@McpTool(name = "cmm_customer_tool", title = "고객 통합 안내이력 조회", description = "고객의 통합 안내 이력을 조회하는 도구입니다. 고객 ID와 조회 기간을 입력하면 해당 기간 동안의 안내 이력을 반환합니다.")
|
||||
@GrowToolHint(categoryKey = "cmm", mappingId = "ONILD0320")
|
||||
CustomerGuidanceToolResponse searchCustomerGuidance(CustomerGuidanceToolRequest req) throws Exception;
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaCommonCodeRequest;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.usecase
|
||||
* @className MetaCommonCodeUseCase
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
public interface MetaCommonCodeUseCase {
|
||||
@McpTool(name = "cmm_comcode_lookup", title = "메타 공통코드 조회 툴", description = "메타 통합코드 목록을 조회해줘", annotations = @McpTool.McpAnnotations(openWorldHint = false))
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "cmm", mappingId = "CLCNNB00001")
|
||||
Object searchCommonCode(MetaCommonCodeRequest req);
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaTableRequest;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.usecase
|
||||
* @className MetaTableUseCase
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
public interface MetaTableUseCase {
|
||||
@McpTool(name = "cmm_meta_table", title = "메타 테이블 조회 툴", description = "메타 테이블 정보 목록을 조회해줘", annotations = @McpTool.McpAnnotations(openWorldHint = false))
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "cmm", mappingId = "CLCNNB00001")
|
||||
Object searchMetaTable(MetaTableRequest req);
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
|
||||
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface TemplateUtilityUseCase {
|
||||
@McpTool(name = "cmm_template_url", title = "템플릿 유틸리티 툴", description = "요청한 템플릿(엑셀, 워드 등) 파일(양식)을 다운로드 받을 수 있는 시스템 URL을 반환합니다. AI는 이 URL을 사용자에게 마크다운 링크 형태로 제공해야 합니다.")
|
||||
@GrowToolHint(categoryKey = "cmm")
|
||||
Map<String, Object> getTemplateFileUrl(TemplateDownloadRequest req);
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.CcCstUnfcNotiCarhDto;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerGuidanceToolRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerGuidanceToolResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.usecase.CustomerGuidanceToolUseCase;
|
||||
import io.shinhanlife.glow.BaseResponse;
|
||||
import io.shinhanlife.glow.ResponseUtil;
|
||||
import io.shinhanlife.glow.communication.dto.Transfer;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.converter.CustomerGuidanceToolConverter;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d.io.ONILD0320_I;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d.io.ONILD0320_O;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d.MciNildClient;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl
|
||||
* @className CustomerGuidanceToolUseCaseImpl
|
||||
* @description AX HUB ?쒖뒪??泥섎━ ?대옒??
|
||||
* @author Boram
|
||||
* @create 2026.08.12
|
||||
* <pre>
|
||||
* ---------- 媛쒖젙?대젰 ----------
|
||||
* ?섏젙?? ?섏젙?? ?섏젙?댁슜
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.08.12 Boram 理쒖큹?앹꽦
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class CustomerGuidanceToolUseCaseImpl implements CustomerGuidanceToolUseCase {
|
||||
|
||||
private final MciNildClient mci;
|
||||
private final CustomerGuidanceToolConverter converter;
|
||||
|
||||
@Override
|
||||
public CustomerGuidanceToolResponse searchCustomerGuidance(CustomerGuidanceToolRequest req) throws Exception {
|
||||
ONILD0320_I onild0320_i = converter.toONILD0320_I(req);
|
||||
ONILD0320_O onild0320_o = mci.callOnild0320(onild0320_i);
|
||||
|
||||
List<CcCstUnfcNotiCarhDto> ccCstUnfcNotiCarhDtoList = converter.toCcCstUnfcNotiCarhDtoList(onild0320_o.getCstUnfcNotiCarhInqrOutDto());
|
||||
|
||||
return CustomerGuidanceToolResponse.builder()
|
||||
.ccCstUnfcNotiCarhDtoList(ccCstUnfcNotiCarhDtoList)
|
||||
.resultCode("SUCCESS")
|
||||
.resultMessage("")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.converter.MetaCommonCodeConverter;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaCommonCodeRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaCommonCodeResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaCommonCodeResponse.MetaCommonCodeItem;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.usecase.MetaCommonCodeUseCase;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.MciCfpaClient;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_I;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl
|
||||
* @className MetaCommonCodeUseCaseImpl
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MetaCommonCodeUseCaseImpl implements MetaCommonCodeUseCase {
|
||||
|
||||
private final MciCfpaClient mci;
|
||||
private final MetaCommonCodeConverter converter;
|
||||
|
||||
@Override
|
||||
public Object searchCommonCode(MetaCommonCodeRequest req) {
|
||||
log.info("[MCI Tool] {} 요청 수신. 파라미터: {}", "metaCommonCode", req);
|
||||
try {
|
||||
CLCNNB00001_I mciRequest = converter.toLegacyRequest(req);
|
||||
|
||||
Object mciResponse = mci.callCfpa0001(mciRequest);
|
||||
log.info("[MCI Tool] CLCNNB00001 MCI call completed. Returning response status: {}",
|
||||
mciResponse != null);
|
||||
|
||||
// 현업 테스트용으로 MCI 통신을 바이패스하고 하드코딩된 메타 통합코드 샘플 결과를 반환합니다.
|
||||
MetaCommonCodeResponse res = new MetaCommonCodeResponse();
|
||||
List<MetaCommonCodeItem> list = new ArrayList<>();
|
||||
|
||||
MetaCommonCodeItem item1 = new MetaCommonCodeItem();
|
||||
item1.setGroupCode(req.getGroupCode() != null ? req.getGroupCode() : "GRP_COMM_CD");
|
||||
item1.setCode("CD001");
|
||||
item1.setCodeName("진행중");
|
||||
item1.setCodeDesc("SR 요청 처리 진행 중 상태");
|
||||
item1.setSortSeq(1);
|
||||
item1.setUseYn("Y");
|
||||
list.add(item1);
|
||||
|
||||
MetaCommonCodeItem item2 = new MetaCommonCodeItem();
|
||||
item2.setGroupCode(req.getGroupCode() != null ? req.getGroupCode() : "GRP_COMM_CD");
|
||||
item2.setCode("CD002");
|
||||
item2.setCodeName("완료");
|
||||
item2.setCodeDesc("SR 요청 처리 완료 상태");
|
||||
item2.setSortSeq(2);
|
||||
item2.setUseYn("Y");
|
||||
list.add(item2);
|
||||
|
||||
MetaCommonCodeItem item3 = new MetaCommonCodeItem();
|
||||
item3.setGroupCode(req.getGroupCode() != null ? req.getGroupCode() : "GRP_COMM_CD");
|
||||
item3.setCode("CD003");
|
||||
item3.setCodeName("보류");
|
||||
item3.setCodeDesc("SR 요청 처리 일시 보류 상태");
|
||||
item3.setSortSeq(3);
|
||||
item3.setUseYn("N");
|
||||
list.add(item3);
|
||||
|
||||
res.setCodeList(list);
|
||||
|
||||
return res;
|
||||
} catch (Exception e) {
|
||||
log.error("[MCI Tool] 연동 중 오류 발생: {}", e.getMessage(), e);
|
||||
return Map.of("status", "ERROR", "message", e.getMessage() != null ? e.getMessage() : "Unknown error");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.converter.MetaTableConverter;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaTableRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaTableResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaTableResponse.MetaTableItem;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.usecase.MetaTableUseCase;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.MciCfpaClient;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_I;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl
|
||||
* @className MetaTableUseCaseImpl
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 09863409
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 09863409 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MetaTableUseCaseImpl implements MetaTableUseCase {
|
||||
|
||||
private final MciCfpaClient mci;
|
||||
private final MetaTableConverter converter;
|
||||
|
||||
@Override
|
||||
public Object searchMetaTable(MetaTableRequest req) {
|
||||
log.info("[MCI Tool] {} 요청 수신. 파라미터: {}", "metaTable", req);
|
||||
try {
|
||||
CLCNNB00001_I mciRequest = converter.toLegacyRequest(req);
|
||||
|
||||
Object mciResponse = mci.callCfpa0001(mciRequest);
|
||||
log.info("[MCI Tool] CLCNNB00001 MCI call completed. Returning response status: {}",
|
||||
mciResponse != null);
|
||||
|
||||
// 현업 테스트용으로 MCI 통신을 바이패스하고 하드코딩된 메타 테이블 샘플 결과를 반환합니다.
|
||||
MetaTableResponse res = new MetaTableResponse();
|
||||
List<MetaTableItem> list = new ArrayList<>();
|
||||
|
||||
MetaTableItem item1 = new MetaTableItem();
|
||||
item1.setOwner(req.getOwner() != null ? req.getOwner() : "DAPADM");
|
||||
item1.setTableName(req.getTableName() != null ? req.getTableName() : "TB_CUST_BAS");
|
||||
item1.setTableLogicalName("고객기본정보");
|
||||
item1.setTableDesc("고객 기본 프로필 및 인적사항 관리 테이블");
|
||||
item1.setColumnCount(35);
|
||||
item1.setRowCount(1250000L);
|
||||
list.add(item1);
|
||||
|
||||
MetaTableItem item2 = new MetaTableItem();
|
||||
item2.setOwner(req.getOwner() != null ? req.getOwner() : "DAPADM");
|
||||
item2.setTableName("TB_CONT_MCD");
|
||||
item2.setTableLogicalName("계약주계약정보");
|
||||
item2.setTableDesc("보험 계약 주계약 상세 원장 테이블");
|
||||
item2.setColumnCount(58);
|
||||
item2.setRowCount(3400000L);
|
||||
list.add(item2);
|
||||
|
||||
MetaTableItem item3 = new MetaTableItem();
|
||||
item3.setOwner(req.getOwner() != null ? req.getOwner() : "DAPADM");
|
||||
item3.setTableName("TB_CLAIM_DTL");
|
||||
item3.setTableLogicalName("청구접수상세");
|
||||
item3.setTableDesc("보험금 청구 접수 건별 내역 테이블");
|
||||
item3.setColumnCount(42);
|
||||
item3.setRowCount(890000L);
|
||||
list.add(item3);
|
||||
|
||||
res.setTableList(list);
|
||||
|
||||
return res;
|
||||
} catch (Exception e) {
|
||||
log.error("[MCI Tool] 연동 중 오류 발생: {}", e.getMessage(), e);
|
||||
return Map.of("status", "ERROR", "message", e.getMessage() != null ? e.getMessage() : "Unknown error");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.usecase.TemplateUtilityUseCase;
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.TemplateDownloadRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.service
|
||||
* @className TemplateUtilityService
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
public class TemplateUtilityUseCaseImpl implements TemplateUtilityUseCase {
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getTemplateFileUrl(TemplateDownloadRequest data) {
|
||||
try {
|
||||
String templateId = (data != null && data.getTemplateId() != null) ? data.getTemplateId().toLowerCase() : "default";
|
||||
log.info("MCP 툴 호출됨: get_template_file_url, 요청 템플릿 ID: {}", templateId);
|
||||
|
||||
String fileName = "sample_" + templateId + ".xlsx";
|
||||
String downloadUrl = "https://axhub-file-server.shinhanlife.io/downloads/" + fileName;
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("status", "success");
|
||||
|
||||
Map<String, Object> contract = new HashMap<>();
|
||||
contract.put("fileName", fileName);
|
||||
contract.put("downloadUrl", downloadUrl);
|
||||
contract.put("message", "다운로드 링크가 성공적으로 생성되었습니다. AI는 이 링크를 마크다운 형식으로 사용자에게 전달해야 합니다.");
|
||||
contract.put("status", "success");
|
||||
|
||||
result.put("contracts", Collections.singletonList(contract));
|
||||
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("getTemplateFileUrl 내부 예외 발생", e);
|
||||
throw new RuntimeException("템플릿 URL 생성 실패", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package io.shinhanlife.dap.mcc.biz.crm.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
|
||||
@Data
|
||||
public class CrmToolRequest {
|
||||
@McpToolParam(description = "업무 대상 식별자", required = false)
|
||||
private String subjectId;
|
||||
|
||||
@McpToolParam(description = "고객 식별자", required = false)
|
||||
private String customerId;
|
||||
|
||||
@McpToolParam(description = "검색어 또는 처리 내용", required = false)
|
||||
private String content;
|
||||
|
||||
@McpToolParam(description = "상태, 유형, 등급 또는 처리 값", required = false)
|
||||
private String value;
|
||||
|
||||
@McpToolParam(description = "담당자 식별자", required = false)
|
||||
private String assigneeId;
|
||||
|
||||
@McpToolParam(description = "조회 시작일(YYYY-MM-DD)", required = false)
|
||||
private String startDate;
|
||||
|
||||
@McpToolParam(description = "조회 종료일 또는 처리 예정일(YYYY-MM-DD)", required = false)
|
||||
private String endDate;
|
||||
|
||||
@McpToolParam(description = "페이지 번호", required = false)
|
||||
private Integer page;
|
||||
|
||||
@McpToolParam(description = "페이지 크기", required = false)
|
||||
private Integer size;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package io.shinhanlife.dap.mcc.biz.crm.dto;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class CrmToolResponse {
|
||||
private String toolName;
|
||||
private String category;
|
||||
private String referenceId;
|
||||
private String status;
|
||||
private String summary;
|
||||
private String processedAt;
|
||||
private List<String> details;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package io.shinhanlife.dap.mcc.biz.crm.usecase;
|
||||
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.crm.dto.CrmToolRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.crm.dto.CrmToolResponse;
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
|
||||
public interface CrmToolUseCase {
|
||||
@McpTool(name = "crm_customer_search", title = "고객 통합 조회", description = "고객 통합 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_SEARCH")
|
||||
CrmToolResponse searchCustomers(CrmToolRequest request);
|
||||
@McpTool(name = "crm_customer_detail", title = "고객 상세 정보 조회", description = "고객 상세 정보 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_DETAIL")
|
||||
CrmToolResponse getCustomerDetail(CrmToolRequest request);
|
||||
@McpTool(name = "crm_customer_create", title = "고객 정보 등록", description = "고객 정보 등록 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_CREATE")
|
||||
CrmToolResponse createCustomer(CrmToolRequest request);
|
||||
@McpTool(name = "crm_customer_update", title = "고객 정보 수정", description = "고객 정보 수정 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_UPDATE")
|
||||
CrmToolResponse updateCustomer(CrmToolRequest request);
|
||||
@McpTool(name = "crm_customer_duplicate_check", title = "고객 중복 여부 확인", description = "고객 중복 여부 확인 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_DUPLICATE_CHECK")
|
||||
CrmToolResponse checkDuplicateCustomer(CrmToolRequest request);
|
||||
@McpTool(name = "crm_consultation_history", title = "고객 상담 이력 조회", description = "고객 상담 이력 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CONSULTATION_HISTORY")
|
||||
CrmToolResponse getConsultationHistory(CrmToolRequest request);
|
||||
@McpTool(name = "crm_consultation_register", title = "고객 상담 이력 등록", description = "고객 상담 이력 등록 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CONSULTATION_REGISTER")
|
||||
CrmToolResponse registerConsultation(CrmToolRequest request);
|
||||
@McpTool(name = "crm_contact_history", title = "고객 접촉 이력 조회", description = "고객 접촉 이력 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CONTACT_HISTORY")
|
||||
CrmToolResponse getContactHistory(CrmToolRequest request);
|
||||
@McpTool(name = "crm_contact_register", title = "고객 접촉 이력 등록", description = "고객 접촉 이력 등록 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CONTACT_REGISTER")
|
||||
CrmToolResponse registerContact(CrmToolRequest request);
|
||||
@McpTool(name = "crm_grade_detail", title = "고객 등급 조회", description = "고객 등급 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_GRADE_DETAIL")
|
||||
CrmToolResponse getCustomerGrade(CrmToolRequest request);
|
||||
@McpTool(name = "crm_grade_change", title = "고객 등급 변경", description = "고객 등급 변경 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_GRADE_CHANGE")
|
||||
CrmToolResponse changeCustomerGrade(CrmToolRequest request);
|
||||
@McpTool(name = "crm_segment_detail", title = "고객 세그먼트 조회", description = "고객 세그먼트 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_SEGMENT_DETAIL")
|
||||
CrmToolResponse getCustomerSegment(CrmToolRequest request);
|
||||
@McpTool(name = "crm_tag_manage", title = "고객 태그 관리", description = "고객 태그 관리 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_TAG_MANAGE")
|
||||
CrmToolResponse manageCustomerTags(CrmToolRequest request);
|
||||
@McpTool(name = "crm_consent_detail", title = "고객 동의 정보 조회", description = "고객 동의 정보 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CONSENT_DETAIL")
|
||||
CrmToolResponse getCustomerConsent(CrmToolRequest request);
|
||||
@McpTool(name = "crm_consent_change", title = "고객 동의 정보 변경", description = "고객 동의 정보 변경 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CONSENT_CHANGE")
|
||||
CrmToolResponse changeCustomerConsent(CrmToolRequest request);
|
||||
@McpTool(name = "crm_owner_assign", title = "고객 담당자 배정", description = "고객 담당자 배정 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_OWNER_ASSIGN")
|
||||
CrmToolResponse assignCustomerOwner(CrmToolRequest request);
|
||||
@McpTool(name = "crm_activity_status", title = "고객 활동 현황 조회", description = "고객 활동 현황 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_ACTIVITY_STATUS")
|
||||
CrmToolResponse getCustomerActivityStatus(CrmToolRequest request);
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package io.shinhanlife.dap.mcc.biz.crm.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.crm.dto.CrmToolRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.crm.dto.CrmToolResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.crm.usecase.CrmToolUseCase;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class CrmToolUseCaseImpl implements CrmToolUseCase {
|
||||
@Override
|
||||
public CrmToolResponse searchCustomers(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_customer_search", "고객 통합 조회");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse getCustomerDetail(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_customer_detail", "고객 상세 정보 조회");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse createCustomer(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_customer_create", "고객 정보 등록");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse updateCustomer(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_customer_update", "고객 정보 수정");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse checkDuplicateCustomer(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_customer_duplicate_check", "고객 중복 여부 확인");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse getConsultationHistory(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_consultation_history", "고객 상담 이력 조회");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse registerConsultation(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_consultation_register", "고객 상담 이력 등록");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse getContactHistory(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_contact_history", "고객 접촉 이력 조회");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse registerContact(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_contact_register", "고객 접촉 이력 등록");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse getCustomerGrade(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_grade_detail", "고객 등급 조회");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse changeCustomerGrade(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_grade_change", "고객 등급 변경");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse getCustomerSegment(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_segment_detail", "고객 세그먼트 조회");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse manageCustomerTags(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_tag_manage", "고객 태그 관리");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse getCustomerConsent(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_consent_detail", "고객 동의 정보 조회");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse changeCustomerConsent(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_consent_change", "고객 동의 정보 변경");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse assignCustomerOwner(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_owner_assign", "고객 담당자 배정");
|
||||
}
|
||||
@Override
|
||||
public CrmToolResponse getCustomerActivityStatus(CrmToolRequest request) {
|
||||
return mockResponse(request, "crm_activity_status", "고객 활동 현황 조회");
|
||||
}
|
||||
private CrmToolResponse mockResponse(CrmToolRequest request, String toolName, String title) {
|
||||
CrmToolResponse response = new CrmToolResponse();
|
||||
response.setToolName(toolName);
|
||||
response.setCategory("CRM");
|
||||
response.setReferenceId(request != null && hasText(request.getSubjectId()) ? request.getSubjectId() : "CRM-000001");
|
||||
response.setStatus("정상");
|
||||
response.setSummary(title + " 처리 결과");
|
||||
response.setProcessedAt(LocalDateTime.now().toString());
|
||||
response.setDetails(List.of(title + " 모의 상세 정보", "외부 시스템을 변경하지 않는 샘플 응답"));
|
||||
return response;
|
||||
}
|
||||
|
||||
private boolean hasText(String value) {
|
||||
return value != null && !value.isBlank();
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.ins.converter;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.ins.dto.InsuranceClaimProcessorRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.ins.dto.InsuranceClaimProcessorResponse;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.http.insurance.io.InsuranceClaimProcessorHttpRequest;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.http.insurance.io.InsuranceClaimProcessorHttpResponse;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.ReportingPolicy;
|
||||
|
||||
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
|
||||
public interface InsuranceClaimProcessorConverter {
|
||||
// Field names differ? Add mappings like this before the method.
|
||||
// @Mapping(source = "sourceField", target = "targetField")
|
||||
InsuranceClaimProcessorHttpRequest toHttpRequest(InsuranceClaimProcessorRequest request);
|
||||
InsuranceClaimProcessorResponse toResponse(InsuranceClaimProcessorHttpResponse httpResponse);
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.ins.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class InsuranceClaimProcessorRequest {
|
||||
@Schema(description = "보험 청구 번호", example = "CLM20230001", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String claimNumber;
|
||||
|
||||
@Schema(description = "청구 금액", example = "1500000.00", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Double claimAmount;
|
||||
|
||||
@Schema(description = "청구 일자 (YYYY-MM-DD)", example = "2023-09-15", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String claimDate;
|
||||
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.ins.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class InsuranceClaimProcessorResponse {
|
||||
private String resultCode;
|
||||
|
||||
private String resultMessage;
|
||||
@Schema(description = "청구 처리 고유 식별자", example = "CLM20230001", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String claimId;
|
||||
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.ins.usecase;
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.ins.dto.InsuranceClaimProcessorRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.ins.dto.InsuranceClaimProcessorResponse;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.ins.usecase
|
||||
* @className InsuranceClaimProcessorUseCase
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author Admin
|
||||
* @create 2026.08.11
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.08.11 Admin 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
public interface InsuranceClaimProcessorUseCase {
|
||||
|
||||
@McpTool(name = "ins_insurance_processor", title = "보험금 청구", description = "보험금 청구 요청을 처리하고 결과를 반환하는 LLM 도구 가이드")
|
||||
@GrowToolHint(categoryKey = "ins", mappingId = "CLAIM0000001")
|
||||
InsuranceClaimProcessorResponse processInsuranceClaim(InsuranceClaimProcessorRequest req);
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.ins.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.ins.converter.InsuranceClaimProcessorConverter;
|
||||
import io.shinhanlife.dap.mcc.biz.ins.dto.InsuranceClaimProcessorRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.ins.dto.InsuranceClaimProcessorResponse;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.http.insurance.InsuranceClient;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.http.insurance.io.InsuranceClaimProcessorHttpRequest;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.http.insurance.io.InsuranceClaimProcessorHttpResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.ins.usecase.InsuranceClaimProcessorUseCase;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class InsuranceClaimProcessorUseCaseImpl implements InsuranceClaimProcessorUseCase {
|
||||
|
||||
private final InsuranceClaimProcessorConverter converter;
|
||||
private final InsuranceClient insuranceClient;
|
||||
|
||||
@Override
|
||||
public InsuranceClaimProcessorResponse processInsuranceClaim(InsuranceClaimProcessorRequest req) {
|
||||
InsuranceClaimProcessorHttpRequest httpRequest = converter.toHttpRequest(req);
|
||||
InsuranceClaimProcessorHttpResponse httpResponse = insuranceClient.call(httpRequest, InsuranceClaimProcessorHttpResponse.class);
|
||||
|
||||
InsuranceClaimProcessorResponse response = converter.toResponse(httpResponse);
|
||||
response.setResultCode("SUCCESS");
|
||||
response.setResultMessage("HTTP API call completed.");
|
||||
return response;
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.oth.converter;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.oth.dto.Onnba3011Request;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_I;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.converter
|
||||
* @className Onnba3011Converter
|
||||
* @description Converts ONNBA tool input into the CLCNNB00001 MCI payload
|
||||
* @author 0986406
|
||||
* @create 2026.07.27
|
||||
* <pre>
|
||||
* ---------- revision history ----------
|
||||
* date author description
|
||||
* ---------- --------- ---------------------------
|
||||
* 2026.07.27 0986406 initial creation
|
||||
* </pre>
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface Onnba3011Converter {
|
||||
|
||||
CLCNNB00001_I toMciRequest(Onnba3011Request source);
|
||||
|
||||
CLCNNB00001_I.UnfcPrbuIrcoAdduDto toUnfcPrbuIrcoAddu(
|
||||
Onnba3011Request.UnfcPrbuIrcoAdduDto source);
|
||||
|
||||
CLCNNB00001_I.SucoIspaBasDto toSucoIspaBas(Onnba3011Request.SucoIspaBasDto source);
|
||||
}
|
||||
@@ -1,119 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.oth.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.dto
|
||||
* @className Onnba3011ReqDto
|
||||
* @description 보종By가입설계한도계산조회 MCI 요청 전문 (ONNBA3011_I)
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
*/
|
||||
@Data
|
||||
public class Onnba3011Request {
|
||||
|
||||
@JsonPropertyDescription("통합기계약보험 (유형: gs, 길이: 72)")
|
||||
@JsonProperty("unfcPrbuIrcoAddu")
|
||||
private UnfcPrbuIrcoAdduDto unfcPrbuIrcoAddu;
|
||||
|
||||
@JsonPropertyDescription("처리구분코드 (길이: 1)")
|
||||
@JsonProperty("dalScCd")
|
||||
private String dalScCd;
|
||||
|
||||
@JsonPropertyDescription("고객청약관계 (길이: 2)")
|
||||
@JsonProperty("cstSucoRltyCd")
|
||||
private String cstSucoRltyCd;
|
||||
|
||||
@JsonPropertyDescription("고객번호 (길이: 12)")
|
||||
@JsonProperty("csNo")
|
||||
private String csNo;
|
||||
|
||||
@JsonPropertyDescription("주민등록번호 (길이: 50)")
|
||||
@JsonProperty("rdreNo")
|
||||
private String rdreNo;
|
||||
|
||||
@JsonPropertyDescription("통합급부계산 (길이: 1)")
|
||||
@JsonProperty("unfcPvsCalReqYn")
|
||||
private String unfcPvsCalReqYn;
|
||||
|
||||
@JsonPropertyDescription("한국신용정보 (길이: 1)")
|
||||
@JsonProperty("kcisPymmTnnrRequest")
|
||||
private String kcisPymmTnnrRequest;
|
||||
|
||||
@JsonPropertyDescription("한도초과여부 (길이: 1)")
|
||||
@JsonProperty("lmovYn")
|
||||
private String lmovYn;
|
||||
|
||||
@JsonPropertyDescription("일반경유승인 (길이: 1)")
|
||||
@JsonProperty("genPsthApvTrgtYn")
|
||||
private String genPsthApvTrgtYn;
|
||||
|
||||
@JsonPropertyDescription("보험사한도초과 (길이: 1)")
|
||||
@JsonProperty("ircoLmovEcpbTrgtYn")
|
||||
private String ircoLmovEcpbTrgtYn;
|
||||
|
||||
@JsonPropertyDescription("진단계산여부 (길이: 1)")
|
||||
@JsonProperty("digCalYn")
|
||||
private String digCalYn;
|
||||
|
||||
@JsonPropertyDescription("기계약포함진단 (길이: 1)")
|
||||
@JsonProperty("prbuIciDigCalYn")
|
||||
private String prbuIciDigCalYn;
|
||||
|
||||
@JsonPropertyDescription("청약심사기본Dto (유형: gs, 길이: 2532)")
|
||||
@JsonProperty("sucoIspaBasDto")
|
||||
private SucoIspaBasDto sucoIspaBasDto;
|
||||
|
||||
// ----- Nested DTO Classes -----
|
||||
|
||||
@Data
|
||||
public static class UnfcPrbuIrcoAdduDto {
|
||||
// 실제 필요한 하위 필드들 추가 (사진 생략부분)
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class SucoIspaBasDto {
|
||||
|
||||
@JsonPropertyDescription("계약처리유형 (길이: 2)")
|
||||
@JsonProperty("ccnDalTypCd")
|
||||
private String ccnDalTypCd;
|
||||
|
||||
@JsonPropertyDescription("신계약입력경로 (길이: 2)")
|
||||
@JsonProperty("nwcnptCursCd")
|
||||
private String nwcnptCursCd;
|
||||
|
||||
@JsonPropertyDescription("개인단체계약 (길이: 2)")
|
||||
@JsonProperty("induAsctScCd")
|
||||
private String induAsctScCd;
|
||||
|
||||
@JsonPropertyDescription("모집조직번호 (길이: 7)")
|
||||
@JsonProperty("cepeOgnzNo")
|
||||
private String cepeOgnzNo;
|
||||
|
||||
@JsonPropertyDescription("모집자사번번호 (길이: 8)")
|
||||
@JsonProperty("cepePrafNo")
|
||||
private String cepePrafNo;
|
||||
|
||||
@JsonPropertyDescription("수금조직번호 (길이: 7)")
|
||||
@JsonProperty("clmoOgnzNo")
|
||||
private String clmoOgnzNo;
|
||||
|
||||
@JsonPropertyDescription("수금자사번번호 (길이: 8)")
|
||||
@JsonProperty("clmoPrafNo")
|
||||
private String clmoPrafNo;
|
||||
|
||||
@JsonPropertyDescription("청약일자 (길이: 20)")
|
||||
@JsonProperty("sucoYmd")
|
||||
private String sucoYmd;
|
||||
|
||||
@JsonPropertyDescription("발행일자 (길이: 20)")
|
||||
@JsonProperty("ispDt")
|
||||
private String ispDt;
|
||||
|
||||
@JsonPropertyDescription("계약일자 (길이: 20)")
|
||||
@JsonProperty("contYmd")
|
||||
private String contYmd;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.oth.usecase;
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.oth.dto.*;
|
||||
|
||||
public interface Onnba3011UseCase {
|
||||
@McpTool(name = "oth_onnba3011_call", description = "Onnba3011 호출 툴")
|
||||
@GrowToolHint(categoryKey = "oth")
|
||||
Object callOnnba3011(Onnba3011Request req);
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.oth.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.oth.converter.Onnba3011Converter;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.MciCfpaClient;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_I;
|
||||
import io.shinhanlife.dap.mcc.biz.oth.usecase.Onnba3011UseCase;
|
||||
import io.shinhanlife.dap.mcc.biz.oth.dto.Onnba3011Request;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.service
|
||||
* @className OnnbaMciToolService
|
||||
* @description 보종By가입설계한도계산조회 MCI 연동 툴
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class Onnba3011UseCaseImpl implements Onnba3011UseCase {
|
||||
|
||||
private static final String INTERFACE_CODE_3011 = "CLCNNB00001";
|
||||
|
||||
// 공통 MCI Client 주입
|
||||
private final MciCfpaClient mciCfpaClient;
|
||||
private final Onnba3011Converter onnba3011Converter;
|
||||
/**
|
||||
* AI Agent가 호출하게 될 메서드입니다.
|
||||
*/
|
||||
@Override
|
||||
public Object callOnnba3011(Onnba3011Request req) {
|
||||
log.info("[MCI Tool] 보종By가입설계한도계산조회 요청 수신.");
|
||||
|
||||
try {
|
||||
// MciCfpaClient를 통한 호출
|
||||
CLCNNB00001_I mciRequest = onnba3011Converter.toMciRequest(req);
|
||||
Object response = mciCfpaClient.callCfpa0001(mciRequest);
|
||||
|
||||
log.info("[MCI Tool] Glow 기반 MCI 연동 성공.");
|
||||
|
||||
// 결과 반환
|
||||
return response != null ? response : "{\"status\":\"SUCCESS\", \"message\":\"GlowMciComponent 통신 완료\"}";
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("[MCI Tool] MCI 연동 중 오류 발생: {}", e.getMessage(), e);
|
||||
return "{\"status\":\"ERROR\", \"message\":\"MCI 통신 실패: " + e.getMessage() + "\"}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.dto;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class DailyQuoteRequest {
|
||||
|
||||
@McpToolParam(description = "카테고리 (예: 속담 등)", required = false)
|
||||
@Schema(example = "속담")
|
||||
private String category;
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.dto;
|
||||
|
||||
public record DailyQuoteResponse(String quote, String author) {}
|
||||
@@ -1,18 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.dto;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class ExchangeRateRequest {
|
||||
@McpToolParam(description = "환율 코드 (예: USD 등)", required = false)
|
||||
@Schema(example = "USD")
|
||||
private String currencyCode;
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.dto;
|
||||
|
||||
public record ExchangeRateResponse(String baseCurrency, String targetCurrency, double rate) {}
|
||||
@@ -1,32 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.dto;
|
||||
|
||||
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.smp.dto
|
||||
* @className TeamMemberRequest
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author jade
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 jade 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class TeamMemberRequest {
|
||||
@McpToolParam(description = "조회할 팀 이름 (예: AX, MCP, TOOL, 전체 등)", required = false)
|
||||
@Schema(example = "TOOL")
|
||||
private String teamName;
|
||||
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.smp.dto
|
||||
* @className TeamMemberResponse
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author jade
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 jade 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class TeamMemberResponse {
|
||||
private String result;
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.dto;
|
||||
|
||||
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.dto
|
||||
* @className WeatherRequest
|
||||
* @description 기상 조회 요청 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.07.14
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.14 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
public record WeatherRequest(
|
||||
@McpToolParam(description = "도시를 입력하세여(예: 서울)", required = true)
|
||||
String city
|
||||
) {
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.dto;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.dto
|
||||
* @className WeatherResponse
|
||||
* @description 기상 조회 응답 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.07.14
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.14 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
public record WeatherResponse(
|
||||
String city,
|
||||
double temperature,
|
||||
double windSpeed,
|
||||
String reportTime,
|
||||
String summary
|
||||
) {
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.usecase;
|
||||
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.DailyQuoteRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.DailyQuoteResponse;
|
||||
|
||||
public interface DailyQuoteToolUseCase {
|
||||
@McpTool(name = "smp_quote_daily", title = "오늘의 명언 툴", description = "무작위로 영감을 주는 명언을 하나 가져옵니다.")
|
||||
@GrowToolHint(categoryKey = "smp", mappingId = "QUOTE_001")
|
||||
DailyQuoteResponse getDailyQuote(DailyQuoteRequest req);
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.usecase;
|
||||
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateResponse;
|
||||
|
||||
public interface ExchangeRateToolUseCase {
|
||||
@McpTool(name = "smp_exchange_inquiry", title = "실시간 환율 조회 툴", description = "원하는 통화의 실시간 환율을 조회합니다. (예: USD, EUR, JPY)")
|
||||
@GrowToolHint(categoryKey = "smp", mappingId = "EXCHANGE_001")
|
||||
ExchangeRateResponse getExchangeRate(ExchangeRateRequest req);
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.usecase;
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.TeamMemberRequest;
|
||||
|
||||
public interface TeamMemberUseCase {
|
||||
@McpTool(name = "smp_team_list", title = "신한라이프 MCP, TOOL 파트 구성원 조회", description = "신한라이프 MCP, TOOL 파트 구성원을 조회합니다.", annotations = @McpTool.McpAnnotations(openWorldHint = false))
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "smp", mappingId = "DIRECT0001")
|
||||
Object getTeamMember(TeamMemberRequest req);
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.usecase;
|
||||
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.*;
|
||||
|
||||
public interface WeatherToolUseCase {
|
||||
@McpTool(name = "smp_weather_inquiry", title = "날씨 조회 툴", description = "특정 도시의 현재 날씨, 온도, 풍속 정보를 조회합니다.")
|
||||
@GrowToolHint(categoryKey = "smp", mappingId = "WEATHER_001")
|
||||
WeatherResponse getWeather(WeatherRequest req);
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.DailyQuoteRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.DailyQuoteResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.usecase.DailyQuoteToolUseCase;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.service
|
||||
* @className DailyQuoteToolService
|
||||
* @description 랜덤 명언 제공 툴
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class DailyQuoteToolUseCaseImpl implements DailyQuoteToolUseCase {
|
||||
|
||||
private final List<DailyQuoteResponse> quotes = List.of(
|
||||
new DailyQuoteResponse("성공은 매일 반복한 작은 노력들의 합이다.", "로버트 콜리어"),
|
||||
new DailyQuoteResponse("시작이 반이다.", "아리스토텔레스"),
|
||||
new DailyQuoteResponse("포기하지 않는 한 실패는 없다.", "알베르트 아인슈타인"),
|
||||
new DailyQuoteResponse("가장 큰 위험은 위험 없는 삶이다.", "스티븐 코비")
|
||||
);
|
||||
|
||||
@Override
|
||||
public DailyQuoteResponse getDailyQuote(DailyQuoteRequest req) {
|
||||
int index = new Random().nextInt(quotes.size());
|
||||
DailyQuoteResponse selected = quotes.get(index);
|
||||
|
||||
log.info("[DailyQuoteTool] 명언 제공 완료: {}", selected.author());
|
||||
return selected;
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.usecase.ExchangeRateToolUseCase;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestClient;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.service
|
||||
* @className ExchangeRateToolService
|
||||
* @description 실시간 환율 조회 툴
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ExchangeRateToolUseCaseImpl implements ExchangeRateToolUseCase {
|
||||
|
||||
private final RestClient restClient;
|
||||
|
||||
public ExchangeRateToolUseCaseImpl() {
|
||||
this.restClient = RestClient.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExchangeRateResponse getExchangeRate(ExchangeRateRequest req) {
|
||||
String targetCurrency = req.getCurrencyCode() != null ? req.getCurrencyCode().toUpperCase().trim() : "USD";
|
||||
|
||||
// 간단한 모의 데이터로 반환 (실제 구현 시 외부 연동)
|
||||
double dummyRate = 1350.50;
|
||||
if (targetCurrency.contains("JPY")) {
|
||||
dummyRate = 905.20;
|
||||
} else if (targetCurrency.contains("EUR")) {
|
||||
dummyRate = 1450.30;
|
||||
}
|
||||
|
||||
log.info("[ExchangeRateTool] 환율 조회 완료: {} -> {}", targetCurrency, dummyRate);
|
||||
return new ExchangeRateResponse("KRW", targetCurrency, dummyRate);
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.TeamMemberRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.TeamMemberResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.usecase.TeamMemberUseCase;
|
||||
import org.springframework.stereotype.Service;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.smp.usecase.impl
|
||||
* @className TeamMemberUseCaseImpl
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author jade
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 jade 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class TeamMemberUseCaseImpl implements TeamMemberUseCase {
|
||||
|
||||
@Override
|
||||
public Object getTeamMember(TeamMemberRequest req) {
|
||||
log.info("[A01] 신한라이프 MCP, TOOL 파트 구성원 조회 요청: {}", req);
|
||||
|
||||
String filter = req != null && req.getTeamName() != null ? req.getTeamName().toUpperCase() : "전체";
|
||||
|
||||
String resultString = "";
|
||||
if (filter.contains("AX")) {
|
||||
resultString += "ax 추진팀 박세진 프로\n";
|
||||
} else if (filter.contains("MCP") && !filter.contains("TOOL")) {
|
||||
resultString += "MCP 팀은 고석민 수석 , 장효원 책임\n";
|
||||
} else if (filter.contains("TOOL") && !filter.contains("MCP")) {
|
||||
resultString += "TOOL 팀은 김형식 수석 ,김영진 책임 , 김도겸 대리 , 이주희 선임 , 문주현 선임 , 이보람 대리 , 박수빈 대리\n";
|
||||
} else {
|
||||
resultString += "ax 추진팀 박세진 프로\n" +
|
||||
"MCP & TOOL 팀 담당자는 윤희준 이사\n" +
|
||||
"MCP 팀은 고석민 수석 , 장효원 책임\n" +
|
||||
"TOOL 팀은 김형식 수석 ,김영진 책임 , 김도겸 대리 , 이주희 선임 , 문주현 선임 , 이보람 대리 , 박수빈 대리";
|
||||
}
|
||||
|
||||
TeamMemberResponse res = new TeamMemberResponse();
|
||||
res.setResult(resultString.trim());
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.smp.usecase.impl;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.usecase.WeatherToolUseCase;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.WeatherRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.smp.dto.WeatherResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestClient;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.service
|
||||
* @className WeatherToolService
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.07.14
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.14 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class WeatherToolUseCaseImpl implements WeatherToolUseCase {
|
||||
|
||||
private final RestClient restClient;
|
||||
|
||||
public WeatherToolUseCaseImpl() {
|
||||
this.restClient = RestClient.create();
|
||||
}
|
||||
public WeatherResponse getWeather(WeatherRequest req) {
|
||||
String city = req.city() != null ? req.city().trim() : "서울";
|
||||
|
||||
// 지역별 위경도 매핑 (간단한 예시)
|
||||
double lat = 37.566;
|
||||
double lon = 126.978;
|
||||
|
||||
if (city.contains("부산")) {
|
||||
lat = 35.179;
|
||||
lon = 129.075;
|
||||
} else if (city.contains("제주")) {
|
||||
lat = 33.499;
|
||||
lon = 126.531;
|
||||
} else if (city.contains("인천")) {
|
||||
lat = 37.456;
|
||||
lon = 126.705;
|
||||
}
|
||||
|
||||
try {
|
||||
String newRequestId = java.util.UUID.randomUUID().toString();
|
||||
String url = String.format("https://api.open-meteo.com/v1/forecast?latitude=%f&longitude=%f¤t_weather=true", lat, lon);
|
||||
|
||||
log.info("[WeatherTool] OUTBOUND HTTP IN - request-id: {}", newRequestId);
|
||||
log.info("[WeatherTool] 날씨 조회 요청 URL: {}", url);
|
||||
|
||||
String responseStr = restClient.get()
|
||||
.uri(url)
|
||||
.header("request-id", newRequestId)
|
||||
.retrieve()
|
||||
.body(String.class);
|
||||
|
||||
log.info("[WeatherTool] OUTBOUND HTTP OUT - request-id: {}", newRequestId);
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
JsonNode response = mapper.readTree(responseStr);
|
||||
|
||||
if (response != null && response.has("current_weather")) {
|
||||
JsonNode current = response.get("current_weather");
|
||||
double temp = current.path("temperature").asDouble();
|
||||
double windSpeed = current.path("windspeed").asDouble();
|
||||
String time = current.path("time").asText();
|
||||
|
||||
int weatherCode = current.path("weathercode").asInt();
|
||||
String summary = parseWeatherCode(weatherCode);
|
||||
|
||||
String formattedTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
|
||||
|
||||
return new WeatherResponse(city, temp, windSpeed, formattedTime, summary);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("[WeatherTool] 날씨 API 연동 실패: {}", e.getMessage());
|
||||
return new WeatherResponse(city, 0.0, 0.0, "", "날씨 정보를 불러오는데 실패했습니다.");
|
||||
}
|
||||
|
||||
return new WeatherResponse(city, 0.0, 0.0, "", "알 수 없는 응답입니다.");
|
||||
}
|
||||
|
||||
private String parseWeatherCode(int code) {
|
||||
if (code == 0) return "맑음 (Clear)";
|
||||
if (code >= 1 && code <= 3) return "구름조금/흐림 (Cloudy)";
|
||||
if (code >= 45 && code <= 48) return "안개 (Fog)";
|
||||
if (code >= 51 && code <= 67) return "비/이슬비 (Rain)";
|
||||
if (code >= 71 && code <= 77) return "눈 (Snow)";
|
||||
if (code >= 95) return "뇌우/천둥번개 (Thunderstorm)";
|
||||
return "알 수 없음 (Unknown)";
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.converter;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqDetailRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqDetailResponse;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.io.SOLG00000002_I;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.io.SOLG00000002_O;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.sol.converter
|
||||
* @className SolReqDetailConverter
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface SolReqDetailConverter {
|
||||
|
||||
@Mapping(source = "srId", target = "srId")
|
||||
SOLG00000002_I toLegacyRequest(SolReqDetailRequest req);
|
||||
|
||||
SolReqDetailResponse toResponse(SOLG00000002_O mciRes);
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.converter;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqListRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqListResponse;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.io.SOLG00000001_I;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.io.SOLG00000001_O;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.sol.converter
|
||||
* @className SolReqListConverter
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author jade
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 jade 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface SolReqListConverter {
|
||||
@Mapping(source = "status", target = "reqStatus", defaultValue = "진행중")
|
||||
@Mapping(source = "period", target = "reqPeriod", defaultValue = "최근 3개월")
|
||||
@Mapping(source = "target", target = "reqTarget", defaultValue = "나의 업무")
|
||||
SOLG00000001_I toLegacyRequest(SolReqListRequest req);
|
||||
|
||||
SolReqListResponse toResponse(SOLG00000001_O mciRes);
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.dto;
|
||||
|
||||
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.sol.dto
|
||||
* @className SolReqDetailRequest
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class SolReqDetailRequest {
|
||||
|
||||
@McpToolParam(description = "상세 조회할 SOL 의뢰서 ID", required = true)
|
||||
@Schema(example = "SR20260805")
|
||||
private String srId;
|
||||
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.sol.dto
|
||||
* @className SolReqDetailResponse
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class SolReqDetailResponse {
|
||||
|
||||
private String srId;
|
||||
private String srName;
|
||||
private String process;
|
||||
private String devStage;
|
||||
private String appName;
|
||||
private String requester;
|
||||
private String requestDate;
|
||||
private String dueDate;
|
||||
private String description;
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.dto;
|
||||
|
||||
|
||||
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.sol.dto
|
||||
* @className SolReqListRequest
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author jade
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 jade 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class SolReqListRequest {
|
||||
@McpToolParam(description = "진행상태 (예: 진행중, 완료 등)", required = false)
|
||||
@Schema(example = "RECEIVED")
|
||||
private String status;
|
||||
|
||||
|
||||
@McpToolParam(description = "조회기간 (예: 1개월, 3개월 등)", required = false)
|
||||
private String period;
|
||||
|
||||
@McpToolParam(description = "조회대상 (예: 나의 업무, 전체 등)", required = false)
|
||||
@Schema(example = "USER")
|
||||
private String target;
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.sol.dto
|
||||
* @className SolReqListResponse
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author jade
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 jade 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class SolReqListResponse {
|
||||
private List<SolReqListItem> reqList;
|
||||
|
||||
@Data
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public static class SolReqListItem {
|
||||
private String srId;
|
||||
private String srName;
|
||||
private String process;
|
||||
private String devStage;
|
||||
private String appName;
|
||||
private String requester;
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.usecase;
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqDetailRequest;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.sol.usecase
|
||||
* @className SolReqDetailUseCase
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
public interface SolReqDetailUseCase {
|
||||
|
||||
@McpTool(name = "sol_request_detail", title = "SolReqDetail 툴", description = "SOL 의뢰서 상세 조회", annotations = @McpTool.McpAnnotations(openWorldHint = false, readOnlyHint = true))
|
||||
@GrowToolHint(
|
||||
requiresApproval = false,
|
||||
categoryKey = "sol",
|
||||
mappingId = "SOLG00000002",
|
||||
displayDescription = "SOL 의뢰서 한 건의 상세 정보를 조회합니다.",
|
||||
functionDescription = "SOL 의뢰서 식별자를 기준으로 의뢰서 상세 내용을 조회한다.",
|
||||
whenToUse = "사용자가 특정 SOL 의뢰서의 상세 내용과 진행 정보를 확인하려는 경우 사용한다.",
|
||||
whenNotToUse = "의뢰서 목록만 찾거나 의뢰서를 변경 또는 처리하려는 경우에는 사용하지 않는다.",
|
||||
ioLimits = "정확한 의뢰서 ID가 필요하며 등록된 상세 정보만 반환한다.",
|
||||
exampleQueries = {"이 SOL 의뢰서 상세를 보여줘", "의뢰서 ID로 처리 내용을 확인해줘", "선택한 의뢰서의 상세 정보를 알려줘"},
|
||||
destructive = false,
|
||||
idempotent = true,
|
||||
tags = {"SOL", "의뢰서"},
|
||||
requiredEnvKeys = {},
|
||||
ownerOrg = "MCP_TOOL"
|
||||
)
|
||||
Object getSolRequestDetail(SolReqDetailRequest req);
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.usecase;
|
||||
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqListRequest;
|
||||
|
||||
public interface SolReqListUseCase {
|
||||
@McpTool(name = "sol_request_list", title = "SolReqList 툴", description = "SOL 의뢰서 목록 조회해줘", annotations = @McpTool.McpAnnotations(openWorldHint = false))
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "sol", mappingId = "SOLG00000001")
|
||||
Object searchSolRequests(SolReqListRequest req);
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.sol.converter.SolReqDetailConverter;
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqDetailRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqDetailResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.sol.usecase.SolReqDetailUseCase;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.MciNclgClient;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.io.SOLG00000002_I;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.io.SOLG00000002_O;
|
||||
import io.shinhanlife.glow.communication.dto.Transfer;
|
||||
import java.util.Map;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.sol.usecase.impl
|
||||
* @className SolReqDetailUseCaseImpl
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author 0986406
|
||||
* @create 2026.09.01
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.09.01 0986406 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SolReqDetailUseCaseImpl implements SolReqDetailUseCase {
|
||||
|
||||
private final MciNclgClient mci;
|
||||
private final SolReqDetailConverter converter;
|
||||
|
||||
@Value("${sol.req-detail.mock-enabled:false}")
|
||||
private boolean mockEnabled;
|
||||
|
||||
@Override
|
||||
public Object getSolRequestDetail(SolReqDetailRequest req) {
|
||||
log.info("[MCI Tool] {} 요청 수신. 파라미터: {}", "solReqDetail", req);
|
||||
if (req == null || req.getSrId() == null || req.getSrId().isBlank()) {
|
||||
return Map.of("status", "ERROR", "message", "srId는 필수입니다.");
|
||||
}
|
||||
|
||||
if (mockEnabled) {
|
||||
return createLocalSampleResponse(req.getSrId());
|
||||
}
|
||||
|
||||
try {
|
||||
SOLG00000002_I mciRequest = converter.toLegacyRequest(req);
|
||||
Transfer<SOLG00000002_O> mciResponse = mci.callTo(
|
||||
"SOLG00000002", "SOLG00000002", mciRequest, SOLG00000002_O.class);
|
||||
|
||||
if (mciResponse == null || mciResponse.getBody() == null) {
|
||||
return Map.of("status", "NOT_FOUND", "message", "의뢰서 상세 정보를 찾을 수 없습니다.");
|
||||
}
|
||||
return converter.toResponse(mciResponse.getBody());
|
||||
} catch (Exception e) {
|
||||
log.error("[MCI Tool] 연동 중 오류 발생: {}", e.getMessage(), e);
|
||||
return Map.of(
|
||||
"status", "ERROR",
|
||||
"message", e.getMessage() != null ? e.getMessage() : "Unknown error");
|
||||
}
|
||||
}
|
||||
|
||||
private Object createLocalSampleResponse(String srId) {
|
||||
SolReqDetailResponse response = new SolReqDetailResponse();
|
||||
if ("SR-2026-001".equalsIgnoreCase(srId)) {
|
||||
response.setSrId("SR-2026-001");
|
||||
response.setSrName("AX HUB 메인 화면 UI 개편");
|
||||
response.setProcess("진행중");
|
||||
response.setDevStage("개발(단위테스트)");
|
||||
response.setAppName("AX HUB");
|
||||
response.setRequester("신한준");
|
||||
response.setRequestDate("2026-07-01");
|
||||
response.setDueDate("2026-08-31");
|
||||
response.setDescription("AX HUB 메인 화면의 사용성과 접근성을 개선하는 UI 개편 의뢰입니다.");
|
||||
return response;
|
||||
}
|
||||
if ("SR-2026-002".equalsIgnoreCase(srId)) {
|
||||
response.setSrId("SR-2026-002");
|
||||
response.setSrName("SOL 연동 모듈 추가 개발");
|
||||
response.setProcess("진행중");
|
||||
response.setDevStage("분석/설계");
|
||||
response.setAppName("MCP Gateway");
|
||||
response.setRequester("고석민");
|
||||
response.setRequestDate("2026-07-15");
|
||||
response.setDueDate("2026-09-30");
|
||||
response.setDescription("SOL 의뢰서 조회 기능을 MCP 도구로 제공하기 위한 연동 모듈 개발 의뢰입니다.");
|
||||
return response;
|
||||
}
|
||||
return Map.of(
|
||||
"status", "NOT_FOUND",
|
||||
"message", "의뢰서를 찾을 수 없습니다.",
|
||||
"srId", srId);
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
package io.shinhanlife.dap.mcc.biz.sol.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqListRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqListResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.sol.usecase.SolReqListUseCase;
|
||||
import io.shinhanlife.glow.communication.dto.Transfer;
|
||||
import org.springframework.stereotype.Service;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import io.shinhanlife.dap.mcc.biz.sol.converter.SolReqListConverter;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.io.SOLG00000001_I;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.io.SOLG00000001_O;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.ncl.g.MciNclgClient;
|
||||
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqListResponse.SolReqListItem;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dap.mcc.biz.sol.usecase.impl
|
||||
* @className SolReqListUseCaseImpl
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author jade
|
||||
* @create 2026.07.29
|
||||
* <pre>
|
||||
* ---------- 개정이력 ----------
|
||||
* 수정일 수정자 수정내용
|
||||
* ---------- -------- ---------------------------
|
||||
* 2026.07.29 jade 최초생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SolReqListUseCaseImpl implements SolReqListUseCase {
|
||||
|
||||
private final MciNclgClient mci;
|
||||
private final SolReqListConverter converter;
|
||||
|
||||
@Override
|
||||
public Object searchSolRequests(SolReqListRequest req) {
|
||||
log.info("[MCI Tool] {} 요청 수신. 파라미터: {}", "solReqList", req);
|
||||
try {
|
||||
SOLG00000001_I mciRequest = converter.toLegacyRequest(req);
|
||||
Transfer<SOLG00000001_O> mciResponse = mci.callTo(
|
||||
"SOLG00000001", "SOLG00000001", mciRequest, SOLG00000001_O.class);
|
||||
log.info("[MCI Tool] SOLG00000001 MCI call completed. Returning dummy response: {}",
|
||||
mciResponse != null);
|
||||
// 현업 테스트용으로 MCI 통신을 바이패스하고 하드코딩된 결과를 반환합니다.
|
||||
SolReqListResponse res = new SolReqListResponse();
|
||||
List<SolReqListItem> list = new ArrayList<>();
|
||||
|
||||
SolReqListItem item1 = new SolReqListItem();
|
||||
item1.setSrId("SR-2026-001");
|
||||
item1.setSrName("AX HUB 메인 화면 UI 개편");
|
||||
item1.setProcess("진행중");
|
||||
item1.setDevStage("개발(단위테스트)");
|
||||
item1.setAppName("AX HUB");
|
||||
item1.setRequester("윤희준");
|
||||
list.add(item1);
|
||||
|
||||
SolReqListItem item2 = new SolReqListItem();
|
||||
item2.setSrId("SR-2026-002");
|
||||
item2.setSrName("툴 연동 모듈 추가 개발");
|
||||
item2.setProcess("진행중");
|
||||
item2.setDevStage("분석/설계");
|
||||
item2.setAppName("MCP Gateway");
|
||||
item2.setRequester("고석민");
|
||||
list.add(item2);
|
||||
|
||||
res.setReqList(list);
|
||||
|
||||
return res;
|
||||
} catch (Exception e) {
|
||||
log.error("[MCI Tool] 연동 중 오류 발생: {}", e.getMessage(), e);
|
||||
return Map.of("status", "ERROR", "message", e.getMessage() != null ? e.getMessage() : "Unknown error");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package io.shinhanlife.dap.mcc.biz.voc.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
|
||||
@Data
|
||||
public class VocToolRequest {
|
||||
@McpToolParam(description = "업무 대상 식별자", required = false)
|
||||
private String subjectId;
|
||||
|
||||
@McpToolParam(description = "고객 식별자", required = false)
|
||||
private String customerId;
|
||||
|
||||
@McpToolParam(description = "검색어 또는 처리 내용", required = false)
|
||||
private String content;
|
||||
|
||||
@McpToolParam(description = "상태, 유형, 등급 또는 처리 값", required = false)
|
||||
private String value;
|
||||
|
||||
@McpToolParam(description = "담당자 식별자", required = false)
|
||||
private String assigneeId;
|
||||
|
||||
@McpToolParam(description = "조회 시작일(YYYY-MM-DD)", required = false)
|
||||
private String startDate;
|
||||
|
||||
@McpToolParam(description = "조회 종료일 또는 처리 예정일(YYYY-MM-DD)", required = false)
|
||||
private String endDate;
|
||||
|
||||
@McpToolParam(description = "페이지 번호", required = false)
|
||||
private Integer page;
|
||||
|
||||
@McpToolParam(description = "페이지 크기", required = false)
|
||||
private Integer size;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package io.shinhanlife.dap.mcc.biz.voc.dto;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class VocToolResponse {
|
||||
private String toolName;
|
||||
private String category;
|
||||
private String referenceId;
|
||||
private String status;
|
||||
private String summary;
|
||||
private String processedAt;
|
||||
private List<String> details;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package io.shinhanlife.dap.mcc.biz.voc.usecase;
|
||||
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.voc.dto.VocToolRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.voc.dto.VocToolResponse;
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
|
||||
public interface VocToolUseCase {
|
||||
@McpTool(name = "voc_register", title = "VOC 접수 등록", description = "VOC 접수 등록 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_REGISTER")
|
||||
VocToolResponse registerVoc(VocToolRequest request);
|
||||
@McpTool(name = "voc_detail", title = "VOC 상세 조회", description = "VOC 상세 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_DETAIL")
|
||||
VocToolResponse getVocDetail(VocToolRequest request);
|
||||
@McpTool(name = "voc_search", title = "VOC 목록 검색", description = "VOC 목록 검색 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_SEARCH")
|
||||
VocToolResponse searchVocs(VocToolRequest request);
|
||||
@McpTool(name = "voc_update", title = "VOC 내용 수정", description = "VOC 내용 수정 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_UPDATE")
|
||||
VocToolResponse updateVoc(VocToolRequest request);
|
||||
@McpTool(name = "voc_assign", title = "VOC 담당자 배정", description = "VOC 담당자 배정 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_ASSIGN")
|
||||
VocToolResponse assignVocOwner(VocToolRequest request);
|
||||
@McpTool(name = "voc_change_status", title = "VOC 처리 상태 변경", description = "VOC 처리 상태 변경 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_CHANGE_STATUS")
|
||||
VocToolResponse changeVocStatus(VocToolRequest request);
|
||||
@McpTool(name = "voc_register_result", title = "VOC 처리 결과 등록", description = "VOC 처리 결과 등록 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_REGISTER_RESULT")
|
||||
VocToolResponse registerVocResult(VocToolRequest request);
|
||||
@McpTool(name = "voc_send_reply", title = "VOC 답변 발송", description = "VOC 답변 발송 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_SEND_REPLY")
|
||||
VocToolResponse sendVocReply(VocToolRequest request);
|
||||
@McpTool(name = "voc_transfer", title = "VOC 이관 처리", description = "VOC 이관 처리 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_TRANSFER")
|
||||
VocToolResponse transferVoc(VocToolRequest request);
|
||||
@McpTool(name = "voc_set_priority", title = "VOC 우선순위 설정", description = "VOC 우선순위 설정 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_SET_PRIORITY")
|
||||
VocToolResponse setVocPriority(VocToolRequest request);
|
||||
@McpTool(name = "voc_classify_type", title = "VOC 유형 분류", description = "VOC 유형 분류 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_CLASSIFY_TYPE")
|
||||
VocToolResponse classifyVocType(VocToolRequest request);
|
||||
@McpTool(name = "voc_attachments", title = "VOC 첨부파일 조회", description = "VOC 첨부파일 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_ATTACHMENTS")
|
||||
VocToolResponse getVocAttachments(VocToolRequest request);
|
||||
@McpTool(name = "voc_customer_history", title = "고객별 VOC 이력 조회", description = "고객별 VOC 이력 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_CUSTOMER_HISTORY")
|
||||
VocToolResponse getCustomerVocHistory(VocToolRequest request);
|
||||
@McpTool(name = "voc_detect_duplicate", title = "중복 VOC 탐지", description = "중복 VOC 탐지 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_DETECT_DUPLICATE")
|
||||
VocToolResponse detectDuplicateVoc(VocToolRequest request);
|
||||
@McpTool(name = "voc_urgent_list", title = "긴급 VOC 목록 조회", description = "긴급 VOC 목록 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_URGENT_LIST")
|
||||
VocToolResponse getUrgentVocs(VocToolRequest request);
|
||||
@McpTool(name = "voc_extend_due_date", title = "VOC 처리 기한 연장", description = "VOC 처리 기한 연장 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_EXTEND_DUE_DATE")
|
||||
VocToolResponse extendVocDueDate(VocToolRequest request);
|
||||
@McpTool(name = "voc_statistics", title = "VOC 통계 조회", description = "VOC 통계 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_STATISTICS")
|
||||
VocToolResponse getVocStatistics(VocToolRequest request);
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package io.shinhanlife.dap.mcc.biz.voc.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.voc.dto.VocToolRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.voc.dto.VocToolResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.voc.usecase.VocToolUseCase;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class VocToolUseCaseImpl implements VocToolUseCase {
|
||||
@Override
|
||||
public VocToolResponse registerVoc(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_register", "VOC 접수 등록");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse getVocDetail(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_detail", "VOC 상세 조회");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse searchVocs(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_search", "VOC 목록 검색");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse updateVoc(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_update", "VOC 내용 수정");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse assignVocOwner(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_assign", "VOC 담당자 배정");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse changeVocStatus(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_change_status", "VOC 처리 상태 변경");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse registerVocResult(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_register_result", "VOC 처리 결과 등록");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse sendVocReply(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_send_reply", "VOC 답변 발송");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse transferVoc(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_transfer", "VOC 이관 처리");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse setVocPriority(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_set_priority", "VOC 우선순위 설정");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse classifyVocType(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_classify_type", "VOC 유형 분류");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse getVocAttachments(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_attachments", "VOC 첨부파일 조회");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse getCustomerVocHistory(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_customer_history", "고객별 VOC 이력 조회");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse detectDuplicateVoc(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_detect_duplicate", "중복 VOC 탐지");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse getUrgentVocs(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_urgent_list", "긴급 VOC 목록 조회");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse extendVocDueDate(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_extend_due_date", "VOC 처리 기한 연장");
|
||||
}
|
||||
@Override
|
||||
public VocToolResponse getVocStatistics(VocToolRequest request) {
|
||||
return mockResponse(request, "voc_statistics", "VOC 통계 조회");
|
||||
}
|
||||
private VocToolResponse mockResponse(VocToolRequest request, String toolName, String title) {
|
||||
VocToolResponse response = new VocToolResponse();
|
||||
response.setToolName(toolName);
|
||||
response.setCategory("VOC");
|
||||
response.setReferenceId(request != null && hasText(request.getSubjectId()) ? request.getSubjectId() : "VOC-000001");
|
||||
response.setStatus("정상");
|
||||
response.setSummary(title + " 처리 결과");
|
||||
response.setProcessedAt(LocalDateTime.now().toString());
|
||||
response.setDetails(List.of(title + " 모의 상세 정보", "외부 시스템을 변경하지 않는 샘플 응답"));
|
||||
return response;
|
||||
}
|
||||
|
||||
private boolean hasText(String value) {
|
||||
return value != null && !value.isBlank();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package io.shinhanlife.dap.mcc.biz.wcm.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springaicommunity.mcp.annotation.McpToolParam;
|
||||
|
||||
@Data
|
||||
public class WcmToolRequest {
|
||||
@McpToolParam(description = "업무 대상 식별자", required = false)
|
||||
private String subjectId;
|
||||
|
||||
@McpToolParam(description = "고객 식별자", required = false)
|
||||
private String customerId;
|
||||
|
||||
@McpToolParam(description = "검색어 또는 처리 내용", required = false)
|
||||
private String content;
|
||||
|
||||
@McpToolParam(description = "상태, 유형, 등급 또는 처리 값", required = false)
|
||||
private String value;
|
||||
|
||||
@McpToolParam(description = "담당자 식별자", required = false)
|
||||
private String assigneeId;
|
||||
|
||||
@McpToolParam(description = "조회 시작일(YYYY-MM-DD)", required = false)
|
||||
private String startDate;
|
||||
|
||||
@McpToolParam(description = "조회 종료일 또는 처리 예정일(YYYY-MM-DD)", required = false)
|
||||
private String endDate;
|
||||
|
||||
@McpToolParam(description = "페이지 번호", required = false)
|
||||
private Integer page;
|
||||
|
||||
@McpToolParam(description = "페이지 크기", required = false)
|
||||
private Integer size;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package io.shinhanlife.dap.mcc.biz.wcm.dto;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class WcmToolResponse {
|
||||
private String toolName;
|
||||
private String category;
|
||||
private String referenceId;
|
||||
private String status;
|
||||
private String summary;
|
||||
private String processedAt;
|
||||
private List<String> details;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package io.shinhanlife.dap.mcc.biz.wcm.usecase;
|
||||
|
||||
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
|
||||
import io.shinhanlife.dap.mcc.biz.wcm.dto.WcmToolRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.wcm.dto.WcmToolResponse;
|
||||
import org.springaicommunity.mcp.annotation.McpTool;
|
||||
|
||||
public interface WcmToolUseCase {
|
||||
@McpTool(name = "wcm_content_list", title = "웹 콘텐츠 목록 조회", description = "웹 콘텐츠 목록 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_LIST")
|
||||
WcmToolResponse getContentList(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_detail", title = "웹 콘텐츠 상세 조회", description = "웹 콘텐츠 상세 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_DETAIL")
|
||||
WcmToolResponse getContentDetail(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_create", title = "웹 콘텐츠 등록", description = "웹 콘텐츠 등록 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_CREATE")
|
||||
WcmToolResponse createContent(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_update", title = "웹 콘텐츠 수정", description = "웹 콘텐츠 수정 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_UPDATE")
|
||||
WcmToolResponse updateContent(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_delete", title = "웹 콘텐츠 삭제", description = "웹 콘텐츠 삭제 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_DELETE")
|
||||
WcmToolResponse deleteContent(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_copy", title = "웹 콘텐츠 복사", description = "웹 콘텐츠 복사 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_COPY")
|
||||
WcmToolResponse copyContent(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_preview", title = "웹 콘텐츠 미리보기", description = "웹 콘텐츠 미리보기 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_PREVIEW")
|
||||
WcmToolResponse previewContent(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_publish", title = "웹 콘텐츠 게시", description = "웹 콘텐츠 게시 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_PUBLISH")
|
||||
WcmToolResponse publishContent(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_unpublish", title = "웹 콘텐츠 게시 중지", description = "웹 콘텐츠 게시 중지 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_UNPUBLISH")
|
||||
WcmToolResponse unpublishContent(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_schedule_publish", title = "웹 콘텐츠 예약 게시", description = "웹 콘텐츠 예약 게시 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_SCHEDULE_PUBLISH")
|
||||
WcmToolResponse scheduleContentPublish(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_request_approval", title = "웹 콘텐츠 승인 요청", description = "웹 콘텐츠 승인 요청 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_REQUEST_APPROVAL")
|
||||
WcmToolResponse requestContentApproval(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_review_approval", title = "웹 콘텐츠 승인·반려", description = "웹 콘텐츠 승인·반려 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_REVIEW_APPROVAL")
|
||||
WcmToolResponse reviewContentApproval(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_version_history", title = "웹 콘텐츠 버전 이력 조회", description = "웹 콘텐츠 버전 이력 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_VERSION_HISTORY")
|
||||
WcmToolResponse getContentVersionHistory(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_content_restore_version", title = "웹 콘텐츠 이전 버전 복원", description = "웹 콘텐츠 이전 버전 복원 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_RESTORE_VERSION")
|
||||
WcmToolResponse restoreContentVersion(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_metadata_detail", title = "콘텐츠 메타데이터 조회", description = "콘텐츠 메타데이터 조회 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_METADATA_DETAIL")
|
||||
WcmToolResponse getContentMetadata(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_metadata_upsert", title = "콘텐츠 메타데이터 등록·수정", description = "콘텐츠 메타데이터 등록·수정 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_METADATA_UPSERT")
|
||||
WcmToolResponse upsertContentMetadata(WcmToolRequest request);
|
||||
@McpTool(name = "wcm_taxonomy_manage", title = "콘텐츠 카테고리·태그 관리", description = "콘텐츠 카테고리·태그 관리 기능을 안전한 모의 데이터로 제공합니다.")
|
||||
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_TAXONOMY_MANAGE")
|
||||
WcmToolResponse manageContentTaxonomy(WcmToolRequest request);
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package io.shinhanlife.dap.mcc.biz.wcm.usecase.impl;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.wcm.dto.WcmToolRequest;
|
||||
import io.shinhanlife.dap.mcc.biz.wcm.dto.WcmToolResponse;
|
||||
import io.shinhanlife.dap.mcc.biz.wcm.usecase.WcmToolUseCase;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class WcmToolUseCaseImpl implements WcmToolUseCase {
|
||||
@Override
|
||||
public WcmToolResponse getContentList(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_list", "웹 콘텐츠 목록 조회");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse getContentDetail(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_detail", "웹 콘텐츠 상세 조회");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse createContent(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_create", "웹 콘텐츠 등록");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse updateContent(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_update", "웹 콘텐츠 수정");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse deleteContent(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_delete", "웹 콘텐츠 삭제");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse copyContent(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_copy", "웹 콘텐츠 복사");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse previewContent(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_preview", "웹 콘텐츠 미리보기");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse publishContent(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_publish", "웹 콘텐츠 게시");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse unpublishContent(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_unpublish", "웹 콘텐츠 게시 중지");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse scheduleContentPublish(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_schedule_publish", "웹 콘텐츠 예약 게시");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse requestContentApproval(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_request_approval", "웹 콘텐츠 승인 요청");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse reviewContentApproval(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_review_approval", "웹 콘텐츠 승인·반려");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse getContentVersionHistory(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_version_history", "웹 콘텐츠 버전 이력 조회");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse restoreContentVersion(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_content_restore_version", "웹 콘텐츠 이전 버전 복원");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse getContentMetadata(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_metadata_detail", "콘텐츠 메타데이터 조회");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse upsertContentMetadata(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_metadata_upsert", "콘텐츠 메타데이터 등록·수정");
|
||||
}
|
||||
@Override
|
||||
public WcmToolResponse manageContentTaxonomy(WcmToolRequest request) {
|
||||
return mockResponse(request, "wcm_taxonomy_manage", "콘텐츠 카테고리·태그 관리");
|
||||
}
|
||||
private WcmToolResponse mockResponse(WcmToolRequest request, String toolName, String title) {
|
||||
WcmToolResponse response = new WcmToolResponse();
|
||||
response.setToolName(toolName);
|
||||
response.setCategory("WCMS");
|
||||
response.setReferenceId(request != null && hasText(request.getSubjectId()) ? request.getSubjectId() : "WCMS-000001");
|
||||
response.setStatus("정상");
|
||||
response.setSummary(title + " 처리 결과");
|
||||
response.setProcessedAt(LocalDateTime.now().toString());
|
||||
response.setDetails(List.of(title + " 모의 상세 정보", "외부 시스템을 변경하지 않는 샘플 응답"));
|
||||
return response;
|
||||
}
|
||||
|
||||
private boolean hasText(String value) {
|
||||
return value != null && !value.isBlank();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d;
|
||||
|
||||
import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerGuidanceToolResponse;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d.io.ONILD0320_I;
|
||||
import io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d.io.ONILD0320_O;
|
||||
import io.shinhanlife.glow.BizException;
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
name: cmm_comcode_lookup
|
||||
display_name: 메타 공통코드 조회
|
||||
version: 1.0.0
|
||||
category_key: cmm
|
||||
description:
|
||||
function: 통합코드 그룹과 코드명 조건으로 메타 공통코드 목록을 조회한다.
|
||||
when_to_use: 업무 코드의 값과 표시명을 확인하거나 유효한 코드 목록이 필요한 경우 사용한다.
|
||||
when_not_to_use: 공통코드를 신규 등록하거나 변경 또는 삭제하려는 경우에는 사용하지 않는다.
|
||||
io_limits: 검색 조건에 맞는 코드와 코드명만 반환하며 코드 데이터는 변경하지 않는다.
|
||||
display_description: 메타 시스템의 공통코드 목록을 조회합니다.
|
||||
example_queries: ["사용 상태 코드 목록을 알려줘", "고객 구분 공통코드를 찾아줘", "사용 중인 통합코드를 조회해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
groupCode: {type: string, description: 조회할 통합코드 그룹 ID}
|
||||
codeName: {type: string, description: 코드명 검색 키워드}
|
||||
useYn: {type: string, description: 사용 여부 Y 또는 N, enum: [Y, N]}
|
||||
additionalProperties: false
|
||||
tags: [메타, 공통코드]
|
||||
legacy_interface_id: CLCNNB00001
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,28 +0,0 @@
|
||||
name: cmm_customer_tool
|
||||
display_name: 고객 통합 안내이력 조회
|
||||
version: 1.0.0
|
||||
category_key: cmm
|
||||
description:
|
||||
function: 고객의 통합 안내 이력을 조회하는 도구입니다.
|
||||
when_to_use: 고객 ID와 조회 기간을 기반으로 해당 기간 동안의 안내 이력을 확인할 때 사용합니다.
|
||||
when_not_to_use: 안내 이력을 생성하거나 수정할 때는 사용하지 않습니다.
|
||||
io_limits: 안내 이력 조회만 수행하며 데이터를 변경하지 않습니다.
|
||||
display_description: 고객의 통합 안내 이력을 조회합니다.
|
||||
example_queries: ["고객 통합 안내이력 조회해줘", "특정 기간의 안내 이력을 확인해줘", "고객 번호로 안내 이력을 찾아줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
csNo: {type: string, description: 고객번호}
|
||||
ntleCd: {type: string, description: 안내장코드}
|
||||
notiPmlMdCd: {type: string, description: 안내발송방법코드}
|
||||
inqrStrYmd: {type: string, description: 조회시작일자}
|
||||
inqrEndYmd: {type: string, description: 조회종료일자}
|
||||
required: [csNo]
|
||||
additionalProperties: false
|
||||
tags: [고객, 통합안내이력]
|
||||
legacy_interface_id: ONILD0320
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,24 +0,0 @@
|
||||
name: cmm_meta_table
|
||||
display_name: 메타 테이블 조회
|
||||
version: 1.0.0
|
||||
category_key: cmm
|
||||
description:
|
||||
function: 물리명, 논리명 또는 소유자 조건으로 메타 테이블 정보를 조회한다.
|
||||
when_to_use: 사용자가 업무 데이터의 테이블명이나 소유 스키마를 확인하려는 경우 사용한다.
|
||||
when_not_to_use: 테이블을 생성하거나 구조를 변경하려는 경우에는 사용하지 않는다.
|
||||
io_limits: 메타에 등록된 테이블 설명 정보만 반환하며 실제 테이블 데이터는 조회하지 않는다.
|
||||
display_description: 메타 시스템에 등록된 테이블 정보를 조회합니다.
|
||||
example_queries: ["고객 기본 테이블을 찾아줘", "계약 관련 테이블 목록을 보여줘", "특정 스키마의 테이블을 조회해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
tableName: {type: string, description: 테이블 물리명 검색어}
|
||||
tableLogicalName: {type: string, description: 테이블 논리명 검색어}
|
||||
owner: {type: string, description: 테이블 소유 스키마명}
|
||||
additionalProperties: false
|
||||
tags: [메타, 테이블]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,23 +0,0 @@
|
||||
name: cmm_template_url
|
||||
display_name: 업무 템플릿 다운로드 URL 조회
|
||||
version: 1.0.0
|
||||
category_key: cmm
|
||||
description:
|
||||
function: 요청한 업무 템플릿 파일을 내려받을 수 있는 URL을 반환한다.
|
||||
when_to_use: 사용자가 엑셀이나 워드 업무 양식의 다운로드 위치를 요청한 경우 사용한다.
|
||||
when_not_to_use: 템플릿 내용을 작성하거나 업로드 또는 변경하려는 경우에는 사용하지 않는다.
|
||||
io_limits: 등록된 템플릿 ID에 대한 다운로드 URL만 반환하며 파일 자체는 반환하지 않는다.
|
||||
display_description: 업무 템플릿을 다운로드할 수 있는 URL을 제공합니다.
|
||||
example_queries: ["청구 양식 다운로드 링크를 알려줘", "업무용 엑셀 템플릿을 받고 싶어", "등록된 문서 양식 위치를 찾아줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
templateId: {type: string, description: 다운로드할 템플릿 식별자}
|
||||
required: [templateId]
|
||||
additionalProperties: false
|
||||
tags: [템플릿, 다운로드]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_activity_status
|
||||
display_name: 고객 활동 현황 조회
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 활동 현황 조회 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 활동 현황 조회 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 활동 현황 조회 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 활동 현황 조회 해줘", "고객 활동 현황 조회 결과를 알려줘", "고객 활동 현황 조회 기능을 실행해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 조회, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_consent_change
|
||||
display_name: 고객 동의 정보 변경
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 동의 정보 변경 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 동의 정보 변경 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 동의 정보 변경 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 동의 정보 변경 해줘", "고객 동의 정보 변경 결과를 알려줘", "고객 동의 정보 변경 기능을 실행해줘"]
|
||||
read_only: false
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 처리, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_consent_detail
|
||||
display_name: 고객 동의 정보 조회
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 동의 정보 조회 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 동의 정보 조회 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 동의 정보 조회 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 동의 정보 조회 해줘", "고객 동의 정보 조회 결과를 알려줘", "고객 동의 정보 조회 기능을 실행해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 조회, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_consultation_history
|
||||
display_name: 고객 상담 이력 조회
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 상담 이력 조회 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 상담 이력 조회 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 상담 이력 조회 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 상담 이력 조회 해줘", "고객 상담 이력 조회 결과를 알려줘", "고객 상담 이력 조회 기능을 실행해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 조회, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_consultation_register
|
||||
display_name: 고객 상담 이력 등록
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 상담 이력 등록 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 상담 이력 등록 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 상담 이력 등록 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 상담 이력 등록 해줘", "고객 상담 이력 등록 결과를 알려줘", "고객 상담 이력 등록 기능을 실행해줘"]
|
||||
read_only: false
|
||||
destructive: false
|
||||
idempotent: false
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 처리, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_contact_history
|
||||
display_name: 고객 접촉 이력 조회
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 접촉 이력 조회 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 접촉 이력 조회 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 접촉 이력 조회 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 접촉 이력 조회 해줘", "고객 접촉 이력 조회 결과를 알려줘", "고객 접촉 이력 조회 기능을 실행해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 조회, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_contact_register
|
||||
display_name: 고객 접촉 이력 등록
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 접촉 이력 등록 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 접촉 이력 등록 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 접촉 이력 등록 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 접촉 이력 등록 해줘", "고객 접촉 이력 등록 결과를 알려줘", "고객 접촉 이력 등록 기능을 실행해줘"]
|
||||
read_only: false
|
||||
destructive: false
|
||||
idempotent: false
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 처리, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_customer_create
|
||||
display_name: 고객 정보 등록
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 정보 등록 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 정보 등록 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 정보 등록 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 정보 등록 해줘", "고객 정보 등록 결과를 알려줘", "고객 정보 등록 기능을 실행해줘"]
|
||||
read_only: false
|
||||
destructive: false
|
||||
idempotent: false
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 처리, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_customer_detail
|
||||
display_name: 고객 상세 정보 조회
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 상세 정보 조회 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 상세 정보 조회 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 상세 정보 조회 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 상세 정보 조회 해줘", "고객 상세 정보 조회 결과를 알려줘", "고객 상세 정보 조회 기능을 실행해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 조회, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_customer_duplicate_check
|
||||
display_name: 고객 중복 여부 확인
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 중복 여부 확인 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 중복 여부 확인 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 중복 여부 확인 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 중복 여부 확인 해줘", "고객 중복 여부 확인 결과를 알려줘", "고객 중복 여부 확인 기능을 실행해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 조회, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_customer_search
|
||||
display_name: 고객 통합 조회
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 통합 조회 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 통합 조회 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 통합 조회 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 통합 조회 해줘", "고객 통합 조회 결과를 알려줘", "고객 통합 조회 기능을 실행해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 조회, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_customer_update
|
||||
display_name: 고객 정보 수정
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 정보 수정 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 정보 수정 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 정보 수정 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 정보 수정 해줘", "고객 정보 수정 결과를 알려줘", "고객 정보 수정 기능을 실행해줘"]
|
||||
read_only: false
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 처리, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_grade_change
|
||||
display_name: 고객 등급 변경
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 등급 변경 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 등급 변경 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 등급 변경 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 등급 변경 해줘", "고객 등급 변경 결과를 알려줘", "고객 등급 변경 기능을 실행해줘"]
|
||||
read_only: false
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 처리, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_grade_detail
|
||||
display_name: 고객 등급 조회
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 등급 조회 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 등급 조회 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 등급 조회 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 등급 조회 해줘", "고객 등급 조회 결과를 알려줘", "고객 등급 조회 기능을 실행해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 조회, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_owner_assign
|
||||
display_name: 고객 담당자 배정
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 담당자 배정 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 담당자 배정 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 담당자 배정 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 담당자 배정 해줘", "고객 담당자 배정 결과를 알려줘", "고객 담당자 배정 기능을 실행해줘"]
|
||||
read_only: false
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 처리, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_segment_detail
|
||||
display_name: 고객 세그먼트 조회
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 세그먼트 조회 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 세그먼트 조회 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 세그먼트 조회 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 세그먼트 조회 해줘", "고객 세그먼트 조회 결과를 알려줘", "고객 세그먼트 조회 기능을 실행해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 조회, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -0,0 +1,30 @@
|
||||
name: crm_tag_manage
|
||||
display_name: 고객 태그 관리
|
||||
version: 1.0.0
|
||||
category_key: crm
|
||||
description:
|
||||
function: 고객 태그 관리 기능을 수행합니다.
|
||||
when_to_use: 고객채널 업무에서 고객 태그 관리 기능이 필요할 때 사용합니다.
|
||||
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
|
||||
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
|
||||
display_description: 고객 태그 관리 기능을 안전한 모의 데이터로 제공합니다.
|
||||
example_queries: ["고객 태그 관리 해줘", "고객 태그 관리 결과를 알려줘", "고객 태그 관리 기능을 실행해줘"]
|
||||
read_only: false
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
|
||||
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
|
||||
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
|
||||
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
|
||||
page: {type: integer, description: 페이지 번호, minimum: 0}
|
||||
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
|
||||
additionalProperties: false
|
||||
tags: [crm, 고객채널, 처리, mock]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,26 +0,0 @@
|
||||
name: ins_insurance_processor
|
||||
display_name: 보험금 청구 처리
|
||||
version: 1.0.0
|
||||
category_key: ins
|
||||
description:
|
||||
function: 보험금 청구번호, 청구금액과 청구일을 받아 청구 처리 요청을 수행한다.
|
||||
when_to_use: 사용자가 확인된 보험금 청구 정보를 실제 처리계에 접수하려는 경우 사용한다.
|
||||
when_not_to_use: 청구 상태만 조회하거나 필수 정보가 확인되지 않은 경우에는 사용하지 않는다.
|
||||
io_limits: 실행 시 업무 상태가 변경될 수 있으므로 호출 전에 입력값과 사용자 의사를 확인해야 한다.
|
||||
display_description: 확인된 보험금 청구 요청을 처리계에 전달합니다.
|
||||
example_queries: ["확인한 내용으로 보험금 청구를 접수해줘", "이 청구번호의 보험금 처리를 진행해줘", "오늘 날짜로 보험금 청구 요청을 보내줘"]
|
||||
read_only: false
|
||||
destructive: true
|
||||
idempotent: false
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
claimNumber: {type: string, description: 처리할 보험금 청구번호}
|
||||
claimAmount: {type: number, description: 처리할 보험금 청구금액}
|
||||
claimDate: {type: string, description: 청구일자 YYYYMMDD, pattern: "^[0-9]{8}$"}
|
||||
required: [claimNumber, claimAmount, claimDate]
|
||||
additionalProperties: false
|
||||
tags: [보험금, 청구처리]
|
||||
legacy_interface_id: CLAIM0000001
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,35 +0,0 @@
|
||||
name: oth_onnba3011_call
|
||||
display_name: ONNBA3011 보험 업무 조회
|
||||
version: 1.0.0
|
||||
category_key: oth
|
||||
description:
|
||||
function: ONNBA3011 입력정보를 MCI 전문으로 변환해 보험 업무 결과를 조회한다.
|
||||
when_to_use: 사용자가 ONNBA3011 인터페이스 기준의 보험 계약 또는 지급 정보를 조회하려는 경우 사용한다.
|
||||
when_not_to_use: 인터페이스 입력값을 확인할 수 없거나 보험 정보를 변경하려는 경우에는 사용하지 않는다.
|
||||
io_limits: CLCNNB00001 인터페이스 규격에 맞는 값만 전달하며 조회 결과를 업무 응답으로 변환한다.
|
||||
display_description: ONNBA3011 업무 정보를 MCI로 조회합니다.
|
||||
example_queries: ["고객의 보험 업무 정보를 조회해줘", "ONNBA3011 기준으로 계약 정보를 확인해줘", "입력한 고객번호의 보험 결과를 알려줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
dalScCd: {type: string, description: 거래 구분 코드}
|
||||
cstSucoRltyCd: {type: string, description: 고객 성공 관계 코드}
|
||||
csNo: {type: string, description: 고객 번호}
|
||||
rdreNo: {type: string, description: 설계사 번호}
|
||||
unfcPvsCalReqYn: {type: string, description: 미확정 지급 계산 요청 여부}
|
||||
kcisPymmTnnrRequest: {type: string, description: KCIS 납입 기간 요청값}
|
||||
lmovYn: {type: string, description: 계약 이동 여부}
|
||||
genPsthApvTrgtYn: {type: string, description: 일반 사후 승인 대상 여부}
|
||||
ircoLmovEcpbTrgtYn: {type: string, description: 계약 이동 예외 대상 여부}
|
||||
digCalYn: {type: string, description: 디지털 계산 여부}
|
||||
prbuIciDigCalYn: {type: string, description: 상품별 디지털 계산 여부}
|
||||
unfcPrbuIrcoAddu: {type: object, description: 미확정 상품 추가 정보, additionalProperties: true}
|
||||
sucoIspaBasDto: {type: object, description: 성공 심사 기본 정보, additionalProperties: true}
|
||||
additionalProperties: false
|
||||
tags: [보험, MCI]
|
||||
legacy_interface_id: CLCNNB00001
|
||||
required_env_keys: [GLOW_COMMUNICATION_MCI_HOST, GLOW_COMMUNICATION_MCI_PORT]
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,22 +0,0 @@
|
||||
name: smp_exchange_inquiry
|
||||
display_name: 실시간 환율 조회
|
||||
version: 1.0.0
|
||||
category_key: smp
|
||||
description:
|
||||
function: 통화코드를 기준으로 현재 환율 정보를 조회한다.
|
||||
when_to_use: 사용자가 USD, EUR, JPY 등 특정 통화의 환율을 확인하려는 경우 사용한다.
|
||||
when_not_to_use: 환전 거래를 실행하거나 과거 환율 통계를 분석하려는 경우에는 사용하지 않는다.
|
||||
io_limits: 지원되는 통화코드의 조회 시점 환율만 반환하며 실제 환전 기능은 제공하지 않는다.
|
||||
display_description: 지정한 통화의 현재 환율을 조회합니다.
|
||||
example_queries: ["오늘 달러 환율을 알려줘", "엔화 환율이 얼마인지 조회해줘", "유로 환율을 확인해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
currencyCode: {type: string, description: 조회할 ISO 통화코드, pattern: "^[A-Z]{3}$"}
|
||||
additionalProperties: false
|
||||
tags: [환율, 금융]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,22 +0,0 @@
|
||||
name: smp_quote_daily
|
||||
display_name: 오늘의 명언 조회
|
||||
version: 1.0.0
|
||||
category_key: smp
|
||||
description:
|
||||
function: 선택한 카테고리에 맞는 오늘의 명언 한 건을 조회한다.
|
||||
when_to_use: 사용자가 명언이나 짧은 동기부여 문구를 요청한 경우 사용한다.
|
||||
when_not_to_use: 업무 데이터 조회나 사실 검증이 필요한 질문에는 사용하지 않는다.
|
||||
io_limits: 등록된 명언 데이터 중 한 건만 반환하며 출처 정보가 없을 수 있다.
|
||||
display_description: 카테고리에 맞는 오늘의 명언을 제공합니다.
|
||||
example_queries: ["오늘 힘이 되는 말을 알려줘", "업무 시작 전에 명언 하나 보여줘", "성공에 관한 짧은 문구를 추천해줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: false
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
category: {type: string, description: 조회할 명언 카테고리}
|
||||
additionalProperties: false
|
||||
tags: [명언, 콘텐츠]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,22 +0,0 @@
|
||||
name: smp_team_list
|
||||
display_name: MCP·TOOL 파트 구성원 조회
|
||||
version: 1.0.0
|
||||
category_key: smp
|
||||
description:
|
||||
function: 신한라이프 AX 추진팀과 MCP·TOOL 파트 구성원 및 직급을 조회한다.
|
||||
when_to_use: 사용자가 프로젝트 담당자나 팀별 구성원 정보를 묻는 경우 사용한다.
|
||||
when_not_to_use: 인사 개인정보나 연락처 또는 조직 변경 이력을 요청하는 경우에는 사용하지 않는다.
|
||||
io_limits: 사전에 등록된 구성원의 이름과 직급만 반환하며 민감한 인사정보는 포함하지 않는다.
|
||||
display_description: 신한라이프 MCP·TOOL 파트 담당자와 구성원을 조회합니다.
|
||||
example_queries: ["MCP 팀 담당자를 알려줘", "TOOL 파트 구성원이 누구인지 보여줘", "AX 추진팀 담당자를 찾아줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
teamName: {type: string, description: 조회할 팀 이름 또는 전체}
|
||||
additionalProperties: false
|
||||
tags: [조직, 담당자]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,23 +0,0 @@
|
||||
name: smp_weather_inquiry
|
||||
display_name: 도시 날씨 조회
|
||||
version: 1.0.0
|
||||
category_key: smp
|
||||
description:
|
||||
function: 도시명을 기준으로 현재 날씨, 온도와 풍속을 조회한다.
|
||||
when_to_use: 사용자가 특정 도시의 현재 기상 정보를 요청한 경우 사용한다.
|
||||
when_not_to_use: 장기 예보나 기상 특보 또는 공식 재난정보가 필요한 경우에는 사용하지 않는다.
|
||||
io_limits: 입력한 도시의 현재 관측 기반 샘플 정보만 반환한다.
|
||||
display_description: 지정한 도시의 현재 날씨 정보를 조회합니다.
|
||||
example_queries: ["서울 날씨를 알려줘", "부산의 현재 온도를 조회해줘", "제주도 바람이 얼마나 부는지 알려줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
city: {type: string, description: 날씨를 조회할 도시명}
|
||||
required: [city]
|
||||
additionalProperties: false
|
||||
tags: [날씨, 조회]
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
@@ -1,24 +0,0 @@
|
||||
name: sol_request_detail
|
||||
display_name: SOL 의뢰서 상세 조회
|
||||
version: 1.0.0
|
||||
category_key: sol
|
||||
description:
|
||||
function: SOL 의뢰서 식별자를 기준으로 의뢰서 상세 내용을 조회한다.
|
||||
when_to_use: 사용자가 특정 SOL 의뢰서의 상세 내용과 진행 정보를 확인하려는 경우 사용한다.
|
||||
when_not_to_use: 의뢰서 목록만 찾거나 의뢰서를 변경 또는 처리하려는 경우에는 사용하지 않는다.
|
||||
io_limits: 정확한 의뢰서 ID가 필요하며 등록된 상세 정보만 반환한다.
|
||||
display_description: SOL 의뢰서 한 건의 상세 정보를 조회합니다.
|
||||
example_queries: ["이 SOL 의뢰서 상세를 보여줘", "의뢰서 ID로 처리 내용을 확인해줘", "선택한 의뢰서의 상세 정보를 알려줘"]
|
||||
read_only: true
|
||||
destructive: false
|
||||
idempotent: true
|
||||
parameters_schema:
|
||||
type: object
|
||||
properties:
|
||||
srId: {type: string, description: 상세 조회할 SOL 의뢰서 ID}
|
||||
required: [srId]
|
||||
additionalProperties: false
|
||||
tags: [SOL, 의뢰서]
|
||||
legacy_interface_id: SOLG00000002
|
||||
required_env_keys: []
|
||||
owner_org: MCP_TOOL
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user