rosewiper 2024-08-29
알림톡 전송 엑셀 불러오기 POI 방식 전환
@1aebdb9a080dfb490814649d36b8a2397cdf6520
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
@@ -218,7 +218,9 @@
 	
 	
 	/*
-	 * 엑셀 파일 처리
+	 * 20240829 신규 추가 우영두
+	 * 기존 Script에서 처리하던 방식 변경
+	 * 카카오 알림톡 엑셀 불러오기 엑셀 처리
 	 * 
 	 * */
 	@RequestMapping(value = "/web/mjon/alimtalk/sendAlimtalkExelFilePhoneNumAjax.do")
@@ -255,7 +257,7 @@
 			        String errPhoneLine = "";
 			        int errPhoneCnt = 0;
 			        
-					//String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$";
+			        //수신번호 유효성 체크
 					String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$";
 					
 					if(Ext.equals("xls")) {
@@ -270,6 +272,7 @@
 			            	return jr;
 			            }*/
 						
+					    List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
 					    for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
 			            	HSSFRow row = sheet.getRow(i); //열읽기
 			            	if(null == row) { 
@@ -301,11 +304,42 @@
 			                		}
 			                		cellValue =  StringUtil.getString(cell.getStringCellValue().trim()) ;
 			                		
-			                		System.out.println("cellValue ::: "+cellValue);
+			                		if(cellValue.matches(phoneRegExp) && errSts) {
+			                			jm.put("phone", cellValue);
+			                		}else {
+				    	            	errPhoneCnt++;
+				    	            	errPhoneLine += (i+1) + "행 ";
+				    	            	errSts = false;
+				    	            	break;
+			                		}
 			                    }
 			                	
 			                }
+			                
+			                if(null != jm.get("phone") && errSts) {
+			                	json.add(jm);
+			                }
 					    }
+					    
+					    int resultErrCnt = errPhoneCnt;
+			            
+			            jr.setData(json);
+						jr.setSuccess(true);
+						
+						if(resultErrCnt > 0) {
+							if (errPhoneCnt <= 10) {
+								if (StringUtils.isNotEmpty(errPhoneLine.trim())) {
+									errPhoneLine = "[" + errPhoneLine.trim() + "]";
+								}
+							}
+							else {
+								errPhoneLine = "";
+							}
+													
+							jr.setMessage("유효하지 않은 형식의 전화번호  "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다.");
+						}else {
+							jr.setMessage("");
+						}
 					    
 					}else {//xlsx 확장자 처리
 						
@@ -333,9 +367,6 @@
 			            	
 			            }
 			            
-			            System.out.println("+++++++++++++++++ totRowDataCnt ::: "+totRowDataCnt);
-			            
-			            //if(sheet.getLastRowNum() > 20000) { //
 			            /*if(totRowDataCnt > 500) { //
 			            	errMessage = "500건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
 			            	jr.setSuccess(false);
@@ -381,8 +412,6 @@
 			                	
 			                	if(j == 0) {
 			                		
-			                		System.out.println("cellValue ::: "+cellValue);
-			                		
 			                		if(cellValue.matches(phoneRegExp) && errSts) {
 			                			jm.put("phone", cellValue);
 			                		}else {
@@ -422,15 +451,10 @@
 							jr.setMessage("");
 						}
 			            
-			            
 					}
-					
 					
 				}
 			}
-			
-			//jr.setMessage("엑셀 불러오기가 완료 되었습니다.");
-			//jr.setSuccess(true);
 			
 		} catch (Exception e) {
 			// TODO: handle exception
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
@@ -284,11 +284,14 @@
 /**
  * 먼저 불러온 DATA가 있으면 삭제
  * !! 화면에 보이는 data만 삭제 !!
+ * 총건수, 중복건수 데이터 0으로 초기화
  * 엑셀 불러오기 데이터 
  */
 function fn_viewDataInit02(){
 	$('.excelBody').remove();
 	$('#excelHead').empty();
+	$('#rowTotCnt').text("0");
+	$('#rowDupCnt').text("0");
 }
 
 /*
@@ -1735,7 +1738,7 @@
 					<div class="attachedFile">
 						<label for="" class="attachedFile_label">첨부파일</label>
 						<input type="text" id="excelNm01" value="" readonly>
-						<input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExport01(event); return false;" style="display:none"/>
+						<input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExportAjax(event); return false;" style="display:none"/>
 						<!-- <input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExport01(event); return false;" style="display:none"/> -->
 						<button type="button" class="btnType btnType6 c1">찾아보기</button>
 <!-- 						<p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p> -->
@@ -1743,7 +1746,7 @@
 					</div>
 				</div><!--// 엑셀파일 불러오기 -->
 				<div class="popup_btn_wrap2">
-					<button type="button" class="tooltip-close" data-focus="popup02-close"  data-focus-next="popup02" onclick="excelAdd()">추가</button>
+					<button type="button" class="tooltip-close" data-focus="popup02-close"  data-focus-next="popup02" onclick="excelAddAjax()">추가</button>
 					<!-- <button type="button" class="tooltip-close" data-focus="popup02-close"  data-focus-next="popup02" onclick="excelAdd()">추가</button> -->
 					<button type="button" class="tooltip-close" data-focus="popup02-close"  data-focus-next="popup02">닫기</button>                      
 				</div>
src/main/webapp/js/kakao/at/alimtalkExcel.js
--- src/main/webapp/js/kakao/at/alimtalkExcel.js
+++ src/main/webapp/js/kakao/at/alimtalkExcel.js
@@ -53,20 +53,15 @@
  * 기존 json 처리가 아닌 POI 방식으로 처리하기 위함
  * 
  * */
-
-function excelExport00(){
+function excelExportAjax(){
 	
 	var data = new FormData(document.excelToolTipForm);
-	//data.append("file0", $('#excelFile01').prop('files')[0]);
 	
 	var fileValue = $("#excelFile01").val().split("\\");
 	var fileName = fileValue[fileValue.length-1];
 	
 	var fileExt = fileName.split('.').pop().toLowerCase();
 	
-	console.log("fileName ::: "+fileName);
-	console.log("fileExt ::: "+fileExt);
-
 	if(fileExt.length > 0){
 		if($.inArray(fileExt, ['xls','xlsx']) == -1) {
 
@@ -81,7 +76,7 @@
 	
 }
 
-function excelAdd1(){
+function excelAddAjax(){
 	
 	var data = new FormData(document.excelToolTipForm);
 	data.append("file0", $('#excelFile01').prop('files')[0]);
@@ -113,11 +108,37 @@
 					
 					if(data != null){
 						
-						/*$.each(data, function(i, item){
+						//수신목록 Html 태그
+						var addHtml = 	'<div class="list_table list_body excelBody">'
+							+'\t<div class="cb_wrap">'
+							+'\t\t<label for="" class="label"></label>'
+							+'\t\t<input type="checkbox" class="wrap01C">'
+							+'\t</div>'
+							+'\t<div class="list_table_num phoneArea">'
+							+'\t\t<p>$PHONE$</p>'
+							+'\t</div>'
+							/*23.04.06  이름제거 요청으로인한 화면 이름 제거*/
+							/*+'\t<div class="list_table_name">'
+							+'\t\t<p>$NAME$</p>'
+							+'\t</div>'*/
+							+'</div>';
+						
+						var totalDuplCnt = $('#rowDupCnt').text();//중복 건수 정보
+						var $excelBody = $('#wrap01_body');
+						var phoneNum;
+
+						$.each(data, function(i, item){
 							
 							if(checkHpNum(item.phone)){
 							
-								excelAddr.push({phone: item.phone, name: item.name, rep1: item.replace1, rep2: item.replace2, rep3: item.replace3, rep4: item.replace4});
+								phoneNum = removeDash(item.phone);
+								
+								if(!phoneDupl(phoneNum))
+									/*23.04.06  이름제거 요청으로인한 화면 이름 제거*/
+//									$excelBody.append(addHtml.replace('$PHONE$', phoneNum).replace('$NAME$', jsonData[bodyIndex]['이름'] ??= ''));
+									$excelBody.append(addHtml.replace('$PHONE$', phoneNum));
+								else
+									totalDuplCnt++;
 								
 							} else{
 								
@@ -130,7 +151,12 @@
 								
 							} 
 						 
-						});*/
+						});
+						
+						$('#rowDupCnt').text(totalDuplCnt);
+						$("#excelFile01").val(""); //첨부파일 input 초기화
+		        	    $("#excelNm01").val("");  // 첨부파일 명 초기화
+						updateTotCnt();
 
 					}
 					
Add a comment
List