1. 관리자 문자전송 리스트 30분 딜레이 발송승인/취소 버튼 날짜처리 변경 - 기존 날짜 시간 비교가 24시간 단위로 안되어 있어 24시간 단위로 변경 - yyyyMMddhhmm --> yyyyMMddHHmm 으로 변경
- 기존 날짜 시간 비교가 24시간 단위로 안되어 있어 24시간 단위로 변경
- yyyyMMddhhmm --> yyyyMMddHHmm 으로 변경
2. 카카오 알림톡 발송 화면 #{변수명} 설정파일 첨부기능 변경
- 기존 자바스크립트로 처리되고 있어 한셀 엑셀파일로 저장된 경우 오류 발생
- 컨트롤러에서 POI방식으로 처리되도록 로직 변경
@78a4cdcaf8f8b6944c41ee645024e2558f31f115
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
... | ... | @@ -466,6 +466,318 @@ |
| 466 | 466 |
|
| 467 | 467 |
return jr; |
| 468 | 468 |
} |
| 469 |
+ |
|
| 470 |
+ |
|
| 471 |
+ /* |
|
| 472 |
+ * 20240829 신규 추가 우영두 |
|
| 473 |
+ * 기존 Script에서 처리하던 방식 변경 |
|
| 474 |
+ * 카카오 알림톡 엑셀 불러오기 엑셀 처리 |
|
| 475 |
+ * |
|
| 476 |
+ * */ |
|
| 477 |
+ @RequestMapping(value = "/web/mjon/alimtalk/sendAlimtalkExelVarFilePhoneNumAjax.do") |
|
| 478 |
+ @ResponseBody |
|
| 479 |
+ public Object sendAlimtalkExelVarFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception {
|
|
| 480 |
+ |
|
| 481 |
+ JsonResult jr = new JsonResult(); |
|
| 482 |
+ jr.setSuccess(false); |
|
| 483 |
+ jr.setMessage("엑셀 파일만 업로드할 수 있습니다.");
|
|
| 484 |
+ |
|
| 485 |
+ |
|
| 486 |
+ try {
|
|
| 487 |
+ |
|
| 488 |
+ //final Map<String, MultipartFile> files = multiRequest.getFileMap(); |
|
| 489 |
+ List<MultipartFile> files = (List<MultipartFile>) multiRequest.getFiles("file0");
|
|
| 490 |
+ |
|
| 491 |
+ // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx |
|
| 492 |
+ int fileNameSplitCnt = 0; |
|
| 493 |
+ int excelVarCnt = Integer.parseInt(multiRequest.getParameter("excelVarCnt"));// 알림톡 템플릿 변수 갯수 데이터
|
|
| 494 |
+ String [] excelVarArr = multiRequest.getParameter("excelVarList").split(",");
|
|
| 495 |
+ |
|
| 496 |
+ |
|
| 497 |
+ if(!files.isEmpty()) {
|
|
| 498 |
+ fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length;
|
|
| 499 |
+ |
|
| 500 |
+ if (files.get(0).getSize() > 0 |
|
| 501 |
+ && (files.get(0).getContentType().indexOf("spreadsheetml") > -1)
|
|
| 502 |
+ || files.get(0).getContentType().indexOf("ms-excel") > -1
|
|
| 503 |
+ || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1
|
|
| 504 |
+ || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) {
|
|
| 505 |
+ |
|
| 506 |
+ // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 |
|
| 507 |
+ long fileSize = multiRequest.getFile("file0").getSize();
|
|
| 508 |
+ |
|
| 509 |
+ String Ext = files.get(0).getOriginalFilename().split("[.]")[1];
|
|
| 510 |
+ String errMessage = ""; |
|
| 511 |
+ String cellValue = ""; |
|
| 512 |
+ String errPhoneLine = ""; |
|
| 513 |
+ int errPhoneCnt = 0; |
|
| 514 |
+ |
|
| 515 |
+ //수신번호 유효성 체크 |
|
| 516 |
+ String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$";
|
|
| 517 |
+ |
|
| 518 |
+ if(Ext.equals("xls")) {
|
|
| 519 |
+ HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); |
|
| 520 |
+ HSSFSheet sheet = workbook.getSheetAt(0); |
|
| 521 |
+ |
|
| 522 |
+ if(sheet.getLastRowNum() > 501) {
|
|
| 523 |
+ errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다."; |
|
| 524 |
+ jr.setSuccess(false); |
|
| 525 |
+ jr.setMessage(errMessage); |
|
| 526 |
+ return jr; |
|
| 527 |
+ } |
|
| 528 |
+ |
|
| 529 |
+ List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>(); |
|
| 530 |
+ for(int i=1; i< sheet.getLastRowNum() + 1; i++){ //먼저 밸리데이션 체크(1줄은 생략)
|
|
| 531 |
+ HSSFRow row = sheet.getRow(i); //열읽기 |
|
| 532 |
+ if(null == row) {
|
|
| 533 |
+ continue; |
|
| 534 |
+ } |
|
| 535 |
+ |
|
| 536 |
+ HashMap<String, String> jm = new HashMap<>(); |
|
| 537 |
+ // 행의 두번째 열(이름부터 받아오기) |
|
| 538 |
+ HSSFCell cell = null; |
|
| 539 |
+ boolean errSts = true; |
|
| 540 |
+ String rtnValueStr = ""; |
|
| 541 |
+ for(int j = 0 ; j < excelVarCnt + 1; j++){ //행읽기(변수갯수 +1 개 만큼 컬럼을 읽음 수신번호 + 변수들)
|
|
| 542 |
+ |
|
| 543 |
+ cellValue = ""; |
|
| 544 |
+ cell = row.getCell(j); //수신번호 , 변수들 |
|
| 545 |
+ if(null == cell || "".equals(cell.toString().trim())) { //수신번호 셀에 값이 없으면
|
|
| 546 |
+ if(j == 0) {
|
|
| 547 |
+ if (sheet.getLastRowNum() == i) {
|
|
| 548 |
+ continue; |
|
| 549 |
+ } |
|
| 550 |
+ |
|
| 551 |
+ break; |
|
| 552 |
+ } |
|
| 553 |
+ |
|
| 554 |
+ } |
|
| 555 |
+ |
|
| 556 |
+ if(j == 0) {
|
|
| 557 |
+ |
|
| 558 |
+ if(null != cell){
|
|
| 559 |
+ switch(cell.getCellType()){ //숫자타임을 문자로 변환
|
|
| 560 |
+ case Cell.CELL_TYPE_NUMERIC: |
|
| 561 |
+ cell.setCellType(Cell.CELL_TYPE_STRING); |
|
| 562 |
+ } |
|
| 563 |
+ cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; |
|
| 564 |
+ |
|
| 565 |
+ if(cellValue.matches(phoneRegExp) && errSts) {
|
|
| 566 |
+ jm.put("phone", cellValue);
|
|
| 567 |
+ }else {
|
|
| 568 |
+ errPhoneCnt++; |
|
| 569 |
+ errPhoneLine += (i+1) + "행 "; |
|
| 570 |
+ errSts = false; |
|
| 571 |
+ break; |
|
| 572 |
+ } |
|
| 573 |
+ } |
|
| 574 |
+ }else {
|
|
| 575 |
+ |
|
| 576 |
+ if(cell != null) {
|
|
| 577 |
+ |
|
| 578 |
+ if(j <= excelVarCnt) {//등록 변수 갯수 까지만 입력
|
|
| 579 |
+ |
|
| 580 |
+ switch(cell.getCellType()){ //숫자타임을 문자로 변환
|
|
| 581 |
+ case Cell.CELL_TYPE_NUMERIC: |
|
| 582 |
+ cell.setCellType(Cell.CELL_TYPE_STRING); |
|
| 583 |
+ } |
|
| 584 |
+ cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; |
|
| 585 |
+ |
|
| 586 |
+ if(cellValue != null && !cellValue.equals("")) {
|
|
| 587 |
+ rtnValueStr += cellValue + "§"; |
|
| 588 |
+ }else {//변ㅅ
|
|
| 589 |
+ rtnValueStr += "" + "§"; |
|
| 590 |
+ } |
|
| 591 |
+ |
|
| 592 |
+ } |
|
| 593 |
+ |
|
| 594 |
+ }else {
|
|
| 595 |
+ rtnValueStr += "" + "§"; |
|
| 596 |
+ |
|
| 597 |
+ } |
|
| 598 |
+ |
|
| 599 |
+ } |
|
| 600 |
+ |
|
| 601 |
+ } |
|
| 602 |
+ |
|
| 603 |
+ jm.put("varVal", rtnValueStr.replaceFirst(".$", ""));//변수 데이터 추가
|
|
| 604 |
+ if(null != jm.get("phone") && errSts) {
|
|
| 605 |
+ json.add(jm); |
|
| 606 |
+ } |
|
| 607 |
+ } |
|
| 608 |
+ |
|
| 609 |
+ int resultErrCnt = errPhoneCnt; |
|
| 610 |
+ |
|
| 611 |
+ jr.setData(json); |
|
| 612 |
+ jr.setSuccess(true); |
|
| 613 |
+ |
|
| 614 |
+ if(resultErrCnt > 0) {
|
|
| 615 |
+ if (errPhoneCnt <= 10) {
|
|
| 616 |
+ if (StringUtils.isNotEmpty(errPhoneLine.trim())) {
|
|
| 617 |
+ errPhoneLine = "[" + errPhoneLine.trim() + "]"; |
|
| 618 |
+ } |
|
| 619 |
+ } |
|
| 620 |
+ else {
|
|
| 621 |
+ errPhoneLine = ""; |
|
| 622 |
+ } |
|
| 623 |
+ |
|
| 624 |
+ jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다.");
|
|
| 625 |
+ }else {
|
|
| 626 |
+ jr.setMessage("");
|
|
| 627 |
+ } |
|
| 628 |
+ |
|
| 629 |
+ }else {//xlsx 엑셀 자료 처리
|
|
| 630 |
+ |
|
| 631 |
+ OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); |
|
| 632 |
+ XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); |
|
| 633 |
+ XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 |
|
| 634 |
+ opcPackage.close(); |
|
| 635 |
+ |
|
| 636 |
+ int totRowDataCnt = 0; |
|
| 637 |
+ for(int r=1; r<sheet.getPhysicalNumberOfRows(); r++) {
|
|
| 638 |
+ |
|
| 639 |
+ XSSFRow tmpRow = sheet.getRow(r); |
|
| 640 |
+ //System.out.println("=================r:"+r);
|
|
| 641 |
+ XSSFCell cell = null; |
|
| 642 |
+ if(tmpRow.getCell(0) != null) {
|
|
| 643 |
+ |
|
| 644 |
+ cell = tmpRow.getCell(0); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5 |
|
| 645 |
+ if(cell != null && !cell.toString().trim().equals("")) {
|
|
| 646 |
+ //System.out.println("value-" + r + ":" +cell.getStringCellValue());
|
|
| 647 |
+ totRowDataCnt++; |
|
| 648 |
+ //System.out.println("tmpRowCnt:"+totRowDataCnt);
|
|
| 649 |
+ } |
|
| 650 |
+ |
|
| 651 |
+ } |
|
| 652 |
+ |
|
| 653 |
+ } |
|
| 654 |
+ |
|
| 655 |
+ if(totRowDataCnt > 501) { //
|
|
| 656 |
+ errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다."; |
|
| 657 |
+ jr.setSuccess(false); |
|
| 658 |
+ jr.setMessage(errMessage); |
|
| 659 |
+ return jr; |
|
| 660 |
+ } |
|
| 661 |
+ |
|
| 662 |
+ List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>(); |
|
| 663 |
+ |
|
| 664 |
+ for(int i=1; i< sheet.getLastRowNum() + 1; i++){ //먼저 밸리데이션 체크(1줄은 생략)
|
|
| 665 |
+ XSSFRow row = sheet.getRow(i); //열읽기 |
|
| 666 |
+ if(null == row) {
|
|
| 667 |
+ continue; |
|
| 668 |
+ } |
|
| 669 |
+ |
|
| 670 |
+ HashMap<String, String> jm = new HashMap<>(); |
|
| 671 |
+ // 행의 두번째 열(이름부터 받아오기) |
|
| 672 |
+ XSSFCell cell = null; |
|
| 673 |
+ boolean errSts = true; |
|
| 674 |
+ String rtnValueStr = ""; |
|
| 675 |
+ for(int j = 0 ; j < excelVarCnt + 1; j++){ //행읽기(변수갯수 +1 개 만큼 컬럼을 읽음 수신번호 + 변수들)
|
|
| 676 |
+ |
|
| 677 |
+ cellValue = ""; |
|
| 678 |
+ cell = row.getCell(j); //수신번호 , 변수들 |
|
| 679 |
+ if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
|
|
| 680 |
+ //System.out.println("Cell 데이터가 없습니다.");
|
|
| 681 |
+ if(j == 1) {
|
|
| 682 |
+ if (sheet.getLastRowNum() == i) {
|
|
| 683 |
+ continue; |
|
| 684 |
+ } |
|
| 685 |
+ |
|
| 686 |
+ break; |
|
| 687 |
+ |
|
| 688 |
+ } |
|
| 689 |
+ } |
|
| 690 |
+ if(null != cell){
|
|
| 691 |
+ switch(cell.getCellType()){ //숫자타임을 문자로 변환
|
|
| 692 |
+ case Cell.CELL_TYPE_NUMERIC: |
|
| 693 |
+ cell.setCellType(Cell.CELL_TYPE_STRING); |
|
| 694 |
+ } |
|
| 695 |
+ cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; |
|
| 696 |
+ } |
|
| 697 |
+ |
|
| 698 |
+ if(j == 0) {//수신번호 추가
|
|
| 699 |
+ |
|
| 700 |
+ if(cellValue.matches(phoneRegExp) && errSts) {
|
|
| 701 |
+ jm.put("phone", cellValue);
|
|
| 702 |
+ }else {
|
|
| 703 |
+ errPhoneCnt++; |
|
| 704 |
+ errPhoneLine += (i+1) + "행 "; |
|
| 705 |
+ errSts = false; |
|
| 706 |
+ break; |
|
| 707 |
+ } |
|
| 708 |
+ |
|
| 709 |
+ }else {//변수 데이터 추가
|
|
| 710 |
+ |
|
| 711 |
+ if(cell != null) {
|
|
| 712 |
+ |
|
| 713 |
+ if(j <= excelVarCnt) {//등록 변수 갯수 까지만 입력
|
|
| 714 |
+ |
|
| 715 |
+ switch(cell.getCellType()){ //숫자타임을 문자로 변환
|
|
| 716 |
+ case Cell.CELL_TYPE_NUMERIC: |
|
| 717 |
+ cell.setCellType(Cell.CELL_TYPE_STRING); |
|
| 718 |
+ } |
|
| 719 |
+ cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; |
|
| 720 |
+ |
|
| 721 |
+ if(cellValue != null && !cellValue.equals("")) {
|
|
| 722 |
+ rtnValueStr += cellValue + "§"; |
|
| 723 |
+ }else {
|
|
| 724 |
+ rtnValueStr += "" + "§"; |
|
| 725 |
+ } |
|
| 726 |
+ |
|
| 727 |
+ } |
|
| 728 |
+ |
|
| 729 |
+ }else {
|
|
| 730 |
+ rtnValueStr += "" + "§"; |
|
| 731 |
+ |
|
| 732 |
+ } |
|
| 733 |
+ |
|
| 734 |
+ } |
|
| 735 |
+ |
|
| 736 |
+ } |
|
| 737 |
+ |
|
| 738 |
+ jm.put("varVal", rtnValueStr.replaceFirst(".$", ""));//변수 데이터 추가
|
|
| 739 |
+ if(null != jm.get("phone") && errSts) {
|
|
| 740 |
+ json.add(jm); |
|
| 741 |
+ } |
|
| 742 |
+ |
|
| 743 |
+ } |
|
| 744 |
+ |
|
| 745 |
+ int resultErrCnt = errPhoneCnt; |
|
| 746 |
+ |
|
| 747 |
+ jr.setData(json); |
|
| 748 |
+ jr.setSuccess(true); |
|
| 749 |
+ |
|
| 750 |
+ if(resultErrCnt > 0) {
|
|
| 751 |
+ if (errPhoneCnt <= 10) {
|
|
| 752 |
+ if (StringUtils.isNotEmpty(errPhoneLine.trim())) {
|
|
| 753 |
+ errPhoneLine = "[" + errPhoneLine.trim() + "]"; |
|
| 754 |
+ } |
|
| 755 |
+ } |
|
| 756 |
+ else {
|
|
| 757 |
+ errPhoneLine = ""; |
|
| 758 |
+ } |
|
| 759 |
+ |
|
| 760 |
+ jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다.");
|
|
| 761 |
+ }else {
|
|
| 762 |
+ jr.setMessage("");
|
|
| 763 |
+ } |
|
| 764 |
+ |
|
| 765 |
+ } |
|
| 766 |
+ |
|
| 767 |
+ } |
|
| 768 |
+ } |
|
| 769 |
+ |
|
| 770 |
+ } catch (Exception e) {
|
|
| 771 |
+ // TODO: handle exception |
|
| 772 |
+ System.out.println("+++++++++++++++++ sendAlimtalkExelVarFilePhoneNumAjax Controller Error !!! "+e);
|
|
| 773 |
+ jr.setSuccess(false); |
|
| 774 |
+ jr.setMessage("엑셀 데이터에 오류가 있습니다. 엑셀 데이터를 확인해 주세요.");
|
|
| 775 |
+ return jr; |
|
| 776 |
+ |
|
| 777 |
+ } |
|
| 778 |
+ |
|
| 779 |
+ return jr; |
|
| 780 |
+ } |
|
| 469 | 781 |
|
| 470 | 782 |
|
| 471 | 783 |
// 카카오 템플릿 목록 조회 |
--- src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgList.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgList.jsp
... | ... | @@ -781,9 +781,9 @@ |
| 781 | 781 |
|
| 782 | 782 |
<c:if test="${result.reserveCYn eq 'N' && result.delayYn eq 'Y' && result.delayCompleteYn eq 'N'}">
|
| 783 | 783 |
<br /> |
| 784 |
- <fmt:formatDate value="${now}" pattern="yyyyMMddhhmm" var="nowDate" />
|
|
| 784 |
+ <fmt:formatDate value="${now}" pattern="yyyyMMddHHmm" var="nowDate" />
|
|
| 785 | 785 |
<fmt:parseDate value="${result.reqFullDate}" pattern="yyyy-MM-dd HH:mm" var="checkValue" />
|
| 786 |
- <fmt:formatDate value="${checkValue}" pattern="yyyyMMddhhmm" var="checkDate"/>
|
|
| 786 |
+ <fmt:formatDate value="${checkValue}" pattern="yyyyMMddHHmm" var="checkDate"/>
|
|
| 787 | 787 |
<c:if test="${nowDate < checkDate}">
|
| 788 | 788 |
<button type="button" class="fillBlue" onclick="fnMsgDelaySendArray('<c:out value="${result.msgGroupId}"/>','<c:out value="${result.userId}"/>'); return false;">발송승인</button>
|
| 789 | 789 |
<button type="button" class="fillRed" onclick="fnMsgDelayCancelArray('<c:out value="${result.msgGroupId}"/>','<c:out value="${result.userId}"/>'); return false;">발송취소</button>
|
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
... | ... | @@ -1355,7 +1355,8 @@ |
| 1355 | 1355 |
<div class="receipt_num_top"> |
| 1356 | 1356 |
<input type="text" placeholder="선택된 파일이 없습니다." onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;"> |
| 1357 | 1357 |
<button type="button" class="btnType btnType6" id="fileClick"/>파일선택</button> |
| 1358 |
- <input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExport02(event); return false;" style="display:none"/> |
|
| 1358 |
+ <input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExportVarAjax(event); return false;" style="display:none"/> |
|
| 1359 |
+ <!-- <input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExport02(event); return false;" style="display:none"/> --> |
|
| 1359 | 1360 |
</div> |
| 1360 | 1361 |
<div class="receipt_num_midde"> |
| 1361 | 1362 |
<div class="listType list01" id="wrap02"> |
... | ... | @@ -1754,7 +1755,11 @@ |
| 1754 | 1755 |
</div> |
| 1755 | 1756 |
</div><!--// 엑셀 불러오기 --> |
| 1756 | 1757 |
</form> |
| 1757 |
- |
|
| 1758 |
+<form id="excelVarFileForm" name="excelVarFileForm" method="post"> |
|
| 1759 |
+ <input type="hidden" id="excelVarCnt" name="excelVarCnt" value="0"/> |
|
| 1760 |
+ <input type="hidden" id="excelVarList" name="excelVarList" value=""/> |
|
| 1761 |
+ |
|
| 1762 |
+</form> |
|
| 1758 | 1763 |
|
| 1759 | 1764 |
<form id="msgResendForm" name="msgResendForm" method="post"> |
| 1760 | 1765 |
<input name="msgResendFlag" type="hidden" value="N"/> |
--- src/main/webapp/js/kakao/at/alimtalkExcel.js
+++ src/main/webapp/js/kakao/at/alimtalkExcel.js
... | ... | @@ -192,6 +192,208 @@ |
| 192 | 192 |
} |
| 193 | 193 |
|
| 194 | 194 |
|
| 195 |
+/* |
|
| 196 |
+ * 신규 변수명 설정 엑셀 파일 불러오기 |
|
| 197 |
+ * 기존 json 처리가 아닌 POI 방식으로 처리하기 위함 |
|
| 198 |
+ * |
|
| 199 |
+ * */ |
|
| 200 |
+function excelExportVarAjax(){
|
|
| 201 |
+ |
|
| 202 |
+ var data = document.getElementById('excelFile').files;
|
|
| 203 |
+ |
|
| 204 |
+ var fileValue = $("#excelFile").val().split("\\");
|
|
| 205 |
+ var fileName = fileValue[fileValue.length-1]; |
|
| 206 |
+ |
|
| 207 |
+ var fileExt = fileName.split('.').pop().toLowerCase();
|
|
| 208 |
+ |
|
| 209 |
+ if(fileExt.length > 0){
|
|
| 210 |
+ if($.inArray(fileExt, ['xls','xlsx']) == -1) {
|
|
| 211 |
+ |
|
| 212 |
+ alert('xls, xlsx 파일만 업로드 할수 있습니다.');
|
|
| 213 |
+ return false; |
|
| 214 |
+ |
|
| 215 |
+ } |
|
| 216 |
+ |
|
| 217 |
+ } |
|
| 218 |
+ fn_viewDataInit01(); |
|
| 219 |
+ excelAddVarAjax(); |
|
| 220 |
+} |
|
| 221 |
+ |
|
| 222 |
+function excelAddVarAjax(){
|
|
| 223 |
+ |
|
| 224 |
+ var varList = $("#excelTemplateContent").val().match(/#\{([^}]+)\}/g);
|
|
| 225 |
+ |
|
| 226 |
+ var form = document.excelVarFileForm; |
|
| 227 |
+ form.excelVarCnt.value = varList.length; |
|
| 228 |
+ form.excelVarList.value = varList; |
|
| 229 |
+ |
|
| 230 |
+ var data = new FormData(form); |
|
| 231 |
+ data.append("file0", $('#excelFile').prop('files')[0]);
|
|
| 232 |
+ |
|
| 233 |
+ var url = "/web/mjon/alimtalk/sendAlimtalkExelVarFilePhoneNumAjax.do"; |
|
| 234 |
+ |
|
| 235 |
+ $.ajax({
|
|
| 236 |
+ type: "POST", |
|
| 237 |
+ enctype: 'multipart/form-data', |
|
| 238 |
+ url: url, |
|
| 239 |
+ data: data, |
|
| 240 |
+ dataType:'json', |
|
| 241 |
+ async: true, |
|
| 242 |
+ processData: false, |
|
| 243 |
+ contentType: false, |
|
| 244 |
+ cache: false, |
|
| 245 |
+ //timeout: 600000, |
|
| 246 |
+ success: function (returnData, status) {
|
|
| 247 |
+ if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 248 |
+ |
|
| 249 |
+ if(returnData.success){
|
|
| 250 |
+ |
|
| 251 |
+ var data = returnData.data; |
|
| 252 |
+ var message = returnData.message; |
|
| 253 |
+ |
|
| 254 |
+ if(message != '' ){
|
|
| 255 |
+ alert(returnData.message); |
|
| 256 |
+ } |
|
| 257 |
+ |
|
| 258 |
+ if(data != null){
|
|
| 259 |
+ |
|
| 260 |
+ //수신목록 Html 태그 |
|
| 261 |
+ // 엑셀 헤더 |
|
| 262 |
+ var excelTitleHeadText ='<div class="list_table_name">' |
|
| 263 |
+ +'\t<p>$HEADTITLE$</p>' |
|
| 264 |
+ +'</div>'; |
|
| 265 |
+ |
|
| 266 |
+ // 바디 row 수신자 tag |
|
| 267 |
+ var excelBodyRowTextIndex00 ='<div class="list_table_name phoneArea">' |
|
| 268 |
+ +'\t\t<p>$ROWTEXT$</p>' |
|
| 269 |
+ +'\t</div>'; |
|
| 270 |
+ |
|
| 271 |
+ // 바디 row tag |
|
| 272 |
+ var excelBodyRowTextIndex01 ='<div class="list_table_name transData">' |
|
| 273 |
+ +'\t\t<p>$ROWTEXT$</p>' |
|
| 274 |
+ +'\t</div>'; |
|
| 275 |
+ |
|
| 276 |
+ //맨 앞에 수신번호 배열 추가 |
|
| 277 |
+ varList.unshift('수신번호');
|
|
| 278 |
+ //변수 문자열 중복 제거 |
|
| 279 |
+ var newList = Array.from(new Set(varList)); |
|
| 280 |
+ |
|
| 281 |
+ //엑셀헤더 selector |
|
| 282 |
+ var $excelHead = $('#excelHead');
|
|
| 283 |
+ //엑셀바디 selector |
|
| 284 |
+ var $excelBody = $('#excelBody02');
|
|
| 285 |
+ |
|
| 286 |
+ // 엑셀 헤더 부분 |
|
| 287 |
+ $.each(newList, function(headerIndex, value) {
|
|
| 288 |
+ $excelHead.append(excelTitleHeadText.replace('$HEADTITLE$', value));
|
|
| 289 |
+ }); |
|
| 290 |
+ |
|
| 291 |
+ var totalDuplCnt = $('#rowDupCnt').text();//중복 건수 정보
|
|
| 292 |
+ var $excelBody = $('#excelBody02');
|
|
| 293 |
+ var bodyData; |
|
| 294 |
+ var addDiv = ""; |
|
| 295 |
+ var phoneNum; |
|
| 296 |
+ |
|
| 297 |
+ //입력데이터를 역정렬해준다. |
|
| 298 |
+ data.reverse(); |
|
| 299 |
+ |
|
| 300 |
+ //변수명 추출해주기 |
|
| 301 |
+ var varListArr = []; |
|
| 302 |
+ varListArr = form.excelVarList.value.split(",");
|
|
| 303 |
+ |
|
| 304 |
+ $.each(data, function(i, item){
|
|
| 305 |
+ |
|
| 306 |
+ if(checkHpNum(item.phone)){
|
|
| 307 |
+ |
|
| 308 |
+ phoneNum = removeDash(item.phone); |
|
| 309 |
+ |
|
| 310 |
+ if(!phoneDupl(phoneNum)){
|
|
| 311 |
+ var varVal = item.varVal; |
|
| 312 |
+ var lengthCheck =true; |
|
| 313 |
+ /*23.04.06 이름제거 요청으로인한 화면 이름 제거*/ |
|
| 314 |
+ var excelBody = '<div class="list_table list_body excelBody">'; |
|
| 315 |
+ |
|
| 316 |
+ //수신번호 화면 태그 생성 |
|
| 317 |
+ excelBody += excelBodyRowTextIndex00.replace('$ROWTEXT$', removeDash(phoneNum));
|
|
| 318 |
+ |
|
| 319 |
+ //변수 데이터 태그 생성 |
|
| 320 |
+ var varValArr = [] |
|
| 321 |
+ varValArr = varVal.split("§");
|
|
| 322 |
+ for(var i=0; i < varValArr.length; i++){
|
|
| 323 |
+ |
|
| 324 |
+ var bodyData = varValArr[i]; |
|
| 325 |
+ |
|
| 326 |
+ // 기타변수는 50자리 까지 입력 |
|
| 327 |
+ if(bodyData.length > 100 || bodyData.length == 0){
|
|
| 328 |
+ alert("등록 변수[ "+varListArr[i]+" ] \n기타변수의 입력 값이 없거나 100자리를 초과하는 내용이 포함되어 해당 내용 제외되었습니다.");
|
|
| 329 |
+ lengthCheck = false; |
|
| 330 |
+ break; |
|
| 331 |
+ } |
|
| 332 |
+ excelBody += excelBodyRowTextIndex01.replace('$ROWTEXT$', bodyData);
|
|
| 333 |
+ |
|
| 334 |
+ } |
|
| 335 |
+ |
|
| 336 |
+ excelBody += '</div>'; |
|
| 337 |
+ |
|
| 338 |
+ if(lengthCheck){
|
|
| 339 |
+ addDiv += excelBody; |
|
| 340 |
+ } |
|
| 341 |
+ |
|
| 342 |
+ } |
|
| 343 |
+ |
|
| 344 |
+ else |
|
| 345 |
+ totalDuplCnt++; |
|
| 346 |
+ |
|
| 347 |
+ } else{
|
|
| 348 |
+ |
|
| 349 |
+ alert("엑셀 파일 데이터의 형식이 맞지 않는 부분이 있습니다.");
|
|
| 350 |
+ excelAddr = []; //엑셀 데이터 저장 변수 초기화 |
|
| 351 |
+ $("#excelFile").val(""); //첨부파일 input 초기화
|
|
| 352 |
+ $("#excelNm").val(""); // 첨부파일 명 초기화
|
|
| 353 |
+ fileName = ""; |
|
| 354 |
+ return; |
|
| 355 |
+ |
|
| 356 |
+ } |
|
| 357 |
+ |
|
| 358 |
+ }); |
|
| 359 |
+ |
|
| 360 |
+ //화면에 수신번호 및 변수 데이터 추가해 주기 |
|
| 361 |
+ $excelBody.append(addDiv); |
|
| 362 |
+ |
|
| 363 |
+ } |
|
| 364 |
+ |
|
| 365 |
+ }else{
|
|
| 366 |
+ alert(returnData.message); |
|
| 367 |
+// alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
|
|
| 368 |
+ excelAddr = []; //엑셀 데이터 저장 변수 초기화 |
|
| 369 |
+ $("#excelFile01").val(""); //첨부파일 input 초기화
|
|
| 370 |
+ $("#excelNm01").val(""); // 첨부파일 명 초기화
|
|
| 371 |
+ fileName = ""; |
|
| 372 |
+ return; |
|
| 373 |
+ |
|
| 374 |
+ } |
|
| 375 |
+ } else if(status== 'fail'){
|
|
| 376 |
+ alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
|
|
| 377 |
+ console.log("status : fail ~");
|
|
| 378 |
+ } |
|
| 379 |
+ }, |
|
| 380 |
+ error: function (e) {
|
|
| 381 |
+ alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
|
|
| 382 |
+ console.log("ERROR : ", e);
|
|
| 383 |
+ }, |
|
| 384 |
+ beforeSend : function(xmlHttpRequest) {
|
|
| 385 |
+ //로딩창 show |
|
| 386 |
+ $('.loading_layer').addClass('active');
|
|
| 387 |
+ }, |
|
| 388 |
+ complete : function(xhr, textStatus) {
|
|
| 389 |
+ //로딩창 hide |
|
| 390 |
+ $('.loading_layer').removeClass('active');
|
|
| 391 |
+ } |
|
| 392 |
+ }); |
|
| 393 |
+ |
|
| 394 |
+} |
|
| 395 |
+ |
|
| 396 |
+ |
|
| 195 | 397 |
/** |
| 196 | 398 |
* 엑셀 파일 불러오기 |
| 197 | 399 |
*/ |
... | ... | @@ -481,7 +683,6 @@ |
| 481 | 683 |
var resultBoo = true; |
| 482 | 684 |
|
| 483 | 685 |
data = removeDash(data); |
| 484 |
- |
|
| 485 | 686 |
/* |
| 486 | 687 |
* 중복체크 |
| 487 | 688 |
* 기존 데이터 배열화 |
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?