feat: NICE CI 인증톡 진행 - sendBulk API 파라메터 set

dev
Jonguk. Lim 1 month ago
parent 3ad2b1e1ac
commit bc271d09cc

@ -35,5 +35,5 @@ public interface INiceCiMapper {
Optional<OrgMng> selectKkoBpApiUrlFromEnsOrgMng(final String orgCd); Optional<OrgMng> selectKkoBpApiUrlFromEnsOrgMng(final String orgCd);
Optional<String> selectNiceCiRequestId(); Optional<String> selectNiceCiRequestId();
Optional<NiceCiDTO.TmpltMng> selectTmpltMsg(final String tmpltId); Optional<NiceCiDTO.TmpltMngDTO> selectTmpltMsg(final String tmpltId);
} }

@ -146,7 +146,7 @@ public class NiceCiApiDTO {
* </pre> * </pre>
*/ */
@Schema(title = "SMS 발신번호", example = " ") @Schema(title = "SMS 발신번호", example = " ")
@Pattern(regexp = "^\\s{12}$|[\\d]{3,12}", message = "SMS 발신번호는 3 ~ 12자리 입니다") @Pattern(regexp = "^[\\s\\S]{3,12}$", message = "SMS 발신번호는 3 ~ 12자리 입니다")
private String sndPhoneNo = StringUtils.rightPad("0442113377", 12, StringUtils.SPACE); private String sndPhoneNo = StringUtils.rightPad("0442113377", 12, StringUtils.SPACE);
public void setSndPhoneNo(String sndPhoneNo) { public void setSndPhoneNo(String sndPhoneNo) {
this.sndPhoneNo = StringUtils.rightPad(nvl(sndPhoneNo), 12, StringUtils.SPACE); this.sndPhoneNo = StringUtils.rightPad(nvl(sndPhoneNo), 12, StringUtils.SPACE);
@ -196,8 +196,8 @@ public class NiceCiApiDTO {
* </pre> * </pre>
*/ */
@Schema(requiredMode = Schema.RequiredMode.REQUIRED, title = "버튼요청건수", example = " ") @Schema(requiredMode = Schema.RequiredMode.REQUIRED, title = "버튼요청건수", example = " ")
@Pattern(regexp = "^ |[0-5]$", message = "버튼요청건수는 1자리로 최대 5 입니다.") @Pattern(regexp = "^[0-5]$", message = "버튼요청건수는 1자리로 최대 5 입니다.")
private String btnReqCnt = StringUtils.SPACE; private String btnReqCnt = "1";
public void setBtnReqCnt(Integer btnReqCnt) { public void setBtnReqCnt(Integer btnReqCnt) {
this.btnReqCnt = StringUtils.rightPad(nvl(btnReqCnt == null ? "" : btnReqCnt.toString()), 1, StringUtils.SPACE); this.btnReqCnt = StringUtils.rightPad(nvl(btnReqCnt == null ? "" : btnReqCnt.toString()), 1, StringUtils.SPACE);
} }
@ -583,7 +583,7 @@ public class NiceCiApiDTO {
*/ */
@Schema(title = "버튼이름", example = "1") @Schema(title = "버튼이름", example = "1")
@Size(min = 56, max = 56, message = "버튼이름은 56자리 입니다.") @Size(min = 56, max = 56, message = "버튼이름은 56자리 입니다.")
private String btnName = StringUtils.rightPad(StringUtils.EMPTY, 56, StringUtils.SPACE); private String btnName = StringUtils.rightPad("납부하기", 56, StringUtils.SPACE);
public void setBtnName(String jumin) { public void setBtnName(String jumin) {
this.btnName = StringUtils.rightPad(nvl(btnName), 56, StringUtils.SPACE); this.btnName = StringUtils.rightPad(nvl(btnName), 56, StringUtils.SPACE);
} }
@ -596,7 +596,10 @@ public class NiceCiApiDTO {
*/ */
@Schema(title = "버튼URL웹링크1", example = " ") @Schema(title = "버튼URL웹링크1", example = " ")
@Size(min = 1000, max = 1000, message = "버튼URL웹링크1 은 1000자리 입니다.") @Size(min = 1000, max = 1000, message = "버튼URL웹링크1 은 1000자리 입니다.")
private String btnUrlWebLink1 = StringUtils.rightPad(StringUtils.EMPTY, 1000, StringUtils.SPACE); private String btnUrlWebLink1 = StringUtils.rightPad(
"https://billgates-web.kakao.com/r/platform/pages/paynow/search/1832/11/01819e09-8b4c-4287-9f0f-1c5c2df80bf0",
1000,
StringUtils.SPACE);
public void setBtnUrlWebLink1(String btnUrlWebLink1) { public void setBtnUrlWebLink1(String btnUrlWebLink1) {
this.btnUrlWebLink1 = StringUtils.rightPad(nvl(btnUrlWebLink1), 1000, StringUtils.SPACE); this.btnUrlWebLink1 = StringUtils.rightPad(nvl(btnUrlWebLink1), 1000, StringUtils.SPACE);
} }

@ -428,12 +428,12 @@ public class NiceCiDTO {
private String errorMessage; private String errorMessage;
} }
@Schema(name = "TmpltMng DTO", description = "TmpltMng DTO") @Schema(name = "TmpltMngDTO DTO", description = "TmpltMngDTO DTO")
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public static class TmpltMng { public static class TmpltMngDTO {
private String dtype; private String dtype;
private String orgCd; private String orgCd;

@ -2,17 +2,17 @@ package cokr.xit.ens.modules.nice.service;
import java.util.*; import java.util.*;
import org.apache.commons.lang3.*;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.*; import org.springframework.stereotype.*;
import com.google.gson.*;
import cokr.xit.ens.biz.iup.code.*; import cokr.xit.ens.biz.iup.code.*;
import cokr.xit.ens.core.aop.*; import cokr.xit.ens.core.aop.*;
import cokr.xit.ens.core.exception.*; import cokr.xit.ens.core.exception.*;
import cokr.xit.ens.core.exception.code.*; import cokr.xit.ens.core.exception.code.*;
import cokr.xit.ens.core.utils.*; import cokr.xit.ens.core.utils.*;
import cokr.xit.ens.modules.common.ctgy.sys.mng.domain.*; import cokr.xit.ens.modules.common.ctgy.sys.mng.domain.*;
import cokr.xit.ens.modules.nice.cmm.*;
import cokr.xit.ens.modules.nice.mapper.*; import cokr.xit.ens.modules.nice.mapper.*;
import cokr.xit.ens.modules.nice.model.*; import cokr.xit.ens.modules.nice.model.*;
import cokr.xit.ens.modules.nice.service.support.*; import cokr.xit.ens.modules.nice.service.support.*;
@ -46,6 +46,7 @@ public class NiceCiSendBulkService {
private final NiceCiApiService niceCiApiService; private final NiceCiApiService niceCiApiService;
private final INiceCiMapper niceCiMapper; private final INiceCiMapper niceCiMapper;
private Gson gson = new GsonBuilder().disableHtmlEscaping().create();
final String msg = "민자도로 관리지원센터에서 김해찬님께 발송한 미납통행료 고지서가 도착했습니다.\n" final String msg = "민자도로 관리지원센터에서 김해찬님께 발송한 미납통행료 고지서가 도착했습니다.\n"
+ "\n" + "\n"
@ -90,9 +91,9 @@ public class NiceCiSendBulkService {
for(NiceCiDTO.InputXit xit : list) { for(NiceCiDTO.InputXit xit : list) {
final String tmpltId = xit.getJobCd(); final String tmpltId = xit.getJobCd();
final NiceCiDTO.TmpltMng tmpltMng = niceCiMapper.selectTmpltMsg(tmpltId) final NiceCiDTO.TmpltMngDTO tmpltMngDTO = niceCiMapper.selectTmpltMsg(tmpltId)
.orElseThrow(() -> new EnsException(EnsErrCd.NO_DATA_FOUND, EnsErrCd.NO_DATA_FOUND.getCodeNm())); .orElseThrow(() -> new EnsException(EnsErrCd.NO_DATA_FOUND, EnsErrCd.NO_DATA_FOUND.getCodeNm()));
final String sndMsg = tmpltMng.getMessage().replace("~~@@!!", "#{").replace("!!@@~~", "}"); final String sndMsg = tmpltMngDTO.getMessage();//.replace("~~@@!!", "#{").replace("!!@@~~", "}");
final OrgMng orgMng = niceCiMapper.selectKkoBpApiUrlFromEnsOrgMng(xit.getOrgCd()) final OrgMng orgMng = niceCiMapper.selectKkoBpApiUrlFromEnsOrgMng(xit.getOrgCd())
.orElseThrow(() -> new EnsException(EnsErrCd.NO_DATA_FOUND, EnsErrCd.NO_DATA_FOUND.getCodeNm())); .orElseThrow(() -> new EnsException(EnsErrCd.NO_DATA_FOUND, EnsErrCd.NO_DATA_FOUND.getCodeNm()));
@ -109,33 +110,23 @@ public class NiceCiSendBulkService {
NiceCiApiDTO.Request ciRequest = new NiceCiApiDTO.Request(); NiceCiApiDTO.Request ciRequest = new NiceCiApiDTO.Request();
NiceCiApiCommon nc = new NiceCiApiCommon(); NiceCiApiCommon nCommon = new NiceCiApiCommon();
NiceCiApiDTO.QueryRequest queryRequest = new NiceCiApiDTO.QueryRequest();
NiceCiApiDTO.ButtonRequest btnRequest = new NiceCiApiDTO.ButtonRequest();
// 공통부 set // 공통부 set
setNiceCiApiRequestCommon(nc, niceSmsReqId); setNiceCiApiRequestCommon(nCommon, niceSmsReqId);
// 개별부 set // 개별부 set
setNiceCiApiPrivateReq(ciRequest, tmpltId, sndMsg); setNiceCiApiPrivateReq(ciRequest, tmpltId, sndMsg, data);
// 조회요청반복부 set
NiceCiApiDTO.QueryRequest qr = new NiceCiApiDTO.QueryRequest(); setQueryRequest(queryRequest, data);
NiceCiApiDTO.ButtonRequest br = new NiceCiApiDTO.ButtonRequest(); // 버튼요청반복부 set
setBtnRequest(btnRequest, data);
ciRequest.setNiceCommon(nc);
ciRequest.getQueryRequests().add(qr);
ciRequest.getButtonRequests().add(br);
String ciTxt = ciRequest.ofString(); ciRequest.setNiceCommon(nCommon);
String ft = String.format("%s%s", ciRequest.getQueryRequests().add(queryRequest);
StringUtils.leftPad(String.valueOf(NiceCiUtils.lengthKr(ciTxt)), 10, "0"), ciRequest.getButtonRequests().add(btnRequest);
ciTxt);
System.out.println(
String.format("[%s] kr length - %d, utf-8 length - %d", ft, NiceCiUtils.lengthKr(ft),
ft.length()));
// String rtnMsg = niceCiApiService.requestSendBulk(ciRequest);
// NiceCiDTO.Response resDTO = NiceCiDTO.Response.parse(rtnMsg);
EnsResponseVO<?> responseVO = niceCiApiService.requestSendBulk(ciRequest); EnsResponseVO<?> responseVO = niceCiApiService.requestSendBulk(ciRequest);
log.info(responseVO.toString()); log.info(responseVO.toString());
return responseVO; return responseVO;
@ -146,36 +137,48 @@ public class NiceCiSendBulkService {
return null; return null;
} }
private void setNiceCiApiRequestCommon(final NiceCiApiCommon nc, final String niceSmsReqId) { /**
* set
* @param nCommon NiceCiApiCommon
* @param niceSmsReqId - PK
*/
private void setNiceCiApiRequestCommon(final NiceCiApiCommon nCommon, final String niceSmsReqId) {
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// 공통부 START // 공통부 START
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
//--------------------------------------------------------- //---------------------------------------------------------
// 공통부 : default start // 공통부 : default start
//--------------------------------------------------------- //---------------------------------------------------------
// nc.setGrpCode("NICEIF "); // 전문그룹코드 // nCommon.setGrpCode("NICEIF "); // 전문그룹코드
// nc.setTrType("0200"); // 거래종별코드 // nCommon.setTrType("0200"); // 거래종별코드
// nc.setTrClassification("31896"); // 거래구분코드 // nCommon.setTrClassification("31896"); // 거래구분코드
// nc.setSndAndRcvFlag("B"); // 송수신플래그 // nCommon.setSndAndRcvFlag("B"); // 송수신플래그
// nc.setDeviceClassification("503"); // 단말기구분 // nCommon.setDeviceClassification("503"); // 단말기구분
// nc.setRsltCode(" "); // 응답코드 // nCommon.setRsltCode(" "); // 응답코드
// nc.setNiceMngNo(""); // NICE 전문관리번호 // nCommon.setNiceMngNo(""); // NICE 전문관리번호
// nc.setNiceSndDt(""); // NICE 전문 전송시간 // nCommon.setNiceSndDt(""); // NICE 전문 전송시간
// ciRequest.setCommonEmptyField(""); // 공란 - 16자리 // ciRequest.setCommonEmptyField(""); // 공란 - 16자리
// ciRequest.setQueryConsentReason("1"); // 조회동의사유 // ciRequest.setQueryConsentReason("1"); // 조회동의사유
//---------------------------------------------------------- //----------------------------------------------------------
// 공통부 : default end // 공통부 : default end
//---------------------------------------------------------- //----------------------------------------------------------
nc.setOrgId(ORG_ID); // 참가기관ID - property 에서 nCommon.setOrgId(ORG_ID); // 참가기관ID - property 에서
nc.setOrgMngNo(niceSmsReqId); // 기관전문관리번호 - LPAD(SEQ_NICE_SMS_SNDNG_REQUST_ID, 10, '0') nCommon.setOrgMngNo(niceSmsReqId); // 기관전문관리번호 - LPAD(SEQ_NICE_SMS_SNDNG_REQUST_ID, 10, '0')
nc.setOrgSndDt(DateUtil.getTodayAndNowTime("yyyyMMdd")); // 기관전문전송시간 nCommon.setOrgSndDt(DateUtil.getTodayAndNowTime("yyyyMMdd")); // 기관전문전송시간
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// 공통부 END // 공통부 END
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
} }
private void setNiceCiApiPrivateReq(final NiceCiApiDTO.Request ciRequest, final String tmpltId, final String sndMsg){ /**
* set
* @param ciRequest NiceCiApiDTO.Request
* @param tmpltId template ID
* @param sndMsg 릿
* @param data NiceCiDTO.InputDataXit data
*/
private void setNiceCiApiPrivateReq(final NiceCiApiDTO.Request ciRequest, final String tmpltId, String sndMsg, final NiceCiDTO.InputDataXit data){
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// 개별요청부 START // 개별요청부 START
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -194,10 +197,50 @@ public class NiceCiSendBulkService {
//--------------------------------------------------------- //---------------------------------------------------------
ciRequest.setQueryReqCnt(1); // 조회요청건수 ciRequest.setQueryReqCnt(1); // 조회요청건수
Map<String, String> map = gson.fromJson(data.getMsgData(), Map.class);
for(Map.Entry<String, String> entry : map.entrySet()){
sndMsg = sndMsg.replace(entry.getKey(), entry.getValue());
}
ciRequest.setSndMessage(sndMsg); // 발송메세지 ciRequest.setSndMessage(sndMsg); // 발송메세지
ciRequest.setAlimtalkTmpltCode(tmpltId); // 알림톡 템플릿 코드 ciRequest.setAlimtalkTmpltCode(tmpltId); // 알림톡 템플릿 코드
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// 개별요청부 END // 개별요청부 END
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
} }
/**
* set
* @param queryRequest NiceCiApiDTO.QueryRequest
* @param data NiceCiDTO.InputDataXit
*/
private void setQueryRequest(final NiceCiApiDTO.QueryRequest queryRequest, final NiceCiDTO.InputDataXit data) {
//---------------------------------------------------------
// 조회요청 반복부 : default START
//---------------------------------------------------------
// queryRequest.setIdDiv("1"); // 개인사업자법인구분 : "1"
// queryRequest.setEmptyField(""); // 공란 - 36 자리
//---------------------------------------------------------
// 조회요청 반복부 : default END
//---------------------------------------------------------
queryRequest.setJumin(data.getSid()); // 주민번호
}
/**
* set
* @param btnRequest NiceCiApiDTO.ButtonRequest
* @param data NiceCiDTO.InputDataXit
*/
private void setBtnRequest(final NiceCiApiDTO.ButtonRequest btnRequest, final NiceCiDTO.InputDataXit data) {
//---------------------------------------------------------
// 버튼요청 반복부 : default START
//---------------------------------------------------------
// btnRequest.setBtnType("WL"); // 버튼타입
// btnRequest.setBtnName("납부하기"); // 버튼이름
// btnRequest.setBtnUrlWebLink2("");
// btnRequest.setEmptyField(""); // 공란 : 942 자리
//---------------------------------------------------------
// 버튼요청 반복부 : default END
//---------------------------------------------------------
btnRequest.setBtnUrlWebLink1(data.getPayUrl()); // 공란 - 36 자리
}
} }

@ -182,7 +182,7 @@
FROM DUAL FROM DUAL
</select> </select>
<select id="selectTmpltMsg" parameterType="string " resultType="cokr.xit.ens.modules.nice.model.NiceCiDTO$TmpltMng"> <select id="selectTmpltMsg" parameterType="string" resultType="cokr.xit.ens.modules.nice.model.NiceCiDTO$TmpltMngDTO">
/** iup-niceci-mapper|selectTmpltMsg-selest nice ci template message|julim */ /** iup-niceci-mapper|selectTmpltMsg-selest nice ci template message|julim */
SELECT dtype SELECT dtype
, org_cd , org_cd

Loading…
Cancel
Save