알림톡 api-> 채널ID조회 - 템플릿ID조회 - 템플릿상세조회 완료

This commit is contained in:
hehihoho3@gmail.com 2025-07-01 17:09:32 +09:00
parent 2bcecc2199
commit 69d2cfb597
57 changed files with 815 additions and 161 deletions

View File

@ -4,10 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.itn.mjonApi.cmn.idgen.service.IdgenService;
import com.itn.mjonApi.cmn.msg.FailRestResponse;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.access.mapper.domain.AccessKeyVO;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO;
import com.itn.mjonApi.mjon.api.send.mapper.domain.SendSucRestResponse;
import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.SendSucRestResponse;
import com.itn.mjonApi.mjon.log.service.mapper.LettnAccessLogMapper;
import com.itn.mjonApi.mjon.log.service.mapper.LettnApiSendMsgLogMapper;
import com.itn.mjonApi.mjon.log.service.mapper.MjMsgGroupDataMapper;
@ -59,6 +56,7 @@ public class LogAspect {
@Autowired
MjMsgGroupDataMapper mjMsgGroupDataMapper;
@Resource(name = "apiAccessLog")
private IdgenService idgenApiAccessLogId;
@ -81,7 +79,7 @@ public class LogAspect {
// VO 객체를 가져옴
Object objectVO = joinPoint.getArgs()[0];
log.info("joinPoint.getArgs()[0] :: [{}]", joinPoint.getArgs()[0]);
// log.info("joinPoint.getArgs()[0] :: [{}]", joinPoint.getArgs()[0]);
@ -91,16 +89,25 @@ public class LogAspect {
String mberId = "";
String accessKey = "";
for(Field field : objectVO.getClass().getDeclaredFields()){;
field.setAccessible(true);
try {
// JDK 내부 클래스 필드는 무시
if (field.getDeclaringClass().getName().startsWith("java.")) continue;
field.setAccessible(true);
log.info("field.getName() :: [{}]", field.getName());
log.info("field.get(objectVO) :: [{}]", field.get(objectVO));
// log.info("field.getName() :: [{}]", field.getName());
// log.info("field.get(objectVO) :: [{}]", field.get(objectVO));
if("mberId".equals(field.getName())){ mberId=field.get(objectVO).toString(); }
else if("accessKey".equals(field.getName())){ accessKey=field.get(objectVO).toString(); }
if("mberId".equals(field.getName())){ mberId=field.get(objectVO).toString(); }
else if("accessKey".equals(field.getName())){ accessKey=field.get(objectVO).toString(); }
if(StringUtils.isNotEmpty(mberId) && StringUtils.isNotEmpty(accessKey)){ break; }
if(StringUtils.isNotEmpty(mberId) && StringUtils.isNotEmpty(accessKey)){ break; }
} catch (Exception e) {
e.printStackTrace();
log.warn("접근 불가 필드 스킵: {}", field.getName());
continue;
}
}
String nextStringId = idgenApiAccessLogId.getNextStringId();
@ -252,6 +259,7 @@ public class LogAspect {
@NotNull
private static String getClassNmFromObject(Object returnValue) {
String classNmTemp = returnValue.getClass().getName();
log.info("getClassNmFromObject :: [{}]", classNmTemp);
String classNm = classNmTemp.substring(classNmTemp.lastIndexOf(".")+1, classNmTemp.length());
return classNm;
}
@ -312,37 +320,25 @@ public class LogAspect {
* @return
*/
public String getJsonToString(Object returnValue) throws JsonProcessingException {
if(ObjectUtils.isEmpty(returnValue)){
if (ObjectUtils.isEmpty(returnValue)) {
return null;
}
String classNm = this.getClassNmFromObject(returnValue);
/**
* @description : return Class가 추가되면 여기에 추가
*/
if("AccessKeyVO".equals(classNm)) {
AccessKeyVO accessKeyVO = (AccessKeyVO) returnValue;
return ApiObjectUtil.getAccessKeyVOToJsonString(accessKeyVO);
// 처리 대상 클래스 목록 (선택적으로 필터링하고 싶다면 여기에 조건)
switch (classNm) {
case "AccessKeyVO":
case "RestResponse":
case "MsgsRequestVO":
case "MsgRequestVO":
case "MjKakaoProfileInfoVO":
case "BizTemplateRequest":
return ApiObjectUtil.toJson(returnValue);
default:
log.info("데이터를 추가해 주세요");
return "데이터를 추가해 주세요";
}
else if("RestResponse".equals(classNm)){
RestResponse restResponse = (RestResponse) returnValue;
return ApiObjectUtil.getRestResponseToJsonString(restResponse);
}
else if("MsgsRequestVO".equals(classNm)){
MsgsRequestVO msgsRequestVO = (MsgsRequestVO) returnValue;
return ApiObjectUtil.getMsgsRequestVOToJsonString(msgsRequestVO);
}
else if("MsgRequestVO".equals(classNm)){
MsgRequestVO restResponse = (MsgRequestVO) returnValue;
return ApiObjectUtil.getMsgRequestVOToJsonString(restResponse);
}
else{
return "데이터를 추가해 주세요";
}
}
}

View File

@ -3,11 +3,19 @@ package com.itn.mjonApi.cmn.apiServer;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MjonResponseVO;
import com.itn.mjonApi.cmn.domain.biz.template.detail.TemplateDetailResponse;
import com.itn.mjonApi.cmn.domain.biz.template.BizTemplateRequest;
import com.itn.mjonApi.cmn.domain.biz.template.list.TemplateListResponse;
import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MjonResponseVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
/**
* packageName : com.itn.mjonApi.cmn.apiServer
@ -64,4 +72,44 @@ public class ApiService <T> {
return MjonResponseVO.getMjonResponse(apiReturnNode);
}
public TemplateListResponse postForBizTemplateListEntity(String url, BizTemplateRequest requestDto) throws JsonProcessingException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<BizTemplateRequest> requestEntity = new HttpEntity<>(requestDto, headers);
TemplateListResponse returnEntity = restTemplate.exchange(
url,
HttpMethod.POST,
requestEntity,
TemplateListResponse.class
).getBody();
return returnEntity;
}
public TemplateDetailResponse postForBizTemplateDetailEntity(String url, BizTemplateRequest requestDto) throws JsonProcessingException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<BizTemplateRequest> requestEntity = new HttpEntity<>(requestDto, headers);
TemplateDetailResponse returnEntity = restTemplate.exchange(
url,
HttpMethod.POST,
requestEntity,
TemplateDetailResponse.class
).getBody();
log.info("returnEntity :: [{}]", returnEntity.toString());
return returnEntity;
}
}

View File

@ -0,0 +1,18 @@
package com.itn.mjonApi.cmn.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class CmnVO {
private String mberId; // 사용자 ID
private String accessKey; // Api Key
}

View File

@ -0,0 +1,16 @@
package com.itn.mjonApi.cmn.domain.biz.template;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BizTemplateRequest {
private String bizId;
private String apiKey;
private String senderKey;
private String templateCode;
}

View File

@ -0,0 +1,16 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CommentsAttachment {
private String originalFileName;
private String filePath;
}

View File

@ -0,0 +1,23 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TemplateButton {
private String bizFormId;
private String linkAnd;
private String linkIos;
private String linkMo;
private String linkPc;
private String linkType;
private String name;
private String ordering;
private String pluginId;
}

View File

@ -0,0 +1,20 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
import java.util.List;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TemplateComments {
private String content;
private String createdAt;
private String status;
private List<CommentsAttachment> attachment;
}

View File

@ -0,0 +1,41 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
import java.util.List;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TemplateDetail {
private String block;
private String categoryCode;
private String createdAt;
private String dormant;
private String inspectionStatus;
private String modifiedAt;
private String securityFlag;
private String senderKey;
private String senderKeyType;
private String status;
private String templateCode;
private String templateContent;
private String templateEmphasizeType;
private String templateExtra;
private String templateHeader;
private String templateImageName;
private String templateImageUrl;
private String templateMessageType;
private String templateName;
private String templateSubtitle;
private String templateTitle;
private TemplateItemHighlight templateItemHighlight;
private TemplateItem templateItem;
private List<TemplateButton> buttons;
private List<TemplateComments> comments;
private List<TemplateQuickReplies> quickReplies;
}

View File

@ -0,0 +1,16 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TemplateDetailResponse {
private String code;
private String message;
private TemplateDetail data;
}

View File

@ -0,0 +1,16 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
import java.util.List;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TemplateItem {
private List<TemplateItemItem> list;
private TemplateItemSummary summary;
}

View File

@ -0,0 +1,16 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TemplateItemHighlight {
private String title; // 아이템 타이틀
private String description; // 상세 설명
private String imageUrl; // 썸네일 이미지 주소
}

View File

@ -0,0 +1,14 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TemplateItemItem {
private String title;
private String description;
}

View File

@ -0,0 +1,15 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TemplateItemSummary {
private String title;
private String description;
}

View File

@ -0,0 +1,19 @@
package com.itn.mjonApi.cmn.domain.biz.template.detail;
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TemplateQuickReplies {
private String name;
private String linkType;
private String linkAnd;
private String linkIos;
private String linkMo;
private String linkPc;
}

View File

@ -0,0 +1,46 @@
package com.itn.mjonApi.cmn.domain.biz.template.list;
/**
* 템플릿 상태를 나타내는 열거형 클래스.
* - API 응답의 상태 코드(EX: REG) 사람이 읽기 쉽게 변환하는 사용됨.
*/
public enum ServiceStatusEnum {
REG("등록완료"), // REG: 등록 완료된 템플릿
RDY("대기"), // RDY: 대기 상태
ACT("활성"), // ACT: 활성화 상태
DMT("중단"), // DMT: 중단된 템플릿
REJ("반려"), // REJ: 반려된 템플릿
UNKNOWN("알 수 없음"); // 정의되지 않은 상태
private final String label; // 한글 설명
/**
* 생성자
* @param label 상태의 한글 설명
*/
ServiceStatusEnum(String label) {
this.label = label;
}
/**
* 한글 설명 반환
*/
public String getLabel() {
return this.label;
}
/**
* 코드값을 받아 "[코드](한글설명)" 형태 문자열로 반환
* @param code 상태 코드 (: REG, ACT )
* @return : "REG(등록완료)", "DMT(중단)", "FOO(알 수 없음)"
*/
public static String getLabelByCode(String code) {
for (ServiceStatusEnum status : values()) {
if (status.name().equalsIgnoreCase(code)) {
return status.name() + "(" + status.getLabel() + ")";
}
}
return code + "(알 수 없음)";
}
}

View File

@ -0,0 +1,20 @@
package com.itn.mjonApi.cmn.domain.biz.template.list;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class TemplateInfo {
private String senderKey;
private String senderKeyType;
private String templateCode;
private String templateName;
private String createdAt;
private String modifiedAt;
private String categoryCode;
private String serviceStatus;
}

View File

@ -0,0 +1,15 @@
package com.itn.mjonApi.cmn.domain.biz.template.list;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.List;
@Getter
@Setter
@ToString
public class TemplateListData {
private List<TemplateInfo> list;
private boolean hasNext;
}

View File

@ -0,0 +1,17 @@
package com.itn.mjonApi.cmn.domain.biz.template.list;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class TemplateListResponse {
private String code;
private String message;
private int totalCount;
private int totalPage;
private int currentPage;
private TemplateListData data;
}

View File

@ -58,7 +58,6 @@ public class IdgenServiceImpl implements IdgenService {
// nextId 만들기
String nextId = prefixTemp + idgenVO.getNextId();
log.info(" userId : [{}]", nextId);
return nextId;
}

View File

@ -152,7 +152,7 @@ public class CertifInterceptor implements HandlerInterceptor{
referer = serverIp;
}
referer= "119.193.215.98";
log.info("certi request.getParameter(\"accessKey\") :: [{}]", request.getParameter("accessKey"));
// log.info("certi request.getParameter(\"accessKey\") :: [{}]", request.getParameter("accessKey"));
// hylee Builder 패턴으로 변경 => 20230516
AccessKeyVO accessKeyVO = accessKeyService.selectRKey(
new AccessKeyVO().builder()

View File

@ -1,7 +1,7 @@
package com.itn.mjonApi.cmn.model;
import com.itn.mjonApi.mjon.api.inqry.mapper.PriceMapper;
import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.PriceMapper;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceVO;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;

View File

@ -53,6 +53,8 @@ public enum StatMsg {
//발송가능건수======================================================================
, STAT_5099("5099","기타 시스템 오류")
//======================================================================
, msgType4("단문","SMS")
, msgType6("장문","LMS")

View File

@ -0,0 +1,34 @@
package com.itn.mjonApi.mjon.api.kakao.inqry.mapper;
import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain.MjKakaoProfileInfoVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.MjonResponseVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* packageName : com.itn.mjonApi.mjon.api.kakao.inqry.mapper
* fileName : InqryMapper
* author : hylee
* date : 2025-06-27
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2025-06-27 hylee 최초 생성
*/
@Mapper
public interface InqryMapper {
List<MjKakaoProfileInfoVO> getChnlIds(MjKakaoProfileInfoVO mjKakaoProfileInfoVO);
//double selectUserMoney(String mberId);
// List<MjonResponseVO> selectApiInqryHstry(HstryVO hstryVO);
//
// List<MjonResponseVO> selectApiInqryHstryDetail(HstryDetailVO hstryDetailVO);
//
}

View File

@ -0,0 +1,27 @@
package com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.itn.mjonApi.cmn.domain.CmnVO;
import lombok.*;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class MjKakaoProfileInfoVO extends CmnVO {
private String profileId; // 회원 프로필 번호
private String userId; // 회원 아이디
private String senderKey; // 발신 프로필
private String token; // 수신받은 인증 토큰정보
private String phoneNumber; // 카카오톡 채널 핸드폰 번호
private String yellowId; // 카카오톡 채널(@ID)
private String categoryCode; // 카테고리 코드
private String categoryName; // 카테고리 코드 명칭
private String frstRegistPnttm; // 등록 일자
private String frstRegisterId; // 등록자
private String lastUpdtPnttm; // 수정 일자
private String lastUpdusrId; // 수정자
private String deleteYn; // 삭제 여부 (Y/N)
}

View File

@ -0,0 +1,134 @@
package com.itn.mjonApi.mjon.api.kakao.inqry.service.Impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.itn.mjonApi.cmn.apiServer.ApiService;
import com.itn.mjonApi.cmn.domain.biz.template.BizTemplateRequest;
import com.itn.mjonApi.cmn.domain.biz.template.detail.TemplateDetailResponse;
import com.itn.mjonApi.cmn.domain.biz.template.list.ServiceStatusEnum;
import com.itn.mjonApi.cmn.domain.biz.template.list.TemplateInfo;
import com.itn.mjonApi.cmn.domain.biz.template.list.TemplateListResponse;
import com.itn.mjonApi.cmn.msg.FailRestResponse;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.InqryMapper;
import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain.MjKakaoProfileInfoVO;
import com.itn.mjonApi.mjon.api.kakao.inqry.service.InqryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.connector.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* packageName : com.itn.mjonApi.mjon.api.kakao.inqry.service.Impl
* fileName : InqryServiceImpl
* author : hylee
* date : 2025-06-27
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2025-06-27 hylee 최초 생성
*/
@Slf4j
@Service
public class InqryServiceImpl implements InqryService {
private ApiService<Response> apiService;
@Value("${biz.root.url}")
private String BIZ_ROOT_URL;
@Value("${biz.api.key}")
private String BIZ_API_KEY;
@Value("${biz.id}")
private String BIZ_ID;
@Autowired
InqryMapper inqryMapper;
@Autowired
public InqryServiceImpl(ApiService<Response> apiService) {
this.apiService = apiService;
}
@Override
public RestResponse getChnlId(MjKakaoProfileInfoVO mjKakaoProfileInfoVO) {
List<MjKakaoProfileInfoVO> voList = inqryMapper.getChnlIds(mjKakaoProfileInfoVO);
log.info(" mjKakaoProfileInfoVO toString [{}]", mjKakaoProfileInfoVO.toString());
return new RestResponse(voList);
}
@Override
public RestResponse getTemplates(BizTemplateRequest bizTemplateRequest) throws JsonProcessingException {
// 1. 템플릿 목록 조회 요청 DTO 생성 (BIZ ID, API Key, senderKey 포함)
BizTemplateRequest requestDto= BizTemplateRequest.builder()
.bizId(BIZ_ID)
.apiKey(BIZ_API_KEY)
.senderKey(bizTemplateRequest.getSenderKey())
.build();
// 2. 외부 API 호출 - 템플릿 목록 요청 (/v3/kakao/template/list)
TemplateListResponse response = apiService.postForBizTemplateListEntity(
BIZ_ROOT_URL+"/v3/kakao/template/list"
, requestDto
);
// 3. 응답 코드가 "0" (성공) **아닌 경우** => 실패 처리 (STAT_4099 반환 : 기타 시스템 오류)
if(!"200".equals(response.getCode()) )
{
// STAT_4099 = 템플릿 조회 실패 (내부 enum 기반 메시지 사용)
return new RestResponse(new FailRestResponse("STAT_4099",""));
}
// 4. 성공 템플릿 리스트 추출
List<TemplateInfo> templateList = response.getData().getList();
// 5. 템플릿 객체에 대해 가공 처리
templateList.forEach(t -> {
// 서비스 상태 코드 한글 라벨로 변환 ( : REG REG(등록완료) )
String originalCode = t.getServiceStatus();
String convertedLabel = ServiceStatusEnum.getLabelByCode(originalCode);
t.setServiceStatus(convertedLabel);
// 응답에 불필요한 필드 제거 (null 처리)
t.setSenderKeyType(null);
t.setCategoryCode(null);
});
// 6. 최종 응답 반환 (가공된 템플릿 리스트 포함)
return new RestResponse(templateList);
}
@Override
public RestResponse getTemplateDetail(BizTemplateRequest bizTemplateRequest) throws JsonProcessingException {
// 1. 템플릿 목록 조회 요청 DTO 생성 (BIZ ID, API Key, senderKey 포함)
BizTemplateRequest requestDto= BizTemplateRequest.builder()
.bizId(BIZ_ID)
.apiKey(BIZ_API_KEY)
.senderKey(bizTemplateRequest.getSenderKey())
.templateCode(bizTemplateRequest.getTemplateCode())
.build();
// 2. 외부 API 호출 - 템플릿 목록 요청 (/v3/kakao/template/list)
TemplateDetailResponse response = apiService.postForBizTemplateDetailEntity(
BIZ_ROOT_URL+"/v3/kakao/template/detail"
, requestDto
);
log.info(" + response :: [{}]", response.toString());
// 6. 최종 응답 반환 (가공된 템플릿 리스트 포함)
return new RestResponse(response);
}
}

View File

@ -0,0 +1,14 @@
package com.itn.mjonApi.mjon.api.kakao.inqry.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.itn.mjonApi.cmn.domain.biz.template.BizTemplateRequest;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain.MjKakaoProfileInfoVO;
public interface InqryService {
RestResponse getChnlId(MjKakaoProfileInfoVO mjKakaoProfileInfoVO);
RestResponse getTemplates(BizTemplateRequest bizTemplateRequest) throws JsonProcessingException;
RestResponse getTemplateDetail(BizTemplateRequest bizTemplateRequest) throws JsonProcessingException;
}

View File

@ -0,0 +1,66 @@
package com.itn.mjonApi.mjon.api.kakao.inqry.web;
import com.itn.mjonApi.cmn.domain.biz.template.BizTemplateRequest;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain.MjKakaoProfileInfoVO;
import com.itn.mjonApi.mjon.api.kakao.inqry.service.InqryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* fileName : InqryRestContoller.java
* author : hylee
* date : 2025-06-27
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2025-06-27 hylee 최초 생성
*/
@Slf4j
@RestController
public class InqryRestContoller {
@Autowired
private InqryService inqryService;
/**
* @param
* @return
* @throws Exception 처리 예외 발생 가능
* @date 2025-06-27
* @author hylee
*/
@CrossOrigin("*") // 모든 요청에 접근 허용
@PostMapping("/api/kakao/inqry/chnlId")
public ResponseEntity<RestResponse> getChnlId(MjKakaoProfileInfoVO mjKakaoProfileInfoVO) throws Exception {
return ResponseEntity.ok().body(inqryService.getChnlId(mjKakaoProfileInfoVO));
}
@CrossOrigin("*") // 모든 요청에 접근 허용
@PostMapping("/api/kakao/inqry/templates/list")
public ResponseEntity<RestResponse> getTemplates(BizTemplateRequest bizTemplateRequest) throws Exception {
return ResponseEntity.ok().body(inqryService.getTemplates(bizTemplateRequest));
}
@CrossOrigin("*") // 모든 요청에 접근 허용
@PostMapping("/api/kakao/inqry/templates/detail")
public ResponseEntity<RestResponse> getTemplateDetail(BizTemplateRequest bizTemplateRequest) throws Exception {
return ResponseEntity.ok().body(inqryService.getTemplateDetail(bizTemplateRequest));
}
}

View File

@ -1,14 +1,14 @@
package com.itn.mjonApi.mjon.api.inqry.mapper;
package com.itn.mjonApi.mjon.api.msg.inqry.mapper;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryDetailVO;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryVO;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.MjonResponseVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.MjonResponseVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @packageName : com.itn.mjonApi.mjon.api.inqry.service.mapper
* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.service.mapper
* @fileName : PriceMapper.java
* @author : JunHo Lee
* @date : 2023.05.15

View File

@ -1,11 +1,11 @@
package com.itn.mjonApi.mjon.api.inqry.mapper;
package com.itn.mjonApi.mjon.api.msg.inqry.mapper;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
/**
* @packageName : com.itn.mjonApi.mjon.api.inqry.service.mapper
* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.service.mapper
* @fileName : PriceMapper.java
* @author : JunHo Lee
* @date : 2023.05.15

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.inqry.service.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain;
import lombok.AllArgsConstructor;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.inqry.service.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain;
import lombok.*;

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.inqry.service.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain;
import lombok.AllArgsConstructor;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.inqry.service.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain;
import lombok.*;

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.inqry.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain;
import java.time.LocalDateTime;

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.inqry.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain;
import java.io.Serializable;

View File

@ -1,8 +1,8 @@
package com.itn.mjonApi.mjon.api.inqry.service;
package com.itn.mjonApi.mjon.api.msg.inqry.service;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryDetailVO;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO;
public interface HstryService {

View File

@ -1,9 +1,9 @@
package com.itn.mjonApi.mjon.api.inqry.service;
package com.itn.mjonApi.mjon.api.msg.inqry.service;
import com.itn.mjonApi.cmn.msg.RestResponse;
/**
* @packageName : com.itn.mjonApi.mjon.api.inqry.service
* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.service
* @fileName : PriceService.java
* @author : JunHo Lee
* @date : 2023.05.15

View File

@ -1,15 +1,15 @@
package com.itn.mjonApi.mjon.api.inqry.service.impl;
package com.itn.mjonApi.mjon.api.msg.inqry.service.impl;
import com.itn.mjonApi.cmn.apiServer.ApiService;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.cmn.msg.FailRestResponse;
import com.itn.mjonApi.mjon.api.inqry.mapper.HstryMapper;
import com.itn.mjonApi.mjon.api.inqry.service.HstryService;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryDetailVO;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryResponse;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryVO;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.MjonResponseVO;
import com.itn.mjonApi.mjon.api.send.mapper.SendMapper;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.HstryMapper;
import com.itn.mjonApi.mjon.api.msg.inqry.service.HstryService;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryResponse;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.MjonResponseVO;
import com.itn.mjonApi.mjon.api.msg.send.mapper.SendMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.connector.Response;
import org.apache.commons.lang3.StringUtils;
@ -28,9 +28,7 @@ public class HstryServiceImpl implements HstryService {
@Autowired
HstryMapper hstryMapper;
@Autowired
SendMapper sendMapper;
@Autowired
public HstryServiceImpl(ApiService<Response> apiService) {

View File

@ -1,13 +1,13 @@
package com.itn.mjonApi.mjon.api.inqry.service.impl;
package com.itn.mjonApi.mjon.api.msg.inqry.service.impl;
import com.itn.mjonApi.cmn.model.Price;
import com.itn.mjonApi.cmn.msg.FailRestResponse;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.cmn.msg.StatMsg;
import com.itn.mjonApi.mjon.api.inqry.mapper.PriceMapper;
import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceResponse;
import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceVO;
import com.itn.mjonApi.mjon.api.inqry.service.PriceService;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.PriceMapper;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceResponse;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceVO;
import com.itn.mjonApi.mjon.api.msg.inqry.service.PriceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -16,7 +16,7 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
/**
* @packageName : com.itn.mjonApi.mjon.api.inqry.service.impl
* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.service.impl
* @fileName : PriceServiceImpl.java
* @author : JunHo Lee
* @date : 2023.05.15

View File

@ -1,9 +1,9 @@
package com.itn.mjonApi.mjon.api.inqry.web;
package com.itn.mjonApi.mjon.api.msg.inqry.web;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.inqry.service.HstryService;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryDetailVO;
import com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.HstryVO;
import com.itn.mjonApi.mjon.api.msg.inqry.service.HstryService;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryDetailVO;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.HstryVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@ -24,7 +24,6 @@ import org.springframework.web.client.RestTemplate;
* 2023-02-15 hylee 최초 생성
*/
// 치환문자가 있으면 , => § 치환
@Slf4j
@RestController

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.inqry.web;
package com.itn.mjonApi.mjon.api.msg.inqry.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@ -6,11 +6,11 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceVO;
import com.itn.mjonApi.mjon.api.inqry.service.PriceService;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceVO;
import com.itn.mjonApi.mjon.api.msg.inqry.service.PriceService;
/**
* @packageName : com.itn.mjonApi.mjon.api.inqry.web
* @packageName : com.itn.mjonApi.mjon.api.msg.inqry.web
* @fileName : PriceRestController.java
* @author : JunHo Lee
* @date : 2023.05.15

View File

@ -1,10 +1,10 @@
package com.itn.mjonApi.mjon.api.send.mapper;
package com.itn.mjonApi.mjon.api.msg.send.mapper;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO;
import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgRequestVO;
import org.apache.ibatis.annotations.Mapper;
/**
* packageName : com.itn.mjonApi.mjon.api.send.mapper.domain
* packageName : com.itn.mjonApi.mjon.api.msg.send.mapper.domain
* fileName : SendMapper
* author : hylee
* date : 2023-05-19

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.send.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.send.mapper.domain;
import lombok.Getter;

View File

@ -1,11 +1,10 @@
package com.itn.mjonApi.mjon.api.send.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.send.mapper.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.*;
import org.springframework.http.ResponseEntity;
/**
* packageName : com.itn.mjonApi.cmn.msg

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.send.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.send.mapper.domain;
import lombok.*;
@ -6,7 +6,7 @@ import java.io.Serializable;
import java.util.List;
/**
* packageName : com.itn.mjonApi.mjon.api.send.mapper.domain
* packageName : com.itn.mjonApi.mjon.api.msg.send.mapper.domain
* fileName : MjonMsgVO
* author : hylee
* date : 2023-05-09

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.send.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.send.mapper.domain;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -8,7 +8,7 @@ import lombok.Setter;
import java.io.Serializable;
/**
* packageName : com.itn.mjonApi.mjon.api.send.mapper.domain
* packageName : com.itn.mjonApi.mjon.api.msg.send.mapper.domain
* fileName : MjonMsgVO
* author : hylee
* date : 2023-05-23

View File

@ -1,4 +1,4 @@
package com.itn.mjonApi.mjon.api.send.mapper.domain;
package com.itn.mjonApi.mjon.api.msg.send.mapper.domain;
import com.itn.mjonApi.cmn.msg.StatMsg;
import lombok.*;

View File

@ -1,8 +1,8 @@
package com.itn.mjonApi.mjon.api.send.service;
package com.itn.mjonApi.mjon.api.msg.send.service;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO;
import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgRequestVO;
import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgsRequestVO;
public interface SendService {

View File

@ -1,15 +1,15 @@
package com.itn.mjonApi.mjon.api.send.service.impl;
package com.itn.mjonApi.mjon.api.msg.send.service.impl;
import com.itn.mjonApi.cmn.apiServer.ApiService;
import com.itn.mjonApi.cmn.model.Price;
import com.itn.mjonApi.cmn.msg.FailRestResponse;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.cmn.msg.StatMsg;
import com.itn.mjonApi.mjon.api.inqry.mapper.PriceMapper;
import com.itn.mjonApi.mjon.api.inqry.mapper.domain.PriceVO;
import com.itn.mjonApi.mjon.api.send.mapper.SendMapper;
import com.itn.mjonApi.mjon.api.send.mapper.domain.*;
import com.itn.mjonApi.mjon.api.send.service.SendService;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.PriceMapper;
import com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.PriceVO;
import com.itn.mjonApi.mjon.api.msg.send.mapper.SendMapper;
import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.*;
import com.itn.mjonApi.mjon.api.msg.send.service.SendService;
import com.itn.mjonApi.util.MunjaUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.connector.Response;
@ -17,7 +17,6 @@ import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;

View File

@ -1,9 +1,9 @@
package com.itn.mjonApi.mjon.api.send.web;
package com.itn.mjonApi.mjon.api.msg.send.web;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO;
import com.itn.mjonApi.mjon.api.send.service.SendService;
import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgRequestVO;
import com.itn.mjonApi.mjon.api.msg.send.mapper.domain.MsgsRequestVO;
import com.itn.mjonApi.mjon.api.msg.send.service.SendService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;

View File

@ -3,10 +3,6 @@ package com.itn.mjonApi.util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.itn.mjonApi.cmn.msg.RestResponse;
import com.itn.mjonApi.mjon.api.access.mapper.domain.AccessKeyVO;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgRequestVO;
import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO;
/**
* packageName : com.itn.mjonApi.util
@ -21,45 +17,10 @@ import com.itn.mjonApi.mjon.api.send.mapper.domain.MsgsRequestVO;
*/
public class ApiObjectUtil {
private static final ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
/**
* @description : VO를 json으로 변환
* @param restResponse
* @return String
* @throws JsonProcessingException
*/
public static String getRestResponseToJsonString(RestResponse restResponse) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
// .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함
return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(restResponse);
public static String toJson(Object obj) throws JsonProcessingException {
if (obj == null) return null;
return objectMapper.writeValueAsString(obj);
}
public static String getMsgsRequestVOToJsonString(MsgsRequestVO msgsRequestVO) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
// .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함
return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(msgsRequestVO);
}
public static String getMsgRequestVOToJsonString(MsgRequestVO msgRequestVO) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
// .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함
return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(msgRequestVO);
}
/**
* @description : VO를 json으로 변환
* @param accessKeyVO
* @return String
* @throws JsonProcessingException
*/
public static String getAccessKeyVOToJsonString(AccessKeyVO accessKeyVO) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
// .registerModule(new JavaTimeModule()) : LocalDateTime을 json으로 변환하기 위함
return objectMapper.registerModule(new JavaTimeModule()).writeValueAsString(accessKeyVO);
}
}

View File

@ -4,9 +4,11 @@ spring.profiles.active=dev
# mybatis setting
mybatis.config-location=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mapper/**/*.xml
# model camel case set
mybatis.configuration.map-underscore-to-camel-case=true
spring.jackson.default-property-inclusion=non_null
#sql \ucd9c\ub825 log \uc124\uc815
logging.level.jdbc.sqlonly=off
@ -34,4 +36,9 @@ spring.servlet.multipart.max-request-size=20MB
#management.endpoints.web.exposure.include=*
#management.endpoint.health.show-details=always
#
Ganpandaup.estimate.template.url=https://www.munjaon.co.kr/publish/email_form_ganpandaum_contact.html
Ganpandaup.estimate.template.url=https://www.munjaon.co.kr/publish/email_form_ganpandaum_contact.html
biz.root.url=https://kapi.ppurio.com
biz.api.key=dheBWCONP6J5
biz.id=itn0202

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itn.mjonApi.mjon.api.kakao.inqry.mapper.InqryMapper">
<select id="getChnlIds" resultType="MjKakaoProfileInfoVO">
SELECT
-- USER_ID
-- , PROFILE_ID
SENDER_KEY
-- , TOKEN
, PHONE_NUMBER
, YELLOW_ID
-- , CATEGORY_CODE
-- , CATEGORY_NAME
, FRST_REGIST_PNTTM
, FRST_REGISTER_ID
-- , LAST_UPDT_PNTTM
-- , LAST_UPDUSR_ID
-- , DELETE_YN
FROM mj_kakao_profile_info
WHERE DELETE_YN = 'N'
AND USER_ID = #{mberId}
</select>
</mapper>

View File

@ -3,9 +3,9 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itn.mjonApi.mjon.api.inqry.mapper.HstryMapper">
<mapper namespace="com.itn.mjonApi.mjon.api.msg.inqry.mapper.HstryMapper">
<select id="selectApiInqryHstry" resultType="com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.MjonResponseVO">
<select id="selectApiInqryHstry" resultType="com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.MjonResponseVO">
/* 문자온 발송결과 페이지 쿼리를 그대로 사용함 - http://localhost:9080/web/mjon/msgsent/selectMsgSentView.do */
SELECT
@ -336,7 +336,7 @@
<select id="selectApiInqryHstryDetail"
resultType="com.itn.mjonApi.mjon.api.inqry.service.mapper.domain.MjonResponseVO"
resultType="com.itn.mjonApi.mjon.api.msg.inqry.mapper.domain.MjonResponseVO"
>
/* 문자온 발송결과 페이지 실패 건수 팝업을 변형해서 사용함 - http://localhost:9080/web/mjon/msgsent/selectMsgSFDetailListAjax.do */

View File

@ -3,7 +3,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itn.mjonApi.mjon.api.inqry.mapper.PriceMapper">
<mapper namespace="com.itn.mjonApi.mjon.api.msg.inqry.mapper.PriceMapper">
<select id="selectMberMoney"
resultType="double"

View File

@ -3,7 +3,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itn.mjonApi.mjon.api.send.mapper.SendMapper">
<mapper namespace="com.itn.mjonApi.mjon.api.msg.send.mapper.SendMapper">
<select id="findByCallFrom" resultType="boolean">
SELECT IF(COUNT(*), 1, 0)

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.itn.mjonApi.mjon.api.kakao.inqry.mapper.domain"/>
</typeAliases>
</configuration>