이호영 이호영 2025-04-16
Merge branch 'master' into 5102_친구톡_발송속도_개선
@7967c5cd6a7901c5674eb070509beb5ce20d5dd8
src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
--- src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
@@ -80,9 +80,6 @@
 		
 
 		
-		
-		log.info(" +kakaoVO.getVarListMap().size() :: [{}]", kakaoVO.getVarListMap().size()); 
-		
 		List<KakaoSendAdvcVO> kakaoSendAdvcListVO = new ArrayList<>();
 		Calendar calendar = setupBaseDate(kakaoVO, isNotified);
 
@@ -133,9 +130,10 @@
 /** @Map에 총 갯수가 수신자 갯수와 동일함 */
 		List<Map<String, String>> varList = kakaoVO.getVarListMap();
 		for (int i = 0; i < varList.size(); i++) {
-//		for(Map<String, String> variables : kakaoVO.getVarListMap()) {
+			//		for(Map<String, String> variables : kakaoVO.getVarListMap()) {
 			// 치환 데이터
 			Map<String, String> variables = varList.get(i);
+			log.info("");
 			
 /** @공통 기본값 */		
 			KakaoSendAdvcVO sendVO = createSendVO(kakaoVO);
@@ -151,10 +149,12 @@
 			}
 
 /** @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 @@
 			}
 			sendVO.setButtonList(buttonList);
 			
-			sendVO.setTemplateTitle(templateTitle);
-			sendVO.setTemplateContent(templateContent);
+			sendVO.setTemplateTitle(templateTitleTemp);
+			sendVO.setTemplateContent(templateContentTemp);
 
 
 			// Step 1-4: 실패 대체 문자 치환데이터 설정
@@ -261,6 +261,7 @@
 				}
 				
 			}
+			log.info(" sendVO :: [{}]", sendVO);
 			kakaoSendAdvcListVO.add(sendVO);
 		}
 		
src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
@@ -550,8 +550,8 @@
 						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 @@
 			            	
 			            }
 			            
-			            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<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
 			            
src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
--- src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
@@ -321,26 +321,25 @@
 	}
 	
 
-    /**
-     * 문자 발송  기능
-     * @param searchVO
-     * @param model
-     * @return	"/web/mjon/msgdata/sendMsgDataAjax.do"
-     * @throws Exception
-     */
-	
+	/**
+	 * @methodName	: sendMsgData_ft_advc 
+	 * @author		: 이호영
+	 * @date		: 2025. 4. 17.
+	 * @description	: 친구톡 발송기능 
+	 * @return : ResponseEntity<StatusResponse>
+	 * @param kakaoVO
+	 * @param request
+	 * @param model
+	 * @return
+	 * @throws Exception
+	 * 
+	 */
 	@RequestMapping(value = "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax_advc.do")
-     public ResponseEntity<StatusResponse> sendMsgData_ft_advc(
-		    @RequestBody KakaoVO kakaoVO,
-		    HttpServletRequest request,
-	        ModelMap model) throws Exception {
+	public ResponseEntity<StatusResponse> 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)) ;
 		
 	}
src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
--- src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
+++ 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 @@
 		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());
         	
     	}
 
src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
@@ -3980,6 +3980,7 @@
 		}
 
 		String smsTxt = mjonMsgVO.getSmsTxtArea();
+		smsTxt = StringUtils.isEmpty(smsTxt) ? "" : smsTxt;
 		// 광고문자면 처리 - 광고 A
 		if ("A".equals(mjonMsgVO.getMsgKind())) {
 			smsTxt = "(광고)" + smsTxt + "\n" + "무료거부 0808800858";
@@ -3987,7 +3988,7 @@
 		mjonMsgVO.setSmsTxt(smsTxt);
 
 		
-//		log.debug(" :: smsTxt :: [{}]", smsTxt);
+		log.debug(" :: smsTxt :: [{}]", smsTxt);
 
 		StatusResponse statusResponse = new StatusResponse();
 		
src/main/resources/egovframework/egovProps/globals_local.properties
--- src/main/resources/egovframework/egovProps/globals_local.properties
+++ src/main/resources/egovframework/egovProps/globals_local.properties
@@ -29,6 +29,7 @@
 # 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
src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml
@@ -3,7 +3,7 @@
   =========     =======    =================================================
   2021.03.01    신명섭 	
 -->
-<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
+<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
 <sqlMap namespace="KakaoAT">
 	<typeAlias  alias="mjonKakaoATVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO"/>
 	<typeAlias  alias="ChannelIDVO" type="itn.let.kakao.admin.kakaoAt.service.ChannelIDVO"/>
@@ -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
src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
--- src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
+++ src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
@@ -40,11 +40,6 @@
 
 <script>
 $(document).ready(function (){
-	
-
-    $(document).on('click', '#id_text', function () {
-	    actionLogin_temp();
-	});
 
 	$(document).on('click', '#secuLoginFlag', function () {
 
@@ -344,11 +339,6 @@
 	});		
 }
 
-
-function actionLogin_temp(){
-	location.href='/web/user/login/login.do'
-	
-}
 
 function actionLogin() {
 // 	location.href="<c:url value='/web/user/login/login.do'/>";
@@ -1709,6 +1699,8 @@
 			    <input type="hidden" id="ip" name="ip" value="${userIp}">
 			    <input type="hidden" id="passFlag" name="passFlag">
 			    <input type="hidden" id="headerLoginResult" name="headerLoginResult">
+			    <input type="hidden" id="hp" name="hp" value="">
+			    <input type="hidden" id="num" name="num" value="">
 			    
         		<div id="login" class="login">
 		            <div class="inner">
@@ -1719,9 +1711,9 @@
 		                        <input type="text" placeholder="아이디를 입력해주세요"id="id_text" name="id_text" class="id_text" maxlength="20" size="18">
 		                        <label for="password_text" class="label"></label>
 <!-- 		                        <input type="password" placeholder="비밀번호를 입력해주세요"   id="password_text" class="password_text" maxlength="30"size="18" onkeypress="if(event.keyCode==13) {actionLogin(); return false;}" onclick="actionLogin();"> -->
-		                        <input type="password" placeholder="비밀번호를 입력해주세요"   id="password_text" class="password_text" maxlength="30"size="18" onkeypress="if(event.keyCode==13) {actionLogin_temp(); return false;}">
+		                        <input type="password" placeholder="비밀번호를 입력해주세요"   id="password_text" class="password_text" maxlength="30"size="18" onkeypress="if(event.keyCode==13) {actionLogin(); return false;}">
 		                        <label for="login_button" class="label"></label>
-		                        <button type="button" id="login_button" class="btnType btnType1" class="login_button" onclick="actionLogin_temp();">로그인</button>
+		                        <button type="button" id="login_button" class="btnType btnType1" class="login_button" onclick="actionLogin();">로그인</button>
 		                    </div>
 		                    <div class="login_save">
 		                        <input type="checkbox" id="save_id" name="checkId">
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
@@ -1070,11 +1070,8 @@
 					phoneNum[i] = phone;
 					
 				}
-				
 			}
-		
 		}
-	
 	}
 	
 	//예약문자 시간 체크
@@ -1225,6 +1222,32 @@
 			formData[field.name] = field.value;
 		});
 
+		// 2. buttonVOList 수동으로 수집
+		var buttonList = [];
+		$('input[name^="buttonVOList"]').each(function() {
+		    let nameAttr = $(this).attr('name');
+		    let match = nameAttr.match(/buttonVOList\[(\d+)\]\.(\w+)/);
+
+		    if (match) {
+		        let index = parseInt(match[1]);
+		        let key = match[2];
+		        let value = $(this).val();
+
+		        if (!buttonList[index]) buttonList[index] = {};
+		        buttonList[index][key] = value;
+		    }
+		});
+
+		// 3. formData에 배열로 추가
+		formData["buttonVOList"] = buttonList;
+
+		// ✅ 4. 기존의 buttonVOList[0].xxx 형태 제거
+		Object.keys(formData).forEach(function(key) {
+		    if (/^buttonVOList\[\d+\]\./.test(key)) {
+		        delete formData[key];
+		    }
+		});
+		
 		// 빈 값 제거
 		removeEmptyValues(formData);
 		// 선택된 데이터 추가
@@ -1238,12 +1261,9 @@
 		$.ajax({
 			type: "POST"
 			, url: "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax_advc.do"
-			, data: data
+			, data: JSON.stringify(formData)
+			, contentType: 'application/json'
 			, dataType: 'json'
-			, async: true
-			, processData: false
-			, contentType: false
-			, cache: false
 			, success: function (returnData) {
 				
 				console.log('returnData : ', returnData);
@@ -1817,8 +1837,8 @@
 				
 				<!-- 친구톡 발송 단가 정보 -->
 				<input type="hidden" id="kakaoFtPrice" name="kakaoFtPrice" value="<c:out value='${sendPrice.kakaoFtPrice}' />"/>
-				<input type="hidden" id="eachPrice" name="eachPrice" value="0"/>
-				<input type="hidden" id="totPrice" name="totalPrice" value="0"/>
+<!-- 				<input type="hidden" id="eachPrice" name="eachPrice" value="0"/> -->
+<!-- 				<input type="hidden" id="totPrice" name="totalPrice" value="0"/> -->
 				
 				<!-- 친구톡 발송 json 파일 필요 유무 -->
 				<input type="hidden" id="bizJsonYn" name="bizJsonYn" value="N"/>
@@ -1904,8 +1924,8 @@
 								<tr>
 									<th>광고포함 여부</th>
 									<td>
-										<input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label>
-										<%-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N" <c:if test="${resultTemplateVO.adFlag eq 'N'}">checked</c:if> ><label for="ad_N">포함 안함</label> --%>
+<%-- 										<input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label> --%>
+										<input type="radio" class="inputAdFlag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label>
 									</td>
 								</tr>
 								<tr>
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp
@@ -104,15 +104,6 @@
 	
 }
 
-function fn_sentDetailView(msgGroupId) {
-	// msgGroupId 값을 form에 설정
-	$("#searchForm #msgGroupId").val(msgGroupId);
-
-	// form을 해당 URL로 제출
-	$("#searchForm").attr("action", "/web/kakao/sent/selectKakaoSentDetailView.do");
-	$("#searchForm").submit();
-}
-
 </script>
     <div class="list_info">
 		<p>총 발송건수 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp
@@ -796,7 +796,7 @@
 
 			<!-- 목록-->
 			<div class="btn_list_type1">
-				<button class="btnType btnType17">목록</button>
+				<button class="btnType btnType17" id="goPageBtn">목록</button>
 			</div>
 			<!--// 목록-->
 
@@ -889,14 +889,14 @@
 	<!--// 주소록에 등록 팝업 -->
 	
 	<!-- 이전 리스트 상태(검색조건, 페이징) 그대로 가기 위한 form -->
-	<form id="goList" name="goList" method="post" action="/web/mjon/msgsent/selectMsgSentView.do">
+	<form id="goList" name="goList" method="post" action="/web/kakao/sent/selectKakaoSentView.do">
 		<input type="hidden" name="pageIndex" value="<c:out value="${searchVO.pageIndex}" />" />
 		<input type="hidden" name="searchSortCnd" value="<c:out value='${searchVO.searchSortCnd }' />" />
 		<input type="hidden" name="searchSortOrd" value="<c:out value='${searchVO.searchSortOrd }' />" />
 		<input type="hidden" name="searchCondition01" value="<c:out value='${searchVO.searchCondition01 }' />" />
 		<input type="hidden" name="searchCondition02" value="<c:out value='${searchVO.searchCondition02 }' />" />
-		<input type="hidden" name="searchStartDate" value="<c:out value='${searchVO.searchStartDate }' />" />
-		<input type="hidden" name="searchEndDate" value="<c:out value='${searchVO.searchEndDate }' />" />
+		<input type="hidden" name="startDate" value="<c:out value='${searchVO.startDate }' />" />
+		<input type="hidden" name="endDate" value="<c:out value='${searchVO.endDate }' />" />
 		<input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition }' />" />
 		<input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword }' />" />
 		<input type="hidden" name="pageUnit" value="<c:out value='${searchVO.pageUnit }' />" />
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
@@ -21,7 +21,7 @@
 	//초기 전체 리스트 페이지 보여주기
 	var form = document.searchForm;
 	form.listType.value = "groupList";
-	linkPage(1);
+	linkPage(<c:out value="${searchVO.pageIndex}"/>);
 	
 	var date = new Date() ;
 	//이전달 첫날/마지막날 조회
@@ -246,33 +246,6 @@
 	
 });
 
-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 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();
+}
+
 </script>
 
 	
@@ -426,7 +411,9 @@
 					<!--// tab button -->
 				</div>
 				<form id="searchForm" name="searchForm" method="post">
-					<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
+					<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${searchVO.pageIndex}" />"/>
+<%-- 					<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${searchVO.pageIndex}" />" /> --%>
+					<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${searchVO.pageUnit}" />" />
 					<input type="hidden" id="msgGroupIdList" name="msgGroupIdList" value=""/>
 					<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
 					<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
@@ -648,10 +635,6 @@
 		<input type="hidden" id="msgId" name="msgId" value=""/>
 		<input type="hidden" id="fileCnt" name="fileCnt" value=""/>
 		<input type="hidden" id="resultType" name="resultType" value="S"/>
-	</form>
-	<form id="reSendForm" name="reSendForm" method="post">
-		<input type="hidden" id="msgSeqList" name="msgSeqList" value=""/>
-		<input type="hidden" id="msgResendFlag" name="msgResendFlag" value="N"/>
 	</form>
 	<form name="popForm" id="popForm" method="post">
 		<input type="hidden" name="pageType" id="pageType" value=""/> 
src/main/webapp/js/kakao/at/alimtalkExcel.js
--- src/main/webapp/js/kakao/at/alimtalkExcel.js
+++ src/main/webapp/js/kakao/at/alimtalkExcel.js
@@ -295,7 +295,8 @@
 						//변수명 추출해주기
 						var varListArr = [];
 						varListArr = form.excelVarList.value.split(",");
-						
+
+                        var forBreakB = true
 						$.each(data, function(i, item){
 							
 							if(checkHpNum(item.phone)){
@@ -319,8 +320,11 @@
 										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;
 										}
src/main/webapp/js/kakao/at/tabulator.js
--- src/main/webapp/js/kakao/at/tabulator.js
+++ src/main/webapp/js/kakao/at/tabulator.js
@@ -132,6 +132,17 @@
                                 
                                 
         
+        // ⬇️ 기존 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의 데이터를 가져옵니다.
Add a comment
List