이호영 이호영 2024-12-11
팩스 벨류체크 및 엑셀파일 드래그앤드롭
@72bff1552fae329a889bad9ba4175ab5ba3120eb
src/main/java/itn/let/fax/addr/service/impl/FaxAddrServiceImpl.java
--- src/main/java/itn/let/fax/addr/service/impl/FaxAddrServiceImpl.java
+++ src/main/java/itn/let/fax/addr/service/impl/FaxAddrServiceImpl.java
@@ -26,7 +26,9 @@
 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 @@
 	@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<FaxAddrVO> selectFaxAddrList(FaxAddrVO addrVO) throws Exception {
 		return faxAddrDAO.selectFaxAddrList(addrVO);
@@ -385,7 +385,7 @@
 		if(faxAddrListVO.size() > MAX_SINGLE_ENTRY_CNT) {
 			return new StatusResponse(
 				HttpStatus.BAD_REQUEST
-				, "주소록은 한번에 100만개까지만 등록이 가능합니다."
+				, "주소록은 한번에 30만개까지만 등록이 가능합니다."
 				, LocalDateTime.now()
 			);
 		}
@@ -396,6 +396,8 @@
 		int faxAddrBefCnt = faxAddrDAO.selectFaxAddrTotalCount(faxAddrListVO.get(0));
 		int faxAddrNewCnt = faxAddrListVO.size();	//신규 추가할 주소록 갯수
 		int sumFaxAddrCnt = faxAddrBefCnt + faxAddrNewCnt;	
+		
+		System.out.println("faxAddrListVO.size() : "+ faxAddrListVO.size()); 
 		
 		// step1-2 총 갯수가 (주소록 갯수 + 신규 주소록)1000만건 체크
 		if(sumFaxAddrCnt > MAX_FAX_ADDR_CNT) {
@@ -439,16 +441,12 @@
 		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 @@
 	        if(faxAddrListVO.size() > 0) {
 	    		// 등록 
 	        	faxAddrDAO.insertFaxAddrList(faxAddrListVO);
+	        }else {
+
+				return new StatusResponse(
+						HttpStatus.BAD_REQUEST
+						, "오류가 발생하였습니다."
+						, ""
+						);
 	        }
 
 		} catch (Exception e) {
@@ -494,15 +499,18 @@
         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 @@
         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));
src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp
--- src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrList.jsp
@@ -226,178 +226,6 @@
 }
 
 //#############################################################################################
-//파일업로드 드래그앤 드롭
-//#############################################################################################
-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 @@
                             sendBatch(); // 다음 배치 전송
                         }
 					} else {
-						alert("오류 알림 : " + returnData.msg);
+						alert("오류 알림 : " + data.message);
 					}
 				}
 				,error: function (e) { 
src/main/webapp/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforExcel.jsp
--- src/main/webapp/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/fax/addr/include/FaxAddrListforExcel.jsp
@@ -17,6 +17,9 @@
 
 
 
+//#############################################################################################
+//Tabulator
+//#############################################################################################
 
 $(document).ready(function(){
     // 파일 선택 버튼 클릭 이벤트
src/main/webapp/js/MJUtill.js
--- src/main/webapp/js/MJUtill.js
+++ src/main/webapp/js/MJUtill.js
@@ -58,8 +58,6 @@
 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);
 }
Add a comment
List