diff --git a/src/main/java/itn/let/fax/addr/service/impl/FaxAddrServiceImpl.java b/src/main/java/itn/let/fax/addr/service/impl/FaxAddrServiceImpl.java index 64426fcf..cede9f9a 100644 --- a/src/main/java/itn/let/fax/addr/service/impl/FaxAddrServiceImpl.java +++ b/src/main/java/itn/let/fax/addr/service/impl/FaxAddrServiceImpl.java @@ -26,7 +26,9 @@ import itn.let.fax.addr.service.FaxAddrTransHistVO; import itn.let.fax.addr.service.FaxAddrVO; import itn.let.mail.service.StatusResponse; import itn.let.mjo.addr.service.AddrVO; +import lombok.extern.slf4j.Slf4j; +@Slf4j @Service("FaxAddrService") public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAddrService{ @@ -43,16 +45,14 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd @Resource(name = "egovAddrTransHistIdGnrService") private EgovIdGnrService idgenAddrTransHistId; - - private static final String FAX_REGEX = "^(0\\d{1,2})-(\\d{3,4})-(\\d{4})$"; - private static final String FAX_M_REGEX = "^(050\\d{1})-(\\d{3,4})-(\\d{4})$"; + + private static final String FAX_REGEX = "^(02|0[3-6][1-4]|030|050|060|070|080|1\\d{2})$"; private static final Pattern FAX_PATTERN = Pattern.compile(FAX_REGEX); - private static final Pattern FAX_M_PATTERN = Pattern.compile(FAX_M_REGEX); private static final Charset EUC_KR = Charset.forName("EUC-KR"); - private static final int MAX_SINGLE_ENTRY_CNT = 350000; - private static final int MAX_FAX_ADDR_CNT = 10000000; // 팩스 주소록 등록 최대 수량 + private static final int MAX_SINGLE_ENTRY_CNT = 300000; + private static final int MAX_FAX_ADDR_CNT = 1000000; // 팩스 주소록 등록 최대 수량 public List selectFaxAddrList(FaxAddrVO addrVO) throws Exception { return faxAddrDAO.selectFaxAddrList(addrVO); @@ -385,7 +385,7 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd if(faxAddrListVO.size() > MAX_SINGLE_ENTRY_CNT) { return new StatusResponse( HttpStatus.BAD_REQUEST - , "주소록은 한번에 100만개까지만 등록이 가능합니다." + , "주소록은 한번에 30만개까지만 등록이 가능합니다." , LocalDateTime.now() ); } @@ -397,6 +397,8 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd int faxAddrNewCnt = faxAddrListVO.size(); //신규 추가할 주소록 갯수 int sumFaxAddrCnt = faxAddrBefCnt + faxAddrNewCnt; + System.out.println("faxAddrListVO.size() : "+ faxAddrListVO.size()); + // step1-2 총 갯수가 (주소록 갯수 + 신규 주소록)1000만건 체크 if(sumFaxAddrCnt > MAX_FAX_ADDR_CNT) { return new StatusResponse( @@ -439,16 +441,12 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd AtomicInteger invalid = new AtomicInteger(0); // 스레드-안전(thread-safe)하게 정수 값을 업데이트할 수 있는 기능을 제공 faxAddrListVO.removeIf(faxAddr -> { String phoneNo = faxAddr.getAddrPhoneNo(); - + log.info(" + phoneNo :: [{}]", phoneNo); if (isValidFaxNumber(phoneNo)) { faxAddr.setAddrPhoneNo(phoneNo); // 하이픈이 제거된 유효한 번호 설정 trimFieldsBytes(faxAddr); // 다른 필드들에 대한 20바이트 체크 및 자르기 return false; // 유효한 번호는 제거하지 않음 - } else if (isValidMFaxNumber(phoneNo)) { - faxAddr.setAddrPhoneNo(phoneNo); // 하이픈이 제거된 유효한 번호 설정 - trimFieldsBytes(faxAddr); // 다른 필드들에 대한 20바이트 체크 및 자르기 - return false; // 유효한 번호는 제거하지 않음 - }else{ + } else{ invalid.getAndIncrement(); // 유효하지 않은 번호 개수 증가 return true; // 유효하지 않은 번호는 제거 } @@ -465,6 +463,13 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd if(faxAddrListVO.size() > 0) { // 등록 faxAddrDAO.insertFaxAddrList(faxAddrListVO); + }else { + + return new StatusResponse( + HttpStatus.BAD_REQUEST + , "오류가 발생하였습니다." + , "" + ); } } catch (Exception e) { @@ -494,15 +499,18 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd System.out.println(formattedDateTime); + System.out.println("faxAddrListVO.size() : "+ faxAddrListVO.size()); + + String message = "저장에 성공했습니다.\n저장 : " + faxAddrListVO.size() + "건" +", INERT 총 시간 : " + executionTime+ "초" +", 현재시간 : " + formattedDateTime; - + System.out.println("++ message : "+ message); return new StatusResponse( HttpStatus.OK , message , faxAddrListVO.get(0).getAddrGrpId() - ); + ); } @Override @@ -520,17 +528,12 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd if (faxNo == null || faxNo.isEmpty()) { return false; } - Matcher matcher = FAX_PATTERN.matcher(faxNo); + // 앞 3자리 추출 + String subNumber = faxNo.length() >= 3 ? faxNo.substring(0, 3) : faxNo; + Matcher matcher = FAX_PATTERN.matcher(subNumber); return matcher.matches(); } - public static boolean isValidMFaxNumber(String faxNo) { - if (faxNo == null || faxNo.isEmpty()) { - return false; - } - Matcher matcher = FAX_M_PATTERN.matcher(faxNo); - return matcher.matches(); - } public static void trimFieldsBytes(FaxAddrVO faxAddr) { faxAddr.setAddrNm(trimToBytes(faxAddr.getAddrNm(), 20)); diff --git a/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp b/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp index 2177b21e..acbca1b4 100644 --- a/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp @@ -225,178 +225,6 @@ function getStrFileSize(filesize){ return sizeStr; } -//############################################################################################# -//파일업로드 드래그앤 드롭 -//############################################################################################# -var objDragAndDrop = $(".upload_area"); -$(document).on("dragenter",".upload_area",function(e){ - e.stopPropagation(); - e.preventDefault(); - //$(this).css('border', '2px solid #0B85A1'); -}); -$(document).on("dragover",".upload_area",function(e){ - e.stopPropagation(); - e.preventDefault(); -}); -$(document).on("drop",".upload_area",function(e){ - //$(this).css('border', '2px dotted #0B85A1'); - e.preventDefault(); - var files = e.originalEvent.dataTransfer.files; - handleFileUpload(files,objDragAndDrop); //파일업로드 -}); - -$(document).on('dragenter', function (e){ - e.stopPropagation(); - e.preventDefault(); -}); -$(document).on('dragover', function (e){ -e.stopPropagation(); -e.preventDefault(); -//objDragAndDrop.css('border', '2px dotted #0B85A1'); -}); -$(document).on('drop', function (e){ - e.stopPropagation(); - e.preventDefault(); -}); -//파일 드래그앤드롭 종료 - -function handleFileUpload(files,obj) //업로드 function -{ - _fileForm2 = []; //form file data 초기화 - - var limitsize = 50*1024*1024; //파일 제한 체크(50개, 50MB) - var limitcount = 1;//$("input[name=limitcount]").val()*1 ; - var fileNece = true; //첨부파일필수 - - - if($('#fileNece').length > 0){ - if('N'==$('#fileNece').val()){ - fileNece = false; - } - } - - //엑셀 및 TXT 파일만 업로드 할수 있도록 체크하기 - var fileNm = files[0].name; - fileExt = fileNm.split('.').pop().toLowerCase(); - - // IE11 대응 - if (fileExt != "") { - if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) { - alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.'); - return; - } - - for (var i = 0; i < files.length; i++) - { - var fd = new FormData(); - fd.append('file', files[i]); - var tmpObj = new Object(); - tmpObj.name = "file_" + _fileIdx; - tmpObj.fileObj = files[i]; - - _fileForm2.push(tmpObj); - sendFileToServer(fd, obj, files[i], _fileIdx); - _fileIdx++; - - var totalfileSize = 0; - $('.totalfileCount').text($('.item_file_size').length) ; - $('.item_file_size').each(function(){ - totalfileSize += $(this).val()*1 ; - }); - $('.totalfileSize').text(getStrFileSize(totalfileSize)) ; - } - } -} - -//드래그앤 드롭 엑셀 및 텍스트 파일 서버 전송 함수 -function sendFileToServer(formData, obj , fileObj, _fileIdx) -{ - var msg; - msg = "해당 첨부파일을 수정하시겠습니까?"; - var data = new FormData(document.msgForm); - _fileForm2.forEach(function(obj, idx) { - if (obj) data.append("file0", obj.fileObj); - }); - - var url = ""; - - // IE11 대응 - if (fileExt != "") { - if(fileExt == "xls" || fileExt == "xlsx"){ - url = "/web/mjon/fax/addr/sendExelFilePhoneNumAjax.do"; - }else if(fileExt == "txt"){ - url = "/web/mjon/fax/addr/sendTxtFilePhoneNumAjax.do"; - }else{ - alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.'); - return; - } - - //엑셀 데이터 변수에 자료가 있으면 지워준다. - if(excelAddr.length > 0){ - excelAddr = []; - } - - $.ajax({ - type: "POST", - enctype: 'multipart/form-data', - url: url, - data: data, - dataType:'json', - async: true, - processData: false, - contentType: false, - cache: false, - //timeout: 600000, - success: function (returnData, status) { - if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 - if(returnData.success){ - var data = returnData.data; - var message = returnData.message; - - if (message == "20000") { - alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."); - } - else { - if(data != null){ - var arr = []; // 넘어온 데이터를 받은 배열 변수 - $.each(data, function(i, item){ - arr.push({name: item.name, phone: item.phone, memo: item.memo}); - }); - - addPhoneInfo(arr); // 연락처를 처리해줄 함수 호출 - } - - //메세지가 있는 경우 알려주기 - if(message != '' && message != null) { - alert(returnData.message); - } - } - - }else{ - alert(returnData.message); - } - } else if(status== 'fail'){ - alert("저장에 실패하였습니다. !!"); - } - }, - error: function (e) { - alert("저장에 실패하였습니다."); - console.log("ERROR : ", e); - }, - beforeSend : function(xmlHttpRequest) { - //로딩창 show - $('.loading_layer').addClass('active'); - }, - complete : function(xhr, textStatus) { - //로딩창 hide - $('.loading_layer').removeClass('active'); - } - }); - } - -} - - //############################################################################################# //등록 //############################################################################################# @@ -613,7 +441,7 @@ function setSenderList_advc(){ sendBatch(); // 다음 배치 전송 } } else { - alert("오류 알림 : " + returnData.msg); + alert("오류 알림 : " + data.message); } } ,error: function (e) { diff --git a/src/main/webapp/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforExcel.jsp b/src/main/webapp/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforExcel.jsp index 6e16da09..9994d250 100644 --- a/src/main/webapp/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforExcel.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforExcel.jsp @@ -17,6 +17,9 @@ function addrGroupLoadAjax(){ +//############################################################################################# +//Tabulator +//############################################################################################# $(document).ready(function(){ // 파일 선택 버튼 클릭 이벤트 diff --git a/src/main/webapp/js/MJUtill.js b/src/main/webapp/js/MJUtill.js index 3dfe9d80..07c05c2a 100644 --- a/src/main/webapp/js/MJUtill.js +++ b/src/main/webapp/js/MJUtill.js @@ -58,8 +58,6 @@ function checkOnlyHpNum(str) { function checkFaxNum(str) { str = removeDash(str); var subNum = str.substring(0,3); - /*var regExp = /^(02[0-9]{1}|030|050|060|070|080|0[3-6]{1}[1-5]{1}|1[0-9]{1}[0-9]{1})$/; //지역번호(일반전화) 형식까지 체크해주는 정규식 - return regExp.test(subNum);*/ var regExp = /^(02|0[3-6][1-4]|030|050|060|070|080|1\d{2})$/; return regExp.test(subNum); }