이호영 이호영 2024-12-13
팩스 주소록 등록 속도개선
@319445f4835bbb2b65bb452ce59d3b4ee2a30a88
src/main/java/itn/let/fax/addr/service/FaxAddrVO.java
--- src/main/java/itn/let/fax/addr/service/FaxAddrVO.java
+++ src/main/java/itn/let/fax/addr/service/FaxAddrVO.java
@@ -35,6 +35,11 @@
 	
 	private String[] excelDownTitles;
 	
+	// 주소록 등록 batch 몇번째인지 확인
+	private int batchStart;
+	// 
+	private int dataTotCount;
+	
 	@SuppressWarnings("rawtypes")
 	private List addrIdList;
 	
@@ -286,6 +291,24 @@
 	public void setMoveAddrAllFlag(String moveAddrAllFlag) {
 		this.moveAddrAllFlag = moveAddrAllFlag;
 	}
+	
+
+	public int getBatchStart() {
+		return batchStart;
+	}
+
+	public void setBatchStart(int batchStart) {
+		this.batchStart = batchStart;
+	}
+	
+
+	public int getDataTotCount() {
+		return dataTotCount;
+	}
+
+	public void setDataTotCount(int dataTotCount) {
+		this.dataTotCount = dataTotCount;
+	}
 
 	public String getFieldValue(String field) {
 		if("addrPhoneNo".equals(field)) {
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
@@ -48,7 +48,6 @@
 
 	private static final String FAX_REGEX = "^(02\\d|03[1-3]|04[1-4]|05[1-5]|06[1-4]|030|050|060|070|080|1\\d{2})$";
 
-	
 	private static final Pattern FAX_PATTERN = Pattern.compile(FAX_REGEX);
 	
     private static final Charset EUC_KR = Charset.forName("EUC-KR");
@@ -393,23 +392,25 @@
 		}
 		
 		// step1 현재 주소록 갯수 조회
-		
-		// step1-1 회원별 주소록 전체 갯수 조회
-		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) {
-			return new StatusResponse(
-				HttpStatus.BAD_REQUEST
-				, "주소록은 총 100만개까지만 등록이 가능합니다."
-				, LocalDateTime.now()
-			);
+		// 배치 처음 돌때만 실행
+		if(faxAddrListVO.get(0).getBatchStart() < 1) {
+				
+			// step1-1 회원별 주소록 전체 갯수 조회
+			int faxAddrBefCnt = faxAddrDAO.selectFaxAddrTotalCount(faxAddrListVO.get(0));
+			int faxAddrNewCnt = faxAddrListVO.get(0).getDataTotCount();	//신규 추가할 주소록 갯수
+			int sumFaxAddrCnt = faxAddrBefCnt + faxAddrNewCnt;	
+			
+			System.out.println("faxAddrListVO.size() : "+ faxAddrListVO.size()); 
+			
+			// step1-2 총 갯수가 (주소록 갯수 + 신규 주소록)1000만건 체크
+			if(sumFaxAddrCnt > MAX_FAX_ADDR_CNT) {
+				return new StatusResponse(
+					HttpStatus.BAD_REQUEST
+					, "주소록은 총 100만개까지만 등록이 가능합니다."
+					, LocalDateTime.now()
+				);
+			}
 		}
-		
 		
 		// step3
 		// 		=> 팩스번호 빼고 바이트 체크해서 20byte만 짜르고 넣기
@@ -419,17 +420,22 @@
 		// 유효성 체크 및 하이픈 제거, 유효하지 않은 번호는 리스트에서 제거
 		// 나머지 필드들 20byte (euc-kr) 체크 후 넘으면 자르기
 		AtomicInteger invalid = new AtomicInteger(0); // 스레드-안전(thread-safe)하게 정수 값을 업데이트할 수 있는 기능을 제공
-		faxAddrListVO.removeIf(faxAddr -> {
-			String phoneNo = faxAddr.getAddrPhoneNo();
+
+//		log.info(" ++ before faxAddrListVO.size() :: [{}]", faxAddrListVO.size());
+		
+		/*faxAddrListVO.removeIf(faxAddr -> {
+			String phoneNo = faxAddr.getAddrPhoneNo().replaceAll("[^0-9]", "");
 			if (isValidFaxNumber(phoneNo)) {
 				faxAddr.setAddrPhoneNo(phoneNo); // 하이픈이 제거된 유효한 번호 설정
 				trimFieldsBytes(faxAddr); // 다른 필드들에 대한 20바이트 체크 및 자르기
 				return false; // 유효한 번호는 제거하지 않음
 			} else{
+				System.out.println(" + else phoneNo : "+ phoneNo);
 		        invalid.getAndIncrement(); // 유효하지 않은 번호 개수 증가
 				return true; // 유효하지 않은 번호는 제거
 			}
-        });
+        });*/
+//		log.info(" ++ after faxAddrListVO.size() :: [{}]", faxAddrListVO.size());
 		
 		long endTime = System.currentTimeMillis();
 		double executionTime = (endTime - startTime) / 1000.0;
@@ -535,7 +541,7 @@
             return false;
         }
 		// 앞 3자리 추출
-		String subNumber = faxNo.length() >= 3 ? faxNo.substring(0, 3) : faxNo;
+		String subNumber = faxNo.substring(0, 3);
         Matcher matcher = FAX_PATTERN.matcher(subNumber);
         return matcher.matches();
     }
src/main/java/itn/let/fax/addr/web/FaxAddrRestController.java
--- src/main/java/itn/let/fax/addr/web/FaxAddrRestController.java
+++ src/main/java/itn/let/fax/addr/web/FaxAddrRestController.java
@@ -5,6 +5,7 @@
 
 import javax.annotation.Resource;
 
+import org.apache.commons.vfs2.util.DelegatingFileSystemOptionsBuilder;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.ui.ModelMap;
@@ -74,6 +75,7 @@
 							)
 					);
 		}
+		
 		return ResponseEntity.ok().body(faxAddrService.faxAddrMassInsertByTempAjax_advc(faxAddrListVO, userId));
 	} 
 }
(No newline at end of file)
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
@@ -389,7 +389,7 @@
 	  
     var $objTabul = fn_utils_getTabulator();
     var dataToSend = $objTabul.getData();
-    console.log('dataToSend : ', dataToSend);
+    var dataTotCount = $objTabul.getDataCount(); // 총 갯수
     var addrGrpIdInfo = $(tabluC+" #addrGrpIdInfo option:selected").val();
     var addrGrpNmInfo = $(tabluC+" #addrGrpNm").val();
 
@@ -411,6 +411,8 @@
 			var updateData = batchData.map(row => {
 	            row.addrGrpId = addrGrpIdInfo;
 	            row.addrGrpNm = addrGrpNmInfo;
+	            row.batchStart = start;
+	            row.dataTotCount = dataTotCount;
 	            return row;
 	        });
 			
Add a comment
List