From e8f84675274e32d0ebdf0a17836c03b466d4e15a Mon Sep 17 00:00:00 2001 From: limju Date: Tue, 10 Oct 2023 15:01:45 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B0=B0=EC=B9=98=20->=20API=20call=20?= =?UTF-8?q?=EB=B0=98=EC=98=81(KAKAO=20API)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/xit/biz/cmm/util/CmmKakaoUtils.java | 47 -- .../xit/biz/ens/service/EnsBatchService.java | 70 +- .../kr/xit/biz/ens/model/epost/EPostDTO.java | 743 ++++++++++++++++++ 3 files changed, 786 insertions(+), 74 deletions(-) delete mode 100644 mens-batch/src/main/java/kr/xit/biz/cmm/util/CmmKakaoUtils.java create mode 100644 mens-core/src/main/java/kr/xit/biz/ens/model/epost/EPostDTO.java diff --git a/mens-batch/src/main/java/kr/xit/biz/cmm/util/CmmKakaoUtils.java b/mens-batch/src/main/java/kr/xit/biz/cmm/util/CmmKakaoUtils.java deleted file mode 100644 index 01e08ce..0000000 --- a/mens-batch/src/main/java/kr/xit/biz/cmm/util/CmmKakaoUtils.java +++ /dev/null @@ -1,47 +0,0 @@ -package kr.xit.biz.cmm.util; - -import egovframework.com.cmm.EgovMessageSource; -import kr.xit.biz.cmm.service.ICmmEnsCacheService; -import kr.xit.biz.ens.model.cmm.CmmEnsRlaybsnmDTO; -import kr.xit.core.exception.BizRuntimeException; -import kr.xit.core.spring.util.BatchSpringUtils; -import kr.xit.core.spring.util.CoreSpringUtils; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.apache.commons.lang3.ObjectUtils; - -/** - *
- * description :
- *
- * packageName : kr.xit.ens.kakao.cmm
- * fileName    : CmmKakaoUtils
- * author      : limju
- * date        : 2023-09-19
- * ======================================================================
- * 변경일         변경자        변경 내용
- * ----------------------------------------------------------------------
- * 2023-09-19    limju       최초 생성
- *
- * 
- */ - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class CmmKakaoUtils { - private static final EgovMessageSource messageSource = CoreSpringUtils.getMessageSource(); - private static final ICmmEnsCacheService cacheService = BatchSpringUtils.getCmmEnsCacheService(); - - /** - * KT MMS 인증 정보 조회 - * @return - */ - public static CmmEnsRlaybsnmDTO getRlaybsnmInfo(final String signguCode, final String ffnlgCode) { - final CmmEnsRlaybsnmDTO dto = cacheService.getRlaybsnmInfoCache(signguCode, ffnlgCode); - if(ObjectUtils.isEmpty(dto)) throw BizRuntimeException.create(messageSource.getMessage("fail.api.rlaybsnm.info")); - cacheService.logCache(); - - return dto; - } - - -} 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 6e4a60a..e4813b8 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 @@ -1,15 +1,29 @@ package kr.xit.biz.ens.service; -import java.io.*; -import java.util.*; -import java.util.stream.Collectors; - import egovframework.com.cmm.util.EgovDateUtil; import egovframework.com.cmm.util.EgovStringUtil; -import kr.xit.biz.cmm.util.CmmKakaoUtils; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; import kr.xit.biz.common.ApiConstants; +import kr.xit.biz.ens.mapper.IEnsBatchMapper; +import kr.xit.biz.ens.model.CntcDTO; +import kr.xit.biz.ens.model.EnsDTO; import kr.xit.biz.ens.model.EnsDTO.SendKakaoTgt; import kr.xit.biz.ens.model.kakao.KkopayDocAttrDTO.Receiver; +import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO; import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkSendReq; import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkSendRequests; import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkSendResponses; @@ -17,33 +31,25 @@ 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.sms.service.ISmsMessageService; +import kr.xit.core.exception.BizRuntimeException; +import kr.xit.core.model.ApiResponseDTO; import kr.xit.core.spring.util.ApiWebClientUtil; +import kr.xit.core.support.utils.Checks; import kr.xit.core.support.utils.DateUtils; -import kr.xit.core.support.utils.JsonUtils; +import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl; import org.egovframe.rte.fdl.cryptography.EgovPasswordEncoder; import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import kr.xit.biz.ens.mapper.IEnsBatchMapper; -import kr.xit.biz.ens.model.CntcDTO; -import kr.xit.biz.ens.model.EnsDTO; -import kr.xit.core.exception.BizRuntimeException; -import kr.xit.core.model.ApiResponseDTO; -import kr.xit.core.support.utils.Checks; -import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO; -import lombok.RequiredArgsConstructor; - -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; - /** *
  * description : 모바일 전자고지 배치 서비스
@@ -465,14 +471,16 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
         List> apiResults = partitions.stream()
             .map(bulkSendList ->
                 ApiResponseDTO.success(
-                    apiWebClient.exchangeKko(
+                    apiWebClient.exchange(
                         url.toString(),
                         HttpMethod.POST,
-                        JsonUtils.toJson(BulkSendRequests.builder()
+                        BulkSendRequests.builder()
+                            .signguCode(tgtDTO.getSignguCode())
+                            .ffnlgCode(tgtDTO.getFfnlgCode())
                             .documents(bulkSendList)
-                            .build()),
+                            .build(),
                         BulkSendResponses.class,
-                        CmmKakaoUtils.getRlaybsnmInfo(tgtDTO.getSignguCode(), tgtDTO.getFfnlgCode())))
+                        getHeadeMap()))
             )
             .collect(Collectors.toList());
 
@@ -865,14 +873,16 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
         List> apiResults = partitions.stream()
             .map(uuids ->
                     ApiResponseDTO.success(
-                        apiWebClient.exchangeKko(
+                        apiWebClient.exchange(
                             url.toString(),
                             HttpMethod.POST,
-                            JsonUtils.toJson(BulkStatusRequests.builder()
+                            BulkStatusRequests.builder()
+                                .signguCode(reqDTO.getSignguCode())
+                                .ffnlgCode(reqDTO.getFfnlgCode())
                                 .document_binder_uuids(uuids)
-                                .build()),
+                                .build(),
                             BulkStatusResponses.class,
-                            CmmKakaoUtils.getRlaybsnmInfo(reqDTO.getSignguCode(), reqDTO.getFfnlgCode())))
+                            getHeadeMap()))
             ).collect(Collectors.toList());
 
 
@@ -968,4 +978,10 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
     }
 
 
+    private Map getHeadeMap(){
+        Map map = new HashMap<>();
+        map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
+        //map.put(HttpHeaders.AUTHORIZATION, "");
+        return map;
+    }
 }
diff --git a/mens-core/src/main/java/kr/xit/biz/ens/model/epost/EPostDTO.java b/mens-core/src/main/java/kr/xit/biz/ens/model/epost/EPostDTO.java
new file mode 100644
index 0000000..89664f7
--- /dev/null
+++ b/mens-core/src/main/java/kr/xit/biz/ens/model/epost/EPostDTO.java
@@ -0,0 +1,743 @@
+package kr.xit.biz.ens.model.epost;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
+import javax.validation.constraints.Size;
+import kr.xit.biz.ens.model.cmm.CmmEnsRequestDTO;
+import kr.xit.biz.ens.model.pplus.PplusDTO.PpAcceptRequest;
+import kr.xit.biz.ens.model.pplus.PplusDTO.PpCommonResponse;
+import kr.xit.core.model.IApiResponse;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.validator.constraints.NotEmpty;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 
+ * description : EPost DTO
+ *               - 우편제작 접수 요청
+ *                 Request : {@link PpAcceptRequest}
+ *                 Response : {@link PpCommonResponse}
+ *               - 우편제작 상태 조회
+ *                 Request : {@link PpStatusRequest}
+ *                 Response : {@link PpStatusResponse}
+ * packageName : kr.xit.biz.ens.model.epost
+ * fileName    : EPostDTO
+ * author      : limju
+ * date        : 2023-10-04
+ * ======================================================================
+ * 변경일         변경자        변경 내용
+ * ----------------------------------------------------------------------
+ * 2023-10-04    limju       최초 생성
+ *
+ * 
+ */ +public class EPostDTO { + /** + *
+     * Postplus 우편제작 접수 요청 DTO
+     * Request: PpAcceptRequest
+     * Response: PpCommonResponse
+     * 
+ */ + @Schema(name = "EpostTraceRequest", description = "EPost 종적추적 요청 DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class EpostTraceRequest extends CmmEnsRequestDTO { + + /** + *
+         * 공공데이터포털에서 발급받은 인증키(URL Encode)
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "인증키", example = " ") + @Size(min = 30, max = 100, message = "apiKey는 필수 입니다.") + private String serviceKey; + + /** + *
+         * 등기번호 - 13자리
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "등기번호", example = " ") + @Size(min = 13, max = 13, message = "등기번호는 필수 입니다(13자리)") + private MultipartFile rgist; + } + + /** + *
+     * Postplus 우편제작 접수 요청 결과 DTO
+     * 성공 : 결과 - "OK"
+     * 
+ */ + @Schema(name = "EpostTraceResponse", description = "EPost 종적추적 요청 결과 DTO") + @Getter + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class EpostTraceResponse implements IApiResponse { + + /** + *
+         * API 요청 등기 번호 : 필수 - 13자리
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "등기번호") + private String requestRegiNo; + + /** + *
+         * 응답시간 : 필수 - 20 자리
+         * yyyy-mm-dd HH:mi:ss
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "응답시간") + private String responseTime; + + /** + *
+         * 성공여부 : 필수 - Y|N
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "성공여부") + private String successYN; + + /** + *
+         * 등기번호 : 필수 - 13자리
+         * 조회된 등기번호
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "등기번호") + private String regiNo; + + /** + *
+         * 보낸 사람 : 필수 - max 50
+         * 발신인 명
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "보낸 사람") + private String senderName; + + /** + *
+         * 보낸 날자 : 필수 - 10자리
+         * 발신일자 yyyy-mm-dd
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "보낸 날자") + private String senderData; + + /** + *
+         * 받는 사람 : 필수 - max 50
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "받는 사람") + private String receiveName; + + /** + *
+         * 받은 날자 : 필수 - 10자리
+         * 수신일자 yyyy-mm-dd
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "받은 날자") + private String receiveDate; + + /** + *
+         * 배달상태: 필수 - max 10
+         * 배달완로|미배달
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "배달 상태") + private String trackState; + + /** + *
+         * 정렬순서 : 필수 - 1자리
+         * 배송 진행 사항에 대한 정렬 순서
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "정렬 순서") + private String sortNo; + + /** + *
+         * 처리일 : 필수 - 10자리
+         * 배송진행 처리일 yyyy-mm-dd
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "처리일") + private String date; + + /** + *
+         * 처리시간 : 필수 - 5자리
+         * 배송진행 처리시간 mi:ss
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "처리 시간") + private String time; + + /** + *
+         * 처리상태 : 필수 - max 10
+         * 배송진행 처리상태 접수
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "처리 상태") + private String status; + + + /** + *
+         * 에러메세지 : max 100
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "에러메세지") + private String errorMessage; + } + + /** + *
+     * Postplus 우편제작 접수 요청 Data Master DTO
+     * 
+ */ + @Schema(name = "PpAcceptReqDataMst", description = "Postplus 우편제작 접수 요청 Data master DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class PpAcceptReqDataMst { + //----------------------------------------------------------------------- + // 필수 + //----------------------------------------------------------------------- + /** + *
+         * 버전 : v1.10
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "버전", example = "v1.10") + @NotEmpty(message = "버전은 필수 입니다") + private final String 버전 = "v1.10"; + + /** + *
+         * 테스트여부 : default "N" - 인쇄 직전 단계까지 진행
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "테스트여부", example = "N") + @NotEmpty(message = "테스트여부는 필수 입니다(Y|N)") + private final String 테스트여부 = "N"; + + /** + *
+         * 서비스 : PST - 우편, SMS - 문자, KKO - 카카오톡
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "서비스", example = "PST") + @NotEmpty(message = "서비스 코드는 필수 입니다(PST)") + private final String 서비스 = "PST"; + + /** + *
+         * 연계식별키 : 사용자 지정 unique key
+         * max : 40byte
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "연계식별키", example = " ") + @Size(min = 5, max = 40, message = "연계식별키는 필수입니다(max:40)") + private String 연계식별키; + + /** + *
+         * 봉투 : 소봉투|대봉투|접착시|엽서
+         * 소봉투/대봉투는 A4(210*297) 기준
+         * 접착식이 첨부파일의 경우 주소가 포함되어야 하며 '주소페이지유무' 항목이 'Y여야 합니다.
+         * 접착식이 템플릿의 경우는 data에 주소가 명시되어야 합니다.
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "봉투", example = "소봉투") + @NotEmpty(message = "봉투는 필수입니다(소봉투|대봉투|접착시|엽서)") + private String 봉투; + + /** + *
+         * 봉투창 : 이중창|단창|무창
+         * 소봉투(이중창,무창) 대봉투(단창,무창) 접착식(공백), 엽서(공백)
+         * 무창은 사전협의가 필요합니다.
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "봉투창", example = "이중창") + @NotEmpty(message = "봉투창은 필수입니다(이중창|단창|무창)") + private String 봉투창; + + /** + *
+         * 흑백칼라 : 흑백|칼라
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "흑백칼라", example = "흑백") + @NotEmpty(message = "흑백칼라는 필수입니다(흑백|칼라)") + private String 흑백칼라; + + /** + *
+         * 단면양면 : 단면|양면
+         * 접착식 경우 페이지수가 2매인 경우는 양면인쇄 됩니다.
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "단면양면", example = "단면") + @NotEmpty(message = "단면양면은 필수입니다(단면|양면)") + private String 단면양면; + + /** + *
+         * 배달 : 일반|등기|준등기|악일특급|선택등기
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "배달", example = "일반") + @NotEmpty(message = "배달은 필수입니다(일반|등기|준등기|악일특급|선택등기)") + private String 배달; + + /** + *
+         * 템플릿출력여부 : 템플릿코드 존재시 Y
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "템플릿코드", example = "N") + @NotEmpty(message = "템플릿출력여부는 필수입니다(Y|N)") + private final String 템플릿출력여부 = StringUtils.isEmpty(this.템플릿코드) ? "N" : "Y"; + + /** + *
+         * 여백생성유무
+         * Y: 첨부파일 내용문을 자동으로 축소
+         * 소봉투는 봉입 바코드 추가위해 왼쪽 여백 필요
+         * 프린터기를 이용하여 출력하므로 상하좌우의 margin이 필요
+         *  - 대봉투의 경우 상 8mm, 하좌우 5mm의 margin이 필요
+         *  - 소봉투의 경우 상 8mm, 하우 5mm, 좌 17mm의 margin이 필요
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "여백생성유무", example = "N") + @NotEmpty(message = "여백생성유무는 필수입니다(Y|N)") + private final String 여백생성유무 = "N"; + + /** + *
+         * 주소페이지유무
+         * 주소페이지가 첨부파일에 포함 되어있으면 Y
+         * 주소페이지 생성이 필요하면 N
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "여백생성유무", example = "N") + @NotEmpty(message = "주소페이지유무는 필수입니다(Y|N)") + private final String 주소페이지유무 = "N"; + + /** + *
+         * 맞춤자제유무
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "맞춤자제유무", example = "N") + @NotEmpty(message = "맞춤자제유무는 필수입니다(Y|N)") + private final String 맞춤자제유무 = "N"; + + /** + *
+         * 메일머지유무
+         * Y 일경우 템플릿코드 필수
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "메일머지유무", example = "N") + @NotEmpty(message = "메일머지유무는 필수입니다(Y|N)") + private final String 메일머지유무 = "N"; + + /** + *
+         * 동봉물유무
+         * Y 일경우 템플릿코드 필수
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "동봉물유무", example = "N") + @NotEmpty(message = "동봉물유무는 필수입니다(Y|N)") + private final String 동봉물유무 = "N"; + + /** + *
+         * 반송여부
+         * 반송불필요: N
+         * 반송필요: Y (반송요금 별도 협의후 이용)
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "반송여부유무", example = "N") + @NotEmpty(message = "반송여부는 필수입니다(Y|N)") + //private final String 반송여부 = "N"; + private final String[] 반송여부 = new String[]{"Y", "N"}; + + /** + *
+         * 스테이플러유무
+         * 협의 후 사용 가능합니다.
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "스테이플러유무", example = "N") + @NotEmpty(message = "스테이플러유무는 필수입니다(Y|N)") + private final String 스테이플러유무 = "N"; + + /** + *
+         * 발송인명
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "발송인명", example = "포스토피아") + @NotEmpty(message = "발송인명은 필수입니다") + private String 발송인명; + + /** + *
+         * 발송인우편번호
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "발송인우편번호", example = "05048") + @NotEmpty(message = "발송인우편번호는 필수입니다") + private String 발송인우편번호; + + /** + *
+         * 발송인주소
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "발송인주소", example = "서울특별시 광진구 강변로역2") + @NotEmpty(message = "발송인주소는 필수입니다") + private String 발송인주소; + + /** + *
+         * 발송인상세주소
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "발송인상세주소", example = "구의동, 서울광진우체국") + @NotEmpty(message = "발송인상세주소는 필수입니다") + private String 발송인상세주소; + //----------------------------------------------------------------------- + + /** + *
+         * 템플릿코드 : 고객협의 후 포스토피아에서 템플릿 설정, 발급
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "템플릿코드", example = " ") + private String 템플릿코드; + + /** + *
+         * 수취인수
+         * 미입력시 주소록개수 참조
+         * 입력시 주소록개수와 같을시만 발송
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "수취인수", example = " ") + private Integer 수취인수; + + /** + *
+         * 동봉물페이지수
+         * 동봉물 존재시 동봉물의 페이지수 기재
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "동봉물페이지수", example = " ") + private Integer 동봉물페이지수; + + /** + *
+         * 로고 파일
+         * 미입력시 로고가 없거나 템플릿에 포함되어 있음
+         * 협의 후 사용 가능합니다.
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "로고파일", example = " ") + private String 로고파일; + + /** + *
+         * 발송인전화번호
+         * 준등기/등기/익일특급/선택등기 발송시 필수
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "발송인전화번호", example = "010-XXXX-XXXX") + private String 발송인전화번호; + } + + /** + *
+     * Postplus 우편제작 접수 요청 Data Detail DTO
+     * 
+ */ + @Schema(name = "PpAcceptReqDataDtl", description = "Postplus 우편제작 접수 요청 Data detail DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class PpAcceptReqDataDtl { + //----------------------------------------------------------------------- + // 필수 + //----------------------------------------------------------------------- + /** + *
+         * 순번 : "1" 부터 시작
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "순번", example = "1") + @NotEmpty(message = "순번은 필수입니다") + private String 순번; + + /** + *
+         * 이름 : 수취인명
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "이름", example = "홍길동") + @NotEmpty(message = "이름은 필수입니다") + private String 이름; + + /** + *
+         * 우편번호 : 수취인 우편번호
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "우편번호", example = "05048") + @NotEmpty(message = "우편번호는 필수입니다") + private String 우편번호; + + /** + *
+         * 주소 : 수취인 주소
+         * 상세주소 포함 최대 200자
+         * 상세주소를 포함하지 않는 경우 최대 100자
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "주소", example = "서울특별시 광진구 강변역로2") + @Size(min = 5, max = 200, message = "주소는 필수입니다(max:200)") + private String 주소; + + + //----------------------------------------------------------------------- + /** + *
+         * 상세주소 : 수취인 주소
+         * 주소에 포함된 경우 상세주소는 공백
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "상세주소", example = "서울광진우체국 B동 4층") + private String 상세주소; + + /** + *
+         * 전화번호 : 수취인 전화번호(준등기/등기/익일특급/선택등기 발송시 필수)
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "전화번호", example = " ") + private String 전화번호; + + /** + *
+         * 첨부파일
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "첨부파일", example = " ") + private String 첨부파일; + + /** + *
+         * 이미지갯수 : 수취인별 이미지파일의 개수
+         * 오류시 정상 발송 불가
+         * 여러 파일 첨부시 전체파일을 1개의 ZIP파일로 압축하여 pstFile로 전송
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "이미지갯수", example = " ") + private Integer 이미지갯수; + + /** + *
+         * 이미지1 파일명
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "이미지1", example = " ") + private String 이미지1; + + /** + *
+         * 이미지2 파일명
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "이미지2", example = " ") + private String 이미지2; + + /** + *
+         * 이미지3 파일명
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO, title = "이미지3", example = " ") + private String 이미지3; + + /** + *
+         * 가변 : 최대 200개 까지
+         * 
+ */ + } + + /** + *
+     * Postplus 우편제작 상태 조회 요청 DTO
+     * Request: PpStatusRequest
+     * Response: PpStatusResponse
+     * 
+ */ + @Schema(name = "PpStatusRequest", description = "Postplus 우편제작 상태 조회 요청 DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class PpStatusRequest extends CmmEnsRequestDTO { + + /** + *
+         * apiKey
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "apiKey", example = " ") + @NotEmpty(message = "apiKey는 필수 입니다.") + private String apiKey; + + /** + *
+         * 우편 제작 요청 연계 식별키
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED, title = "우편제작요청연계식별키", example = "TEST20230221_000001") + @NotEmpty(message = "우편 제작 요청 연계 식별키는 필수 입니다.") + private String inputCode; + } + + /** + *
+     * Postplus 우편제작 상태 조회 결과 DTO
+     * 성공 :
+     * 
+ */ + @Schema(name = "PpStatusResponse", description = "Postplus 우편제작 상태 조회 결과 DTO") + @Getter + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class PpStatusResponse extends PpCommonResponse { + //--------------------------------------------------------- + // 필수 + //--------------------------------------------------------- + /** + *
+         * 신청일자 : YYYYMMDD0000
+         * 우편 제작 요청 접수일
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED) + private String 신청일자; + + /** + *
+         * 봉투 : 소봉투|대봉투|접착시|엽서
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED) + private String 봉투; + + /** + *
+         * 배달 : 일반|등기|준등기|악일특급|선택등기
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED) + private String 배달; + + /** + *
+         * 흑백칼라 : 흑백|칼라
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED) + private String 흑백칼라; + + /** + *
+         * 단면양면 : 단면|양면
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED) + private String 단면양면; + + /** + *
+         * 발송건수
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED) + private Integer 발송건수; + + /** + *
+         * 상태: 출력대기|출력|봉입|우체국접수중|제작발송완료|접수취소|확인불가
+         * 확인불가 -> 일반 오류상태 msg
+         * 출력대기 -> 제작 전단계
+         * 출력/봉입/우체국접수중 -> 제작 중
+         * 제작발송완료 -> 제작 후 우체국접수, 후불결제시 과금대상
+         * 접수취소 -> 제작 취소
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED) + private String 상태; + + /** + *
+         * 연계식별키 : 우편 제작 요청 연계 식별키
+         * 
+ */ + @Schema(requiredMode = RequiredMode.REQUIRED) + private String 연계식별키; + //--------------------------------------------------------- + + /** + *
+         * 시작등기번호 : 등기의 경우 표기
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO) + private String 시작등기번호; + + /** + *
+         * 종료등기번호 : 등기의 경우 표기
+         * 
+ */ + @Schema(requiredMode = RequiredMode.AUTO) + private String 종료등기번호; + } +}