Compare commits
178 Commits
5361_알림톡_환
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a3867558e | ||
|
|
89aa2f99ab | ||
|
|
3341a8ce51 | ||
|
|
5da092f832 | ||
|
|
d9ee601c42 | ||
|
|
4fdb8c7811 | ||
|
|
60af9f69dc | ||
|
|
dc441de569 | ||
|
|
b1a75f98ec | ||
|
|
9ee68ddb1b | ||
|
|
d95ee87570 | ||
|
|
e0ac062274 | ||
|
|
f1f610d0e8 | ||
|
|
dfa0306189 | ||
|
|
11c9136f56 | ||
|
|
61ff9702bf | ||
|
|
01163c21df | ||
|
|
7663b6f082 | ||
|
|
3f68d808b4 | ||
|
|
419c13528c | ||
|
|
324767d86d | ||
|
|
aee4527d18 | ||
|
|
c4107dd459 | ||
|
|
5242047745 | ||
| fd7112cef8 | |||
|
|
62e6fe53d8 | ||
|
|
e48922754c | ||
|
|
7e06e08294 | ||
| 708aca25bc | |||
|
|
21e0d52168 | ||
|
|
321bb9adeb | ||
|
|
523522cdd9 | ||
|
|
9764781c22 | ||
|
|
31df8725ef | ||
|
|
ef7d42b187 | ||
|
|
d41c503de7 | ||
| c1d1913882 | |||
| 12eaff7979 | |||
|
|
f1d93cfa14 | ||
|
|
f2e5c4c608 | ||
|
|
f9b34066d4 | ||
|
|
be056b1b9e | ||
| d5425fc8de | |||
| 83a5d12869 | |||
| 4d04091eb7 | |||
|
|
0b384934e5 | ||
| 0377e75ebf | |||
| 96583304ec | |||
|
|
9f14958357 | ||
|
|
8edded03fb | ||
| ac0a3fb907 | |||
|
|
5d6934e311 | ||
|
|
2854de838a | ||
|
|
d201592372 | ||
| 94c13d02ea | |||
| bfe5f333f9 | |||
| f4ae2dcf53 | |||
| 6f822ffa67 | |||
| 6460d95b8c | |||
| fff68682bd | |||
|
|
07088040fb | ||
|
|
db7ba618d2 | ||
|
|
f4c137a8c7 | ||
|
|
715ec569d1 | ||
|
|
b7dc7f29ae | ||
|
|
c1defb3498 | ||
|
|
add6ea80b1 | ||
|
|
054ee00b6d | ||
| c664e67c59 | |||
|
|
3a68edcd1b | ||
|
|
4a68901454 | ||
|
|
c2f09e6304 | ||
|
|
b3d0419100 | ||
| 3dc2bb67d9 | |||
|
|
64818ff86d | ||
|
|
39f63e611b | ||
| b63aad38d2 | |||
| 7374d2b65d | |||
|
|
03644f7743 | ||
|
|
934bb68f70 | ||
|
|
7af9d5db72 | ||
|
|
5d97616c45 | ||
|
|
efbadbd71c | ||
|
|
fc04270a9c | ||
|
|
74cf3443fd | ||
|
|
64e451db1b | ||
|
|
3da88224f7 | ||
|
|
07d6d01de1 | ||
|
|
587f9593d9 | ||
|
|
9b5d833ca5 | ||
|
|
317271f246 | ||
|
|
715cec51a5 | ||
|
|
3611dc59f0 | ||
|
|
73e5a05114 | ||
|
|
25ed816a97 | ||
|
|
8db8aaf001 | ||
|
|
b647c71763 | ||
|
|
a857fdfd8c | ||
|
|
93cb46a69e | ||
|
|
4dd7d36bda | ||
|
|
3e8a488f39 | ||
|
|
dddb12d677 | ||
|
|
35e7bd1d3a | ||
|
|
bbf5bf2d01 | ||
|
|
846c6cec4a | ||
|
|
314a9421e5 | ||
|
|
a8d0e123d4 | ||
|
|
4656be6275 | ||
|
|
ce5f79fa34 | ||
| 2e9cdec24e | |||
| a53b2e0805 | |||
| d299490086 | |||
| c081e37600 | |||
|
|
fd550ea580 | ||
|
|
04baef51bb | ||
|
|
7aa3476113 | ||
|
|
47b8d7668a | ||
|
|
b7a05daf5b | ||
|
|
cfbf2cc88e | ||
|
|
9bb130f3df | ||
|
|
04aefabdee | ||
|
|
591dfcbf52 | ||
|
|
252c6655f7 | ||
|
|
7e5f744d23 | ||
|
|
5966ff97f0 | ||
|
|
b89f6af826 | ||
|
|
262f7730a2 | ||
|
|
4480ad4c27 | ||
|
|
786ddecd14 | ||
|
|
95707e8965 | ||
|
|
ebeddf452a | ||
|
|
b8f2aeadb2 | ||
|
|
8425bb72c1 | ||
|
|
0d88276068 | ||
|
|
cca291675a | ||
|
|
846780c8c3 | ||
|
|
1ef82c5f3d | ||
|
|
410f14dc5e | ||
|
|
60dbb225ea | ||
|
|
bfb43ce10c | ||
|
|
824a49b7a0 | ||
|
|
4839033257 | ||
|
|
349f13ece7 | ||
|
|
0dc4539eb2 | ||
|
|
c94d80f736 | ||
|
|
f6802a5c4a | ||
|
|
77fdfe926e | ||
|
|
5a0ef45bf3 | ||
|
|
1e639a393c | ||
|
|
07b737940b | ||
|
|
b059021dfd | ||
|
|
fa55935029 | ||
|
|
643fcfa6b1 | ||
|
|
db9e04c95b | ||
|
|
8721b740a5 | ||
|
|
60602a31bc | ||
|
|
f7e96648a8 | ||
|
|
1a3088e5f5 | ||
|
|
179c22e6a8 | ||
|
|
1a5ecf869b | ||
|
|
bc3ded5541 | ||
|
|
7c5b5889c3 | ||
|
|
7bf6c4adea | ||
|
|
2bab96b9a6 | ||
|
|
0ce04cc12f | ||
|
|
379cc8fa43 | ||
|
|
141d8146ce | ||
|
|
c8a27be581 | ||
|
|
8c9d292d56 | ||
|
|
39add051ec | ||
|
|
986fa3b4b9 | ||
|
|
6fc8b8cd09 | ||
|
|
c3c686e918 | ||
|
|
115630d4fb | ||
|
|
fcd1644355 | ||
|
|
1a7d676483 | ||
|
|
0e4377908a | ||
|
|
a45140a60d |
2
.claude/.gitignore
vendored
Normal file
2
.claude/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/settings.local.json
|
||||||
|
/mcp_settings.json
|
||||||
BIN
.claude/etc1.png
Normal file
BIN
.claude/etc1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
BIN
.claude/etc2.png
Normal file
BIN
.claude/etc2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
9
.gitignore
vendored
9
.gitignore
vendored
@ -201,4 +201,13 @@ fabric.properties
|
|||||||
rebel.xml
|
rebel.xml
|
||||||
/mvnw
|
/mvnw
|
||||||
/mvnw.cmd
|
/mvnw.cmd
|
||||||
|
/.gemini
|
||||||
/.gemini.zip
|
/.gemini.zip
|
||||||
|
/CLAUDE.md
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
# Mac OS
|
||||||
|
=======
|
||||||
|
### Mac OS ###
|
||||||
|
>>>>>>> refs/heads/5419_전화번호거짓표시50건이상
|
||||||
|
.DS_Store
|
||||||
11
pom.xml
11
pom.xml
@ -146,7 +146,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>mysql</groupId>
|
<groupId>mysql</groupId>
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
<version>5.1.31</version>
|
<version>5.1.49</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- oracle 10g driver -->
|
<!-- oracle 10g driver -->
|
||||||
@ -477,12 +477,19 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- kmc 본인인증 -->
|
<!-- kmc 본인인증 -->
|
||||||
<dependency>
|
<!-- <dependency>
|
||||||
<groupId>kmc</groupId>
|
<groupId>kmc</groupId>
|
||||||
<artifactId>ICERTSecu_JDK18</artifactId>
|
<artifactId>ICERTSecu_JDK18</artifactId>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<scope>system</scope>
|
<scope>system</scope>
|
||||||
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ICERTSecu_JDK18.jar</systemPath>
|
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ICERTSecu_JDK18.jar</systemPath>
|
||||||
|
</dependency> -->
|
||||||
|
|
||||||
|
<!-- kmc 본인인증 ver 2 암호화 모듈 추가 버전 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>kmc</groupId>
|
||||||
|
<artifactId>ICERTSecu</artifactId>
|
||||||
|
<version>JDK18_v2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -61,6 +61,7 @@ public class IPIgnoreInterceptorHandler extends HandlerInterceptorAdapter{
|
|||||||
v_ret = false;
|
v_ret = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// lettnloginlog 테이블에 insert 패턴 추가 (/web/user/login/usrIdCheckAjax.do)
|
||||||
}else if(request.getRequestURI().indexOf("ListAjax.do")>-1
|
}else if(request.getRequestURI().indexOf("ListAjax.do")>-1
|
||||||
|| request.getRequestURI().indexOf("ViewAjax.do")>-1
|
|| request.getRequestURI().indexOf("ViewAjax.do")>-1
|
||||||
|| request.getRequestURI().indexOf("DataAjax.do")>-1
|
|| request.getRequestURI().indexOf("DataAjax.do")>-1
|
||||||
@ -74,6 +75,7 @@ public class IPIgnoreInterceptorHandler extends HandlerInterceptorAdapter{
|
|||||||
|| request.getRequestURI().indexOf("MapUrl")>-1
|
|| request.getRequestURI().indexOf("MapUrl")>-1
|
||||||
|| request.getRequestURI().indexOf("uss/ion/fms/FmsFileInsertAjax")>-1
|
|| request.getRequestURI().indexOf("uss/ion/fms/FmsFileInsertAjax")>-1
|
||||||
|| request.getRequestURI().indexOf("web/mjon/addr/sendExelFilePhoneNumAjax")>-1
|
|| request.getRequestURI().indexOf("web/mjon/addr/sendExelFilePhoneNumAjax")>-1
|
||||||
|
|| request.getRequestURI().indexOf("/web/user/login/usrIdCheckAjax.do")>-1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -318,4 +318,17 @@ public final class MJUtil {
|
|||||||
return dupliBlockList;
|
return dupliBlockList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 사업자등록번호 대시('-') 추가
|
||||||
|
* 대시 유무 상관없음
|
||||||
|
* 유효성 맞지 않을시 변환안됨.
|
||||||
|
*/
|
||||||
|
public static String bizNoAddDash(String str) {
|
||||||
|
if(str == null) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
String regExp = "(\\d{3})(\\d{2})(\\d{5})$";
|
||||||
|
String chgf = "$1-$2-$3";
|
||||||
|
return str.replaceFirst(regExp, chgf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -229,8 +229,8 @@ public final class MsgSendUtils {
|
|||||||
placeholders.put("[*4*]", MjonMsgSendVO::getRep4);
|
placeholders.put("[*4*]", MjonMsgSendVO::getRep4);
|
||||||
|
|
||||||
boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
||||||
boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 메세지 타입 체크 한번
|
||||||
boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우,
|
||||||
|
|
||||||
String msgKind = mjonMsgVO.getMsgKind();
|
String msgKind = mjonMsgVO.getMsgKind();
|
||||||
String smsTxtTemp = mjonMsgVO.getSmsTxt();
|
String smsTxtTemp = mjonMsgVO.getSmsTxt();
|
||||||
@ -257,13 +257,10 @@ public final class MsgSendUtils {
|
|||||||
for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
|
for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
|
||||||
String placeholder = entry.getKey();
|
String placeholder = entry.getKey();
|
||||||
String value = entry.getValue().apply(sendVO);
|
String value = entry.getValue().apply(sendVO);
|
||||||
// log.info(" + smsTxtTemp [{}]", smsTxtTemp);
|
|
||||||
// log.info(" + placeholder [{}]", placeholder);
|
|
||||||
// log.info(" + value [{}]", value);
|
|
||||||
// log.info(" + smsTxtTemp.contains(placeholder) [{}]", smsTxtTemp.contains(placeholder));
|
|
||||||
if (smsTxt.contains(placeholder)) {
|
if (smsTxt.contains(placeholder)) {
|
||||||
if (StringUtils.isEmpty(value)) {
|
if (StringUtils.isEmpty(value)) {
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
|
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
|
||||||
|
StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.", "STAT_1040");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
smsTxt = smsTxt.replace(placeholder, value);
|
smsTxt = smsTxt.replace(placeholder, value);
|
||||||
@ -293,7 +290,8 @@ public final class MsgSendUtils {
|
|||||||
if (!hasPerformedMsgType) {
|
if (!hasPerformedMsgType) {
|
||||||
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
||||||
if ("INVALID".equals(msgTypeResult)) {
|
if ("INVALID".equals(msgTypeResult)) {
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
||||||
|
StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.", "STAT_1050");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
hasPerformedMsgType = true;
|
hasPerformedMsgType = true;
|
||||||
@ -310,7 +308,8 @@ public final class MsgSendUtils {
|
|||||||
// 메시지 타입 체크는 매번 수행
|
// 메시지 타입 체크는 매번 수행
|
||||||
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
|
||||||
if ("INVALID".equals(msgTypeResult)) {
|
if ("INVALID".equals(msgTypeResult)) {
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
|
||||||
|
StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.", "STAT_1050");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -543,6 +542,7 @@ public final class MsgSendUtils {
|
|||||||
statusResponse.setMessage(msg);
|
statusResponse.setMessage(msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static StatusResponse validateFilesForMessageSending(int fileCount, MjonMsgVO mjonMsgVO) {
|
public static StatusResponse validateFilesForMessageSending(int fileCount, MjonMsgVO mjonMsgVO) {
|
||||||
if (fileCount > 0) {
|
if (fileCount > 0) {
|
||||||
|
|||||||
@ -34,12 +34,11 @@ public class CertPhoneWebController {
|
|||||||
|
|
||||||
@RequestMapping(value = {"/web/cert/log/insertCertLog.do"})
|
@RequestMapping(value = {"/web/cert/log/insertCertLog.do"})
|
||||||
public ResponseEntity<StatusResponse> insertCertLog(HttpServletRequest request) throws Exception {
|
public ResponseEntity<StatusResponse> insertCertLog(HttpServletRequest request) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, certPhoneService.insertCertLog(request), LocalDateTime.now()));
|
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, certPhoneService.insertCertLog(request), LocalDateTime.now()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = {"/web/cert/log/kmcErrorPage.do"})
|
||||||
|
public String kmcErrorPage() throws Exception {
|
||||||
|
return "web/cop/kmc/certResultError";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -53,6 +53,7 @@ public class KakaoSendAdvcVO implements Serializable {
|
|||||||
|
|
||||||
private String adFlag; //친구톡 광고성 정보 사용 유무(Y:사용 , N:미사용)
|
private String adFlag; //친구톡 광고성 정보 사용 유무(Y:사용 , N:미사용)
|
||||||
|
|
||||||
|
private String sendKind; //문자전송 타입(H:홈페이지, A:API)
|
||||||
// =====
|
// =====
|
||||||
// =====
|
// =====
|
||||||
|
|
||||||
@ -66,13 +67,16 @@ public class KakaoSendAdvcVO implements Serializable {
|
|||||||
private String kakaoAtPrice; // 카카오 알림톡 단가
|
private String kakaoAtPrice; // 카카오 알림톡 단가
|
||||||
private String bizJsonName; // 카카오 알림톡 단가
|
private String bizJsonName; // 카카오 알림톡 단가
|
||||||
private String reserveYn; // 카카오 알림톡 단가
|
private String reserveYn; // 카카오 알림톡 단가
|
||||||
private String atDelayYn; // 카카오 알림톡 단가
|
private String atDelayYn; // 지연 문자 발송
|
||||||
private String bizKakaoResendOrgnlTxt; // 카카오 알림톡 단가
|
private String bizKakaoResendOrgnlTxt; // 카카오 알림톡 단가
|
||||||
private String bizKakaoResendType; // 카카오 알림톡 단가
|
private String bizKakaoResendType; // 카카오 알림톡 단가
|
||||||
private String filePath1; // 대체문자 이미지
|
private String filePath1; // 대체문자 이미지
|
||||||
private String fileCnt; // 파일 카운트
|
private String fileCnt; // 파일 카운트
|
||||||
private String bizKakaoImageType; // 파일 카운트
|
private String bizKakaoImageType; // 파일 카운트
|
||||||
|
|
||||||
|
private String spamStatus;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -99,6 +103,7 @@ public class KakaoSendAdvcVO implements Serializable {
|
|||||||
"\n , subMsgType=[" + subMsgType + "]" +
|
"\n , subMsgType=[" + subMsgType + "]" +
|
||||||
"\n , reqDate=[" + reqDate + "]" +
|
"\n , reqDate=[" + reqDate + "]" +
|
||||||
"\n , jsonStr=[" + jsonStr + "]" +
|
"\n , jsonStr=[" + jsonStr + "]" +
|
||||||
|
"\n , sendKind=[" + sendKind + "]" +
|
||||||
"\n , ==== MJ_MSG_DATA INSERT DATA END =======" +
|
"\n , ==== MJ_MSG_DATA INSERT DATA END =======" +
|
||||||
"\n " +
|
"\n " +
|
||||||
"\n , eachPrice=[" + eachPrice + "]" +
|
"\n , eachPrice=[" + eachPrice + "]" +
|
||||||
|
|||||||
@ -40,6 +40,7 @@ import itn.let.mjo.spammsg.web.ComGetSpamStringParser;
|
|||||||
import itn.let.module.base.PriceAndPoint;
|
import itn.let.module.base.PriceAndPoint;
|
||||||
import itn.let.sym.site.service.JoinSettingVO;
|
import itn.let.sym.site.service.JoinSettingVO;
|
||||||
import itn.let.uss.umt.service.MberManageVO;
|
import itn.let.uss.umt.service.MberManageVO;
|
||||||
|
import itn.let.uss.umt.service.UserManageVO;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -111,6 +112,9 @@ public class KakaoSendUtil {
|
|||||||
// log.info(" + templateDetail :: [{}]", templateDetail);
|
// log.info(" + templateDetail :: [{}]", templateDetail);
|
||||||
// templateDetail.getButtonList().forEach(t->log.info(" + ButtonList :: [{}]", t.toString()));
|
// templateDetail.getButtonList().forEach(t->log.info(" + ButtonList :: [{}]", t.toString()));
|
||||||
|
|
||||||
|
// API인지 확인하는 Boolean
|
||||||
|
Boolean isApiData = "A".equals(kakaoVO.getSendKind());
|
||||||
|
|
||||||
Boolean hasContentReplacement = this.replBooleanStrChecker(templateContent);
|
Boolean hasContentReplacement = this.replBooleanStrChecker(templateContent);
|
||||||
Boolean hasTitleReplacement = this.replBooleanStrChecker(templateTitle);
|
Boolean hasTitleReplacement = this.replBooleanStrChecker(templateTitle);
|
||||||
Boolean hasButtonReplacement = this.needsButtonReplacement(templateDetail.getButtonList());
|
Boolean hasButtonReplacement = this.needsButtonReplacement(templateDetail.getButtonList());
|
||||||
@ -131,8 +135,17 @@ public class KakaoSendUtil {
|
|||||||
// 사용자 개인 단가 정보 불러오기
|
// 사용자 개인 단가 정보 불러오기
|
||||||
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
|
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
|
||||||
|
|
||||||
|
kakaoVO.setAtSmishingYn(mberManageVO.getAtSmishingYn());
|
||||||
|
|
||||||
|
float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
|
||||||
|
float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
|
||||||
|
float kakaoAtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice());
|
||||||
|
|
||||||
|
|
||||||
|
String shortPStr = Float.toString(shortPrice);
|
||||||
|
String mmsPStr = Float.toString(longPrice);
|
||||||
|
String kakaoAtPStr = Float.toString(kakaoAtPrice);
|
||||||
|
|
||||||
|
|
||||||
/** @MSGID KEY값 */
|
/** @MSGID KEY값 */
|
||||||
List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getVarListMap().size());
|
List<String> idList = mjonCommon.getNextCustomMsgCId(kakaoVO.getVarListMap().size());
|
||||||
@ -148,6 +161,7 @@ public class KakaoSendUtil {
|
|||||||
int counter = 0;
|
int counter = 0;
|
||||||
/** @Map에 총 갯수가 수신자 갯수와 동일함 */
|
/** @Map에 총 갯수가 수신자 갯수와 동일함 */
|
||||||
List<Map<String, String>> varList = kakaoVO.getVarListMap();
|
List<Map<String, String>> varList = kakaoVO.getVarListMap();
|
||||||
|
|
||||||
for (int i = 0; i < varList.size(); i++) {
|
for (int i = 0; i < varList.size(); i++) {
|
||||||
// for(Map<String, String> variables : kakaoVO.getVarListMap()) {
|
// for(Map<String, String> variables : kakaoVO.getVarListMap()) {
|
||||||
// 치환 데이터
|
// 치환 데이터
|
||||||
@ -156,6 +170,12 @@ public class KakaoSendUtil {
|
|||||||
|
|
||||||
/** @공통 기본값 */
|
/** @공통 기본값 */
|
||||||
KakaoSendAdvcVO sendVO = createATSendVO(kakaoVO);
|
KakaoSendAdvcVO sendVO = createATSendVO(kakaoVO);
|
||||||
|
// 공통 가격 설정
|
||||||
|
sendVO.setSmsPrice(shortPStr);
|
||||||
|
sendVO.setMmsPrice(mmsPStr);
|
||||||
|
sendVO.setKakaoAtPrice(kakaoAtPStr);
|
||||||
|
|
||||||
|
|
||||||
String msgId = idList.get(i);
|
String msgId = idList.get(i);
|
||||||
sendVO.setMsgId(msgId);
|
sendVO.setMsgId(msgId);
|
||||||
|
|
||||||
@ -170,12 +190,21 @@ public class KakaoSendUtil {
|
|||||||
/** @Step1-3: 템플릿 치환데이터 설정 */
|
/** @Step1-3: 템플릿 치환데이터 설정 */
|
||||||
String templateContentTemp = templateContent;
|
String templateContentTemp = templateContent;
|
||||||
String templateTitleTemp = templateTitle;
|
String templateTitleTemp = templateTitle;
|
||||||
if (hasContentReplacement) {
|
|
||||||
templateContentTemp = mjonCommon.ATReplaceTemplateVariables(templateContent, variables);
|
// api가 아니면
|
||||||
if(hasTitleReplacement) {
|
if(!isApiData) {
|
||||||
templateTitleTemp = mjonCommon.ATReplaceTemplateVariables(templateTitle, variables);
|
if (hasContentReplacement) {
|
||||||
|
templateContentTemp = mjonCommon.ATReplaceTemplateVariables(templateContent, variables);
|
||||||
|
if(hasTitleReplacement) {
|
||||||
|
templateTitleTemp = mjonCommon.ATReplaceTemplateVariables(templateTitle, variables);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
templateContentTemp = variables.get("templateContent");
|
||||||
|
templateTitleTemp = variables.get("templateTitle");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** @버튼 치환 */ // 버튼 리스트가 있으면 치환 수행, 항상 sendVO에 설정
|
/** @버튼 치환 */ // 버튼 리스트가 있으면 치환 수행, 항상 sendVO에 설정
|
||||||
List<KakaoButtonVO> buttonList = templateDetail.getButtonList();
|
List<KakaoButtonVO> buttonList = templateDetail.getButtonList();
|
||||||
if(hasButtonReplacement) {
|
if(hasButtonReplacement) {
|
||||||
@ -190,44 +219,19 @@ public class KakaoSendUtil {
|
|||||||
String subMsgTxtTemp = subMsgTxt;
|
String subMsgTxtTemp = subMsgTxt;
|
||||||
// Step 1-4: 실패 대체 문자 치환데이터 설정
|
// Step 1-4: 실패 대체 문자 치환데이터 설정
|
||||||
if("Y".equals(kakaoVO.getSubMsgSendYn())) { // 대체문자가 있나?
|
if("Y".equals(kakaoVO.getSubMsgSendYn())) { // 대체문자가 있나?
|
||||||
if ("Y".equals(kakaoVO.getSubMsgTxtReplYn())) { // 치환데이터가 있나?
|
// api가 아니면
|
||||||
subMsgTxtTemp = mjonCommon.ATReplaceTemplateVariables(subMsgTxt, variables);
|
if(!isApiData) {
|
||||||
|
if ("Y".equals(kakaoVO.getSubMsgTxtReplYn())) { // 치환데이터가 있나?
|
||||||
|
subMsgTxtTemp = mjonCommon.ATReplaceTemplateVariables(subMsgTxt, variables);
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
subMsgTxtTemp = variables.get("subMsgTxt");
|
||||||
}
|
}
|
||||||
sendVO.setSubMsgTxt(subMsgTxtTemp);// 실패
|
sendVO.setSubMsgTxt(subMsgTxtTemp);// 실패
|
||||||
}
|
}
|
||||||
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
|
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
log.info("kakaoSendAdvcVO Details: [callTo={}\n, templateContent=\n{}\n, subMsgTxt=\n{}]\n\n\n\n",
|
|
||||||
kakaoSendAdvcVO.getCallTo(),
|
|
||||||
kakaoSendAdvcVO.getTemplateContent(),
|
|
||||||
kakaoSendAdvcVO.getSubMsgTxt()
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Step1 END
|
|
||||||
|
|
||||||
|
|
||||||
// step3
|
|
||||||
// 바이트 수 체크 및 금액설정
|
|
||||||
|
|
||||||
|
|
||||||
// 유효한 단가 계산
|
|
||||||
float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
|
|
||||||
float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
|
|
||||||
float kakaoAtPrice = getValidPrice(mberManageVO.getKakaoAtPrice(), sysJoinSetVO.getKakaoAtPrice());
|
|
||||||
|
|
||||||
|
|
||||||
String shortPStr = Float.toString(shortPrice);
|
|
||||||
String mmsPStr = Float.toString(longPrice);
|
|
||||||
String kakaoAtPStr = Float.toString(kakaoAtPrice);
|
|
||||||
|
|
||||||
// 공통 가격 설정
|
|
||||||
sendVO.setSmsPrice(shortPStr);
|
|
||||||
sendVO.setMmsPrice(mmsPStr);
|
|
||||||
sendVO.setKakaoAtPrice(kakaoAtPStr);
|
|
||||||
|
|
||||||
|
|
||||||
if("Y".equals(kakaoVO.getSubMsgSendYn())) {
|
if("Y".equals(kakaoVO.getSubMsgSendYn())) {
|
||||||
int smsTxtByte = mjonCommon.getSmsTxtBytes(sendVO.getSubMsgTxt());
|
int smsTxtByte = mjonCommon.getSmsTxtBytes(sendVO.getSubMsgTxt());
|
||||||
@ -235,7 +239,8 @@ public class KakaoSendUtil {
|
|||||||
sendVO.setSubMsgType(sendType);
|
sendVO.setSubMsgType(sendType);
|
||||||
|
|
||||||
if ("INVALID".equals(sendType)) {
|
if ("INVALID".equals(sendType)) {
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");return kakaoSendAdvcListVO;
|
// statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");return kakaoSendAdvcListVO;
|
||||||
|
StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.", "STAT_1080");return kakaoSendAdvcListVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isMms = "MMS".equals(sendType);
|
boolean isMms = "MMS".equals(sendType);
|
||||||
@ -297,21 +302,36 @@ public class KakaoSendUtil {
|
|||||||
* @description :
|
* @description :
|
||||||
* @return : List<KakaoSendAdvcVO>
|
* @return : List<KakaoSendAdvcVO>
|
||||||
* @param kakaoVO
|
* @param kakaoVO
|
||||||
* @param isNotified
|
* @param isHolidayNotified
|
||||||
* @param statusResponse
|
* @param statusResponse
|
||||||
* @return
|
* @return
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public List<KakaoSendAdvcVO> populateSendListsFT(KakaoVO kakaoVO, boolean isNotified, StatusResponse statusResponse) throws Exception {
|
public List<KakaoSendAdvcVO> populateSendListsFT(KakaoVO kakaoVO
|
||||||
|
, boolean isHolidayNotified
|
||||||
|
, StatusResponse statusResponse
|
||||||
|
, UserManageVO userManageVO
|
||||||
|
, List<String> resultSpamTxt
|
||||||
|
) throws Exception {
|
||||||
|
|
||||||
//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
|
//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
|
||||||
// String befCash = kakaoVO.getBefCash();
|
// String befCash = kakaoVO.getBefCash();
|
||||||
|
|
||||||
log.info("kakaoVO.ftToString() :: [{}]", kakaoVO.ftToString());
|
log.info("kakaoVO.ftToString() :: [{}]", kakaoVO.ftToString());
|
||||||
|
|
||||||
|
|
||||||
|
// 예약 시간 기본값 설정
|
||||||
|
Date now = new Date();
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
|
|
||||||
|
String atSmishingYn = userManageVO.getAtSmishingYn();
|
||||||
|
String exceptSpamYn = userManageVO.getExceptSpamYn();
|
||||||
|
|
||||||
|
|
||||||
List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>();
|
List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>();
|
||||||
Calendar calendar = setupBaseDate(kakaoVO, isNotified);
|
Calendar calendar = setupBaseDateFT(kakaoVO);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 친구톡 내용
|
// 친구톡 내용
|
||||||
@ -335,7 +355,8 @@ public class KakaoSendUtil {
|
|||||||
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
|
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
|
||||||
// 시스템 기본 단가 정보 불러오기
|
// 시스템 기본 단가 정보 불러오기
|
||||||
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
|
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
|
||||||
|
|
||||||
|
kakaoVO.setAtSmishingYn(mberManageVO.getAtSmishingYn());
|
||||||
|
|
||||||
// 치환 문구가 있는지 확인
|
// 치환 문구가 있는지 확인
|
||||||
Boolean replaceYN = MsgSendUtils.getReplaceYN(templateContent);
|
Boolean replaceYN = MsgSendUtils.getReplaceYN(templateContent);
|
||||||
@ -375,18 +396,18 @@ public class KakaoSendUtil {
|
|||||||
float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
|
float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice());
|
||||||
float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
|
float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice());
|
||||||
float picturePrice = getValidPrice(mberManageVO.getPicturePrice(), sysJoinSetVO.getPicturePrice());
|
float picturePrice = getValidPrice(mberManageVO.getPicturePrice(), sysJoinSetVO.getPicturePrice());
|
||||||
// String shortPStr = Float.toString(shortPrice);
|
|
||||||
// String mmsPStr = Float.toString(longPrice);
|
boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
||||||
// String imgPrice = Float.toString(picturePrice);
|
boolean hasPerformedSubSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
|
||||||
|
boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 메세지 타입 체크 한번
|
||||||
|
boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
String imgFilePath = "";
|
String imgFilePath = "";
|
||||||
if(StringUtils.isNotEmpty(kakaoVO.getAtchFileId()) &&
|
if(StringUtils.isNotEmpty(kakaoVO.getAtchFileId()) &&
|
||||||
("I".equals(imageType) || "W".equals(imageType))) {
|
("I".equals(imageType) || "W".equals(imageType))) {
|
||||||
|
|
||||||
|
|
||||||
imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(kakaoVO.getAtchFileId());
|
imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(kakaoVO.getAtchFileId());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -395,7 +416,20 @@ public class KakaoSendUtil {
|
|||||||
boolean hasButtons = CollectionUtils.isNotEmpty(kakaoVO.getButtonVOList());
|
boolean hasButtons = CollectionUtils.isNotEmpty(kakaoVO.getButtonVOList());
|
||||||
String sharedJsonStr = null;
|
String sharedJsonStr = null;
|
||||||
|
|
||||||
|
|
||||||
|
// 치환데이터가 없는 경우 한 번만 계산하기 위한 캐시 변수 추가
|
||||||
|
Map<String, Object> sharedPricingResult = null;
|
||||||
|
// 치환데이터가 없는 경우 for문 전에 한 번만 계산
|
||||||
|
if (!replaceSubYN && StringUtils.isNotEmpty(subMsgTxt)) {
|
||||||
|
sharedPricingResult = calculateSubMsgPricing(subMsgTxt, imgFilePath, shortPrice, longPrice, picturePrice, kakaoFtPrice);
|
||||||
|
|
||||||
|
// 사전계산에서 INVALID인 경우 즉시 리턴
|
||||||
|
String preSendType = (String) sharedPricingResult.get("sendType");
|
||||||
|
if ("INVALID".equals(preSendType)) {
|
||||||
|
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");
|
||||||
|
return kakaoSendAdvcListVO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<MjonFTSendVO> mjonFTSendVOList = kakaoVO.getMjonFTSendVOList();
|
List<MjonFTSendVO> mjonFTSendVOList = kakaoVO.getMjonFTSendVOList();
|
||||||
|
|
||||||
@ -411,7 +445,9 @@ public class KakaoSendUtil {
|
|||||||
sendVO.setCallTo(mjonFTSendVO.getPhone());
|
sendVO.setCallTo(mjonFTSendVO.getPhone());
|
||||||
sendVO.setMsgId(idList.get(i));
|
sendVO.setMsgId(idList.get(i));
|
||||||
|
|
||||||
String smsTxt = templateContent;
|
|
||||||
|
// 친구톡 문자
|
||||||
|
String templateContentTemp = templateContent;
|
||||||
// 치환 문자면
|
// 치환 문자면
|
||||||
if(replaceYN) {
|
if(replaceYN) {
|
||||||
|
|
||||||
@ -419,21 +455,19 @@ public class KakaoSendUtil {
|
|||||||
for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
|
for (Map.Entry<String, Function<MjonFTSendVO, String>> entry : placeholders.entrySet()) {
|
||||||
String placeholder = entry.getKey();
|
String placeholder = entry.getKey();
|
||||||
String value = entry.getValue().apply(mjonFTSendVO);
|
String value = entry.getValue().apply(mjonFTSendVO);
|
||||||
if (smsTxt.contains(placeholder)) {
|
if (templateContentTemp.contains(placeholder)) {
|
||||||
if (StringUtils.isEmpty(value)) {
|
if (StringUtils.isEmpty(value)) {
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
|
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
smsTxt = smsTxt.replace(placeholder, value);
|
templateContentTemp = templateContentTemp.replace(placeholder, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sendVO.setTemplateContent(smsTxt);
|
sendVO.setTemplateContent(templateContentTemp);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 실패 대체 문자
|
||||||
String subMsgTxtTemp = null;
|
String subMsgTxtTemp = null;
|
||||||
|
|
||||||
if(StringUtils.isNotEmpty(subMsgTxt)) {
|
if(StringUtils.isNotEmpty(subMsgTxt)) {
|
||||||
subMsgTxtTemp = subMsgTxt;
|
subMsgTxtTemp = subMsgTxt;
|
||||||
|
|
||||||
@ -459,34 +493,28 @@ public class KakaoSendUtil {
|
|||||||
// Step 1-4: 실패 대체 문자 치환데이터 설정
|
// Step 1-4: 실패 대체 문자 치환데이터 설정
|
||||||
if(StringUtils.isNotEmpty(subMsgTxtTemp)) { // 대체문자가 있나?
|
if(StringUtils.isNotEmpty(subMsgTxtTemp)) { // 대체문자가 있나?
|
||||||
|
|
||||||
String sendType = "MMS";
|
// 최적화된 계산 로직
|
||||||
if(StringUtils.isEmpty(imgFilePath)) {
|
Map<String, Object> pricingResult;
|
||||||
int smsTxtByte = mjonCommon.getSmsTxtBytes(subMsgTxtTemp); // 문자 byte 수 계산
|
|
||||||
sendType = getMsgType(smsTxtByte); // 문자 타입(SHORT / MMS) 판별
|
if (replaceSubYN) {
|
||||||
}
|
// 치환데이터 있음 → 매번 새로 계산
|
||||||
sendVO.setSubMsgType(sendType); // 실패 대체 문자 타입 설정
|
pricingResult = calculateSubMsgPricing(subMsgTxtTemp, imgFilePath,
|
||||||
|
shortPrice, longPrice, picturePrice, kakaoFtPrice);
|
||||||
|
|
||||||
if ("INVALID".equals(sendType)) {
|
// INVALID 체크
|
||||||
// INVALID 타입이면 길이 초과 에러 응답 후 리턴
|
String resultSendType = (String) pricingResult.get("sendType");
|
||||||
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");
|
if ("INVALID".equals(resultSendType)) {
|
||||||
return kakaoSendAdvcListVO;
|
statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다.");
|
||||||
}
|
return kakaoSendAdvcListVO;
|
||||||
|
}
|
||||||
float chosenPrice = 0f;
|
|
||||||
|
|
||||||
if(StringUtils.isNotEmpty(imgFilePath)) {
|
|
||||||
chosenPrice = Math.max(picturePrice, kakaoFtPrice);
|
|
||||||
sendVO.setFilePath1(imgFilePath);
|
|
||||||
sendVO.setFileCnt("1");
|
|
||||||
|
|
||||||
}else if ("MMS".equals(sendType)) {
|
|
||||||
// MMS 타입일 경우: longPrice(장문 가격)와 카카오톡 단가 중 큰 값을 선택
|
|
||||||
chosenPrice = Math.max(longPrice, kakaoFtPrice);
|
|
||||||
} else {
|
} else {
|
||||||
// SHORT 타입일 경우: shortPrice(단문 가격)와 카카오톡 단가 중 큰 값을 선택
|
// 치환데이터 없음 → 미리 계산된 결과 재사용
|
||||||
chosenPrice = Math.max(shortPrice, kakaoFtPrice);
|
pricingResult = sharedPricingResult;
|
||||||
}
|
}
|
||||||
sendVO.setEachPrice(Float.toString(chosenPrice)); // 선택된 단가 설정
|
|
||||||
|
|
||||||
|
// 결과 적용
|
||||||
|
applyPricingResult(sendVO, pricingResult);
|
||||||
|
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
@ -494,8 +522,68 @@ public class KakaoSendUtil {
|
|||||||
sendVO.setEachPrice( Float.toString(kakaoFtPrice) );
|
sendVO.setEachPrice( Float.toString(kakaoFtPrice) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 스팸 단어 체크
|
||||||
|
// exceptSpam는 사용자 스팸 단어 체크할건지에 대한 여부 N : 체크
|
||||||
|
if("N".equals(exceptSpamYn)) {
|
||||||
|
// 친구톡 내용
|
||||||
|
if(replaceYN) {
|
||||||
|
checkSpamAndSetStatus(kakaoVO
|
||||||
|
, templateContentTemp
|
||||||
|
, resultSpamTxt, isHolidayNotified);
|
||||||
|
}else if(!hasPerformedSpamCheck) {
|
||||||
|
checkSpamAndSetStatus(kakaoVO
|
||||||
|
, templateContentTemp
|
||||||
|
, resultSpamTxt, isHolidayNotified);
|
||||||
|
hasPerformedSpamCheck = true;
|
||||||
|
}
|
||||||
|
// 대체문자 내용
|
||||||
|
if(StringUtils.isNotEmpty(subMsgTxtTemp)) {
|
||||||
|
if(replaceSubYN) {
|
||||||
|
checkSpamAndSetStatus(kakaoVO
|
||||||
|
, subMsgTxtTemp
|
||||||
|
, resultSpamTxt, isHolidayNotified);
|
||||||
|
}else if(!hasPerformedSubSpamCheck) {
|
||||||
|
checkSpamAndSetStatus(kakaoVO
|
||||||
|
, subMsgTxtTemp
|
||||||
|
, resultSpamTxt, isHolidayNotified);
|
||||||
|
hasPerformedSubSpamCheck = true;
|
||||||
|
}
|
||||||
|
|
||||||
// 타이틀과 버튼이 있고
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info(" kakaoVO.toString() :: [{}]",kakaoVO.ftToString());
|
||||||
|
|
||||||
|
|
||||||
|
/* @isHolidayNotified
|
||||||
|
* - 관리자 알림 설정으로 인해
|
||||||
|
* - 해당 시간이면 지연 미처리
|
||||||
|
* @smishingYn
|
||||||
|
* - 회원 별 '스미싱 온' 상태값
|
||||||
|
* - Y면 알림, 지연 처리해야 함
|
||||||
|
* */
|
||||||
|
if("Y".equalsIgnoreCase(atSmishingYn) && isHolidayNotified) {
|
||||||
|
kakaoVO.setSpamStatus("Y");
|
||||||
|
kakaoVO.setSmishingYn("Y");
|
||||||
|
kakaoVO.setAtDelayYn("Y");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 지연 여부 처리
|
||||||
|
if (( "Y".equalsIgnoreCase(atSmishingYn) || "Y".equalsIgnoreCase(kakaoVO.getAtDelayYn()))
|
||||||
|
&& !hasPerformedDelayYn && isHolidayNotified) {
|
||||||
|
calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸
|
||||||
|
// TEST
|
||||||
|
// calendar.add(Calendar.MINUTE, 5); // 모든 시간을 30분 뒤로 미룸
|
||||||
|
hasPerformedDelayYn = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendVO.setReqDate(sdf.format(calendar.getTime())); // 분할된 시간 설정 또는 기본 예약 시간 사용
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 타이틀이나 버튼이 있고
|
||||||
if(hasButtons || StringUtils.isNotEmpty(kakaoVO.getTemplateImageUrl())) {
|
if(hasButtons || StringUtils.isNotEmpty(kakaoVO.getTemplateImageUrl())) {
|
||||||
//
|
//
|
||||||
if (StringUtils.isEmpty(sharedJsonStr)) {
|
if (StringUtils.isEmpty(sharedJsonStr)) {
|
||||||
@ -510,10 +598,114 @@ public class KakaoSendUtil {
|
|||||||
kakaoSendAdvcListVO.add(sendVO);
|
kakaoSendAdvcListVO.add(sendVO);
|
||||||
log.info(" sendVO.toString() :: [{}]",sendVO.toString());
|
log.info(" sendVO.toString() :: [{}]",sendVO.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return kakaoSendAdvcListVO;
|
return kakaoSendAdvcListVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkSpamAndSetStatus(KakaoVO kakaoVO
|
||||||
|
, String chkText
|
||||||
|
, List<String> resultSpamTxt, boolean isHolidayNotified) throws Exception {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
|
||||||
|
kakaoVO.setSpamStatus("N");
|
||||||
|
kakaoVO.setAtDelayYn("N");
|
||||||
|
|
||||||
|
if(StringUtils.isNotEmpty(chkText)) {
|
||||||
|
|
||||||
|
String resultParser = ComGetSpamStringParser.getSpamTextParse(chkText).trim();
|
||||||
|
int spmCnt = 0;
|
||||||
|
String spmFilterTxt = "";
|
||||||
|
|
||||||
|
for (String spmTxt : resultSpamTxt) {
|
||||||
|
String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
|
||||||
|
if (resultParser.contains(parserStr) || chkText.contains(parserStr)) {
|
||||||
|
spmCnt++;
|
||||||
|
spmFilterTxt += spmTxt + ",";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spmCnt > 0) { // 스팸 문자가 포함된 경우
|
||||||
|
|
||||||
|
if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
|
||||||
|
// 처음부터 idx 만큼 잘라낸 나머지 글자
|
||||||
|
spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @isHolidayNotified
|
||||||
|
* - 관리자 알림 설정으로 인해
|
||||||
|
* - 해당 시간이면 지연 미처리
|
||||||
|
* */
|
||||||
|
kakaoVO.setSpamStatus("Y");
|
||||||
|
if(isHolidayNotified) {
|
||||||
|
kakaoVO.setAtDelayYn("Y");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(human): 아래에 새로운 메소드 구현
|
||||||
|
/**
|
||||||
|
* 대체문자 가격 계산 최적화 메소드
|
||||||
|
* @param subMsgTxt 대체문자 내용
|
||||||
|
* @param imgFilePath 이미지 파일 경로
|
||||||
|
* @param shortPrice 단문 가격
|
||||||
|
* @param longPrice 장문 가격
|
||||||
|
* @param picturePrice 사진 가격
|
||||||
|
* @param kakaoFtPrice 카카오 친구톡 가격
|
||||||
|
* @return 계산 결과 Map (sendType, chosenPrice, filePath 포함)
|
||||||
|
* @throws UnsupportedEncodingException
|
||||||
|
*/
|
||||||
|
private Map<String, Object> calculateSubMsgPricing(String subMsgTxt, String imgFilePath,
|
||||||
|
float shortPrice, float longPrice,
|
||||||
|
float picturePrice, float kakaoFtPrice) throws UnsupportedEncodingException {
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
|
||||||
|
String sendType = "MMS";
|
||||||
|
if(StringUtils.isEmpty(imgFilePath)) {
|
||||||
|
int smsTxtByte = mjonCommon.getSmsTxtBytes(subMsgTxt);
|
||||||
|
sendType = getMsgType(smsTxtByte);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.put("sendType", sendType);
|
||||||
|
|
||||||
|
// INVALID인 경우 추가 처리 없이 반환
|
||||||
|
if ("INVALID".equals(sendType)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
float chosenPrice = 0f;
|
||||||
|
if(StringUtils.isNotEmpty(imgFilePath)) {
|
||||||
|
chosenPrice = Math.max(picturePrice, kakaoFtPrice);
|
||||||
|
result.put("filePath", imgFilePath);
|
||||||
|
} else if ("MMS".equals(sendType)) {
|
||||||
|
chosenPrice = Math.max(longPrice, kakaoFtPrice);
|
||||||
|
} else {
|
||||||
|
chosenPrice = Math.max(shortPrice, kakaoFtPrice);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.put("sendType", sendType);
|
||||||
|
result.put("chosenPrice", Float.toString(chosenPrice));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 가격 계산 결과를 sendVO에 적용하는 헬퍼 메소드
|
||||||
|
* @param sendVO 적용할 KakaoSendAdvcVO 객체
|
||||||
|
* @param pricingResult 가격 계산 결과 Map
|
||||||
|
*/
|
||||||
|
private void applyPricingResult(KakaoSendAdvcVO sendVO, Map<String, Object> pricingResult) {
|
||||||
|
sendVO.setSubMsgType((String) pricingResult.get("sendType"));
|
||||||
|
sendVO.setEachPrice((String) pricingResult.get("chosenPrice"));
|
||||||
|
if (pricingResult.get("filePath") != null) {
|
||||||
|
sendVO.setFilePath1((String) pricingResult.get("filePath"));
|
||||||
|
sendVO.setFileCnt("1");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static String getMsgTypeWithByteValidation(MjonFTSendVO sendVO, String p_smsTxt) throws UnsupportedEncodingException {
|
public static String getMsgTypeWithByteValidation(MjonFTSendVO sendVO, String p_smsTxt) throws UnsupportedEncodingException {
|
||||||
|
|
||||||
@ -543,9 +735,21 @@ public class KakaoSendUtil {
|
|||||||
}
|
}
|
||||||
return msgType;
|
return msgType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Calendar setupBaseDate(KakaoVO kakaoVO, boolean isNotified) throws ParseException {
|
|
||||||
|
private Calendar setupBaseDateFT(KakaoVO kakaoVO) throws ParseException {
|
||||||
|
|
||||||
|
// baseDate 추출
|
||||||
|
Date baseDate = resolveBaseDate(kakaoVO);
|
||||||
|
|
||||||
|
// 시간 성정
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(baseDate); // calendar에 baseDate 설정
|
||||||
|
|
||||||
|
return calendar;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Calendar setupBaseDate(KakaoVO kakaoVO, boolean isHolidayNotified) throws ParseException {
|
||||||
|
|
||||||
// baseDate 추출
|
// baseDate 추출
|
||||||
Date baseDate = resolveBaseDate(kakaoVO);
|
Date baseDate = resolveBaseDate(kakaoVO);
|
||||||
@ -557,7 +761,7 @@ public class KakaoSendUtil {
|
|||||||
// 지연 여부 처리
|
// 지연 여부 처리
|
||||||
// 알림톡 스미싱의심 + 공휴일알림 조건이 맞으면 30분 delay
|
// 알림톡 스미싱의심 + 공휴일알림 조건이 맞으면 30분 delay
|
||||||
if ( "Y".equalsIgnoreCase(kakaoVO.getAtSmishingYn())
|
if ( "Y".equalsIgnoreCase(kakaoVO.getAtSmishingYn())
|
||||||
&& isNotified) {
|
&& isHolidayNotified) {
|
||||||
calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸
|
calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸
|
||||||
}
|
}
|
||||||
return calendar;
|
return calendar;
|
||||||
@ -629,7 +833,7 @@ public class KakaoSendUtil {
|
|||||||
sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime()));
|
sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime()));
|
||||||
|
|
||||||
sendVO.setSenderKey(kakaoVO.getSenderKey());
|
sendVO.setSenderKey(kakaoVO.getSenderKey());
|
||||||
sendVO.setTemplateCode(kakaoVO.getTemplateCode());
|
// sendVO.setTemplateCode(kakaoVO.getTemplateCode());
|
||||||
sendVO.setUserId(kakaoVO.getUserId());
|
sendVO.setUserId(kakaoVO.getUserId());
|
||||||
sendVO.setCallFrom(kakaoVO.getCallFrom());
|
sendVO.setCallFrom(kakaoVO.getCallFrom());
|
||||||
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
|
sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn());
|
||||||
@ -1683,11 +1887,14 @@ public class KakaoSendUtil {
|
|||||||
sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId()));
|
sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId()));
|
||||||
sendVO.setAdFlag(kakaoVO.getAdFlag());
|
sendVO.setAdFlag(kakaoVO.getAdFlag());
|
||||||
|
|
||||||
|
sendVO.setSendKind(kakaoVO.getSendKind());
|
||||||
|
|
||||||
Float eachPrice = Float.parseFloat(sendVO.getEachPrice());
|
Float eachPrice = Float.parseFloat(sendVO.getEachPrice());
|
||||||
|
|
||||||
Float totPrice = eachPrice * instCnt;
|
Float totPrice = eachPrice * instCnt;
|
||||||
sendVO.setTotPrice(String.format("%.1f", totPrice));
|
sendVO.setTotPrice(String.format("%.1f", totPrice));
|
||||||
|
|
||||||
|
// sendVO.setAtDelayYn(kakaoVO.getAtDelayYn());
|
||||||
sendVO.setAtDelayYn(kakaoVO.getAtSmishingYn());
|
sendVO.setAtDelayYn(kakaoVO.getAtSmishingYn());
|
||||||
sendVO.setBizKakaoResendOrgnlTxt(kakaoVO.getSubMsgTxt());
|
sendVO.setBizKakaoResendOrgnlTxt(kakaoVO.getSubMsgTxt());
|
||||||
sendVO.setBizKakaoResendType(sendVO.getSubMsgType());
|
sendVO.setBizKakaoResendType(sendVO.getSubMsgType());
|
||||||
|
|||||||
@ -336,28 +336,33 @@ public class KakaoVO extends MjonMsgVO{
|
|||||||
|
|
||||||
public String ftToString() {
|
public String ftToString() {
|
||||||
StringBuilder sb = new StringBuilder("KakaoFTSendVO[");
|
StringBuilder sb = new StringBuilder("KakaoFTSendVO[");
|
||||||
sb.append("\n senderKey=[").append(senderKey).append("]");
|
sb.append("\n sendKind=[").append(getSendKind()).append("]");
|
||||||
|
sb.append("\n , senderKey=[").append(senderKey).append("]");
|
||||||
sb.append("\n , imageFileName=[").append(imageFileName).append("]");
|
sb.append("\n , imageFileName=[").append(imageFileName).append("]");
|
||||||
sb.append("\n , imageType=[").append(imageType).append("]");
|
sb.append("\n , imageType=[").append(imageType).append("]");
|
||||||
sb.append("\n , imgTitle=[").append(imgTitle).append("]");
|
sb.append("\n , atchFileId=[").append(atchFileId).append("]");
|
||||||
sb.append("\n , imgLink=[").append(imgLink).append("]");
|
// sb.append("\n , imgTitle=[").append(imgTitle).append("]");
|
||||||
|
// sb.append("\n , imgLink=[").append(imgLink).append("]");
|
||||||
sb.append("\n , templateContent=[").append(templateContent).append("]");
|
sb.append("\n , templateContent=[").append(templateContent).append("]");
|
||||||
sb.append("\n , templateImageUrl=[").append(templateImageUrl).append("]");
|
sb.append("\n , templateImageUrl=[").append(templateImageUrl).append("]");
|
||||||
sb.append("\n , smsTxtArea=[").append(getSubMsgTxt()).append("]");
|
// sb.append("\n , imgLink=[").append(imgLink).append("]");
|
||||||
sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
// sb.append("\n , smsTxtArea=[").append(getSubMsgTxt()).append("]");
|
||||||
sb.append("\n , subMsgTxtReplYn=[").append(subMsgTxtReplYn).append("]");
|
// sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
||||||
sb.append("\n , subMsgType=[").append(subMsgType).append("]");
|
// sb.append("\n , subMsgTxtReplYn=[").append(subMsgTxtReplYn).append("]");
|
||||||
|
// sb.append("\n , subMsgType=[").append(subMsgType).append("]");
|
||||||
sb.append("\n , subMsgTxt=[").append(subMsgTxt).append("]");
|
sb.append("\n , subMsgTxt=[").append(subMsgTxt).append("]");
|
||||||
|
sb.append("\n , subMsgSendYn=[").append(subMsgSendYn).append("]");
|
||||||
sb.append("\n , reserveYn=[").append(getReserveYn()).append("]");
|
sb.append("\n , reserveYn=[").append(getReserveYn()).append("]");
|
||||||
sb.append("\n , menuTopTab=[").append(menuTopTab).append("]");
|
// sb.append("\n , menuTopTab=[").append(menuTopTab).append("]");
|
||||||
sb.append("\n , bizJsonYn=[").append(bizJsonYn).append("]");
|
// sb.append("\n , bizJsonYn=[").append(bizJsonYn).append("]");
|
||||||
sb.append("\n , senderKey=[").append(senderKey).append("]");
|
|
||||||
sb.append("\n , callFrom=[").append(getCallFrom()).append("]");
|
sb.append("\n , callFrom=[").append(getCallFrom()).append("]");
|
||||||
sb.append("\n , kakaoFtPrice=[").append(getEachPrice()).append("]");
|
// sb.append("\n , kakaoFtPrice=[").append(getEachPrice()).append("]");
|
||||||
sb.append("\n , reqDate=[").append(getReqDate()).append("]");
|
sb.append("\n , reqDate=[").append(getReqDate()).append("]");
|
||||||
sb.append("\n , spamStatus=[").append(getSpamStatus()).append("]");
|
// sb.append("\n , spamStatus=[").append(getSpamStatus()).append("]");
|
||||||
sb.append("\n , txtReplYn=[").append(getTxtReplYn()).append("]");
|
// sb.append("\n , txtReplYn=[").append(getTxtReplYn()).append("]");
|
||||||
sb.append("\n , atSmishingYn=[").append(getAtSmishingYn()).append("]");
|
// sb.append("\n , atSmishingYn=[").append(getAtSmishingYn()).append("]");
|
||||||
|
// sb.append("\n , atDelayYn=[").append(getAtDelayYn()).append("]");
|
||||||
|
// sb.append("\n , filePath1=[").append(getFilePath1()).append("]");
|
||||||
// sb.append("\n , tmpBtnSelect=[").append(getTmpBtnSelect()).append("]");
|
// sb.append("\n , tmpBtnSelect=[").append(getTmpBtnSelect()).append("]");
|
||||||
StringBuilder btnListSb = new StringBuilder("[");
|
StringBuilder btnListSb = new StringBuilder("[");
|
||||||
if (buttonVOList != null && !buttonVOList.isEmpty()) {
|
if (buttonVOList != null && !buttonVOList.isEmpty()) {
|
||||||
@ -387,4 +392,7 @@ public class KakaoVO extends MjonMsgVO{
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ import javax.imageio.ImageIO;
|
|||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
|
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
import org.apache.commons.io.output.ByteArrayOutputStream;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.HttpEntity;
|
import org.apache.http.HttpEntity;
|
||||||
import org.apache.http.HttpResponse;
|
import org.apache.http.HttpResponse;
|
||||||
@ -395,6 +396,7 @@ public class KakaoApiImageUpload {
|
|||||||
.addTextBody("senderKey", kakaoVO.getSenderKey())
|
.addTextBody("senderKey", kakaoVO.getSenderKey())
|
||||||
.addBinaryBody("image", new File(filePath), ContentType.MULTIPART_FORM_DATA, newName + "." + ext)
|
.addBinaryBody("image", new File(filePath), ContentType.MULTIPART_FORM_DATA, newName + "." + ext)
|
||||||
.build();
|
.build();
|
||||||
|
;
|
||||||
|
|
||||||
httpPost.setEntity(httpEntity);
|
httpPost.setEntity(httpEntity);
|
||||||
|
|
||||||
@ -407,7 +409,8 @@ public class KakaoApiImageUpload {
|
|||||||
String result = EntityUtils.toString(response.getEntity(), "UTF-8");
|
String result = EntityUtils.toString(response.getEntity(), "UTF-8");
|
||||||
JSONParser parser = new JSONParser();
|
JSONParser parser = new JSONParser();
|
||||||
JSONObject object = (JSONObject) parser.parse(result);
|
JSONObject object = (JSONObject) parser.parse(result);
|
||||||
|
log.info("object + :: [{}]", object.toJSONString());
|
||||||
|
|
||||||
String code = object.get("code").toString();
|
String code = object.get("code").toString();
|
||||||
if ("200".equals(code)) {
|
if ("200".equals(code)) {
|
||||||
Map<String, Object> returnMap = new HashMap<>();
|
Map<String, Object> returnMap = new HashMap<>();
|
||||||
|
|||||||
@ -148,24 +148,8 @@ public class KakaoApiProfile {
|
|||||||
kakaoReturnVO.setBizReturnMsg(msg);
|
kakaoReturnVO.setBizReturnMsg(msg);
|
||||||
|
|
||||||
if(code.equals("200")) {
|
if(code.equals("200")) {
|
||||||
JSONObject tempCate = (JSONObject) object.get("data");
|
kakaoReturnVO.setSenderKey((String) ((JSONObject) object.get("data")).get("senderKey"));
|
||||||
String senderKey = tempCate.get("senderKey").toString();
|
|
||||||
kakaoVO.setSenderKey(senderKey);
|
|
||||||
int profileCnt = kakaoApiService.selectKakaoProfileCnt(kakaoVO);
|
|
||||||
|
|
||||||
//중복된 발신프로필이 없으면 추가 입력
|
|
||||||
if(profileCnt == 0) {
|
|
||||||
kakaoApiService.insertKakaoProfileInfo(kakaoVO);
|
|
||||||
}else {//중복이 있는 경우 처리
|
|
||||||
|
|
||||||
kakaoReturnVO.setBizReturnCode("310");
|
|
||||||
kakaoReturnVO.setBizReturnMsg("이미 등록되어 있는 발신프로필 입니다");
|
|
||||||
|
|
||||||
return kakaoReturnVO;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
|
|
||||||
kakaoReturnVO.setBizReturnCode(statusCode);
|
kakaoReturnVO.setBizReturnCode(statusCode);
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
|
import itn.let.kakao.kakaoComm.KakaoReturnVO;
|
||||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||||
import itn.let.mail.service.StatusResponse;
|
import itn.let.mail.service.StatusResponse;
|
||||||
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
|
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
|
||||||
@ -29,4 +29,7 @@ public interface KakaoAlimTalkService {
|
|||||||
public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception;
|
public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception;
|
||||||
|
|
||||||
public void kakaoSingleRefund(KakaoVO kakaoVO) throws Exception;
|
public void kakaoSingleRefund(KakaoVO kakaoVO) throws Exception;
|
||||||
|
|
||||||
|
//발신 프로필 등록 처리
|
||||||
|
public KakaoReturnVO createKaKaoProfile(KakaoVO kakaoVO) throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package itn.let.kakao.user.kakaoAt.service.impl;
|
package itn.let.kakao.user.kakaoAt.service.impl;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@ -19,8 +20,6 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Propagation;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
@ -28,9 +27,11 @@ import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
|||||||
import itn.com.cmm.LoginVO;
|
import itn.com.cmm.LoginVO;
|
||||||
import itn.com.utl.fcc.service.EgovStringUtil;
|
import itn.com.utl.fcc.service.EgovStringUtil;
|
||||||
import itn.let.kakao.kakaoComm.BizKakaoPriceVO;
|
import itn.let.kakao.kakaoComm.BizKakaoPriceVO;
|
||||||
|
import itn.let.kakao.kakaoComm.KakaoReturnVO;
|
||||||
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
|
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
|
||||||
import itn.let.kakao.kakaoComm.KakaoSendUtil;
|
import itn.let.kakao.kakaoComm.KakaoSendUtil;
|
||||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||||
|
import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
|
||||||
import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService;
|
import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService;
|
||||||
import itn.let.mail.service.StatusResponse;
|
import itn.let.mail.service.StatusResponse;
|
||||||
import itn.let.mjo.mjocommon.MjonCommon;
|
import itn.let.mjo.mjocommon.MjonCommon;
|
||||||
@ -85,6 +86,9 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
/** userManageService */
|
/** userManageService */
|
||||||
@Resource(name = "userManageService")
|
@Resource(name = "userManageService")
|
||||||
private EgovUserManageService userManageService;
|
private EgovUserManageService userManageService;
|
||||||
|
|
||||||
|
@Resource(name = "kakaoApiService")
|
||||||
|
private KakaoApiService kakaoApiService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MjonPayDAO mjonPayDAO;
|
private MjonPayDAO mjonPayDAO;
|
||||||
@ -867,7 +871,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
@Override
|
@Override
|
||||||
public StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception {
|
public StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception {
|
||||||
|
|
||||||
// log.info(" :: [{}]", kakaoVO.toString());
|
log.info(" :: [{}]", kakaoVO.toString());
|
||||||
|
|
||||||
|
|
||||||
// 측정할 메소드 호출 전 시간 기록
|
// 측정할 메소드 호출 전 시간 기록
|
||||||
@ -875,17 +879,25 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
// KakaoSendAdvcVO
|
// KakaoSendAdvcVO
|
||||||
|
|
||||||
Map<String, Object> returnMap = new HashMap<>();
|
Map<String, Object> returnMap = new HashMap<>();
|
||||||
|
Map<String, Object> apiReturnMap = new HashMap<>();
|
||||||
|
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
String userId = "";
|
||||||
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
if("A".equals(kakaoVO.getSendKind()))
|
||||||
: null;
|
{
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
userId = kakaoVO.getMberId();
|
||||||
|
}else {
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
||||||
|
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
||||||
|
: null;
|
||||||
|
userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
|
if (userId.equals("")) {
|
||||||
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
||||||
|
}
|
||||||
|
|
||||||
if (userId.equals("")) {
|
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kakaoVO.setUserId(userId);
|
kakaoVO.setUserId(userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 회원 정지된 상태이면 문자 발송이 안되도록 처리함 현재 로그인 세션도 만료 처리함
|
* 회원 정지된 상태이면 문자 발송이 안되도록 처리함 현재 로그인 세션도 만료 처리함
|
||||||
@ -895,7 +907,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
request.getSession().invalidate();
|
request.getSession().invalidate();
|
||||||
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
||||||
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
||||||
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.", "STAT_1070");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -920,7 +932,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
/** @전송금액 확인 --------------------------------------------------*/
|
/** @전송금액 확인 --------------------------------------------------*/
|
||||||
if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
|
if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
|
||||||
log.error("Insufficient balance for message sending.");
|
log.error("Insufficient balance for message sending.");
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.");
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.", "STAT_1060");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -937,6 +949,8 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
// 임시
|
// 임시
|
||||||
List<String> nextMsgGroupIdA = new ArrayList<>();
|
List<String> nextMsgGroupIdA = new ArrayList<>();
|
||||||
// 대안: entrySet() 직접 사용
|
// 대안: entrySet() 직접 사용
|
||||||
|
String apiMsgGroupId = "";
|
||||||
|
String apiMsgType = "";
|
||||||
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
|
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
|
||||||
// entry 사용
|
// entry 사용
|
||||||
|
|
||||||
@ -946,6 +960,29 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
||||||
|
|
||||||
|
|
||||||
|
// api 전달 값
|
||||||
|
apiMsgGroupId = StringUtils.isNotEmpty(apiMsgGroupId)
|
||||||
|
? apiMsgGroupId + "," + nextMsgGroupId
|
||||||
|
: nextMsgGroupId;
|
||||||
|
|
||||||
|
apiMsgType = StringUtils.isNotEmpty(apiMsgType)
|
||||||
|
? apiMsgType + "," + kakaoSendAdvcListVO.get(0).getMsgType()
|
||||||
|
: kakaoSendAdvcListVO.get(0).getMsgType();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
groupedMsgList.stream().forEach(t-> log.info("t.toString() [{}]", t.toString()));
|
||||||
|
|
||||||
|
//
|
||||||
|
// if(1==1) {
|
||||||
|
//
|
||||||
|
// // 강제로 예외 발생
|
||||||
|
// throw new RuntimeException("강제 예외 발생 테스트");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
// 발송 데이터 삽입
|
// 발송 데이터 삽입
|
||||||
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList);
|
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList);
|
||||||
// int instCnt = 6;
|
// int instCnt = 6;
|
||||||
@ -956,6 +993,8 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
KakaoSendAdvcVO sendVO = groupedMsgList.get(0);
|
KakaoSendAdvcVO sendVO = groupedMsgList.get(0);
|
||||||
|
|
||||||
|
// log.info(" ++ kakaoVO.getAtSmishingYn() :: [{}]", kakaoVO.getAtSmishingYn());
|
||||||
|
// log.info(" ++ kakaoVO.getAtDelayYn() :: [{}]", kakaoVO.getAtDelayYn());
|
||||||
/** @groupData 테이블 insert */
|
/** @groupData 테이블 insert */
|
||||||
kakaoSendUtil.insertKakaoGroupDataTb_advc(instCnt, kakaoVO, sendVO);
|
kakaoSendUtil.insertKakaoGroupDataTb_advc(instCnt, kakaoVO, sendVO);
|
||||||
|
|
||||||
@ -1001,7 +1040,14 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apiReturnMap.put("resultSts", instTotalCnt);
|
||||||
|
// 그룹 ID
|
||||||
|
apiReturnMap.put("msgGroupId", apiMsgGroupId);
|
||||||
|
// 메세지 타입
|
||||||
|
apiReturnMap.put("msgType", apiMsgType);
|
||||||
|
|
||||||
returnMap.put("resultSts", instTotalCnt);
|
returnMap.put("resultSts", instTotalCnt);
|
||||||
|
|
||||||
returnMap.put("reserYn", kakaoVO.getReserveYn());
|
returnMap.put("reserYn", kakaoVO.getReserveYn());
|
||||||
returnMap.put("groupIds", nextMsgGroupIdA);
|
returnMap.put("groupIds", nextMsgGroupIdA);
|
||||||
|
|
||||||
@ -1031,10 +1077,12 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
statusResponse.setStatus(HttpStatus.OK);
|
statusResponse.setStatus(HttpStatus.OK);
|
||||||
statusResponse.setObject(returnMap);
|
statusResponse.setObject(returnMap);
|
||||||
|
apiReturnMap.put("result", HttpStatus.OK);
|
||||||
|
apiReturnMap.put("message", "전송이 완료되었습니다.");
|
||||||
|
statusResponse.setApiReturn(apiReturnMap);
|
||||||
|
|
||||||
return statusResponse;
|
return statusResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception{
|
public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception{
|
||||||
return kakaoAlimTalkDAO.selectKakaoSentRefundList();
|
return kakaoAlimTalkDAO.selectKakaoSentRefundList();
|
||||||
@ -1063,26 +1111,176 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
mjonMsgDAO.updateRefundY(kakaoVO);
|
mjonMsgDAO.updateRefundY(kakaoVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
// // 보유 금액이 충분한지 확인하는 메서드
|
private void insertKakaoAtDataJsonInfo_advc(List<KakaoSendAdvcVO> kakaoSendAdvcListVO) {
|
||||||
// private boolean isCashSufficient(String userId, List<KakaoSendAdvcVO> kakaoSendAdvcListVO) throws Exception {
|
// TODO Auto-generated method stub
|
||||||
//
|
|
||||||
//
|
// 측정할 메소드 호출 전 시간 기록
|
||||||
// String userMoney = priceAndPoint.getBefCash(userId);
|
List<KakaoSendAdvcVO> jsonInfoData = new ArrayList<>(kakaoSendAdvcListVO);
|
||||||
// // 쉼표 제거
|
jsonInfoData.removeIf(t -> StringUtils.isBlank(t.getJsonStr()));
|
||||||
// userMoney = userMoney.replace(",", "");
|
log.info(" + jsonInfoData Insert :: [{}]", jsonInfoData.size());
|
||||||
//
|
if(jsonInfoData.size() > 0) {
|
||||||
// // 사용자 보유 금액 BigDecimal 변환 (HALF_EVEN 적용)
|
kakaoAlimTalkDAO.insertKakaoAtDataJsonInfo_advc(jsonInfoData);
|
||||||
// BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN);
|
}
|
||||||
//
|
|
||||||
// // 총 메시지 금액 계산 (HALF_EVEN 적용)
|
}
|
||||||
// BigDecimal totalEachPrice = kakaoSendAdvcListVO.stream()
|
|
||||||
// .map(msg -> new BigDecimal(String.valueOf(msg.getEachPrice()))) // 변환 오류 방지
|
private void insertKakaoGroupDataTb_advc(int instCnt, KakaoVO kakaoVO, KakaoSendAdvcVO sendVO) throws Exception {
|
||||||
// .reduce(BigDecimal.ZERO, BigDecimal::add)
|
// TODO Auto-generated method stub
|
||||||
// .setScale(2, RoundingMode.HALF_EVEN); // 일관성 유지
|
|
||||||
//
|
// log.info(" + insertKakaoGroupDataTb_advc kakaoVO :: \n[{}]", kakaoVO.toString());;
|
||||||
// // 비교 수행
|
// log.info(" + insertKakaoGroupDataTb_advc kakaoSendAdvcVOList :: \n[{}]", sendVO.toString());
|
||||||
// return befCash.compareTo(totalEachPrice) >= 0;
|
|
||||||
// }
|
sendVO.setMsgGroupCnt(Integer.toString(instCnt));
|
||||||
|
sendVO.setReserveYn(kakaoVO.getReserveYn());
|
||||||
|
sendVO.setBefCash(priceAndPoint.getBefCash(sendVO.getUserId()));
|
||||||
|
sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId()));
|
||||||
|
|
||||||
|
Float eachPrice = Float.parseFloat(sendVO.getEachPrice());
|
||||||
|
|
||||||
|
Float totPrice = eachPrice * instCnt;
|
||||||
|
sendVO.setTotPrice(String.format("%.1f", totPrice));
|
||||||
|
|
||||||
|
sendVO.setAtDelayYn(StringUtils.isEmpty(kakaoVO.getAtSmishingYn()) ? "N" : kakaoVO.getAtSmishingYn());
|
||||||
|
sendVO.setSendKind(StringUtils.isEmpty(kakaoVO.getSendKind()) ? "H" : kakaoVO.getSendKind());
|
||||||
|
sendVO.setBizKakaoResendOrgnlTxt(kakaoVO.getSubMsgTxt());
|
||||||
|
sendVO.setBizKakaoResendType(sendVO.getSubMsgType());
|
||||||
|
|
||||||
|
kakaoAlimTalkDAO.insertKakaoGroupDataTb_advc(sendVO);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : insertKakaoData_advc
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2025. 3. 20.
|
||||||
|
* @description : 카카오 batch 발송 => mj_msg_data
|
||||||
|
* @return : int
|
||||||
|
* @param kakaoSendAdvcVOList
|
||||||
|
* @param parentLoopCount
|
||||||
|
* @param isJsonNotEmpty
|
||||||
|
* @param isJsonNameAllSame
|
||||||
|
* @return
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private int insertKakaoData_advc(List<KakaoSendAdvcVO> kakaoSendAdvcVOList) {
|
||||||
|
|
||||||
|
|
||||||
|
// 시작 시간 측정
|
||||||
|
long totalStartTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
int totalSize = kakaoSendAdvcVOList.size(); // 총 데이터 개수
|
||||||
|
// Batch 크기 설정 (고정값)
|
||||||
|
// int batchSize = 10000; 465
|
||||||
|
int batchSize = 50000; // 9분 18초
|
||||||
|
|
||||||
|
log.info("총 데이터 개수 :: [{}] ", totalSize);
|
||||||
|
log.info("설정된 Batch 크기 :: [{}] ", batchSize);
|
||||||
|
|
||||||
|
// 총 insert 카운트
|
||||||
|
int instCnt = 0;
|
||||||
|
int batchCount = 0;
|
||||||
|
|
||||||
|
// 각 배치별 실행 시간 기록
|
||||||
|
List<Double> batchExecutionTimes = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
// 첫 번째 배치에서만 삽입했는지 추적하는 플래그
|
||||||
|
for (int i = 0; i < totalSize; i += batchSize) {
|
||||||
|
// Batch 시작 시간 측정
|
||||||
|
long batchStartTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// Batch 리스트 생성
|
||||||
|
List<KakaoSendAdvcVO> batchList = kakaoSendAdvcVOList.subList(i, Math.min(i + batchSize, totalSize));
|
||||||
|
System.out.println("Batch 시작 인덱스: " + i);
|
||||||
|
|
||||||
|
// mj_msg_data 테이블 insert
|
||||||
|
int insertedCount = kakaoAlimTalkDAO.insertKakaoAtDataInfo_advc(batchList);
|
||||||
|
|
||||||
|
/** @kakaoSendUtil.populateSendLists
|
||||||
|
* 하단에서
|
||||||
|
* getJsonStr 데이터 처리 후 활용
|
||||||
|
* */
|
||||||
|
instCnt += insertedCount;
|
||||||
|
|
||||||
|
// Batch 종료 시간 측정 및 실행 시간 계산
|
||||||
|
long batchEndTime = System.currentTimeMillis();
|
||||||
|
double batchExecutionTimeInSeconds = (batchEndTime - batchStartTime) / 1000.0;
|
||||||
|
|
||||||
|
// 실행 시간 기록
|
||||||
|
batchExecutionTimes.add(batchExecutionTimeInSeconds);
|
||||||
|
batchCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 종료 시간 측정
|
||||||
|
long totalEndTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 총 실행 시간 계산 (밀리초 -> 초로 변환)
|
||||||
|
double totalExecutionTimeInSeconds = (totalEndTime - totalStartTime) / 1000.0;
|
||||||
|
|
||||||
|
// 실행 시간 출력
|
||||||
|
log.info("총 배치 실행 횟수 :: [{}] ", batchCount);
|
||||||
|
log.info("batchSize :: [{}] ", batchSize);
|
||||||
|
log.info("총 실행 시간 :: [{}] ", totalExecutionTimeInSeconds + "초");
|
||||||
|
log.info("총 삽입 건수 :: [{}] ", instCnt);
|
||||||
|
|
||||||
|
// 각 배치별 실행 시간 출력
|
||||||
|
for (int k = 0; k < batchExecutionTimes.size(); k++) {
|
||||||
|
System.out.println("배치 " + (k + 1) + " 실행 시간 :: " + batchExecutionTimes.get(k) + "초");
|
||||||
|
}
|
||||||
|
|
||||||
|
return instCnt;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 보유 금액이 충분한지 확인하는 메서드
|
||||||
|
private boolean isCashSufficient(String userId, List<KakaoSendAdvcVO> kakaoSendAdvcListVO) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
String userMoney = priceAndPoint.getBefCash(userId);
|
||||||
|
// 쉼표 제거
|
||||||
|
userMoney = userMoney.replace(",", "");
|
||||||
|
|
||||||
|
// 사용자 보유 금액 BigDecimal 변환 (HALF_EVEN 적용)
|
||||||
|
BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN);
|
||||||
|
|
||||||
|
// 총 메시지 금액 계산 (HALF_EVEN 적용)
|
||||||
|
BigDecimal totalEachPrice = kakaoSendAdvcListVO.stream()
|
||||||
|
.map(msg -> new BigDecimal(String.valueOf(msg.getEachPrice()))) // 변환 오류 방지
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add)
|
||||||
|
.setScale(2, RoundingMode.HALF_EVEN); // 일관성 유지
|
||||||
|
|
||||||
|
// 비교 수행
|
||||||
|
return befCash.compareTo(totalEachPrice) >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public KakaoReturnVO createKaKaoProfile(KakaoVO kakaoVO) throws Exception {
|
||||||
|
KakaoReturnVO returnVO = new KakaoReturnVO();
|
||||||
|
|
||||||
|
/* senderKey 사용 우무 */
|
||||||
|
int profileCnt = kakaoApiService.selectKakaoProfileCnt(kakaoVO);
|
||||||
|
if(profileCnt > 0) {
|
||||||
|
returnVO.setBizReturnMsg("이미 등록된 발신프로필입니다. 동일 채널ID는 중복 등록이 불가합니다.");
|
||||||
|
}else {
|
||||||
|
List<KakaoVO> delProfileList = new ArrayList<KakaoVO>();
|
||||||
|
delProfileList = selectDeleteProfileInfo(kakaoVO);
|
||||||
|
|
||||||
|
if(delProfileList.size() != 0) {
|
||||||
|
kakaoVO.setProfileId(delProfileList.get(0).getProfileId());
|
||||||
|
kakaoVO.setDeleteYn("N");
|
||||||
|
updateKakaoProfileStatus(kakaoVO);
|
||||||
|
returnVO.setBizReturnMsg("삭제 발신프로필의 복구가 완료 되었습니다.");
|
||||||
|
}else {
|
||||||
|
kakaoApiService.insertKakaoProfileInfo(kakaoVO);
|
||||||
|
returnVO.setBizReturnMsg("발신프로필의 등록이 완료 되었습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return returnVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -96,7 +96,10 @@ public class KakaoAlimTalkController {
|
|||||||
|
|
||||||
KakaoReturnVO tmpProfileVO = kakaoApiProfile.kakaoApiProfileList(kakaoProfileVO);
|
KakaoReturnVO tmpProfileVO = kakaoApiProfile.kakaoApiProfileList(kakaoProfileVO);
|
||||||
|
|
||||||
resultApiProfileList.add(tmpProfileVO);
|
/* API를 통하여 정상적으로 조회된 프로필만 add 처리 */
|
||||||
|
if("200".equals(tmpProfileVO.getBizReturnCode())) {
|
||||||
|
resultApiProfileList.add(tmpProfileVO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,21 +140,8 @@ public class KakaoAlimTalkController {
|
|||||||
|
|
||||||
KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileToken(kakaoVO); //발신프로필 인증 토큰 요청하기
|
KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileToken(kakaoVO); //발신프로필 인증 토큰 요청하기
|
||||||
|
|
||||||
String bizReturnCd = kakaoInfo.getBizReturnCode();
|
|
||||||
String bizReturnMsg = kakaoInfo.getBizReturnMsg();
|
|
||||||
|
|
||||||
List<KakaoVO> delProfileList = new ArrayList<KakaoVO>();
|
|
||||||
if(bizReturnCd.equals("310") && bizReturnMsg.equals("이미 등록되어 있는 발신프로필 입니다")) {
|
|
||||||
|
|
||||||
kakaoVO.setUserId(userId);
|
|
||||||
delProfileList = kakaoAlimTalkService.selectDeleteProfileInfo(kakaoVO);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int listSize = delProfileList.size();
|
|
||||||
modelAndView.addObject("kakaoInfo", kakaoInfo);
|
modelAndView.addObject("kakaoInfo", kakaoInfo);
|
||||||
modelAndView.addObject("result", "success");
|
modelAndView.addObject("result", "success");
|
||||||
modelAndView.addObject("delInfoCnt", listSize);
|
|
||||||
|
|
||||||
}catch(Exception ex){
|
}catch(Exception ex){
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
@ -269,68 +259,14 @@ public class KakaoAlimTalkController {
|
|||||||
kakaoVO.setLastUpdusrId(userId);
|
kakaoVO.setLastUpdusrId(userId);
|
||||||
KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileCreate(kakaoVO);
|
KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileCreate(kakaoVO);
|
||||||
|
|
||||||
String bizReturnCd = kakaoInfo.getBizReturnCode();
|
if("200".equals(kakaoInfo.getBizReturnCode())) {
|
||||||
String bizReturnMsg = kakaoInfo.getBizReturnMsg();
|
kakaoVO.setSenderKey(kakaoInfo.getSenderKey());
|
||||||
|
KakaoReturnVO internalReuslt = kakaoAlimTalkService.createKaKaoProfile(kakaoVO);
|
||||||
System.out.println(bizReturnCd);
|
kakaoInfo.setBizReturnMsg(internalReuslt.getBizReturnMsg());
|
||||||
System.out.println(bizReturnMsg);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 기존에 등록된 발신프로필이라고 결과가 오는 경우 데이터베이스에서 삭제 기록을 조회해 본다.
|
|
||||||
* 삭제 기록이 있는 경우 복구를 해주고(deleteYn 값을 'N'으로 변경)
|
|
||||||
* 기록이 없는 경우 타 사이트에 등록되었을 수 있음.
|
|
||||||
*
|
|
||||||
* */
|
|
||||||
|
|
||||||
List<KakaoVO> delProfileList = new ArrayList<KakaoVO>();
|
|
||||||
if((bizReturnCd.equals("509") && bizReturnMsg.equals("이미 사용중인 카카오톡 채널입니다.")) || (bizReturnCd.equals("310") && bizReturnMsg.equals("이미 등록되어 있는 발신프로필 입니다"))) {
|
|
||||||
|
|
||||||
delProfileList = kakaoAlimTalkService.selectDeleteProfileInfo(kakaoVO);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//삭제처리된 발신프로필이 있는 경우
|
|
||||||
if(delProfileList != null && delProfileList.size() > 0) {
|
|
||||||
|
|
||||||
int resultCnt = 0;
|
|
||||||
for(int i=0; i< delProfileList.size(); i++) {
|
|
||||||
|
|
||||||
KakaoVO tmpKakaoVO = new KakaoVO();
|
|
||||||
tmpKakaoVO.setUserId(userId);
|
|
||||||
tmpKakaoVO.setProfileId(delProfileList.get(i).getProfileId());
|
|
||||||
tmpKakaoVO.setDeleteYn("N");
|
|
||||||
|
|
||||||
int count = kakaoAlimTalkService.updateKakaoProfileStatus(tmpKakaoVO);
|
|
||||||
|
|
||||||
resultCnt = resultCnt + count;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
KakaoReturnVO kakaoReturnVO = new KakaoReturnVO();
|
|
||||||
if(resultCnt > 0) {
|
|
||||||
|
|
||||||
kakaoReturnVO.setBizReturnCode("200");
|
|
||||||
kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구가 완료 되었습니다.");
|
|
||||||
modelAndView.addObject("kakaoInfo", kakaoReturnVO);
|
|
||||||
modelAndView.addObject("result", "success");
|
|
||||||
|
|
||||||
}else {
|
|
||||||
|
|
||||||
kakaoReturnVO.setBizReturnCode("200");
|
|
||||||
kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구에 오류가 발생하였습니다.");
|
|
||||||
modelAndView.addObject("kakaoInfo", kakaoReturnVO);
|
|
||||||
modelAndView.addObject("result", "zeroUpdate");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}else {//삭제된 내역이 없는 경우 타 사이트에 발신프로필이 등록되어 있을 수 있다.
|
|
||||||
|
|
||||||
modelAndView.addObject("kakaoInfo", kakaoInfo);
|
|
||||||
modelAndView.addObject("result", "success");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
modelAndView.addObject("kakaoInfo", kakaoInfo);
|
||||||
|
modelAndView.addObject("result", "success");
|
||||||
|
|
||||||
}
|
}
|
||||||
}catch(Exception ex){
|
}catch(Exception ex){
|
||||||
|
|||||||
@ -841,13 +841,13 @@ public class KakaoAlimTalkSendController {
|
|||||||
modelAndView.setViewName("jsonView");
|
modelAndView.setViewName("jsonView");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
// LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
// String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
if(userId == "") {
|
// if(userId == "") {
|
||||||
modelAndView.addObject("result", "notLogin");
|
// modelAndView.addObject("result", "notLogin");
|
||||||
return modelAndView;
|
// return modelAndView;
|
||||||
}else {
|
// }else {
|
||||||
|
|
||||||
KakaoReturnVO kakaoTemplateTempList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO);
|
KakaoReturnVO kakaoTemplateTempList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO);
|
||||||
|
|
||||||
@ -863,7 +863,7 @@ public class KakaoAlimTalkSendController {
|
|||||||
|
|
||||||
modelAndView.addObject("kakaoTemplateList", kakaoTemplateTempList);
|
modelAndView.addObject("kakaoTemplateList", kakaoTemplateTempList);
|
||||||
modelAndView.addObject("result", "success");
|
modelAndView.addObject("result", "success");
|
||||||
}
|
// }
|
||||||
}catch(Exception ex){
|
}catch(Exception ex){
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select"));
|
modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select"));
|
||||||
|
|||||||
@ -305,6 +305,9 @@ public class KakaoAlimTalkTemplateController {
|
|||||||
|
|
||||||
KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
|
KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
|
||||||
|
|
||||||
|
System.out.println("kakaoTemplateInfo :; "+ kakaoTemplateInfo);
|
||||||
|
|
||||||
|
|
||||||
String kakaoButtonTypeDs = "";
|
String kakaoButtonTypeDs = "";
|
||||||
for(int i=0; i < kakaoTemplateInfo.getButtonList().size(); i++) {
|
for(int i=0; i < kakaoTemplateInfo.getButtonList().size(); i++) {
|
||||||
String buttonType = kakaoTemplateInfo.getButtonList().get(i).getLinkType();
|
String buttonType = kakaoTemplateInfo.getButtonList().get(i).getLinkType();
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import java.util.stream.Collectors;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -29,8 +30,10 @@ import itn.let.mail.service.StatusResponse;
|
|||||||
import itn.let.mjo.mjocommon.MjonCommon;
|
import itn.let.mjo.mjocommon.MjonCommon;
|
||||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||||
import itn.let.mjo.msg.service.impl.MjonMsgDAO;
|
import itn.let.mjo.msg.service.impl.MjonMsgDAO;
|
||||||
|
import itn.let.mjo.msgdata.service.MjonMsgDataService;
|
||||||
import itn.let.module.base.PriceAndPoint;
|
import itn.let.module.base.PriceAndPoint;
|
||||||
import itn.let.uss.umt.service.EgovUserManageService;
|
import itn.let.uss.umt.service.EgovUserManageService;
|
||||||
|
import itn.let.uss.umt.service.UserManageVO;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -56,6 +59,9 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
|
|
||||||
@Resource(name="kakaoAlimTalkDAO")
|
@Resource(name="kakaoAlimTalkDAO")
|
||||||
private KakaoAlimTalkDAO kakaoAlimTalkDAO;
|
private KakaoAlimTalkDAO kakaoAlimTalkDAO;
|
||||||
|
|
||||||
|
@Resource(name = "MjonMsgDataService")
|
||||||
|
private MjonMsgDataService mjonMsgDataService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
KakaoSendUtil kakaoSendUtil;
|
KakaoSendUtil kakaoSendUtil;
|
||||||
@ -75,20 +81,32 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString());
|
log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString());
|
||||||
|
|
||||||
|
|
||||||
|
// if(1==1) {
|
||||||
|
// throw new RuntimeException("강제로 발생시킨 예외");
|
||||||
|
// }
|
||||||
|
|
||||||
// 측정할 메소드 호출 전 시간 기록
|
// 측정할 메소드 호출 전 시간 기록
|
||||||
Instant start = Instant.now();
|
Instant start = Instant.now();
|
||||||
// KakaoSendAdvcVO
|
// KakaoSendAdvcVO
|
||||||
|
|
||||||
Map<String, Object> returnMap = new HashMap<>();
|
Map<String, Object> returnMap = new HashMap<>();
|
||||||
|
Map<String, Object> apiReturnMap = new HashMap<>();
|
||||||
|
|
||||||
|
String userId = "";
|
||||||
|
if("A".equals(kakaoVO.getSendKind()))
|
||||||
|
{
|
||||||
|
userId = kakaoVO.getMberId();
|
||||||
|
}else {
|
||||||
|
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
||||||
|
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
||||||
|
: null;
|
||||||
|
userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
|
if (userId.equals("")) {
|
||||||
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
||||||
|
}
|
||||||
|
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
|
||||||
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
|
||||||
: null;
|
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
|
||||||
|
|
||||||
if (userId.equals("")) {
|
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kakaoVO.setUserId(userId);
|
kakaoVO.setUserId(userId);
|
||||||
@ -101,7 +119,7 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
request.getSession().invalidate();
|
request.getSession().invalidate();
|
||||||
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
||||||
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
||||||
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 친구톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 친구톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.", "STAT_1070");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -111,30 +129,34 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
if(kakaoSendUtil.isRestrictedFriendTalkTime(kakaoSendUtil.resolveBaseDate(kakaoVO))) {
|
if(kakaoSendUtil.isRestrictedFriendTalkTime(kakaoSendUtil.resolveBaseDate(kakaoVO))) {
|
||||||
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST,
|
return new StatusResponse(HttpStatus.BAD_REQUEST,
|
||||||
"친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다.");
|
"친구톡은 20시 50분부터 익일 08시까지 발송이 제한됩니다.","STAT_2080");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** @isHolidayNotified
|
/** @isHolidayNotified
|
||||||
* @false : 알림 X
|
* @false : 알림 X
|
||||||
* @true : 알림 O */
|
* @true : 알림 O */
|
||||||
boolean isNotified = mjonCommon.processUserAndCheckAT(kakaoVO);
|
boolean isHolidayNotified = mjonCommon.processUserAndCheckFT(kakaoVO);
|
||||||
|
|
||||||
|
|
||||||
|
UserManageVO userManageVO = mjonCommon.getUserManageInfo(userId);
|
||||||
|
|
||||||
|
|
||||||
|
// 스팸관련 키워드 select
|
||||||
|
List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList();
|
||||||
|
|
||||||
/** @카카오톡 전송 list 셋팅 -------------------------------------------*/
|
/** @카카오톡 전송 list 셋팅 -------------------------------------------*/
|
||||||
List<KakaoSendAdvcVO> kakaoSendAdvcListVO = kakaoSendUtil.populateSendListsFT(kakaoVO, isNotified, statusResponse);
|
List<KakaoSendAdvcVO> kakaoSendAdvcListVO = kakaoSendUtil.populateSendListsFT(kakaoVO, isHolidayNotified, statusResponse, userManageVO, resultSpamTxt);
|
||||||
if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) {
|
if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) {
|
||||||
log.error(" + populateSendLists 처리 중 오류 발생: {}", statusResponse.getMessage());
|
log.error(" + populateSendLists 처리 중 오류 발생: {}", statusResponse.getMessage());
|
||||||
return statusResponse;
|
return statusResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** @전송금액 확인 --------------------------------------------------*/
|
/** @전송금액 확인 --------------------------------------------------*/
|
||||||
if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
|
if (!kakaoSendUtil.isCashSufficient(userId, kakaoSendAdvcListVO)) {
|
||||||
log.error("Insufficient balance for message sending.");
|
log.error("Insufficient balance for message sending.");
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.");
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.", "STAT_1060");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -152,6 +174,8 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
// 임시
|
// 임시
|
||||||
List<String> nextMsgGroupIdA = new ArrayList<>();
|
List<String> nextMsgGroupIdA = new ArrayList<>();
|
||||||
// 대안: entrySet() 직접 사용
|
// 대안: entrySet() 직접 사용
|
||||||
|
String apiMsgGroupId = "";
|
||||||
|
String apiMsgType = "";
|
||||||
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
|
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
|
||||||
// entry 사용
|
// entry 사용
|
||||||
|
|
||||||
@ -159,7 +183,15 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
|
|
||||||
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
|
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
|
||||||
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
||||||
|
|
||||||
|
// api 전달 값
|
||||||
|
apiMsgGroupId = StringUtils.isNotEmpty(apiMsgGroupId)
|
||||||
|
? apiMsgGroupId + "," + nextMsgGroupId
|
||||||
|
: nextMsgGroupId;
|
||||||
|
|
||||||
|
apiMsgType = StringUtils.isNotEmpty(apiMsgType)
|
||||||
|
? apiMsgType + "," + kakaoSendAdvcListVO.get(0).getMsgType()
|
||||||
|
: kakaoSendAdvcListVO.get(0).getMsgType();
|
||||||
|
|
||||||
// 발송 데이터 삽입
|
// 발송 데이터 삽입
|
||||||
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList);
|
int instCnt = kakaoSendUtil.insertKakaoData_advc(groupedMsgList);
|
||||||
@ -189,7 +221,9 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
|
|
||||||
/** @SLACK발송 */
|
/** @SLACK발송 */
|
||||||
/** @발송조건이되면 발송 */
|
/** @발송조건이되면 발송 */
|
||||||
if(isNotified) {
|
if(isHolidayNotified
|
||||||
|
&& ("Y".equals(userManageVO.getAtSmishingYn()) || "Y".equals(kakaoVO.getAtDelayYn()))
|
||||||
|
) {
|
||||||
mjonCommon.getAdminKakaoAtSendSlack(sendVO);
|
mjonCommon.getAdminKakaoAtSendSlack(sendVO);
|
||||||
}else if("Y".equals(kakaoVO.getAtSmishingYn())){
|
}else if("Y".equals(kakaoVO.getAtSmishingYn())){
|
||||||
/** @발송조건이 안되면 DB INSERT */
|
/** @발송조건이 안되면 DB INSERT */
|
||||||
@ -212,6 +246,12 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apiReturnMap.put("resultSts", instTotalCnt);
|
||||||
|
// 그룹 ID
|
||||||
|
apiReturnMap.put("msgGroupId", apiMsgGroupId);
|
||||||
|
// 메세지 타입
|
||||||
|
apiReturnMap.put("msgType", apiMsgType);
|
||||||
|
|
||||||
returnMap.put("resultSts", instTotalCnt);
|
returnMap.put("resultSts", instTotalCnt);
|
||||||
returnMap.put("reserYn", kakaoVO.getReserveYn());
|
returnMap.put("reserYn", kakaoVO.getReserveYn());
|
||||||
returnMap.put("groupIds", nextMsgGroupIdA);
|
returnMap.put("groupIds", nextMsgGroupIdA);
|
||||||
@ -242,6 +282,9 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem
|
|||||||
|
|
||||||
statusResponse.setStatus(HttpStatus.OK);
|
statusResponse.setStatus(HttpStatus.OK);
|
||||||
statusResponse.setObject(returnMap);
|
statusResponse.setObject(returnMap);
|
||||||
|
apiReturnMap.put("result", HttpStatus.OK);
|
||||||
|
apiReturnMap.put("message", "전송이 완료되었습니다.");
|
||||||
|
statusResponse.setApiReturn(apiReturnMap);
|
||||||
|
|
||||||
return statusResponse;
|
return statusResponse;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -199,19 +199,23 @@ public class KakaoFriendsTalkTemplateController {
|
|||||||
modelAndView.setViewName("jsonView");
|
modelAndView.setViewName("jsonView");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
|
||||||
|
|
||||||
if(StringUtils.isEmpty(userId)) { //KISA 보안취약점 조치 (2018-12-10, 이정은)
|
if(!"A".equals(kakaoVO.getSendKind())) {
|
||||||
return ResponseEntity.ok(
|
|
||||||
new StatusResponse(HttpStatus.UNAUTHORIZED
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
, "로그인을 하셔야 이용 가능합니다."
|
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
, LocalDateTime.now()
|
|
||||||
)
|
if(StringUtils.isEmpty(userId)) {
|
||||||
);
|
return ResponseEntity.ok(
|
||||||
|
new StatusResponse(HttpStatus.UNAUTHORIZED
|
||||||
|
, "로그인을 하셔야 이용 가능합니다."
|
||||||
|
, LocalDateTime.now()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
final Map<String, MultipartFile> files = multiRequest.getFileMap();
|
final Map<String, MultipartFile> files = multiRequest.getFileMap();
|
||||||
/* if (!files.isEmpty()){
|
/* if (!files.isEmpty()){
|
||||||
|
|||||||
@ -34,6 +34,7 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
|
import itn.com.cmm.util.StringUtil;
|
||||||
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
||||||
import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
|
import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
|
||||||
import itn.let.kakao.user.sent.service.KakaoSentService;
|
import itn.let.kakao.user.sent.service.KakaoSentService;
|
||||||
@ -141,6 +142,12 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
|||||||
|
|
||||||
List<KakaoSentVO> resultList = new ArrayList<KakaoSentVO>();
|
List<KakaoSentVO> resultList = new ArrayList<KakaoSentVO>();
|
||||||
|
|
||||||
|
|
||||||
|
//수신번호 검색 시 번호 포멧 통일
|
||||||
|
if("4".equals(kakaoSentVO.getSearchCondition()) && StringUtil.isNotEmpty(kakaoSentVO.getSearchKeyword())) {
|
||||||
|
kakaoSentVO.setSearchKeyword(kakaoSentVO.getSearchKeyword().trim().replace("-", ""));
|
||||||
|
}
|
||||||
|
|
||||||
resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO);
|
resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO);
|
||||||
|
|
||||||
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
||||||
@ -653,7 +660,7 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
|||||||
data[i][1] = sdf.format(vo.getReqdate());
|
data[i][1] = sdf.format(vo.getReqdate());
|
||||||
|
|
||||||
//구분
|
//구분
|
||||||
data[i][2] = "H".equals(vo.getSendKind()) ? "WEB" : "API";
|
data[i][2] = "A".equals(vo.getSendKind()) ? "API" : "WEB";
|
||||||
|
|
||||||
//채널ID
|
//채널ID
|
||||||
data[i][3] = vo.getYellowId();
|
data[i][3] = vo.getYellowId();
|
||||||
|
|||||||
@ -272,6 +272,25 @@ public class KakaoSentController {
|
|||||||
|
|
||||||
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
||||||
|
|
||||||
|
if(StringUtils.isNotEmpty( mjonKakaoATResultVO.getFilePath1() )) {
|
||||||
|
List<FileInfoVO> fileInfos = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
// 확장자 제외한 파일명
|
||||||
|
String fileId = FilenameUtils.getBaseName(mjonKakaoATResultVO.getFilePath1());
|
||||||
|
|
||||||
|
// 파일 정보 조회
|
||||||
|
MjonMsgSentVO info = mjonMsgSentDAO.selectFileInfo(fileId);
|
||||||
|
|
||||||
|
// FileInfo 객체 생성 및 추가
|
||||||
|
FileInfoVO fileInfo = new FileInfoVO();
|
||||||
|
fileInfo.setAtchFileId(info.getAtchFileId());
|
||||||
|
fileInfo.setFileSn(info.getFileSn());
|
||||||
|
|
||||||
|
fileInfos.add(fileInfo);
|
||||||
|
model.addAttribute("fileInfos", fileInfos);
|
||||||
|
}
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
|
|
||||||
model.addAttribute("kakaoTemplateInfo", "");
|
model.addAttribute("kakaoTemplateInfo", "");
|
||||||
@ -1109,6 +1128,6 @@ public class KakaoSentController {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
// TODO: handle exception
|
// TODO: handle exception
|
||||||
}
|
}
|
||||||
return "web/kakao/sent/KakaoSentDetailPopAjax";
|
return "web/kakao/sent/KakaoSentDetailPhoneAjax";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -188,6 +188,29 @@ public class KakaoStepInfoController {
|
|||||||
return "/web/kakao/intrd/KakaoAllimtalkIntro";
|
return "/web/kakao/intrd/KakaoAllimtalkIntro";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Method Name : kakaotalkIntrdView
|
||||||
|
* @Project : mjon
|
||||||
|
* @Date : 2025. 8. 21
|
||||||
|
* @작성자 : 원영현
|
||||||
|
|
||||||
|
* @프로그램 설명 :카카오 알림톡, 친구토 통합 소개페이지
|
||||||
|
*/
|
||||||
|
@RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaotalkIntrdView.do"})
|
||||||
|
public String kakaotalkIntrdView(HttpServletRequest request,
|
||||||
|
@ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO ,
|
||||||
|
RedirectAttributes redirectAttributes) throws Exception {
|
||||||
|
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
|
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
if(userId == "") {
|
||||||
|
return "redirect:/web/user/login/login.do";
|
||||||
|
}
|
||||||
|
model.addAttribute("loginVO", loginVO);
|
||||||
|
|
||||||
|
return "/web/kakao/intrd/KakaotalkIntro";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XSS 방지 처리.
|
* XSS 방지 처리.
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
package itn.let.mail.service;
|
package itn.let.mail.service;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
||||||
@ -58,6 +60,8 @@ public class StatusResponse {
|
|||||||
|
|
||||||
private Object object;
|
private Object object;
|
||||||
|
|
||||||
|
private Object apiReturn;
|
||||||
|
|
||||||
private String messageTemp;
|
private String messageTemp;
|
||||||
|
|
||||||
private LocalDateTime timestamp;
|
private LocalDateTime timestamp;
|
||||||
@ -92,13 +96,47 @@ public class StatusResponse {
|
|||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public StatusResponse(HttpStatus status, String message, Object object) {
|
public StatusResponse(HttpStatus status, String message, Object object) {
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.object = object;
|
this.object = object;
|
||||||
}
|
}
|
||||||
|
public StatusResponse(HttpStatus status, String message
|
||||||
|
, Object object
|
||||||
|
, Object apiReturn
|
||||||
|
) {
|
||||||
|
this.status = status;
|
||||||
|
this.message = message;
|
||||||
|
this.object = object;
|
||||||
|
this.apiReturn = apiReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : statusResponseSet
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2025. 6. 24.
|
||||||
|
* @description :
|
||||||
|
* @return : StatusResponse
|
||||||
|
* @param statusResponse
|
||||||
|
* @param httpStatus
|
||||||
|
* @param msg
|
||||||
|
* @param statCode - statCode는 API RETURN를 위한 코드
|
||||||
|
* @return
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static StatusResponse statusResponseSet(StatusResponse statusResponse, HttpStatus httpStatus, String msg, String statCode ) {
|
||||||
|
statusResponse.setStatus(httpStatus);
|
||||||
|
statusResponse.setMessage(msg);
|
||||||
|
|
||||||
|
Map<String, Object> apiReturnMap = new HashMap<>();
|
||||||
|
apiReturnMap.put("statCode", statCode);
|
||||||
|
apiReturnMap.put("result", httpStatus.toString());
|
||||||
|
statusResponse.setApiReturn(apiReturnMap);
|
||||||
|
|
||||||
|
return statusResponse;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -74,7 +74,7 @@ public class AddrGroupController {
|
|||||||
private EgovMberManageService mberManageService;
|
private EgovMberManageService mberManageService;
|
||||||
|
|
||||||
@Resource(name = "KmcCertChecker")
|
@Resource(name = "KmcCertChecker")
|
||||||
private KmcCertChecker kmcCertCheck;
|
private KmcCertChecker kmcCertChecker;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 주소록 그룹 리스트
|
* 주소록 그룹 리스트
|
||||||
@ -954,7 +954,7 @@ public class AddrGroupController {
|
|||||||
mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAddrSubmitAjax.do");
|
mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAddrSubmitAjax.do");
|
||||||
mberCertPhoneVO.setPlusInfo(mberManageVO.getMberId());
|
mberCertPhoneVO.setPlusInfo(mberManageVO.getMberId());
|
||||||
|
|
||||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||||
|
|
||||||
modelAndView.addObject("tr_cert", certVO.getTr_cert());
|
modelAndView.addObject("tr_cert", certVO.getTr_cert());
|
||||||
modelAndView.addObject("tr_url", certVO.getTr_url());
|
modelAndView.addObject("tr_url", certVO.getTr_url());
|
||||||
@ -979,241 +979,16 @@ public class AddrGroupController {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
@RequestMapping("/web/cop/kmc/authRequestAddrSubmitAjax.do")
|
@RequestMapping("/web/cop/kmc/authRequestAddrSubmitAjax.do")
|
||||||
public String authRequestFindIdPwAjax(HttpServletRequest request, ModelMap model,
|
public String authRequestFindIdPwAjax(
|
||||||
@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
|
HttpServletRequest request
|
||||||
RedirectAttributes redirectAttributes) throws Exception {
|
, HttpServletResponse response
|
||||||
|
, ModelMap model
|
||||||
|
, @RequestParam Map<String, Object> commandMap
|
||||||
|
, @ModelAttribute("searchVO") KmcVO kmcVO
|
||||||
|
, RedirectAttributes redirectAttributes
|
||||||
|
) throws Exception {
|
||||||
|
|
||||||
String errMessage = ""; // 에러메세지
|
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||||
|
|
||||||
String rec_cert = ""; // 결과값(암호화)
|
|
||||||
String certNum = ""; // certNum
|
|
||||||
|
|
||||||
rec_cert = request.getParameter("rec_cert").trim();
|
|
||||||
certNum = request.getParameter("certNum").trim();
|
|
||||||
|
|
||||||
kmcVO.setRecCert(rec_cert);
|
|
||||||
kmcVO.setCertNum(certNum);
|
|
||||||
// 파라미터 유효성 검증
|
|
||||||
if (rec_cert.length() == 0 || certNum.length() == 0) {
|
|
||||||
errMessage = "비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 변수선언
|
|
||||||
// --------------------------------------------------------------------------------------------------------
|
|
||||||
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
|
||||||
k_certNum = certNum;
|
|
||||||
String date = ""; // 요청일시
|
|
||||||
String CI = ""; // 연계정보(CI)
|
|
||||||
String DI = ""; // 중복가입확인정보(DI)
|
|
||||||
String phoneNo = ""; // 휴대폰번호
|
|
||||||
String phoneCorp = ""; // 이동통신사
|
|
||||||
String birthDay = ""; // 생년월일
|
|
||||||
String gender = ""; // 성별
|
|
||||||
String nation = ""; // 내국인
|
|
||||||
String name = ""; // 성명
|
|
||||||
String M_name = ""; // 미성년자 성명
|
|
||||||
String M_birthDay = ""; // 미성년자 생년월일
|
|
||||||
String M_Gender = ""; // 미성년자 성별
|
|
||||||
String M_nation = ""; // 미성년자 내외국인
|
|
||||||
String result = ""; // 결과값
|
|
||||||
|
|
||||||
String certMet = ""; // 인증방법
|
|
||||||
String ip = ""; // ip주소
|
|
||||||
String plusInfo = "";
|
|
||||||
|
|
||||||
String encPara = "";
|
|
||||||
String encMsg1 = "";
|
|
||||||
String encMsg2 = "";
|
|
||||||
String msgChk = "";
|
|
||||||
|
|
||||||
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
|
||||||
|
|
||||||
// 02. 1차 복호화
|
|
||||||
// 수신된 certNum를 이용하여 복호화
|
|
||||||
rec_cert = seed.getDec(rec_cert, k_certNum);
|
|
||||||
|
|
||||||
// 03. 1차 파싱
|
|
||||||
int inf1 = rec_cert.indexOf("/", 0);
|
|
||||||
int inf2 = rec_cert.indexOf("/", inf1 + 1);
|
|
||||||
|
|
||||||
encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
|
|
||||||
encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
|
|
||||||
|
|
||||||
// 04. 위변조 검증
|
|
||||||
encMsg2 = seed.getMsg(encPara);
|
|
||||||
kmcVO.setEncMsg2(encMsg2);
|
|
||||||
if (encMsg2.equals(encMsg1)) {
|
|
||||||
msgChk = "Y";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!"Y".equals(msgChk)) {
|
|
||||||
errMessage = "비정상접근입니다.";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 05. 2차 복호화
|
|
||||||
rec_cert = seed.getDec(encPara, k_certNum);
|
|
||||||
kmcVO.setRecCert(rec_cert);
|
|
||||||
// 06. 2차 파싱
|
|
||||||
int info1 = rec_cert.indexOf("/", 0);
|
|
||||||
int info2 = rec_cert.indexOf("/", info1 + 1);
|
|
||||||
int info3 = rec_cert.indexOf("/", info2 + 1);
|
|
||||||
int info4 = rec_cert.indexOf("/", info3 + 1);
|
|
||||||
int info5 = rec_cert.indexOf("/", info4 + 1);
|
|
||||||
int info6 = rec_cert.indexOf("/", info5 + 1);
|
|
||||||
int info7 = rec_cert.indexOf("/", info6 + 1);
|
|
||||||
int info8 = rec_cert.indexOf("/", info7 + 1);
|
|
||||||
int info9 = rec_cert.indexOf("/", info8 + 1);
|
|
||||||
int info10 = rec_cert.indexOf("/", info9 + 1);
|
|
||||||
int info11 = rec_cert.indexOf("/", info10 + 1);
|
|
||||||
int info12 = rec_cert.indexOf("/", info11 + 1);
|
|
||||||
int info13 = rec_cert.indexOf("/", info12 + 1);
|
|
||||||
int info14 = rec_cert.indexOf("/", info13 + 1);
|
|
||||||
int info15 = rec_cert.indexOf("/", info14 + 1);
|
|
||||||
int info16 = rec_cert.indexOf("/", info15 + 1);
|
|
||||||
int info17 = rec_cert.indexOf("/", info16 + 1);
|
|
||||||
int info18 = rec_cert.indexOf("/", info17 + 1);
|
|
||||||
|
|
||||||
certNum = rec_cert.substring(0, info1);
|
|
||||||
kmcVO.setCertNum(certNum);
|
|
||||||
date = rec_cert.substring(info1 + 1, info2);
|
|
||||||
kmcVO.setDate(date);
|
|
||||||
CI = rec_cert.substring(info2 + 1, info3);
|
|
||||||
kmcVO.setCI(CI);
|
|
||||||
phoneNo = rec_cert.substring(info3 + 1, info4);
|
|
||||||
kmcVO.setPhoneNo(phoneNo);
|
|
||||||
phoneCorp = rec_cert.substring(info4 + 1, info5);
|
|
||||||
kmcVO.setPhoneCorp(phoneCorp);
|
|
||||||
birthDay = rec_cert.substring(info5 + 1, info6);
|
|
||||||
kmcVO.setBirthDay(birthDay);
|
|
||||||
gender = rec_cert.substring(info6 + 1, info7);
|
|
||||||
kmcVO.setGender(gender);
|
|
||||||
nation = rec_cert.substring(info7 + 1, info8);
|
|
||||||
kmcVO.setNation(nation);
|
|
||||||
name = rec_cert.substring(info8 + 1, info9);
|
|
||||||
kmcVO.setName(name);
|
|
||||||
result = rec_cert.substring(info9 + 1, info10);
|
|
||||||
kmcVO.setResult(result);
|
|
||||||
certMet = rec_cert.substring(info10 + 1, info11);
|
|
||||||
kmcVO.setCertMet(certMet);
|
|
||||||
ip = rec_cert.substring(info11 + 1, info12);
|
|
||||||
kmcVO.setIp(ip);
|
|
||||||
M_name = rec_cert.substring(info12 + 1, info13);
|
|
||||||
kmcVO.setMName(M_name);
|
|
||||||
M_birthDay = rec_cert.substring(info13 + 1, info14);
|
|
||||||
kmcVO.setMBirthDay(M_birthDay);
|
|
||||||
M_Gender = rec_cert.substring(info14 + 1, info15);
|
|
||||||
kmcVO.setMGender(M_Gender);
|
|
||||||
M_nation = rec_cert.substring(info15 + 1, info16);
|
|
||||||
kmcVO.setMNation(M_nation);
|
|
||||||
plusInfo = rec_cert.substring(info16 + 1, info17);
|
|
||||||
kmcVO.setPlusInfo(plusInfo);
|
|
||||||
DI = rec_cert.substring(info17 + 1, info18);
|
|
||||||
kmcVO.setDI(DI);
|
|
||||||
|
|
||||||
// 07. CI, DI 복호화
|
|
||||||
CI = seed.getDec(CI, k_certNum);
|
|
||||||
kmcVO.setCI(CI);
|
|
||||||
DI = seed.getDec(DI, k_certNum);
|
|
||||||
kmcVO.setDI(DI);
|
|
||||||
|
|
||||||
if ("Y".equals(result)) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------
|
|
||||||
String regex = "";
|
|
||||||
if (certNum.length() == 0 || certNum.length() > 40) {
|
|
||||||
errMessage = "요청번호 비정상.";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (date.length() != 14 || !paramChk(regex, date)) {
|
|
||||||
errMessage = "요청일시";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if (certMet.length() != 1 || !paramChk(regex, certMet)) {
|
|
||||||
errMessage = "본인인증방법 비정상" + certMet;
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo)) {
|
|
||||||
errMessage = "휴대폰번호 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if (phoneCorp.length() != 3 || !paramChk(regex, phoneCorp)) {
|
|
||||||
errMessage = "이동통신사 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (birthDay.length() != 8 || !paramChk(regex, birthDay)) {
|
|
||||||
errMessage = "생년월일 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (gender.length() != 1 || !paramChk(regex, gender)) {
|
|
||||||
errMessage = "성별 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (nation.length() != 1 || !paramChk(regex, nation)) {
|
|
||||||
errMessage = "내/외국인 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[\\sA-Za-z가-<2D>R.,-]*";
|
|
||||||
if (name.length() > 60 || !paramChk(regex, name)) {
|
|
||||||
errMessage = "성명 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if (result.length() != 1 || !paramChk(regex, result)) {
|
|
||||||
errMessage = "결과값 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[\\sA-Za-z가-?.,-]*";
|
|
||||||
if (M_name.length() != 0) {
|
|
||||||
if (M_name.length() > 60 || !paramChk(regex, M_name)) {
|
|
||||||
errMessage = "미성년자 성명 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (M_birthDay.length() != 0) {
|
|
||||||
if (M_birthDay.length() != 8 || !paramChk(regex, M_birthDay)) {
|
|
||||||
errMessage = "미성년자 생년월일 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (M_Gender.length() != 0) {
|
|
||||||
if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
|
|
||||||
errMessage = "미성년자 성별 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (M_nation.length() != 0) {
|
|
||||||
if (M_nation.length() != 1 || !paramChk(regex, M_nation)) {
|
|
||||||
errMessage = "미성년자 내/외국인 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// KMC 본인인증 로그
|
// KMC 본인인증 로그
|
||||||
AuthCertVO certVO = new AuthCertVO();
|
AuthCertVO certVO = new AuthCertVO();
|
||||||
|
|||||||
@ -28,5 +28,7 @@ public interface ApiCallInfoMngService {
|
|||||||
|
|
||||||
//api key & api info 모두 실제 삭제
|
//api key & api info 모두 실제 삭제
|
||||||
void deleteApiKeyInfoReal(ApiKeyVO apiKeyVO) throws Exception;
|
void deleteApiKeyInfoReal(ApiKeyVO apiKeyVO) throws Exception;
|
||||||
|
|
||||||
|
void udpateApiKeyInfoReal(ApiKeyVO apiKeyVO) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -43,4 +43,8 @@ public class ApiCallInfoMngDAO extends EgovComAbstractDAO{
|
|||||||
public void deleteApiCallInfoAll(ApiKeyVO apiKeyVO) throws Exception{
|
public void deleteApiCallInfoAll(ApiKeyVO apiKeyVO) throws Exception{
|
||||||
update("ApiCallInfoMngDAO.deleteApiCallInfoAll", apiKeyVO);
|
update("ApiCallInfoMngDAO.deleteApiCallInfoAll", apiKeyVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateApiCallInfoAll(ApiKeyVO apiKeyVO) throws Exception{
|
||||||
|
update("ApiCallInfoMngDAO.updateApiCallInfoAll", apiKeyVO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -65,5 +65,15 @@ public class ApiCallInfoMngServiceImpl extends EgovAbstractServiceImpl implement
|
|||||||
apiKeyMngDAO.deleteApiKeyReal(apiKeyVO);
|
apiKeyMngDAO.deleteApiKeyReal(apiKeyVO);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void udpateApiKeyInfoReal(ApiKeyVO apiKeyVO) throws Exception {
|
||||||
|
apiKeyVO.setUseYn("N");
|
||||||
|
apiCallInfoMngDAO.updateApiCallInfoAll(apiKeyVO);
|
||||||
|
|
||||||
|
//api key 삭제
|
||||||
|
apiKeyMngDAO.deleteApiKey(apiKeyVO);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -48,10 +48,6 @@ public class ApiKeyMngDAO extends EgovComAbstractDAO{
|
|||||||
return update("ApiKeyMngDAO.insertApiKey", apiKeyVO);
|
return update("ApiKeyMngDAO.insertApiKey", apiKeyVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteApiKeyReal(ApiKeyVO apiKeyVO) throws Exception{
|
|
||||||
update("ApiKeyMngDAO.deleteApiKeyReal", apiKeyVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<ApiKeyVO> selectApiKeyApplyStatus(ApiKeyVO apiKeyVO){
|
public List<ApiKeyVO> selectApiKeyApplyStatus(ApiKeyVO apiKeyVO){
|
||||||
return (List<ApiKeyVO>) list("ApiKeyMngDAO.selectApiKeyApplyStatus", apiKeyVO);
|
return (List<ApiKeyVO>) list("ApiKeyMngDAO.selectApiKeyApplyStatus", apiKeyVO);
|
||||||
}
|
}
|
||||||
@ -60,4 +56,8 @@ public class ApiKeyMngDAO extends EgovComAbstractDAO{
|
|||||||
return (int) select("ApiKeyMngDAO.selectMberApiKeyChk", apiKeyVO);
|
return (int) select("ApiKeyMngDAO.selectMberApiKeyChk", apiKeyVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deleteApiKeyReal(ApiKeyVO apiKeyVO) throws Exception{
|
||||||
|
update("ApiKeyMngDAO.deleteApiKeyReal", apiKeyVO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -471,8 +471,10 @@ public class ApiKeyMngController {
|
|||||||
ApiKeyVO apiKeyVO = new ApiKeyVO();
|
ApiKeyVO apiKeyVO = new ApiKeyVO();
|
||||||
apiKeyVO.setMberId(userId);
|
apiKeyVO.setMberId(userId);
|
||||||
apiKeyVO.setAccessNo(p_accessNo);
|
apiKeyVO.setAccessNo(p_accessNo);
|
||||||
|
|
||||||
apiCallInfoMngService.deleteApiKeyInfoReal(apiKeyVO);
|
// 2025.06.02 update로 수정
|
||||||
|
// apiCallInfoMngService.deleteApiKeyInfoReal(apiKeyVO);
|
||||||
|
apiCallInfoMngService.udpateApiKeyInfoReal(apiKeyVO);
|
||||||
|
|
||||||
modelAndView.addObject("message", "삭제 완료되었습니다.");
|
modelAndView.addObject("message", "삭제 완료되었습니다.");
|
||||||
modelAndView.addObject("result", "success");
|
modelAndView.addObject("result", "success");
|
||||||
|
|||||||
@ -38,5 +38,5 @@ public class MjonEventVO {
|
|||||||
private String point; //사용자 포인트 정보
|
private String point; //사용자 포인트 정보
|
||||||
private String userId; //사용자 아이디
|
private String userId; //사용자 아이디
|
||||||
private String frstRegisterId; //등록자 아이디
|
private String frstRegisterId; //등록자 아이디
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,8 @@ package itn.let.mjo.mjocommon;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -16,10 +18,8 @@ import org.apache.commons.httpclient.HttpStatus;
|
|||||||
import org.apache.commons.httpclient.methods.PostMethod;
|
import org.apache.commons.httpclient.methods.PostMethod;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import com.mysql.jdbc.StringUtils;
|
|
||||||
|
|
||||||
import egovframework.com.idgen.CustomIdGnrService;
|
import egovframework.com.idgen.CustomIdGnrService;
|
||||||
import egovframework.rte.fdl.cmmn.exception.FdlException;
|
import egovframework.rte.fdl.cmmn.exception.FdlException;
|
||||||
@ -27,17 +27,22 @@ import itn.com.cmm.MjonMsgSendVO;
|
|||||||
import itn.com.cmm.OptimalMsgResultDTO;
|
import itn.com.cmm.OptimalMsgResultDTO;
|
||||||
import itn.com.cmm.util.MsgSendUtils;
|
import itn.com.cmm.util.MsgSendUtils;
|
||||||
import itn.com.cmm.util.SlackMessageFormatUtil;
|
import itn.com.cmm.util.SlackMessageFormatUtil;
|
||||||
|
import itn.com.cmm.util.StringUtil;
|
||||||
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
|
import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
|
||||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||||
import itn.let.mail.service.StatusResponse;
|
import itn.let.mail.service.StatusResponse;
|
||||||
import itn.let.mjo.event.service.MjonEventService;
|
import itn.let.mjo.event.service.MjonEventService;
|
||||||
import itn.let.mjo.event.service.MjonEventVO;
|
import itn.let.mjo.event.service.MjonEventVO;
|
||||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||||
|
import itn.let.mjo.msg.service.impl.MjonMsgDAO;
|
||||||
|
import itn.let.mjo.msgdata.service.MjonMsgDataService;
|
||||||
|
import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
|
||||||
import itn.let.mjo.msgholiday.service.MsgAlarmSetVO;
|
import itn.let.mjo.msgholiday.service.MsgAlarmSetVO;
|
||||||
import itn.let.mjo.msgholiday.service.MsgHolidayService;
|
import itn.let.mjo.msgholiday.service.MsgHolidayService;
|
||||||
import itn.let.mjo.msgholiday.service.MsgHolidayVO;
|
import itn.let.mjo.msgholiday.service.MsgHolidayVO;
|
||||||
import itn.let.sym.site.service.EgovSiteManagerService;
|
import itn.let.sym.site.service.EgovSiteManagerService;
|
||||||
import itn.let.sym.site.service.JoinSettingVO;
|
import itn.let.sym.site.service.JoinSettingVO;
|
||||||
|
import itn.let.uat.uia.web.SendLogVO;
|
||||||
import itn.let.uss.umt.service.EgovUserManageService;
|
import itn.let.uss.umt.service.EgovUserManageService;
|
||||||
import itn.let.uss.umt.service.UserManageVO;
|
import itn.let.uss.umt.service.UserManageVO;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -70,6 +75,12 @@ public class MjonCommon {
|
|||||||
|
|
||||||
@Resource(name = "egovMjonMsgIdCGnrService")
|
@Resource(name = "egovMjonMsgIdCGnrService")
|
||||||
private CustomIdGnrService idgenMsgCId;
|
private CustomIdGnrService idgenMsgCId;
|
||||||
|
|
||||||
|
@Resource(name = "mjonMsgDAO")
|
||||||
|
private MjonMsgDAO mjonMsgDAO;
|
||||||
|
|
||||||
|
@Resource(name = "MjonMsgDataService")
|
||||||
|
private MjonMsgDataService mjonMsgDataService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -533,12 +544,12 @@ private int parseIntOrDefault(String value, int defaultValue) {
|
|||||||
UserManageVO userManageVO = getUserManageInfo(kakaoVO.getUserId());
|
UserManageVO userManageVO = getUserManageInfo(kakaoVO.getUserId());
|
||||||
|
|
||||||
// 기본값 처리된 사용자 정보와 문자 상태
|
// 기본값 처리된 사용자 정보와 문자 상태
|
||||||
String adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn();
|
String adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); // 법인폰 알람 여부 - Y : ON
|
||||||
String atSmishingYn = userManageVO.getAtSmishingYn();
|
String atSmishingYn = userManageVO.getAtSmishingYn(); // 스미싱 의심 - Y : ON
|
||||||
|
|
||||||
// 조건 체크
|
// 조건 체크
|
||||||
if ("Y".equals(adminSmsNoticeYn) || "Y".equals(atSmishingYn)) {
|
if ("Y".equals(adminSmsNoticeYn) || "Y".equals(atSmishingYn)) {
|
||||||
kakaoVO.setAtSmishingYn("Y"); // MjonMsgVO에 스미싱 정보 설정
|
kakaoVO.setAtSmishingYn("Y"); // MjonMsgVO에 스미싱 정보 설정 - Y면 디
|
||||||
|
|
||||||
// 스미싱 알림 처리
|
// 스미싱 알림 처리
|
||||||
return handleSmishingAlert(); // 알림 처리 결과 반환
|
return handleSmishingAlert(); // 알림 처리 결과 반환
|
||||||
@ -546,6 +557,46 @@ private int parseIntOrDefault(String value, int defaultValue) {
|
|||||||
|
|
||||||
return false; // 알림 처리되지 않음
|
return false; // 알림 처리되지 않음
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : processUserAndCheckFT
|
||||||
|
* @author : 이호영
|
||||||
|
* @date : 2025. 8. 21.
|
||||||
|
* @description :
|
||||||
|
* @return : boolean
|
||||||
|
* @param kakaoVO
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*
|
||||||
|
* @isHolidayNotified
|
||||||
|
* @false : 알림 X
|
||||||
|
* @true : 알림 O
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public boolean processUserAndCheckFT(KakaoVO kakaoVO) throws Exception {
|
||||||
|
// UserManageVO userManageVO = getUserManageInfo(kakaoVO.getUserId());
|
||||||
|
// kakaoVO.setAtSmishingYn("N"); // MjonMsgVO에 스미싱 정보 설정 - Y면 딜레이 처리 됨
|
||||||
|
|
||||||
|
|
||||||
|
// 기본값 처리된 사용자 정보와 문자 상태
|
||||||
|
// String adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); // 법인폰 알람 여부 - Y : ON
|
||||||
|
// String atSmishingYn = userManageVO.getAtSmishingYn(); // 스미싱 의심 - Y : ON !== mj_msg_group_data와 다른거임
|
||||||
|
|
||||||
|
// 조건 체크
|
||||||
|
// if ("Y".equals(adminSmsNoticeYn) || "Y".equals(atSmishingYn)) {
|
||||||
|
// if ("Y".equals(atSmishingYn)) {
|
||||||
|
// Boolean B_return = handleSmishingAlert();
|
||||||
|
// if(B_return) { // true면 알림ON이라서 스미싱Yn을 Y로 설정 아니면 N / 나머지는 로직에서 처리
|
||||||
|
// kakaoVO.setAtSmishingYn(atSmishingYn); // MjonMsgVO에 스미싱 정보 설정 - Y면 딜레이 처리 됨
|
||||||
|
// }
|
||||||
|
// 스미싱 알림 처리
|
||||||
|
// return B_return; // 알림 처리 결과 반환
|
||||||
|
// }
|
||||||
|
|
||||||
|
return handleSmishingAlert(); // 알림 처리되지 않음
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 사용자 정보 조회 및 기본값 처리
|
// 사용자 정보 조회 및 기본값 처리
|
||||||
public UserManageVO getUserManageInfo(String userId) throws Exception {
|
public UserManageVO getUserManageInfo(String userId) throws Exception {
|
||||||
@ -744,8 +795,120 @@ private int parseIntOrDefault(String value, int defaultValue) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendMessagesIfOverFifty(int cnt, String callTo) throws Exception {
|
||||||
|
if(
|
||||||
|
cnt >= 50 //50건 이상일 경우만 발송
|
||||||
|
&& StringUtil.isNotEmpty(callTo) // null, "" 체크
|
||||||
|
&& callTo.startsWith("010") // 010으로 시작하는 휴대폰번호일 경우
|
||||||
|
&& "Y".equals(selectSmsNotiIfOverFiftySetting()) // 안내문자 발송 on 인경우만
|
||||||
|
&& !sysMsgTodaySendYn(callTo) // 금일 1회 이상 보낸 이력없을 경우만 발송
|
||||||
|
) {
|
||||||
|
|
||||||
|
//50건이상 발송 안내문자 구분값 = 01
|
||||||
|
String sendMsgType = "01";
|
||||||
|
String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||||
|
String contents = "[인터넷 대량문자발송안내] 문자온에서 "+ callTo + " 번호로 " + today + "에 인터넷 대량 문자(50통 이상)가 발송되었습니다."
|
||||||
|
+ "\n※ 번호도용이 의심되는 경우, 이용 중인 이동통신사의 휴대전화 번호도용 문자차단 부가서비스(무료)에 가입하여 피해를 예방할 수 있습니다.";
|
||||||
|
this.sendSysMsg(
|
||||||
|
"15518011"
|
||||||
|
, callTo
|
||||||
|
, contents
|
||||||
|
, sendMsgType
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method Name : sendSysMsg
|
||||||
|
* Description : 관리자 안내 문자 공통
|
||||||
|
*
|
||||||
|
* @param callFrom : 발신번호
|
||||||
|
* @param callTo : 수신번호
|
||||||
|
* @param contents : 내용
|
||||||
|
* @param sendMsgType : 발신내용 타입 - 01: 대량문자발송안내
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
* @return MjonMsgReturnVO 설명
|
||||||
|
*/
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public MjonMsgReturnVO sendSysMsg(
|
||||||
|
String callFrom
|
||||||
|
, String callTo
|
||||||
|
, String contents
|
||||||
|
, String sendMsgType
|
||||||
|
) throws Exception {
|
||||||
|
|
||||||
|
//결과 vo
|
||||||
|
MjonMsgReturnVO returnVO = new MjonMsgReturnVO();
|
||||||
|
|
||||||
|
MjonMsgVO mjonMsgVO = new MjonMsgVO();
|
||||||
|
mjonMsgVO.setSmsTxt(contents);
|
||||||
|
mjonMsgVO.setReserveYn("N");
|
||||||
|
// 시스템 문자발송 번호
|
||||||
|
// mjonMsgVO.setCallFrom("15518011");
|
||||||
|
mjonMsgVO.setCallFrom(callFrom);
|
||||||
|
mjonMsgVO.setCallTo(callTo);
|
||||||
|
|
||||||
|
mjonMsgVO.setUserId("system");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 본문길이에 따른 단문/장문 구분
|
||||||
|
* 단문 4
|
||||||
|
* 장문 6
|
||||||
|
* 2000자 이상 invalid
|
||||||
|
*/
|
||||||
|
String msgType = MsgSendUtils.getMsgTypeWithByteValidation(new MjonMsgSendVO(), contents);//
|
||||||
|
mjonMsgVO.setMsgType(msgType);
|
||||||
|
|
||||||
|
// MsgDiv - S: 단문, L: 장문, P: 그림
|
||||||
|
if("4".equalsIgnoreCase(msgType)) {
|
||||||
|
mjonMsgVO.setMsgDiv("S");
|
||||||
|
}else if("6".equalsIgnoreCase(msgType)) {
|
||||||
|
mjonMsgVO.setMsgDiv("L");
|
||||||
|
}
|
||||||
|
else { // invalid
|
||||||
|
returnVO.setMsgGroupId("");
|
||||||
|
returnVO.setSendMsgCnt("0"); // 발송 건수 저장
|
||||||
|
returnVO.setSendMsgBlockCnt("0"); // 수신차단 건수 저장
|
||||||
|
return returnVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 문자타입별 대표전송사 정보
|
||||||
|
MjonMsgVO mjonMsgVO2 = new MjonMsgVO();
|
||||||
|
mjonMsgVO2 = mjonMsgDAO.selectRepMsgAgetnInfo(mjonMsgVO);
|
||||||
|
// 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술
|
||||||
|
mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택
|
||||||
|
// 전송금액
|
||||||
|
mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액
|
||||||
|
mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액
|
||||||
|
|
||||||
|
returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO);
|
||||||
|
|
||||||
|
// 시스템 발송 로그
|
||||||
|
SendLogVO sendLogVO = new SendLogVO();
|
||||||
|
// SendType 1:문자로 발송 2:이메일로 발송
|
||||||
|
sendLogVO.setSendId(returnVO.getMsgGroupId());
|
||||||
|
sendLogVO.setSendType("1");
|
||||||
|
sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom());
|
||||||
|
sendLogVO.setReceive(mjonMsgVO.getCallTo());
|
||||||
|
sendLogVO.setContents(contents);
|
||||||
|
sendLogVO.setSendMsgType(sendMsgType);
|
||||||
|
|
||||||
|
mjonMsgDataService.insertSysMsgLog(sendLogVO);
|
||||||
|
|
||||||
|
return returnVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Boolean sysMsgTodaySendYn(String callTo) throws Exception {
|
||||||
|
SendLogVO sendLogVO = new SendLogVO();
|
||||||
|
sendLogVO.setReceive(callTo);
|
||||||
|
|
||||||
|
return mjonMsgDataService.selectSysMsgTodaySendYn(sendLogVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String selectSmsNotiIfOverFiftySetting() throws Exception {
|
||||||
|
JoinSettingVO joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
|
||||||
|
return joinSettingVO.getSmsNotiIfOverFifty();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import lombok.Builder;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
@Getter
|
@Getter
|
||||||
@ -19,6 +20,7 @@ import lombok.Setter;
|
|||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@ToString
|
||||||
public class MjonMsgVO extends ComDefaultVO{
|
public class MjonMsgVO extends ComDefaultVO{
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -93,6 +95,7 @@ public class MjonMsgVO extends ComDefaultVO{
|
|||||||
private String reserveYn ; //예약문자 여부
|
private String reserveYn ; //예약문자 여부
|
||||||
private String reserveCYn ; //예약문자 취소 여부
|
private String reserveCYn ; //예약문자 취소 여부
|
||||||
private String cancelDate; //예약 취소 일자
|
private String cancelDate; //예약 취소 일자
|
||||||
|
private String msgResult; //문자 발송결과 10:성공 20:실패 30:대체문자 대기 40:대체문자 성공 50:대체문자 실패
|
||||||
|
|
||||||
|
|
||||||
private String sendRate; // 전송 배분률
|
private String sendRate; // 전송 배분률
|
||||||
@ -316,5 +319,8 @@ public class MjonMsgVO extends ComDefaultVO{
|
|||||||
private String detailType;
|
private String detailType;
|
||||||
|
|
||||||
private List<MjonMsgSendVO> mjonMsgSendVOList = new ArrayList<>();
|
private List<MjonMsgSendVO> mjonMsgSendVOList = new ArrayList<>();
|
||||||
|
|
||||||
|
private String cmId; //다우기술 cmId
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -211,9 +211,9 @@ public class MjonMsgCampainDataController {
|
|||||||
|
|
||||||
// 외부에서 선거발송 페이지로 들어오는걸 막음
|
// 외부에서 선거발송 페이지로 들어오는걸 막음
|
||||||
// 20250102 이호영
|
// 20250102 이호영
|
||||||
if (!"localhost".equals(hostName) && !"119.193.215.98".equals(hostName)) {
|
/*if (!"localhost".equals(hostName) && !"119.193.215.98".equals(hostName)) {
|
||||||
return "redirect:/web/mjon/msgdata/selectMsgDataView.do";
|
return "redirect:/web/mjon/msgdata/selectMsgDataView.do";
|
||||||
}
|
}*/
|
||||||
|
|
||||||
String categoryType = cateCode.getCateType();
|
String categoryType = cateCode.getCateType();
|
||||||
|
|
||||||
|
|||||||
@ -200,9 +200,17 @@ public class MjonMsgCampainTWDataController {
|
|||||||
|
|
||||||
// 외부에서 선거발송 페이지로 들어오는걸 막음
|
// 외부에서 선거발송 페이지로 들어오는걸 막음
|
||||||
// 20250102 이호영
|
// 20250102 이호영
|
||||||
if (!"localhost".equals(hostName)) {
|
System.out.println("hostName :: "+ hostName);
|
||||||
return "redirect:/web/mjon/msgdata/selectMsgDataView.do";
|
System.out.println("hostName :: "+ hostName);
|
||||||
}
|
System.out.println("hostName :: "+ hostName);
|
||||||
|
System.out.println("hhhhhhhh hostName :: "+ hostName);
|
||||||
|
System.out.println("hostName :: "+ hostName);
|
||||||
|
System.out.println("hostName :: "+ hostName);
|
||||||
|
// if (!"localhost".equals(hostName)
|
||||||
|
// && !"119.193.215.98".equals(hostName))
|
||||||
|
// {
|
||||||
|
// return "redirect:/web/mjon/msgdata/selectMsgDataView.do";
|
||||||
|
// }
|
||||||
|
|
||||||
String categoryType = cateCode.getCateType();
|
String categoryType = cateCode.getCateType();
|
||||||
|
|
||||||
|
|||||||
@ -190,7 +190,7 @@ public interface MjonMsgDataService {
|
|||||||
|
|
||||||
public MjonMsgReturnVO sendSysMsgData(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception;
|
public MjonMsgReturnVO sendSysMsgData(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception;
|
||||||
|
|
||||||
|
public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -403,6 +403,10 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception{
|
||||||
|
return (Boolean) select("mjonMsgDataDAO.selectSysMsgTodaySendYn",sendLogVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 다량 데이터를 Batch 처리로 MJ_MSG_DATA 테이블에 INSERT
|
* 다량 데이터를 Batch 처리로 MJ_MSG_DATA 테이블에 INSERT
|
||||||
@ -463,6 +467,23 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//대체문자 대기 목록 조회
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<MjonMsgVO> selectBizResendLogList()throws Exception{
|
||||||
|
|
||||||
|
return (List<MjonMsgVO>) list("mjonMsgDataDAO.selectBizResendLogList");
|
||||||
|
}
|
||||||
|
//대체문자 결과 반영
|
||||||
|
public int updateResendResult(MjonMsgVO mjonMsgVO)throws Exception{
|
||||||
|
|
||||||
|
return update("mjonMsgDataDAO.updateResendResult", mjonMsgVO);
|
||||||
|
}
|
||||||
|
//대체문자 로그 삭제
|
||||||
|
public int deleteBizResendLog(MjonMsgVO mjonMsgVO)throws Exception{
|
||||||
|
|
||||||
|
return delete("mjonMsgDataDAO.deleteBizResendLog", mjonMsgVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public Timestamp convertToTimestamp(String reqDate) {
|
public Timestamp convertToTimestamp(String reqDate) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -3946,26 +3946,39 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
@Override
|
@Override
|
||||||
public StatusResponse sendMsgData_advc(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception {
|
public StatusResponse sendMsgData_advc(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception {
|
||||||
|
|
||||||
log.info("mjonMsgVO [{}]", mjonMsgVO.getMjonMsgSendVOList().get(0).getPhone());
|
// log.info("mjonMsgVO [{}]", mjonMsgVO.getMjonMsgSendVOList().get(0).getPhone());
|
||||||
log.info(" :: sendMsgData_advc :: ");
|
log.info(" :: sendMsgData_advc :: ");
|
||||||
|
log.info(" + mjonMsgVO.toString() :: [{}]", mjonMsgVO.toString());
|
||||||
|
|
||||||
|
StatusResponse statusResponse = new StatusResponse();
|
||||||
|
|
||||||
Map<String, Object> returnMap = new HashMap<>();
|
Map<String, Object> returnMap = new HashMap<>();
|
||||||
|
Map<String, Object> apiReturnMap = new HashMap<>();
|
||||||
|
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
String userId = "";
|
||||||
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
if("A".equals(mjonMsgVO.getSendKind()))
|
||||||
: null;
|
{
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
userId = mjonMsgVO.getMberId();
|
||||||
|
}else {
|
||||||
|
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()
|
||||||
|
? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser()
|
||||||
|
: null;
|
||||||
|
userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
|
if (userId.equals("")) {
|
||||||
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
||||||
|
}
|
||||||
|
|
||||||
if (userId.equals("")) {
|
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용이 가능합니다.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mjonMsgVO.setUserId(userId);
|
mjonMsgVO.setUserId(userId);
|
||||||
|
|
||||||
// 발신번호가 등록된 유효한 번호인지 확인
|
// 발신번호가 등록된 유효한 번호인지 확인
|
||||||
int sendCallFromCnt = mjonMsgDAO.selectCallFromNumberChk(mjonMsgVO);
|
int sendCallFromCnt = mjonMsgDAO.selectCallFromNumberChk(mjonMsgVO);
|
||||||
if (sendCallFromCnt < 1) {
|
if (sendCallFromCnt < 1) {
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "등록된 발신번호를 찾을 수 없습니다.");
|
// return new StatusResponse(HttpStatus.BAD_REQUEST, "등록된 발신번호를 찾을 수 없습니다.");
|
||||||
|
return StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "등록된 발신번호를 찾을 수 없습니다.", "STAT_1010");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -3975,8 +3988,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
if (!mberSttus) {
|
if (!mberSttus) {
|
||||||
request.getSession().invalidate();
|
request.getSession().invalidate();
|
||||||
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
// UNAUTHORIZED : 인증되지 않은 사용자가 접근하려고 할 때
|
||||||
return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
// return new StatusResponse(HttpStatus.UNAUTHORIZED,
|
||||||
"현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
// "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
|
||||||
|
return StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."
|
||||||
|
, "STAT_1070");
|
||||||
}
|
}
|
||||||
|
|
||||||
String smsTxt = mjonMsgVO.getSmsTxtArea();
|
String smsTxt = mjonMsgVO.getSmsTxtArea();
|
||||||
@ -3990,9 +4005,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
|
|
||||||
log.debug(" :: smsTxt :: [{}]", smsTxt);
|
log.debug(" :: smsTxt :: [{}]", smsTxt);
|
||||||
|
|
||||||
StatusResponse statusResponse = new StatusResponse();
|
|
||||||
|
|
||||||
// 화면에서 저장한 이미지 가져오기
|
// 화면에서 저장한 이미지 가져오기
|
||||||
|
// API는 이미지가 없어서 해당 없음
|
||||||
mjonMsgVO = setImagesSetting(mjonMsgVO, statusResponse);
|
mjonMsgVO = setImagesSetting(mjonMsgVO, statusResponse);
|
||||||
|
|
||||||
if (mjonMsgVO == null) {
|
if (mjonMsgVO == null) {
|
||||||
@ -4014,9 +4029,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
int deletedCount = initialSize - finalSize;
|
int deletedCount = initialSize - finalSize;
|
||||||
// 수신거부 목록
|
// 수신거부 목록
|
||||||
returnMap.put("resultBlockSts", deletedCount);
|
returnMap.put("resultBlockSts", deletedCount);
|
||||||
|
apiReturnMap.put("resultBlockSts", deletedCount);
|
||||||
|
|
||||||
if (mjonMsgSendVOList.size() < 1) {
|
if (mjonMsgSendVOList.size() < 1) {
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "수신거부와 매칭되는 번호 제거 후 \n발송 가능한 수신목록이 존재하지 않습니다.");
|
return StatusResponse.statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "수신거부와 매칭되는 번호 제거 후 \n발송 가능한 수신목록이 존재하지 않습니다.", "STAT_1021");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 전용 전송사 코드 및 대표 전송사 조회
|
// 전용 전송사 코드 및 대표 전송사 조회
|
||||||
@ -4123,7 +4139,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
* */
|
* */
|
||||||
if (!isCashSufficient(mjonMsgVO, mjonMsgSendVOList)) {
|
if (!isCashSufficient(mjonMsgVO, mjonMsgSendVOList)) {
|
||||||
log.error("Insufficient balance for message sending.");
|
log.error("Insufficient balance for message sending.");
|
||||||
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.");
|
return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 발송에 필요한 보유 잔액이 부족 합니다.", "STAT_1060");
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("==================== insert 시작 ====================");
|
System.out.println("==================== insert 시작 ====================");
|
||||||
@ -4138,13 +4154,24 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
// instTotalCnt : 화면에서 보여줄 총 발송건수
|
// instTotalCnt : 화면에서 보여줄 총 발송건수
|
||||||
int instTotalCnt = 0;
|
int instTotalCnt = 0;
|
||||||
// Step 2: 그룹화 된 데이터를 그룹별로 insert 처리
|
// Step 2: 그룹화 된 데이터를 그룹별로 insert 처리
|
||||||
|
String apiMsgGroupId = "";
|
||||||
|
String apiMsgType = "";
|
||||||
for (Map.Entry<String, List<MjonMsgSendVO>> entry : priceGroupedMessages.entrySet()) {
|
for (Map.Entry<String, List<MjonMsgSendVO>> entry : priceGroupedMessages.entrySet()) {
|
||||||
List<MjonMsgSendVO> groupedMsgList = entry.getValue(); // 해당 가격의 메시지 리스트
|
List<MjonMsgSendVO> groupedMsgList = entry.getValue(); // 해당 가격의 메시지 리스트
|
||||||
|
|
||||||
// msgGroupId 생성
|
// msgGroupId 생성
|
||||||
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
|
String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId();
|
||||||
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId));
|
||||||
|
|
||||||
|
// api 전달 값
|
||||||
|
apiMsgGroupId = StringUtils.isNotEmpty(apiMsgGroupId)
|
||||||
|
? apiMsgGroupId + "," + nextMsgGroupId
|
||||||
|
: nextMsgGroupId;
|
||||||
|
|
||||||
|
apiMsgType = StringUtils.isNotEmpty(apiMsgType)
|
||||||
|
? apiMsgType + "," + mjonMsgSendVOList.get(0).getMsgType()
|
||||||
|
: mjonMsgSendVOList.get(0).getMsgType();
|
||||||
|
|
||||||
// 발송 데이터 삽입
|
// 발송 데이터 삽입
|
||||||
int instCnt = this.insertMsgData_advc(groupedMsgList);
|
int instCnt = this.insertMsgData_advc(groupedMsgList);
|
||||||
|
|
||||||
@ -4175,17 +4202,38 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
// returnMap.put("resultSts", instCnt);
|
// returnMap.put("resultSts", instCnt);
|
||||||
|
|
||||||
log.debug("가격 [{}]의 총 갯수: [{}]", entry.getKey(), groupedMsgList.size());
|
log.debug("가격 [{}]의 총 갯수: [{}]", entry.getKey(), groupedMsgList.size());
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 그룹 ID
|
||||||
|
apiReturnMap.put("msgGroupId", apiMsgGroupId);
|
||||||
|
// 메세지 타입
|
||||||
|
apiReturnMap.put("msgType", apiMsgType);
|
||||||
|
// 총 발송 건수
|
||||||
|
returnMap.put("resultSts", instTotalCnt);
|
||||||
|
apiReturnMap.put("resultSts", instTotalCnt);
|
||||||
|
|
||||||
|
|
||||||
|
// db insert 성능 개선중 하나에 방법
|
||||||
// 분할 최대건수가 되면 디비에 입력하기
|
// 분할 최대건수가 되면 디비에 입력하기
|
||||||
// 여러시도 했지만 일단 보류
|
// 여러시도 했지만 일단 보류
|
||||||
// 무시해도 됨
|
// 무시해도 됨
|
||||||
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_advc(mjonMsgSendVOList);
|
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_advc(mjonMsgSendVOList);
|
||||||
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_jdbc_advc(mjonMsgSendVOList);
|
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_jdbc_advc(mjonMsgSendVOList);
|
||||||
|
|
||||||
// 총 발송 건수
|
|
||||||
returnMap.put("resultSts", instTotalCnt);
|
//50건이상 문자발송 시 안내메시지 전송
|
||||||
|
try {
|
||||||
|
if(
|
||||||
|
"p".equals(userInfo.getDept()) // 개인회원일 경우에만 발송
|
||||||
|
) {
|
||||||
|
mjonCommon.sendMessagesIfOverFifty(instTotalCnt, mjonMsgVO.getCallFrom());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("sendMessagesIfOverFifty method exception.");
|
||||||
|
}
|
||||||
|
|
||||||
// TEST발송 시 발송 후 캐시가 있어야함.
|
// TEST발송 시 발송 후 캐시가 있어야함.
|
||||||
returnMap.put("afterCash", priceAndPoint.getBefCash(userId));
|
returnMap.put("afterCash", priceAndPoint.getBefCash(userId));
|
||||||
@ -4205,6 +4253,10 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
|
|
||||||
statusResponse.setStatus(HttpStatus.OK);
|
statusResponse.setStatus(HttpStatus.OK);
|
||||||
statusResponse.setObject(returnMap);
|
statusResponse.setObject(returnMap);
|
||||||
|
|
||||||
|
apiReturnMap.put("result", HttpStatus.OK);
|
||||||
|
apiReturnMap.put("message", "문자 전송이 완료되었습니다.");
|
||||||
|
statusResponse.setApiReturn(apiReturnMap);
|
||||||
return statusResponse;
|
return statusResponse;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -4352,7 +4404,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
int fileCount = 0;
|
int fileCount = 0;
|
||||||
// 장문 메시지일 경우 + 그림 이미지가 첨부된 경우
|
// 장문 메시지일 경우 + 그림 이미지가 첨부된 경우
|
||||||
//
|
//
|
||||||
if (mjonMsgVO.getMsgType().equals("6") && mjonMsgVO.getImgFilePathAdvc() != null
|
log.info(" + mjonMsgVO.getMsgType() :: [{}]", mjonMsgVO.getMsgType());
|
||||||
|
log.info(" + mjonMsgVO.getImgFilePathAdvc() :: [{}]", mjonMsgVO.getImgFilePathAdvc());
|
||||||
|
if ("6".equals(mjonMsgVO.getMsgType()) && mjonMsgVO.getImgFilePathAdvc() != null
|
||||||
&& mjonMsgVO.getImgFileIdAdvc() != null) {
|
&& mjonMsgVO.getImgFileIdAdvc() != null) {
|
||||||
|
|
||||||
// 그림 이미지가 첨부된 경우
|
// 그림 이미지가 첨부된 경우
|
||||||
@ -5148,4 +5202,9 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
|||||||
return returnVO;
|
return returnVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception{
|
||||||
|
return mjonMsgDataDAO.selectSysMsgTodaySendYn(sendLogVO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6543,5 +6543,4 @@ public class MjonMsgDataController {
|
|||||||
|
|
||||||
return "web/msgdata/MsgSentListAjax";
|
return "web/msgdata/MsgSentListAjax";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,6 +34,7 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
|
import itn.com.cmm.util.StringUtil;
|
||||||
import itn.com.cmm.util.StringUtil2;
|
import itn.com.cmm.util.StringUtil2;
|
||||||
import itn.let.cmm.vo.FileInfoVO;
|
import itn.let.cmm.vo.FileInfoVO;
|
||||||
import itn.let.fax.addr.service.FaxAddrGroupVO;
|
import itn.let.fax.addr.service.FaxAddrGroupVO;
|
||||||
@ -126,6 +127,11 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
Map<String, Object> resultMap = new HashMap<String, Object>();
|
Map<String, Object> resultMap = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
//수신번호 검색 시 번호 포멧 통일
|
||||||
|
if("4".equals(mjonMsgSentVO.getSearchCondition()) && StringUtil.isNotEmpty(mjonMsgSentVO.getSearchKeyword())) {
|
||||||
|
mjonMsgSentVO.setSearchKeyword(mjonMsgSentVO.getSearchKeyword().trim().replace("-", ""));
|
||||||
|
}
|
||||||
|
|
||||||
// 목록
|
// 목록
|
||||||
List<MjonMsgSentVO> resultList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO);
|
List<MjonMsgSentVO> resultList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO);
|
||||||
|
|
||||||
@ -638,7 +644,7 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
// log.info("엑셀에 넣을 데이터: [{}]", data[i][1]);
|
// log.info("엑셀에 넣을 데이터: [{}]", data[i][1]);
|
||||||
|
|
||||||
data[i][2] = "H".equals(vo.getSendKind()) ? "WEB" : "API";
|
data[i][2] = "A".equals(vo.getSendKind()) ? "API" : "WEB";
|
||||||
|
|
||||||
String msgType="단문";
|
String msgType="단문";
|
||||||
if ("6".equals(vo.getMsgType())) {
|
if ("6".equals(vo.getMsgType())) {
|
||||||
|
|||||||
@ -18,10 +18,10 @@ public class KmcVO extends ComDefaultVO{
|
|||||||
private String gender = ""; // 성별
|
private String gender = ""; // 성별
|
||||||
private String nation = ""; // 내국인
|
private String nation = ""; // 내국인
|
||||||
private String name = ""; // 성명
|
private String name = ""; // 성명
|
||||||
private String MName = ""; // 미성년자 성명
|
// private String MName = ""; // 미성년자 성명
|
||||||
private String MBirthDay = ""; // 미성년자 생년월일
|
// private String MBirthDay = ""; // 미성년자 생년월일
|
||||||
private String MGender = ""; // 미성년자 성별
|
// private String MGender = ""; // 미성년자 성별
|
||||||
private String MNation = ""; // 미성년자 내외국인
|
// private String MNation = ""; // 미성년자 내외국인
|
||||||
private String result = ""; // 결과값
|
private String result = ""; // 결과값
|
||||||
|
|
||||||
private String certMet = ""; // 인증방법
|
private String certMet = ""; // 인증방법
|
||||||
@ -41,6 +41,11 @@ public class KmcVO extends ComDefaultVO{
|
|||||||
private String idx = ""; //본인인증 로그 idx
|
private String idx = ""; //본인인증 로그 idx
|
||||||
private String dnChk = ""; //본인명의 DN 체크
|
private String dnChk = ""; //본인명의 DN 체크
|
||||||
|
|
||||||
|
private String reserve1 = "";
|
||||||
|
private String reserve2 = "";
|
||||||
|
private String reserve3 = "";
|
||||||
|
private String reserve4 = "";
|
||||||
|
|
||||||
public String getUserId() {
|
public String getUserId() {
|
||||||
return userId;
|
return userId;
|
||||||
}
|
}
|
||||||
@ -177,30 +182,6 @@ public class KmcVO extends ComDefaultVO{
|
|||||||
public void setCertNum(String certNum) {
|
public void setCertNum(String certNum) {
|
||||||
this.certNum = certNum;
|
this.certNum = certNum;
|
||||||
}
|
}
|
||||||
public String getMName() {
|
|
||||||
return MName;
|
|
||||||
}
|
|
||||||
public void setMName(String mName) {
|
|
||||||
MName = mName;
|
|
||||||
}
|
|
||||||
public String getMBirthDay() {
|
|
||||||
return MBirthDay;
|
|
||||||
}
|
|
||||||
public void setMBirthDay(String mBirthDay) {
|
|
||||||
MBirthDay = mBirthDay;
|
|
||||||
}
|
|
||||||
public String getMGender() {
|
|
||||||
return MGender;
|
|
||||||
}
|
|
||||||
public void setMGender(String mGender) {
|
|
||||||
MGender = mGender;
|
|
||||||
}
|
|
||||||
public String getMNation() {
|
|
||||||
return MNation;
|
|
||||||
}
|
|
||||||
public void setMNation(String mNation) {
|
|
||||||
MNation = mNation;
|
|
||||||
}
|
|
||||||
public String getRecCert() {
|
public String getRecCert() {
|
||||||
return recCert;
|
return recCert;
|
||||||
}
|
}
|
||||||
@ -225,7 +206,30 @@ public class KmcVO extends ComDefaultVO{
|
|||||||
public void setCertType(String certType) {
|
public void setCertType(String certType) {
|
||||||
this.certType = certType;
|
this.certType = certType;
|
||||||
}
|
}
|
||||||
|
public String getReserve1() {
|
||||||
|
return reserve1;
|
||||||
|
}
|
||||||
|
public void setReserve1(String reserve1) {
|
||||||
|
this.reserve1 = reserve1;
|
||||||
|
}
|
||||||
|
public String getReserve2() {
|
||||||
|
return reserve2;
|
||||||
|
}
|
||||||
|
public void setReserve2(String reserve2) {
|
||||||
|
this.reserve2 = reserve2;
|
||||||
|
}
|
||||||
|
public String getReserve3() {
|
||||||
|
return reserve3;
|
||||||
|
}
|
||||||
|
public void setReserve3(String reserve3) {
|
||||||
|
this.reserve3 = reserve3;
|
||||||
|
}
|
||||||
|
public String getReserve4() {
|
||||||
|
return reserve4;
|
||||||
|
}
|
||||||
|
public void setReserve4(String reserve4) {
|
||||||
|
this.reserve4 = reserve4;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,12 @@
|
|||||||
package itn.let.mjo.pay.service;
|
package itn.let.mjo.pay.service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||||
|
|
||||||
public interface MjonPayService {
|
public interface MjonPayService {
|
||||||
|
|
||||||
List<MjonPayVO> selectPayList(MjonPayVO mjonPayVO) throws Exception;
|
List<MjonPayVO> selectPayList(MjonPayVO mjonPayVO) throws Exception;
|
||||||
@ -140,4 +143,11 @@ public interface MjonPayService {
|
|||||||
//누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액)
|
//누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액)
|
||||||
public String selectTotSumPaymentAfterPay(String userId) throws Exception;
|
public String selectTotSumPaymentAfterPay(String userId) throws Exception;
|
||||||
|
|
||||||
|
Map<String, Object> payUserSWList(MjonPayVO mjonPayVO) throws Exception;
|
||||||
|
|
||||||
|
Map<String, Object> payUserSWListAjax(MjonMsgVO mjonMsgVO) throws Exception;
|
||||||
|
|
||||||
|
//거래명세서 상세 조회
|
||||||
|
MjonPayVO selectPayDetail(MjonPayVO mjonPayVO) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -241,5 +241,11 @@ public class MjonPayVO extends ComDefaultVO{
|
|||||||
|
|
||||||
private String totChgPay; // 간편결제분류
|
private String totChgPay; // 간편결제분류
|
||||||
|
|
||||||
|
// 거래명세서 내용
|
||||||
|
private String bizNo; // 사업자등록번호
|
||||||
|
private String managerNm; // 담당자명
|
||||||
|
private String prePaymentYn; // 선불결제여부 N:후불제고객
|
||||||
|
private String dept; // 회원종류 p:개인 c:기업
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -358,5 +358,8 @@ public class MjonPayDAO extends EgovAbstractDAO {
|
|||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MjonPayVO selectPayDetail(MjonPayVO mjonPayVO) throws Exception{
|
||||||
|
return (MjonPayVO)select("mjonPayDAO.selectPayDetail", mjonPayVO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,11 +7,16 @@ import java.net.HttpURLConnection;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
|
import java.sql.Timestamp;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
@ -25,11 +30,15 @@ import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
|||||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||||
import itn.com.cmm.LoginVO;
|
import itn.com.cmm.LoginVO;
|
||||||
|
import itn.com.cmm.util.DateUtils;
|
||||||
import itn.com.cmm.util.MJUtil;
|
import itn.com.cmm.util.MJUtil;
|
||||||
|
import itn.com.cmm.util.PayUtils;
|
||||||
import itn.com.utl.fcc.service.EgovStringUtil;
|
import itn.com.utl.fcc.service.EgovStringUtil;
|
||||||
import itn.let.mjo.event.service.MjonEventVO;
|
import itn.let.mjo.event.service.MjonEventVO;
|
||||||
import itn.let.mjo.event.service.impl.MjonEventDAO;
|
import itn.let.mjo.event.service.impl.MjonEventDAO;
|
||||||
import itn.let.mjo.msg.service.MjonMsgVO;
|
import itn.let.mjo.msg.service.MjonMsgVO;
|
||||||
|
import itn.let.mjo.msgcampain.service.MjonCandidateVO;
|
||||||
|
import itn.let.mjo.msgcampain.service.impl.MjonCandidateDAO;
|
||||||
import itn.let.mjo.msgdata.service.MjonMsgDataService;
|
import itn.let.mjo.msgdata.service.MjonMsgDataService;
|
||||||
import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO;
|
import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO;
|
||||||
import itn.let.mjo.pay.service.MjonPayService;
|
import itn.let.mjo.pay.service.MjonPayService;
|
||||||
@ -94,6 +103,10 @@ public class MjonPayServiceImpl extends EgovAbstractServiceImpl implements MjonP
|
|||||||
@Resource(name = "mberGrdService")
|
@Resource(name = "mberGrdService")
|
||||||
MberGrdService mberGrdService;
|
MberGrdService mberGrdService;
|
||||||
|
|
||||||
|
@Resource(name="mjonCandidateDAO")
|
||||||
|
private MjonCandidateDAO mjonCandidateDAO;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<MjonPayVO> selectPayList(MjonPayVO mjonPayVO) throws Exception {
|
public List<MjonPayVO> selectPayList(MjonPayVO mjonPayVO) throws Exception {
|
||||||
return mjonPayDAO.selectPayList(mjonPayVO);
|
return mjonPayDAO.selectPayList(mjonPayVO);
|
||||||
@ -2839,6 +2852,144 @@ public class MjonPayServiceImpl extends EgovAbstractServiceImpl implements MjonP
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> payUserSWList(MjonPayVO mjonPayVO) throws Exception{
|
||||||
|
|
||||||
|
|
||||||
|
String userId = mjonPayVO.getUserId();
|
||||||
|
|
||||||
|
// 총 사용금액
|
||||||
|
List<MjonPayVO> usedCashTotList = mjonPayDAO.selectUsedCashWithKakaoTotCnt(mjonPayVO);
|
||||||
|
|
||||||
|
// 사용가능한 금액
|
||||||
|
// mberManageVO.prePaymentYn 선불 후불 회원 구분으로 인해 select함
|
||||||
|
MberManageVO mberManageVO = mjonMsgDataDAO.selectMberManageInfo(userId);
|
||||||
|
// 선거 후보자 정보 조회
|
||||||
|
MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
|
||||||
|
if("p".equals(mberManageVO.getDept())) { //개인회원 선거 후보자 정보 불러오기
|
||||||
|
mjonCandidateVO = mjonCandidateDAO.selectCandidateDataInfo(userId);
|
||||||
|
if(mjonCandidateVO != null) {
|
||||||
|
mjonCandidateVO.setRegidentNo1(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()));
|
||||||
|
mjonCandidateVO.setRegidentNo2(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 후불제 회원 관련 사용 요금 내역 정보 조회하기
|
||||||
|
* 20231228 우영두 추가
|
||||||
|
* 누적사용금액, 누적 납부금액, 당월 납부 예상금액 정보 조회
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
//누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-"로 사용된 금액만 합산)
|
||||||
|
String totSumCashAfterPay = mjonPayDAO.selectTotalSumCashForAfterPay(userId);
|
||||||
|
|
||||||
|
//누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산 - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용)
|
||||||
|
String totSumPointAfterPay = mjonPayDAO.selectTotalSumPointForAfterPay(userId);
|
||||||
|
|
||||||
|
//누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액)
|
||||||
|
String totSumPaymentAfterPay = mjonPayDAO.selectTotSumPaymentAfterPay(userId);
|
||||||
|
|
||||||
|
//누적 납부 포인트 조회 ( 누적 납부금액 합산에 대한 2% 포인트 정보 계산)
|
||||||
|
float p_i_re_point = 0;
|
||||||
|
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
|
||||||
|
if (sysJoinSetVO != null) {
|
||||||
|
p_i_re_point = sysJoinSetVO.getPointPer();
|
||||||
|
}
|
||||||
|
int paymentPointAfterPay = Math.round((Float.parseFloat(totSumPaymentAfterPay) * p_i_re_point / 100));
|
||||||
|
|
||||||
|
//당월 납부 예상금액 (누적 사용금액 합산 - 누적 납부금액 합산 정보 계산)
|
||||||
|
float unPaymentAfterPay = Float.parseFloat(totSumCashAfterPay) - Float.parseFloat(totSumPaymentAfterPay);
|
||||||
|
|
||||||
|
//당월 납부 예상 포인트 (당월 납부 예상 금액에 대한 2% 포인트 정보 계산)
|
||||||
|
int unPaymentPointAfterPay = Math.round((unPaymentAfterPay * p_i_re_point / 100));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 2024.02.06 후불제 회원 중 협의단가를 사용하는 회원은 포인트 적립이 되지 않아야함.
|
||||||
|
* 후불제 협의 단가 여부 체크
|
||||||
|
* 모든 협의 단가 금액을 합산하여 0보다 크면 협의단가 있음.
|
||||||
|
* */
|
||||||
|
float shortPrice = mberManageVO.getShortPrice();
|
||||||
|
float longPrice = mberManageVO.getLongPrice();
|
||||||
|
float picturePrice = mberManageVO.getPicturePrice() + mberManageVO.getPicture2Price() + mberManageVO.getPicture3Price();
|
||||||
|
float kakaoAtPrice = mberManageVO.getKakaoAtPrice();
|
||||||
|
float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
|
||||||
|
float totPrice = shortPrice + longPrice + picturePrice + kakaoAtPrice + kakaoFtPrice;
|
||||||
|
String negoPriceYn = "N";
|
||||||
|
|
||||||
|
if(totPrice > 0) {
|
||||||
|
negoPriceYn = "Y";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, Object> returnData = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
returnData.put("usedCashTotList", usedCashTotList);
|
||||||
|
returnData.put("mberManageVO", mberManageVO);
|
||||||
|
returnData.put("mjonCandidateVO", mjonCandidateVO);
|
||||||
|
returnData.put("totSumCashAfterPay", totSumCashAfterPay);
|
||||||
|
returnData.put("totSumPointAfterPay", totSumPointAfterPay);
|
||||||
|
returnData.put("totSumPaymentAfterPay", totSumPaymentAfterPay);
|
||||||
|
returnData.put("sumPaymentPointAfterPay", paymentPointAfterPay);
|
||||||
|
returnData.put("unPaymentAfterPay", unPaymentAfterPay);
|
||||||
|
returnData.put("unPaymentPointAfterPay", unPaymentPointAfterPay);
|
||||||
|
returnData.put("negoPriceYn", negoPriceYn);
|
||||||
|
// 초기 날짜 셋팅
|
||||||
|
returnData.put("startDate", DateUtils.getDateMonthsAgo(1));
|
||||||
|
returnData.put("endDate", DateUtils.getCurrentDate());
|
||||||
|
|
||||||
|
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return returnData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> payUserSWListAjax(MjonMsgVO mjonMsgVO) throws Exception{
|
||||||
|
|
||||||
|
if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
||||||
|
mjonMsgVO.setSearchSortCnd("regDate");
|
||||||
|
mjonMsgVO.setSearchSortOrd("desc");
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, Object> returnData = new HashMap<>();
|
||||||
|
|
||||||
|
// 검색 데이터가 없거나
|
||||||
|
// 시작일자가 종료일자보다 이후이거나
|
||||||
|
// 총 기간이 365일이 넘으면 현재일부터 365일 전 날짜를 넣어서 검색
|
||||||
|
if(!DateUtils.dateChkAndValueChk(mjonMsgVO.getStartDate(),mjonMsgVO.getEndDate(), 12 )) {
|
||||||
|
|
||||||
|
mjonMsgVO.setStartDate(DateUtils.getDateMonthsAgo(12));
|
||||||
|
mjonMsgVO.setEndDate(DateUtils.getCurrentDate());
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
List<MjonMsgVO> payUserSWList = mjonMsgDataDAO.selectPayUserSWList(mjonMsgVO);
|
||||||
|
returnData.put("payUserSWList", payUserSWList);
|
||||||
|
returnData.put("totCnt", payUserSWList.size()> 0 ? payUserSWList.get(0).getTotCnt() : 0);
|
||||||
|
returnData.put("totSuccSendPrice", payUserSWList.size() > 0 ? PayUtils.getTrimToFirstDecimal(payUserSWList.get(0).getTotSuccSendPrice()) : 0);
|
||||||
|
|
||||||
|
return returnData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MjonPayVO selectPayDetail(MjonPayVO mjonPayVO) throws Exception {
|
||||||
|
|
||||||
|
MjonPayVO result = mjonPayDAO.selectPayDetail(mjonPayVO);
|
||||||
|
/* 후불제 고객의 사용기한 조회(결제일의 전달 1일 ~ 말일) */
|
||||||
|
if("N".equals(result.getPrePaymentYn())) {
|
||||||
|
String regDateStr = result.getRegDate();
|
||||||
|
LocalDateTime regDate = Timestamp.valueOf(regDateStr).toLocalDateTime();
|
||||||
|
|
||||||
|
LocalDate lastMonth = regDate.toLocalDate().withDayOfMonth(1).minusMonths(1);
|
||||||
|
LocalDate startDate = lastMonth.withDayOfMonth(1);
|
||||||
|
LocalDate endDate = lastMonth.withDayOfMonth(lastMonth.lengthOfMonth());
|
||||||
|
|
||||||
|
result.setStartDate(startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||||
|
result.setEndDate(endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -91,6 +91,7 @@ import itn.let.sym.grd.service.MberGrdVO;
|
|||||||
import itn.let.sym.site.service.EgovSiteManagerService;
|
import itn.let.sym.site.service.EgovSiteManagerService;
|
||||||
import itn.let.sym.site.service.JoinSettingVO;
|
import itn.let.sym.site.service.JoinSettingVO;
|
||||||
import itn.let.uat.uia.service.AuthCertVO;
|
import itn.let.uat.uia.service.AuthCertVO;
|
||||||
|
import itn.let.uat.uia.web.KmcCertChecker;
|
||||||
import itn.let.uss.umt.service.EgovMberManageService;
|
import itn.let.uss.umt.service.EgovMberManageService;
|
||||||
import itn.let.uss.umt.service.EgovUserManageService;
|
import itn.let.uss.umt.service.EgovUserManageService;
|
||||||
import itn.let.uss.umt.service.MberManageVO;
|
import itn.let.uss.umt.service.MberManageVO;
|
||||||
@ -165,7 +166,10 @@ public class MjonPayController {
|
|||||||
EgovSiteManagerService egovSiteManagerService;
|
EgovSiteManagerService egovSiteManagerService;
|
||||||
|
|
||||||
@Resource(name = "mberGrdService")
|
@Resource(name = "mberGrdService")
|
||||||
MberGrdService mberGrdService;
|
MberGrdService mberGrdService;
|
||||||
|
|
||||||
|
@Resource(name = "KmcCertChecker")
|
||||||
|
KmcCertChecker kmcCertChecker;
|
||||||
|
|
||||||
//배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"}
|
//배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"}
|
||||||
private String[][] sendPayExcelValue ={
|
private String[][] sendPayExcelValue ={
|
||||||
@ -930,7 +934,7 @@ public class MjonPayController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 나이스페이(PG사 전송화면)
|
* 회원가입 본인인증
|
||||||
*
|
*
|
||||||
* @param
|
* @param
|
||||||
* @return
|
* @return
|
||||||
@ -941,270 +945,10 @@ public class MjonPayController {
|
|||||||
ModelMap model , @RequestParam Map<String, Object> commandMap,
|
ModelMap model , @RequestParam Map<String, Object> commandMap,
|
||||||
@ModelAttribute("searchVO") KmcVO kmcVO) throws Exception {
|
@ModelAttribute("searchVO") KmcVO kmcVO) throws Exception {
|
||||||
|
|
||||||
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
|
//kmc 본인인증 결과처리
|
||||||
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||||
|
//kmc 본인인증 로그 처리
|
||||||
System.out.println("++++++++++++ 세션체크 ::: "+ session.getAttribute("mberSession"));
|
AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_회원가입 인증");
|
||||||
|
|
||||||
String errMessage = ""; //에러메세지
|
|
||||||
|
|
||||||
String rec_cert = ""; // 결과값(암호화)
|
|
||||||
String certNum = ""; // certNum
|
|
||||||
|
|
||||||
rec_cert = request.getParameter("rec_cert").trim();
|
|
||||||
certNum = request.getParameter("certNum").trim();
|
|
||||||
|
|
||||||
kmcVO.setRecCert(rec_cert);
|
|
||||||
kmcVO.setCertNum(certNum);
|
|
||||||
// 파라미터 유효성 검증
|
|
||||||
if( rec_cert.length() == 0 || certNum.length() == 0 ){
|
|
||||||
errMessage = "비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 변수선언 --------------------------------------------------------------------------------------------------------
|
|
||||||
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
|
||||||
k_certNum = certNum;
|
|
||||||
String date = ""; // 요청일시
|
|
||||||
String CI = ""; // 연계정보(CI)
|
|
||||||
String DI = ""; // 중복가입확인정보(DI)
|
|
||||||
String phoneNo = ""; // 휴대폰번호
|
|
||||||
String phoneCorp = ""; // 이동통신사
|
|
||||||
String birthDay = ""; // 생년월일
|
|
||||||
String gender = ""; // 성별
|
|
||||||
String nation = ""; // 내국인
|
|
||||||
String name = ""; // 성명
|
|
||||||
String M_name = ""; // 미성년자 성명
|
|
||||||
String M_birthDay = ""; // 미성년자 생년월일
|
|
||||||
String M_Gender = ""; // 미성년자 성별
|
|
||||||
String M_nation = ""; // 미성년자 내외국인
|
|
||||||
String result = ""; // 결과값
|
|
||||||
|
|
||||||
String certMet = ""; // 인증방법
|
|
||||||
String ip = ""; // ip주소
|
|
||||||
String plusInfo = "";
|
|
||||||
|
|
||||||
String encPara = "";
|
|
||||||
String encMsg1 = "";
|
|
||||||
String encMsg2 = "";
|
|
||||||
String msgChk = "";
|
|
||||||
|
|
||||||
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
|
||||||
|
|
||||||
//02. 1차 복호화
|
|
||||||
//수신된 certNum를 이용하여 복호화
|
|
||||||
rec_cert = seed.getDec(rec_cert, k_certNum);
|
|
||||||
|
|
||||||
//03. 1차 파싱
|
|
||||||
int inf1 = rec_cert.indexOf("/",0);
|
|
||||||
int inf2 = rec_cert.indexOf("/",inf1+1);
|
|
||||||
|
|
||||||
encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터
|
|
||||||
encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값
|
|
||||||
|
|
||||||
//04. 위변조 검증
|
|
||||||
encMsg2 = seed.getMsg(encPara);
|
|
||||||
kmcVO.setEncMsg2(encMsg2);
|
|
||||||
if(encMsg2.equals(encMsg1)){
|
|
||||||
msgChk="Y";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!"Y".equals(msgChk)) {
|
|
||||||
errMessage = "비정상접근입니다.";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
//05. 2차 복호화
|
|
||||||
rec_cert = seed.getDec(encPara, k_certNum);
|
|
||||||
kmcVO.setRecCert(rec_cert);
|
|
||||||
//06. 2차 파싱
|
|
||||||
int info1 = rec_cert.indexOf("/",0);
|
|
||||||
int info2 = rec_cert.indexOf("/",info1+1);
|
|
||||||
int info3 = rec_cert.indexOf("/",info2+1);
|
|
||||||
int info4 = rec_cert.indexOf("/",info3+1);
|
|
||||||
int info5 = rec_cert.indexOf("/",info4+1);
|
|
||||||
int info6 = rec_cert.indexOf("/",info5+1);
|
|
||||||
int info7 = rec_cert.indexOf("/",info6+1);
|
|
||||||
int info8 = rec_cert.indexOf("/",info7+1);
|
|
||||||
int info9 = rec_cert.indexOf("/",info8+1);
|
|
||||||
int info10 = rec_cert.indexOf("/",info9+1);
|
|
||||||
int info11 = rec_cert.indexOf("/",info10+1);
|
|
||||||
int info12 = rec_cert.indexOf("/",info11+1);
|
|
||||||
int info13 = rec_cert.indexOf("/",info12+1);
|
|
||||||
int info14 = rec_cert.indexOf("/",info13+1);
|
|
||||||
int info15 = rec_cert.indexOf("/",info14+1);
|
|
||||||
int info16 = rec_cert.indexOf("/",info15+1);
|
|
||||||
int info17 = rec_cert.indexOf("/",info16+1);
|
|
||||||
int info18 = rec_cert.indexOf("/",info17+1);
|
|
||||||
|
|
||||||
certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
|
|
||||||
date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date);
|
|
||||||
CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
|
|
||||||
phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
|
|
||||||
phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
|
|
||||||
birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
|
|
||||||
gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
|
|
||||||
nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
|
|
||||||
name = rec_cert.substring(info8+1,info9); kmcVO.setName(name);
|
|
||||||
result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
|
|
||||||
certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
|
|
||||||
ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
|
|
||||||
M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
|
|
||||||
M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
|
|
||||||
M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
|
|
||||||
M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
|
|
||||||
plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
|
|
||||||
DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
|
|
||||||
|
|
||||||
//07. CI, DI 복호화
|
|
||||||
CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
|
|
||||||
DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
|
|
||||||
|
|
||||||
if("Y".equals(result)) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
String regex = "";
|
|
||||||
if( certNum.length() == 0 || certNum.length() > 40){
|
|
||||||
errMessage = "요청번호 비정상.";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if( date.length() != 14 || !paramChk(regex, date) ){
|
|
||||||
errMessage = "요청일시";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if( certMet.length() != 1 || !paramChk(regex, certMet) ){
|
|
||||||
errMessage = "본인인증방법 비정상" + certMet;
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
|
|
||||||
errMessage = "휴대폰번호 비정상" ;
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
|
|
||||||
errMessage = "이동통신사 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
|
|
||||||
errMessage = "생년월일 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if( gender.length() != 1 || !paramChk(regex, gender) ){
|
|
||||||
errMessage = "성별 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if( nation.length() != 1 || !paramChk(regex, nation) ){
|
|
||||||
errMessage = "내/외국인 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[\\sA-Za-z가-<2D>R.,-]*";
|
|
||||||
if( name.length() > 60 || !paramChk(regex, name) ){
|
|
||||||
errMessage = "성명 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if( result.length() != 1 || !paramChk(regex, result) ){
|
|
||||||
errMessage = "결과값 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[\\sA-Za-z가-?.,-]*";
|
|
||||||
if( M_name.length() != 0 ){
|
|
||||||
if( M_name.length() > 60 || !paramChk(regex, M_name) ){
|
|
||||||
errMessage = "미성년자 성명 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if( M_birthDay.length() != 0 ){
|
|
||||||
if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
|
|
||||||
errMessage = "미성년자 생년월일 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if( M_Gender.length() != 0 ){
|
|
||||||
if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
|
|
||||||
errMessage = "미성년자 성별 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if( M_nation.length() != 0 ){
|
|
||||||
if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
|
|
||||||
errMessage = "미성년자 내/외국인 비정상";
|
|
||||||
return returnPage(model , errMessage , kmcVO) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//본인인증 결과 내용 저장하기.
|
|
||||||
/*System.out.println("+++++++++++++ getCertNum ::: "+kmcVO.getCertNum());
|
|
||||||
System.out.println("+++++++++++++ getDate ::: "+kmcVO.getDate());
|
|
||||||
System.out.println("+++++++++++++ getDI ::: "+kmcVO.getDI());
|
|
||||||
System.out.println("+++++++++++++ getPhoneNo ::: "+kmcVO.getPhoneNo());
|
|
||||||
System.out.println("+++++++++++++ getNation ::: "+kmcVO.getNation());
|
|
||||||
System.out.println("+++++++++++++ getName ::: "+kmcVO.getName());
|
|
||||||
System.out.println("+++++++++++++ getResult ::: "+kmcVO.getResult());
|
|
||||||
System.out.println("+++++++++++++ getCertMet ::: "+kmcVO.getCertMet());
|
|
||||||
System.out.println("+++++++++++++ getIp ::: "+kmcVO.getIp());*/
|
|
||||||
|
|
||||||
//KMC 본인인증 정보를 세션에 담아준다.
|
|
||||||
/*AuthCertVO certVO = new AuthCertVO();
|
|
||||||
certVO.setCertNum(kmcVO.getCertNum());
|
|
||||||
certVO.setCertDate(kmcVO.getDate());
|
|
||||||
certVO.setCertDi(kmcVO.getDI());
|
|
||||||
certVO.setCertPhone(kmcVO.getPhoneNo());
|
|
||||||
certVO.setCertNation(kmcVO.getNation());
|
|
||||||
certVO.setCertName(kmcVO.getName());
|
|
||||||
certVO.setCertResult(kmcVO.getResult());
|
|
||||||
certVO.setCertType("KMC문자인증");
|
|
||||||
certVO.setCertIpaddr(kmcVO.getIp());
|
|
||||||
certVO.setBirthDay(kmcVO.getBirthDay());
|
|
||||||
certVO.setSexdstnCode(kmcVO.getGender());*/
|
|
||||||
|
|
||||||
/*request.getSession().setAttribute("AuthKmcCertVO", certVO);*/
|
|
||||||
|
|
||||||
/*System.out.println("++++++++++++ 세션체크22 ::: "+(MberManageVO) session.getAttribute("mberSession"));*/
|
|
||||||
|
|
||||||
//KMC 본인인증 로그 insert
|
|
||||||
AuthCertVO certVO = new AuthCertVO();
|
|
||||||
certVO.setMberId(kmcVO.getPlusInfo());
|
|
||||||
certVO.setCertNum(kmcVO.getCertNum());
|
|
||||||
certVO.setCertDate(kmcVO.getDate());
|
|
||||||
certVO.setCertDi(kmcVO.getDI());
|
|
||||||
certVO.setCertPhone(kmcVO.getPhoneNo());
|
|
||||||
certVO.setCertNation(kmcVO.getNation());
|
|
||||||
certVO.setCertName(kmcVO.getName());
|
|
||||||
certVO.setCertResult(kmcVO.getResult());
|
|
||||||
certVO.setCertType("KMC_회원가입 인증");
|
|
||||||
certVO.setCertIpaddr(kmcVO.getIp());
|
|
||||||
certVO.setBirthDay(kmcVO.getBirthDay());
|
|
||||||
certVO.setSexdstnCode(kmcVO.getGender());
|
|
||||||
|
|
||||||
//디비 테이블에 저장하기
|
|
||||||
mberManageService.insertCertInfoLog(certVO);
|
|
||||||
|
|
||||||
kmcVO.setIdx(certVO.getIdx()); //본인인증 로그 Idx - 로그 insert 후 idx selectKey
|
kmcVO.setIdx(certVO.getIdx()); //본인인증 로그 Idx - 로그 insert 후 idx selectKey
|
||||||
model.addAttribute("kmcVO", kmcVO);
|
model.addAttribute("kmcVO", kmcVO);
|
||||||
@ -2603,15 +2347,16 @@ public class MjonPayController {
|
|||||||
* 2023.12.22 우영두
|
* 2023.12.22 우영두
|
||||||
* @param mjonMsgVO
|
* @param mjonMsgVO
|
||||||
* @param model
|
* @param model
|
||||||
* @return "/web/member/pay/PayUserSWList.do"
|
* @return "/web/member/pay/payUserSWList.do"
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
@RequestMapping(value= {"/web/member/pay/PayUserSWList.do"})
|
@RequestMapping(value= {"/web/member/pay/payUserSWList.do"})
|
||||||
public String PayUserSWList(@ModelAttribute("mjonMsgVO") MjonMsgVO mjonMsgVO,
|
public String payUserSWList(@ModelAttribute("mjonMsgVO") MjonMsgVO mjonMsgVO,
|
||||||
MjonPayVO mjonPayVO,
|
MjonPayVO mjonPayVO,
|
||||||
MberManageVO mberManageVO, RedirectAttributes redirectAttributes,
|
MberManageVO mberManageVO, RedirectAttributes redirectAttributes,
|
||||||
HttpServletRequest request,
|
HttpServletRequest request,
|
||||||
ModelMap model) throws Exception{
|
ModelMap model) throws Exception{
|
||||||
|
|
||||||
|
|
||||||
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
|
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
|
||||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
@ -2621,117 +2366,26 @@ public class MjonPayController {
|
|||||||
return "redirect:/web/user/login/login.do";
|
return "redirect:/web/user/login/login.do";
|
||||||
}
|
}
|
||||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
mjonMsgVO.setUserId(userId);
|
mjonPayVO.setUserId(userId);
|
||||||
/*
|
|
||||||
{ // 충전캐시
|
|
||||||
String sumPayMoney = mjonPayService.selectAgentSumPayMoney(userId);
|
|
||||||
model.addAttribute("sumPayMoney", sumPayMoney);
|
|
||||||
}
|
|
||||||
|
|
||||||
{ // 충전포인트
|
|
||||||
String sumPoint = mjonPayService.selectSumPoint(userId);
|
|
||||||
model.addAttribute("sumPoint", sumPoint);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
{ // 총 사용금액
|
|
||||||
mjonPayVO.setUserId(userId);
|
|
||||||
List<MjonPayVO> usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO);
|
|
||||||
model.addAttribute("usedCashTotList", usedCashTotList);
|
|
||||||
}
|
|
||||||
{ // 사용가능한 금액
|
|
||||||
// mberManageVO.prePaymentYn 선불 후불 회원 구분으로 인해 select함
|
|
||||||
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
|
|
||||||
model.addAttribute("mberManageVO", mberManageVO);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
{ // 발송건수
|
|
||||||
mjonMsgVO.setReserveYn("N");
|
|
||||||
List<MjonMsgVO> sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
|
|
||||||
model.addAttribute("sendTotList", sendTotList);
|
|
||||||
}
|
|
||||||
|
|
||||||
{ // 예약건수
|
|
||||||
mjonMsgVO.setReserveYn("Y");
|
|
||||||
List<MjonMsgVO> reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
|
|
||||||
model.addAttribute("reservToList", reservToList);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
{// 선거 후보자 정보 조회
|
|
||||||
MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
|
|
||||||
if("p".equals(mberManageVO.getDept())) { //개인회원 선거 후보자 정보 불러오기
|
|
||||||
mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId);
|
|
||||||
if(mjonCandidateVO != null) {
|
|
||||||
mjonCandidateVO.setRegidentNo1(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()));
|
|
||||||
mjonCandidateVO.setRegidentNo2(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
model.addAttribute("mjonCandidateVO", mjonCandidateVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 후불제 회원 관련 사용 요금 내역 정보 조회하기
|
|
||||||
* 20231228 우영두 추가
|
|
||||||
* 누적사용금액, 누적 납부금액, 당월 납부 예상금액 정보 조회
|
|
||||||
*
|
|
||||||
* */
|
|
||||||
|
|
||||||
//누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-"로 사용된 금액만 합산)
|
|
||||||
String totSumCashAfterPay = mjonPayService.selectTotalSumCashForAfterPay(userId);
|
|
||||||
model.addAttribute("totSumCashAfterPay", totSumCashAfterPay);
|
|
||||||
|
|
||||||
//누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산 - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용)
|
|
||||||
String totSumPointAfterPay = mjonPayService.selectTotalSumPointForAfterPay(userId);
|
|
||||||
model.addAttribute("totSumPointAfterPay", totSumPointAfterPay);
|
|
||||||
|
|
||||||
//누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액)
|
|
||||||
String totSumPaymentAfterPay = mjonPayService.selectTotSumPaymentAfterPay(userId);
|
|
||||||
model.addAttribute("totSumPaymentAfterPay", totSumPaymentAfterPay);
|
|
||||||
|
|
||||||
//누적 납부 포인트 조회 ( 누적 납부금액 합산에 대한 2% 포인트 정보 계산)
|
|
||||||
float p_i_re_point = 0;
|
|
||||||
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
|
|
||||||
if (sysJoinSetVO != null) {
|
|
||||||
p_i_re_point = sysJoinSetVO.getPointPer();
|
|
||||||
}
|
|
||||||
int paymentPointAfterPay = Math.round((Float.parseFloat(totSumPaymentAfterPay) * p_i_re_point / 100));
|
|
||||||
model.addAttribute("sumPaymentPointAfterPay", paymentPointAfterPay);
|
|
||||||
|
|
||||||
//당월 납부 예상금액 (누적 사용금액 합산 - 누적 납부금액 합산 정보 계산)
|
|
||||||
|
|
||||||
float unPaymentAfterPay = Float.parseFloat(totSumCashAfterPay) - Float.parseFloat(totSumPaymentAfterPay);
|
|
||||||
model.addAttribute("unPaymentAfterPay", unPaymentAfterPay);
|
|
||||||
|
|
||||||
//당월 납부 예상 포인트 (당월 납부 예상 금액에 대한 2% 포인트 정보 계산)
|
|
||||||
int unPaymentPointAfterPay = Math.round((unPaymentAfterPay * p_i_re_point / 100));
|
|
||||||
model.addAttribute("unPaymentPointAfterPay", unPaymentPointAfterPay);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 2024.02.06 후불제 회원 중 협의단가를 사용하는 회원은 포인트 적립이 되지 않아야함.
|
|
||||||
* 후불제 협의 단가 여부 체크
|
|
||||||
* 모든 협의 단가 금액을 합산하여 0보다 크면 협의단가 있음.
|
|
||||||
* */
|
|
||||||
float shortPrice = mberManageVO.getShortPrice();
|
|
||||||
float longPrice = mberManageVO.getLongPrice();
|
|
||||||
float picturePrice = mberManageVO.getPicturePrice() + mberManageVO.getPicture2Price() + mberManageVO.getPicture3Price();
|
|
||||||
float kakaoAtPrice = mberManageVO.getKakaoAtPrice();
|
|
||||||
float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
|
|
||||||
float totPrice = shortPrice + longPrice + picturePrice + kakaoAtPrice + kakaoFtPrice;
|
|
||||||
String negoPriceYn = "N";
|
|
||||||
|
|
||||||
if(totPrice > 0) {
|
// // 비즈니스 로직 부분
|
||||||
negoPriceYn = "Y";
|
Map<String, Object> resultMap = mjonPayService.payUserSWList(mjonPayVO);
|
||||||
}
|
|
||||||
model.addAttribute("negoPriceYn", negoPriceYn);
|
|
||||||
|
model.addAttribute("usedCashTotList", resultMap.get("usedCashTotList"));
|
||||||
}
|
model.addAttribute("mjonCandidateVO", resultMap.get("mjonCandidateVO"));
|
||||||
{
|
model.addAttribute("mberManageVO", resultMap.get("mberManageVO"));
|
||||||
// 초기 날짜 셋팅
|
model.addAttribute("totSumCashAfterPay", resultMap.get("totSumCashAfterPay"));
|
||||||
model.addAttribute("startDate", DateUtils.getDateMonthsAgo(12));
|
model.addAttribute("totSumPointAfterPay", resultMap.get("totSumPointAfterPay"));
|
||||||
model.addAttribute("endDate", DateUtils.getCurrentDate());
|
model.addAttribute("totSumPaymentAfterPay", resultMap.get("totSumPaymentAfterPay"));
|
||||||
}
|
model.addAttribute("sumPaymentPointAfterPay", resultMap.get("sumPaymentPointAfterPay"));
|
||||||
|
model.addAttribute("unPaymentAfterPay", resultMap.get("unPaymentAfterPay"));
|
||||||
|
model.addAttribute("unPaymentPointAfterPay", resultMap.get("unPaymentPointAfterPay"));
|
||||||
|
model.addAttribute("negoPriceYn", resultMap.get("negoPriceYn"));
|
||||||
|
model.addAttribute("startDate", resultMap.get("startDate"));
|
||||||
|
model.addAttribute("endDate", resultMap.get("endDate"));
|
||||||
|
|
||||||
|
|
||||||
return "/web/pay/PayUserSWList";
|
return "/web/pay/PayUserSWList";
|
||||||
}
|
}
|
||||||
@ -2749,8 +2403,8 @@ public class MjonPayController {
|
|||||||
* @return "/web/member/pay/PayUserSWListAjax.do"
|
* @return "/web/member/pay/PayUserSWListAjax.do"
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
@RequestMapping(value= {"/web/member/pay/PayUserSWListAjax.do"})
|
@RequestMapping(value= {"/web/member/pay/payUserSWListAjax.do"})
|
||||||
public String PayUserSWListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
|
public String payUserSWListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
|
||||||
HttpServletRequest request,
|
HttpServletRequest request,
|
||||||
ModelMap model) throws Exception{
|
ModelMap model) throws Exception{
|
||||||
|
|
||||||
@ -2774,29 +2428,12 @@ public class MjonPayController {
|
|||||||
mjonMsgVO.setLastIndex(paginationInfo.getLastRecordIndex());
|
mjonMsgVO.setLastIndex(paginationInfo.getLastRecordIndex());
|
||||||
mjonMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
mjonMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
|
||||||
|
|
||||||
if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
Map<String, Object> resultMap = mjonPayService.payUserSWListAjax(mjonMsgVO);
|
||||||
mjonMsgVO.setSearchSortCnd("regDate");
|
|
||||||
mjonMsgVO.setSearchSortOrd("desc");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 검색 데이터가 없거나
|
paginationInfo.setTotalRecordCount((int)resultMap.get("totCnt"));
|
||||||
// 시작일자가 종료일자보다 이후이거나
|
|
||||||
// 총 기간이 365일이 넘으면 현재일부터 365일 전 날짜를 넣어서 검색
|
|
||||||
if(!DateUtils.dateChkAndValueChk(mjonMsgVO.getStartDate(),mjonMsgVO.getEndDate(), 12 )) {
|
|
||||||
|
|
||||||
mjonMsgVO.setStartDate(DateUtils.getDateMonthsAgo(12));
|
|
||||||
mjonMsgVO.setEndDate(DateUtils.getCurrentDate());
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
List<MjonMsgVO> payUserSWList = mjonMsgDataService.selectPayUserSWList(mjonMsgVO);
|
|
||||||
|
|
||||||
paginationInfo.setTotalRecordCount(payUserSWList.size()> 0 ? payUserSWList.get(0).getTotCnt() : 0);
|
|
||||||
model.addAttribute("paginationInfo", paginationInfo);
|
model.addAttribute("paginationInfo", paginationInfo);
|
||||||
model.addAttribute("payUserSWList", payUserSWList);
|
model.addAttribute("payUserSWList", resultMap.get("payUserSWList"));
|
||||||
|
model.addAttribute("totSuccSendPrice", resultMap.get("totSuccSendPrice"));
|
||||||
model.addAttribute("totSuccSendPrice", payUserSWList.size() > 0 ? PayUtils.getTrimToFirstDecimal(payUserSWList.get(0).getTotSuccSendPrice()) : 0);
|
|
||||||
|
|
||||||
model.addAttribute("mjonMsgVO", mjonMsgVO);
|
model.addAttribute("mjonMsgVO", mjonMsgVO);
|
||||||
|
|
||||||
|
|
||||||
@ -2878,7 +2515,7 @@ public class MjonPayController {
|
|||||||
font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold
|
font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold
|
||||||
|
|
||||||
sheet.setColumnWidth(1, 5000); // 칼럼의 폭 조절
|
sheet.setColumnWidth(1, 5000); // 칼럼의 폭 조절
|
||||||
sheet.setColumnWidth(4, 10000); // 칼럼의 폭 조절
|
sheet.setColumnWidth(3, 10000); // 칼럼의 폭 조절
|
||||||
|
|
||||||
try{
|
try{
|
||||||
|
|
||||||
@ -2903,6 +2540,7 @@ public class MjonPayController {
|
|||||||
sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //셀병합
|
sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //셀병합
|
||||||
sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //셀병합
|
sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //셀병합
|
||||||
sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //셀병합
|
sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //셀병합
|
||||||
|
sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //셀병합
|
||||||
|
|
||||||
|
|
||||||
cell = row.createCell(0);
|
cell = row.createCell(0);
|
||||||
@ -2910,46 +2548,29 @@ public class MjonPayController {
|
|||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
cell = row.createCell(1);
|
cell = row.createCell(1);
|
||||||
cell.setCellValue("날짜");
|
cell.setCellValue("발송일시");
|
||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
cell = row.createCell(2);
|
cell = row.createCell(2);
|
||||||
cell.setCellValue("문자유형");
|
cell.setCellValue("형태");
|
||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
cell = row.createCell(3);
|
cell = row.createCell(3);
|
||||||
cell.setCellValue("발송건수");
|
|
||||||
cell.setCellStyle(style);
|
|
||||||
|
|
||||||
cell = row.createCell(4);
|
|
||||||
cell.setCellValue("내용");
|
cell.setCellValue("내용");
|
||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
/*cell = row.createCell(5);
|
cell = row.createCell(4);
|
||||||
cell.setCellValue("충전");
|
cell.setCellValue("발송건수");
|
||||||
sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합
|
sheet.addMergedRegion(new CellRangeAddress(0,0,4,5)); //셀병합
|
||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
cell = row.createCell(6);
|
|
||||||
cell.setCellStyle(style);*/
|
|
||||||
|
|
||||||
cell = row.createCell(5);
|
cell = row.createCell(5);
|
||||||
cell.setCellValue("사용");
|
|
||||||
sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합
|
|
||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
cell = row.createCell(6);
|
cell = row.createCell(6);
|
||||||
|
cell.setCellValue("금액(원)");
|
||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
|
||||||
/*cell = row.createCell(9);
|
|
||||||
cell.setCellValue("잔액");
|
|
||||||
sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); //셀병합
|
|
||||||
cell.setCellStyle(style);
|
|
||||||
|
|
||||||
cell = row.createCell(10);
|
|
||||||
cell.setCellStyle(style);*/
|
|
||||||
|
|
||||||
row = sheet.createRow(1);
|
row = sheet.createRow(1);
|
||||||
|
|
||||||
cell = row.createCell(0);
|
cell = row.createCell(0);
|
||||||
@ -2965,32 +2586,16 @@ public class MjonPayController {
|
|||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
cell = row.createCell(4);
|
cell = row.createCell(4);
|
||||||
|
cell.setCellValue("성공");
|
||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
/*cell = row.createCell(5);
|
|
||||||
cell.setCellValue("충전금");
|
|
||||||
cell.setCellStyle(style);
|
|
||||||
|
|
||||||
cell = row.createCell(6);
|
|
||||||
cell.setCellValue("포인트");
|
|
||||||
cell.setCellStyle(style);*/
|
|
||||||
|
|
||||||
cell = row.createCell(5);
|
cell = row.createCell(5);
|
||||||
cell.setCellValue("충전금");
|
cell.setCellValue("실패");
|
||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
cell = row.createCell(6);
|
cell = row.createCell(6);
|
||||||
cell.setCellValue("포인트");
|
|
||||||
cell.setCellStyle(style);
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
/*cell = row.createCell(9);
|
|
||||||
cell.setCellValue("충전금");
|
|
||||||
cell.setCellStyle(style);
|
|
||||||
|
|
||||||
cell = row.createCell(10);
|
|
||||||
cell.setCellValue("포인트");
|
|
||||||
cell.setCellStyle(style);*/
|
|
||||||
|
|
||||||
DecimalFormat formatter = new DecimalFormat("###,###.##");
|
DecimalFormat formatter = new DecimalFormat("###,###.##");
|
||||||
String befCash = "";
|
String befCash = "";
|
||||||
String befPoint = "";
|
String befPoint = "";
|
||||||
@ -3033,15 +2638,11 @@ public class MjonPayController {
|
|||||||
if(j==0) cell.setCellValue(i+1); //번호
|
if(j==0) cell.setCellValue(i+1); //번호
|
||||||
if(j==1) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getRegDate()); //결제일시
|
if(j==1) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getRegDate()); //결제일시
|
||||||
if(j==2) cell.setCellValue(msgType); //문자유형
|
if(j==2) cell.setCellValue(msgType); //문자유형
|
||||||
if(j==3) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendCnt()); //발송건수
|
if(j==3) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSmsTxt()); //내용
|
||||||
if(j==4) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSmsTxt()); //내용
|
if(j==4) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendCnt()); //성공건수
|
||||||
if(j==5) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendPrice()); //충전 - 충전금
|
if(j==5) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getFailSendCnt()); //실패건수
|
||||||
if(j==6) cell.setCellValue(0); //충전 - 포인트
|
if(j==6) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendPrice()); //금액
|
||||||
/*if(j==7) cell.setCellValue(totPrice); //사용 - 충전금
|
}
|
||||||
if(j==8) cell.setCellValue(0); //사용 - 포인트
|
|
||||||
if(j==9) cell.setCellValue(thisPoint); //잔액 - 충전금
|
|
||||||
if(j==10) cell.setCellValue(befPoint); //잔액 - 포인트
|
|
||||||
*/ }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
|
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
|
||||||
@ -5044,35 +4645,19 @@ public class MjonPayController {
|
|||||||
model.addAttribute("endDate", endDate);
|
model.addAttribute("endDate", endDate);
|
||||||
|
|
||||||
DecimalFormat decFormat = new DecimalFormat("###,###");
|
DecimalFormat decFormat = new DecimalFormat("###,###");
|
||||||
|
DecimalFormat decFormatFloat = new DecimalFormat("###,###.#");
|
||||||
model.addAttribute("sendSumCount", decFormat.format(sendSumCount));
|
model.addAttribute("sendSumCount", decFormat.format(sendSumCount));
|
||||||
model.addAttribute("supplySumPrice", decFormat.format(supplySumPrice));
|
model.addAttribute("supplySumPrice", decFormat.format(supplySumPrice));
|
||||||
model.addAttribute("vatSumPrice", decFormat.format(vatSumPrice));
|
model.addAttribute("vatSumPrice", decFormat.format(vatSumPrice));
|
||||||
model.addAttribute("totalSumPrice", decFormat.format(totalSumPrice));
|
model.addAttribute("totalSumPrice", decFormatFloat.format(totalSumPrice));
|
||||||
model.addAttribute("resultList", payUserSumList);
|
model.addAttribute("resultList", payUserSumList);
|
||||||
|
|
||||||
// 수신자 정보
|
// 수신자 정보
|
||||||
String mberNm = ""; // 회사명
|
MJUtil mjUtil = new MJUtil();
|
||||||
String managerNm = ""; // 담당자명
|
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
|
||||||
String moblphonNo = ""; // 연락처
|
mberManageVO.setMoblphonNo(mjUtil.addDash(mberManageVO.getMoblphonNo()));
|
||||||
MberManageVO mberManageVO = new MberManageVO();
|
mberManageVO.setBizNo(mjUtil.bizNoAddDash(mberManageVO.getBizNo()));
|
||||||
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
|
model.addAttribute("mberManageVO", mberManageVO);
|
||||||
if (mberManageVO != null) {
|
|
||||||
// 회원종류 p-개인 c-기업
|
|
||||||
if (mberManageVO.getDept().equals("c")) {
|
|
||||||
mberNm = mberManageVO.getMberNm();
|
|
||||||
managerNm = mberManageVO.getManagerNm();
|
|
||||||
moblphonNo = mberManageVO.getMoblphonNo();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mberNm = mberManageVO.getMberNm();
|
|
||||||
managerNm = mberManageVO.getMberNm();
|
|
||||||
moblphonNo = mberManageVO.getMoblphonNo();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
model.addAttribute("mberNm", mberNm);
|
|
||||||
model.addAttribute("managerNm", managerNm);
|
|
||||||
model.addAttribute("moblphonNo", moblphonNo);
|
|
||||||
|
|
||||||
//부가세 포함 가격 정보 계산
|
//부가세 포함 가격 정보 계산
|
||||||
double addTax = Math.round(totalSumPrice * 0.1);
|
double addTax = Math.round(totalSumPrice * 0.1);
|
||||||
@ -6190,7 +5775,42 @@ public class MjonPayController {
|
|||||||
|
|
||||||
return "/uss/ion/pay/cashPointSendList";
|
return "/uss/ion/pay/cashPointSendList";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 거래명세서 팝업
|
||||||
|
* @param searchVO
|
||||||
|
* @param model
|
||||||
|
* @return "/web/member/pay/payInvoicePopupAjax.do"
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@RequestMapping(value= {"/web/member/pay/payInvoicePopupAjax.do"})
|
||||||
|
public String printInvoiceAjax(
|
||||||
|
@ModelAttribute("searchVO") MjonPayVO mjonPayVO
|
||||||
|
, RedirectAttributes redirectAttributes
|
||||||
|
, ModelMap model) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//로그인 권한정보 불러오기
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
|
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
|
if(loginVO == null) {
|
||||||
|
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
|
||||||
|
return "redirect:/web/user/login/login.do";
|
||||||
|
}
|
||||||
|
|
||||||
|
mjonPayVO.setUserId(userId);
|
||||||
|
|
||||||
|
//결제 정보 불러오기
|
||||||
|
MJUtil mjUtil = new MJUtil();
|
||||||
|
MjonPayVO result = mjonPayService.selectPayDetail(mjonPayVO);
|
||||||
|
result.setMbtlNum(mjUtil.addDash(result.getMbtlNum()));
|
||||||
|
result.setBizNo(mjUtil.bizNoAddDash(result.getBizNo()));
|
||||||
|
model.addAttribute("result", result);
|
||||||
|
|
||||||
|
return "web/pay/payInvoicePrintPopup";
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @param p_pattern
|
* @param p_pattern
|
||||||
* @param p_mjonPayVO
|
* @param p_mjonPayVO
|
||||||
@ -6303,5 +5923,6 @@ public class MjonPayController {
|
|||||||
|
|
||||||
return p_response;
|
return p_response;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -278,6 +278,8 @@ public class MjonPayV2Controller {
|
|||||||
try {
|
try {
|
||||||
// 다음 결제시 결제수단 SELECT
|
// 다음 결제시 결제수단 SELECT
|
||||||
nextPayMethod = userManageService.selectNextPayMethod(userId);
|
nextPayMethod = userManageService.selectNextPayMethod(userId);
|
||||||
|
// 실제 마지막 결제 방식 -
|
||||||
|
|
||||||
}
|
}
|
||||||
catch(Exception e) {
|
catch(Exception e) {
|
||||||
isSuccess = false;
|
isSuccess = false;
|
||||||
@ -1640,6 +1642,45 @@ public class MjonPayV2Controller {
|
|||||||
return "web/cop/kgmV2/bankOkUrl";
|
return "web/cop/kgmV2/bankOkUrl";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 마지막 결제수단 SELECT
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@RequestMapping(value = "/web/member/pay/selectLastPayMethodAjax.do")
|
||||||
|
public ModelAndView selectLastPayMethodAjax(MjonPayVO mjonPayVO,
|
||||||
|
HttpServletRequest request ) throws Exception {
|
||||||
|
|
||||||
|
ModelAndView modelAndView = new ModelAndView();
|
||||||
|
modelAndView.setViewName("jsonView");
|
||||||
|
|
||||||
|
boolean isSuccess = true;
|
||||||
|
String msg = "";
|
||||||
|
String nextPayMethod = "";
|
||||||
|
|
||||||
|
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
|
||||||
|
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||||
|
|
||||||
|
if(userId == null) {
|
||||||
|
isSuccess = false;
|
||||||
|
msg = "로그인이 필요합니다.";
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 다음 결제시 결제수단 SELECT
|
||||||
|
nextPayMethod = userManageService.selectLastPayMethod(userId);
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
isSuccess = false;
|
||||||
|
msg = e.getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
modelAndView.addObject("isSuccess", isSuccess);
|
||||||
|
modelAndView.addObject("msg", msg);
|
||||||
|
modelAndView.addObject("nextPayMethod", nextPayMethod);
|
||||||
|
|
||||||
|
return modelAndView;
|
||||||
|
}
|
||||||
|
|
||||||
// Get Server Path
|
// Get Server Path
|
||||||
public static String getKgServerPath(HttpServletRequest request) {
|
public static String getKgServerPath(HttpServletRequest request) {
|
||||||
String kgmPath = request.getScheme() + "://" + request.getServerName() +":" + request.getServerPort();
|
String kgmPath = request.getScheme() + "://" + request.getServerName() +":" + request.getServerPort();
|
||||||
|
|||||||
@ -51,4 +51,7 @@ public interface SchdlrManageService {
|
|||||||
public void payBack(String type, int limitCout) throws Exception;
|
public void payBack(String type, int limitCout) throws Exception;
|
||||||
|
|
||||||
public void payBack_advc(String p_type) throws Exception;
|
public void payBack_advc(String p_type) throws Exception;
|
||||||
|
|
||||||
|
//대체문자 결과 반영 배치
|
||||||
|
public void updateKakaoResendResult() throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -480,7 +480,8 @@ public class SchedulerUtil {
|
|||||||
public LockProvider lockProvider(DataSource dataSource) {
|
public LockProvider lockProvider(DataSource dataSource) {
|
||||||
return new JdbcTemplateLockProvider(dataSource);
|
return new JdbcTemplateLockProvider(dataSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Scheduled(cron = "0 0 0/2 * * ?") // 매시간 짝수 정각마다 실행
|
||||||
@Scheduled(cron = "0 0/3 * * * ?") // 3분마다 실행
|
@Scheduled(cron = "0 0/3 * * * ?") // 3분마다 실행
|
||||||
@SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
@SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
public void runKakaoOneTime() throws Exception {
|
public void runKakaoOneTime() throws Exception {
|
||||||
@ -512,6 +513,21 @@ public class SchedulerUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//대체문자 결과 반영
|
||||||
|
@Scheduled(cron = "0 0/2 * * * ?") // 2분마다 실행
|
||||||
|
@SchedulerLock(name = "updateKakaoResendResult", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
|
||||||
|
public void runUpdateKakaoResendResult() throws Exception {
|
||||||
|
|
||||||
|
try {
|
||||||
|
System.out.println("=============SchedulerUtil=====runUpdateKakaoResendResult =============>");
|
||||||
|
schdlrManageService.updateKakaoResendResult();
|
||||||
|
}catch(Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//환불 실행
|
//환불 실행
|
||||||
private void PayBack(String p_type) throws Exception {
|
private void PayBack(String p_type) throws Exception {
|
||||||
|
|
||||||
|
|||||||
@ -393,12 +393,12 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
// 대상 : 휴대폰결제, 즉시이체, 전용계좌
|
// 대상 : 휴대폰결제, 즉시이체, 전용계좌
|
||||||
// Step 1. 스미싱의심 지정 여부
|
// Step 1. 스미싱의심 지정 여부
|
||||||
JoinSettingVO joinSettingVO = new JoinSettingVO();
|
// JoinSettingVO joinSettingVO = new JoinSettingVO();
|
||||||
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
|
JoinSettingVO joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
|
||||||
if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) {
|
if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) {
|
||||||
// Step 1. 개인회원 여부 체크
|
// Step 1. 개인회원 여부 체크
|
||||||
int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid);
|
// int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid);
|
||||||
if (isPersnalMemberCnt == 1) {
|
// if (isPersnalMemberCnt == 1) {
|
||||||
// Step 2. 첫결제 여부 체크
|
// Step 2. 첫결제 여부 체크
|
||||||
int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid);
|
int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid);
|
||||||
if (isFirstPayCnt == 1) {
|
if (isFirstPayCnt == 1) {
|
||||||
@ -418,10 +418,11 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
// 스미싱 의심회원으로 변경
|
// 스미싱 의심회원으로 변경
|
||||||
UserManageVO userManageVO = new UserManageVO();
|
UserManageVO userManageVO = new UserManageVO();
|
||||||
userManageVO.setSmishingYn("Y");
|
userManageVO.setSmishingYn("Y");
|
||||||
|
userManageVO.setAtSmishingYn("Y");
|
||||||
userManageVO.setMberId(Userid);
|
userManageVO.setMberId(Userid);
|
||||||
userManageService.updateOneUserSmishingYnNotAlert(userManageVO);
|
userManageService.updateOneUserSmishingYnNotAlert(userManageVO);
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -555,4 +556,37 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
|
|
||||||
return msgFailList;
|
return msgFailList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @methodName : updateKakaoResendResult
|
||||||
|
* @author : 이지우
|
||||||
|
* @date : 2025.07.15
|
||||||
|
* @description : 대체문자 결과 반영
|
||||||
|
* @param p_type
|
||||||
|
* @param request
|
||||||
|
* @param model
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void updateKakaoResendResult() throws Exception {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
// 대체문자 대상 조회
|
||||||
|
List<MjonMsgVO> resendLogList = mjonMsgDataDAO.selectBizResendLogList();
|
||||||
|
for(MjonMsgVO vo : resendLogList) {
|
||||||
|
if("4100".equals(vo.getResultCode())
|
||||||
|
|| "6600".equals(vo.getResultCode())
|
||||||
|
|| "7000".equals(vo.getResultCode())) {
|
||||||
|
vo.setMsgResult("40");
|
||||||
|
}else {
|
||||||
|
vo.setMsgResult("50");
|
||||||
|
}
|
||||||
|
mjonMsgDataDAO.updateResendResult(vo);
|
||||||
|
mjonMsgDataDAO.deleteBizResendLog(vo);
|
||||||
|
}
|
||||||
|
long endTime = System.currentTimeMillis();
|
||||||
|
long elapsedTime = (endTime - startTime) / 1000; // 초 단위 변환
|
||||||
|
System.out.println("updateKakaoResendResult 실행 시간: " + elapsedTime + "초 (" + resendLogList.size() + "건 처리)");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -65,6 +65,7 @@ public class JoinSettingVO {
|
|||||||
private String slackNoti; //관리자 SLACK 알림 여부
|
private String slackNoti; //관리자 SLACK 알림 여부
|
||||||
private String smishingNoti; //첫결제(카드제외) 스미싱의심 알림 여부
|
private String smishingNoti; //첫결제(카드제외) 스미싱의심 알림 여부
|
||||||
private String holiSmishingNoti; //야간 스미싱알림 여부
|
private String holiSmishingNoti; //야간 스미싱알림 여부
|
||||||
|
private String smsNotiIfOverFifty; //50건이상 문자발송 시 안내문자 발송
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -121,5 +121,4 @@ public interface EgovLoginService {
|
|||||||
//비밀번호 실패 횟수 조회
|
//비밀번호 실패 횟수 조회
|
||||||
public LoginVO selectPassMiss(LoginVO vo) throws Exception;
|
public LoginVO selectPassMiss(LoginVO vo) throws Exception;
|
||||||
|
|
||||||
public KmcVO kmcDecryption(HttpServletRequest request, KmcVO kmcVO);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
|||||||
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
import egovframework.rte.psl.dataaccess.util.EgovMap;
|
||||||
import itn.com.cmm.LoginVO;
|
import itn.com.cmm.LoginVO;
|
||||||
import itn.let.mjo.pay.service.KmcVO;
|
import itn.let.mjo.pay.service.KmcVO;
|
||||||
|
import itn.let.uat.uia.service.AuthCertVO;
|
||||||
import itn.let.uat.uia.service.EgovLoginService;
|
import itn.let.uat.uia.service.EgovLoginService;
|
||||||
import itn.let.uss.umt.service.UserManageVO;
|
import itn.let.uss.umt.service.UserManageVO;
|
||||||
import itn.let.utl.fcc.service.EgovNumberUtil;
|
import itn.let.utl.fcc.service.EgovNumberUtil;
|
||||||
@ -318,240 +319,6 @@ public class EgovLoginServiceImpl extends EgovAbstractServiceImpl implements
|
|||||||
return loginDAO.selectPassMiss(vo);
|
return loginDAO.selectPassMiss(vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public KmcVO kmcDecryption(HttpServletRequest request, KmcVO kmcVO) {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
String rec_cert = request.getParameter("rec_cert").trim();
|
|
||||||
String certNum = request.getParameter("certNum").trim();
|
|
||||||
|
|
||||||
kmcVO.setRecCert(rec_cert);
|
|
||||||
kmcVO.setCertNum(certNum);
|
|
||||||
// 파라미터 유효성 검증
|
|
||||||
if (rec_cert.length() == 0 || certNum.length() == 0) {
|
|
||||||
kmcVO.setErrMessage("비정상");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
// 변수선언
|
|
||||||
// --------------------------------------------------------------------------------------------------------
|
|
||||||
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
|
||||||
k_certNum = certNum;
|
|
||||||
String date = ""; // 요청일시
|
|
||||||
String CI = ""; // 연계정보(CI)
|
|
||||||
String DI = ""; // 중복가입확인정보(DI)
|
|
||||||
String phoneNo = ""; // 휴대폰번호
|
|
||||||
String phoneCorp = ""; // 이동통신사
|
|
||||||
String birthDay = ""; // 생년월일
|
|
||||||
String gender = ""; // 성별
|
|
||||||
String nation = ""; // 내국인
|
|
||||||
String name = ""; // 성명
|
|
||||||
String M_name = ""; // 미성년자 성명
|
|
||||||
String M_birthDay = ""; // 미성년자 생년월일
|
|
||||||
String M_Gender = ""; // 미성년자 성별
|
|
||||||
String M_nation = ""; // 미성년자 내외국인
|
|
||||||
String result = ""; // 결과값
|
|
||||||
|
|
||||||
String certMet = ""; // 인증방법
|
|
||||||
String ip = ""; // ip주소
|
|
||||||
String plusInfo = "";
|
|
||||||
|
|
||||||
String encPara = "";
|
|
||||||
String encMsg1 = "";
|
|
||||||
String encMsg2 = "";
|
|
||||||
String msgChk = "";
|
|
||||||
|
|
||||||
IcertSecuManager seed = new IcertSecuManager();
|
|
||||||
|
|
||||||
// 02. 1차 복호화
|
|
||||||
// 수신된 certNum를 이용하여 복호화
|
|
||||||
rec_cert = seed.getDec(rec_cert, k_certNum);
|
|
||||||
|
|
||||||
// 03. 1차 파싱
|
|
||||||
int inf1 = rec_cert.indexOf("/", 0);
|
|
||||||
int inf2 = rec_cert.indexOf("/", inf1 + 1);
|
|
||||||
|
|
||||||
encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
|
|
||||||
encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
|
|
||||||
|
|
||||||
// 04. 위변조 검증
|
|
||||||
encMsg2 = seed.getMsg(encPara);
|
|
||||||
kmcVO.setEncMsg2(encMsg2);
|
|
||||||
if (encMsg2.equals(encMsg1)) {
|
|
||||||
msgChk = "Y";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!"Y".equals(msgChk)) {
|
|
||||||
kmcVO.setErrMessage("비정상접근입니다.");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 05. 2차 복호화
|
|
||||||
rec_cert = seed.getDec(encPara, k_certNum);
|
|
||||||
kmcVO.setRecCert(rec_cert);
|
|
||||||
// 06. 2차 파싱
|
|
||||||
int info1 = rec_cert.indexOf("/", 0);
|
|
||||||
int info2 = rec_cert.indexOf("/", info1 + 1);
|
|
||||||
int info3 = rec_cert.indexOf("/", info2 + 1);
|
|
||||||
int info4 = rec_cert.indexOf("/", info3 + 1);
|
|
||||||
int info5 = rec_cert.indexOf("/", info4 + 1);
|
|
||||||
int info6 = rec_cert.indexOf("/", info5 + 1);
|
|
||||||
int info7 = rec_cert.indexOf("/", info6 + 1);
|
|
||||||
int info8 = rec_cert.indexOf("/", info7 + 1);
|
|
||||||
int info9 = rec_cert.indexOf("/", info8 + 1);
|
|
||||||
int info10 = rec_cert.indexOf("/", info9 + 1);
|
|
||||||
int info11 = rec_cert.indexOf("/", info10 + 1);
|
|
||||||
int info12 = rec_cert.indexOf("/", info11 + 1);
|
|
||||||
int info13 = rec_cert.indexOf("/", info12 + 1);
|
|
||||||
int info14 = rec_cert.indexOf("/", info13 + 1);
|
|
||||||
int info15 = rec_cert.indexOf("/", info14 + 1);
|
|
||||||
int info16 = rec_cert.indexOf("/", info15 + 1);
|
|
||||||
int info17 = rec_cert.indexOf("/", info16 + 1);
|
|
||||||
int info18 = rec_cert.indexOf("/", info17 + 1);
|
|
||||||
|
|
||||||
certNum = rec_cert.substring(0, info1);
|
|
||||||
kmcVO.setCertNum(certNum);
|
|
||||||
date = rec_cert.substring(info1 + 1, info2);
|
|
||||||
kmcVO.setDate(date);
|
|
||||||
CI = rec_cert.substring(info2 + 1, info3);
|
|
||||||
kmcVO.setCI(CI);
|
|
||||||
phoneNo = rec_cert.substring(info3 + 1, info4);
|
|
||||||
kmcVO.setPhoneNo(phoneNo);
|
|
||||||
phoneCorp = rec_cert.substring(info4 + 1, info5);
|
|
||||||
kmcVO.setPhoneCorp(phoneCorp);
|
|
||||||
birthDay = rec_cert.substring(info5 + 1, info6);
|
|
||||||
kmcVO.setBirthDay(birthDay);
|
|
||||||
gender = rec_cert.substring(info6 + 1, info7);
|
|
||||||
kmcVO.setGender(gender);
|
|
||||||
nation = rec_cert.substring(info7 + 1, info8);
|
|
||||||
kmcVO.setNation(nation);
|
|
||||||
name = rec_cert.substring(info8 + 1, info9);
|
|
||||||
kmcVO.setName(name);
|
|
||||||
result = rec_cert.substring(info9 + 1, info10);
|
|
||||||
kmcVO.setResult(result);
|
|
||||||
certMet = rec_cert.substring(info10 + 1, info11);
|
|
||||||
kmcVO.setCertMet(certMet);
|
|
||||||
ip = rec_cert.substring(info11 + 1, info12);
|
|
||||||
kmcVO.setIp(ip);
|
|
||||||
M_name = rec_cert.substring(info12 + 1, info13);
|
|
||||||
kmcVO.setMName(M_name);
|
|
||||||
M_birthDay = rec_cert.substring(info13 + 1, info14);
|
|
||||||
kmcVO.setMBirthDay(M_birthDay);
|
|
||||||
M_Gender = rec_cert.substring(info14 + 1, info15);
|
|
||||||
kmcVO.setMGender(M_Gender);
|
|
||||||
M_nation = rec_cert.substring(info15 + 1, info16);
|
|
||||||
kmcVO.setMNation(M_nation);
|
|
||||||
plusInfo = rec_cert.substring(info16 + 1, info17);
|
|
||||||
kmcVO.setPlusInfo(plusInfo);
|
|
||||||
DI = rec_cert.substring(info17 + 1, info18);
|
|
||||||
kmcVO.setDI(DI);
|
|
||||||
|
|
||||||
// 07. CI, DI 복호화
|
|
||||||
CI = seed.getDec(CI, k_certNum);
|
|
||||||
kmcVO.setCI(CI);
|
|
||||||
DI = seed.getDec(DI, k_certNum);
|
|
||||||
kmcVO.setDI(DI);
|
|
||||||
|
|
||||||
if ("Y".equals(result)) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------
|
|
||||||
String regex = "";
|
|
||||||
if (certNum.length() == 0 || certNum.length() > 40) {
|
|
||||||
kmcVO.setErrMessage("요청번호 비정상.");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (date.length() != 14 || !this.paramChk(regex, date)) {
|
|
||||||
kmcVO.setErrMessage("요청일시");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if (certMet.length() != 1 || !this.paramChk(regex, certMet)) {
|
|
||||||
kmcVO.setErrMessage("본인인증방법 비정상" + certMet);
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !this.paramChk(regex, phoneNo)) {
|
|
||||||
kmcVO.setErrMessage("휴대폰번호 비정상");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if (phoneCorp.length() != 3 || !this.paramChk(regex, phoneCorp)) {
|
|
||||||
kmcVO.setErrMessage("이동통신사 비정상");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (birthDay.length() != 8 || !this.paramChk(regex, birthDay)) {
|
|
||||||
kmcVO.setErrMessage("생년월일 비정상");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (gender.length() != 1 || !this.paramChk(regex, gender)) {
|
|
||||||
kmcVO.setErrMessage("성별 비정상");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (nation.length() != 1 || !this.paramChk(regex, nation)) {
|
|
||||||
kmcVO.setErrMessage("내/외국인 비정상");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[\\sA-Za-z가-<2D>R.,-]*";
|
|
||||||
if (name.length() > 60 || !this.paramChk(regex, name)) {
|
|
||||||
kmcVO.setErrMessage("성명 비정상");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if (result.length() != 1 || !this.paramChk(regex, result)) {
|
|
||||||
kmcVO.setErrMessage("결과값 비정상");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[\\sA-Za-z가-?.,-]*";
|
|
||||||
if (M_name.length() != 0) {
|
|
||||||
if (M_name.length() > 60 || !this.paramChk(regex, M_name)) {
|
|
||||||
kmcVO.setErrMessage("미성년자 성명 비정상");
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (M_birthDay.length() != 0) {
|
|
||||||
if (M_birthDay.length() != 8 || !this.paramChk(regex, M_birthDay)) {
|
|
||||||
kmcVO.setErrMessage("미성년자 생년월일 비정상");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (M_Gender.length() != 0) {
|
|
||||||
if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
|
|
||||||
kmcVO.setErrMessage("미성년자 성별 비정상");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (M_nation.length() != 0) {
|
|
||||||
if (M_nation.length() != 1 || !this.paramChk(regex, M_nation)) {
|
|
||||||
kmcVO.setErrMessage("미성년자 내/외국인 비정상");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return kmcVO;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Boolean paramChk(String patn, String param) {
|
public Boolean paramChk(String patn, String param) {
|
||||||
Pattern pattern = Pattern.compile(patn);
|
Pattern pattern = Pattern.compile(patn);
|
||||||
Matcher matcher = pattern.matcher(param);
|
Matcher matcher = pattern.matcher(param);
|
||||||
|
|||||||
@ -1,5 +1,10 @@
|
|||||||
package itn.let.uat.uia.service.impl;
|
package itn.let.uat.uia.service.impl;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -11,14 +16,16 @@ import org.springframework.web.context.request.ServletRequestAttributes;
|
|||||||
|
|
||||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
|
import itn.com.cmm.util.StringUtil;
|
||||||
import itn.com.uss.olh.hpc.service.HackIpService;
|
import itn.com.uss.olh.hpc.service.HackIpService;
|
||||||
import itn.com.uss.olh.hpc.service.HackIpVO;
|
import itn.com.uss.olh.hpc.service.HackIpVO;
|
||||||
import itn.com.utl.fcc.service.EgovStringUtil;
|
import itn.com.utl.fcc.service.EgovStringUtil;
|
||||||
import itn.let.mjo.cert.service.CertVO;
|
import itn.let.mjo.msgdata.service.MjonMsgDataService;
|
||||||
import itn.let.mjo.msgsent.service.MjonMsgSentVO;
|
import itn.let.mjo.msgsent.service.MjonMsgSentVO;
|
||||||
import itn.let.mjo.pay.service.KmcVO;
|
import itn.let.mjo.pay.service.KmcVO;
|
||||||
import itn.let.sec.rgm.service.AuthorGroup;
|
import itn.let.sec.rgm.service.AuthorGroup;
|
||||||
import itn.let.sec.rgm.service.EgovAuthorGroupService;
|
import itn.let.sec.rgm.service.EgovAuthorGroupService;
|
||||||
|
import itn.let.sym.site.service.JoinSettingVO;
|
||||||
import itn.let.uat.uia.service.AuthCertVO;
|
import itn.let.uat.uia.service.AuthCertVO;
|
||||||
import itn.let.uss.umt.service.AdmProcHstryVO;
|
import itn.let.uss.umt.service.AdmProcHstryVO;
|
||||||
import itn.let.uss.umt.service.EgovMberManageService;
|
import itn.let.uss.umt.service.EgovMberManageService;
|
||||||
@ -82,6 +89,10 @@ public class EgovMberManageServiceImpl extends EgovAbstractServiceImpl implement
|
|||||||
@Resource(name = "hackIpService")
|
@Resource(name = "hackIpService")
|
||||||
private HackIpService hackIpService;
|
private HackIpService hackIpService;
|
||||||
|
|
||||||
|
/* MjonMsgDataService */
|
||||||
|
@Resource(name = "MjonMsgDataService")
|
||||||
|
private MjonMsgDataService mjonMsgDataService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int insertMber(MberManageVO mberManageVO) throws Exception {
|
public int insertMber(MberManageVO mberManageVO) throws Exception {
|
||||||
@ -621,4 +632,71 @@ public class EgovMberManageServiceImpl extends EgovAbstractServiceImpl implement
|
|||||||
return mberManageDAO.findTopByregDateFromCertLog(authCertVO);
|
return mberManageDAO.findTopByregDateFromCertLog(authCertVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MberManageVO selectMberHeaderInfo(String mberId) throws Exception {
|
||||||
|
//회원 단가, 이벤트 단가, 이벤트 종료일 등 조회
|
||||||
|
MberManageVO headerInfo = mberManageDAO.selectMberHeaderInfo(mberId);
|
||||||
|
//기본 단가 조회
|
||||||
|
JoinSettingVO sysPrice = mjonMsgDataService.selectJoinSettingInfo();
|
||||||
|
|
||||||
|
//이벤트 종료까지 남은 일 수 계산
|
||||||
|
long eventLeftDay = calculateEventLeftDay(headerInfo.getEventEndDate());
|
||||||
|
headerInfo.setEventLeftDay(String.valueOf(eventLeftDay));
|
||||||
|
|
||||||
|
//이벤트 유무에 따라 이벤트 잔액 or 잔액 사용
|
||||||
|
boolean isEventActive = eventLeftDay > 0;
|
||||||
|
double money = isEventActive ? headerInfo.getEventRemainCash() : headerInfo.getUserMoney();
|
||||||
|
|
||||||
|
//이벤트, 회원 단가가 0일 시 기본 단가 사용
|
||||||
|
setPrices(headerInfo, sysPrice, isEventActive);
|
||||||
|
|
||||||
|
//발송가능 건수 조회
|
||||||
|
calculateAvailableCounts(headerInfo, money);
|
||||||
|
|
||||||
|
return headerInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private long calculateEventLeftDay(String eventEndDateStr) {
|
||||||
|
if (StringUtil.isEmpty(eventEndDateStr)) return 0;
|
||||||
|
LocalDate today = LocalDate.now();
|
||||||
|
LocalDate eventEndDate = LocalDate.parse(eventEndDateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||||
|
return ChronoUnit.DAYS.between(today, eventEndDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setPrices(MberManageVO headerInfo, JoinSettingVO sysPrice, boolean isEventActive) {
|
||||||
|
if (isEventActive) {
|
||||||
|
headerInfo.setHeaderShortPrice(priceChk(headerInfo.getEventShortPrice(), sysPrice.getShortPrice()));
|
||||||
|
headerInfo.setHeaderLongPrice(priceChk(headerInfo.getEventLongPrice(), sysPrice.getLongPrice()));
|
||||||
|
headerInfo.setHeaderPicturePrice(priceChk(headerInfo.getEventPicturePrice(), sysPrice.getPicturePrice()));
|
||||||
|
headerInfo.setHeaderPicture2Price(priceChk(headerInfo.getEventPicture2Price(), sysPrice.getPicture2Price()));
|
||||||
|
headerInfo.setHeaderPicture3Price(priceChk(headerInfo.getEventPicture3Price(), sysPrice.getPicture3Price()));
|
||||||
|
} else {
|
||||||
|
headerInfo.setHeaderShortPrice(priceChk(headerInfo.getShortPrice(), sysPrice.getShortPrice()));
|
||||||
|
headerInfo.setHeaderLongPrice(priceChk(headerInfo.getLongPrice(), sysPrice.getLongPrice()));
|
||||||
|
headerInfo.setHeaderPicturePrice(priceChk(headerInfo.getPicturePrice(), sysPrice.getPicturePrice()));
|
||||||
|
headerInfo.setHeaderPicture2Price(priceChk(headerInfo.getPicture2Price(), sysPrice.getPicture2Price()));
|
||||||
|
headerInfo.setHeaderPicture3Price(priceChk(headerInfo.getPicture3Price(), sysPrice.getPicture3Price()));
|
||||||
|
}
|
||||||
|
// 카카오, 팩스 단가는 기본 단가 고정
|
||||||
|
headerInfo.setHeaderKakaoAtPrice(sysPrice.getKakaoAtPrice());
|
||||||
|
headerInfo.setHeaderFaxPrice(sysPrice.getFaxPrice());
|
||||||
|
}
|
||||||
|
|
||||||
|
private float priceChk(float price, float sysPrice) {
|
||||||
|
return price > 0 ? price : sysPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void calculateAvailableCounts(MberManageVO headerInfo, double money) {
|
||||||
|
headerInfo.setHeaderShortCnt(calcCount(money, headerInfo.getHeaderShortPrice()));
|
||||||
|
headerInfo.setHeaderLongCnt(calcCount(money, headerInfo.getHeaderLongPrice()));
|
||||||
|
headerInfo.setHeaderPictureCnt(calcCount(money, headerInfo.getHeaderPicturePrice()));
|
||||||
|
headerInfo.setHeaderPicture2Cnt(calcCount(money, headerInfo.getHeaderPicture2Price()));
|
||||||
|
headerInfo.setHeaderPicture3Cnt(calcCount(money, headerInfo.getHeaderPicture3Price()));
|
||||||
|
headerInfo.setHeaderKakaoAtCnt(calcCount(money, headerInfo.getHeaderKakaoAtPrice()));
|
||||||
|
headerInfo.setHeaderFaxCnt(calcCount(money, headerInfo.getHeaderFaxPrice()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private int calcCount(double money, double price) {
|
||||||
|
if (price <= 0) return 0;
|
||||||
|
return (int) Math.floor(money / price);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -345,5 +345,8 @@ public class MberManageDAO extends EgovComAbstractDAO{
|
|||||||
public String findTopByregDateFromCertLog(AuthCertVO authCertVO) {
|
public String findTopByregDateFromCertLog(AuthCertVO authCertVO) {
|
||||||
return (String)select("mberManageDAO.findTopByregDateFromCertLog", authCertVO);
|
return (String)select("mberManageDAO.findTopByregDateFromCertLog", authCertVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MberManageVO selectMberHeaderInfo(String mberId) {
|
||||||
|
return (MberManageVO) select("mberManageDAO.selectMberHeaderInfo", mberId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -253,7 +253,7 @@ public class EgovLoginController {
|
|||||||
private CertIpService certIpService;
|
private CertIpService certIpService;
|
||||||
|
|
||||||
@Resource(name = "KmcCertChecker")
|
@Resource(name = "KmcCertChecker")
|
||||||
private KmcCertChecker kmcCertCheck;
|
private KmcCertChecker kmcCertChecker;
|
||||||
|
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class);
|
private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class);
|
||||||
@ -336,7 +336,7 @@ public class EgovLoginController {
|
|||||||
|
|
||||||
MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO();
|
MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO();
|
||||||
mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAjax.do");
|
mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAjax.do");
|
||||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||||
|
|
||||||
model.addAttribute("tr_cert", certVO.getTr_cert());
|
model.addAttribute("tr_cert", certVO.getTr_cert());
|
||||||
model.addAttribute("tr_url", certVO.getTr_url());
|
model.addAttribute("tr_url", certVO.getTr_url());
|
||||||
@ -385,7 +385,7 @@ public class EgovLoginController {
|
|||||||
mberCertPhoneVO.setNation(mberManageVO.getNationality());
|
mberCertPhoneVO.setNation(mberManageVO.getNationality());
|
||||||
mberCertPhoneVO.setBirthDay(mberManageVO.getBirth());
|
mberCertPhoneVO.setBirthDay(mberManageVO.getBirth());
|
||||||
|
|
||||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||||
|
|
||||||
// AuthCertVO certVO = kmcCertCheck.authCertCheckTwo(serverNm + "/web/cop/kmc/authRequestAjax.do",
|
// AuthCertVO certVO = kmcCertCheck.authCertCheckTwo(serverNm + "/web/cop/kmc/authRequestAjax.do",
|
||||||
// mberManageVO.getMberNm(), mberManageVO.getMoblphonNo(), mberManageVO.getSexdstnCode(),
|
// mberManageVO.getMberNm(), mberManageVO.getMoblphonNo(), mberManageVO.getSexdstnCode(),
|
||||||
@ -4035,7 +4035,7 @@ public class EgovLoginController {
|
|||||||
}
|
}
|
||||||
mberCertPhoneVO.setPlusInfo(plusInfo);
|
mberCertPhoneVO.setPlusInfo(plusInfo);
|
||||||
|
|
||||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||||
|
|
||||||
modelAndView.addObject("tr_cert", certVO.getTr_cert());
|
modelAndView.addObject("tr_cert", certVO.getTr_cert());
|
||||||
modelAndView.addObject("tr_url", certVO.getTr_url());
|
modelAndView.addObject("tr_url", certVO.getTr_url());
|
||||||
@ -4060,22 +4060,26 @@ public class EgovLoginController {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
@RequestMapping("/web/cop/kmc/authRequestFindIdPwAjax.do")
|
@RequestMapping("/web/cop/kmc/authRequestFindIdPwAjax.do")
|
||||||
public String authRequestFindIdPwAjax(HttpServletRequest request, ModelMap model,
|
public String authRequestFindIdPwAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model,
|
||||||
@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
|
@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
|
||||||
RedirectAttributes redirectAttributes) throws Exception {
|
RedirectAttributes redirectAttributes) throws Exception {
|
||||||
|
|
||||||
KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
|
// KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
|
||||||
|
//kmc 본인인증 결과처리
|
||||||
|
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||||
|
//kmc 본인인증 로그 처리
|
||||||
|
AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_아이디패스워드찾기");
|
||||||
|
|
||||||
String msg = "";
|
String msg = "";
|
||||||
if (!findIdKmcCheck(kmcRVO.getDI(), kmcRVO.getName(), kmcRVO.getPhoneNo())) {
|
if (!findIdKmcCheck(kmcVO.getDI(), kmcVO.getName(), kmcVO.getPhoneNo())) {
|
||||||
msg = "일치하는 정보가 없습니다.";
|
msg = "일치하는 정보가 없습니다.";
|
||||||
redirectAttributes.addFlashAttribute("message", msg);
|
redirectAttributes.addFlashAttribute("message", msg);
|
||||||
return "redirect:/web/user/findUserId.do";
|
return "redirect:/web/user/findUserId.do";
|
||||||
}
|
}
|
||||||
|
|
||||||
kmcRVO.setCertType("KMC_아이디패스워드찾기");
|
// kmcRVO.setCertType("KMC_아이디패스워드찾기");
|
||||||
// 디비 테이블에 저장하기
|
// // 디비 테이블에 저장하기
|
||||||
mberManageService.insertCertInfoLogBn(kmcRVO);
|
// mberManageService.insertCertInfoLogBn(kmcRVO);
|
||||||
|
|
||||||
model.addAttribute("kmcVO", kmcVO);
|
model.addAttribute("kmcVO", kmcVO);
|
||||||
return "web/login/findUserIdKmcReqPage";
|
return "web/login/findUserIdKmcReqPage";
|
||||||
@ -4092,18 +4096,24 @@ public class EgovLoginController {
|
|||||||
* @discription 관리자 로그인 DN 값 최초 등록
|
* @discription 관리자 로그인 DN 값 최초 등록
|
||||||
*/
|
*/
|
||||||
@RequestMapping("/web/cop/kmc/authRequestSelfLoginAjax.do")
|
@RequestMapping("/web/cop/kmc/authRequestSelfLoginAjax.do")
|
||||||
public String authRequestSelfLoginAjax(HttpServletRequest request, ModelMap model,
|
public String authRequestSelfLoginAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model,
|
||||||
@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
|
@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
|
||||||
RedirectAttributes redirectAttributes, HttpSession session) throws Exception {
|
RedirectAttributes redirectAttributes, HttpSession session) throws Exception {
|
||||||
|
|
||||||
UserManageVO userManageVO = new UserManageVO();
|
UserManageVO userManageVO = new UserManageVO();
|
||||||
|
|
||||||
KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
|
// KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
|
||||||
|
|
||||||
|
//kmc 본인인증 결과처리
|
||||||
|
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||||
|
//kmc 본인인증 로그 처리
|
||||||
|
AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_아이디패스워드찾기");
|
||||||
|
|
||||||
|
|
||||||
userManageVO.setCrtfcDnValue(kmcRVO.getDI());
|
userManageVO.setCrtfcDnValue(kmcVO.getDI());
|
||||||
userManageVO.setEmplyrNm(kmcRVO.getName());
|
userManageVO.setEmplyrNm(kmcVO.getName());
|
||||||
userManageVO.setEmplyrId(kmcRVO.getPlusInfo().split(",,,")[0]);
|
userManageVO.setEmplyrId(kmcVO.getPlusInfo().split(",,,")[0]);
|
||||||
userManageVO.setPassword(kmcRVO.getPlusInfo().split(",,,")[1]);
|
userManageVO.setPassword(kmcVO.getPlusInfo().split(",,,")[1]);
|
||||||
|
|
||||||
userManageService.updateCrtfcDnValue(userManageVO);
|
userManageService.updateCrtfcDnValue(userManageVO);
|
||||||
|
|
||||||
@ -4121,20 +4131,20 @@ public class EgovLoginController {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
// TODO: handle exception
|
// TODO: handle exception
|
||||||
}
|
}
|
||||||
kmcRVO.setCertType("KMC_관리자미인증IP접속인증");
|
// kmcRVO.setCertType("KMC_관리자미인증IP접속인증");
|
||||||
// 디비 테이블에 저장하기
|
// // 디비 테이블에 저장하기
|
||||||
|
//
|
||||||
try {
|
// try {
|
||||||
mberManageService.insertCertInfoLogBn(kmcRVO);
|
// mberManageService.insertCertInfoLogBn(kmcRVO);
|
||||||
|
//
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
System.out.println("!!!!!!!!!!!!!!!!!");
|
// System.out.println("!!!!!!!!!!!!!!!!!");
|
||||||
e.printStackTrace();
|
// e.printStackTrace();
|
||||||
// TODO: handle exception
|
// // TODO: handle exception
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
model.addAttribute("kmcVO", kmcRVO);
|
model.addAttribute("kmcVO", kmcVO);
|
||||||
|
|
||||||
System.out.println("======================================");
|
System.out.println("======================================");
|
||||||
model.addAttribute("userManageVO", userManageVO);
|
model.addAttribute("userManageVO", userManageVO);
|
||||||
@ -5425,7 +5435,7 @@ public class EgovLoginController {
|
|||||||
mberCertPhoneVO.setNation(KMCInfoVO.getNationality());
|
mberCertPhoneVO.setNation(KMCInfoVO.getNationality());
|
||||||
mberCertPhoneVO.setPlusInfo(loginVO.getId());
|
mberCertPhoneVO.setPlusInfo(loginVO.getId());
|
||||||
|
|
||||||
AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
|
AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
|
||||||
|
|
||||||
modelAndView.addObject("tr_cert", certVO.getTr_cert());
|
modelAndView.addObject("tr_cert", certVO.getTr_cert());
|
||||||
modelAndView.addObject("tr_url", certVO.getTr_url());
|
modelAndView.addObject("tr_url", certVO.getTr_url());
|
||||||
@ -5446,245 +5456,19 @@ public class EgovLoginController {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@RequestMapping("/web/cop/kmc/insertIPAjax.do")
|
@RequestMapping("/web/cop/kmc/insertIPAjax.do")
|
||||||
public String insertIPAjax(HttpServletRequest request, ModelMap model, @RequestParam Map<String, Object> commandMap,
|
public String insertIPAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map<String, Object> commandMap,
|
||||||
@ModelAttribute("searchVO") KmcVO kmcVO) throws Exception {
|
@ModelAttribute("searchVO") KmcVO kmcVO) throws Exception {
|
||||||
|
|
||||||
String errMessage = ""; // 에러메세지
|
//kmc 본인인증 결과처리
|
||||||
|
kmcVO = kmcCertChecker.authCertResult(request, response, model);
|
||||||
String rec_cert = ""; // 결과값(암호화)
|
//kmc 본인인증 로그 처리
|
||||||
String certNum = ""; // certNum
|
AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "IP등록");
|
||||||
|
|
||||||
rec_cert = request.getParameter("rec_cert").trim();
|
|
||||||
certNum = request.getParameter("certNum").trim();
|
|
||||||
|
|
||||||
kmcVO.setRecCert(rec_cert);
|
|
||||||
kmcVO.setCertNum(certNum);
|
|
||||||
// 파라미터 유효성 검증
|
|
||||||
if (rec_cert.length() == 0 || certNum.length() == 0) {
|
|
||||||
errMessage = "비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 변수선언
|
|
||||||
// --------------------------------------------------------------------------------------------------------
|
|
||||||
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
|
||||||
k_certNum = certNum;
|
|
||||||
String date = ""; // 요청일시
|
|
||||||
String CI = ""; // 연계정보(CI)
|
|
||||||
String DI = ""; // 중복가입확인정보(DI)
|
|
||||||
String phoneNo = ""; // 휴대폰번호
|
|
||||||
String phoneCorp = ""; // 이동통신사
|
|
||||||
String birthDay = ""; // 생년월일
|
|
||||||
String gender = ""; // 성별
|
|
||||||
String nation = ""; // 내국인
|
|
||||||
String name = ""; // 성명
|
|
||||||
String M_name = ""; // 미성년자 성명
|
|
||||||
String M_birthDay = ""; // 미성년자 생년월일
|
|
||||||
String M_Gender = ""; // 미성년자 성별
|
|
||||||
String M_nation = ""; // 미성년자 내외국인
|
|
||||||
String result = ""; // 결과값
|
|
||||||
|
|
||||||
String certMet = ""; // 인증방법
|
|
||||||
String ip = ""; // ip주소
|
|
||||||
String plusInfo = "";
|
|
||||||
|
|
||||||
String encPara = "";
|
|
||||||
String encMsg1 = "";
|
|
||||||
String encMsg2 = "";
|
|
||||||
String msgChk = "";
|
|
||||||
|
|
||||||
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
|
||||||
|
|
||||||
// 02. 1차 복호화
|
|
||||||
// 수신된 certNum를 이용하여 복호화
|
|
||||||
rec_cert = seed.getDec(rec_cert, k_certNum);
|
|
||||||
|
|
||||||
// 03. 1차 파싱
|
|
||||||
int inf1 = rec_cert.indexOf("/", 0);
|
|
||||||
int inf2 = rec_cert.indexOf("/", inf1 + 1);
|
|
||||||
|
|
||||||
encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
|
|
||||||
encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
|
|
||||||
|
|
||||||
// 04. 위변조 검증
|
|
||||||
encMsg2 = seed.getMsg(encPara);
|
|
||||||
kmcVO.setEncMsg2(encMsg2);
|
|
||||||
if (encMsg2.equals(encMsg1)) {
|
|
||||||
msgChk = "Y";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!"Y".equals(msgChk)) {
|
|
||||||
errMessage = "비정상접근입니다.";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 05. 2차 복호화
|
|
||||||
rec_cert = seed.getDec(encPara, k_certNum);
|
|
||||||
kmcVO.setRecCert(rec_cert);
|
|
||||||
// 06. 2차 파싱
|
|
||||||
int info1 = rec_cert.indexOf("/", 0);
|
|
||||||
int info2 = rec_cert.indexOf("/", info1 + 1);
|
|
||||||
int info3 = rec_cert.indexOf("/", info2 + 1);
|
|
||||||
int info4 = rec_cert.indexOf("/", info3 + 1);
|
|
||||||
int info5 = rec_cert.indexOf("/", info4 + 1);
|
|
||||||
int info6 = rec_cert.indexOf("/", info5 + 1);
|
|
||||||
int info7 = rec_cert.indexOf("/", info6 + 1);
|
|
||||||
int info8 = rec_cert.indexOf("/", info7 + 1);
|
|
||||||
int info9 = rec_cert.indexOf("/", info8 + 1);
|
|
||||||
int info10 = rec_cert.indexOf("/", info9 + 1);
|
|
||||||
int info11 = rec_cert.indexOf("/", info10 + 1);
|
|
||||||
int info12 = rec_cert.indexOf("/", info11 + 1);
|
|
||||||
int info13 = rec_cert.indexOf("/", info12 + 1);
|
|
||||||
int info14 = rec_cert.indexOf("/", info13 + 1);
|
|
||||||
int info15 = rec_cert.indexOf("/", info14 + 1);
|
|
||||||
int info16 = rec_cert.indexOf("/", info15 + 1);
|
|
||||||
int info17 = rec_cert.indexOf("/", info16 + 1);
|
|
||||||
int info18 = rec_cert.indexOf("/", info17 + 1);
|
|
||||||
|
|
||||||
certNum = rec_cert.substring(0, info1);
|
|
||||||
kmcVO.setCertNum(certNum);
|
|
||||||
date = rec_cert.substring(info1 + 1, info2);
|
|
||||||
kmcVO.setDate(date);
|
|
||||||
CI = rec_cert.substring(info2 + 1, info3);
|
|
||||||
kmcVO.setCI(CI);
|
|
||||||
phoneNo = rec_cert.substring(info3 + 1, info4);
|
|
||||||
kmcVO.setPhoneNo(phoneNo);
|
|
||||||
phoneCorp = rec_cert.substring(info4 + 1, info5);
|
|
||||||
kmcVO.setPhoneCorp(phoneCorp);
|
|
||||||
birthDay = rec_cert.substring(info5 + 1, info6);
|
|
||||||
kmcVO.setBirthDay(birthDay);
|
|
||||||
gender = rec_cert.substring(info6 + 1, info7);
|
|
||||||
kmcVO.setGender(gender);
|
|
||||||
nation = rec_cert.substring(info7 + 1, info8);
|
|
||||||
kmcVO.setNation(nation);
|
|
||||||
name = rec_cert.substring(info8 + 1, info9);
|
|
||||||
kmcVO.setName(name);
|
|
||||||
result = rec_cert.substring(info9 + 1, info10);
|
|
||||||
kmcVO.setResult(result);
|
|
||||||
certMet = rec_cert.substring(info10 + 1, info11);
|
|
||||||
kmcVO.setCertMet(certMet);
|
|
||||||
ip = rec_cert.substring(info11 + 1, info12);
|
|
||||||
kmcVO.setIp(ip);
|
|
||||||
M_name = rec_cert.substring(info12 + 1, info13);
|
|
||||||
kmcVO.setMName(M_name);
|
|
||||||
M_birthDay = rec_cert.substring(info13 + 1, info14);
|
|
||||||
kmcVO.setMBirthDay(M_birthDay);
|
|
||||||
M_Gender = rec_cert.substring(info14 + 1, info15);
|
|
||||||
kmcVO.setMGender(M_Gender);
|
|
||||||
M_nation = rec_cert.substring(info15 + 1, info16);
|
|
||||||
kmcVO.setMNation(M_nation);
|
|
||||||
plusInfo = rec_cert.substring(info16 + 1, info17);
|
|
||||||
kmcVO.setPlusInfo(plusInfo);
|
|
||||||
DI = rec_cert.substring(info17 + 1, info18);
|
|
||||||
kmcVO.setDI(DI);
|
|
||||||
|
|
||||||
// 07. CI, DI 복호화
|
|
||||||
CI = seed.getDec(CI, k_certNum);
|
|
||||||
kmcVO.setCI(CI);
|
|
||||||
DI = seed.getDec(DI, k_certNum);
|
|
||||||
kmcVO.setDI(DI);
|
|
||||||
|
|
||||||
if ("Y".equals(result)) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------
|
|
||||||
String regex = "";
|
|
||||||
if (certNum.length() == 0 || certNum.length() > 40) {
|
|
||||||
errMessage = "요청번호 비정상.";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (date.length() != 14 || !paramChk(regex, date)) {
|
|
||||||
errMessage = "요청일시";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if (certMet.length() != 1 || !paramChk(regex, certMet)) {
|
|
||||||
errMessage = "본인인증방법 비정상" + certMet;
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo)) {
|
|
||||||
errMessage = "휴대폰번호 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if (phoneCorp.length() != 3 || !paramChk(regex, phoneCorp)) {
|
|
||||||
errMessage = "이동통신사 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (birthDay.length() != 8 || !paramChk(regex, birthDay)) {
|
|
||||||
errMessage = "생년월일 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (gender.length() != 1 || !paramChk(regex, gender)) {
|
|
||||||
errMessage = "성별 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (nation.length() != 1 || !paramChk(regex, nation)) {
|
|
||||||
errMessage = "내/외국인 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[\\sA-Za-z가-<2D>R.,-]*";
|
|
||||||
if (name.length() > 60 || !paramChk(regex, name)) {
|
|
||||||
errMessage = "성명 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[A-Z]*";
|
|
||||||
if (result.length() != 1 || !paramChk(regex, result)) {
|
|
||||||
errMessage = "결과값 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[\\sA-Za-z가-?.,-]*";
|
|
||||||
if (M_name.length() != 0) {
|
|
||||||
if (M_name.length() > 60 || !paramChk(regex, M_name)) {
|
|
||||||
errMessage = "미성년자 성명 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (M_birthDay.length() != 0) {
|
|
||||||
if (M_birthDay.length() != 8 || !paramChk(regex, M_birthDay)) {
|
|
||||||
errMessage = "미성년자 생년월일 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (M_Gender.length() != 0) {
|
|
||||||
if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
|
|
||||||
errMessage = "미성년자 성별 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = "[0-9]*";
|
|
||||||
if (M_nation.length() != 0) {
|
|
||||||
if (M_nation.length() != 1 || !paramChk(regex, M_nation)) {
|
|
||||||
errMessage = "미성년자 내/외국인 비정상";
|
|
||||||
return returnPage(model, errMessage, kmcVO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LoginVO loginVO = new LoginVO();
|
LoginVO loginVO = new LoginVO();
|
||||||
loginVO.setId(plusInfo);
|
loginVO.setId(kmcVO.getPlusInfo());
|
||||||
|
|
||||||
loginVO = loginService.selectKMCInfo(loginVO);
|
loginVO = loginService.selectKMCInfo(loginVO);
|
||||||
String userIp = EgovClntInfo.getClntIP(request);
|
loginVO.setIp(kmcVO.getIp());
|
||||||
loginVO.setIp(ip);
|
|
||||||
|
|
||||||
loginService.insertMberIp(loginVO);
|
loginService.insertMberIp(loginVO);
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -198,7 +198,7 @@ public class EgovMypageRESTAPIController{
|
|||||||
|
|
||||||
List<ApiKeyVO> resultList = new ArrayList<ApiKeyVO>();
|
List<ApiKeyVO> resultList = new ArrayList<ApiKeyVO>();
|
||||||
resultList = apiKeyMngService.selectApiKeyApplyStatus(apiKeyVO);
|
resultList = apiKeyMngService.selectApiKeyApplyStatus(apiKeyVO);
|
||||||
System.out.println("=============");
|
|
||||||
if (resultList.size()>0) {
|
if (resultList.size()>0) {
|
||||||
if(StringUtils.isNotEmpty(resultList.get(0).getFrstRegistPnttm()))
|
if(StringUtils.isNotEmpty(resultList.get(0).getFrstRegistPnttm()))
|
||||||
{
|
{
|
||||||
@ -250,6 +250,31 @@ public class EgovMypageRESTAPIController{
|
|||||||
return "web/api/apiSpec";
|
return "web/api/apiSpec";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value="/web/api/apiAtSpec.do")
|
||||||
|
public String apiAtSpec(ModelMap model)
|
||||||
|
throws Exception {
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
|
|
||||||
|
if(loginVO == null) {
|
||||||
|
return "redirect:/web/user/login/login.do";
|
||||||
|
}
|
||||||
|
model.addAttribute("loginVO", loginVO);
|
||||||
|
|
||||||
|
return "web/api/apiAtSpec";
|
||||||
|
}
|
||||||
|
@RequestMapping(value="/web/api/apiFtSpec.do")
|
||||||
|
public String apiFtSpec(ModelMap model)
|
||||||
|
throws Exception {
|
||||||
|
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||||
|
|
||||||
|
if(loginVO == null) {
|
||||||
|
return "redirect:/web/user/login/login.do";
|
||||||
|
}
|
||||||
|
model.addAttribute("loginVO", loginVO);
|
||||||
|
|
||||||
|
return "web/api/apiFtSpec";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param model
|
* @param model
|
||||||
* @return
|
* @return
|
||||||
|
|||||||
@ -1,29 +1,44 @@
|
|||||||
package itn.let.uat.uia.web;
|
package itn.let.uat.uia.web;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.ui.ModelMap;
|
import org.springframework.ui.ModelMap;
|
||||||
|
import org.springframework.web.servlet.FlashMap;
|
||||||
|
import org.springframework.web.servlet.FlashMapManager;
|
||||||
|
import org.springframework.web.servlet.support.RequestContextUtils;
|
||||||
|
|
||||||
import com.icert.comm.secu.IcertSecuManager;
|
import com.icert.comm.secu.IcertSecuManager;
|
||||||
|
|
||||||
import itn.let.cert.phone.service.CertPhoneService;
|
import itn.let.cert.phone.service.CertPhoneService;
|
||||||
import itn.let.cert.phone.service.MberCertPhoneVO;
|
import itn.let.cert.phone.service.MberCertPhoneVO;
|
||||||
|
import itn.let.mjo.pay.service.KmcVO;
|
||||||
import itn.let.uat.uia.service.AuthCertVO;
|
import itn.let.uat.uia.service.AuthCertVO;
|
||||||
import itn.let.uss.umt.service.MberManageVO;
|
import itn.let.uss.umt.service.EgovMberManageService;
|
||||||
|
|
||||||
@Component("KmcCertChecker")
|
@Component("KmcCertChecker")
|
||||||
public class KmcCertChecker {
|
public class KmcCertChecker {
|
||||||
|
|
||||||
@Resource(name = "CertPhoneService")
|
@Resource(name = "CertPhoneService")
|
||||||
private CertPhoneService certPhoneService;
|
private CertPhoneService certPhoneService;
|
||||||
|
|
||||||
|
@Resource(name = "mberManageService")
|
||||||
|
private EgovMberManageService mberManageService;
|
||||||
|
|
||||||
//회원가입 시 인증수단을 휴대폰 본인인증만 했을 경우 사용
|
//회원가입 시 인증수단을 휴대폰 본인인증만 했을 경우 사용
|
||||||
public AuthCertVO authCertCheck(
|
public AuthCertVO authCertCheck(
|
||||||
@ -64,11 +79,13 @@ public class KmcCertChecker {
|
|||||||
String tr_add = "N"; // IFrame사용여부
|
String tr_add = "N"; // IFrame사용여부
|
||||||
|
|
||||||
//01. 한국모바일인증(주) 암호화 모듈 선언
|
//01. 한국모바일인증(주) 암호화 모듈 선언
|
||||||
IcertSecuManager seed = new IcertSecuManager();
|
// IcertSecuManager seed = new IcertSecuManager();
|
||||||
|
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
||||||
|
|
||||||
//02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화)
|
//02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화)
|
||||||
String enc_tr_cert = "";
|
String enc_tr_cert = "";
|
||||||
tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar;
|
tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar;
|
||||||
|
// tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"///////"+ plusInfo +"/"+ extendVar;
|
||||||
enc_tr_cert = seed.getEnc(tr_cert, "");
|
enc_tr_cert = seed.getEnc(tr_cert, "");
|
||||||
|
|
||||||
//03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC)
|
//03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC)
|
||||||
@ -87,7 +104,315 @@ public class KmcCertChecker {
|
|||||||
return authCertVO;
|
return authCertVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public KmcVO authCertResult(
|
||||||
|
HttpServletRequest request
|
||||||
|
, HttpServletResponse response
|
||||||
|
, ModelMap model
|
||||||
|
) throws IOException {
|
||||||
|
|
||||||
|
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
|
||||||
|
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
||||||
|
|
||||||
|
KmcVO kmcVO = new KmcVO(); //return VO
|
||||||
|
|
||||||
|
// 변수 -------------------------------------------------------------------------------------------------------------
|
||||||
|
String api_token = ""; // 토큰값(암호화)
|
||||||
|
String api_certNum = ""; // 요청번호(암호화)
|
||||||
|
|
||||||
|
String message = ""; // JSON 전문
|
||||||
|
String result_cd = ""; // JSON 결과코드
|
||||||
|
String result_msg = ""; // JSON 결과-상세
|
||||||
|
String strResult = ""; // JSON 결과
|
||||||
|
String apiRecCert = ""; // JSON 전송 데이터
|
||||||
|
String apiCertNum = ""; // JSON 전송 데이터
|
||||||
|
|
||||||
|
String rec_cert = ""; // 결과수신DATA
|
||||||
|
String k_certNum = ""; // 파라미터로 수신한 요청번호
|
||||||
|
String certNum = ""; // 요청번호
|
||||||
|
String date = ""; // 요청일시
|
||||||
|
String CI = ""; // 연계정보(CI)
|
||||||
|
String DI = ""; // 중복가입확인정보(DI)
|
||||||
|
String phoneNo = ""; // 휴대폰번호
|
||||||
|
String phoneCorp = ""; // 이동통신사
|
||||||
|
String birth = ""; // 생년월일
|
||||||
|
String gender = ""; // 성별
|
||||||
|
String nation = ""; // 내국인
|
||||||
|
String name = ""; // 성명
|
||||||
|
String reserve1 = ""; // 예비필드
|
||||||
|
String reserve2 = ""; // 예비필드
|
||||||
|
String reserve3 = ""; // 예비필드
|
||||||
|
String reserve4 = ""; // 예비필드
|
||||||
|
String result = ""; // 결과값
|
||||||
|
|
||||||
|
String certMet = ""; // 인증방법
|
||||||
|
String ip = ""; // ip주소
|
||||||
|
String plusInfo = "";
|
||||||
|
|
||||||
|
String encPara = "";
|
||||||
|
String encMsg1 = "";
|
||||||
|
String encMsg2 = "";
|
||||||
|
String msgChk = "";
|
||||||
|
//-----------------------------------------------------------------------------------------------------------------
|
||||||
|
try{
|
||||||
|
// Parameter 수신 --------------------------------------------------------------------
|
||||||
|
api_token = request.getParameter("apiToken").trim();
|
||||||
|
api_certNum = request.getParameter("certNum");
|
||||||
|
|
||||||
|
// 파라미터 유효성 검증
|
||||||
|
if( api_token.length() == 0 ){
|
||||||
|
goErrorPage("토큰값 비정상", request, response);
|
||||||
|
return kmcVO;
|
||||||
|
}
|
||||||
|
if( api_certNum.length() == 0 ){
|
||||||
|
goErrorPage("요청번호 비정상", request, response);
|
||||||
|
return kmcVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
//현재시각 세팅(YYYYMMDDHI24MISS)
|
||||||
|
Calendar today = Calendar.getInstance();
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
||||||
|
String api_date = sdf.format(today.getTime());
|
||||||
|
|
||||||
|
//01. 암호화 모듈 (jar) Loading
|
||||||
|
com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
|
||||||
|
|
||||||
|
//api_token, api_certNum 복호화
|
||||||
|
api_token = seed.getDec(api_token, "");
|
||||||
|
api_certNum = seed.getDec(api_certNum, "");
|
||||||
|
|
||||||
|
// 파라미터 유효성 검증
|
||||||
|
if( api_token.length() == 0 ){
|
||||||
|
goErrorPage("토큰값 비정상(복호화 후)", request, response);
|
||||||
|
return kmcVO;
|
||||||
|
}
|
||||||
|
if( api_certNum.length() == 0 ){
|
||||||
|
goErrorPage("요청번호 비정상(복호화 후)", request, response);
|
||||||
|
return kmcVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. URL 설정
|
||||||
|
String serverURL = "https://www.kmcert.com/kmcis/api/kmcisToken_api.jsp";
|
||||||
|
|
||||||
|
// 2. 연결 생성
|
||||||
|
URL url = new URL(serverURL);
|
||||||
|
|
||||||
|
// 3. HttpURLConnection 객체 생성.
|
||||||
|
HttpURLConnection con = null;
|
||||||
|
OutputStream wr = null;
|
||||||
|
BufferedReader bufferedReader = null;
|
||||||
|
|
||||||
|
// 4. URL 연결 (웹페이지 URL 연결.)
|
||||||
|
con = (HttpURLConnection)url.openConnection();
|
||||||
|
|
||||||
|
con.setConnectTimeout(20000); // TimeOut 시간 (서버 접속시 연결 시간 - 20초)
|
||||||
|
con.setReadTimeout(20000); // TimeOut 시간 (Read시 연결 시간 - 20초)
|
||||||
|
con.setDoOutput(true); // OutputStream으로 POST 데이터를 넘겨주겠다는 옵션.
|
||||||
|
|
||||||
|
con.setRequestProperty("Content-Type", "application/json;charset=utf-8"); // 타입설정(application/json) 형식으로 전송 (Request Body 전달시 application/json로 서버에 전달.)
|
||||||
|
con.setRequestProperty("Accept", "application/json"); // 서버 Response Data를 JSON 형식의 타입으로 요청.
|
||||||
|
con.setRequestMethod("POST"); // 요청 방식 선택 (POST)
|
||||||
|
|
||||||
|
// 5. JSON 전문 구성
|
||||||
|
|
||||||
|
JSONObject jsonData = new JSONObject();
|
||||||
|
|
||||||
|
jsonData.put("apiToken", api_token);
|
||||||
|
jsonData.put("apiDate", api_date);
|
||||||
|
|
||||||
|
message = jsonData.toString();
|
||||||
|
|
||||||
|
// 6. 전송
|
||||||
|
// Request Body에 Data를 담기위해 OutputStream 객체를 생성.
|
||||||
|
wr = con.getOutputStream();
|
||||||
|
|
||||||
|
// Request Body에 Data 셋팅.(한글깨짐 방지를 위해 utf-8인코딩 처리
|
||||||
|
wr.write(message.getBytes("utf-8"));
|
||||||
|
wr.flush();
|
||||||
|
wr.close();
|
||||||
|
|
||||||
|
// 실제 서버로 Request 요청 하는 부분. (응답 코드를 받는다. 200 성공, 나머지 에러)
|
||||||
|
int responseCode = con.getResponseCode();
|
||||||
|
|
||||||
|
// 4. 결과 수신
|
||||||
|
if(responseCode == 200){
|
||||||
|
bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
|
||||||
|
}else{
|
||||||
|
bufferedReader = new BufferedReader(new InputStreamReader(con.getErrorStream(), "UTF-8"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bufferedReader != null){
|
||||||
|
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
String line = "";
|
||||||
|
|
||||||
|
while((line = bufferedReader.readLine()) != null){
|
||||||
|
stringBuilder.append(line);
|
||||||
|
}
|
||||||
|
bufferedReader.close();
|
||||||
|
|
||||||
|
String stringRet = stringBuilder.toString();
|
||||||
|
|
||||||
|
// 5. 넘어온 문자열을 JSON 객체로 변환
|
||||||
|
JSONParser jsonParser = new JSONParser();
|
||||||
|
|
||||||
|
//JSON데이터를 넣어 JSON Object 로 만들어 준다.
|
||||||
|
JSONObject jsonObj = (JSONObject)jsonParser.parse(stringRet);
|
||||||
|
|
||||||
|
// 6. JSON 객체에서 데이터 가져오기
|
||||||
|
|
||||||
|
if(jsonObj.get("result_cd") != null){
|
||||||
|
result_cd = jsonObj.get("result_cd").toString();
|
||||||
|
if("APR01".equals(result_cd)){
|
||||||
|
//통신성공
|
||||||
|
strResult = "Y";
|
||||||
|
rec_cert = jsonObj.get("apiRecCert").toString();
|
||||||
|
k_certNum = jsonObj.get("apiCertNum").toString();
|
||||||
|
}else if("APR02".equals(result_cd)){
|
||||||
|
//실패 - Token Expire
|
||||||
|
strResult = "N";
|
||||||
|
result_msg = "실패 - Token Expire";
|
||||||
|
}else if("APR03".equals(result_cd)){
|
||||||
|
//실패 - Token Not Found
|
||||||
|
strResult = "N";
|
||||||
|
result_msg = "실패 - Token Not Found";
|
||||||
|
}else if("APR04".equals(result_cd)){
|
||||||
|
//실패 - API 요청일시 길이 오류
|
||||||
|
strResult = "N";
|
||||||
|
result_msg = "실패 - API 요청일시 길이 오류";
|
||||||
|
}else if("APR05".equals(result_cd)){
|
||||||
|
//실패 - API 토큰 길이 오류
|
||||||
|
strResult = "N";
|
||||||
|
result_msg = "실패 - API 토큰 길이 오류";
|
||||||
|
}else if("APR06".equals(result_cd)){
|
||||||
|
//실패 - 결과전송 재요청(3회 제한)
|
||||||
|
strResult = "N";
|
||||||
|
result_msg = "실패 - 결과전송 재요청(3회 제한)";
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//JSON 결과코드 에러
|
||||||
|
strResult = "F";
|
||||||
|
}
|
||||||
|
}else{ //timeout except 처리
|
||||||
|
strResult = "F";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 파라미터 유효성 검증
|
||||||
|
if(!strResult.equals("Y")){
|
||||||
|
goErrorPage("결과값 비정상, 결과코드["+result_cd+"], "+"상세내용["+result_msg+"]", request, response);
|
||||||
|
return kmcVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
//02. 1차 복호화
|
||||||
|
rec_cert = seed.getDec(rec_cert, "");
|
||||||
|
|
||||||
|
//03. 1차 파싱
|
||||||
|
int inf1 = rec_cert.indexOf("/",0);
|
||||||
|
int inf2 = rec_cert.indexOf("/",inf1+1);
|
||||||
|
|
||||||
|
encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터
|
||||||
|
encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값
|
||||||
|
|
||||||
|
//04. 위변조 검증
|
||||||
|
encMsg2 = seed.getMsg(encPara);
|
||||||
|
|
||||||
|
if(encMsg2.equals(encMsg1)){
|
||||||
|
msgChk="Y";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(msgChk.equals("N")){
|
||||||
|
goErrorPage("비정상적인 접근입니다.!!", request, response);
|
||||||
|
return kmcVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
//05. 2차 복호화
|
||||||
|
rec_cert = seed.getDec(encPara, "");
|
||||||
|
|
||||||
|
//06. 2차 파싱
|
||||||
|
int info1 = rec_cert.indexOf("/",0);
|
||||||
|
int info2 = rec_cert.indexOf("/",info1+1);
|
||||||
|
int info3 = rec_cert.indexOf("/",info2+1);
|
||||||
|
int info4 = rec_cert.indexOf("/",info3+1);
|
||||||
|
int info5 = rec_cert.indexOf("/",info4+1);
|
||||||
|
int info6 = rec_cert.indexOf("/",info5+1);
|
||||||
|
int info7 = rec_cert.indexOf("/",info6+1);
|
||||||
|
int info8 = rec_cert.indexOf("/",info7+1);
|
||||||
|
int info9 = rec_cert.indexOf("/",info8+1);
|
||||||
|
int info10 = rec_cert.indexOf("/",info9+1);
|
||||||
|
int info11 = rec_cert.indexOf("/",info10+1);
|
||||||
|
int info12 = rec_cert.indexOf("/",info11+1);
|
||||||
|
int info13 = rec_cert.indexOf("/",info12+1);
|
||||||
|
int info14 = rec_cert.indexOf("/",info13+1);
|
||||||
|
int info15 = rec_cert.indexOf("/",info14+1);
|
||||||
|
int info16 = rec_cert.indexOf("/",info15+1);
|
||||||
|
int info17 = rec_cert.indexOf("/",info16+1);
|
||||||
|
int info18 = rec_cert.indexOf("/",info17+1);
|
||||||
|
|
||||||
|
kmcVO.setCertNum (rec_cert.substring(0,info1));
|
||||||
|
kmcVO.setDate (rec_cert.substring(info1+1,info2));
|
||||||
|
//CI 복호화
|
||||||
|
kmcVO.setCI (seed.getDec(rec_cert.substring(info2+1,info3), ""));
|
||||||
|
kmcVO.setPhoneNo (rec_cert.substring(info3+1,info4));
|
||||||
|
kmcVO.setPhoneCorp (rec_cert.substring(info4+1,info5));
|
||||||
|
kmcVO.setBirthDay (rec_cert.substring(info5+1,info6));
|
||||||
|
kmcVO.setGender (rec_cert.substring(info6+1,info7));
|
||||||
|
kmcVO.setNation (rec_cert.substring(info7+1,info8));
|
||||||
|
kmcVO.setName (rec_cert.substring(info8+1,info9));
|
||||||
|
kmcVO.setResult (rec_cert.substring(info9+1,info10));
|
||||||
|
kmcVO.setCertMet (rec_cert.substring(info10+1,info11));
|
||||||
|
kmcVO.setIp (rec_cert.substring(info11+1,info12));
|
||||||
|
kmcVO.setReserve1 (rec_cert.substring(info12+1,info13));
|
||||||
|
kmcVO.setReserve2 (rec_cert.substring(info13+1,info14));
|
||||||
|
kmcVO.setReserve3 (rec_cert.substring(info14+1,info15));
|
||||||
|
kmcVO.setReserve4 (rec_cert.substring(info15+1,info16));
|
||||||
|
kmcVO.setPlusInfo (rec_cert.substring(info16+1,info17));
|
||||||
|
//DI 복호화
|
||||||
|
kmcVO.setDI (seed.getDec(rec_cert.substring(info17+1,info18), ""));
|
||||||
|
|
||||||
|
//07. CI, DI 복호화
|
||||||
|
// CI = seed.getDec(CI, "");
|
||||||
|
// DI = seed.getDec(DI, "");
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
}catch(StringIndexOutOfBoundsException ex){
|
||||||
|
goErrorPage("StringIndexOutOfBoundsException", request, response);
|
||||||
|
}catch(NullPointerException ex){
|
||||||
|
goErrorPage("NullPointerException", request, response);
|
||||||
|
}catch(NumberFormatException ex){
|
||||||
|
goErrorPage("NumberFormatException", request, response);
|
||||||
|
}catch(IllegalStateException ex){
|
||||||
|
goErrorPage("IllegalStateException", request, response);
|
||||||
|
}catch(IndexOutOfBoundsException ex){
|
||||||
|
goErrorPage("IndexOutOfBoundsException", request, response);
|
||||||
|
} catch (IOException e) {
|
||||||
|
goErrorPage("IOException", request, response);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
goErrorPage("ParseException", request, response);
|
||||||
|
}
|
||||||
|
return kmcVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AuthCertVO insertCertLog(KmcVO kmcVO, String msg) throws Exception {
|
||||||
|
//KMC 본인인증 로그 insert
|
||||||
|
AuthCertVO certVO = new AuthCertVO();
|
||||||
|
certVO.setMberId(kmcVO.getPlusInfo());
|
||||||
|
certVO.setCertNum(kmcVO.getCertNum());
|
||||||
|
certVO.setCertDate(kmcVO.getDate());
|
||||||
|
certVO.setCertDi(kmcVO.getDI());
|
||||||
|
certVO.setCertPhone(kmcVO.getPhoneNo());
|
||||||
|
certVO.setCertNation(kmcVO.getNation());
|
||||||
|
certVO.setCertName(kmcVO.getName());
|
||||||
|
certVO.setCertResult(kmcVO.getResult());
|
||||||
|
certVO.setCertType(msg);
|
||||||
|
certVO.setCertIpaddr(kmcVO.getIp());
|
||||||
|
certVO.setBirthDay(kmcVO.getBirthDay());
|
||||||
|
certVO.setSexdstnCode(kmcVO.getGender());
|
||||||
|
|
||||||
|
//디비 테이블에 저장하기
|
||||||
|
mberManageService.insertCertInfoLog(certVO);
|
||||||
|
|
||||||
|
return certVO;
|
||||||
|
}
|
||||||
|
|
||||||
private String getDomain(HttpServletRequest request) {
|
private String getDomain(HttpServletRequest request) {
|
||||||
String serverNm = request.getScheme() + "://" + request.getServerName();
|
String serverNm = request.getScheme() + "://" + request.getServerName();
|
||||||
@ -144,5 +469,12 @@ public class KmcCertChecker {
|
|||||||
return mberCertPhoneVO;
|
return mberCertPhoneVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void goErrorPage(String msg, HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||||
|
FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
|
||||||
|
flashMap.put("msg", msg);
|
||||||
|
FlashMapManager flashMapManager = RequestContextUtils.getFlashMapManager(request);
|
||||||
|
flashMapManager.saveOutputFlashMap(flashMap, request, response);
|
||||||
|
response.sendRedirect("/web/cert/log/kmcErrorPage.do");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,8 @@ public class SendLogVO {
|
|||||||
/*내용*/
|
/*내용*/
|
||||||
private String contents;
|
private String contents;
|
||||||
|
|
||||||
|
private String sendMsgType;
|
||||||
|
|
||||||
|
|
||||||
public String getSendId() {
|
public String getSendId() {
|
||||||
return sendId;
|
return sendId;
|
||||||
@ -62,5 +64,13 @@ public class SendLogVO {
|
|||||||
public void setContents(String contents) {
|
public void setContents(String contents) {
|
||||||
this.contents = contents;
|
this.contents = contents;
|
||||||
}
|
}
|
||||||
|
public String getSendMsgType() {
|
||||||
|
return sendMsgType;
|
||||||
|
}
|
||||||
|
public void setSendMsgType(String sendMsgType) {
|
||||||
|
this.sendMsgType = sendMsgType;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -251,4 +251,6 @@ public interface EgovMberManageService {
|
|||||||
|
|
||||||
public String findTopByregDateFromCertLog(AuthCertVO authCertVO);
|
public String findTopByregDateFromCertLog(AuthCertVO authCertVO);
|
||||||
|
|
||||||
|
//사용자 헤더 정보(단가, 이벤트 활성화 기간)
|
||||||
|
public MberManageVO selectMberHeaderInfo(String mberId) throws Exception;
|
||||||
}
|
}
|
||||||
@ -220,4 +220,6 @@ public interface EgovUserManageService {
|
|||||||
|
|
||||||
public Map<String, Object> selectFaxSendList(FaxGroupDataVO faxGroupDataVO);
|
public Map<String, Object> selectFaxSendList(FaxGroupDataVO faxGroupDataVO);
|
||||||
|
|
||||||
|
// 마지막 결제수단 조회
|
||||||
|
public String selectLastPayMethod(String mberId) throws Exception;
|
||||||
}
|
}
|
||||||
@ -512,6 +512,39 @@ public class MberManageVO extends UserDefaultVO{
|
|||||||
*/
|
*/
|
||||||
private String secuLoginFlag;
|
private String secuLoginFlag;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 회원 이벤트 정보
|
||||||
|
*/
|
||||||
|
private String eventEndDate; //회원 이벤트 종료일자
|
||||||
|
private double eventRemainCash; //이벤트 차감 후 남은 Cash
|
||||||
|
private float eventShortPrice; //이벤트 단문 가격
|
||||||
|
private float eventLongPrice; //이벤트 장문 가격
|
||||||
|
private float eventPicturePrice; //이벤트 그림 1장 가격
|
||||||
|
private float eventPicture2Price; //이벤트 그림 2장 가격
|
||||||
|
private float eventPicture3Price; //이벤트 그림 3장 가격
|
||||||
|
private String eventLeftDay; //이벤트 남은 기간
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 헤더 영역 정보(단가, 발송가능 건수)
|
||||||
|
*/
|
||||||
|
private float headerShortPrice;
|
||||||
|
private float headerLongPrice;
|
||||||
|
private float headerPicturePrice;
|
||||||
|
private float headerPicture2Price;
|
||||||
|
private float headerPicture3Price;
|
||||||
|
private float headerKakaoAtPrice;
|
||||||
|
private float headerKakaoFtPrice;
|
||||||
|
private float headerFaxPrice;
|
||||||
|
private int headerShortCnt;
|
||||||
|
private int headerLongCnt;
|
||||||
|
private int headerPictureCnt;
|
||||||
|
private int headerPicture2Cnt;
|
||||||
|
private int headerPicture3Cnt;
|
||||||
|
private int headerKakaoAtCnt;
|
||||||
|
private int headerKakaoFtCnt;
|
||||||
|
private int headerFaxCnt;
|
||||||
|
|
||||||
public String getSmsCode() {
|
public String getSmsCode() {
|
||||||
return smsCode;
|
return smsCode;
|
||||||
}
|
}
|
||||||
@ -1804,6 +1837,150 @@ public class MberManageVO extends UserDefaultVO{
|
|||||||
public void setSecuLoginFlag(String secuLoginFlag) {
|
public void setSecuLoginFlag(String secuLoginFlag) {
|
||||||
this.secuLoginFlag = secuLoginFlag;
|
this.secuLoginFlag = secuLoginFlag;
|
||||||
}
|
}
|
||||||
|
public String getEventEndDate() {
|
||||||
|
return eventEndDate;
|
||||||
|
}
|
||||||
|
public void setEventEndDate(String eventEndDate) {
|
||||||
|
this.eventEndDate = eventEndDate;
|
||||||
|
}
|
||||||
|
public double getEventRemainCash() {
|
||||||
|
return eventRemainCash;
|
||||||
|
}
|
||||||
|
public void setEventRemainCash(double eventRemainCash) {
|
||||||
|
this.eventRemainCash = eventRemainCash;
|
||||||
|
}
|
||||||
|
public float getEventShortPrice() {
|
||||||
|
return eventShortPrice;
|
||||||
|
}
|
||||||
|
public void setEventShortPrice(float eventShortPrice) {
|
||||||
|
this.eventShortPrice = eventShortPrice;
|
||||||
|
}
|
||||||
|
public float getEventLongPrice() {
|
||||||
|
return eventLongPrice;
|
||||||
|
}
|
||||||
|
public void setEventLongPrice(float eventLongPrice) {
|
||||||
|
this.eventLongPrice = eventLongPrice;
|
||||||
|
}
|
||||||
|
public float getEventPicturePrice() {
|
||||||
|
return eventPicturePrice;
|
||||||
|
}
|
||||||
|
public void setEventPicturePrice(float eventPicturePrice) {
|
||||||
|
this.eventPicturePrice = eventPicturePrice;
|
||||||
|
}
|
||||||
|
public float getEventPicture2Price() {
|
||||||
|
return eventPicture2Price;
|
||||||
|
}
|
||||||
|
public void setEventPicture2Price(float eventPicture2Price) {
|
||||||
|
this.eventPicture2Price = eventPicture2Price;
|
||||||
|
}
|
||||||
|
public float getEventPicture3Price() {
|
||||||
|
return eventPicture3Price;
|
||||||
|
}
|
||||||
|
public void setEventPicture3Price(float eventPicture3Price) {
|
||||||
|
this.eventPicture3Price = eventPicture3Price;
|
||||||
|
}
|
||||||
|
public String getEventLeftDay() {
|
||||||
|
return eventLeftDay;
|
||||||
|
}
|
||||||
|
public void setEventLeftDay(String eventLeftDay) {
|
||||||
|
this.eventLeftDay = eventLeftDay;
|
||||||
|
}
|
||||||
|
public float getHeaderShortPrice() {
|
||||||
|
return headerShortPrice;
|
||||||
|
}
|
||||||
|
public void setHeaderShortPrice(float headerShortPrice) {
|
||||||
|
this.headerShortPrice = headerShortPrice;
|
||||||
|
}
|
||||||
|
public float getHeaderLongPrice() {
|
||||||
|
return headerLongPrice;
|
||||||
|
}
|
||||||
|
public void setHeaderLongPrice(float headerLongPrice) {
|
||||||
|
this.headerLongPrice = headerLongPrice;
|
||||||
|
}
|
||||||
|
public float getHeaderPicturePrice() {
|
||||||
|
return headerPicturePrice;
|
||||||
|
}
|
||||||
|
public void setHeaderPicturePrice(float headerPicturePrice) {
|
||||||
|
this.headerPicturePrice = headerPicturePrice;
|
||||||
|
}
|
||||||
|
public float getHeaderPicture2Price() {
|
||||||
|
return headerPicture2Price;
|
||||||
|
}
|
||||||
|
public void setHeaderPicture2Price(float headerPicture2Price) {
|
||||||
|
this.headerPicture2Price = headerPicture2Price;
|
||||||
|
}
|
||||||
|
public float getHeaderPicture3Price() {
|
||||||
|
return headerPicture3Price;
|
||||||
|
}
|
||||||
|
public void setHeaderPicture3Price(float headerPicture3Price) {
|
||||||
|
this.headerPicture3Price = headerPicture3Price;
|
||||||
|
}
|
||||||
|
public int getHeaderShortCnt() {
|
||||||
|
return headerShortCnt;
|
||||||
|
}
|
||||||
|
public void setHeaderShortCnt(int headerShortCnt) {
|
||||||
|
this.headerShortCnt = headerShortCnt;
|
||||||
|
}
|
||||||
|
public int getHeaderLongCnt() {
|
||||||
|
return headerLongCnt;
|
||||||
|
}
|
||||||
|
public void setHeaderLongCnt(int headerLongCnt) {
|
||||||
|
this.headerLongCnt = headerLongCnt;
|
||||||
|
}
|
||||||
|
public int getHeaderPictureCnt() {
|
||||||
|
return headerPictureCnt;
|
||||||
|
}
|
||||||
|
public void setHeaderPictureCnt(int headerPictureCnt) {
|
||||||
|
this.headerPictureCnt = headerPictureCnt;
|
||||||
|
}
|
||||||
|
public int getHeaderPicture2Cnt() {
|
||||||
|
return headerPicture2Cnt;
|
||||||
|
}
|
||||||
|
public void setHeaderPicture2Cnt(int headerPicture2Cnt) {
|
||||||
|
this.headerPicture2Cnt = headerPicture2Cnt;
|
||||||
|
}
|
||||||
|
public int getHeaderPicture3Cnt() {
|
||||||
|
return headerPicture3Cnt;
|
||||||
|
}
|
||||||
|
public void setHeaderPicture3Cnt(int headerPicture3Cnt) {
|
||||||
|
this.headerPicture3Cnt = headerPicture3Cnt;
|
||||||
|
}
|
||||||
|
public float getHeaderKakaoAtPrice() {
|
||||||
|
return headerKakaoAtPrice;
|
||||||
|
}
|
||||||
|
public void setHeaderKakaoAtPrice(float headerKakaoAtPrice) {
|
||||||
|
this.headerKakaoAtPrice = headerKakaoAtPrice;
|
||||||
|
}
|
||||||
|
public float getHeaderKakaoFtPrice() {
|
||||||
|
return headerKakaoFtPrice;
|
||||||
|
}
|
||||||
|
public void setHeaderKakaoFtPrice(float headerKakaoFtPrice) {
|
||||||
|
this.headerKakaoFtPrice = headerKakaoFtPrice;
|
||||||
|
}
|
||||||
|
public float getHeaderFaxPrice() {
|
||||||
|
return headerFaxPrice;
|
||||||
|
}
|
||||||
|
public void setHeaderFaxPrice(float headerFaxPrice) {
|
||||||
|
this.headerFaxPrice = headerFaxPrice;
|
||||||
|
}
|
||||||
|
public int getHeaderKakaoAtCnt() {
|
||||||
|
return headerKakaoAtCnt;
|
||||||
|
}
|
||||||
|
public void setHeaderKakaoAtCnt(int headerKakaoAtCnt) {
|
||||||
|
this.headerKakaoAtCnt = headerKakaoAtCnt;
|
||||||
|
}
|
||||||
|
public int getHeaderKakaoFtCnt() {
|
||||||
|
return headerKakaoFtCnt;
|
||||||
|
}
|
||||||
|
public void setHeaderKakaoFtCnt(int headerKakaoFtCnt) {
|
||||||
|
this.headerKakaoFtCnt = headerKakaoFtCnt;
|
||||||
|
}
|
||||||
|
public int getHeaderFaxCnt() {
|
||||||
|
return headerFaxCnt;
|
||||||
|
}
|
||||||
|
public void setHeaderFaxCnt(int headerFaxCnt) {
|
||||||
|
this.headerFaxCnt = headerFaxCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -882,5 +882,11 @@ public class EgovUserManageServiceImpl extends EgovAbstractServiceImpl implement
|
|||||||
|
|
||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 마지막 결제수단 SELECT
|
||||||
|
@Override
|
||||||
|
public String selectLastPayMethod(String mberId) throws Exception {
|
||||||
|
return userManageDAO.selectLastPayMethod(mberId);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -320,5 +320,9 @@ public class UserManageDAO extends EgovAbstractDAO{
|
|||||||
public int selectUserPrePaymentPGdataCount(String userId) throws Exception{
|
public int selectUserPrePaymentPGdataCount(String userId) throws Exception{
|
||||||
return (int) select("userManageDAO.selectUserPrePaymentPGdataCount", userId);
|
return (int) select("userManageDAO.selectUserPrePaymentPGdataCount", userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 마지막 결제수단 SELECT
|
||||||
|
public String selectLastPayMethod(String mberId) throws Exception{
|
||||||
|
return (String) select("userManageDAO.selectLastPayMethod", mberId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -12,6 +12,9 @@ import java.security.PrivateKey;
|
|||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
import java.security.spec.RSAPublicKeySpec;
|
import java.security.spec.RSAPublicKeySpec;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -106,6 +109,7 @@ import itn.let.lett.service.LetterVO;
|
|||||||
import itn.let.mjo.addr.service.AddrTransHistService;
|
import itn.let.mjo.addr.service.AddrTransHistService;
|
||||||
import itn.let.mjo.addr.service.AddrTransHistVO;
|
import itn.let.mjo.addr.service.AddrTransHistVO;
|
||||||
import itn.let.mjo.event.service.MjonEventService;
|
import itn.let.mjo.event.service.MjonEventService;
|
||||||
|
import itn.let.mjo.event.service.MjonEventVO;
|
||||||
import itn.let.mjo.kisa.service.KisaService;
|
import itn.let.mjo.kisa.service.KisaService;
|
||||||
import itn.let.mjo.kisa.service.KisaVO;
|
import itn.let.mjo.kisa.service.KisaVO;
|
||||||
import itn.let.mjo.mjocommon.MjonForienIpChk;
|
import itn.let.mjo.mjocommon.MjonForienIpChk;
|
||||||
@ -130,6 +134,7 @@ import itn.let.sym.mnu.mpm.service.MenuManageVO;
|
|||||||
import itn.let.sym.prm.service.EgovProgrmManageService;
|
import itn.let.sym.prm.service.EgovProgrmManageService;
|
||||||
import itn.let.sym.prm.service.ProgrmManageVO;
|
import itn.let.sym.prm.service.ProgrmManageVO;
|
||||||
import itn.let.sym.site.service.EgovSiteManagerService;
|
import itn.let.sym.site.service.EgovSiteManagerService;
|
||||||
|
import itn.let.sym.site.service.JoinSettingVO;
|
||||||
import itn.let.sym.site.service.MetaTagVO;
|
import itn.let.sym.site.service.MetaTagVO;
|
||||||
import itn.let.sym.site.service.SiteManagerVO;
|
import itn.let.sym.site.service.SiteManagerVO;
|
||||||
import itn.let.uss.umt.service.EgovMberManageService;
|
import itn.let.uss.umt.service.EgovMberManageService;
|
||||||
@ -1256,6 +1261,16 @@ public class MainController {
|
|||||||
model.addAttribute("mberManageVO", userManageService.selectUserInfo(mberManageVO));
|
model.addAttribute("mberManageVO", userManageService.selectUserInfo(mberManageVO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 회원별 단가, 기본 단가, 이벤트 정보 조회
|
||||||
|
* 2025.07.25 이지우 추가
|
||||||
|
* */
|
||||||
|
MberManageVO mberHeaderInfoVO = new MberManageVO();
|
||||||
|
if(loginVO != null) {
|
||||||
|
mberHeaderInfoVO = mberManageService.selectMberHeaderInfo(loginVO.getId());
|
||||||
|
}
|
||||||
|
model.addAttribute("mberHeaderInfoVO", mberHeaderInfoVO);
|
||||||
|
|
||||||
return "web/com/webCommonHeader";
|
return "web/com/webCommonHeader";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,7 @@ Globals.Env = dev
|
|||||||
|
|
||||||
# mysql
|
# mysql
|
||||||
Globals.DriverClassName=com.mysql.jdbc.Driver
|
Globals.DriverClassName=com.mysql.jdbc.Driver
|
||||||
Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon_advc
|
Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon_advc?useUnicode=true&connectionCollation=utf8mb4_unicode_ci&serverTimezone=Asia/Seoul
|
||||||
#Globals.Url=jdbc:mysql://139.150.73.12:3306/mjon
|
#Globals.Url=jdbc:mysql://139.150.73.12:3306/mjon
|
||||||
Globals.UserName= mjonUr
|
Globals.UserName= mjonUr
|
||||||
Globals.Password= mjon!@#$
|
Globals.Password= mjon!@#$
|
||||||
|
|||||||
@ -28,8 +28,10 @@ Globals.Env = local
|
|||||||
|
|
||||||
# mysql
|
# mysql
|
||||||
Globals.DriverClassName=com.mysql.jdbc.Driver
|
Globals.DriverClassName=com.mysql.jdbc.Driver
|
||||||
Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon_advc
|
#Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon_advc
|
||||||
#Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon
|
#Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon_advc?characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Seoul
|
||||||
|
Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon_advc?useUnicode=true&connectionCollation=utf8mb4_unicode_ci&serverTimezone=Asia/Seoul
|
||||||
|
|
||||||
Globals.UserName= mjonUr
|
Globals.UserName= mjonUr
|
||||||
Globals.Password= mjon!@#$
|
Globals.Password= mjon!@#$
|
||||||
#Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon
|
#Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon
|
||||||
|
|||||||
@ -27,7 +27,7 @@ Globals.Env = prod
|
|||||||
|
|
||||||
# mysql
|
# mysql
|
||||||
Globals.DriverClassName=com.mysql.jdbc.Driver
|
Globals.DriverClassName=com.mysql.jdbc.Driver
|
||||||
Globals.Url=jdbc:mysql://10.12.107.14:3306/mjon_advc
|
Globals.Url=jdbc:mysql://10.12.107.14:3306/mjon_advc?useUnicode=true&connectionCollation=utf8mb4_unicode_ci&serverTimezone=Asia/Seoul
|
||||||
Globals.UserName= mjonUr
|
Globals.UserName= mjonUr
|
||||||
Globals.Password= mjon!@#$
|
Globals.Password= mjon!@#$
|
||||||
|
|
||||||
|
|||||||
@ -1,94 +1,94 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:egov-security="http://www.egovframe.go.kr/schema/egov-security"
|
xmlns:egov-security="http://www.egovframe.go.kr/schema/egov-security"
|
||||||
xmlns:security="http://www.springframework.org/schema/security"
|
xmlns:security="http://www.springframework.org/schema/security"
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
|
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
|
||||||
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
|
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
|
||||||
http://www.egovframe.go.kr/schema/egov-security http://www.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
|
http://www.egovframe.go.kr/schema/egov-security http://maven.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
|
||||||
|
|
||||||
<security:http pattern="/css/**" security="none"/>
|
<security:http pattern="/css/**" security="none"/>
|
||||||
<security:http pattern="/html/**" security="none"/>
|
<security:http pattern="/html/**" security="none"/>
|
||||||
<security:http pattern="/images/**" security="none"/>
|
<security:http pattern="/images/**" security="none"/>
|
||||||
<security:http pattern="/js/**" security="none"/>
|
<security:http pattern="/js/**" security="none"/>
|
||||||
<security:http pattern="/resource/**" security="none"/>
|
<security:http pattern="/resource/**" security="none"/>
|
||||||
<security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>
|
<security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>
|
||||||
|
|
||||||
<egov-security:config id="securityConfig"
|
<egov-security:config id="securityConfig"
|
||||||
loginUrl="/uat/uia/actionMain.do"
|
loginUrl="/uat/uia/actionMain.do"
|
||||||
logoutSuccessUrl="/uat/uia/actionMain.do"
|
logoutSuccessUrl="/uat/uia/actionMain.do"
|
||||||
loginFailureUrl="/uat/uia/actionSecurityLogin.do?login_error=1"
|
loginFailureUrl="/uat/uia/actionSecurityLogin.do?login_error=1"
|
||||||
accessDeniedUrl="/sec/ram/accessDenied.do"
|
accessDeniedUrl="/sec/ram/accessDenied.do"
|
||||||
|
|
||||||
dataSource="egov.dataSource"
|
dataSource="egov.dataSource"
|
||||||
|
|
||||||
jdbcUsersByUsernameQuery="SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP,
|
jdbcUsersByUsernameQuery="SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP,
|
||||||
USER_ADRES, USER_EMAIL, USER_SE, '-' ORGNZT_ID, ESNTL_ID, MBTLNUM AS MOBLPHONNO,
|
USER_ADRES, USER_EMAIL, USER_SE, '-' ORGNZT_ID, ESNTL_ID, MBTLNUM AS MOBLPHONNO,
|
||||||
'-' ORGNZT_NM, AUTHOR_CODE AS AUTHORITY, DEPT
|
'-' ORGNZT_NM, AUTHOR_CODE AS AUTHORITY, DEPT
|
||||||
FROM COMVNUSERMASTER A
|
FROM COMVNUSERMASTER A
|
||||||
INNER JOIN LETTNEMPLYRSCRTYESTBS B ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
|
INNER JOIN LETTNEMPLYRSCRTYESTBS B ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID
|
||||||
WHERE CONCAT(USER_SE, USER_ID) = ?"
|
WHERE CONCAT(USER_SE, USER_ID) = ?"
|
||||||
|
|
||||||
jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY
|
jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY
|
||||||
FROM LETTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
|
FROM LETTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B
|
||||||
WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"
|
WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"
|
||||||
|
|
||||||
jdbcMapClass="itn.let.uat.uia.service.impl.EgovSessionMapping"
|
jdbcMapClass="itn.let.uat.uia.service.impl.EgovSessionMapping"
|
||||||
|
|
||||||
requestMatcherType="regex"
|
requestMatcherType="regex"
|
||||||
hash="plaintext"
|
hash="plaintext"
|
||||||
hashBase64="false"
|
hashBase64="false"
|
||||||
|
|
||||||
concurrentMaxSessons="999"
|
concurrentMaxSessons="999"
|
||||||
concurrentExpiredUrl="/"
|
concurrentExpiredUrl="/"
|
||||||
|
|
||||||
defaultTargetUrl="/uat/uia/actionMain.do"
|
defaultTargetUrl="/uat/uia/actionMain.do"
|
||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!--원 소스 -->
|
<!--원 소스 -->
|
||||||
<!-- defaultTargetUrl="/uat/uia/actionMain.do" -->
|
<!-- defaultTargetUrl="/uat/uia/actionMain.do" -->
|
||||||
|
|
||||||
<!-- sqlHierarchicalRoles="
|
<!-- sqlHierarchicalRoles="
|
||||||
SELECT a.CHLDRN_ROLE child, a.PARNTS_ROLE parent
|
SELECT a.CHLDRN_ROLE child, a.PARNTS_ROLE parent
|
||||||
FROM LETTNROLES_HIERARCHY a LEFT JOIN LETTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)" -->
|
FROM LETTNROLES_HIERARCHY a LEFT JOIN LETTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)" -->
|
||||||
|
|
||||||
<egov-security:secured-object-config id="securedObjectConfig"
|
<egov-security:secured-object-config id="securedObjectConfig"
|
||||||
roleHierarchyString="
|
roleHierarchyString="
|
||||||
ROLE_ADMIN > ROLE_USER_MEMBER
|
ROLE_ADMIN > ROLE_USER_MEMBER
|
||||||
ROLE_USER_MEMBER > ROLE_ANONYMOUS"
|
ROLE_USER_MEMBER > ROLE_ANONYMOUS"
|
||||||
|
|
||||||
sqlRolesAndUrl="
|
sqlRolesAndUrl="
|
||||||
SELECT a.ROLE_PTTRN url, b.AUTHOR_CODE authority
|
SELECT a.ROLE_PTTRN url, b.AUTHOR_CODE authority
|
||||||
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
||||||
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'url'
|
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'url'
|
||||||
ORDER BY a.ROLE_SORT"
|
ORDER BY a.ROLE_SORT"
|
||||||
|
|
||||||
sqlRolesAndMethod="
|
sqlRolesAndMethod="
|
||||||
SELECT a.ROLE_PTTRN method, b.AUTHOR_CODE authority
|
SELECT a.ROLE_PTTRN method, b.AUTHOR_CODE authority
|
||||||
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
||||||
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'method'
|
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'method'
|
||||||
ORDER BY a.ROLE_SORT"
|
ORDER BY a.ROLE_SORT"
|
||||||
|
|
||||||
sqlRolesAndPointcut="
|
sqlRolesAndPointcut="
|
||||||
SELECT a.ROLE_PTTRN pointcut, b.AUTHOR_CODE authority
|
SELECT a.ROLE_PTTRN pointcut, b.AUTHOR_CODE authority
|
||||||
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
||||||
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'pointcut'
|
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'pointcut'
|
||||||
ORDER BY a.ROLE_SORT"
|
ORDER BY a.ROLE_SORT"
|
||||||
|
|
||||||
sqlRegexMatchedRequestMapping="
|
sqlRegexMatchedRequestMapping="
|
||||||
SELECT a.resource_pattern uri, b.authority authority
|
SELECT a.resource_pattern uri, b.authority authority
|
||||||
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b
|
||||||
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'regex'
|
WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'regex'
|
||||||
ORDER BY a.ROLE_SORT"
|
ORDER BY a.ROLE_SORT"
|
||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<egov-security:initializer id="initializer" supportMethod="true" supportPointcut="false" />
|
<egov-security:initializer id="initializer" supportMethod="true" supportPointcut="false" />
|
||||||
|
|
||||||
<!-- URL에 세미콜론(semicolon)허용 여부(기본값/false) -->
|
<!-- URL에 세미콜론(semicolon)허용 여부(기본값/false) -->
|
||||||
<bean id="egovStrictHttpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall">
|
<bean id="egovStrictHttpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall">
|
||||||
<property name="allowSemicolon" value="true"/>
|
<property name="allowSemicolon" value="true"/>
|
||||||
</bean>
|
</bean>
|
||||||
<security:http-firewall ref="egovStrictHttpFirewall"/>
|
<security:http-firewall ref="egovStrictHttpFirewall"/>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
||||||
|
|||||||
@ -569,10 +569,8 @@
|
|||||||
on A.ADDR_GRP_ID = mag.ADDR_GRP_ID
|
on A.ADDR_GRP_ID = mag.ADDR_GRP_ID
|
||||||
WHERE
|
WHERE
|
||||||
A.MBER_ID = #mberId#
|
A.MBER_ID = #mberId#
|
||||||
AND (A.RECV_STATUS = 'Y'
|
AND (A.RECV_STATUS IN ('Y', 'S') OR A.RECV_STATUS IS NULL)
|
||||||
or A.RECV_STATUS = 'S'
|
AND (A.ADDR_GRP_ID IS NULL OR MAG.DELETE_YN = 'N')
|
||||||
or A.RECV_STATUS is null)
|
|
||||||
AND mag.DELETE_YN = 'N'
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 주소록 상세 조회 -->
|
<!-- 주소록 상세 조회 -->
|
||||||
@ -1354,34 +1352,32 @@
|
|||||||
, BOOKMARK
|
, BOOKMARK
|
||||||
, RECV_STATUS
|
, RECV_STATUS
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT t.ADDR_GRP_ID,
|
||||||
ADDR_GRP_ID
|
t.MBER_ID,
|
||||||
, MBER_ID
|
t.ADDR_NM,
|
||||||
, ADDR_NM
|
FN_GETHYPHEN(t.ADDR_PHONE_NO),
|
||||||
, ADDR_PHONE_NO
|
t.ADDR_INFO1,
|
||||||
, ADDR_INFO1
|
t.ADDR_INFO2,
|
||||||
, ADDR_INFO2
|
t.ADDR_INFO3,
|
||||||
, ADDR_INFO3
|
t.ADDR_INFO4,
|
||||||
, ADDR_INFO4
|
t.ADDR_COMMENT,
|
||||||
, ADDR_COMMENT
|
t.FRST_REGIST_PNTTM,
|
||||||
, FRST_REGIST_PNTTM
|
t.FRST_REGISTER_ID,
|
||||||
, FRST_REGISTER_ID
|
t.LAST_UPDT_PNTTM,
|
||||||
, LAST_UPDT_PNTTM
|
t.LAST_UPDUSR_ID,
|
||||||
, LAST_UPDUSR_ID
|
t.DELETE_YN,
|
||||||
, DELETE_YN
|
t.BOOKMARK,
|
||||||
, BOOKMARK
|
t.RECV_STATUS
|
||||||
, RECV_STATUS
|
FROM TEMP_MJ_ADDR AS t
|
||||||
FROM TEMP_MJ_ADDR
|
LEFT JOIN MJ_ADDR AS m
|
||||||
WHERE MBER_ID = #mberId#
|
ON m.MBER_ID = t.MBER_ID
|
||||||
AND ADDR_GRP_ID = #addrGrpId#
|
AND m.ADDR_GRP_ID = t.ADDR_GRP_ID
|
||||||
AND BOOKMARK = #bookmark#
|
AND m.BOOKMARK = t.BOOKMARK
|
||||||
AND ADDR_PHONE_NO NOT IN
|
AND replace(m.ADDR_PHONE_NO, '-', '') = replace(t.ADDR_PHONE_NO, '-', '')
|
||||||
(
|
WHERE t.MBER_ID = #mberId#
|
||||||
SELECT ADDR_PHONE_NO FROM MJ_ADDR
|
AND t.ADDR_GRP_ID = #addrGrpId#
|
||||||
WHERE MBER_ID = #mberId#
|
AND t.BOOKMARK = #bookmark#
|
||||||
AND ADDR_GRP_ID = #addrGrpId#
|
AND m.MBER_ID IS NULL
|
||||||
AND BOOKMARK = #bookmark#
|
|
||||||
)
|
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -85,4 +85,11 @@
|
|||||||
DELETE FROM lettngnrlmber_access_call_info
|
DELETE FROM lettngnrlmber_access_call_info
|
||||||
WHERE access_no = #accessNo#
|
WHERE access_no = #accessNo#
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
|
<update id="ApiCallInfoMngDAO.updateApiCallInfoAll" parameterClass="apiKeyVO">
|
||||||
|
UPDATE lettngnrlmber_access_call_info
|
||||||
|
SET use_yn = #useYn#
|
||||||
|
WHERE access_no = #accessNo#
|
||||||
|
|
||||||
|
</update>
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|||||||
@ -208,6 +208,7 @@
|
|||||||
)
|
)
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
and a.mber_id=#mberId#
|
and a.mber_id=#mberId#
|
||||||
|
and b.USE_YN != 'N'
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
@ -1409,7 +1409,7 @@
|
|||||||
C.YELLOW_ID AS yellowId
|
C.YELLOW_ID AS yellowId
|
||||||
FROM MJ_MSG_GROUP_DATA B
|
FROM MJ_MSG_GROUP_DATA B
|
||||||
INNER JOIN (
|
INNER JOIN (
|
||||||
select MSG_GROUP_ID, MSG_TYPE, DEL_FLAG, MSG_NOTICETALK_SENDER_KEY, BIZ_KAKAO_RESEND_YN, BIZ_KAKAO_RESEND_DATA
|
select MSG_GROUP_ID, MSG_TYPE, DEL_FLAG, MSG_NOTICETALK_SENDER_KEY, BIZ_KAKAO_RESEND_YN, BIZ_KAKAO_RESEND_DATA, CALL_TO
|
||||||
from MJ_MSG_DATA
|
from MJ_MSG_DATA
|
||||||
where DEL_FLAG = 'N'
|
where DEL_FLAG = 'N'
|
||||||
<isNotEmpty property="tabType">
|
<isNotEmpty property="tabType">
|
||||||
@ -1452,6 +1452,9 @@
|
|||||||
<isEqual property="searchCondition" compareValue="3">
|
<isEqual property="searchCondition" compareValue="3">
|
||||||
AND B.SMS_TXT like CONCAT('%', #searchKeyword#, '%')
|
AND B.SMS_TXT like CONCAT('%', #searchKeyword#, '%')
|
||||||
</isEqual>
|
</isEqual>
|
||||||
|
<isEqual property="searchCondition" compareValue="4" >
|
||||||
|
AND A.CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
GROUP BY B.MSG_GROUP_ID
|
GROUP BY B.MSG_GROUP_ID
|
||||||
ORDER BY 1=1
|
ORDER BY 1=1
|
||||||
|
|||||||
@ -82,6 +82,7 @@
|
|||||||
, REQ_DATE
|
, REQ_DATE
|
||||||
|
|
||||||
, FILE_CNT
|
, FILE_CNT
|
||||||
|
, MSG_RESULT
|
||||||
)VALUES
|
)VALUES
|
||||||
<iterate conjunction=",">
|
<iterate conjunction=",">
|
||||||
(
|
(
|
||||||
@ -108,7 +109,8 @@
|
|||||||
, #[].bizJsonName#
|
, #[].bizJsonName#
|
||||||
, #[].reqDate#
|
, #[].reqDate#
|
||||||
|
|
||||||
, #[].fileCnt#
|
, #[].fileCnt#,
|
||||||
|
'00'
|
||||||
)
|
)
|
||||||
</iterate>
|
</iterate>
|
||||||
</insert>
|
</insert>
|
||||||
@ -148,6 +150,7 @@
|
|||||||
BEF_POINT,
|
BEF_POINT,
|
||||||
|
|
||||||
TOT_PRICE,
|
TOT_PRICE,
|
||||||
|
SEND_KIND,
|
||||||
|
|
||||||
AT_DELAY_YN,
|
AT_DELAY_YN,
|
||||||
BIZ_KAKAO_RESEND_ORGNL_TXT,
|
BIZ_KAKAO_RESEND_ORGNL_TXT,
|
||||||
@ -172,6 +175,7 @@
|
|||||||
#befPoint#,
|
#befPoint#,
|
||||||
|
|
||||||
#totPrice#,
|
#totPrice#,
|
||||||
|
#sendKind#,
|
||||||
|
|
||||||
#atDelayYn#,
|
#atDelayYn#,
|
||||||
#bizKakaoResendOrgnlTxt#,
|
#bizKakaoResendOrgnlTxt#,
|
||||||
@ -226,7 +230,7 @@
|
|||||||
, MMD.BIZ_UMID AS bizUmid
|
, MMD.BIZ_UMID AS bizUmid
|
||||||
, MMD.MSG_TYPE AS msgType
|
, MMD.MSG_TYPE AS msgType
|
||||||
FROM
|
FROM
|
||||||
MJ_MSG_DATA MMD
|
MJ_MSG_DATA MMD FORCE index (IDX_MJ_MSG_DATA_13)
|
||||||
INNER JOIN LETTNGNRLMBER MB
|
INNER JOIN LETTNGNRLMBER MB
|
||||||
ON MMD.USER_ID = MB.MBER_ID
|
ON MMD.USER_ID = MB.MBER_ID
|
||||||
INNER JOIN mj_msg_group_data MMGD
|
INNER JOIN mj_msg_group_data MMGD
|
||||||
|
|||||||
@ -173,7 +173,8 @@
|
|||||||
FILE_PATH1,
|
FILE_PATH1,
|
||||||
FILE_PATH2,
|
FILE_PATH2,
|
||||||
FILE_PATH3,
|
FILE_PATH3,
|
||||||
MSG_GROUP_ID
|
MSG_GROUP_ID,
|
||||||
|
MSG_RESULT
|
||||||
)VALUES
|
)VALUES
|
||||||
<iterate conjunction=",">
|
<iterate conjunction=",">
|
||||||
(
|
(
|
||||||
@ -191,7 +192,8 @@
|
|||||||
#[].filePath1#,
|
#[].filePath1#,
|
||||||
#[].filePath2#,
|
#[].filePath2#,
|
||||||
#[].filePath3#,
|
#[].filePath3#,
|
||||||
#[].msgGroupId#
|
#[].msgGroupId#,
|
||||||
|
'00'
|
||||||
)
|
)
|
||||||
</iterate>
|
</iterate>
|
||||||
</insert>
|
</insert>
|
||||||
@ -2184,6 +2186,8 @@
|
|||||||
, BLINE_CODE AS blineCode
|
, BLINE_CODE AS blineCode
|
||||||
, AT_SMISHING_YN AS atSmishingYn
|
, AT_SMISHING_YN AS atSmishingYn
|
||||||
, PRE_PAYMENT_YN AS prePaymentYn
|
, PRE_PAYMENT_YN AS prePaymentYn
|
||||||
|
, BIZ_NO AS bizNo
|
||||||
|
, MBER_EMAIL_ADRES AS mberEmailAdres
|
||||||
FROM LETTNGNRLMBER
|
FROM LETTNGNRLMBER
|
||||||
WHERE MBER_ID = #userId#
|
WHERE MBER_ID = #userId#
|
||||||
|
|
||||||
@ -2323,6 +2327,7 @@
|
|||||||
EVENT_YN,
|
EVENT_YN,
|
||||||
DELAY_YN,
|
DELAY_YN,
|
||||||
AT_DELAY_YN,
|
AT_DELAY_YN,
|
||||||
|
SEND_KIND,
|
||||||
BIZ_KAKAO_RESEND_ORGNL_TXT,
|
BIZ_KAKAO_RESEND_ORGNL_TXT,
|
||||||
SUBJECT_CHK_YN
|
SUBJECT_CHK_YN
|
||||||
)
|
)
|
||||||
@ -2350,6 +2355,7 @@
|
|||||||
#eventYn#,
|
#eventYn#,
|
||||||
#delayYn#,
|
#delayYn#,
|
||||||
#atDelayYn#,
|
#atDelayYn#,
|
||||||
|
#sendKind#,
|
||||||
#kakaoSubMagOrgnlTxt#,
|
#kakaoSubMagOrgnlTxt#,
|
||||||
#subjectChkYn#
|
#subjectChkYn#
|
||||||
)
|
)
|
||||||
@ -3172,6 +3178,7 @@
|
|||||||
WHERE 1 = 1
|
WHERE 1 = 1
|
||||||
AND pf.SentEA > 0
|
AND pf.SentEA > 0
|
||||||
AND mjf.USER_ID = #userId#
|
AND mjf.USER_ID = #userId#
|
||||||
|
AND mjf.RESERVE_C_YN = 'N'
|
||||||
|
|
||||||
) AS pay
|
) AS pay
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
@ -3281,7 +3288,7 @@
|
|||||||
, M.fileName3 AS fileName3
|
, M.fileName3 AS fileName3
|
||||||
, M.orderByCode AS orderByCode
|
, M.orderByCode AS orderByCode
|
||||||
, M.msgId AS msgId
|
, M.msgId AS msgId
|
||||||
, M.reqDate AS reqDate
|
, DATE_FORMAT(M.reqDate, '%Y-%m-%d %H:%i') AS reqDate
|
||||||
FROM
|
FROM
|
||||||
(SELECT
|
(SELECT
|
||||||
DATE_FORMAT(B.REGDATE, '%Y-%m-%d %H:%i' ) AS regDate
|
DATE_FORMAT(B.REGDATE, '%Y-%m-%d %H:%i' ) AS regDate
|
||||||
@ -3322,7 +3329,7 @@
|
|||||||
/*and A.DEL_FLAG = 'N'*/
|
/*and A.DEL_FLAG = 'N'*/
|
||||||
AND A.USER_ID = #userId#
|
AND A.USER_ID = #userId#
|
||||||
AND B.USER_ID = #userId#
|
AND B.USER_ID = #userId#
|
||||||
/*AND B.RESERVE_C_YN = 'N'*/
|
AND B.RESERVE_C_YN = 'N'
|
||||||
ORDER BY 1=1
|
ORDER BY 1=1
|
||||||
, msgGroupId DESC
|
, msgGroupId DESC
|
||||||
, sentDate DESC
|
, sentDate DESC
|
||||||
@ -3370,6 +3377,7 @@
|
|||||||
WHERE 1 = 1
|
WHERE 1 = 1
|
||||||
AND pf.SentEA > 0
|
AND pf.SentEA > 0
|
||||||
AND mjf.USER_ID = #userId#
|
AND mjf.USER_ID = #userId#
|
||||||
|
AND mjf.RESERVE_C_YN = 'N'
|
||||||
|
|
||||||
) AS pay
|
) AS pay
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
@ -3595,15 +3603,15 @@
|
|||||||
, MIN(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )) AS minRegDate
|
, MIN(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )) AS minRegDate
|
||||||
, M.msgTypeName
|
, M.msgTypeName
|
||||||
, M.orderByCode
|
, M.orderByCode
|
||||||
, SUM(IF(M.msgTypeName = '단문(SMS)', 1, 0)) AS shtSendCount
|
, SUM(IF(M.msgTypeName = '단문', 1, 0)) AS shtSendCount
|
||||||
, SUM(IF(M.msgTypeName = '장문(LMS)', 1, 0)) AS longSendCount
|
, SUM(IF(M.msgTypeName = '장문', 1, 0)) AS longSendCount
|
||||||
, SUM(IF(M.msgTypeName = '그림(MMS)', 1, 0)) AS pictSendCount
|
, SUM(IF(M.msgTypeName = '그림', 1, 0)) AS pictSendCount
|
||||||
, SUM(IF(M.msgTypeName = '알림톡', 1, 0)) AS atSendCount
|
, SUM(IF(M.msgTypeName = '알림톡', 1, 0)) AS atSendCount
|
||||||
, SUM(IF(M.msgTypeName = '친구톡', 1, 0)) AS ftSendCount
|
, SUM(IF(M.msgTypeName = '친구톡', 1, 0)) AS ftSendCount
|
||||||
<!-- , SUM(M.MSG_GROUP_CNT) AS sendCount -->
|
<!-- , SUM(M.MSG_GROUP_CNT) AS sendCount -->
|
||||||
, ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 0), 0) AS supplyPrice
|
, ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 1), 0) AS supplyPrice
|
||||||
, 0 AS vatPrice
|
, 0 AS vatPrice
|
||||||
, ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 0), 0) AS totalPrice
|
, ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 1), 0) AS totalPrice
|
||||||
, M.MSG_TYPE
|
, M.MSG_TYPE
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
@ -3616,14 +3624,14 @@
|
|||||||
, B.MSG_TYPE
|
, B.MSG_TYPE
|
||||||
, CASE
|
, CASE
|
||||||
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0
|
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0
|
||||||
THEN '그림(MMS)'
|
THEN '그림'
|
||||||
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT = 0
|
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT = 0
|
||||||
THEN '장문(LMS)'
|
THEN '장문'
|
||||||
WHEN B.MSG_TYPE = '8'
|
WHEN B.MSG_TYPE = '8'
|
||||||
THEN '알림톡'
|
THEN '알림톡'
|
||||||
WHEN B.MSG_TYPE = '9'
|
WHEN B.MSG_TYPE = '9'
|
||||||
THEN '친구톡'
|
THEN '친구톡'
|
||||||
ELSE '단문(SMS)'
|
ELSE '단문'
|
||||||
END msgTypeName
|
END msgTypeName
|
||||||
, CASE
|
, CASE
|
||||||
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0
|
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0
|
||||||
@ -3641,8 +3649,6 @@
|
|||||||
AND A.MSG_GROUP_ID = B.MSG_GROUP_ID
|
AND A.MSG_GROUP_ID = B.MSG_GROUP_ID
|
||||||
AND A.USER_ID = #userId#
|
AND A.USER_ID = #userId#
|
||||||
AND B.USER_ID = #userId#
|
AND B.USER_ID = #userId#
|
||||||
AND B.DEL_FLAG = 'N'
|
|
||||||
AND IFNULL(B.DEL_FLAG,'N') = 'N'
|
|
||||||
AND B.RESERVE_C_YN = 'N'
|
AND B.RESERVE_C_YN = 'N'
|
||||||
|
|
||||||
<isNotEmpty property="startDate">
|
<isNotEmpty property="startDate">
|
||||||
@ -3670,6 +3676,9 @@
|
|||||||
<isEqual property="pageType" compareValue="at">
|
<isEqual property="pageType" compareValue="at">
|
||||||
AND B.MSG_TYPE = '8'
|
AND B.MSG_TYPE = '8'
|
||||||
</isEqual>
|
</isEqual>
|
||||||
|
<isEqual property="pageType" compareValue="ft">
|
||||||
|
AND B.MSG_TYPE = '9'
|
||||||
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
) M
|
) M
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
@ -3685,9 +3694,9 @@
|
|||||||
, IFNULL(MIN(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )), 0) AS minRegDate
|
, IFNULL(MIN(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )), 0) AS minRegDate
|
||||||
, M.msgTypeName
|
, M.msgTypeName
|
||||||
, IFNULL(SUM(SentEA), 0) AS ftSendCount
|
, IFNULL(SUM(SentEA), 0) AS ftSendCount
|
||||||
, ifnull(TRUNCATE(SUM(supplyPrice) , 0), 0) AS supplyPrice
|
, ifnull(TRUNCATE(SUM(supplyPrice) , 1), 0) AS supplyPrice
|
||||||
, 0 AS vatPrice
|
, 0 AS vatPrice
|
||||||
, ifnull(TRUNCATE(SUM(M.TOT_PRICE) , 0), 0) AS totalPrice
|
, ifnull(TRUNCATE(SUM(M.TOT_PRICE) , 1), 0) AS totalPrice
|
||||||
FROM (
|
FROM (
|
||||||
SELECT pf.ReqDate AS REGDATE
|
SELECT pf.ReqDate AS REGDATE
|
||||||
, pf.ReqDate AS REQ_DATE
|
, pf.ReqDate AS REQ_DATE
|
||||||
@ -3728,7 +3737,8 @@
|
|||||||
RECEIVE,
|
RECEIVE,
|
||||||
FRST_SEND_PNTTM,
|
FRST_SEND_PNTTM,
|
||||||
CHECK_NO,
|
CHECK_NO,
|
||||||
CONTENTS
|
CONTENTS,
|
||||||
|
SEND_MSG_TYPE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -3741,7 +3751,8 @@
|
|||||||
#receive#,
|
#receive#,
|
||||||
now(),
|
now(),
|
||||||
#checkNo#,
|
#checkNo#,
|
||||||
#contents#
|
#contents#,
|
||||||
|
#sendMsgType#
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
@ -8259,5 +8270,51 @@
|
|||||||
|
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<select id="mjonMsgDataDAO.selectBizResendLogList" resultClass="mjonMsgVO">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
BRLA.CMID AS cmId,
|
||||||
|
BRLA.CALL_STATUS AS resultCode,
|
||||||
|
BRLB.USER_KEY AS userData
|
||||||
|
FROM
|
||||||
|
BIZ_RESEND_LOG BRLA
|
||||||
|
JOIN
|
||||||
|
BIZ_RESEND_LOG BRLB
|
||||||
|
ON BRLB.UMID = BRLA.CMID
|
||||||
|
WHERE (BRLA.UMID = '' OR BRLA.UMID IS NULL);
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<update id="mjonMsgDataDAO.updateResendResult" parameterClass="mjonMsgVO" >
|
||||||
|
|
||||||
|
UPDATE MJ_MSG_DATA
|
||||||
|
SET MSG_RESULT = #msgResult#
|
||||||
|
WHERE USERDATA = #userData#
|
||||||
|
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<delete id="mjonMsgDataDAO.deleteBizResendLog" parameterClass="mjonMsgVO" >
|
||||||
|
|
||||||
|
DELETE FROM BIZ_RESEND_LOG
|
||||||
|
WHERE CMID = #cmId# OR UMID = #cmId#
|
||||||
|
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<select id="mjonMsgDataDAO.selectSysMsgTodaySendYn" parameterClass="SendLogVO" resultClass="boolean">
|
||||||
|
SELECT
|
||||||
|
<![CDATA[
|
||||||
|
COUNT(1) >= 1 AS todaySendYn
|
||||||
|
]]>
|
||||||
|
FROM
|
||||||
|
mj_system_send a
|
||||||
|
WHERE
|
||||||
|
RECEIVE = #receive#
|
||||||
|
<![CDATA[
|
||||||
|
AND FRST_SEND_PNTTM >= CURDATE()
|
||||||
|
AND FRST_SEND_PNTTM < CURDATE() + INTERVAL 1 DAY
|
||||||
|
]]>
|
||||||
|
AND SEND_MSG_TYPE = '01'
|
||||||
|
</select>
|
||||||
|
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|
||||||
|
|||||||
@ -254,6 +254,9 @@
|
|||||||
<isEqual property="searchCondition" compareValue="3" >
|
<isEqual property="searchCondition" compareValue="3" >
|
||||||
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
</isEqual>
|
</isEqual>
|
||||||
|
<isEqual property="searchCondition" compareValue="4" >
|
||||||
|
AND A.CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
<isNotEmpty property="searchCondition01">
|
<isNotEmpty property="searchCondition01">
|
||||||
AND B.RESERVE_YN = #searchCondition01#
|
AND B.RESERVE_YN = #searchCondition01#
|
||||||
@ -473,6 +476,9 @@
|
|||||||
<isEqual property="searchCondition" compareValue="3" >
|
<isEqual property="searchCondition" compareValue="3" >
|
||||||
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
</isEqual>
|
</isEqual>
|
||||||
|
<isEqual property="searchCondition" compareValue="4" >
|
||||||
|
AND A.CALL_TO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||||
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
<isNotEmpty property="searchCondition01">
|
<isNotEmpty property="searchCondition01">
|
||||||
AND B.RESERVE_YN = #searchCondition01#
|
AND B.RESERVE_YN = #searchCondition01#
|
||||||
|
|||||||
@ -101,6 +101,7 @@
|
|||||||
, D.CODE_NM AS rcptTypeTxt
|
, D.CODE_NM AS rcptTypeTxt
|
||||||
, E.CONFIRM_YN AS confirmYn
|
, E.CONFIRM_YN AS confirmYn
|
||||||
, E.RCPT_TYPE AS rcptType
|
, E.RCPT_TYPE AS rcptType
|
||||||
|
, E.CONFIRM_DATE AS confirmDate
|
||||||
, IFNULL(MP.POINT, '0') AS point
|
, IFNULL(MP.POINT, '0') AS point
|
||||||
, EMI.EVENT_PG_MOID AS eventMoid
|
, EMI.EVENT_PG_MOID AS eventMoid
|
||||||
, mber.SMISHING_YN AS smishingYn
|
, mber.SMISHING_YN AS smishingYn
|
||||||
@ -149,6 +150,7 @@
|
|||||||
MOID
|
MOID
|
||||||
, CONFIRM_YN
|
, CONFIRM_YN
|
||||||
, RCPT_TYPE
|
, RCPT_TYPE
|
||||||
|
, CONFIRM_DATE
|
||||||
FROM
|
FROM
|
||||||
MJ_TAX
|
MJ_TAX
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
@ -2373,4 +2375,27 @@
|
|||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="mjonPayDAO.selectPayDetail" parameterClass="mjonPayVO" resultClass="mjonPayVO">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
LM.BIZ_NO AS bizNo
|
||||||
|
, LM.MBER_NM AS mberNm
|
||||||
|
, LM.MANAGER_NM AS managerNm
|
||||||
|
, LM.MBTLNUM AS mbtlNum
|
||||||
|
, LM.MBER_EMAIL_ADRES AS email
|
||||||
|
, LM.PRE_PAYMENT_YN AS prePaymentYn
|
||||||
|
, LM.DEPT AS dept
|
||||||
|
, LM.USER_MONEY AS userMoney
|
||||||
|
, MP.REG_DATE AS regDate
|
||||||
|
, MP.AMT AS amt
|
||||||
|
, MP.CASH AS cash
|
||||||
|
, MP.PG_STATUS AS pgStatus
|
||||||
|
FROM LETTNGNRLMBER LM
|
||||||
|
LEFT JOIN MJ_PG MP
|
||||||
|
ON MP.USER_ID = LM.MBER_ID
|
||||||
|
WHERE LM.MBER_ID = #userId#
|
||||||
|
AND MP.MOID = #moid#
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
@ -980,6 +980,7 @@
|
|||||||
IFNULL(SLACK_NOTI, 'N') AS slackNoti,
|
IFNULL(SLACK_NOTI, 'N') AS slackNoti,
|
||||||
IFNULL(SMISHING_NOTI, 'N') AS smishingNoti,
|
IFNULL(SMISHING_NOTI, 'N') AS smishingNoti,
|
||||||
IFNULL(HOLI_SMISHING_NOTI, 'N') AS holiSmishingNoti,
|
IFNULL(HOLI_SMISHING_NOTI, 'N') AS holiSmishingNoti,
|
||||||
|
IFNULL(SMS_NOTI_IF_OVER_FIFTY, 'N') AS smsNotiIfOverFifty,
|
||||||
LAST_UPDUSR_ID AS lasUpdusrId,
|
LAST_UPDUSR_ID AS lasUpdusrId,
|
||||||
LAST_UPDT_PNTTM AS lastUpdtPnttm
|
LAST_UPDT_PNTTM AS lastUpdtPnttm
|
||||||
FROM MJ_MBER_SETTING
|
FROM MJ_MBER_SETTING
|
||||||
|
|||||||
@ -2142,4 +2142,38 @@
|
|||||||
|
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<select id="mberManageDAO.selectMberHeaderInfo" resultClass="itn.let.uss.umt.service.MberManageVO" parameterClass="String">
|
||||||
|
SELECT
|
||||||
|
L.SHORT_PRICE AS shortPrice
|
||||||
|
, L.LONG_PRICE AS longPrice
|
||||||
|
, L.PICTURE_PRICE AS picturePrice
|
||||||
|
, L.PICTURE2_PRICE AS picture2Price
|
||||||
|
, L.PICTURE3_PRICE AS picture3Price
|
||||||
|
, L.PRE_PAYMENT_YN AS prePaymentYn
|
||||||
|
, L.USER_MONEY AS userMoney
|
||||||
|
, IFNULL(MEMI.EVENT_SHORT_PRICE, 0) AS eventShortPrice
|
||||||
|
, IFNULL(MEMI.EVENT_LONG_PRICE, 0) AS eventLongPrice
|
||||||
|
, IFNULL(MEMI.EVENT_PICTURE_PRICE, 0) AS eventPicturePrice
|
||||||
|
, IFNULL(MEMI.EVENT_PICTURE2_PRICE, 0) AS eventPicture2Price
|
||||||
|
, IFNULL(MEMI.EVENT_PICTURE3_PRICE, 0) AS eventPicture3Price
|
||||||
|
, IFNULL(MEMI.EVENT_REMAIN_CASH, 0) AS eventRemainCash
|
||||||
|
, DATE_FORMAT(MEMI.EVENT_END_DATE, '%Y-%m-%d') AS eventEndDate
|
||||||
|
FROM
|
||||||
|
LETTNGNRLMBER L
|
||||||
|
LEFT JOIN
|
||||||
|
MJ_EVENT_MBER_INFO MEMI
|
||||||
|
ON L.MBER_ID = MEMI.MBER_ID
|
||||||
|
AND MEMI.EVENT_INFO_ID = (
|
||||||
|
SELECT
|
||||||
|
MAX(EVENT_INFO_ID)
|
||||||
|
FROM
|
||||||
|
MJ_EVENT_MBER_INFO
|
||||||
|
WHERE
|
||||||
|
MBER_ID = #mberID#
|
||||||
|
AND EVENT_STATUS = 'Y'
|
||||||
|
|
||||||
|
)
|
||||||
|
WHERE L.MBER_ID = #mberId#
|
||||||
|
|
||||||
|
</select>
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|||||||
@ -1367,6 +1367,7 @@
|
|||||||
LETTNGNRLMBER
|
LETTNGNRLMBER
|
||||||
SET
|
SET
|
||||||
SMISHING_YN = #smishingYn#
|
SMISHING_YN = #smishingYn#
|
||||||
|
, AT_SMISHING_YN = #atSmishingYn#
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
AND MBER_ID = #mberId#
|
AND MBER_ID = #mberId#
|
||||||
</update>
|
</update>
|
||||||
@ -1458,5 +1459,15 @@
|
|||||||
AND MONTH(REG_DATE) = MONTH(CURRENT_DATE)
|
AND MONTH(REG_DATE) = MONTH(CURRENT_DATE)
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 마지막 결제수단 SELECT -->
|
||||||
|
<select id="userManageDAO.selectLastPayMethod" parameterClass="String" resultClass="String">
|
||||||
|
SELECT
|
||||||
|
IFNULL(PAY_METHOD, '') AS nextPayMethod
|
||||||
|
FROM MJ_PG
|
||||||
|
WHERE
|
||||||
|
USER_ID = #userId#
|
||||||
|
ORDER BY REG_DATE DESC LIMIT 1
|
||||||
|
</select>
|
||||||
|
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
|
|||||||
@ -36,6 +36,11 @@
|
|||||||
<link rel="stylesheet" href="/publish/js/datepicker/classic.css">
|
<link rel="stylesheet" href="/publish/js/datepicker/classic.css">
|
||||||
<link rel="stylesheet" href="/publish/js/datepicker/classic.date.css">
|
<link rel="stylesheet" href="/publish/js/datepicker/classic.date.css">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/publish/js/highlight/styles/default.min.css">
|
||||||
|
<link rel="stylesheet" href="/publish/js/highlight/styles/arta.css">
|
||||||
|
|
||||||
<script type="text/javascript" src="/publish/js/jquery-3.5.0.js"></script>
|
<script type="text/javascript" src="/publish/js/jquery-3.5.0.js"></script>
|
||||||
<script type="text/javascript" src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
|
<script type="text/javascript" src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
|
||||||
<script type="text/javascript" src="/publish/js/common.js?date=202507210001"></script>
|
<script type="text/javascript" src="/publish/js/common.js?date=202507210001"></script>
|
||||||
@ -80,6 +85,9 @@
|
|||||||
|
|
||||||
<!-- Uncaught TypeError: e.widget is not a function로 인해 가장 마지막에 선언_이준호_220510 -->
|
<!-- Uncaught TypeError: e.widget is not a function로 인해 가장 마지막에 선언_이준호_220510 -->
|
||||||
<script type="text/javascript" src="/dist/js/tabulator/jquery_wrapper.js"></script>
|
<script type="text/javascript" src="/dist/js/tabulator/jquery_wrapper.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="/publish/js/highlight/highlight.min.js"></script>
|
||||||
|
|
||||||
<%-- 20240110 matomo 사용 안함으로 인하여 주석처리 함
|
<%-- 20240110 matomo 사용 안함으로 인하여 주석처리 함
|
||||||
|
|
||||||
<c:if test="${fn:contains(pageContext.request.requestURL, 'munjaon.co.kr')}">
|
<c:if test="${fn:contains(pageContext.request.requestURL, 'munjaon.co.kr')}">
|
||||||
|
|||||||
@ -344,6 +344,7 @@
|
|||||||
<input type="hidden" name="tr_cert" value = "<%=tr_cert%>">
|
<input type="hidden" name="tr_cert" value = "<%=tr_cert%>">
|
||||||
<input type="hidden" name="tr_url" value = "<%=tr_url%>">
|
<input type="hidden" name="tr_url" value = "<%=tr_url%>">
|
||||||
<input type="hidden" name="tr_add" value = "<%=tr_add%>">
|
<input type="hidden" name="tr_add" value = "<%=tr_add%>">
|
||||||
|
<input type="hidden" name="tr_ver" value = "V2">
|
||||||
<input type="submit" value="본인인증서비스 요청" onclick= "javascript:openKMCISWindow();">
|
<input type="submit" value="본인인증서비스 요청" onclick= "javascript:openKMCISWindow();">
|
||||||
</form>
|
</form>
|
||||||
<BR>
|
<BR>
|
||||||
@ -904,5 +904,6 @@ function listAddrTransHistAjax(pageNo) {
|
|||||||
<input type="hidden" name="tr_url" id="tr_url" value = "${tr_url}">
|
<input type="hidden" name="tr_url" id="tr_url" value = "${tr_url}">
|
||||||
<input type="hidden" name="tr_add" id="tr_add" value = "${tr_add}">
|
<input type="hidden" name="tr_add" id="tr_add" value = "${tr_add}">
|
||||||
<input type="hidden" name="mberId" id="mberId" value= "${userId}">
|
<input type="hidden" name="mberId" id="mberId" value= "${userId}">
|
||||||
|
<input type="hidden" name="tr_ver" value = "V2">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|||||||
@ -112,16 +112,17 @@ function insertAddrAjax() {
|
|||||||
// return;
|
// return;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사
|
if(!isValidPhoneNumber(form.addrPhoneNo.value)){//일반전화 유효성 검사
|
||||||
if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사
|
const formattedNumber =formatPhoneNumber(form.addrPhoneNo.value); // 번호 표준화
|
||||||
|
if(!isValidPhoneNumber(formattedNumber)){
|
||||||
alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다.");
|
alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다.");
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//휴대폰번호 포맷 맞추기
|
||||||
|
form.addrPhoneNo.value = formatPhoneNumber(form.addrPhoneNo.value);
|
||||||
|
|
||||||
var data = new FormData(form);
|
var data = new FormData(form);
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
|||||||
@ -26,7 +26,7 @@ function moveTab(type){
|
|||||||
<!-- tab button -->
|
<!-- tab button -->
|
||||||
<ul class="tabType1">
|
<ul class="tabType1">
|
||||||
<li class="tab active"><button type="button" onclick="TabType6(this,'1');">네이버 주소록을 이용하여 폰주소록 등록</button></li>
|
<li class="tab active"><button type="button" onclick="TabType6(this,'1');">네이버 주소록을 이용하여 폰주소록 등록</button></li>
|
||||||
<li class="tab"><button type="button" onclick="TabType6(this,'2');">핸드폰 VCF파일로 변환하여 등록</button></li>
|
<li class="tab"><button type="button" onclick="TabType6(this,'2');listTab(this,'2');">핸드폰 VCF파일로 변환하여 등록</button></li>
|
||||||
</ul><!--// tab button -->
|
</ul><!--// tab button -->
|
||||||
</div>
|
</div>
|
||||||
<!-- 네이버 주소록을 이용하여 등록 -->
|
<!-- 네이버 주소록을 이용하여 등록 -->
|
||||||
@ -98,7 +98,8 @@ function moveTab(type){
|
|||||||
</div><!--// 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
</div><!--// 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
||||||
|
|
||||||
<!-- 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
<!-- 네이버 주소록을 이용하여 등록 - 안드로이드 -->
|
||||||
<div class="addWrap iphone eleType_cont" id="listTab_2">
|
<!-- <div class="addWrap iphone eleType_cont" id="listTab_2"> -->
|
||||||
|
<div class="addWrap iphone eleType_cont">
|
||||||
<ul class="add_and">
|
<ul class="add_and">
|
||||||
<li>
|
<li>
|
||||||
<p class="number">01</p>
|
<p class="number">01</p>
|
||||||
@ -140,49 +141,95 @@ function moveTab(type){
|
|||||||
</div> <!-- // 네이버 주소록을 이용하여 등록-->
|
</div> <!-- // 네이버 주소록을 이용하여 등록-->
|
||||||
<!-- 핸드폰 VCF파일로 변환하여 등록 -->
|
<!-- 핸드폰 VCF파일로 변환하여 등록 -->
|
||||||
<div class="enroll_cont" id="tab6_2">
|
<div class="enroll_cont" id="tab6_2">
|
||||||
<div class="addWrap vcf">
|
<ul class="adr_depth3">
|
||||||
<ul class="add_and">
|
<li class="tab active"><button type="button" onclick="listTab(this,'2');">갤럭시</button></li>
|
||||||
<li>
|
<li class="tab"><button type="button" onclick="listTab(this,'3');">아이폰</button></li>
|
||||||
<p class="number">01</p>
|
</ul>
|
||||||
<p class="txt">휴대폰 <strong>연락처 앱</strong> 선택</p>
|
<div class="addWrap list_cont current galexy" id="listTab_2">
|
||||||
<img src="/publish/images/content/add_vcf_img01.png"/>
|
<ul class="add_and">
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">01</p>
|
||||||
<p class="number">02</p>
|
<p class="txt">휴대폰 <strong>연락처 앱</strong> 선택</p>
|
||||||
<p>왼쪽 메뉴 클릭 후<br/><strong>연락처 관리 선택</strong></p>
|
<img src="/publish/images/content/add_vcf_img01.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img02.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">02</p>
|
||||||
<p class="number">03</p>
|
<p>왼쪽 메뉴 클릭 후<br /><strong>연락처 관리 선택</strong></p>
|
||||||
<p>연락처 관리에서 <strong>연락처</strong><br/><strong>가져오기/내보내기</strong> 선택</p>
|
<img src="/publish/images/content/add_vcf_img02.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img03.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">03</p>
|
||||||
<p class="number">04</p>
|
<p>연락처 관리에서 <strong>연락처</strong><br /><strong>가져오기/내보내기</strong> 선택</p>
|
||||||
<p class="txt"><strong>연락처 내보내기</strong> 선택</p>
|
<img src="/publish/images/content/add_vcf_img03.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img04.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">04</p>
|
||||||
<p class="number">05</p>
|
<p class="txt"><strong>연락처 내보내기</strong> 선택</p>
|
||||||
<p><strong>내장메모리</strong> 선택 후<br/><strong>핸드폰과 PC 연결</strong></p>
|
<img src="/publish/images/content/add_vcf_img04.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img05.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">05</p>
|
||||||
<p class="number">06</p>
|
<p><strong>내장메모리</strong> 선택 후<br /><strong>핸드폰과 PC 연결</strong></p>
|
||||||
<p><strong>내 PC</strong>에서<br/><strong>본인 핸드폰 기종</strong> 선택</p>
|
<img src="/publish/images/content/add_vcf_img05.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img06.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p class="number">06</p>
|
||||||
<p class="number">07</p>
|
<p><strong>내 PC</strong>에서<br /><strong>본인 핸드폰 기종</strong> 선택</p>
|
||||||
<p><strong>연락처(VCF) 파일</strong> 선택 후<br/>PC 복사(Ctrl+C/Ctrl+V),<br>드래그앤드롭)</p>
|
<img src="/publish/images/content/add_vcf_img06.png" />
|
||||||
<img src="/publish/images/content/add_vcf_img07.png"/>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
</ul>
|
<p class="number">07</p>
|
||||||
<div class="btnWrap">
|
<p><strong>연락처(VCF) 파일</strong> 선택 후<br />PC 복사(Ctrl+C/Ctrl+V),<br>드래그앤드롭)</p>
|
||||||
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
<img src="/publish/images/content/add_vcf_img07.png" />
|
||||||
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
</li>
|
||||||
</div>
|
</ul>
|
||||||
</div>
|
<div class="btnWrap">
|
||||||
|
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
||||||
|
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="addWrap list_cont iphone vCard" id="listTab_3">
|
||||||
|
<ul class="add_and">
|
||||||
|
<li>
|
||||||
|
<p class="number">01</p>
|
||||||
|
<p class="txt">
|
||||||
|
<strong>iCloud.com</strong> 접속 후<br> <strong>Apple 계정</strong>으로 로그인
|
||||||
|
</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img01.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">02</p>
|
||||||
|
<p><strong>‘연락처’</strong> 앱 선택 및 실행 </p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img02.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">03</p>
|
||||||
|
<p><strong>모든 연락처</strong> 선택</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img03.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">04</p>
|
||||||
|
<p class="txt"><strong>vCard</strong> 내보내기</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img04.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">05</p>
|
||||||
|
<p><strong>다운로드 폴더</strong>에<br><strong>iCloud vCards</strong> 파일로 저장</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img05.png" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="number">06</p>
|
||||||
|
<p><strong>연락처(vCards)</strong>파일 선택 후<br>
|
||||||
|
<strong>PC 바탕화면</strong>에 <br>
|
||||||
|
<strong>복사/붙여넣기</strong>(Ctrl+C/Ctrl+V)</p>
|
||||||
|
<img src="/publish/images/content/add_vCard_iphone_img06.png" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="btnWrap">
|
||||||
|
<button type="button" onclick="moveTab('addrApply'); return false;">주소록 입력 무료대행</button>
|
||||||
|
<button type="button" onclick="moveTab('addr'); return false;">주소록 관리 바로가기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div><!--// 핸드폰 VCF파일로 변환하여 등록 -->
|
</div><!--// 핸드폰 VCF파일로 변환하여 등록 -->
|
||||||
</div><!--// 주소록 관리 - 폰주소록 등록 -->
|
</div><!--// 주소록 관리 - 폰주소록 등록 -->
|
||||||
</div><!--// send top -->
|
</div><!--// send top -->
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user