팩스 벨류체크 및 엑셀파일 드래그앤드롭
This commit is contained in:
parent
8d09a13a22
commit
72bff1552f
@ -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));
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -17,6 +17,9 @@ function addrGroupLoadAjax(){
|
||||
|
||||
|
||||
|
||||
//#############################################################################################
|
||||
//Tabulator
|
||||
//#############################################################################################
|
||||
|
||||
$(document).ready(function(){
|
||||
// 파일 선택 버튼 클릭 이벤트
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user