고객 통합 안내이력 조회 sample 생성

This commit is contained in:
Boram
2026-08-12 17:48:00 +09:00
parent 39c59be5a2
commit 69e89e0d52
11 changed files with 487 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
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 = "inqrStrtYmd")
@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);
}

View File

@@ -0,0 +1,97 @@
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;
}

View File

@@ -0,0 +1,29 @@
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
@NoArgsConstructor
@AllArgsConstructor
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;
}

View File

@@ -0,0 +1,23 @@
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
@NoArgsConstructor
@AllArgsConstructor
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CustomerGuidanceToolResponse {
private String resultCode;
private String resultMessage;
private List<CcCstUnfcNotiCarhDto> ccCstUnfcNotiCarhDtoList;
}

View File

@@ -0,0 +1,30 @@
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.ToolHint;
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와 조회 기간을 입력하면 해당 기간 동안의 안내 이력을 반환합니다.")
@ToolHint(register = false, categoryKey = "cmm", mappingId = "ONILD0320")
CustomerGuidanceToolResponse execute(CustomerGuidanceToolRequest req) throws Exception;
}

View File

@@ -0,0 +1,58 @@
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 execute(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();
}
}

View File

@@ -0,0 +1,50 @@
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;
import io.shinhanlife.glow.GlowLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import lombok.RequiredArgsConstructor;
import io.shinhanlife.dap.lib.integration.mci.component.AxhubMciComponent;
import io.shinhanlife.glow.communication.dto.Transfer;
/**
* @package io.shinhanlife.dap.mcc.infra.itrf.mci.nild
* @className MciNildClient
* @description AX HUB ?쒖뒪??泥섎━ ?대옒??
* @author Boram
* @create 2026.08.12
* <pre>
* ---------- 媛쒖젙?대젰 ----------
* ?섏젙?? ?섏젙?? ?섏젙?댁슜
* ---------- -------- ---------------------------
* 2026.08.12 Boram 理쒖큹?앹꽦
*
* </pre>
*/
@Component
@RequiredArgsConstructor
public class MciNildClient {
private final AxhubMciComponent mci;
private final GlowLogger log;
public ONILD0320_O callOnild0320(ONILD0320_I onild0320_i){
try {
Transfer<ONILD0320_O> resTransfer = mci.callTo(
"CTMNILO00007",
null,
onild0320_i,
ONILD0320_O.class
);
ONILD0320_O onild0320_o = resTransfer.getBody();
return onild0320_o;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -0,0 +1,42 @@
package io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d.io;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.shinhanlife.glow.GlowMciFieldInfo;
import io.shinhanlife.glow.communication.annotation.GlowTrgmField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Data
@Getter
@Setter
@NoArgsConstructor
public class ONILD0320_I {
@GlowTrgmField(order = 1, description = "고객 통합 안내이력 조회", type="gs")
private CstUnfcNotiCarhInqrInDto cstUnfcNotiCarhInqrInDto;
@JsonIgnoreProperties(ignoreUnknown = true)
@NoArgsConstructor
@Getter
@Setter
public static class CstUnfcNotiCarhInqrInDto {
@GlowMciFieldInfo(order = 1, length = 5, description = "고객번호")
private String csNo;
@GlowMciFieldInfo(order = 2, length = 5, description = "안내장코드")
private String ntleCd;
@GlowMciFieldInfo(order = 3, length = 5, description = "안내발송방법코드")
private String notiPmlMdCd;
@GlowMciFieldInfo(order = 4, length = 5, description = "조회시작일자")
private String inqrStrtYmd;
@GlowMciFieldInfo(order = 5, length = 5, description = "조회종료일자")
private String inqrEndYmd;
}
}

View File

@@ -0,0 +1,109 @@
package io.shinhanlife.dap.mcc.infra.itrf.mci.nil.d.io;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.shinhanlife.glow.GlowMciFieldInfo;
import io.shinhanlife.glow.communication.annotation.GlowTrgmField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.List;
@NoArgsConstructor
@Getter
@Setter
public class ONILD0320_O {
@GlowTrgmField(order = 1, description = "고객 통합 안내이력 조회out", type="gm")
private List<CstUnfcNotiCarhInqrOutDto> cstUnfcNotiCarhInqrOutDto;
@JsonIgnoreProperties(ignoreUnknown = true)
@NoArgsConstructor
@Getter
@Setter
public static class CstUnfcNotiCarhInqrOutDto {
@GlowMciFieldInfo(order = 1, length = 5, description = "고객번호")
private String csNo;
@GlowMciFieldInfo(order = 2, length = 5, description = "안내일시")
private String notiDt;
@GlowMciFieldInfo(order = 3, length = 5, description = "발송일련번호")
private int pmlSriaNo;
@GlowMciFieldInfo(order = 4, length = 5, description = "안내신청상세일시")
private String notiPetDtptDt;
@GlowMciFieldInfo(order = 5, length = 5, description = "안내장코드")
private String ntleCd;
@GlowMciFieldInfo(order = 6, length = 5, description = "안내장명")
private String ntleNm;
@GlowMciFieldInfo(order = 7, length = 5, description = "안내발송일련번호")
private int notiPmlSriaNo;
@GlowMciFieldInfo(order = 8, length = 5, description = "안내발송방법코드")
private String notiPmlMdCd;
@GlowMciFieldInfo(order = 9, length = 5, description = "안내수신정보암호화내용")
private String notiRcvInfoEncrCt;
@GlowMciFieldInfo(order = 10, length = 5, description = "메시지ID")
private String msgId;
@GlowMciFieldInfo(order = 11, length = 5, description = "안내내용")
private String notiCt;
@GlowMciFieldInfo(order = 12, length = 5, description = "통합안내발송결과코드")
private String unfcNotiPmlRsltCd;
@GlowMciFieldInfo(order = 13, length = 5, description = "통합안내발송결과상세코드")
private String unfcNotiPmlRsltDtptCd;
@GlowMciFieldInfo(order = 14, length = 5, description = "발송시스템코드")
private String pmlSystCd;
@GlowMciFieldInfo(order = 15, length = 5, description = "발송조직번호")
private String pmlOgnzNo;
@GlowMciFieldInfo(order = 16, length = 5, description = "발송조직명")
private String pmlOgnzNm;
@GlowMciFieldInfo(order = 17, length = 5, description = "발신기관조직명")
private String msdilttOgnzNm;
@GlowMciFieldInfo(order = 18, length = 5, description = "조회구분명")
private String inqrDvsnNm;
@GlowMciFieldInfo(order = 19, length = 5, description = "등록일시")
private String rgiDt;
@GlowMciFieldInfo(order = 20, length = 5, description = "등록자명")
private String rgstNm;
@GlowMciFieldInfo(order = 21, length = 5, description = "등록자조직명")
private String rgstOgnzNm;
@GlowMciFieldInfo(order = 22, length = 5, description = "최종변경자명")
private String lstPrwpNm;
@GlowMciFieldInfo(order = 23, length = 5, description = "최종변경일시")
private String lstChgDt;
@GlowMciFieldInfo(order = 24, length = 5, description = "최종변경자조직명")
private String lstPrwpOgnzNm;
@GlowMciFieldInfo(order = 25, length = 5, description = "원천회사구분코드")
private String oriCpnyDvsnCd;
@GlowMciFieldInfo(order = 26, length = 5, description = "고객한글명")
private String cstHanNm;
@GlowMciFieldInfo(order = 27, length = 5, description = "시스템등록인사번호")
private String systRgiPrafNo;
@GlowMciFieldInfo(order = 28, length = 5, description = "시스템변경인사번호")
private String systChgPrafNo;
}
}

View File

@@ -0,0 +1,4 @@
{
"resultCode" : "SUCCESS",
"data" : "[{\"date\":\"2024-01-05\",\"message\":\"안내 내용\"}]"
}

View File

@@ -0,0 +1,16 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerGuidanceToolRequest;
import io.shinhanlife.dap.mcc.biz.cmm.dto.CustomerGuidanceToolResponse;
import org.junit.jupiter.api.Test;
class CustomerGuidanceToolUseCaseTest {
@Test
void createsToolRequestAndResponseDtos() {
assertNotNull(new CustomerGuidanceToolRequest());
assertNotNull(new CustomerGuidanceToolResponse());
}
}