팩스 주소록 등록 속도개선

This commit is contained in:
hehihoho3@gmail.com 2024-12-13 16:19:20 +09:00
parent 43fd87bf01
commit 319445f483
4 changed files with 55 additions and 22 deletions

View File

@ -35,6 +35,11 @@ public class FaxAddrVO extends ComDefaultVO{
private String[] excelDownTitles;
// 주소록 등록 batch 몇번째인지 확인
private int batchStart;
//
private int dataTotCount;
@SuppressWarnings("rawtypes")
private List addrIdList;
@ -286,6 +291,24 @@ public class FaxAddrVO extends ComDefaultVO{
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)) {

View File

@ -48,7 +48,6 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
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,24 +392,26 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
}
// 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 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
// 유효성 체크 하이픈 제거, 유효하지 않은 번호는 리스트에서 제거
// 나머지 필드들 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 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
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();
}

View File

@ -5,6 +5,7 @@ import java.util.List;
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 @@ public class FaxAddrRestController {
)
);
}
return ResponseEntity.ok().body(faxAddrService.faxAddrMassInsertByTempAjax_advc(faxAddrListVO, userId));
}
}

View File

@ -389,7 +389,7 @@ function setSenderList_advc(){
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 @@ function setSenderList_advc(){
var updateData = batchData.map(row => {
row.addrGrpId = addrGrpIdInfo;
row.addrGrpNm = addrGrpNmInfo;
row.batchStart = start;
row.dataTotCount = dataTotCount;
return row;
});