알림톡 전송 엑셀 불러오기 POI 방식 전환
@1aebdb9a080dfb490814649d36b8a2397cdf6520
--- 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 @@ |
| 218 | 218 |
|
| 219 | 219 |
|
| 220 | 220 |
/* |
| 221 |
- * 엑셀 파일 처리 |
|
| 221 |
+ * 20240829 신규 추가 우영두 |
|
| 222 |
+ * 기존 Script에서 처리하던 방식 변경 |
|
| 223 |
+ * 카카오 알림톡 엑셀 불러오기 엑셀 처리 |
|
| 222 | 224 |
* |
| 223 | 225 |
* */ |
| 224 | 226 |
@RequestMapping(value = "/web/mjon/alimtalk/sendAlimtalkExelFilePhoneNumAjax.do") |
... | ... | @@ -255,7 +257,7 @@ |
| 255 | 257 |
String errPhoneLine = ""; |
| 256 | 258 |
int errPhoneCnt = 0; |
| 257 | 259 |
|
| 258 |
- //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$";
|
|
| 260 |
+ //수신번호 유효성 체크 |
|
| 259 | 261 |
String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$";
|
| 260 | 262 |
|
| 261 | 263 |
if(Ext.equals("xls")) {
|
... | ... | @@ -270,6 +272,7 @@ |
| 270 | 272 |
return jr; |
| 271 | 273 |
}*/ |
| 272 | 274 |
|
| 275 |
+ List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>(); |
|
| 273 | 276 |
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
|
| 274 | 277 |
HSSFRow row = sheet.getRow(i); //열읽기 |
| 275 | 278 |
if(null == row) {
|
... | ... | @@ -301,11 +304,42 @@ |
| 301 | 304 |
} |
| 302 | 305 |
cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; |
| 303 | 306 |
|
| 304 |
- System.out.println("cellValue ::: "+cellValue);
|
|
| 307 |
+ if(cellValue.matches(phoneRegExp) && errSts) {
|
|
| 308 |
+ jm.put("phone", cellValue);
|
|
| 309 |
+ }else {
|
|
| 310 |
+ errPhoneCnt++; |
|
| 311 |
+ errPhoneLine += (i+1) + "행 "; |
|
| 312 |
+ errSts = false; |
|
| 313 |
+ break; |
|
| 314 |
+ } |
|
| 305 | 315 |
} |
| 306 | 316 |
|
| 307 | 317 |
} |
| 318 |
+ |
|
| 319 |
+ if(null != jm.get("phone") && errSts) {
|
|
| 320 |
+ json.add(jm); |
|
| 321 |
+ } |
|
| 308 | 322 |
} |
| 323 |
+ |
|
| 324 |
+ int resultErrCnt = errPhoneCnt; |
|
| 325 |
+ |
|
| 326 |
+ jr.setData(json); |
|
| 327 |
+ jr.setSuccess(true); |
|
| 328 |
+ |
|
| 329 |
+ if(resultErrCnt > 0) {
|
|
| 330 |
+ if (errPhoneCnt <= 10) {
|
|
| 331 |
+ if (StringUtils.isNotEmpty(errPhoneLine.trim())) {
|
|
| 332 |
+ errPhoneLine = "[" + errPhoneLine.trim() + "]"; |
|
| 333 |
+ } |
|
| 334 |
+ } |
|
| 335 |
+ else {
|
|
| 336 |
+ errPhoneLine = ""; |
|
| 337 |
+ } |
|
| 338 |
+ |
|
| 339 |
+ jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다.");
|
|
| 340 |
+ }else {
|
|
| 341 |
+ jr.setMessage("");
|
|
| 342 |
+ } |
|
| 309 | 343 |
|
| 310 | 344 |
}else {//xlsx 확장자 처리
|
| 311 | 345 |
|
... | ... | @@ -333,9 +367,6 @@ |
| 333 | 367 |
|
| 334 | 368 |
} |
| 335 | 369 |
|
| 336 |
- System.out.println("+++++++++++++++++ totRowDataCnt ::: "+totRowDataCnt);
|
|
| 337 |
- |
|
| 338 |
- //if(sheet.getLastRowNum() > 20000) { //
|
|
| 339 | 370 |
/*if(totRowDataCnt > 500) { //
|
| 340 | 371 |
errMessage = "500건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; |
| 341 | 372 |
jr.setSuccess(false); |
... | ... | @@ -381,8 +412,6 @@ |
| 381 | 412 |
|
| 382 | 413 |
if(j == 0) {
|
| 383 | 414 |
|
| 384 |
- System.out.println("cellValue ::: "+cellValue);
|
|
| 385 |
- |
|
| 386 | 415 |
if(cellValue.matches(phoneRegExp) && errSts) {
|
| 387 | 416 |
jm.put("phone", cellValue);
|
| 388 | 417 |
}else {
|
... | ... | @@ -422,15 +451,10 @@ |
| 422 | 451 |
jr.setMessage("");
|
| 423 | 452 |
} |
| 424 | 453 |
|
| 425 |
- |
|
| 426 | 454 |
} |
| 427 |
- |
|
| 428 | 455 |
|
| 429 | 456 |
} |
| 430 | 457 |
} |
| 431 |
- |
|
| 432 |
- //jr.setMessage("엑셀 불러오기가 완료 되었습니다.");
|
|
| 433 |
- //jr.setSuccess(true); |
|
| 434 | 458 |
|
| 435 | 459 |
} catch (Exception e) {
|
| 436 | 460 |
// 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
... | ... | @@ -284,11 +284,14 @@ |
| 284 | 284 |
/** |
| 285 | 285 |
* 먼저 불러온 DATA가 있으면 삭제 |
| 286 | 286 |
* !! 화면에 보이는 data만 삭제 !! |
| 287 |
+ * 총건수, 중복건수 데이터 0으로 초기화 |
|
| 287 | 288 |
* 엑셀 불러오기 데이터 |
| 288 | 289 |
*/ |
| 289 | 290 |
function fn_viewDataInit02(){
|
| 290 | 291 |
$('.excelBody').remove();
|
| 291 | 292 |
$('#excelHead').empty();
|
| 293 |
+ $('#rowTotCnt').text("0");
|
|
| 294 |
+ $('#rowDupCnt').text("0");
|
|
| 292 | 295 |
} |
| 293 | 296 |
|
| 294 | 297 |
/* |
... | ... | @@ -1735,7 +1738,7 @@ |
| 1735 | 1738 |
<div class="attachedFile"> |
| 1736 | 1739 |
<label for="" class="attachedFile_label">첨부파일</label> |
| 1737 | 1740 |
<input type="text" id="excelNm01" value="" readonly> |
| 1738 |
- <input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExport01(event); return false;" style="display:none"/> |
|
| 1741 |
+ <input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExportAjax(event); return false;" style="display:none"/> |
|
| 1739 | 1742 |
<!-- <input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExport01(event); return false;" style="display:none"/> --> |
| 1740 | 1743 |
<button type="button" class="btnType btnType6 c1">찾아보기</button> |
| 1741 | 1744 |
<!-- <p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p> --> |
... | ... | @@ -1743,7 +1746,7 @@ |
| 1743 | 1746 |
</div> |
| 1744 | 1747 |
</div><!--// 엑셀파일 불러오기 --> |
| 1745 | 1748 |
<div class="popup_btn_wrap2"> |
| 1746 |
- <button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02" onclick="excelAdd()">추가</button> |
|
| 1749 |
+ <button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02" onclick="excelAddAjax()">추가</button> |
|
| 1747 | 1750 |
<!-- <button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02" onclick="excelAdd()">추가</button> --> |
| 1748 | 1751 |
<button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02">닫기</button> |
| 1749 | 1752 |
</div> |
--- src/main/webapp/js/kakao/at/alimtalkExcel.js
+++ src/main/webapp/js/kakao/at/alimtalkExcel.js
... | ... | @@ -53,20 +53,15 @@ |
| 53 | 53 |
* 기존 json 처리가 아닌 POI 방식으로 처리하기 위함 |
| 54 | 54 |
* |
| 55 | 55 |
* */ |
| 56 |
- |
|
| 57 |
-function excelExport00(){
|
|
| 56 |
+function excelExportAjax(){
|
|
| 58 | 57 |
|
| 59 | 58 |
var data = new FormData(document.excelToolTipForm); |
| 60 |
- //data.append("file0", $('#excelFile01').prop('files')[0]);
|
|
| 61 | 59 |
|
| 62 | 60 |
var fileValue = $("#excelFile01").val().split("\\");
|
| 63 | 61 |
var fileName = fileValue[fileValue.length-1]; |
| 64 | 62 |
|
| 65 | 63 |
var fileExt = fileName.split('.').pop().toLowerCase();
|
| 66 | 64 |
|
| 67 |
- console.log("fileName ::: "+fileName);
|
|
| 68 |
- console.log("fileExt ::: "+fileExt);
|
|
| 69 |
- |
|
| 70 | 65 |
if(fileExt.length > 0){
|
| 71 | 66 |
if($.inArray(fileExt, ['xls','xlsx']) == -1) {
|
| 72 | 67 |
|
... | ... | @@ -81,7 +76,7 @@ |
| 81 | 76 |
|
| 82 | 77 |
} |
| 83 | 78 |
|
| 84 |
-function excelAdd1(){
|
|
| 79 |
+function excelAddAjax(){
|
|
| 85 | 80 |
|
| 86 | 81 |
var data = new FormData(document.excelToolTipForm); |
| 87 | 82 |
data.append("file0", $('#excelFile01').prop('files')[0]);
|
... | ... | @@ -113,11 +108,37 @@ |
| 113 | 108 |
|
| 114 | 109 |
if(data != null){
|
| 115 | 110 |
|
| 116 |
- /*$.each(data, function(i, item){
|
|
| 111 |
+ //수신목록 Html 태그 |
|
| 112 |
+ var addHtml = '<div class="list_table list_body excelBody">' |
|
| 113 |
+ +'\t<div class="cb_wrap">' |
|
| 114 |
+ +'\t\t<label for="" class="label"></label>' |
|
| 115 |
+ +'\t\t<input type="checkbox" class="wrap01C">' |
|
| 116 |
+ +'\t</div>' |
|
| 117 |
+ +'\t<div class="list_table_num phoneArea">' |
|
| 118 |
+ +'\t\t<p>$PHONE$</p>' |
|
| 119 |
+ +'\t</div>' |
|
| 120 |
+ /*23.04.06 이름제거 요청으로인한 화면 이름 제거*/ |
|
| 121 |
+ /*+'\t<div class="list_table_name">' |
|
| 122 |
+ +'\t\t<p>$NAME$</p>' |
|
| 123 |
+ +'\t</div>'*/ |
|
| 124 |
+ +'</div>'; |
|
| 125 |
+ |
|
| 126 |
+ var totalDuplCnt = $('#rowDupCnt').text();//중복 건수 정보
|
|
| 127 |
+ var $excelBody = $('#wrap01_body');
|
|
| 128 |
+ var phoneNum; |
|
| 129 |
+ |
|
| 130 |
+ $.each(data, function(i, item){
|
|
| 117 | 131 |
|
| 118 | 132 |
if(checkHpNum(item.phone)){
|
| 119 | 133 |
|
| 120 |
- excelAddr.push({phone: item.phone, name: item.name, rep1: item.replace1, rep2: item.replace2, rep3: item.replace3, rep4: item.replace4});
|
|
| 134 |
+ phoneNum = removeDash(item.phone); |
|
| 135 |
+ |
|
| 136 |
+ if(!phoneDupl(phoneNum)) |
|
| 137 |
+ /*23.04.06 이름제거 요청으로인한 화면 이름 제거*/ |
|
| 138 |
+// $excelBody.append(addHtml.replace('$PHONE$', phoneNum).replace('$NAME$', jsonData[bodyIndex]['이름'] ??= ''));
|
|
| 139 |
+ $excelBody.append(addHtml.replace('$PHONE$', phoneNum));
|
|
| 140 |
+ else |
|
| 141 |
+ totalDuplCnt++; |
|
| 121 | 142 |
|
| 122 | 143 |
} else{
|
| 123 | 144 |
|
... | ... | @@ -130,7 +151,12 @@ |
| 130 | 151 |
|
| 131 | 152 |
} |
| 132 | 153 |
|
| 133 |
- });*/ |
|
| 154 |
+ }); |
|
| 155 |
+ |
|
| 156 |
+ $('#rowDupCnt').text(totalDuplCnt);
|
|
| 157 |
+ $("#excelFile01").val(""); //첨부파일 input 초기화
|
|
| 158 |
+ $("#excelNm01").val(""); // 첨부파일 명 초기화
|
|
| 159 |
+ updateTotCnt(); |
|
| 134 | 160 |
|
| 135 | 161 |
} |
| 136 | 162 |
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?