diff --git a/src/main/java/itn/let/mjo/addr/service/AddrVO.java b/src/main/java/itn/let/mjo/addr/service/AddrVO.java index 4c864f1c..fa8cfbdc 100644 --- a/src/main/java/itn/let/mjo/addr/service/AddrVO.java +++ b/src/main/java/itn/let/mjo/addr/service/AddrVO.java @@ -360,6 +360,57 @@ public class AddrVO extends ComDefaultVO{ } + + private String addrGroupNm; + private String addrPhone; + private String addrName; + private String addrRep1; + private String addrRep2; + private String addrRep3; + private String addrRep4; + public String getAddrGroupNm() { + return addrGroupNm; + } + public void setAddrGroupNm(String addrGroupNm) { + this.addrGroupNm = addrGroupNm; + } + public String getAddrPhone() { + return addrPhone; + } + public void setAddrPhone(String addrPhone) { + this.addrPhone = addrPhone; + } + public String getAddrName() { + return addrName; + } + public void setAddrName(String addrName) { + this.addrName = addrName; + } + public String getAddrRep1() { + return addrRep1; + } + public void setAddrRep1(String addrRep1) { + this.addrRep1 = addrRep1; + } + public String getAddrRep2() { + return addrRep2; + } + public void setAddrRep2(String addrRep2) { + this.addrRep2 = addrRep2; + } + public String getAddrRep3() { + return addrRep3; + } + public void setAddrRep3(String addrRep3) { + this.addrRep3 = addrRep3; + } + public String getAddrRep4() { + return addrRep4; + } + public void setAddrRep4(String addrRep4) { + this.addrRep4 = addrRep4; + } + } diff --git a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java index 221a9868..60fbf1bc 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java +++ b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java @@ -172,5 +172,7 @@ public interface MjonMsgDataService { //대용량 문자 전송시 사용자 마지막 PK 값 조회하기 public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception; + + public List selectMsgAddrListAjax_advc(AddrVO addrVO) throws Exception; } diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java index 0aa641cd..770b4161 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java @@ -350,5 +350,10 @@ public class MjonMsgDataDAO extends EgovAbstractDAO { public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{ return (String) select("mjonMsgDAO.selectMsgUserLastIdgen", mjonMsgVO); } + + + public List selectMsgAddrListAjax_advc(AddrVO addrVO) { + return (List) list("mjonMsgDAO.selectMsgAddrListAjax_advc", addrVO); + } } 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 ec9eed32..13ea69c2 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 @@ -3050,6 +3050,12 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{ return mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO); } + + @Override + public List selectMsgAddrListAjax_advc(AddrVO addrVO) throws Exception { + + return mjonMsgDataDAO.selectMsgAddrListAjax_advc(addrVO); + } } diff --git a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java index 16b49177..ecdcc498 100644 --- a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java +++ b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java @@ -1756,8 +1756,18 @@ public class MjonMsgDataController { return modelAndView; } - - List resultAddrList = mjonMsgDataService.selectMsgAddrListAjax(addrVO); + + long startTime = System.currentTimeMillis(); // 시작 시간 측정 + +// List resultAddrList = mjonMsgDataService.selectMsgAddrListAjax(addrVO); + List resultAddrList = mjonMsgDataService.selectMsgAddrListAjax_advc(addrVO); + + long endTime = System.currentTimeMillis(); // 종료 시간 측정 + + long elapsedTime = endTime - startTime; // 소요 시간 계산 + System.out.println("소요 시간: " + elapsedTime + " 밀리초"); + + modelAndView.addObject("resultAddrList", resultAddrList); modelAndView.addObject("result", "success"); diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index 832a3c7d..59c5a24a 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -3708,6 +3708,64 @@ + + + diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp index 22b5456e..41fc1561 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp @@ -28,6 +28,79 @@ function updateTotCnt(data){ } //주소록 불러오기에서 수신자 리스트 tabulator에 데이터 추가해주기 +function addPhoneInfo_advc(tableAddr){ + + + var addrData = tableAddr.getData().map((row, index) => ({ + no: index+1, + name: row.addrName, + phone: removeDash(row.addrPhone), + rep1: row.addrRep1, + rep2: row.addrRep2, + rep3: row.addrRep3, + rep4: row.addrRep4, + })); + + tableL.setData(addrData); + + /* + var idx = 0; + var newData = data;//중복 연락처는 하나만 남기고 모두 제거 + + var recTableData = tableL.getRows(); // 받는사람 리스트의 전체 목록을 저장 + var tableData = []; + + //기존 받는사람 리스트를 배열에 미리 담아둔다. + if(recTableData.length > 0){ + + for(var j=0; j < recTableData.length; j++){ + + tableData.push({phone: removeDash(recTableData[j].getData().phone) , name: recTableData[j].getData().name, rep1: recTableData[j].getData().rep1, rep2: recTableData[j].getData().rep2, rep3: recTableData[j].getData().rep3, rep4: recTableData[j].getData().rep4}); + + } + + } + + //받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다. + for(var i=0; i < newData.length; i++){ + + tableData.push({phone: removeDash(newData[i].phone) , name: newData[i].name, rep1: newData[i].rep1, rep2: newData[i].rep2, rep3: newData[i].rep3, rep4: newData[i].rep4}); + + } + +// var temp = tableData.length; + + //기존 수신 리스트를 지워준 후 신규 전체 리스트를 추가해준다. + tableL.clearData(); //기존 받는사람 목록을 삭제. + //tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기 + tableL.addData(getSpupDupliPhoneDataChk(tableData)); // 받는사람 목록에 주소 정보 입력하기 + + _fileForm2 = []; //form file data 초기화 + _fileIdx = 0; //form file idx 초기화 + + + //일괄변환 문구 결제금액 처리 + */ + totRows = tableL.getRows().length; + updateTotCnt(totRows); //전체 데이터 갯수 구하기 + var smsTxtArea = $('#smsTxtArea').val(); + if(smsTxtArea.indexOf("[*이름*]") > -1 + || smsTxtArea.indexOf("[*1*]") > -1 + || smsTxtArea.indexOf("[*2*]") > -1 + || smsTxtArea.indexOf("[*3*]") > -1 + || smsTxtArea.indexOf("[*4*]") > -1){ + + fnReplCell(); + + }else{ + + //결제 금액 구하기 + totalPriceSum(totRows); + + } + + +} function addPhoneInfo(data){ if(data == null){ @@ -61,7 +134,7 @@ function addPhoneInfo(data){ } - var temp = tableData.length; +// var temp = tableData.length; //기존 수신 리스트를 지워준 후 신규 전체 리스트를 추가해준다. tableL.clearData(); //기존 받는사람 목록을 삭제. @@ -560,41 +633,32 @@ $(document).ready(function (){ tableL = new Tabulator(".callList_box", { height:"255px", layout:"fitColumns", - //data:tabledata, - //autoColumns:true, headerHozAlign:"center", validationMode:"highlight", - //clipboard:false, - //clipboardCopySelector:"table", - //clipboardPasteAction:"insert", // insert, update, replace placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional) resizableColumns:false, columns:[ //Define Table Columns - {formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){ + {formatter:"rowSelection", headerHozAlign:"center", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", width:5, headerSort:false, cellClick:function(e, cell){ cell.getRow().toggleSelect(); }}, - {title:"이름", hozAlign:"center", field:"name", editor:"input", validator:["maxLength:12"], cellEdited:function(cell){ - //cell - cell component +// {formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", field:"No", width:30}, + {formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40}, + {title:"이름", hozAlign:"center", headerHozAlign:"center", field:"name", editor:"input", validator:["maxLength:12"], cellEdited:function(cell){ fnReplCell(); }}, - {title:"휴대폰", hozAlign:"center", field:"phone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:12"], cellEdited:function(cell){ - //cell - cell component + {title:"휴대폰", hozAlign:"center", headerHozAlign:"center", field:"phone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:12"], cellEdited:function(cell){ fnDuplPhone(); }}, - {title:"[*1*]", hozAlign:"center", field:"rep1", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ - //cell - cell component + {title:"[*1*]", hozAlign:"center", headerHozAlign:"center", field:"rep1", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ fnReplCell(); }}, - {title:"[*2*]", hozAlign:"center", field:"rep2", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ - //cell - cell component + {title:"[*2*]", hozAlign:"center", headerHozAlign:"center", field:"rep2", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ fnReplCell(); }}, - {title:"[*3*]", hozAlign:"center", field:"rep3", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ - //cell - cell component + {title:"[*3*]", hozAlign:"center", headerHozAlign:"center", field:"rep3", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ fnReplCell(); }}, - {title:"[*4*]", hozAlign:"center", field:"rep4", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ - //cell - cell component + {title:"[*4*]", hozAlign:"center", headerHozAlign:"center", field:"rep4", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){ fnReplCell(); }}, @@ -1010,14 +1074,11 @@ $(document).ready(function (){ if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){ - for(var i=0; i < selectedData.length; i++){ - - selectedData[i].delete(); - - } - - totRows = tableL.getRows().length; + // 선택 데이터 삭제 + selectedData.forEach(row => row.delete()); + + totRows = tableL.getRows().length; updateTotCnt(totRows); var smsTxtArea = $('#smsTxtArea').val(); @@ -2696,6 +2757,7 @@ function loadAddrList(){ async: true, cache: false, success: function (returnData, status) { + console.log('returnData : ', returnData); if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 if(returnData.result == "success"){ @@ -2711,14 +2773,33 @@ function loadAddrList(){ } //받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다. - for(var i=0; i < addrList.length; i++){ - - tableData.push({addrGroupNm: addrList[i].addrGrpNm, addrPhone: removeDash(addrList[i].addrPhoneNo) , addrName: addrList[i].addrNm, addrRep1: addrList[i].addrInfo1, addrRep2: addrList[i].addrInfo2, addrRep3: addrList[i].addrInfo3, addrRep4: addrList[i].addrInfo4}); - - } +// for(var i=0; i < addrList.length; i++){ +// tableData.push({ +// addrGroupNm: addrList[i].addrGrpNm +// , addrPhone: removeDash(addrList[i].addrPhoneNo) +// , addrName: addrList[i].addrNm +// , addrRep1: addrList[i].addrInfo1 +// , addrRep2: addrList[i].addrInfo2 +// , addrRep3: addrList[i].addrInfo3 +// , addrRep4: addrList[i].addrInfo4 +// }); +// } + +// addrList.forEach(function(addr){ +// tableData.push({ +// addrGroupNm: addr.addrGrpNm, +// addrPhone: removeDash(addr.addrPhoneNo), +// addrName: addr.addrNm, +// addrRep1: addr.addrInfo1, +// addrRep2: addr.addrInfo2, +// addrRep3: addr.addrInfo3, +// addrRep4: addr.addrInfo4 +// }); +// }); //우측 주소록 리스트 Tabulator에 입력해주기 - tableAddr.setData(tableData); +// tableAddr.setData(tableData); + tableAddr.setData(addrList); }else{ @@ -2783,6 +2864,31 @@ function addrToList(){ } +//주소록 불러오기에서 수신자 리스트 추가해 주기 +function addrToList_advc(){ + console.log('tableAddr :: ', tableAddr); +// var selectedData = tableAddr.getSelectedRows(); + var tableSize = tableAddr.getDataCount(); + var tableData = []; + + if(tableSize < 1){ + + alert("주소록을 선택해 주세요."); + return false; + + }else{ // 선택한 Row 데이터 저장해주기 + + //선택한 데이터 받는사람 리스트에 추가해 주기 + addPhoneInfo_advc(tableAddr); + $(".closeAddr").trigger("click"); + + //주소록 레이어 팝업의 Tabulator 데이터 지워주기 + tableAddr.clearData(); + + } + +} + //주소록 팝업 닫기 기능 function addrClose(){ @@ -3345,13 +3451,15 @@ function getMjMsgSentListAll(pageNo) {
-
@@ -3470,7 +3583,8 @@ function getMjMsgSentListAll(pageNo) { <%-- 주소록 레이어 팝업 닫기 실행 코드 --%> @@ -3862,10 +3976,11 @@ function getMjMsgSentListAll(pageNo) { - * 중복번호는 한번만 발송됩니다. + * 중복번호는 한번만 추가됩니다.
-
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp new file mode 100644 index 00000000..fc4f8f23 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp @@ -0,0 +1,625 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + + + + +
+ + + + + + + + + +
+
+

- 엑셀(EXCEL) 파일로 주소록을 한 번에 최대 2만건까지 등록하여 간편하게 발송 및 관리하실 수 있습니다.

+

- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 작성하셔야 합니다.

+

  ※ 주소록 관리 메뉴에서 다운로드 받으신 엑셀 파일 또한 업로드 양식에 맞추어 작성하셔야 하며,

+

      주소록에 이미 등록된 휴대폰 번호는 업데이트 되지 않으므로 기존 주소록에서 해당 휴대폰 번호를 삭제한 후 재등록해 주시기 바랍니다.

+

- 쉼표(,), 구분선(|), 역슬래시(\, ₩), 작은따옴표('), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.

+

- 휴대폰 번호는 필수입력 항목입니다.

+

- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.

+

- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.

+

- 이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte까지 입력 가능합니다.

+

- 첨부가능 파일 : xlsx, xls(최대용량 3MB)

+

- ‘오류 검사’를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다.

+

- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.

+ +
+
+ +
+
+ + +
+ + + + + + + + + + + + +
엑셀입력 표
그룹 선택 + + + + + + +
+
+
+

파일 붙여넣기마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요

+
+
+

+ 총 0건 / 중복 0건 +   + + + +

+ +
+ + + + +
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+ +
+
+
+
+ + + + +
+

휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능

+ (예시) 010-1234-0001(O) / 010-123-0001(X) +
+
+ +
+
+ + +
+
+ - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.
+ - 휴대폰 번호는 필수입력 항목입니다.
+ - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)
+ - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.
+ - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. +
+
+ + +
\ No newline at end of file diff --git a/src/main/webapp/js/kakao/at/addr.js b/src/main/webapp/js/kakao/at/addr.js index 0e17c2bc..06366830 100644 --- a/src/main/webapp/js/kakao/at/addr.js +++ b/src/main/webapp/js/kakao/at/addr.js @@ -141,6 +141,7 @@ function addrToList(){ } function loadAddrList(){ + console.log(' loadAddrList() '); /* serialize 를 사용할때는 processData, contentType 옵션 제가할것 @@ -157,8 +158,8 @@ function loadAddrList(){ async: false, cache: false, success: function (returnData, status) { + console.log('returnData : ', returnData); if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 - if(returnData.result == "success"){ var addrList = returnData.resultAddrList; diff --git a/src/main/webapp/js/web/addr/event.js b/src/main/webapp/js/web/addr/event.js index 04809130..3a6f47cb 100644 --- a/src/main/webapp/js/web/addr/event.js +++ b/src/main/webapp/js/web/addr/event.js @@ -115,6 +115,7 @@ $(document).ready(function(){ {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) { cell.getRow().toggleSelect(); }} + ,{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:40} ]; var fieldMapping = []; @@ -144,14 +145,14 @@ $(document).ready(function(){ } }); - -function fn_loadAddActive(){ - $('.loading_layer').addClass('active'); -} - -function fn_loadRemoveActive(){ - $('.loading_layer').removeClass('active'); -} +// +//function fn_loadAddActive(){ +// $('.loading_layer').addClass('active'); +//} +// +//function fn_loadRemoveActive(){ +// $('.loading_layer').removeClass('active'); +//} //중복 연락처 function makeAddrMassDupliPop(dupliPhoneDataRealList) { diff --git a/src/main/webapp/js/web/addr/init.js b/src/main/webapp/js/web/addr/init.js index 4e4d5e1a..1e3b337c 100644 --- a/src/main/webapp/js/web/addr/init.js +++ b/src/main/webapp/js/web/addr/init.js @@ -37,6 +37,7 @@ $(document).ready(function(){ cell.getRow().toggleSelect(); } }, + {formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40}, {title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}, {title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}, {title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}, diff --git a/src/main/webapp/publish/js/content.js b/src/main/webapp/publish/js/content.js index 7cd4c197..6e78f2fa 100644 --- a/src/main/webapp/publish/js/content.js +++ b/src/main/webapp/publish/js/content.js @@ -1553,4 +1553,12 @@ function buttonTypeDel(btn){ //미리보기 추가된 버튼 정보 삭제처리하기 $('.btnEmpty').eq(btnIndex).remove(); -} \ No newline at end of file +} + +function fn_loadAddActive(){ + $('.loading_layer').addClass('active'); +} + +function fn_loadRemoveActive(){ + $('.loading_layer').removeClass('active'); +}