팩스 벨류체크 및 엑셀파일 드래그앤드롭

This commit is contained in:
hehihoho3@gmail.com 2024-12-11 11:53:15 +09:00
parent 8d09a13a22
commit 72bff1552f
4 changed files with 30 additions and 198 deletions

View File

@ -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<FaxAddrVO> 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));

View File

@ -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) {

View File

@ -17,6 +17,9 @@ function addrGroupLoadAjax(){
//#############################################################################################
//Tabulator
//#############################################################################################
$(document).ready(function(){
// 파일 선택 버튼 클릭 이벤트

View File

@ -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);
}