From c04c3c492035ec0efaa1ff21c8d15e20c6150826 Mon Sep 17 00:00:00 2001 From: limju Date: Mon, 23 Oct 2023 17:25:38 +0900 Subject: [PATCH] feat: KT BC, Post Plus feat --- .../xit/biz/kt/service/BizKtMmsService.java | 2 + .../main/resources/config/application-ens.yml | 3 +- .../xit/biz/ens/mapper/IEnsBatchMapper.java | 11 +- .../biz/ens/mapper/IEnsCctvFileMapper.java | 9 +- .../java/kr/xit/biz/ens/model/EnsDTO.java | 413 +++++++++++++++++- .../service/EnsBatchRequireNewService.java | 17 +- .../xit/biz/ens/service/EnsBatchService.java | 125 ++++-- .../biz/ens/service/EnsCctvFileService.java | 9 +- .../service/IEnsBatchRequireNewService.java | 9 +- .../main/resources/config/application-ens.yml | 8 +- .../mapper/biz/ens-cctv-mysql-mapper.xml | 2 +- .../mapper/biz/ens-mysql-mapper.xml | 90 +++- .../kr/xit/biz/ens/model/kt/KtMmsSendDTO.java | 1 - 13 files changed, 637 insertions(+), 62 deletions(-) diff --git a/mens-api/src/main/java/kr/xit/biz/kt/service/BizKtMmsService.java b/mens-api/src/main/java/kr/xit/biz/kt/service/BizKtMmsService.java index d52bd5a..0a9921a 100644 --- a/mens-api/src/main/java/kr/xit/biz/kt/service/BizKtMmsService.java +++ b/mens-api/src/main/java/kr/xit/biz/kt/service/BizKtMmsService.java @@ -98,6 +98,8 @@ public class BizKtMmsService extends EgovAbstractServiceImpl implements IBizKtMm .srcSeq("1") .ci("1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678") .mmsDtlCnts("db") + // TODO:: mybatis에서 처리 - SHA2(teusd.unity_sndng_detail_id, 256) + //.docHash(Base64.getEncoder().encodeToString("db".getBytes(StandardCharsets.UTF_8))) .docHash("db") .mmsTitle("") .url(CALLBACK_URL) //distInfoCrtYn - N이면 필수 diff --git a/mens-api/src/main/resources/config/application-ens.yml b/mens-api/src/main/resources/config/application-ens.yml index 8a507c7..3f9772b 100644 --- a/mens-api/src/main/resources/config/application-ens.yml +++ b/mens-api/src/main/resources/config/application-ens.yml @@ -57,7 +57,8 @@ contract: # 사전/본 문자 발송/수신 결과 전송 : BC-AG-SN-010 result-message: /api/ag/message/result # 토큰인증확인 : 본문자수신등록 callback url - callback-url: http://211.119.124.7:8081/api/biz/kt/v1/cfmToken + dp-callback-url: http://211.119.124.7:8081/api/biz/kt/v1/cfmTokenDP + me-callback-url: http://211.119.124.7:8081/api/biz/kt/v1/cfmTokenMe # 사전문자수신등록 : BC-AG-SN-001 before-send: /api/message/before/send diff --git a/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsBatchMapper.java b/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsBatchMapper.java index 161413e..f0df65d 100644 --- a/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsBatchMapper.java +++ b/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsBatchMapper.java @@ -2,14 +2,15 @@ package kr.xit.biz.ens.mapper; import java.util.List; import java.util.Optional; - +import kr.xit.biz.ens.model.EnsDTO; +import kr.xit.biz.ens.model.EnsDTO.SndngMssageParam; import kr.xit.biz.ens.model.cntc.CntcDTO; import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkStatus; import kr.xit.biz.ens.model.kakao.KkopayDocDTO.OneTimeToken; +import kr.xit.biz.ens.model.kt.KtMmsSendDTO.KtMainSendReqData; +import kr.xit.biz.ens.model.kt.KtMmsSendDTO.KtMainSendRequest; import org.egovframe.rte.psl.dataaccess.mapper.Mapper; -import kr.xit.biz.ens.model.EnsDTO; - /** *
  * description :
@@ -287,6 +288,9 @@ public interface IEnsBatchMapper {
      * 
*/ int updateProcessSttusSndngMst(final T t); + + Optional selectKtBcSendMstTgtInfo(final SndngMssageParam tgtDTO); + List selectKtBcSendTgts(final SndngMssageParam tgtDTO); //---------------------------------------------------------------------- // send //---------------------------------------------------------------------- @@ -380,4 +384,5 @@ public interface IEnsBatchMapper { * */ EnsDTO.MobilePageManage selectKkoMobilePage(final OneTimeToken dto); + } diff --git a/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsCctvFileMapper.java b/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsCctvFileMapper.java index 3680964..eadc742 100644 --- a/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsCctvFileMapper.java +++ b/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsCctvFileMapper.java @@ -1,6 +1,7 @@ package kr.xit.biz.ens.mapper; import kr.xit.biz.ens.model.EnsDTO; +import kr.xit.biz.ens.model.EnsDTO.EnsNtncCntcSndngTgt; import org.egovframe.rte.psl.dataaccess.mapper.Mapper; import java.util.List; @@ -25,8 +26,8 @@ public interface IEnsCctvFileMapper { int selectLicense(String jobSeCode); int insertNtcnCntcData(EnsDTO.NtcnCntcData dto); - List selectEnsNtncCntcSndngs(); - int insertCntcSndngMst(EnsDTO.EnsNtncCntcSndngTgts dto); - int insertCntcSndngDtl(EnsDTO.EnsNtncCntcSndngTgts dto); - int updateEnsNtcnCntcData(EnsDTO.EnsNtncCntcSndngTgts dto); + List selectEnsNtncCntcSndngs(); + int insertCntcSndngMst(EnsNtncCntcSndngTgt dto); + int insertCntcSndngDtl(EnsNtncCntcSndngTgt dto); + int updateEnsNtcnCntcData(EnsNtncCntcSndngTgt dto); } diff --git a/mens-batch/src/main/java/kr/xit/biz/ens/model/EnsDTO.java b/mens-batch/src/main/java/kr/xit/biz/ens/model/EnsDTO.java index 5fd86b6..3fc2a27 100644 --- a/mens-batch/src/main/java/kr/xit/biz/ens/model/EnsDTO.java +++ b/mens-batch/src/main/java/kr/xit/biz/ens/model/EnsDTO.java @@ -1,22 +1,25 @@ package kr.xit.biz.ens.model; -import java.io.Serializable; -import java.time.LocalDateTime; - import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; - import io.swagger.v3.oas.annotations.media.Schema; +import java.io.Serializable; +import java.time.LocalDateTime; +import javax.validation.constraints.Digits; +import javax.validation.constraints.Size; import kr.xit.biz.common.ApiConstants; import kr.xit.biz.ens.model.cmm.CmmEnsRequestDTO; +import kr.xit.biz.ens.model.kt.KtMmsSendDTO.KtMainSendRequest; import kr.xit.core.biz.model.AuditFields; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; import lombok.experimental.SuperBuilder; -import javax.validation.constraints.Digits; -import javax.validation.constraints.Size; - /** *
  * description : tb_ens_ Entity DTO
@@ -114,7 +117,7 @@ public class EnsDTO {
     @AllArgsConstructor
     @SuperBuilder
     @EqualsAndHashCode(callSuper = true)
-    public static class SendKakaoTgt extends EnsDTO.KakaoMyDoc implements Serializable {
+    public static class SendKakaoTgt extends EnsDTO.KakaoMyDoc {
 
         /**
          * 발송 마스터 id
@@ -904,7 +907,7 @@ public class EnsDTO {
     @NoArgsConstructor
     @AllArgsConstructor
     @SuperBuilder
-    public static class EnsNtncCntcSndngTgts implements Serializable {
+    public static class EnsNtncCntcSndngTgt implements Serializable {
         /**
          * 전자고지 연계 data id
          */
@@ -994,4 +997,394 @@ public class EnsDTO {
         @Builder.Default
         private String sndngProcessSttus = ApiConstants.SndngProcessStatus.ACCEPT.getCode();
     }
+
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @SuperBuilder
+    @EqualsAndHashCode(callSuper = true)
+    public static class KtBcSendTgtInfo extends KtMainSendRequest { //KtBcSendReqData {
+        @Builder.Default
+        private String sndngTyCode = "ENS";
+        /**
+         * FIXME :: 알림톡 추가시 변경 필요
+         * 템플릿 ID
+         */
+        private String tmplatId;
+        /**
+         * 사전알림 데이타 생성 대상 여부
+         */
+        private String tgtYn;
+
+        /**
+         * 통합발송 마스터ID
+         */
+        private String unitySndngMastrId;
+        /**
+         * 통합발송 상세ID
+         */
+        private String unitySndngDetailId;
+        /**
+         * 발송처리상태
+         */
+        @Builder.Default
+        private String sndngProcessSttus = ApiConstants.SndngProcessStatus.ACCEPT.getCode();
+
+//        //-------------------------------------------------------------------
+//        // 필수
+//        //-------------------------------------------------------------------
+//        /**
+//         * 
+//         * 서비스 코드: 필수 - 20
+//         * BizCenter에서 발행한 기관의 서비스 코드
+//         * 
+// */ +// private String serviceCd; +// +// /** +// *
+//         * 서비스 코드: 필수 - 16
+//         * BizCenter에서 발행한 기관의 서비스 코드 인증키
+//         * 
+// */ +// private String serviceKey; +// +// /** +// *
+//         * 문서 코드: 필수 - 5
+//         * 문서코드에 따라 발신번호 Mapping
+//         * 
+// */ +// private String msgCd; +// +// /** +// *
+//         * 문발송 메시지 타입: 필수 - 1
+//         * RCS/xMS (RCS :1, xMS: 2)
+//         * 
+// */ +// private final String msgType = "2"; +// +// /** +// *
+//         * 발송시작일시: 필수 - 14
+//         * 메시지 발송 처리 시작일시(YYYYMMDDHHMiSS)
+//         * 
+// */ +// private String makeDt; +// +// /** +// *
+//         * 발송마감시간: 필수 - 14
+//         * 메시지 발송에 대한 마감시간(YYYYMMDDHHMiSS)
+//         * 
+// */ +// private String sndnExTime; +// +// /** +// *
+//         * 열람마감시간: 필수 - 14
+//         * 문서열람에 대한 마감시간(YYYYMMDDHHMiSS)
+//         * 
+// */ +// private String exTime; +// +// /** +// *
+//         * 문서종류: 필수 - 3
+//         * 메시지타입(과금코드)
+//         * 3: LMS
+//         * 4: MMS
+//         * 6: RCS
+//         * 
+// */ +// private final String m_type = "4"; +// +// /** +// *
+//         * 발송요청건수: 필수 - 8
+//         * 발송메세지의 총 건수
+//         * 
+// */ +// private Integer sndnTotCnt; +// +// private List reqs; +// //------------------------------------------------------------------- +// +// /** +// *
+//         * 대행사 코드: max 10
+//         * msg_type 1(RCS 메세지인 경우)인 경우 필수
+//         * LG U+에서 사용되며 기관에서 등록한 대행사 코드의 값 default 'lguplus'
+//         * 
+// */ +// private String agencyId; +// +// /** +// *
+//         * 부서 코드: max 5
+//         * 기관에 따른 부서 코드
+//         * 
+// */ +// private String deptCd; +// +// /** +// *
+//         * 발송 번호: max 20
+//         * 문서코드 등록시 발신번호 Mapping
+//         * Biz.center 등록시 통신사실증명원 등록(민간)
+//         *
+//         * API에 있는 경우 API 발송 번호를 우선으로 하고, 없는 경우 문서코드 등록시 입력된 발신번호를 사용한다.
+//         * 
+// */ +// private String sndTelNo; +// +// /** +// *
+//         * 메세지발송구분: max 1
+//         * 3: 하이브리드
+//         *
+//         * 값이 null인 경우 default 1(OPT_OUT 본문)로 P/F 전송 됨
+//         * 마케팅수신동의 고객인 경우 5 또는 7 코드를 전송해야 함.
+//         * 
+// */ +// private final String optType = "1"; +// +// /** +// *
+//         * RCS 브랜드홈 값 : max 30
+//         * msg_type 1(RCS 메시지)인 경우 필수
+//         * 
+// */ +// private String brandId; +// +// /** +// *
+//         * 토큰확인대체여부 : Y|N
+//         * Y 인경우 본인인증시 열람확인처리
+//         * 
+// */ +// private String tknRpmtYn; +// +// /** +// *
+//         * 열람확인대체여부 : Y|N
+//         * Y 인경우 토큰인증시 열람확인처리
+//         * 
+// */ +// private String rdngRpmtYn; +// +// /** +// *
+//         * MMS 바이너리 : 가변 - MMS 필수
+//         * 이미지 등 Binary (용량 : 300KB 이내)
+//         * 
+// */ +// private String mmsBinary; +// +// /** +// *
+//         * MMS 바이너리 파일포맷(확장자) : 10
+//         * MMS 바이너리 값이 있는 경우 필수
+//         * 
+// */ +// private String fileFmat; +// +// /** +// *
+//         * 마케팅 수신 동의 : 1
+//         * Y : 동의, N : 비동의 (NULL인 경우 비동의 처리)
+//         * 
+// */ +// private String mktnRcveCsyn; +// +// /** +// *
+//         * 송신자 플랫폼 ID : max 25
+//         * 타 중계기관(포스토피아)에서 발송 요청인 경우 필수
+//         * 송신중계자(포스토피아) 플랫폼 ID
+//         * 
+// */ +// private String sndPlfmId; +// +// /** +// *
+//         * 송신 공인전자주소 : max 100
+//         * 타 중계기관(포스토피아)에서 발송 요청인 경우 필수
+//         * 중계자 전자유통정보 등록을 위한 송신 공인전자주소
+//         * 
+// */ +// private String sndNpost; +// +// /** +// *
+//         * 송신일시 : 14(YYYYMMDDHHMISS)
+//         * 타 중계기관(포스토피아)에서 발송 요청인 경우 필수
+//         * 중계자간의 발송시 유통정보의 송신일시는 송신중계자의 송신일시로 적용
+//         * 
+// */ +// private String sndDate; +// +// /** +// *
+//         * 다회선 사용자 처리구분 : 1
+//         * 1 : 다회선 모두 발송
+//         * 2 : 다회선 발송 제외(default) (NULL 일경우 동일취급)
+//         * 3 : 다회선 중 임의 1회선 발송
+//         * 
+// */ +// private String multiMblPrcType; +// +// /** +// *
+//         * 테스트 발송여부 : 1
+//         * Y : 테스트 발송 (KISA 연동, 통계, 이력 제외)
+//         * N : 실발송(NULL일경우 동일 취급)
+//         * 
+// */ +// private String testSndnYn; +// +// /** +// *
+//         * 수신거부해제 여부 : 1
+//         * Y : 해제 (수신거부 시 수신거부 해제)
+//         * N : 미해제(NULL일경우 동일취급)
+//         * 
+// */ +// private String rcvRfrlYn; +// +// +// /** +// *
+//         * 재열람 일수 : max 3
+//         * 값이 있을 경우 발송시작일시+재열람 일수 동안 재열람
+//         * 값이 없을 경우 열람마감이후 열람 불가
+//         * 
+// */ +// private String reopenDay; + } + +// @Data +// @NoArgsConstructor +// @AllArgsConstructor +// @SuperBuilder +// public static class KtBcSendReqData { +// //------------------------------------------------------------------- +// // 필수 +// //------------------------------------------------------------------- +// /** +// * 관리키 : 고객메시지 건별 Unique key +// */ +// private String srcKey; +// +// /** +// * 리스트순번 : max 8자리 +// */ +// private String srcSeq; +// +// /** +// * 개인식별코드 : 88 자리 +// */ +// private String ci; +// +// /** +// *
+//         * MMS 상세내용 : max 4000
+//         * URL 없음
+//         * {#INFO_CFRM_STR}, {#RCVE_RF_STR} 문자열이 없는 경우 요청 거부 처리 함.
+//         * 단, 유통정보미생성여부가 'Y'인 경우 {#RCVE_RF_STR} 문자열만 체크.
+//         * 
+// */ +// private String mmsDtlCnts; +// +// /** +// * 문서해시 : max 100 +// */ +// private String docHash; +// //------------------------------------------------------------------- +// +// /** +// *
+//         * MMS 제목 : max 40
+//         * utf-8 한글20자
+//         * 
+// */ +// private String mmsTitle; +// +// /** +// *
+//         * RCS 상세내용 : max 4000 - RCS|Binary 전송시 필수
+//         * RCS 메시지 fallback 시 mms_dtl_cnts를 사용하며
+//         * RCS title은 mms_title 항목을 함께 사용한다.
+//         * 
+// */ +// private String rcsDtlCnts; +// +// /** +// *
+//         * 연결 URL : max 1000
+//         * dist_info_crt_yn의 값이 'Y'가 아닌 경우 필수
+//         * 
+// */ +// @Setter +// private String url; +// +// /** +// *
+//         * MMS 바이너리 : 가변 - MMS 필수
+//         * 이미지 등 Binary (용량 : 300KB 이내)
+//         * 
+// */ +// private String mmsBinary; +// +// /** +// *
+//         * MMS 바이너리 파일포맷(확장자) : 10
+//         * MMS 바이너리 값이 있는 경우 필수
+//         * 
+// */ +// private String fileFmat; +// +// /** +// *
+//         * 개인휴대전화번호 : 11 자리
+//         * 특정 MDN으로 발송할 경우
+//         * 
+// */ +// private String mdn; +// +// /** +// *
+//         * 유통정보 미생성여부 : Y|N
+//         * Y : 본문자 발송 중 안내문확인하기 문구 및 URL이 표기 되지 않아야 함.(KISA 유통정보 생성 하지 않음)
+//         * N Or NULL인 경우 안내문확인하기 문구 및 URL이 표기
+//         * 
+// */ +// private String distInfoCrtYn; +// +// /** +// *
+//         * 안내문 확인하기 치환문구 : max 50
+//         * 안내문 확인하기 예약어로써 API에 추가 될 {#INFO_CFRM_STR} 항목에 있는 문구를 치환 하여 사용 한다.
+//         * 항목이 NULL인 경우 default로 아래 문구를 사용 한다.
+//         * ‘○ 안내문 확인하기 : ‘
+//         * RCS 버튼명 사용이 가능(한글은 최대 17자 권고)
+//         * 
+// */ +// private String infoCfrmStr; +// +// /** +// *
+//         * 수신거부 및 수신 휴대폰 지정하기 치환문구 : max 50
+//         * 수신거부 및 수신 휴대폰 지정하기 예약어로써 API에 추가 될 {#RCVE_RF_STR} 항목에 있는 문구를 치환하여 사용 한다.
+//         * 항목이 NULL인 경우 default로 아래 문구를 사용 한다.
+//         * "○ 수신거부 및 수신 휴대폰 지정하기 : "
+//         * RCS 버튼명 사용이 가능(한글은 최대 17자 권고)
+//         * 
+// */ +// private String rcveRfStr; +// } + + } diff --git a/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchRequireNewService.java b/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchRequireNewService.java index 215e704..b4990f4 100644 --- a/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchRequireNewService.java +++ b/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchRequireNewService.java @@ -11,6 +11,7 @@ import kr.xit.biz.common.ApiConstants; import kr.xit.biz.common.ApiConstants.SndngSeCode; import kr.xit.biz.ens.mapper.IEnsBatchMapper; import kr.xit.biz.ens.model.EnsDTO; +import kr.xit.biz.ens.model.EnsDTO.SndngMssageParam; import kr.xit.biz.ens.model.cntc.CntcDTO; import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkSendResponses; import kr.xit.biz.sms.service.ISmsMessageService; @@ -131,11 +132,23 @@ public class EnsBatchRequireNewService extends EgovAbstractServiceImpl implement updateStepSendMststatus(paramDTO, "SMS"); } - //----------------------------------------------------------------------------------------------------------------- - + @Override + public void sendKtBc(SndngMssageParam tgtDTO) { +// KtMainSendRequest infoDto = mapper.selectKtBcSendMstTgtInfo(tgtDTO) +// .orElseThrow(() -> BizRuntimeException.create("KT BC 본문자 수신 등록 대상이 존재 하지 않습니다 ")); +// infoDto.getReqs().addAll( +// mapper.selectKtBcSendTgts(tgtDTO) +// ); + } + @Override + public void sendPostPlus(SndngMssageParam tgtDTO) { + } + //----------------------------------------------------------------------------------------------------------------- + // private method + //----------------------------------------------------------------------------------------------------------------- /** * 카카오 내문서함 문서발송요청 연계결과(tb_cntc_sndng_result) 생성 * diff --git a/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchService.java b/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchService.java index 6948744..348b3fc 100644 --- a/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchService.java +++ b/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchService.java @@ -28,6 +28,9 @@ import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkSendResponses; import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkStatusRequests; import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkStatusResponses; import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.PropertyBulk; +import kr.xit.biz.ens.model.kt.KtCommonDTO.KtCommonResponse; +import kr.xit.biz.ens.model.kt.KtMmsSendDTO.KtMainSendReqData; +import kr.xit.biz.ens.model.kt.KtMmsSendDTO.KtMainSendRequest; import kr.xit.core.exception.BizRuntimeException; import kr.xit.core.model.ApiResponseDTO; import kr.xit.core.spring.util.ApiWebClientUtil; @@ -63,12 +66,16 @@ import org.springframework.transaction.annotation.Transactional; @RequiredArgsConstructor @Service public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatchService { - @Value("${contract.kakao.host}") + @Value("${contract.host}") private String apiHost; @Value("${contract.kakao.api.bulksend}") - private String apiBulkSend; + private String apiKkoBulkSend; @Value("${contract.kakao.api.bulkstatus}") - private String apiBulkStatus; + private String apiKkoBulkStatus; + @Value("${contract.kt.api.bulksend}") + private String apiKtBcBulkSend; + @Value("${contract.kt.api.bulkstatus}") + private String apiKtBcBulkStatus; private static final String profile = System.getProperty("spring.profiles.active"); @@ -80,7 +87,10 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc .getValidator(); @Value("${contract.kakao.bulk-max-cnt}") - private int bulkMaxCnt; + private int bulkKkoMaxCnt; + + @Value("${contract.kt.bulk-max-cnt}") + private int bulkKtMaxCnt; private static final String SNDNG_PROCESS_STTUS = "sndngProcessSttus"; private static final String UNITY_SNDNG_MST_ID = "unitySndngMastrId"; @@ -304,24 +314,15 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc // 업무 문서 구분에 따른 분기 switch (SndngSeCode.compare(tryVal[tgtDTO.getTrySeq() - 1])) { - // 카카오 - case KAKAO: - sendBulkKakaoMyDocs(tgtDTO); - break; - - // E-GREEN - case E_GREEN: - requireNewService.sendEgreen(tgtDTO); - break; - - // SMS - case SMS: - requireNewService.sendSms(tgtDTO); - break; - - default: - break; + case KAKAO -> sendBulkKakaoMyDocs(tgtDTO); + case KT_BC -> sendBulkKtBc(tgtDTO); + case PPLUS -> sendBulkPplus(tgtDTO); + case E_GREEN -> requireNewService.sendEgreen(tgtDTO); + case SMS -> requireNewService.sendSms(tgtDTO); } + throw BizRuntimeException.create( + String.format("정의 되지 않은 문서 중개자[%s] 입니다", tryVal[tgtDTO.getTrySeq() - 1]) + ); } } @@ -333,11 +334,11 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc @Override @Transactional public void findKkoMyDocStatusBulks(final EnsDTO.BatchEnsRequest reqDTO) { - final String url = apiHost + apiBulkStatus; + final String url = apiHost + apiKkoBulkStatus; final List docsBinderUuids = mapper.selectKakaoStatusTgts(reqDTO.getSndngProcessSttus()); - List> partitions = ListUtils.partition(docsBinderUuids, bulkMaxCnt); + List> partitions = ListUtils.partition(docsBinderUuids, bulkKkoMaxCnt); List> apiResults = partitions.stream() .map(uuids -> ApiResponseDTO.success( @@ -471,7 +472,7 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc List errors = new ArrayList<>(); int idx = 0; - List> arrList = ListUtils.partition(valiList, bulkMaxCnt); + List> arrList = ListUtils.partition(valiList, bulkKkoMaxCnt); for (List list : arrList) { for (EnsDTO.sndngVali dto : list) { Set> errList = validator.validate(dto); @@ -672,8 +673,14 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc // send //----------------------------------------------------------------------------------------------------------------- + /** + *
+     * 카카오 문서 send
+     * @param tgtDTO SndngMssageParam
+     * 
+ */ private void sendBulkKakaoMyDocs(final EnsDTO.SndngMssageParam tgtDTO) { - final String url = apiHost + apiBulkSend; + final String url = apiHost + apiKkoBulkSend; final List list = mapper.selectKakaoSendTgts(tgtDTO); final List bulkList = new ArrayList<>(); @@ -689,7 +696,7 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc throw e; } - List> partitions = ListUtils.partition(bulkList, bulkMaxCnt); + List> partitions = ListUtils.partition(bulkList, bulkKkoMaxCnt); List> apiResults = partitions.stream() @@ -788,7 +795,7 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc List errors = new ArrayList<>(); int idx = 0; - List> arrList = ListUtils.partition(bulkList, bulkMaxCnt); + List> arrList = ListUtils.partition(bulkList, bulkKkoMaxCnt); for (List list : arrList) { for (KkopayDocBulkDTO.BulkSendReq dto : list) { Set> errList = validator.validate( @@ -845,6 +852,7 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc final String stsErrMsg) { for (String id : mstIdList) { + // FIXME :: stsErrMsg 메세지 확인 필 EnsDTO.SndngMssageParam dto = mapper.selectSndProcessStatus(id) .orElseThrow(() -> BizRuntimeException.create(stsErrMsg)); @@ -875,8 +883,71 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc } } + /** + *
+     * KT BC 문서 send
+     * @param tgtDTO SndngMssageParam
+     * 
+ */ + // TODO :: 구현 필요 + private void sendBulkKtBc(final EnsDTO.SndngMssageParam tgtDTO) { + final String url = apiHost + apiKtBcBulkSend; + + KtMainSendRequest infoDto = mapper.selectKtBcSendMstTgtInfo(tgtDTO) + .orElseThrow(() -> BizRuntimeException.create("KT BC 본문자 수신 등록 대상이 존재 하지 않습니다 ")); + + List sendReqs = mapper.selectKtBcSendTgts(tgtDTO); + + final List bulkList = new ArrayList<>(); + final List mstIdList = new ArrayList<>(); + +// setKkoMyDocSendBulks(list, bulkList, mstIdList); + + // validation check +// try { +// validatedKkoMyDocSendBulks(bulkList); +// } catch (Exception e) { +// updateKkoMyDocSndngMstFailStatus(mstIdList, "[send]카카오 문서 발송(bulks)요청 실패(파라메터 오류)"); +// throw e; +// } + + List> partitions = ListUtils.partition(sendReqs, bulkKtMaxCnt); + + List> apiResults = partitions.stream() + .map(bulkSendList -> { + infoDto.setReqs(bulkSendList); + return ApiResponseDTO.success( + apiWebClient.exchange( + url.toString(), + HttpMethod.POST, + infoDto, + KtCommonResponse.class, + getHeadeMap())); + } + ) + .collect(Collectors.toList()); + + // GET 결과 목록 + List resList = apiResults.stream() + .map(ApiResponseDTO::getData) + .collect(Collectors.toList()); + + // 카카오 문서 요청 결과 반영 + //requireNewService.saveKkoMyDocResult(mstIdList, tgtDTO.getUnitySndngMastrId(), resList); + requireNewService.sendKtBc(tgtDTO); + } //----------------------------------------------------------------------------------------------------------------- + /** + *
+     * KT BC 문서 send
+     * @param tgtDTO SndngMssageParam
+     * 
+ */ + // TODO:: 구현 필요 + private void sendBulkPplus(final EnsDTO.SndngMssageParam tgtDTO) { + requireNewService.sendPostPlus(tgtDTO); + } } diff --git a/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsCctvFileService.java b/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsCctvFileService.java index 5585e98..4bb06d4 100644 --- a/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsCctvFileService.java +++ b/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsCctvFileService.java @@ -2,6 +2,7 @@ package kr.xit.biz.ens.service; import kr.xit.biz.ens.mapper.IEnsCctvFileMapper; import kr.xit.biz.ens.model.EnsDTO; +import kr.xit.biz.ens.model.EnsDTO.EnsNtncCntcSndngTgt; import kr.xit.core.support.utils.Checks; import kr.xit.core.support.utils.DateUtils; import kr.xit.core.support.utils.SFTPUtils; @@ -137,12 +138,12 @@ public class EnsCctvFileService extends EgovAbstractServiceImpl implements IEnsC @Override @Transactional public void acceptEnsNtnccntcSndng() { - List tgtList = mapper.selectEnsNtncCntcSndngs(); + List tgtList = mapper.selectEnsNtncCntcSndngs(); if(tgtList.size() == 0) return; // search 전자 고지 연계발송 데이타 생성 대상 - Optional first = tgtList.stream() + Optional first = tgtList.stream() .filter(dto -> "Y".equals(dto.getTgtYn())) .findFirst(); @@ -150,7 +151,7 @@ public class EnsCctvFileService extends EgovAbstractServiceImpl implements IEnsC final String unitySndngMastrId; final String closDt; if(first.isPresent()){ - EnsDTO.EnsNtncCntcSndngTgts tgtDTO = first.get(); + EnsNtncCntcSndngTgt tgtDTO = first.get(); mapper.insertCntcSndngMst(tgtDTO); unitySndngMastrId = tgtDTO.getUnitySndngMastrId(); closDt = tgtDTO.getClosDt(); @@ -197,7 +198,7 @@ public class EnsCctvFileService extends EgovAbstractServiceImpl implements IEnsC } } - private String jsonCn(EnsDTO.EnsNtncCntcSndngTgts dto){ + private String jsonCn(EnsNtncCntcSndngTgt dto){ String jsonCn = "{" + "\"details\": [" + "{" diff --git a/mens-batch/src/main/java/kr/xit/biz/ens/service/IEnsBatchRequireNewService.java b/mens-batch/src/main/java/kr/xit/biz/ens/service/IEnsBatchRequireNewService.java index d763c88..64961ec 100644 --- a/mens-batch/src/main/java/kr/xit/biz/ens/service/IEnsBatchRequireNewService.java +++ b/mens-batch/src/main/java/kr/xit/biz/ens/service/IEnsBatchRequireNewService.java @@ -1,7 +1,7 @@ package kr.xit.biz.ens.service; import java.util.List; -import kr.xit.biz.ens.model.EnsDTO; +import kr.xit.biz.ens.model.EnsDTO.SndngMssageParam; import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkSendResponses; /** @@ -24,6 +24,9 @@ import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkSendResponses; public interface IEnsBatchRequireNewService { void saveKkoMyDocResult(final List mstIdList, String unitySndMstId, final List resList); - void sendEgreen(final EnsDTO.SndngMssageParam tgtDTO); - void sendSms(final EnsDTO.SndngMssageParam tgtDTO); + void sendEgreen(final SndngMssageParam tgtDTO); + void sendSms(final SndngMssageParam tgtDTO); + + void sendKtBc(final SndngMssageParam tgtDTO); + void sendPostPlus(final SndngMssageParam tgtDTO); } diff --git a/mens-batch/src/main/resources/config/application-ens.yml b/mens-batch/src/main/resources/config/application-ens.yml index be63989..8cdbe20 100644 --- a/mens-batch/src/main/resources/config/application-ens.yml +++ b/mens-batch/src/main/resources/config/application-ens.yml @@ -11,9 +11,15 @@ contract: corePoolSize: 5 # 스레드 풀에서 사용할 수 있는 최대 개수 maxPoolSize: 10 + host: http://localhost:8081 kakao: bulk-max-cnt: 10 - host: http://localhost:8081 api: bulksend: /api/ens/kakao/v1/documents/bulk bulkstatus: /api/ens/kakao/v1/documents/bulk/status + kt: + bulk-max-cnt: 10 + api: + bulksend: /api/ens/kt/v1/mainSend + bulkstatus: /api/ens/kt/v1/messageResult + diff --git a/mens-batch/src/main/resources/egovframework/mapper/biz/ens-cctv-mysql-mapper.xml b/mens-batch/src/main/resources/egovframework/mapper/biz/ens-cctv-mysql-mapper.xml index e21880c..c593ea3 100644 --- a/mens-batch/src/main/resources/egovframework/mapper/biz/ens-cctv-mysql-mapper.xml +++ b/mens-batch/src/main/resources/egovframework/mapper/biz/ens-cctv-mysql-mapper.xml @@ -37,7 +37,7 @@ ) - /** ens-mysql-mapper|selectEnsNtnccntcSndngs-전자 고지 연계 발송 데이타 대상 조회|seojh */ SELECT tpncd.ens_cntc_data_id /* 전자 고지연계데이타 ID*/ , tpncd.vhcle_no /* 차량번호 */ diff --git a/mens-batch/src/main/resources/egovframework/mapper/biz/ens-mysql-mapper.xml b/mens-batch/src/main/resources/egovframework/mapper/biz/ens-mysql-mapper.xml index 1c02390..51bf9d5 100644 --- a/mens-batch/src/main/resources/egovframework/mapper/biz/ens-mysql-mapper.xml +++ b/mens-batch/src/main/resources/egovframework/mapper/biz/ens-mysql-mapper.xml @@ -635,19 +635,99 @@ , tess.signgu_code , tess.ffnlg_code , tess.vhcle_no - , tess.sms_sndng_dt /* 문자 발송 일시 */ - , tess.sms_trnsmis_stle /* 문자 전송 형태 */ + , tess.sms_sndng_dt /* 문자 발송 일시 */ + , tess.sms_trnsmis_stle /* 문자 전송 형태 */ , tess.sms_trnsmit_tlphon_no /* 문자 송신 전화 번호 */ , tess.sms_recptn_tlphon_no /* 문자 수진 전화 번호 */ - , tess.sms_mssage /* 문자 메세지 */ - , tess.sms_sndng_sttus /* 문자 발송 상태 */ - , tess.sms_sndng_process_sttus /* 문자 발송 처리 상태 */ + , tess.sms_mssage /* 문자 메세지 */ + , tess.sms_sndng_sttus /* 문자 발송 상태 */ + , tess.sms_sndng_process_sttus /* 문자 발송 처리 상태 */ FROM tb_ens_sndng_mastr tesm JOIN tb_ens_sms_sndng tess ON tesm.sndng_mastr_id=tess.sndng_mastr_id WHERE tess.sndng_mastr_id = #{sndngMastrId} + + + +