From fa55935029aac682fb41074018b5ff5f3e89f749 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Tue, 15 Jul 2025 16:50:36 +0900 Subject: [PATCH 01/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EB=8C=80=EC=B2=B4=EB=AC=B8=EC=9E=90=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EC=8A=A4=EC=BC=80=EC=A4=84=EB=9F=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itn/let/mjo/msg/service/MjonMsgVO.java | 4 +++ .../msgdata/service/impl/MjonMsgDataDAO.java | 17 ++++++++++ .../schdlr/service/SchdlrManageService.java | 3 ++ .../itn/let/schdlr/service/SchedulerUtil.java | 16 ++++++++++ .../service/impl/SchdlrManageServiceImpl.java | 31 +++++++++++++++++++ .../sqlmap/let/msg/MjonMsgData_SQL_mysql.xml | 30 ++++++++++++++++++ 6 files changed, 101 insertions(+) diff --git a/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java b/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java index 0e93135a..29ba5686 100644 --- a/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java +++ b/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java @@ -93,6 +93,7 @@ public class MjonMsgVO extends ComDefaultVO{ private String reserveYn ; //예약문자 여부 private String reserveCYn ; //예약문자 취소 여부 private String cancelDate; //예약 취소 일자 + private String msgResult; //문자 발송결과 10:성공 20:실패 30:대체문자 대기 40:대체문자 성공 50:대체문자 실패 private String sendRate; // 전송 배분률 @@ -313,5 +314,8 @@ public class MjonMsgVO extends ComDefaultVO{ private String detailType; private List mjonMsgSendVOList = new ArrayList<>(); + + private String cmId; //다우기술 cmId + } diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java index 9f59ab1a..a77aa9a2 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java @@ -463,6 +463,23 @@ public class MjonMsgDataDAO extends EgovAbstractDAO { } + //대체문자 대기 목록 조회 + @SuppressWarnings("unchecked") + public List selectBizResendLogList()throws Exception{ + + return (List) 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) { try { diff --git a/src/main/java/itn/let/schdlr/service/SchdlrManageService.java b/src/main/java/itn/let/schdlr/service/SchdlrManageService.java index 3717a18b..76d0daeb 100644 --- a/src/main/java/itn/let/schdlr/service/SchdlrManageService.java +++ b/src/main/java/itn/let/schdlr/service/SchdlrManageService.java @@ -54,4 +54,7 @@ public interface SchdlrManageService { public void payBack(String type, int limitCout) throws Exception; public void payBack_advc(String p_type) throws Exception; + + //대체문자 결과 반영 배치 + public void updateKakaoResendResult() throws Exception; } diff --git a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java index a5bda660..fe76af9a 100644 --- a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java +++ b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java @@ -479,6 +479,22 @@ 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=====runKakaoResendUpdate =============>"); + schdlrManageService.updateKakaoResendResult(); + }catch(Exception ex) { + ex.printStackTrace(); + } + + } + + + //환불 실행 private void PayBack(String p_type) throws Exception { diff --git a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java index ada754d1..a2e18dc6 100644 --- a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java +++ b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java @@ -566,4 +566,35 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements 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 { + + // 대체문자 대상 조회 + List 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); + } + + } } diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index e924647a..aee2042a 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -8244,5 +8244,35 @@ + + + + + UPDATE MJ_MSG_DATA + SET MSG_RESULT = #msgResult# + WHERE USERDATA = #userData# + + + + + + DELETE FROM BIZ_RESEND_LOG + WHERE CMID = #cmId# OR UMID = #cmId# + + + From b059021dfdf2cd8e69d6d562f7700d361573b811 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Tue, 15 Jul 2025 17:21:47 +0900 Subject: [PATCH 02/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EB=8C=80=EC=B2=B4=EB=AC=B8=EC=9E=90=20=EC=8A=A4=EC=BC=80?= =?UTF-8?q?=EC=A4=84=EB=9F=AC=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java | 4 ++-- .../egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java index a77aa9a2..b28a2b52 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java @@ -472,12 +472,12 @@ public class MjonMsgDataDAO extends EgovAbstractDAO { //대체문자 결과 반영 public int updateResendResult(MjonMsgVO mjonMsgVO)throws Exception{ - return update("MjonMsgDataDAO.updateResendResult", mjonMsgVO); + return update("mjonMsgDataDAO.updateResendResult", mjonMsgVO); } //대체문자 로그 삭제 public int deleteBizResendLog(MjonMsgVO mjonMsgVO)throws Exception{ - return delete("MjonMsgDataDAO.deleteBizResendLog", mjonMsgVO); + return delete("mjonMsgDataDAO.deleteBizResendLog", mjonMsgVO); } diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index aee2042a..be67de21 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -8244,7 +8244,7 @@ - SELECT BRLA.CMID AS cmId, @@ -8259,7 +8259,7 @@ - + UPDATE MJ_MSG_DATA SET MSG_RESULT = #msgResult# @@ -8267,7 +8267,7 @@ - + DELETE FROM BIZ_RESEND_LOG WHERE CMID = #cmId# OR UMID = #cmId# From 07b737940bab6cf52507a02a30cde146a48f1be8 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Wed, 16 Jul 2025 17:51:44 +0900 Subject: [PATCH 03/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EB=8C=80=EC=B2=B4=EB=AC=B8=EC=9E=90=20=EC=8A=A4=EC=BC=80?= =?UTF-8?q?=EC=A4=84=EB=9F=AC=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kakao/user/sent/service/KakaoSentVO.java | 7 ++++++ .../service/impl/KakaoSentServiceImpl.java | 8 ++++++- .../msgdata/web/MjonMsgDataController.java | 15 ++++++++++++ .../service/impl/SchdlrManageServiceImpl.java | 6 +++-- .../let/mjo/kakao/KakaoSent_SQL_Mysql.xml | 23 +++++++++++++++++++ .../web/kakao/sent/KakaoSentAllListAjax.jsp | 19 ++++++++++++++- 6 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java index 1a2e7682..44673c18 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java +++ b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java @@ -119,4 +119,11 @@ public class KakaoSentVO extends UserDefaultVO{ private String yellowId; + //이지우 발송결과 테스트 + private int successCountTest; + private int waitCountTest; + private int failCountTest; + private int kakaoResendSuccCountTest; + private int kakaoResendFailCountTest; + //이지우 발송결과 테스트 끝 } diff --git a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java index 7f4e1e1e..f73c83fa 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java @@ -302,7 +302,13 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka result.setFailCount(eachCnt.getFailCount()); result.setKakaoResendSuccCount(eachCnt.getKakaoResendSuccCount()); result.setKakaoResendFailCount(eachCnt.getKakaoResendFailCount()); - + //이지우 발송결과 테스트 + result.setSuccessCountTest(eachCnt.getSuccessCountTest()); + result.setWaitCountTest(eachCnt.getWaitCountTest()); + result.setFailCountTest(eachCnt.getFailCountTest()); + result.setKakaoResendSuccCountTest(eachCnt.getKakaoResendSuccCountTest()); + result.setKakaoResendFailCountTest(eachCnt.getKakaoResendFailCountTest()); + //이지우 발송결과 테스트 끝 result.setMsgGroupCnt( Integer.valueOf(result.getSuccessCount() + result.getWaitCount() + result.getFailCount()).toString() ); diff --git a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java index de13ab68..1e7fe4e4 100644 --- a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java +++ b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java @@ -73,6 +73,7 @@ import itn.com.cmm.util.MJUtil; import itn.com.cmm.util.RedirectUrlMaker; import itn.com.cmm.util.StringUtil; import itn.com.utl.fcc.service.EgovStringUtil; +import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; import itn.let.lett.service.HashConfVO; import itn.let.lett.service.LetterService; import itn.let.lett.service.LetterVO; @@ -6544,4 +6545,18 @@ public class MjonMsgDataController { return "web/msgdata/MsgSentListAjax"; } + //이지우 발송결과 테스트 + @RequestMapping(value= {"/resendTest.do"}) + public String resendTest(@ModelAttribute("searchVO") MjonKakaoATVO mjonKakaoATVO, ModelMap model) throws Exception{ + + try { + System.out.println("=============SchedulerUtil=====runKakaoResendUpdate =============>"); + schdlrManageService.updateKakaoResendResult(); + }catch(Exception ex) { + ex.printStackTrace(); + } + + return "redirect:/web/kakao/sent/selectKakaoSentView.do"; + } + //이지우 발송결과 테스트 끝 } diff --git a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java index a2e18dc6..7ae3012d 100644 --- a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java +++ b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java @@ -581,7 +581,7 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements */ @Override public void updateKakaoResendResult() throws Exception { - + long startTime = System.currentTimeMillis(); // 대체문자 대상 조회 List resendLogList = mjonMsgDataDAO.selectBizResendLogList(); for(MjonMsgVO vo : resendLogList) { @@ -595,6 +595,8 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements mjonMsgDataDAO.updateResendResult(vo); mjonMsgDataDAO.deleteBizResendLog(vo); } - + long endTime = System.currentTimeMillis(); + long elapsedTime = (endTime - startTime) / 1000; // 초 단위 변환 + System.out.println("updateKakaoResendResult 실행 시간: " + elapsedTime + "초 (" + resendLogList.size() + "건 처리)"); } } diff --git a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml index c8930144..752385fa 100644 --- a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml @@ -1681,6 +1681,19 @@ , 0 AS successPrice , 0 AS kakaoResendSuccPrice + + , a.successCountTest + , a.waitCountTest + , a.failCountTest + + , a.kakaoResendSuccCountTest + , a.kakaoResendFailCountTest + + + , 0 AS kakaoResendSuccCountTest + , 0 AS kakaoResendFailCountTest + + FROM ( SELECT t1.MSG_GROUP_ID @@ -1697,6 +1710,16 @@ , SUM(IF(t1.BIZ_KAKAO_RESEND_YN = 'Y' AND BL1.CALL_STATUS IN ('6600', '4100') AND t1.BIZ_KAKAO_RESEND_TYPE = 'SMS', 1, 0)) AS smsCnt , SUM(IF(t1.BIZ_KAKAO_RESEND_YN = 'Y' AND BL1.CALL_STATUS IN ('6600', '4100') AND t1.BIZ_KAKAO_RESEND_TYPE = 'MMS', 1, 0)) AS mmsCnt + + , t1.MSG_RESULT AS msgResult + , SUM(IF(t1.MSG_RESULT = '10', 1, 0)) AS successCountTest + , SUM(IF(t1.MSG_RESULT IS NULL OR TRIM(t1.MSG_RESULT) ='',1,0)) AS waitCountTest + , SUM(IF(t1.MSG_RESULT = '20' OR t1.MSG_RESULT = '30' OR t1.MSG_RESULT = '40' OR t1.MSG_RESULT = '50', 1, 0)) AS failCountTest + + , SUM(IF(t1.MSG_RESULT = '40', 1, 0)) AS kakaoResendSuccCountTest + , SUM(IF(t1.MSG_RESULT = '50', 1, 0)) AS kakaoResendFailCountTest + + FROM mj_msg_data t1 FORCE INDEX (idx_msgdata_groupid_delfalg_msgtype_curstate) LEFT OUTER JOIN BIZ_LOG BL1 ON t1.BIZ_UMID = BL1.CMID diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp index 1e034a9f..09ab526b 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp @@ -236,7 +236,24 @@ function pageUnitChg(obj){ <%-- --%> + + / + + +

/

+ + +

/

+ + +

/

+ + +

/

+ + + <%-- @@ -250,7 +267,7 @@ function pageUnitChg(obj){

- + --%> From 1e639a393ccf7b08108566f76ed566b290c65b5a Mon Sep 17 00:00:00 2001 From: JIWOO Date: Thu, 17 Jul 2025 14:04:16 +0900 Subject: [PATCH 04/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EC=8A=A4=EC=BC=80=EC=A4=84=EB=9F=AC=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsp/web/kakao/sent/KakaoSentAllListAjax.jsp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp index 09ab526b..6e056f65 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp @@ -238,19 +238,19 @@ function pageUnitChg(obj){ - / +
-

/

+


-

/

+


-

/

+


-

/

+


<%-- From 5a0ef45bf3f07eba211d57df62ec2a4602373e3b Mon Sep 17 00:00:00 2001 From: JIWOO Date: Fri, 18 Jul 2025 16:53:27 +0900 Subject: [PATCH 05/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=20=EB=B0=9C=EC=86=A1=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=9A=A9(MSG=5FRESULT=20=EB=B0=98?= =?UTF-8?q?=EC=98=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java | 6 ++++++ .../itn/let/mjo/msgsent/service/MjonMsgSentVO.java | 5 +++++ .../msgsent/service/impl/MjonMsgSentServiceImpl.java | 10 ++++++++++ .../java/itn/let/schdlr/service/SchedulerUtil.java | 4 +++- .../sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml | 8 ++++++++ .../WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp | 6 +++--- 6 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java index 7cafbab5..553470f4 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java @@ -29,5 +29,11 @@ public class MjonMsgSWFDTO implements Serializable { private int resultFValue; // 실패건수 private int resultWValue; // 대기건수 private String divideYN; // 분할여부 + /* 이지우 발송결과 테스트 */ + private int resultSValueTest; // 성공건수 + private int resultFValueTest; // 실패건수 + private int resultWValueTest; // 대기건수 + /* 이지우 발송결과 테스트 끝 */ + } diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java index 1e412147..3bf64139 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java @@ -108,5 +108,10 @@ public class MjonMsgSentVO extends UserDefaultVO{ // 결과 리스트 select 할 떄 // TIMESTAMPDIFF(minute, DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) as diffMin private int diffMin; + /* 이지우 발송결과 테스트 */ + private String resultSValueTest; + private String resultFValueTest; + private String resultWValueTest; + /* 이지우 발송결과 테스트 끝 */ } diff --git a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java index 037f6548..6cb6b266 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java @@ -751,6 +751,11 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements t.setResultWValue(updatedVO.getResultWValue()); t.setDivideYN(updatedVO.getDivideYN()); t.setTotPrice(updatedVO.getTotPrice()); + /* 이지우 발송결과 테스트 */ + t.setResultSValueTest(updatedVO.getResultSValueTest()); + t.setResultFValueTest(updatedVO.getResultFValueTest()); + t.setResultWValueTest(updatedVO.getResultWValueTest()); + /* 이지우 발송결과 테스트 끝 */ }); return resultList; } @@ -765,6 +770,11 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements returnVO.setResultSValue(String.valueOf(mjonMsgSWFDTO.getResultSValue())); // 성공건수 returnVO.setResultFValue(String.valueOf(mjonMsgSWFDTO.getResultFValue())); // 실패건수 returnVO.setResultWValue(String.valueOf(mjonMsgSWFDTO.getResultWValue())); // 대기건수 + /* 이지우 발송결과 테스트 */ + returnVO.setResultSValueTest(String.valueOf(mjonMsgSWFDTO.getResultSValueTest())); // 성공건수 + returnVO.setResultFValueTest(String.valueOf(mjonMsgSWFDTO.getResultFValueTest())); // 실패건수 + returnVO.setResultWValueTest(String.valueOf(mjonMsgSWFDTO.getResultWValueTest())); // 대기건수 + /*이지우 발송결과 테스트 끝*/ returnVO.setDivideYN(mjonMsgSWFDTO.getDivideYN()); diff --git a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java index fe76af9a..e237281d 100644 --- a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java +++ b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java @@ -480,8 +480,10 @@ public class SchedulerUtil { } //대체문자 결과 반영 + //환불처리도 3분마다 MJ_MSG_DATA를 UPDATE하기 때문에 락 이름을 동일하게하여 데드락 방지(환불 스케줄러 : runKakaoOneTime) + //@SchedulerLock(name = "updateKakaoResendResult", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) @Scheduled(cron = "0 0/2 * * * ?") // 2분마다 실행 - @SchedulerLock(name = "updateKakaoResendResult", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) + @SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) public void runUpdateKakaoResendResult() throws Exception { try { diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml index 752eec93..ebb0f482 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml @@ -295,6 +295,11 @@ SUM(IF(aa.result = 'S', 1, 0)) AS resultSValue, SUM(IF(aa.result = 'W', 1, 0)) AS resultWValue, SUM(IF(aa.result = 'F', 1, 0)) AS resultFValue, + + SUM(IF(aa.MSG_RESULT = '10', 1, 0)) AS resultSValueTest, + SUM(IF(aa.MSG_RESULT IS NULL OR TRIM(aa.MSG_RESULT) ='',1,0)) AS resultWValueTest, + SUM(IF(aa.MSG_RESULT = '20', 1, 0)) AS resultFValueTest, + CASE WHEN COUNT(DISTINCT REQ_DATE) > 1 THEN 'Y' ELSE 'N' @@ -342,6 +347,9 @@ else 'F' end as result /* common query */ , A.REQ_DATE + + , A.MSG_RESULT + from MJ_MSG_DATA A where diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp index 8cfd15eb..6da9a0a6 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp @@ -290,13 +290,13 @@ function fnReservCancel(msgGroupId){

-

+


-

+


-

+


From 77fdfe926e43dbabb5e45023072392d74dabe643 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Mon, 21 Jul 2025 11:16:48 +0900 Subject: [PATCH 06/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EB=8C=80=EC=B2=B4=EB=B0=9C=EC=86=A1=20=EC=8A=A4=EC=BC=80?= =?UTF-8?q?=EC=A4=84=EB=9F=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/itn/let/mjo/msgdata/web/MjonMsgDataController.java | 2 ++ src/main/java/itn/let/schdlr/service/SchedulerUtil.java | 6 ++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java index 1e7fe4e4..c115650f 100644 --- a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java +++ b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java @@ -73,7 +73,9 @@ import itn.com.cmm.util.MJUtil; import itn.com.cmm.util.RedirectUrlMaker; import itn.com.cmm.util.StringUtil; import itn.com.utl.fcc.service.EgovStringUtil; +//이지우 발송결과 테스트 import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; +//이지우 발송결과 테스트 끝 import itn.let.lett.service.HashConfVO; import itn.let.lett.service.LetterService; import itn.let.lett.service.LetterVO; diff --git a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java index e237281d..1a62f75f 100644 --- a/src/main/java/itn/let/schdlr/service/SchedulerUtil.java +++ b/src/main/java/itn/let/schdlr/service/SchedulerUtil.java @@ -480,14 +480,12 @@ public class SchedulerUtil { } //대체문자 결과 반영 - //환불처리도 3분마다 MJ_MSG_DATA를 UPDATE하기 때문에 락 이름을 동일하게하여 데드락 방지(환불 스케줄러 : runKakaoOneTime) - //@SchedulerLock(name = "updateKakaoResendResult", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) @Scheduled(cron = "0 0/2 * * * ?") // 2분마다 실행 - @SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) + @SchedulerLock(name = "updateKakaoResendResult", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN) public void runUpdateKakaoResendResult() throws Exception { try { - System.out.println("=============SchedulerUtil=====runKakaoResendUpdate =============>"); + System.out.println("=============SchedulerUtil=====runUpdateKakaoResendResult =============>"); schdlrManageService.updateKakaoResendResult(); }catch(Exception ex) { ex.printStackTrace(); From 824a49b7a077b2af625f8f1349d85901db720935 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Thu, 24 Jul 2025 12:42:41 +0900 Subject: [PATCH 07/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=ED=8A=B8=EB=A6=AC=EA=B1=B0=20=EB=B3=80=EA=B2=BD=20=EC=9E=91?= =?UTF-8?q?=EC=97=85(MSG=5FRESULT)=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=86=8C=EC=8A=A4=20=EC=9B=90=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kakao/user/sent/service/KakaoSentVO.java | 7 ------ .../service/impl/KakaoSentServiceImpl.java | 8 +------ .../msgdata/web/MjonMsgDataController.java | 18 --------------- .../mjo/msgsent/service/MjonMsgSWFDTO.java | 6 ----- .../mjo/msgsent/service/MjonMsgSentVO.java | 5 ---- .../service/impl/MjonMsgSentServiceImpl.java | 10 -------- .../let/mjo/kakao/KakaoSent_SQL_Mysql.xml | 23 ------------------- .../sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml | 8 ------- .../web/kakao/sent/KakaoSentAllListAjax.jsp | 19 +-------------- .../jsp/web/msgsent/MsgSentAllListAjax.jsp | 6 ++--- 10 files changed, 5 insertions(+), 105 deletions(-) diff --git a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java index 44673c18..1a2e7682 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java +++ b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java @@ -119,11 +119,4 @@ public class KakaoSentVO extends UserDefaultVO{ private String yellowId; - //이지우 발송결과 테스트 - private int successCountTest; - private int waitCountTest; - private int failCountTest; - private int kakaoResendSuccCountTest; - private int kakaoResendFailCountTest; - //이지우 발송결과 테스트 끝 } diff --git a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java index f73c83fa..7f4e1e1e 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java @@ -302,13 +302,7 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka result.setFailCount(eachCnt.getFailCount()); result.setKakaoResendSuccCount(eachCnt.getKakaoResendSuccCount()); result.setKakaoResendFailCount(eachCnt.getKakaoResendFailCount()); - //이지우 발송결과 테스트 - result.setSuccessCountTest(eachCnt.getSuccessCountTest()); - result.setWaitCountTest(eachCnt.getWaitCountTest()); - result.setFailCountTest(eachCnt.getFailCountTest()); - result.setKakaoResendSuccCountTest(eachCnt.getKakaoResendSuccCountTest()); - result.setKakaoResendFailCountTest(eachCnt.getKakaoResendFailCountTest()); - //이지우 발송결과 테스트 끝 + result.setMsgGroupCnt( Integer.valueOf(result.getSuccessCount() + result.getWaitCount() + result.getFailCount()).toString() ); diff --git a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java index c115650f..76a9d0ea 100644 --- a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java +++ b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java @@ -73,9 +73,6 @@ import itn.com.cmm.util.MJUtil; import itn.com.cmm.util.RedirectUrlMaker; import itn.com.cmm.util.StringUtil; import itn.com.utl.fcc.service.EgovStringUtil; -//이지우 발송결과 테스트 -import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; -//이지우 발송결과 테스트 끝 import itn.let.lett.service.HashConfVO; import itn.let.lett.service.LetterService; import itn.let.lett.service.LetterVO; @@ -6546,19 +6543,4 @@ public class MjonMsgDataController { return "web/msgdata/MsgSentListAjax"; } - - //이지우 발송결과 테스트 - @RequestMapping(value= {"/resendTest.do"}) - public String resendTest(@ModelAttribute("searchVO") MjonKakaoATVO mjonKakaoATVO, ModelMap model) throws Exception{ - - try { - System.out.println("=============SchedulerUtil=====runKakaoResendUpdate =============>"); - schdlrManageService.updateKakaoResendResult(); - }catch(Exception ex) { - ex.printStackTrace(); - } - - return "redirect:/web/kakao/sent/selectKakaoSentView.do"; - } - //이지우 발송결과 테스트 끝 } diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java index 553470f4..7cafbab5 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java @@ -29,11 +29,5 @@ public class MjonMsgSWFDTO implements Serializable { private int resultFValue; // 실패건수 private int resultWValue; // 대기건수 private String divideYN; // 분할여부 - /* 이지우 발송결과 테스트 */ - private int resultSValueTest; // 성공건수 - private int resultFValueTest; // 실패건수 - private int resultWValueTest; // 대기건수 - /* 이지우 발송결과 테스트 끝 */ - } diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java index 3bf64139..1e412147 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java @@ -108,10 +108,5 @@ public class MjonMsgSentVO extends UserDefaultVO{ // 결과 리스트 select 할 떄 // TIMESTAMPDIFF(minute, DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) as diffMin private int diffMin; - /* 이지우 발송결과 테스트 */ - private String resultSValueTest; - private String resultFValueTest; - private String resultWValueTest; - /* 이지우 발송결과 테스트 끝 */ } diff --git a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java index 6cb6b266..037f6548 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java @@ -751,11 +751,6 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements t.setResultWValue(updatedVO.getResultWValue()); t.setDivideYN(updatedVO.getDivideYN()); t.setTotPrice(updatedVO.getTotPrice()); - /* 이지우 발송결과 테스트 */ - t.setResultSValueTest(updatedVO.getResultSValueTest()); - t.setResultFValueTest(updatedVO.getResultFValueTest()); - t.setResultWValueTest(updatedVO.getResultWValueTest()); - /* 이지우 발송결과 테스트 끝 */ }); return resultList; } @@ -770,11 +765,6 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements returnVO.setResultSValue(String.valueOf(mjonMsgSWFDTO.getResultSValue())); // 성공건수 returnVO.setResultFValue(String.valueOf(mjonMsgSWFDTO.getResultFValue())); // 실패건수 returnVO.setResultWValue(String.valueOf(mjonMsgSWFDTO.getResultWValue())); // 대기건수 - /* 이지우 발송결과 테스트 */ - returnVO.setResultSValueTest(String.valueOf(mjonMsgSWFDTO.getResultSValueTest())); // 성공건수 - returnVO.setResultFValueTest(String.valueOf(mjonMsgSWFDTO.getResultFValueTest())); // 실패건수 - returnVO.setResultWValueTest(String.valueOf(mjonMsgSWFDTO.getResultWValueTest())); // 대기건수 - /*이지우 발송결과 테스트 끝*/ returnVO.setDivideYN(mjonMsgSWFDTO.getDivideYN()); diff --git a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml index 752385fa..c8930144 100644 --- a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml @@ -1681,19 +1681,6 @@ , 0 AS successPrice , 0 AS kakaoResendSuccPrice - - , a.successCountTest - , a.waitCountTest - , a.failCountTest - - , a.kakaoResendSuccCountTest - , a.kakaoResendFailCountTest - - - , 0 AS kakaoResendSuccCountTest - , 0 AS kakaoResendFailCountTest - - FROM ( SELECT t1.MSG_GROUP_ID @@ -1710,16 +1697,6 @@ , SUM(IF(t1.BIZ_KAKAO_RESEND_YN = 'Y' AND BL1.CALL_STATUS IN ('6600', '4100') AND t1.BIZ_KAKAO_RESEND_TYPE = 'SMS', 1, 0)) AS smsCnt , SUM(IF(t1.BIZ_KAKAO_RESEND_YN = 'Y' AND BL1.CALL_STATUS IN ('6600', '4100') AND t1.BIZ_KAKAO_RESEND_TYPE = 'MMS', 1, 0)) AS mmsCnt
- - , t1.MSG_RESULT AS msgResult - , SUM(IF(t1.MSG_RESULT = '10', 1, 0)) AS successCountTest - , SUM(IF(t1.MSG_RESULT IS NULL OR TRIM(t1.MSG_RESULT) ='',1,0)) AS waitCountTest - , SUM(IF(t1.MSG_RESULT = '20' OR t1.MSG_RESULT = '30' OR t1.MSG_RESULT = '40' OR t1.MSG_RESULT = '50', 1, 0)) AS failCountTest - - , SUM(IF(t1.MSG_RESULT = '40', 1, 0)) AS kakaoResendSuccCountTest - , SUM(IF(t1.MSG_RESULT = '50', 1, 0)) AS kakaoResendFailCountTest - - FROM mj_msg_data t1 FORCE INDEX (idx_msgdata_groupid_delfalg_msgtype_curstate) LEFT OUTER JOIN BIZ_LOG BL1 ON t1.BIZ_UMID = BL1.CMID diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml index ebb0f482..752eec93 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml @@ -295,11 +295,6 @@ SUM(IF(aa.result = 'S', 1, 0)) AS resultSValue, SUM(IF(aa.result = 'W', 1, 0)) AS resultWValue, SUM(IF(aa.result = 'F', 1, 0)) AS resultFValue, - - SUM(IF(aa.MSG_RESULT = '10', 1, 0)) AS resultSValueTest, - SUM(IF(aa.MSG_RESULT IS NULL OR TRIM(aa.MSG_RESULT) ='',1,0)) AS resultWValueTest, - SUM(IF(aa.MSG_RESULT = '20', 1, 0)) AS resultFValueTest, - CASE WHEN COUNT(DISTINCT REQ_DATE) > 1 THEN 'Y' ELSE 'N' @@ -347,9 +342,6 @@ else 'F' end as result /* common query */ , A.REQ_DATE - - , A.MSG_RESULT - from MJ_MSG_DATA A where diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp index 6e056f65..1e034a9f 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp @@ -236,24 +236,7 @@ function pageUnitChg(obj){ <%-- --%> - -
- - -


- - -


- - -


- - -


- - - <%-- @@ -267,7 +250,7 @@ function pageUnitChg(obj){

- --%> + diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp index 6da9a0a6..8cfd15eb 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp @@ -290,13 +290,13 @@ function fnReservCancel(msgGroupId){

-


+

-


+

-


+

From c80bf91d8576199f9f3d0d5cc10d960a0c98b355 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Wed, 6 Aug 2025 18:20:27 +0900 Subject: [PATCH 08/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=ED=86=A1=20=ED=99=98=EB=B6=88=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=84=B8=EC=8A=A4=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20=ED=99=98=EB=B6=88=EA=B3=BC=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9=20=EC=9E=91=EC=97=85=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kakaoAt/service/KakaoAlimTalkService.java | 3 + .../service/impl/KakaoAlimTalkDAO.java | 5 ++ .../impl/KakaoAlimTalkServiceImpl.java | 86 +++++++++++++------ .../web/KakaoAlimTalkSendController.java | 20 +++++ .../let/mjo/kakao/Kakao_AT_SQL_Mysql.xml | 43 +++++++++- 5 files changed, 130 insertions(+), 27 deletions(-) diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java index 098f9768..9f17fec3 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java @@ -31,4 +31,7 @@ public interface KakaoAlimTalkService { StatusResponse insertKakaoAtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception; + //카카오(알림톡, 친구톡 통합) 전송 실패 환불리스트 조회 + public void selectKakaoSentRefundList() throws Exception; + } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java index 46520d26..d75ea3dd 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java @@ -58,6 +58,11 @@ public class KakaoAlimTalkDAO extends EgovAbstractDAO { return (List) list("kakaoAlimTalkDAO.selectKakaoFtSentRefundList"); } + @SuppressWarnings("unchecked") + public List selectKakaoSentRefundList() throws Exception{ + return (List) list("kakaoAlimTalkDAO.selectKakaoSentRefundList"); + } + public KakaoVO selectKakaoAtUmid(KakaoVO kakaoVO) throws Exception{ return (KakaoVO) select("kakaoAlimTalkDAO.selectKakaoAtUmid", kakaoVO); } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java index 33ab5fd6..dd94d384 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java @@ -105,6 +105,8 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements final String RESEND_YN_YES = "Y"; final String SMS_SUCCESS_CODE = "4100"; // SMS 성공 코드 final String MMS_SUCCESS_CODE = "6600"; // MMS 성공 코드 + final String AT_MSG_TYPE = "8"; // MSG 타입 알림톡 + final String FT_MSG_TYPE = "9"; // MSG 타입 친구톡 //발신프로필 상태값 변경(삭제/복구 기능) @Override @@ -808,23 +810,19 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements */ List kakaoAtSentRefundList = kakaoAlimTalkDAO.selectKakaoAtSentRefundList(); - for(KakaoVO vo : kakaoAtSentRefundList) { - System.out.println(vo.getMsgGroupId() +"________결과 : " +vo.getRsltCode() +" 대체문자 전송 : "+vo.getSubMsgSendYn()); - if(vo.getRsltCode().equals("7000")) { - kakaoAlimTalkDAO.updateKakaoAtSend(vo); - }else if(vo.getSubMsgSendYn().equals("Y")) { - KakaoVO info = kakaoAlimTalkDAO.selectKakaoAtUmid(vo); + for(KakaoVO kakaoVO : kakaoAtSentRefundList) { + + if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {//알림톡 발송 성공시 - System.out.println("대체문자 전송 : " + info.getBizUmid()); - if (info.getBizUmid() != null) { - kakaoAlimTalkDAO.updateKakaoAtSubMsgSend(vo); - }else { - kakaoAlimTalkDAO.updateKakaoAtNotSend(vo); - } + processKakaoSendCharge(kakaoVO); + }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) { + //알림톡 발송 실패 했고 , 대체문자 발송 했을 경우 + handleAlternativeMessageScenario(kakaoVO); }else { - kakaoAlimTalkDAO.updateKakaoAtNotSend(vo); + handleRefund(kakaoVO, "카카오 알림톡 전송 실패로 인한 결재 금액 환불"); } + } } @@ -842,7 +840,32 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {//친구톡 발송 성공시 - processFtSendCharge(kakaoVO); + processKakaoSendCharge(kakaoVO); + + }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) { + //친구톡 발송 실패 했고, 대체문자 발송 했을 경우 + handleAlternativeMessageScenario(kakaoVO); + + }else { + handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불"); + } + } + } + + /** + * @ 카카오 알림톡, 친구톡 통합 환불 + */ + @Override + public void selectKakaoSentRefundList() throws Exception { + + List kakaoFtSentRefundList = kakaoAlimTalkDAO.selectKakaoSentRefundList(); + + for(KakaoVO kakaoVO : kakaoFtSentRefundList) { + System.out.println(kakaoVO.getMsgGroupId() +"________결과 : " +kakaoVO.getRsltCode() +" 대체문자 전송 : "+kakaoVO.getSubMsgSendYn()); + + if(KAKAO_SUCCESS_CODE.equals(kakaoVO.getRsltCode())) {//친구톡 발송 성공시 + + processKakaoSendCharge(kakaoVO); }else if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) { //친구톡 발송 실패 했고, 대체문자 발송 했을 경우 @@ -855,7 +878,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements } - private void processFtSendCharge(KakaoVO kakaoVO) throws Exception { + private void processKakaoSendCharge(KakaoVO kakaoVO) throws Exception { if(RESEND_YN_YES.equals(kakaoVO.getSubMsgSendYn())) { @@ -863,14 +886,21 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements BizKakaoPriceVO bizKakaoPriceVO = mjonPayDAO.selectBizKakaoPrice(kakaoVO.getMsgGroupId()); BigDecimal sendPrice = null; - if(StringUtils.isEmpty(kakaoVO.getBizKakaoImageType())){ - sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtPrice()); - }else if("I".equals(kakaoVO.getBizKakaoImageType())){ - sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtImgPrice()); - }else if("W".equals(kakaoVO.getBizKakaoImageType())){ - sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtWideImgPrice()); + String kakaoType = ""; + + if(AT_MSG_TYPE.equals(kakaoVO.getMsgType())){ + sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoAtPrice()); + kakaoType = "알림톡"; + }else { + if(StringUtils.isEmpty(kakaoVO.getBizKakaoImageType())){ + sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtPrice()); + }else if("I".equals(kakaoVO.getBizKakaoImageType())){ + sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtImgPrice()); + }else if("W".equals(kakaoVO.getBizKakaoImageType())){ + sendPrice = new BigDecimal(bizKakaoPriceVO.getBizKakaoFtWideImgPrice()); + } + kakaoType = "친구톡"; } - // 예시: 각 건당 가격이 이미 String 형태라면 변환 BigDecimal eachPrice = new BigDecimal(kakaoVO.getEachPrice()); @@ -881,8 +911,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements if (diffPrice.compareTo(BigDecimal.ZERO) > 0) { String result = diffPrice.toString(); kakaoVO.setEachPrice(result); - - handleRefund(kakaoVO, "카카오 친구톡 전송으로 인한 결재 차액 환불"); + handleRefund(kakaoVO, "카카오 " + kakaoType + " 전송으로 인한 결재 차액 환불"); } }else { @@ -897,6 +926,13 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements KakaoVO bizLogVO = kakaoAlimTalkDAO.selectBizLog(kakaoVO.getBizUmid()); log.info("대체문자 전송 UMID: {}", kakaoVO.getBizUmid()); + // 알림톡 or 친구톡 구분 + String kakaoType = ""; + if(AT_MSG_TYPE.equals(kakaoVO.getMsgType())){ + kakaoType = "알림톡"; + }else { + kakaoType = "친구톡"; + } // 대체문자가 성공적으로 발송되었는지 확인 (SMS 또는 MMS 성공) boolean isAlternativeMessageSuccessful = false; if (bizLogVO != null && StringUtils.isNotEmpty(bizLogVO.getBizLogCallStatus())) { @@ -914,7 +950,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements mjonMsgDAO.updateRefundY(kakaoVO); } else { // 대체문자 발송 실패 된 경우 (친구톡 비용 환불 필요) - handleRefund(kakaoVO, "카카오 친구톡 전송 실패로 인한 결재 금액 환불"); + handleRefund(kakaoVO, "카카오 " + kakaoType + " 전송 실패로 인한 결재 금액 환불"); } } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java index cf1641b3..ed102a73 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java @@ -1540,4 +1540,24 @@ public class KakaoAlimTalkSendController { return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp"; } + + /** + * @Method Name : kakaoMsgSendRefundTestAjax + * @작성일 : 2025. 8. 6. + * @작성자 : 이지우 + * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 + */ + @RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaoMsgSendRefundTestAjax.do"}) + public ModelAndView kakaoMsgSendRefundTestAjax(ModelMap model + , HttpServletRequest request + , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { + + ModelAndView modelAndView = new ModelAndView(); + modelAndView.setViewName("jsonView"); + + kakaoAlimTalkService.selectKakaoSentRefundList(); + + modelAndView.addObject("result", "success"); + return modelAndView; + } } diff --git a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml index 0864e4f6..7aa178ef 100644 --- a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml @@ -205,11 +205,13 @@ ) - SELECT MMD.USER_ID AS userId , MMD.MSG_GROUP_ID AS msgGroupId , MMD.MSG_SEQ AS msgSeq + , MMGD.BIZ_KAKAO_IMAGE_TYPE AS bizKakaoImageType + , MMGD.EACH_PRICE AS eachPrice , MMD.USERDATA AS userData , MMD.REFUND_YN AS refundYn , MMD.RSLT_CODE AS rsltCode @@ -219,11 +221,47 @@ , DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T') AS rsltDate , MMD.BIZ_KAKAO_RESEND_YN AS subMsgSendYn , MMD.BIZ_KAKAO_RESEND_TYPE AS subMsgType - + , MMD.FILE_CNT AS fileCnt + , MMD.BIZ_UMID AS bizUmid + , MMD.MSG_TYPE AS msgType FROM MJ_MSG_DATA MMD INNER JOIN LETTNGNRLMBER MB ON MMD.USER_ID = MB.MBER_ID + INNER JOIN mj_msg_group_data MMGD + on MMD.MSG_GROUP_ID = MMGD.MSG_GROUP_ID + WHERE 1=1 + AND MMD.CUR_STATE = '3' + AND MMD.REFUND_YN = 'N' + AND MMD.RESERVE_C_YN = 'N' + AND MMD.MSG_TYPE IN(8, 9) + + + - - - - --%>
- 발송일시 : + 발송일시 : SMS From 25ed816a970e34e454f83c3ad83c14a72def91b5 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Wed, 20 Aug 2025 15:00:13 +0900 Subject: [PATCH 26/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20>=20=EA=B2=B0=EC=A0=9C=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20>=20=EC=9A=94=EA=B8=88=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EB=82=B4=EC=97=AD=20>=20=EC=B9=9C=EA=B5=AC=ED=86=A1=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=ED=8C=9D=EC=97=85=20>=20=EB=8C=80?= =?UTF-8?q?=EC=B2=B4=EB=AC=B8=EC=9E=90=EC=97=90=20=EC=B2=A8=EB=B6=80?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/sent/web/KakaoSentController.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java index f797391b..1f34dd46 100644 --- a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java +++ b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java @@ -272,6 +272,25 @@ public class KakaoSentController { model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); + if(StringUtils.isNotEmpty( mjonKakaoATResultVO.getFilePath1() )) { + List 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 { model.addAttribute("kakaoTemplateInfo", ""); From 715cec51a516311f3573d9759c3e57beefec5828 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Thu, 21 Aug 2025 17:01:21 +0900 Subject: [PATCH 27/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=B9=9C=EA=B5=AC=ED=86=A1=20?= =?UTF-8?q?=EC=86=8C=EA=B0=9C=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stepInfo/web/KakaoStepInfoController.java | 23 + .../WEB-INF/jsp/web/com/webCommonHeader.jsp | 3 +- .../kakao/include/KaKaoAlimtalkTopMenuTap.jsp | 6 +- .../web/kakao/intrd/KakaoAllimtalkIntro.jsp | 721 +++++++++++------- .../jsp/web/kakao/intrd/KakaotalkIntro.jsp | 509 +++++++++++++ 5 files changed, 1003 insertions(+), 259 deletions(-) create mode 100644 src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp diff --git a/src/main/java/itn/let/kakao/user/stepInfo/web/KakaoStepInfoController.java b/src/main/java/itn/let/kakao/user/stepInfo/web/KakaoStepInfoController.java index 50d04c07..0aebc4a1 100644 --- a/src/main/java/itn/let/kakao/user/stepInfo/web/KakaoStepInfoController.java +++ b/src/main/java/itn/let/kakao/user/stepInfo/web/KakaoStepInfoController.java @@ -188,6 +188,29 @@ public class KakaoStepInfoController { 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 방지 처리. diff --git a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp index 06081feb..2c837113 100644 --- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp @@ -1559,7 +1559,8 @@ function actionLogin_end(){
  • 알림톡
  • 친구톡
  • 카카오톡 설정
  • -
  • 알림톡 소개
  • + <%--
  • 알림톡 소개
  • --%> +
  • 카카오톡 소개
  • diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp index 4865b15b..442ed9da 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp @@ -60,9 +60,9 @@ function fnLinkPageTopTab(tabInfo){ url = ""; - }else if(tabInfo == 'tabAlimtalkIntrd'){ + }else if(tabInfo == 'tabKakaotalkIntrd'){ - url = ""; + url = ""; } @@ -144,5 +144,5 @@ function cntntBtnInfo(stepInfo){
  • -
  • +
  • \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaoAllimtalkIntro.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaoAllimtalkIntro.jsp index 2934827b..59d75ec2 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaoAllimtalkIntro.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaoAllimtalkIntro.jsp @@ -17,281 +17,492 @@ <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> -
    + + +
    -

    알림톡 소개

    +

    카카오톡 소개

    -
    -
    -

    알림톡이란?

    -
    - -
    -
    -
    -
    - -
    - -
    - 핸드폰 -
      -
    • - 카카오톡 전용 기업 메시지 서비스  “알림톡” -
    • -
    • -

      1

      -

      1,000자 이내 텍스트 및 이미지 전송 가능

      -
    • -
    • -

      2

      -

      문자 메시지 대비 65% 이상 저렴

      -
    • -
    • -

      3

      -

      - 카톡 채널아이디를 추가하지 않은 이용자에게도 -
      전화번호만 있으면 메시지 전송 가능 -

      -
    • -
    • -

      4

      -

      발송실패 시 자동으로 문자 대체 발송

      -
    • -
    • -

      5

      -

      카카오 인증마크를 통해 신뢰도 높은 메시지 발송

      -
    • -
    • -

      6

      -

      발신자 브랜드의 이미지 및 신뢰도 상승 효과 달성

      -
    • -
    -
    - - -
    -
    -
    -

    문자 VS 알림톡

    -
    -
    -
    -
    -
    -

    문자

    -
    - 문자 -

    18원

    -
    -
    -

    VS

    -
    -

    알림톡

    -
    - 카카오 -

    6.9원

    -
    -
    -
    -

    문자 대비 65% 저렴

    -
    -
    -
    -
    -
    -

    문자

    -
    - 문자 -

    90Byte

    -
    -
    -

    VS

    -
    -

    알림톡

    -
    - 카카오 -

    1,000글자

    -
    -
    -
    -

    바이트(byte)에 관계없이 무조건 1,000자(한/영) 발송

    -
    -
    -
    -
    -
    -
    - - -
    -
    -

    알림톡 활용 방법

    -
    -
    -
    -
    -
    -
    -
      - - - - - - -
    -
    - 금융,보험 -
    -
    - 기관,단체 -
    -
    - 여행 -
    -
    - 예약,예약 -
    -
    - 배송,배달 -
    -
    - 안내,이벤트 -
    -
    -
    +
      +
    • +
    • +
    - -
    -
    -

    서비스 이용 방법

    -
    -
    -
    -
    -
    -
    -
    -
    -

    STEP 01

    -
    -
    - -
    -
    -

    - 카카오톡 채널을 먼저 가입해주신 다음
    - 비즈니스 채널 전환 신청을 해주세요. -

    -

    - ※ 가입 후 카카오톡 채널 설정에서
    - 공개, 검색허용 설정을 하셔야 합니다. -

    -
    -
    - 카카오톡 채널 가입하러 가기 아이콘 -
    -
    + +
    +
    +
    +

    알림톡이란?

    -
    -
    -

    STEP 02

    + +
    +
    +
    +
    + +
    + +
    + 핸드폰 +
      +
    • + 카카오톡 전용 기업 메시지 서비스  “알림톡” +
    • +
    • +

      1

      +

      1,000자 이내 텍스트 및 이미지 전송 가능

      +
    • +
    • +

      2

      +

      문자 메시지 대비 65% 이상 저렴

      +
    • +
    • +

      3

      +

      + 카톡 채널아이디를 추가하지 않은 이용자에게도 +
      전화번호만 있으면 메시지 전송 가능 +

      +
    • +
    • +

      4

      +

      발송실패 시 자동으로 문자 대체 발송

      +
    • +
    • +

      5

      +

      카카오 인증마크를 통해 신뢰도 높은 메시지 발송

      +
    • +
    • +

      6

      +

      발신자 브랜드의 이미지 및 신뢰도 상승 효과 달성

      +
    • +
    -
    -
    -<%-- 채널 ID 등록하러 가기화살표 --%> - 채널 ID 등록하러 가기화살표 + + +
    +
    +
    +

    문자 VS 알림톡

    +
    -
    -
    -

    - 가입하신 카카오톡 채널의 채널ID(채널이름)를
    - 채널ID 등록 메뉴에 등록해주세요. -

    -
    -
    - 채널 ID 등록하러 가기 아이콘 +
    +
    +
    +

    문자

    +
    + 문자 +

    18원

    +
    +
    +

    VS

    +
    +

    알림톡

    +
    + 카카오 +

    6.9원

    +
    +
    +
    +

    문자 대비 65% 저렴

    +
    +
    +
    +
    +
    +

    문자

    +
    + 문자 +

    90Byte

    +
    +
    +

    VS

    +
    +

    알림톡

    +
    + 카카오 +

    1,000글자

    +
    +
    +
    +

    바이트(byte)에 관계없이 무조건 1,000자(한/영) 발송

    +
    +
    -
    -
    -
    -

    STEP 03

    -
    -
    - -
    -
    -

    - 알림톡 발송을 위해서는 사용하실 템플릿(메시지 내용)에 - 대한 카카오의 승인이 반드시 필요합니다. - 템플릿을 작성하신 후 심사요청을 진행해주세요. -

    -

    - ※ 템플릿 승인까지 최대 3일 소요 -

    -
    -
    - 알림톡 템플릿 등록하러 가기 아이콘 -
    -
    + + +
    +
    +

    알림톡 활용 방법

    -
    -
    -

    STEP 04

    +
    +
    +
    +
    +
    +
      + + + + + + +
    +
    + 금융,보험
    -
    - -
    -
    -

    - 템플릿이 승인되셨다면 문자온 알림톡을
    - 통해 메시지를 발송하실 수 있습니다. -

    -
    -
    - 알림톡 전송하기 아이콘 -
    +
    + 기관,단체 +
    +
    + 여행 +
    +
    + 예약,예약 +
    +
    + 배송,배달 +
    +
    + 안내,이벤트
    - -
    - 알림톡 이용가이드 보기 알림톡 이용가이드 화살표 + + +
    +
    +

    서비스 이용 방법

    +
    +
    +
    +
    +
    +
    +
    +
    +

    STEP 01

    +
    +
    + +
    +
    +

    + 카카오톡 채널을 먼저 가입해주신 다음
    + 비즈니스 채널 전환 신청을 해주세요. +

    +

    + ※ 가입 후 카카오톡 채널 설정에서
    + 공개, 검색허용 설정을 하셔야 합니다. +

    +
    +
    + 카카오톡 채널 가입하러 가기 아이콘 +
    +
    +
    +
    +
    +

    STEP 02

    +
    +
    + +
    +
    +

    + 가입하신 카카오톡 채널의 채널ID(채널이름)를
    + 채널ID 등록 메뉴에 등록해주세요. +

    +
    +
    + 채널 ID 등록하러 가기 아이콘 +
    +
    +
    +
    +
    +
    +
    +

    STEP 03

    +
    +
    + +
    +
    +

    + 알림톡 발송을 위해서는 사용하실 템플릿(메시지 내용)에 + 대한 카카오의 승인이 반드시 필요합니다. + 템플릿을 작성하신 후 심사요청을 진행해주세요. +

    +

    + ※ 템플릿 승인까지 최대 3일 소요 +

    +
    +
    + 알림톡 템플릿 등록하러 가기 아이콘 +
    +
    +
    +
    +
    +

    STEP 04

    +
    +
    + +
    +
    +

    + 템플릿이 승인되셨다면 문자온 알림톡을
    + 통해 메시지를 발송하실 수 있습니다. +

    +
    +
    + 알림톡 전송하기 아이콘 +
    +
    +
    +
    + + +
    + + +
    +
    +

    + + 유의사항 아이콘 + 유의사항 +

    +
    +
      +
    • - 한글, 영문 구분 없이 최대 1,000자까지 전송 가능합니다.
    • +
    • - 알림톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.
    • +
    • - 알림톡에서 허용하는 영리목적이 없는 정보성 메시지에 해당하는지 여부는 스팸 관련 정보통신망법 안내서를 꼭 참고하시길 바랍니다.
    • +
    • (주문/예약 확인, 결제 내역, 배송 현황 메시지 등이 이에 해당하며 구독자 대상의 뉴스레터나 일반적인 공지문은 포함되지 않습니다.)
    • +
    • + 스팸 관련 정보통신망법 안내서 바로가기 +
    • +
    • - 부고, 답례, 초대장 등은 정보성 메시지가 아니므로 알림톡으로 보내실 수 없습니다.
    • +
    - - -
    -
    -

    - - 유의사항 아이콘 - 유의사항 -

    + + + +
    +
    +
    +

    친구톡이란?

    +
    + +
    +
    +
    +
    + +
    + +
    + 핸드폰 + +
      +
    • + 카카오톡 전용 기업 메시지 서비스  “알림톡” +
    • +
    • +

      1

      +

      광고성 메시지 발송 가능(광고 표기 및 수신거부 안내 포함)

      +
    • +
    • +

      2

      +

      채널 친구 추가된 사용자라면 누구에게나 발송 가능

      +
    • +
    • +

      3

      +

      1,000자 이내 텍스트 및 이미지 전송 가능

      +
    • +
    • +

      4

      +

      맞춤형 메시지 및 쿠폰, 링크 버튼 제공 가능

      +
    • +
    • +

      5

      +

      문자 메시지 대비 O % 이상 저렴

      +
    • +
    • +

      6

      +

      발송실패 시 대체문자 발송 기능 지원

      +
    • +
    • +

      7

      +

      클릭률/도달률 분석을 통한 마케팅 효율 강화

      +
    • +
    • +

      8

      +

      브랜드 친화적인 이미지 커스터마이징 가능

      +
    • +
    +
    + + +
    +
    +
    +

    알림톡 VS 친구톡

    +
    +
    + +
    +
    +
    알림톡
    +
    +
      +
    • 전화번호 보유자
    • +
    • 정보성 (예 : 주문, 예약, 안내 등)
    • +
    • 텍스트, 이미지 등
    • +
    • 최대 5개
    • +
    • 사전 승인 필요
    • +
    • 6.9원
    • +
    • 1,000자
    • +
    • 로고, 아이콘 형식만 가능
    • +
    +
    +
    + +
    +
    VS
    +
      +
    • 전송대상
    • +
    • 발송목적
    • +
    • 메세지 형태
    • +
    • 버튼 사용
    • +
    • 템플릿 승인
    • +
    • 비용
    • +
    • 길이제한
    • +
    • 이미지
    • +
    +
    + +
    +
    친구톡
    +
    +
      +
    • 채널 친구
    • +
    • 광고 및 마케팅성(예 : 이벤트, 쿠폰 등)
    • +
    • 텍스트, 기본이미지, 와이드 이미지형 등
    • +
    • 최대 5개
    • +
    • 별도 승인 없음 야간 발송 제한(20:50 ~ 익일 08:00)
    • +
    • 0.0원 ~ 0.0원
    • +
    • 1,000자
    • +
    • 가능
    • +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +

    친구톡 유형

    +
    + +
    +
    +
    +
    + +
      +
    • +
      텍스트형
      + +

      한/영 구분없이 1,000자 + 버튼 최대 5개

      +
    • +
    • +
      기본 이미지형
      + +

      한/영 구분없이 400자 + 이미지 1장 + 버튼 최대 5개

      +
    • +
    • +
      와이드 이미지형
      + +

      한/영 구분없이 76자 + 이미지 1장 + 버튼 최대 1개

      +
    • +
    +
    + + +
    +
    +

    서비스 이용 방법

    +
    + +
    +
    +
    +
    + +
      +
    • +
      STEP 01
      + +

      카카오톡 채널 가입

      + 카카오톡 채널 생성을 위한
      계정이 없으시다면, 카카오에서
      카카오톡 비즈니스 회원가입을
      먼저 진행해주세요.
      +
    • +
    • +
      STEP 02
      + +

      채널 ID 등록하러 가기

      + 가입하신 카카오톡 채널의 채널 ID(채널이름)를 채널 ID 등록 메뉴에 등록해주세요. +
    • +
    • +
      STEP 03
      + +

      친구톡 전송

      + 친구톡은 별도의 템플릿 심사 절차 없이, 즉시 발송 가능합니다. +
    • +
    + + + +
    + + +
    +
    +

    유의사항 아이콘유의사항

    +
    +
      +
    • - (광고) 표기 여부는 선택 가능하나 , (광고)표기 해제에 따른 법령상 의무사항을 미 준수시에는 메시지 발송이 중단될 수 있습니다.
    • +
    • - 광고성 친구톡 메시지에는 “(광고) 표시 및 수신거부 방식”이 표시되며, 대체 문자의 경우에는 “(광고) 문구 및 080 무료수신거부 번호”가 자동으로 포함됩니다.
    • +
    • - 광고성 메시지의 발송 가능 시간은 08:00 ~ 20:50(한국시간) 입니다.
    • +
    • - 친구톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.
    • +
    • - 카카오정책 및 심의기준을 반드시 준수하여야 합니다.
    • +
    -
      -
    • - 한글, 영문 구분 없이 최대 1,000자까지 전송 가능합니다.
    • -
    • - 알림톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.
    • -
    • - 알림톡에서 허용하는 영리목적이 없는 정보성 메시지에 해당하는지 여부는 스팸 관련 정보통신망법 안내서를 꼭 참고하시길 바랍니다.
    • -
    • (주문/예약 확인, 결제 내역, 배송 현황 메시지 등이 이에 해당하며 구독자 대상의 뉴스레터나 일반적인 공지문은 포함되지 않습니다.)
    • -
    • - 스팸 관련 정보통신망법 안내서 바로가기 -
    • -
    • - 부고, 답례, 초대장 등은 정보성 메시지가 아니므로 알림톡으로 보내실 수 없습니다.
    • -
    + +
    diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp new file mode 100644 index 00000000..6af5ca15 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp @@ -0,0 +1,509 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> +<%@ page import="itn.com.cmm.LoginVO" %> + + +
    + +
    + +
    + +
    + + <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> + + + + +
    +
    +

    카카오톡 소개

    +
    + +
      +
    • +
    • +
    + + +
    +
    +
    +

    알림톡이란?

    +
    + +
    +
    +
    +
    + +
    + +
    + 핸드폰 +
      +
    • + 카카오톡 전용 기업 메시지 서비스  “알림톡” +
    • +
    • +

      1

      +

      1,000자 이내 텍스트 및 이미지 전송 가능

      +
    • +
    • +

      2

      +

      문자 메시지 대비 65% 이상 저렴

      +
    • +
    • +

      3

      +

      + 카톡 채널아이디를 추가하지 않은 이용자에게도 +
      전화번호만 있으면 메시지 전송 가능 +

      +
    • +
    • +

      4

      +

      발송실패 시 자동으로 문자 대체 발송

      +
    • +
    • +

      5

      +

      카카오 인증마크를 통해 신뢰도 높은 메시지 발송

      +
    • +
    • +

      6

      +

      발신자 브랜드의 이미지 및 신뢰도 상승 효과 달성

      +
    • +
    +
    + + +
    +
    +
    +

    문자 VS 알림톡

    +
    +
    +
    +
    +
    +

    문자

    +
    + 문자 +

    18원

    +
    +
    +

    VS

    +
    +

    알림톡

    +
    + 카카오 +

    6.9원

    +
    +
    +
    +

    문자 대비 65% 저렴

    +
    +
    +
    +
    +
    +

    문자

    +
    + 문자 +

    90Byte

    +
    +
    +

    VS

    +
    +

    알림톡

    +
    + 카카오 +

    1,000글자

    +
    +
    +
    +

    바이트(byte)에 관계없이 무조건 1,000자(한/영) 발송

    +
    +
    +
    +
    +
    +
    + + +
    +
    +

    알림톡 활용 방법

    +
    +
    +
    +
    +
    +
    +
      + + + + + + +
    +
    + 금융,보험 +
    +
    + 기관,단체 +
    +
    + 여행 +
    +
    + 예약,예약 +
    +
    + 배송,배달 +
    +
    + 안내,이벤트 +
    +
    +
    + + +
    +
    +

    서비스 이용 방법

    +
    +
    +
    +
    +
    +
    +
    +
    +

    STEP 01

    +
    +
    + +
    +
    +

    + 카카오톡 채널을 먼저 가입해주신 다음
    + 비즈니스 채널 전환 신청을 해주세요. +

    +

    + ※ 가입 후 카카오톡 채널 설정에서
    + 공개, 검색허용 설정을 하셔야 합니다. +

    +
    +
    + 카카오톡 채널 가입하러 가기 아이콘 +
    +
    +
    +
    +
    +

    STEP 02

    +
    +
    + +
    +
    +

    + 가입하신 카카오톡 채널의 채널ID(채널이름)를
    + 채널ID 등록 메뉴에 등록해주세요. +

    +
    +
    + 채널 ID 등록하러 가기 아이콘 +
    +
    +
    +
    +
    +
    +
    +

    STEP 03

    +
    +
    + +
    +
    +

    + 알림톡 발송을 위해서는 사용하실 템플릿(메시지 내용)에 + 대한 카카오의 승인이 반드시 필요합니다. + 템플릿을 작성하신 후 심사요청을 진행해주세요. +

    +

    + ※ 템플릿 승인까지 최대 3일 소요 +

    +
    +
    + 알림톡 템플릿 등록하러 가기 아이콘 +
    +
    +
    +
    +
    +

    STEP 04

    +
    +
    + +
    +
    +

    + 템플릿이 승인되셨다면 문자온 알림톡을
    + 통해 메시지를 발송하실 수 있습니다. +

    +
    +
    + 알림톡 전송하기 아이콘 +
    +
    +
    +
    + + +
    + + +
    +
    +

    + + 유의사항 아이콘 + 유의사항 +

    +
    +
      +
    • - 한글, 영문 구분 없이 최대 1,000자까지 전송 가능합니다.
    • +
    • - 알림톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.
    • +
    • - 알림톡에서 허용하는 영리목적이 없는 정보성 메시지에 해당하는지 여부는 스팸 관련 정보통신망법 안내서를 꼭 참고하시길 바랍니다.
    • +
    • (주문/예약 확인, 결제 내역, 배송 현황 메시지 등이 이에 해당하며 구독자 대상의 뉴스레터나 일반적인 공지문은 포함되지 않습니다.)
    • +
    • + 스팸 관련 정보통신망법 안내서 바로가기 +
    • +
    • - 부고, 답례, 초대장 등은 정보성 메시지가 아니므로 알림톡으로 보내실 수 없습니다.
    • +
    +
    +
    + + + +
    +
    +
    +

    친구톡이란?

    +
    + +
    +
    +
    +
    + +
    + +
    + 핸드폰 + +
      +
    • + 카카오톡 전용 기업 메시지 서비스  “알림톡” +
    • +
    • +

      1

      +

      광고성 메시지 발송 가능(광고 표기 및 수신거부 안내 포함)

      +
    • +
    • +

      2

      +

      채널 친구 추가된 사용자라면 누구에게나 발송 가능

      +
    • +
    • +

      3

      +

      1,000자 이내 텍스트 및 이미지 전송 가능

      +
    • +
    • +

      4

      +

      맞춤형 메시지 및 쿠폰, 링크 버튼 제공 가능

      +
    • +
    • +

      5

      +

      문자 메시지 대비 저렴한 단가

      +
    • +
    • +

      6

      +

      발송실패 시 대체문자 발송 기능 지원

      +
    • +
    • +

      7

      +

      클릭률/도달률 분석을 통한 마케팅 효율 강화

      +
    • +
    • +

      8

      +

      브랜드 친화적인 이미지 커스터마이징 가능

      +
    • +
    +
    + + +
    +
    +
    +

    알림톡 VS 친구톡

    +
    +
    + +
    +
    +
    알림톡
    +
    +
      +
    • 전화번호 보유자
    • +
    • 정보성 (예 : 주문, 예약, 안내 등)
    • +
    • 텍스트, 이미지 등
    • +
    • 최대 5개
    • +
    • 사전 승인 필요
    • +
    • 6.9원
    • +
    • 1,000자
    • +
    • 로고, 아이콘 형식만 가능
    • +
    +
    +
    + +
    +
    VS
    +
      +
    • 전송대상
    • +
    • 발송목적
    • +
    • 메세지 형태
    • +
    • 버튼 사용
    • +
    • 템플릿 승인
    • +
    • 비용
    • +
    • 길이제한
    • +
    • 이미지
    • +
    +
    + +
    +
    친구톡
    +
    +
      +
    • 채널 친구
    • +
    • 광고 및 마케팅성(예 : 이벤트, 쿠폰 등)
    • +
    • 텍스트, 기본이미지, 와이드 이미지형 등
    • +
    • 최대 5개
    • +
    • 별도 승인 없음 야간 발송 제한(20:50 ~ 익일 08:00)
    • +
    • 13.8원 ~ 22.9원
    • +
    • 1,000자
    • +
    • 가능
    • +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +

    친구톡 유형

    +
    + +
    +
    +
    +
    + +
      +
    • +
      텍스트형
      + +

      한/영 구분없이 1,000자 + 버튼 최대 5개

      +
    • +
    • +
      기본 이미지형
      + +

      한/영 구분없이 400자 + 이미지 1장 + 버튼 최대 5개

      +
    • +
    • +
      와이드 이미지형
      + +

      한/영 구분없이 76자 + 이미지 1장 + 버튼 최대 1개

      +
    • +
    +
    + + +
    +
    +

    서비스 이용 방법

    +
    + +
    +
    +
    +
    + +
      +
    • +
      STEP 01
      + +

      카카오톡 채널 가입

      + 카카오톡 채널 생성을 위한
      계정이 없으시다면, 카카오에서
      카카오톡 비즈니스 회원가입을
      먼저 진행해주세요.
      +
    • +
    • +
      STEP 02
      + +

      채널 ID 등록하러 가기

      + 가입하신 카카오톡 채널의 채널 ID(채널이름)를 채널 ID 등록 메뉴에 등록해주세요. +
    • +
    • +
      STEP 03
      + +

      친구톡 전송

      + 친구톡은 별도의 템플릿 심사 절차 없이, 즉시 발송 가능합니다. +
    • +
    + + + +
    + + +
    +
    +

    유의사항 아이콘유의사항

    +
    +
      +
    • - (광고) 표기 여부는 선택 가능하나 , (광고)표기 해제에 따른 법령상 의무사항을 미 준수시에는 메시지 발송이 중단될 수 있습니다.
    • +
    • - 광고성 친구톡 메시지에는 “(광고) 표시 및 수신거부 방식”이 표시되며, 대체 문자의 경우에는 “(광고) 문구 및 080 무료수신거부 번호”가 자동으로 포함됩니다.
    • +
    • - 광고성 메시지의 발송 가능 시간은 08:00 ~ 20:50(한국시간) 입니다.
    • +
    • - 친구톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.
    • +
    • - 카카오정책 및 심의기준을 반드시 준수하여야 합니다.
    • +
    +
    +
    + + +
    +
    +
    + \ No newline at end of file From 317271f2469d83bcf99e96be36796e7ca52531e0 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Thu, 21 Aug 2025 17:32:02 +0900 Subject: [PATCH 28/36] =?UTF-8?q?=EA=B8=B0=EC=97=85/=EA=B0=9C=EC=9D=B8?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=EB=AA=A8=EB=91=90=20=EC=8A=A4=EB=AF=B8?= =?UTF-8?q?=EC=8B=B1=20=EC=9D=98=EC=8B=AC=ED=9A=8C=EC=9B=90=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schdlr/service/impl/SchdlrManageServiceImpl.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java index aa1757ad..b8e63d43 100644 --- a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java +++ b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java @@ -393,12 +393,12 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements // 대상 : 휴대폰결제, 즉시이체, 전용계좌 // Step 1. 스미싱의심 지정 여부 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); +// JoinSettingVO joinSettingVO = new JoinSettingVO(); + JoinSettingVO joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) { // Step 1. 개인회원 여부 체크 - int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); - if (isPersnalMemberCnt == 1) { +// int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); +// if (isPersnalMemberCnt == 1) { // Step 2. 첫결제 여부 체크 int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid); if (isFirstPayCnt == 1) { @@ -421,7 +421,7 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements userManageVO.setMberId(Userid); userManageService.updateOneUserSmishingYnNotAlert(userManageVO); } - } +// } } } catch (Exception e) { From 9b5d833ca5b16c84d19270e3c2eb5b91979ea457 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Thu, 21 Aug 2025 17:32:15 +0900 Subject: [PATCH 29/36] =?UTF-8?q?ignore=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5512880c..f1e66539 100644 --- a/.gitignore +++ b/.gitignore @@ -202,3 +202,4 @@ rebel.xml /mvnw /mvnw.cmd /.gemini.zip +/CLAUDE.md From 587f9593d9068b81ef4dbd15f94c3a126df453b7 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Thu, 21 Aug 2025 17:39:50 +0900 Subject: [PATCH 30/36] =?UTF-8?q?=EC=A0=84=EC=9A=A9=EA=B3=84=EC=A2=8C=20?= =?UTF-8?q?=EC=9E=85=EA=B8=88=20=EC=8B=9C=20=EA=B8=B0=EC=97=85/=EA=B0=9C?= =?UTF-8?q?=EC=9D=B8=20=EB=AA=A8=EB=91=90=20=EC=8A=A4=EB=AF=B8=EC=8B=B1=20?= =?UTF-8?q?=EC=9D=98=EC=8B=AC=20=EC=98=A8=20+=20at=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java | 1 + .../sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java index b8e63d43..5195a6c2 100644 --- a/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java +++ b/src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java @@ -418,6 +418,7 @@ public class SchdlrManageServiceImpl extends EgovAbstractServiceImpl implements // 스미싱 의심회원으로 변경 UserManageVO userManageVO = new UserManageVO(); userManageVO.setSmishingYn("Y"); + userManageVO.setAtSmishingYn("Y"); userManageVO.setMberId(Userid); userManageService.updateOneUserSmishingYnNotAlert(userManageVO); } diff --git a/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml index eb97a567..dab0e96e 100644 --- a/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/uss/umt/EgovUserManage_SQL_Mysql.xml @@ -1367,6 +1367,7 @@ LETTNGNRLMBER SET SMISHING_YN = #smishingYn# + , AT_SMISHING_YN = #atSmishingYn# WHERE 1=1 AND MBER_ID = #mberId# From 07d6d01de1ef56f3f8766021cdf572f49636cba8 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Thu, 21 Aug 2025 18:24:02 +0900 Subject: [PATCH 31/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20=EC=86=8C=EA=B0=9C=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EB=AC=B8=EA=B5=AC=20=EB=B3=BC=EB=93=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp index 6af5ca15..2b977212 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/intrd/KakaotalkIntro.jsp @@ -343,7 +343,7 @@
  • 5

    -

    문자 메시지 대비 저렴한 단가

    +

    문자 메시지 대비 저렴한 단가

  • 6

    From 3da88224f7d736c14333a1a825b47cfde98baf9f Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Fri, 22 Aug 2025 10:38:44 +0900 Subject: [PATCH 32/36] =?UTF-8?q?ignore=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .claude/.gitignore diff --git a/.claude/.gitignore b/.claude/.gitignore new file mode 100644 index 00000000..53ced0f0 --- /dev/null +++ b/.claude/.gitignore @@ -0,0 +1 @@ +/settings.local.json From 64e451db1bd9f5069f8f8b2e371e118cf83cc540 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Fri, 22 Aug 2025 15:46:58 +0900 Subject: [PATCH 33/36] =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20=EC=8A=A4?= =?UTF-8?q?=EB=AF=B8=EC=8B=B1=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/itn/com/cmm/util/MsgSendUtils.java | 8 +- .../let/kakao/kakaoComm/KakaoSendAdvcVO.java | 5 +- .../let/kakao/kakaoComm/KakaoSendUtil.java | 295 +++++++++++++++--- .../java/itn/let/kakao/kakaoComm/KakaoVO.java | 1 + .../impl/KakaoFriendsTalkServiceImpl.java | 20 +- .../itn/let/mjo/mjocommon/MjonCommon.java | 46 ++- 6 files changed, 312 insertions(+), 63 deletions(-) diff --git a/src/main/java/itn/com/cmm/util/MsgSendUtils.java b/src/main/java/itn/com/cmm/util/MsgSendUtils.java index 74ba0866..4f4b9ee9 100644 --- a/src/main/java/itn/com/cmm/util/MsgSendUtils.java +++ b/src/main/java/itn/com/cmm/util/MsgSendUtils.java @@ -229,8 +229,8 @@ public final class MsgSendUtils { placeholders.put("[*4*]", MjonMsgSendVO::getRep4); boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 - boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 - boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 + boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 메세지 타입 체크 한번 + boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, String msgKind = mjonMsgVO.getMsgKind(); String smsTxtTemp = mjonMsgVO.getSmsTxt(); @@ -257,10 +257,6 @@ public final class MsgSendUtils { for (Map.Entry> entry : placeholders.entrySet()) { String placeholder = entry.getKey(); 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 (StringUtils.isEmpty(value)) { statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다."); diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java index 791fb0b9..57c59184 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java @@ -66,13 +66,16 @@ public class KakaoSendAdvcVO implements Serializable { private String kakaoAtPrice; // 카카오 알림톡 단가 private String bizJsonName; // 카카오 알림톡 단가 private String reserveYn; // 카카오 알림톡 단가 - private String atDelayYn; // 카카오 알림톡 단가 + private String atDelayYn; // 지연 문자 발송 private String bizKakaoResendOrgnlTxt; // 카카오 알림톡 단가 private String bizKakaoResendType; // 카카오 알림톡 단가 private String filePath1; // 대체문자 이미지 private String fileCnt; // 파일 카운트 private String bizKakaoImageType; // 파일 카운트 + private String spamStatus; + + diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java index 1ba2fb3a..fc8c32d6 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java @@ -40,6 +40,7 @@ import itn.let.mjo.spammsg.web.ComGetSpamStringParser; import itn.let.module.base.PriceAndPoint; import itn.let.sym.site.service.JoinSettingVO; import itn.let.uss.umt.service.MberManageVO; +import itn.let.uss.umt.service.UserManageVO; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -297,21 +298,36 @@ public class KakaoSendUtil { * @description : * @return : List * @param kakaoVO - * @param isNotified + * @param isHolidayNotified * @param statusResponse * @return * @throws Exception * */ - public List populateSendListsFT(KakaoVO kakaoVO, boolean isNotified, StatusResponse statusResponse) throws Exception { + public List populateSendListsFT(KakaoVO kakaoVO + , boolean isHolidayNotified + , StatusResponse statusResponse + , UserManageVO userManageVO + , List resultSpamTxt + ) throws Exception { //사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액) // String befCash = kakaoVO.getBefCash(); log.info("kakaoVO.ftToString() :: [{}]", kakaoVO.ftToString()); + + // 예약 시간 기본값 설정 + Date now = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + + String smishingYn = userManageVO.getSmishingYn(); + String exceptSpamYn = userManageVO.getExceptSpamYn(); + + List kakaoSendAdvcListVO = new ArrayList<>(); - Calendar calendar = setupBaseDate(kakaoVO, isNotified); + Calendar calendar = setupBaseDateFT(kakaoVO); + // 친구톡 내용 @@ -375,18 +391,18 @@ public class KakaoSendUtil { float shortPrice = getValidPrice(mberManageVO.getShortPrice(), sysJoinSetVO.getShortPrice()); float longPrice = getValidPrice(mberManageVO.getLongPrice(), sysJoinSetVO.getLongPrice()); float picturePrice = getValidPrice(mberManageVO.getPicturePrice(), sysJoinSetVO.getPicturePrice()); -// String shortPStr = Float.toString(shortPrice); -// String mmsPStr = Float.toString(longPrice); -// String imgPrice = Float.toString(picturePrice); + + boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 + boolean hasPerformedSubSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어 + boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 메세지 타입 체크 한번 + boolean hasPerformedDelayYn = false; // 치환 문자가 없는 경우, + String imgFilePath = ""; if(StringUtils.isNotEmpty(kakaoVO.getAtchFileId()) && ("I".equals(imageType) || "W".equals(imageType))) { - - imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(kakaoVO.getAtchFileId()); - } @@ -395,7 +411,20 @@ public class KakaoSendUtil { boolean hasButtons = CollectionUtils.isNotEmpty(kakaoVO.getButtonVOList()); String sharedJsonStr = null; - + + // 치환데이터가 없는 경우 한 번만 계산하기 위한 캐시 변수 추가 + Map 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 mjonFTSendVOList = kakaoVO.getMjonFTSendVOList(); @@ -411,7 +440,9 @@ public class KakaoSendUtil { sendVO.setCallTo(mjonFTSendVO.getPhone()); sendVO.setMsgId(idList.get(i)); - String smsTxt = templateContent; + + // 친구톡 문자 + String templateContentTemp = templateContent; // 치환 문자면 if(replaceYN) { @@ -419,21 +450,19 @@ public class KakaoSendUtil { for (Map.Entry> entry : placeholders.entrySet()) { String placeholder = entry.getKey(); String value = entry.getValue().apply(mjonFTSendVO); - if (smsTxt.contains(placeholder)) { + if (templateContentTemp.contains(placeholder)) { if (StringUtils.isEmpty(value)) { statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다."); return null; } - smsTxt = smsTxt.replace(placeholder, value); + templateContentTemp = templateContentTemp.replace(placeholder, value); } } } - sendVO.setTemplateContent(smsTxt); - - + sendVO.setTemplateContent(templateContentTemp); + // 실패 대체 문자 String subMsgTxtTemp = null; - if(StringUtils.isNotEmpty(subMsgTxt)) { subMsgTxtTemp = subMsgTxt; @@ -459,34 +488,28 @@ public class KakaoSendUtil { // Step 1-4: 실패 대체 문자 치환데이터 설정 if(StringUtils.isNotEmpty(subMsgTxtTemp)) { // 대체문자가 있나? - String sendType = "MMS"; - if(StringUtils.isEmpty(imgFilePath)) { - int smsTxtByte = mjonCommon.getSmsTxtBytes(subMsgTxtTemp); // 문자 byte 수 계산 - sendType = getMsgType(smsTxtByte); // 문자 타입(SHORT / MMS) 판별 - } - sendVO.setSubMsgType(sendType); // 실패 대체 문자 타입 설정 + // 최적화된 계산 로직 + Map pricingResult; + + if (replaceSubYN) { + // 치환데이터 있음 → 매번 새로 계산 + pricingResult = calculateSubMsgPricing(subMsgTxtTemp, imgFilePath, + shortPrice, longPrice, picturePrice, kakaoFtPrice); - if ("INVALID".equals(sendType)) { - // INVALID 타입이면 길이 초과 에러 응답 후 리턴 - 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); + // INVALID 체크 + String resultSendType = (String) pricingResult.get("sendType"); + if ("INVALID".equals(resultSendType)) { + statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "전송 문자 길이를 초과하였습니다."); + return kakaoSendAdvcListVO; + } } else { - // SHORT 타입일 경우: shortPrice(단문 가격)와 카카오톡 단가 중 큰 값을 선택 - chosenPrice = Math.max(shortPrice, kakaoFtPrice); + // 치환데이터 없음 → 미리 계산된 결과 재사용 + pricingResult = sharedPricingResult; } - sendVO.setEachPrice(Float.toString(chosenPrice)); // 선택된 단가 설정 + + + // 결과 적용 + applyPricingResult(sendVO, pricingResult); }else { @@ -494,8 +517,68 @@ public class KakaoSendUtil { sendVO.setEachPrice( Float.toString(kakaoFtPrice) ); } + + // 스팸 단어 체크 + // exceptSpam는 사용자 스팸 단어 체크할건지에 대한 여부 Y : 체크 + 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(smishingYn) && isHolidayNotified) { + kakaoVO.setSpamStatus("Y"); + kakaoVO.setSmishingYn("Y"); + kakaoVO.setAtDelayYn("Y"); + } + + // 지연 여부 처리 + if (( "Y".equalsIgnoreCase(smishingYn) || "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 (StringUtils.isEmpty(sharedJsonStr)) { @@ -510,10 +593,114 @@ public class KakaoSendUtil { kakaoSendAdvcListVO.add(sendVO); log.info(" sendVO.toString() :: [{}]",sendVO.toString()); } - + return kakaoSendAdvcListVO; } + + private void checkSpamAndSetStatus(KakaoVO kakaoVO + , String chkText + , List 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)) { + 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 calculateSubMsgPricing(String subMsgTxt, String imgFilePath, + float shortPrice, float longPrice, + float picturePrice, float kakaoFtPrice) throws UnsupportedEncodingException { + Map 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 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 { @@ -543,9 +730,21 @@ public class KakaoSendUtil { } 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 추출 Date baseDate = resolveBaseDate(kakaoVO); @@ -557,7 +756,7 @@ public class KakaoSendUtil { // 지연 여부 처리 // 알림톡 스미싱의심 + 공휴일알림 조건이 맞으면 30분 delay if ( "Y".equalsIgnoreCase(kakaoVO.getAtSmishingYn()) - && isNotified) { + && isHolidayNotified) { calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸 } return calendar; @@ -1688,7 +1887,7 @@ public class KakaoSendUtil { Float totPrice = eachPrice * instCnt; sendVO.setTotPrice(String.format("%.1f", totPrice)); - sendVO.setAtDelayYn(kakaoVO.getAtSmishingYn()); + sendVO.setAtDelayYn(kakaoVO.getAtDelayYn()); sendVO.setBizKakaoResendOrgnlTxt(kakaoVO.getSubMsgTxt()); sendVO.setBizKakaoResendType(sendVO.getSubMsgType()); sendVO.setBizKakaoImageType(kakaoVO.getImageType()); diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java index f6802249..f59dc2dd 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java @@ -358,6 +358,7 @@ public class KakaoVO extends MjonMsgVO{ sb.append("\n , spamStatus=[").append(getSpamStatus()).append("]"); sb.append("\n , txtReplYn=[").append(getTxtReplYn()).append("]"); sb.append("\n , atSmishingYn=[").append(getAtSmishingYn()).append("]"); + sb.append("\n , atDelayYn=[").append(getAtDelayYn()).append("]"); // sb.append("\n , tmpBtnSelect=[").append(getTmpBtnSelect()).append("]"); StringBuilder btnListSb = new StringBuilder("["); if (buttonVOList != null && !buttonVOList.isEmpty()) { diff --git a/src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java b/src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java index 77378891..4dc8a012 100644 --- a/src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java @@ -29,8 +29,10 @@ import itn.let.mail.service.StatusResponse; import itn.let.mjo.mjocommon.MjonCommon; 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.module.base.PriceAndPoint; import itn.let.uss.umt.service.EgovUserManageService; +import itn.let.uss.umt.service.UserManageVO; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -56,6 +58,9 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem @Resource(name="kakaoAlimTalkDAO") private KakaoAlimTalkDAO kakaoAlimTalkDAO; + + @Resource(name = "MjonMsgDataService") + private MjonMsgDataService mjonMsgDataService; @Autowired KakaoSendUtil kakaoSendUtil; @@ -70,9 +75,9 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem public StatusResponse insertKakaoFtSandAjax_advc(KakaoVO kakaoVO, HttpServletRequest request) throws Exception { StatusResponse statusResponse = new StatusResponse(); - log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.toString()); +// log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.toString()); - log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString()); +// log.info(" + kakaoVO.toString() :: [{}]", kakaoVO.ftToString()); @@ -118,12 +123,17 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem /** @isHolidayNotified * @false : 알림 X * @true : 알림 O */ - boolean isNotified = mjonCommon.processUserAndCheckAT(kakaoVO); + boolean isHolidayNotified = mjonCommon.processUserAndCheckFT(kakaoVO); + + UserManageVO userManageVO = mjonCommon.getUserManageInfo(userId); + + // 스팸관련 키워드 select + List resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); /** @카카오톡 전송 list 셋팅 -------------------------------------------*/ - List kakaoSendAdvcListVO = kakaoSendUtil.populateSendListsFT(kakaoVO, isNotified, statusResponse); + List kakaoSendAdvcListVO = kakaoSendUtil.populateSendListsFT(kakaoVO, isHolidayNotified, statusResponse, userManageVO, resultSpamTxt); if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) { log.error(" + populateSendLists 처리 중 오류 발생: {}", statusResponse.getMessage()); return statusResponse; @@ -189,7 +199,7 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem /** @SLACK발송 */ /** @발송조건이되면 발송 */ - if(isNotified) { + if(isHolidayNotified && "Y".equals(userManageVO.getAtSmishingYn())) { mjonCommon.getAdminKakaoAtSendSlack(sendVO); }else if("Y".equals(kakaoVO.getAtSmishingYn())){ /** @발송조건이 안되면 DB INSERT */ diff --git a/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java b/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java index d1217838..e6792d0c 100644 --- a/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java +++ b/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java @@ -533,12 +533,12 @@ private int parseIntOrDefault(String value, int defaultValue) { UserManageVO userManageVO = getUserManageInfo(kakaoVO.getUserId()); // 기본값 처리된 사용자 정보와 문자 상태 - String adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); - String atSmishingYn = userManageVO.getAtSmishingYn(); + String adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); // 법인폰 알람 여부 - Y : ON + String atSmishingYn = userManageVO.getAtSmishingYn(); // 스미싱 의심 - Y : ON // 조건 체크 if ("Y".equals(adminSmsNoticeYn) || "Y".equals(atSmishingYn)) { - kakaoVO.setAtSmishingYn("Y"); // MjonMsgVO에 스미싱 정보 설정 + kakaoVO.setAtSmishingYn("Y"); // MjonMsgVO에 스미싱 정보 설정 - Y면 디 // 스미싱 알림 처리 return handleSmishingAlert(); // 알림 처리 결과 반환 @@ -546,6 +546,46 @@ private int parseIntOrDefault(String value, int defaultValue) { 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 { From fc04270a9ca3cbce07fde6f29e9599f4c624e230 Mon Sep 17 00:00:00 2001 From: JIWOO Date: Fri, 22 Aug 2025 16:54:32 +0900 Subject: [PATCH 34/36] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EB=B0=9C=EC=86=A1=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20>=20=EC=B9=B4=EC=B9=B4=EC=98=A4=ED=86=A1=20?= =?UTF-8?q?=EB=AF=B8=EB=A6=AC=EB=B3=B4=EA=B8=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/sent/web/KakaoSentController.java | 2 +- .../sqlmap/let/msg/MjonMsgData_SQL_mysql.xml | 2 - .../kakao/sent/KakaoSentDetailPhoneAjax.jsp | 155 ++++++++++++++++++ 3 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPhoneAjax.jsp diff --git a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java index 1f34dd46..8d60a7c9 100644 --- a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java +++ b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java @@ -1128,6 +1128,6 @@ public class KakaoSentController { e.printStackTrace(); // TODO: handle exception } - return "web/kakao/sent/KakaoSentDetailPopAjax"; + return "web/kakao/sent/KakaoSentDetailPhoneAjax"; } } diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index 068dff4f..08ef7a37 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -3645,8 +3645,6 @@ AND A.MSG_GROUP_ID = B.MSG_GROUP_ID AND A.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' diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPhoneAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPhoneAjax.jsp new file mode 100644 index 00000000..a292a4fb --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPhoneAjax.jsp @@ -0,0 +1,155 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<% pageContext.setAttribute("newLineChar", "\n"); %> + +
    + +
    +
      +
    • + +
    • +
      +
    +
    + + + + + +
    +
    +
    +

    + +
    + <%--< div class="allimtalk_title"> + + + 알림톡 도착 + 친구톡 도착 + +
    --%> + +

    (광고)

    +
    +
    + + +

    +

    +
    + +
    + +
    +
    +
    + +

    + +

    + + + +

    +
    + +

    +
    +
    + + + + + + + + + + + +
    + + +

    수신거부 : 홈 > 채널차단

    +
    + +
    +
    +

    ※ 단말기 설정에 따라 다르게 보일 수 있습니다

    +
    +
    + + + + + + + +
  • + \ No newline at end of file From efbadbd71c8504f90b829ddb212f909782f66938 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Fri, 22 Aug 2025 16:54:55 +0900 Subject: [PATCH 35/36] =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20=EC=8A=A4?= =?UTF-8?q?=ED=8C=B8=20=EC=B2=B4=ED=81=AC=20=ED=95=84=ED=84=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20#5418?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java | 6 +++--- .../kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java index fc8c32d6..94b341b0 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java @@ -321,7 +321,7 @@ public class KakaoSendUtil { Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - String smishingYn = userManageVO.getSmishingYn(); + String atSmishingYn = userManageVO.getAtSmishingYn(); String exceptSpamYn = userManageVO.getExceptSpamYn(); @@ -558,14 +558,14 @@ public class KakaoSendUtil { * - 회원 별 '스미싱 온' 상태값 * - Y면 알림, 지연 처리해야 함 * */ - if("Y".equalsIgnoreCase(smishingYn) && isHolidayNotified) { + if("Y".equalsIgnoreCase(atSmishingYn) && isHolidayNotified) { kakaoVO.setSpamStatus("Y"); kakaoVO.setSmishingYn("Y"); kakaoVO.setAtDelayYn("Y"); } // 지연 여부 처리 - if (( "Y".equalsIgnoreCase(smishingYn) || "Y".equalsIgnoreCase(kakaoVO.getAtDelayYn())) + if (( "Y".equalsIgnoreCase(atSmishingYn) || "Y".equalsIgnoreCase(kakaoVO.getAtDelayYn())) && !hasPerformedDelayYn && isHolidayNotified) { calendar.add(Calendar.MINUTE, 30); // 모든 시간을 30분 뒤로 미룸 // TEST diff --git a/src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java b/src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java index 4dc8a012..4be8090e 100644 --- a/src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkServiceImpl.java @@ -199,7 +199,9 @@ public class KakaoFriendsTalkServiceImpl extends EgovAbstractServiceImpl implem /** @SLACK발송 */ /** @발송조건이되면 발송 */ - if(isHolidayNotified && "Y".equals(userManageVO.getAtSmishingYn())) { + if(isHolidayNotified + && ("Y".equals(userManageVO.getAtSmishingYn()) || "Y".equals(kakaoVO.getAtDelayYn())) + ) { mjonCommon.getAdminKakaoAtSendSlack(sendVO); }else if("Y".equals(kakaoVO.getAtSmishingYn())){ /** @발송조건이 안되면 DB INSERT */ From 03644f7743f304eac6a6d95c84f21a58249ad2ff Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Mon, 25 Aug 2025 10:34:02 +0900 Subject: [PATCH 36/36] =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20=EC=8A=A4?= =?UTF-8?q?=ED=8C=B8=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java index 94b341b0..72b38370 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java @@ -519,7 +519,7 @@ public class KakaoSendUtil { // 스팸 단어 체크 - // exceptSpam는 사용자 스팸 단어 체크할건지에 대한 여부 Y : 체크 + // exceptSpam는 사용자 스팸 단어 체크할건지에 대한 여부 N : 체크 if("N".equals(exceptSpamYn)) { // 친구톡 내용 if(replaceYN) { @@ -615,7 +615,7 @@ public class KakaoSendUtil { for (String spmTxt : resultSpamTxt) { String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim(); - if (resultParser.contains(parserStr)) { + if (resultParser.contains(parserStr) || chkText.contains(parserStr)) { spmCnt++; spmFilterTxt += spmTxt + ","; }