diff --git a/src/main/java/cokr/xit/ens/modules/nice/model/NiceDTO.java b/src/main/java/cokr/xit/ens/modules/nice/model/NiceDTO.java index 5582870..e4467a9 100644 --- a/src/main/java/cokr/xit/ens/modules/nice/model/NiceDTO.java +++ b/src/main/java/cokr/xit/ens/modules/nice/model/NiceDTO.java @@ -32,11 +32,11 @@ import lombok.*; */ public class NiceDTO { - @Schema(name = "NiceRequest", description = "NICE CI 전문 DTO") + @Schema(name = "NiceContractQueryRequest", description = "NICE CI 연락처조회 전문 DTO") @Data @NoArgsConstructor @AllArgsConstructor - public static class NiceRequest implements Serializable { + public static class NiceContractQueryRequest implements Serializable { private static final long serialVersionUID = 1L; //---------------------------------------------------------------------------------------------- @@ -255,11 +255,11 @@ public class NiceDTO { } - @Schema(name = "NiceResponse", description = "NICE CI 전문 응답 DTO") + @Schema(name = "NiceContractQueryResponse", description = "NICE CI 연락처조회 전문 응답 DTO") @Data @NoArgsConstructor @AllArgsConstructor - public static class NiceResponse implements Serializable { + public static class NiceContractQueryResponse implements Serializable { private static final long serialVersionUID = 1L; //---------------------------------------------------------------------------------------------- @@ -271,8 +271,6 @@ public class NiceDTO { * 회원사 고유키 - 요청시 필수 max: 9 * */ - @Schema(title = "TR Code", example = " ") - @Size(min = 0, max = 9, message = "트랜잭션 코드는 0~9자리 입니다.") private String trCode; public void setTrCode(String trCode) { this.trCode = StringUtils.trim(trCode); @@ -281,8 +279,6 @@ public class NiceDTO { //---------------------------------------------------------------------------------------------- // 공통부 : 100 자리 //---------------------------------------------------------------------------------------------- - @Schema(requiredMode = Schema.RequiredMode.REQUIRED) - @Valid NiceCommon niceCommon; /** @@ -290,8 +286,6 @@ public class NiceDTO { * 공란 - 16 자리 * */ - @Schema(title = "공란", example = " ") - @Size(min = 16, max = 17, message = "공란(17자리)") private String commonEmptyField; public void setCommonEmptyField(String commonEmptyField) { this.commonEmptyField = StringUtils.trim(commonEmptyField); @@ -309,8 +303,6 @@ public class NiceDTO { * 최대 48 * */ - @Schema(requiredMode = Schema.RequiredMode.REQUIRED, title = "응답 건수", example = " ") - @Max(value = 48, message = "응답 최대건수는 48입니다") private String resCnt; public void setResCnt(String resCnt) { this.resCnt = StringUtils.trim(resCnt); @@ -326,8 +318,6 @@ public class NiceDTO { * 3: 1 ~ 3 순위 연락처중 최우선순위 1개로 발송 * */ - @Schema(requiredMode = Schema.RequiredMode.REQUIRED, title = "SMS발송요청구분코드", example = " ", allowableValues = {"0", "1", "2", "3"}) - @Pattern(regexp = "[0-3]", message = "SMS발송요청구분코드 0 ~ 3 입니다(1자리)") private String smsSndReqCode; public void setSmsSndReq(String smsSndReqCode) { this.smsSndReqCode = StringUtils.trim(smsSndReqCode); @@ -339,8 +329,6 @@ public class NiceDTO { * 발송요청구분(smsSndReqCode)가 1, 2, 3인 경우 필수 * */ - @Schema(title = "SMS 발송메세지", example = " ") - @Pattern(regexp = "^$|[\\s]{10,2000}", message = "SMS발송메세지는 10 ~ 2000자리 입니다") private String sndMessage; public void setSndMessage(String sndMessage) { this.sndMessage = StringUtils.trim(sndMessage); @@ -352,8 +340,6 @@ public class NiceDTO { * 발송요청구분(smsSndReqCode)가 1, 2, 3인 경우 필수 * */ - @Schema(title = "SMS 발신번호", example = " ") - @Pattern(regexp = "^$|[\\d]{3,12}", message = "SMS 발신번호는 3 ~ 12자리 입니다") private String sndPhoneNo; public void setSndPhoneNo(String sndPhoneNo) { this.sndPhoneNo = StringUtils.trim(sndPhoneNo); @@ -368,8 +354,6 @@ public class NiceDTO { * 3: 3순위 이내 조회 * */ - @Schema(requiredMode = Schema.RequiredMode.REQUIRED, title = "연락처조회구분코드", example = " ", allowableValues = {"1", "2", "3"}) - @Pattern(regexp = "[1-3]", message = "연락처조회구분 코드는 1 ~ 3 입니다(1자리)") private String contactSearchCode = "3"; /** @@ -377,8 +361,6 @@ public class NiceDTO { * 공란 - 84 자리 * */ - @Schema(title = "공란", example = " ") - @Size(min = 84, max = 84, message = "공란(84자리)") private String privateEmptyField; public void setPrivateEmptyField(String privateEmptyField) { this.privateEmptyField = StringUtils.trim(privateEmptyField); @@ -395,22 +377,23 @@ public class NiceDTO { // 응답반복부 : 110 자리 //---------------------------------------------------------------------------------------------- - public String ofString() { - StringBuilder sb = new StringBuilder(); - sb.append(trCode); - sb.append(niceCommon.ofString()); - sb.append(commonEmptyField); - sb.append(resCnt); - sb.append(smsSndReqCode); - sb.append(sndMessage); - sb.append(sndPhoneNo); - sb.append(contactSearchCode); - sb.append(privateEmptyField); - sb.append(resResults.stream().map(ResResult::ofString).collect(Collectors.joining())); - return sb.toString(); - } - - public NiceResponse parse(String tgtStr) { + // public String ofString() { + // StringBuilder sb = new StringBuilder(); + // sb.append(trCode); + // sb.append(niceCommon.ofString()); + // sb.append(commonEmptyField); + // sb.append(resCnt); + // sb.append(smsSndReqCode); + // sb.append(sndMessage); + // sb.append(sndPhoneNo); + // sb.append(contactSearchCode); + // sb.append(privateEmptyField); + // sb.append(resResults.stream().map(ResResult::ofString).collect(Collectors.joining())); + // return sb.toString(); + // } + + public NiceContractQueryResponse parse(String tgtStr) { + final int repeatLength = 110; final int[] parseLength = { 9, // tr-code 83, // 공통부 @@ -426,7 +409,7 @@ public class NiceDTO { String tgtString = new String(tgtStr.getBytes(), StandardCharsets.UTF_8); if (StringUtils.isNotBlank(tgtString) && tgtString.length() >= 2319) { - NiceResponse nr = new NiceResponse(); + NiceContractQueryResponse nr = new NiceContractQueryResponse(); int idx = 0; nr.setTrCode(StringUtils.left(tgtString, parseLength[idx])); tgtString = tgtString.substring(parseLength[idx++]); @@ -455,12 +438,350 @@ public class NiceDTO { nr.setPrivateEmptyField(StringUtils.left(tgtString, parseLength[idx])); tgtString = tgtString.substring(parseLength[idx]); - if(tgtString.length() % 110 == 0){ - int repeat = tgtString.length() / 110; + if(tgtString.length() % repeatLength == 0){ + int repeat = tgtString.length() / repeatLength; + String finalTgtString = tgtString; + List resResults = IntStream.range(0, repeat) + .mapToObj(i -> { + String currentString = finalTgtString.substring(i * repeatLength, (i + 1) * repeatLength); + return ResResult.parse(currentString); + }) + .collect(Collectors.toList()); + nr.setResResults(resResults); + } + return nr; + } + return null; + } + } + + @Schema(name = "NiceContractHistoryQueryRequest", description = "NICE CI 연락처 이력 조회 전문 DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class NiceContractHistoryQueryRequest implements Serializable { + private static final long serialVersionUID = 1L; + + //---------------------------------------------------------------------------------------------- + // TR-CODE : 0 ~ 9 자리 + //---------------------------------------------------------------------------------------------- + /** + *
+         * TR-CODE
+         * 회원사 고유키 - 요청시 필수 max: 9
+         * 
+ */ + @Schema(requiredMode = Schema.RequiredMode.REQUIRED, title = "TR Code", example = " ") + @Size(min = 0, max = 9, message = "트랜잭션 코드는 0~9자리 입니다.") + private String trCode = StringUtils.rightPad(StringUtils.EMPTY, 9, StringUtils.SPACE); + public void setTrCode(String trCode) { + this.trCode = StringUtils.rightPad(nvl(trCode), 9, StringUtils.SPACE); + } + //---------------------------------------------------------------------------------------------- + + //---------------------------------------------------------------------------------------------- + // 공통부 : 100 자리 + //---------------------------------------------------------------------------------------------- + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) + @Valid + NiceCommon niceCommon; + + /** + *
+         * 공란 - 17 자리
+         * 
+ */ + @Schema(title = "공란", example = " ") + @Size(min = 17, max = 17, message = "공란(16자리)") + private String commonEmptyField = StringUtils.rightPad(StringUtils.EMPTY, 17, StringUtils.SPACE); + //---------------------------------------------------------------------------------------------- + // 공통부 : 100 자리 + //---------------------------------------------------------------------------------------------- + + //---------------------------------------------------------------------------------------------- + // 개별요청부 : 100 자리 + //---------------------------------------------------------------------------------------------- + /** + *
+         * 검색기간 from - 20 자리
+         * YYYYMMDDHHMMSS(14)+microSecond(6)
+         * 
+ */ + @Schema(title = "검색기간 from", example = " ") + @Size(min = 20, max = 20, message = "검색기간 from") + private String fromDt = StringUtils.rightPad(StringUtils.EMPTY, 20, StringUtils.SPACE); + public void setFromDt(String fromDt) { + this.fromDt = StringUtils.rightPad(nvl(fromDt), 20, StringUtils.SPACE); + } + + /** + *
+         * 검색기간 to - 20 자리
+         * YYYYMMDDHHMMSS(14)+microSecond(6)
+         * 
+ */ + @Schema(title = "검색기간 to", example = " ") + @Size(min = 20, max = 20, message = "검색기간 to") + private String toDt = StringUtils.rightPad(StringUtils.EMPTY, 20, StringUtils.SPACE); + public void setToDt(String toDt) { + this.toDt = StringUtils.rightPad(nvl(toDt), 20, StringUtils.SPACE); + } + + /** + *
+         * 개인/사업자/법인구분 - 1자리
+         * 1(개인) 고정
+         * 
+ */ + @Schema(title = "개인/사업자/법인구분", example = "1") + @Size(min = 1, max = 1, message = "개인/사업자/법인구분은 1자리 입니다.") + private String idDiv = "1"; + + /** + *
+         * 주민번호 - 13자리
+         * 
+ */ + @Schema(title = "주민번호", example = " ") + @Size(min = 13, max = 13, message = "주민번호는 13자리 입니다.") + private String jumin = StringUtils.rightPad(StringUtils.EMPTY, 13, StringUtils.SPACE); + public void setJumin(String jumin) { + this.jumin = StringUtils.rightPad(nvl(jumin), 13, StringUtils.SPACE); + } + + /** + *
+         * 결과구분코드 - 2자리
+         * "  " - 전체조회
+         * 00 -	정상(SMS미발송시 조회정상, SMS발송시 발송정상)
+         * 01 - 연락처조회 실패건(주민번호오류/데이터없음/기타오류 건)
+         * 10 - 진행중(연락처조회 정상건 중 SMS발송 이전)
+         * 
+ */ + @Schema(title = "결과구분코드", example = " ", allowableValues = {" ", "00", "01", "10"}) + @Size(min = 2, max = 2, message = "결과구분코드는 2자리 입니다.") + private String rsltDivCode = " "; + public void setRsltDivCode(String rsltDivCode) { + this.rsltDivCode = StringUtils.rightPad(nvl(rsltDivCode), 2, StringUtils.SPACE); + } + + /** + *
+         * SMS발송요청구분 - 1자리
+         * 0 : 미요청,
+         * 1: 1순위연락처로 발송,
+         * 2: 1 ~ 2 순위중 최우선 순위로 1개 발송
+         * 3: 1 ~ 3 순위중 최우선 순위로 1개 발송
+         * 4: 1{1순위로 요청건}  + 2{1~2순위로 요청건} + 3{1~3 순위로 요청건}
+         * 
+ */ + @Schema(title = "SMS발송요청구분", example = " ", allowableValues = {"0", "1", "2", "3", "4"}) + @Size(min = 1, max = 1, message = "SMS발송요청구분은 1자리 입니다.") + private String smsSndReqCode = "0"; + + /** + *
+         * 요청건수 - 10자리
+         * 한 트랜잭션에서 받고자 한는 건 수 : 최대 100건
+         * 
+ */ + @Schema(title = "요청건수", example = " ") + @Max(value = 100, message = "요청건수는 최대 10자리 입니다.") + private String reqCnt = StringUtils.rightPad(StringUtils.EMPTY, 9, StringUtils.SPACE); + public void setReqCnt(String reqCnt){ + this.reqCnt = StringUtils.rightPad(nvl(reqCnt), 13, StringUtils.SPACE); + } + + /** + *
+         * 누적수신건수 - 10자리
+         * 최초조회시 "0000000000"
+         * 
+ */ + @Schema(title = "누적수신건수", example = " ") + @Max(value = 100, message = "누적수신건수는 최대 10자리 입니다.") + private String accRecvCnt = "0000000000"; + public void setAccRecvCnt(String accRecvCnt) { + this.accRecvCnt = StringUtils.rightPad(nvl(accRecvCnt), 10, StringUtils.SPACE); + } + + /** + *
+         * 공란 - 880
+         * 
+ */ + @Schema(title = "공란", example = " ") + @Size(min = 23, max = 23, message = "공란(23자리)") + private String privateEmptyField = StringUtils.rightPad(StringUtils.EMPTY, 23, StringUtils.SPACE); + //---------------------------------------------------------------------------------------------- + // 개별요청부 : 3000 자리 + //---------------------------------------------------------------------------------------------- + + public String ofString() { + StringBuilder sb = new StringBuilder(); + sb.append(trCode); + // 공통부 + sb.append(niceCommon.ofString()); + sb.append(commonEmptyField); + + // 개별요청부 + sb.append(fromDt); + sb.append(toDt); + sb.append(idDiv); + sb.append(jumin); + sb.append(rsltDivCode); + sb.append(smsSndReqCode); + sb.append(reqCnt); + sb.append(accRecvCnt); + sb.append(privateEmptyField); + + // FIXME: 인코딩확인후 적용 + return new String(sb.toString().getBytes(), StandardCharsets.UTF_8); + } + } + + @Schema(name = "NiceContractHistoryQueryResponse", description = "NICE CI 연락처 이력 조회 전문 응답 DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class NiceContractHistoryQueryResponse implements Serializable { + private static final long serialVersionUID = 1L; + + //---------------------------------------------------------------------------------------------- + // TR-CODE : 0 ~ 9 자리 + //---------------------------------------------------------------------------------------------- + /** + *
+         * TR-CODE
+         * 회원사 고유키 - 요청시 필수 max: 9
+         * 
+ */ + private String trCode; + public void setTrCode(String trCode) { + this.trCode = StringUtils.trim(trCode); + } + + //---------------------------------------------------------------------------------------------- + // 공통부 : 100 자리 + //---------------------------------------------------------------------------------------------- + NiceCommon niceCommon; + + /** + *
+         * 공란 - 16 자리
+         * 
+ */ + private String commonEmptyField; + public void setCommonEmptyField(String commonEmptyField) { + this.commonEmptyField = StringUtils.trim(commonEmptyField); + } + //---------------------------------------------------------------------------------------------- + // 공통부 : 100 자리 + //---------------------------------------------------------------------------------------------- + + //---------------------------------------------------------------------------------------------- + // 개별응답부 : 30 자리 + //---------------------------------------------------------------------------------------------- + /** + *
+         * 총건수: 10자리
+         * 
+ */ + private String totalCnt; + public void setTotalCnt(String totalCnt) { + this.totalCnt = StringUtils.trim(totalCnt); + } + + /** + *
+         * 누적건수: 10자리
+         * 
+ */ + private String accCnt; + public void setAccCnt(String accCnt) { + this.accCnt = StringUtils.trim(accCnt); + } + + /** + *
+         * 응답건수: 10자리
+         * 최대 100건
+         * 
+ */ + private String resCnt; + public void setResCnt(String resCnt) { + this.resCnt = StringUtils.trim(resCnt); + } + //---------------------------------------------------------------------------------------------- + // 개별응답부 : 30 자리 + //---------------------------------------------------------------------------------------------- + + //---------------------------------------------------------------------------------------------- + // 응답반복부 : 1150 자리 + //---------------------------------------------------------------------------------------------- + List resResults = new ArrayList<>(); + //---------------------------------------------------------------------------------------------- + // 응답반복부 : 1150 자리 + //---------------------------------------------------------------------------------------------- + + // public String ofString() { + // StringBuilder sb = new StringBuilder(); + // sb.append(trCode); + // sb.append(niceCommon.ofString()); + // sb.append(commonEmptyField); + // sb.append(resCnt); + // sb.append(smsSndReqCode); + // sb.append(sndMessage); + // sb.append(sndPhoneNo); + // sb.append(contactSearchCode); + // sb.append(privateEmptyField); + // sb.append(resResults.stream().map(ResResult::ofString).collect(Collectors.joining())); + // return sb.toString(); + // } + + public NiceContractHistoryQueryResponse parse(String tgtStr) { + final int repeatLength = 1150; + final int[] parseLength = { + 9, // tr-code + 83, // 공통부 + 17, // 공란 + 10, // 총건수 + 10, // 누적건수 + 10, // 응답건수 + }; + // FIXME: 인코딩확인후 적용 + String tgtString = new String(tgtStr.getBytes(), StandardCharsets.UTF_8); + + if (StringUtils.isNotBlank(tgtString) && tgtString.length() >= 1289) { + NiceContractHistoryQueryResponse nr = new NiceContractHistoryQueryResponse(); + int idx = 0; + nr.setTrCode(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + nr.setNiceCommon(NiceCommon.parse(tgtString)); + tgtString = tgtString.substring(parseLength[idx++]); + + nr.setCommonEmptyField(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + nr.setResCnt(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + nr.setTotalCnt(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + nr.setAccCnt(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + nr.setResCnt(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + if(tgtString.length() % repeatLength == 0){ + int repeat = tgtString.length() / repeatLength; String finalTgtString = tgtString; List resResults = IntStream.range(0, repeat) .mapToObj(i -> { - String currentString = finalTgtString.substring(i * 110, (i + 1) * 110); + String currentString = finalTgtString.substring(i * repeatLength, (i + 1) * repeatLength); return ResResult.parse(currentString); }) .collect(Collectors.toList()); @@ -472,6 +793,7 @@ public class NiceDTO { } } + @Schema(name = "QueryRequest", description = "NICE CI 조회 요청 DTO") @Data @NoArgsConstructor @@ -598,15 +920,29 @@ public class NiceDTO { @NoArgsConstructor @AllArgsConstructor public static class ResResult { + //------------------------------------------------------------------------------------ + // 연락처 이력 조회시만 + //------------------------------------------------------------------------------------ + /** + *
+         * 연락처 이력 조회시 사용 - 조회일시 - 20 자리
+         * YYYYMMDDHHMMSS(14)+microSecond(6)
+         * 
+ */ + private String queryDt; + public void setQueryDt(String queryDt) { + this.queryDt = StringUtils.trim(queryDt); + } + //------------------------------------------------------------------------------------ + // 연락처 이력 조회시만 + //------------------------------------------------------------------------------------ + /** *
          * 개인/사업자/법인구분 - 1자리
          * 1(개인) 고정
          * 
*/ - @Schema(title = "개인/사업자/법인구분", example = "1") - @Size(min = 1, max = 1, message = "개인/사업자/법인구분은 1자리 입니다.") - @Setter private String idDiv = "1"; /** @@ -614,8 +950,6 @@ public class NiceDTO { * 주민번호 - 13자리 * */ - @Schema(title = "주민번호", example = " ") - @Size(min = 13, max = 13, message = "주민번호는 13자리 입니다.") private String jumin; public void setJumin(String jumin) { this.jumin = StringUtils.trim(jumin); @@ -626,8 +960,6 @@ public class NiceDTO { * 이름 - 20자리 * */ - @Schema(title = "이름", example = " ") - @Size(min = 20, max = 20, message = "이름은 20자리 입니다.") private String name; public void setName(String name) { this.name = StringUtils.trim(name); @@ -638,8 +970,6 @@ public class NiceDTO { * 1순위연락처 - 11자리 * */ - @Schema(title = "1순위연락처", example = " ") - @Size(min = 11, max = 11, message = "1순위연락처는 11자리 입니다.") private String contractOf1st; public void setContractOf1st(String contractOf1st) { this.contractOf1st = StringUtils.trim(contractOf1st); @@ -650,8 +980,6 @@ public class NiceDTO { * 2순위연락처 - 11자리 * */ - @Schema(title = "2순위연락처", example = " ") - @Size(min = 11, max = 11, message = "2순위연락처는 11자리 입니다.") private String contractOf2nd; public void setContractOf2nd(String contractOf2nd) { this.contractOf2nd = StringUtils.trim(contractOf2nd); @@ -662,8 +990,6 @@ public class NiceDTO { * 3순위연락처 - 11자리 * */ - @Schema(title = "3순위연락처", example = " ") - @Size(min = 11, max = 11, message = "3순위연락처는 11자리 입니다.") private String contractOf3rd; public void setContractOf3rd(String contractOf3rd) { this.contractOf3rd = StringUtils.trim(contractOf3rd); @@ -679,13 +1005,52 @@ public class NiceDTO { * 99 기타오류 * */ - @Schema(title = "결과구분코드", example = " ", allowableValues = {"00", "01", "02", "10", "99"}) - @Size(min = 2, max = 2, message = "결과구분코드는 2자리 입니다.") private String rsltDivCode; public void setRsltDivCode(String rsltDivCode) { this.rsltDivCode = StringUtils.trim(rsltDivCode); } + //------------------------------------------------------------------------------------ + // 연락처 이력 조회시만 + //------------------------------------------------------------------------------------ + /** + *
+         * 연락처 이력 조회시 사용 - SMS발송요청구분코드: 필수 1자리
+         * 1 ~ 3 : 발송
+         * 0 : 미요청,
+         * 4: 연락처 죄회 없이 발송요청 (31894전문)
+         * 
+ */ + private String smsSndReqCode; + public void setSmsSndReq(String smsSndReqCode) { + this.smsSndReqCode = StringUtils.trim(smsSndReqCode); + } + + /** + *
+         * 연락처 이력 조회시 사용 - 발송메세지: 10 ~ 2000자리
+         * 발송요청구분(smsSndReqCode)가 1, 2, 3인 경우 필수
+         * 
+ */ + private String sndMessage; + public void setSndMessage(String sndMessage) { + this.sndMessage = StringUtils.trim(sndMessage); + } + + /** + *
+         * 연락처 이력 조회시 사용 - 발신번호: 12자리
+         * 발송요청구분(smsSndReqCode)가 1, 2, 3인 경우 필수
+         * 
+ */ + private String sndPhoneNo; + public void setSndPhoneNo(String sndPhoneNo) { + this.sndPhoneNo = StringUtils.trim(sndPhoneNo); + } + //------------------------------------------------------------------------------------ + // 연락처 이력 조회시만 + //------------------------------------------------------------------------------------ + /** *
          * SMS발송연락처순위 - 1자리
@@ -695,8 +1060,6 @@ public class NiceDTO {
          * 3: 3 순위 연락처로 발송
          * 
*/ - @Schema(title = "SMS발송연락처순위", example = " ", allowableValues = {"0", "1", "2", "3"}) - @Size(min = 1, max = 1, message = "SMS발송연락처순위는 1자리 입니다.") private String smsSndContractOrder = "1"; /** @@ -704,8 +1067,6 @@ public class NiceDTO { * SMS발송연락처번호 - 11자리 * */ - @Schema(title = "SMS발송연락처번호", example = " ") - @Size(min = 11, max = 11, message = "SMS발송연락처번호는 11자리 입니다.") private String smsSndContractNo; public void setSmsSndContractNo(String smsSndContractNo) { this.smsSndContractNo = StringUtils.trim(smsSndContractNo); @@ -716,42 +1077,75 @@ public class NiceDTO { * SMS발송예정일시 - 14자리 * */ - @Schema(title = "SMS발송예정일시", example = " ") - @Size(min = 14, max = 14, message = "SMS발송예정일시는 14자리 입니다.") private String smsSndWillDt; public void setSmsSndWillDt(String smsSndWillDt) { this.smsSndWillDt = StringUtils.trim(smsSndWillDt); } + //------------------------------------------------------------------------------------ + // 연락처 이력 조회시만 + //------------------------------------------------------------------------------------ /** *
-         * 공란 - 15
+         * 연락처 이력 조회시 사용 - 처리자ID : 9 자리
+         * 
+ */ + private String procId; + public void setProcId(String procId) { + this.procId = StringUtils.trim(procId); + } + + /** + *
+         * 연락처 이력 조회시 사용 - 연락처조회구분: 1자리
+         * default: 3
+         * 1: 1순위만 조회,
+         * 2: 2순위 이내 조회
+         * 3: 3순위 이내 조회
+         * 
+ */ + private String contactSearchCode = "3"; + + /** + *
+         * 연락처 이력 조회시 사용 - 메세지발송결과구분 : 1 자리
+         * 0(미발송), 1(알림톡 발송), 2(SMS/LMS발송)
+         * 진행중 건, 오류로 인한 미발송 건의 경우에도 0 제공
+         * 
+ */ + private String msgSndRsltDivCode; + //------------------------------------------------------------------------------------ + // 연락처 이력 조회시만 + //------------------------------------------------------------------------------------ + + /** + *
+         * 공란 - 15, 이력조회시는 11 자리
          * 
*/ - @Schema(title = "공란", example = " ") - @Size(min = 15, max = 15, message = "공란(36자리)") private String emptyField; public void setEmptyField(String emptyField) { this.emptyField = StringUtils.trim(emptyField); } - public String ofString() { - StringBuilder sb = new StringBuilder(); - sb.append(idDiv); - sb.append(jumin); - sb.append(name); - sb.append(contractOf1st); - sb.append(contractOf2nd); - sb.append(contractOf3rd); - sb.append(rsltDivCode); - sb.append(smsSndContractOrder); - sb.append(smsSndContractNo); - sb.append(smsSndWillDt); - sb.append(emptyField); - return sb.toString(); - } + // public String ofString() { + // StringBuilder sb = new StringBuilder(); + // sb.append(idDiv); + // sb.append(jumin); + // sb.append(name); + // sb.append(contractOf1st); + // sb.append(contractOf2nd); + // sb.append(contractOf3rd); + // sb.append(rsltDivCode); + // sb.append(smsSndContractOrder); + // sb.append(smsSndContractNo); + // sb.append(smsSndWillDt); + // sb.append(emptyField); + // return sb.toString(); + // } public static ResResult parse(String tgtString) { + // 110 자리 final int[] parseLength = { 1, // 개인.사업자.법인구분 13, // 주민번호 @@ -805,6 +1199,92 @@ public class NiceDTO { } return null; } + + public static ResResult parseHistory(String tgtString) { + // 1150 + final int[] parseLength = { + 20, // 조회일시 - 이력조회시만 사용 + 1, // 개인.사업자.법인구분 + 13, // 주민번호 + 20, // 성명 + 11, // 1순위 연락처 + 11, // 2순위 연락처 + 11, // 3순위 연락처 + 2, // 결과구분 + 1, // SMS발송 요청 구분 - 이력조회시만 사용 + 1000, // 발송메세지 - 이력조회시만 사용 + 12, // 발신번호 - 이력조회시만 사용 + 1, // SMS발송 연락처 순위 + 11, // SMS발송 연락처 번호 + 14, // SMS발송(예정)일시 + 9, // 처리자ID - 이력조회시만 사용 + 1, // 연락처 조회 구분 - 이력조회시만 사용 + 1, // 메세지발송결과 구붑 + 11, // 공란 + }; + + if (StringUtils.isNotBlank(tgtString) && tgtString.length()%1150 == 0) { + ResResult rr = new ResResult(); + int idx = 0; + + // 이력조회시만 사용 //////////////////////////////////////////////////////// + rr.setQueryDt(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + // 이력조회시만 사용 //////////////////////////////////////////////////////// + + rr.setIdDiv(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + rr.setJumin(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + rr.setName(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + rr.setContractOf1st(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + rr.setContractOf2nd(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + rr.setContractOf3rd(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + rr.setRsltDivCode(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + // 이력조회시만 사용 //////////////////////////////////////////////////////// + rr.setSmsSndReqCode(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + rr.setSndMessage(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + rr.setSmsSndContractNo(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + // 이력조회시만 사용 //////////////////////////////////////////////////////// + + rr.setSmsSndContractOrder(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + rr.setSmsSndContractNo(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + rr.setSmsSndWillDt(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + + // 이력조회시만 사용 //////////////////////////////////////////////////////// + rr.setProcId(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + rr.setContactSearchCode(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + rr.setRsltDivCode(StringUtils.left(tgtString, parseLength[idx])); + tgtString = tgtString.substring(parseLength[idx++]); + // 이력조회시만 사용 //////////////////////////////////////////////////////// + + rr.setEmptyField(StringUtils.left(tgtString, parseLength[idx])); + return rr; + } + return null; + } } @Schema(name = "NiceCommon", description = "NICE CI 전문 공통 DTO") @@ -1041,7 +1521,7 @@ public class NiceDTO { } public static void main(String[] args) { - NiceRequest nr = new NiceRequest(); + NiceContractQueryRequest nr = new NiceContractQueryRequest(); nr.setTrCode("aa"); // // 공통부 // @@ -1079,7 +1559,7 @@ public class NiceDTO { System.out.println(String.format("[%s] %d", fullText, fullText.length())); - NiceResponse res = new NiceResponse(); + NiceContractQueryResponse res = new NiceContractQueryResponse(); String resStr = "trCode " + // NiceCommon "NICEIF 020031895B503rsltorgId orgMngNo orgSndDt niceMngNo niceSndDt" + @@ -1089,7 +1569,7 @@ public class NiceDTO { // 응답반복부 "18401011449211name2 001 "+ "19412341234567이름2 1 "; - NiceResponse niceResponse = res.parse(resStr); + NiceContractQueryResponse niceResponse = res.parse(resStr); System.out.println(niceResponse); } }