diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java index ec298ecc..edf92d05 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java @@ -80,9 +80,6 @@ public class KakaoSendUtil { - - log.info(" +kakaoVO.getVarListMap().size() :: [{}]", kakaoVO.getVarListMap().size()); - List kakaoSendAdvcListVO = new ArrayList<>(); Calendar calendar = setupBaseDate(kakaoVO, isNotified); @@ -133,9 +130,10 @@ public class KakaoSendUtil { /** @Map에 총 갯수가 수신자 갯수와 동일함 */ List> varList = kakaoVO.getVarListMap(); for (int i = 0; i < varList.size(); i++) { -// for(Map variables : kakaoVO.getVarListMap()) { + // for(Map variables : kakaoVO.getVarListMap()) { // 치환 데이터 Map variables = varList.get(i); + log.info(""); /** @공통 기본값 */ KakaoSendAdvcVO sendVO = createSendVO(kakaoVO); @@ -151,10 +149,12 @@ public class KakaoSendUtil { } /** @Step1-3: 템플릿 치환데이터 설정 */ + String templateContentTemp = templateContent; + String templateTitleTemp = templateTitle; if (hasContentReplacement) { - templateContent = mjonCommon.ATReplaceTemplateVariables(templateContent, variables); + templateContentTemp = mjonCommon.ATReplaceTemplateVariables(templateContent, variables); if(hasTitleReplacement) { - templateTitle = mjonCommon.ATReplaceTemplateVariables(templateTitle, variables); + templateTitleTemp = mjonCommon.ATReplaceTemplateVariables(templateTitle, variables); } } /** @버튼 치환 */ // 버튼 리스트가 있으면 치환 수행, 항상 sendVO에 설정 @@ -164,8 +164,8 @@ public class KakaoSendUtil { } sendVO.setButtonList(buttonList); - sendVO.setTemplateTitle(templateTitle); - sendVO.setTemplateContent(templateContent); + sendVO.setTemplateTitle(templateTitleTemp); + sendVO.setTemplateContent(templateContentTemp); // Step 1-4: 실패 대체 문자 치환데이터 설정 @@ -261,6 +261,7 @@ public class KakaoSendUtil { } } + log.info(" sendVO :: [{}]", sendVO); kakaoSendAdvcListVO.add(sendVO); } 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 3f30a8b3..cf1641b3 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 @@ -550,8 +550,8 @@ public class KakaoAlimTalkSendController { HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); HSSFSheet sheet = workbook.getSheetAt(0); - if(sheet.getLastRowNum() > 501) { - errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다."; + if(sheet.getLastRowNum() > 300000) { + errMessage = "한번에 전송 가능한 최대 발송건은 300,000건 입니다."; jr.setSuccess(false); jr.setMessage(errMessage); return jr; @@ -683,12 +683,20 @@ public class KakaoAlimTalkSendController { } - if(totRowDataCnt > 501) { // - errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다."; +// if(totRowDataCnt > 501) { // +// errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다."; +// jr.setSuccess(false); +// jr.setMessage(errMessage); +// return jr; +// } + + if(sheet.getLastRowNum() > 300000) { + errMessage = "한번에 전송 가능한 최대 발송건은 300,000건 입니다."; jr.setSuccess(false); jr.setMessage(errMessage); return jr; } + List> json = new ArrayList>(); diff --git a/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java b/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java index 982e49f4..8a823e1d 100644 --- a/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java +++ b/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java @@ -321,26 +321,25 @@ public class KakaoFriendsTalkSendController { } - /** - * 문자 발송 기능 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/sendMsgDataAjax.do" - * @throws Exception - */ - + /** + * @methodName : sendMsgData_ft_advc + * @author : 이호영 + * @date : 2025. 4. 17. + * @description : 친구톡 발송기능 + * @return : ResponseEntity + * @param kakaoVO + * @param request + * @param model + * @return + * @throws Exception + * + */ @RequestMapping(value = "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax_advc.do") - public ResponseEntity sendMsgData_ft_advc( - @RequestBody KakaoVO kakaoVO, - HttpServletRequest request, - ModelMap model) throws Exception { + public ResponseEntity kakaoFriendsTalkMsgSendAjax_advc( + @RequestBody KakaoVO kakaoVO, + HttpServletRequest request + ) throws Exception { System.out.println(" :: sendMsgData_ft_advc :: "); - - - // 디버깅 출력 -// System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().toString()); -// System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().size()); - return ResponseEntity.ok().body(kakaoFriendsTalkService.insertKakaoFtSandAjax_advc(kakaoVO, request)) ; } 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 e93b50d9..5dc1b8a4 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 @@ -1,26 +1,23 @@ package itn.let.kakao.user.sent.web; import java.io.FileReader; -import java.io.OutputStream; + +import org.apache.commons.lang3.StringUtils; +import itn.com.cmm.util.DateUtils; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.List; -import java.util.Locale; import java.util.Map; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -117,26 +114,16 @@ public class KakaoSentController { if(kakaoSentVO.getSearchSortCnd().equals("")) kakaoSentVO.setSearchSortCnd("regdate"); - String startDate = kakaoSentVO.getStartDate(); + + String startDate = kakaoSentVO.getStartDate(); String endDate = kakaoSentVO.getEndDate(); - if(startDate == null && endDate == null ) { + if(StringUtils.isEmpty(startDate) + && StringUtils.isEmpty(endDate)) + { - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - //종료일은 오늘날짜 - cal.setTime(now); - endDate = format.format(cal.getTime()); - - //시작일은 전날로 셋팅 - cal.add(Calendar.DATE, -89); - startDate = format.format(cal.getTime()); - - kakaoSentVO.setStartDate(startDate); - kakaoSentVO.setEndDate(endDate); + kakaoSentVO.setStartDate(DateUtils.getDateMonthsAgo(3)); + kakaoSentVO.setEndDate(DateUtils.getCurrentDate()); } diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java index efade919..bde8f50c 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java @@ -3980,6 +3980,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M } String smsTxt = mjonMsgVO.getSmsTxtArea(); + smsTxt = StringUtils.isEmpty(smsTxt) ? "" : smsTxt; // 광고문자면 처리 - 광고 A if ("A".equals(mjonMsgVO.getMsgKind())) { smsTxt = "(광고)" + smsTxt + "\n" + "무료거부 0808800858"; @@ -3987,7 +3988,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M mjonMsgVO.setSmsTxt(smsTxt); -// log.debug(" :: smsTxt :: [{}]", smsTxt); + log.debug(" :: smsTxt :: [{}]", smsTxt); StatusResponse statusResponse = new StatusResponse(); diff --git a/src/main/resources/egovframework/egovProps/globals_local.properties b/src/main/resources/egovframework/egovProps/globals_local.properties index c1fe48cb..6a2e66bd 100644 --- a/src/main/resources/egovframework/egovProps/globals_local.properties +++ b/src/main/resources/egovframework/egovProps/globals_local.properties @@ -29,6 +29,7 @@ Globals.Env = local # mysql Globals.DriverClassName=com.mysql.jdbc.Driver Globals.Url=jdbc:mysql://119.193.215.98:3306/mjon +#Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon Globals.UserName= mjonUr Globals.Password= mjon!@#$ #Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon diff --git a/src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml index 89462577..a3b1d349 100644 --- a/src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml @@ -3,7 +3,7 @@ ========= ======= ================================================= 2021.03.01 신명섭 --> - + @@ -2787,7 +2787,7 @@ , B.MSG_GROUP_CNT , A.MSG_ID , A.USERDATA - , B.SMS_TXT + , A.SMS_TXT , B.SUBJECT , B.REGDATE , A.REQ_DATE 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 93e975b8..d5a05e8c 100644 --- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp @@ -40,11 +40,6 @@

총 발송건수

diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp index c00dd4d1..92cd1c47 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp @@ -796,7 +796,7 @@ function previewPhone(){
- +
@@ -889,14 +889,14 @@ function previewPhone(){ -
+ " /> - - + + diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp index cc94834b..4a85e26b 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp @@ -21,7 +21,7 @@ $(document).ready(function(){ //초기 전체 리스트 페이지 보여주기 var form = document.searchForm; form.listType.value = "groupList"; - linkPage(1); + linkPage(); var date = new Date() ; //이전달 첫날/마지막날 조회 @@ -246,33 +246,6 @@ $(document).on('click', '.msgGgoupList', function(){ }); -function fnReSendMsg(){ - - var msgSeq = []; - if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ - alert("선택된 항목이 없습니다."); - return; - } - - $("input:checkbox[name='msgSentDel']:checked").each(function(index){ - - var disabledChk = $(this).prop('disabled'); - if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 - - msgSeq[index] = $(this).val(); - } - - }); - - var form = document.reSendForm; - form.msgSeqList.value = msgSeq; - form.msgResendFlag.value = "Y"; - - form.action="/web/mjon/msgdata/selectMsgDataView.do"; - form.submit(); - -} - /* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */ function fnShowPrintPopup(tabType, type) { //만들려는 팝업의 크기 @@ -382,6 +355,18 @@ function fnDelete(){ } +function fn_sentDetailView(msgGroupId) { + // msgGroupId 값을 form에 설정 + $("#searchForm #msgGroupId").val(msgGroupId); + + $('#ntceBgnde').val($('#startDate').val()); + $('#ntceEndde').val($('#endDate').val()); + + // form을 해당 URL로 제출 + $("#searchForm").attr("action", "/web/kakao/sent/selectKakaoSentDetailView.do"); + $("#searchForm").submit(); +} + @@ -426,7 +411,9 @@ function fnDelete(){
- + "/> +<%-- " /> --%> + " /> " /> " /> @@ -649,10 +636,6 @@ function fnDelete(){ -
- - -
diff --git a/src/main/webapp/js/kakao/at/alimtalkExcel.js b/src/main/webapp/js/kakao/at/alimtalkExcel.js index 93867c7d..78e8524e 100644 --- a/src/main/webapp/js/kakao/at/alimtalkExcel.js +++ b/src/main/webapp/js/kakao/at/alimtalkExcel.js @@ -295,7 +295,8 @@ function excelAddVarAjax(){ //변수명 추출해주기 var varListArr = []; varListArr = form.excelVarList.value.split(","); - + + var forBreakB = true $.each(data, function(i, item){ if(checkHpNum(item.phone)){ @@ -319,8 +320,11 @@ function excelAddVarAjax(){ var bodyData = varValArr[i]; // 기타변수는 50자리 까지 입력 - if(bodyData.length > 100 || bodyData.length == 0){ - alert("등록 변수[ "+varListArr[i]+" ] \n기타변수의 입력 값이 없거나 100자리를 초과하는 내용이 포함되어 해당 내용 제외되었습니다."); + if(bodyData.length > 100 || bodyData.length == 0 ){ + if(forBreakB){ + alert("등록 변수[ "+varListArr[i]+" ] \n기타변수의 입력 값이 없거나 100자리를 초과하는 내용이 포함되어 해당 내용 제외되었습니다."); + forBreakB = false; + } lengthCheck = false; break; } diff --git a/src/main/webapp/js/kakao/at/tabulator.js b/src/main/webapp/js/kakao/at/tabulator.js index 051e09bd..6a3947c1 100644 --- a/src/main/webapp/js/kakao/at/tabulator.js +++ b/src/main/webapp/js/kakao/at/tabulator.js @@ -132,6 +132,17 @@ $(document).ready(function (){ + // ⬇️ 기존 tableL 데이터 개수 확인 + var existingData = tableL.getData(); + var totalCount = existingData.length + numbers.length; + + // ⬇️ 30만건 초과 시 경고 및 중단 + if (totalCount > 300000) { + alert("안정적인 서비스 운영을 위해서 최대 300000건 이내로 분할 발송해 주시기 바랍니다."); + return; + } + + const formattedData = numbers.map(num => ({phone: num})); // 기존 tableL의 데이터를 가져옵니다.