팩스 벨류체크 및 엑셀파일 드래그앤드롭
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.fax.addr.service.FaxAddrVO;
|
||||||
import itn.let.mail.service.StatusResponse;
|
import itn.let.mail.service.StatusResponse;
|
||||||
import itn.let.mjo.addr.service.AddrVO;
|
import itn.let.mjo.addr.service.AddrVO;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@Service("FaxAddrService")
|
@Service("FaxAddrService")
|
||||||
public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAddrService{
|
public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAddrService{
|
||||||
|
|
||||||
@ -44,15 +46,13 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
|
|||||||
private EgovIdGnrService idgenAddrTransHistId;
|
private EgovIdGnrService idgenAddrTransHistId;
|
||||||
|
|
||||||
|
|
||||||
private static final String FAX_REGEX = "^(0\\d{1,2})-(\\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 String FAX_M_REGEX = "^(050\\d{1})-(\\d{3,4})-(\\d{4})$";
|
|
||||||
private static final Pattern FAX_PATTERN = Pattern.compile(FAX_REGEX);
|
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 Charset EUC_KR = Charset.forName("EUC-KR");
|
||||||
|
|
||||||
private static final int MAX_SINGLE_ENTRY_CNT = 350000;
|
private static final int MAX_SINGLE_ENTRY_CNT = 300000;
|
||||||
private static final int MAX_FAX_ADDR_CNT = 10000000; // 팩스 주소록 등록 최대 수량
|
private static final int MAX_FAX_ADDR_CNT = 1000000; // 팩스 주소록 등록 최대 수량
|
||||||
|
|
||||||
public List<FaxAddrVO> selectFaxAddrList(FaxAddrVO addrVO) throws Exception {
|
public List<FaxAddrVO> selectFaxAddrList(FaxAddrVO addrVO) throws Exception {
|
||||||
return faxAddrDAO.selectFaxAddrList(addrVO);
|
return faxAddrDAO.selectFaxAddrList(addrVO);
|
||||||
@ -385,7 +385,7 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
|
|||||||
if(faxAddrListVO.size() > MAX_SINGLE_ENTRY_CNT) {
|
if(faxAddrListVO.size() > MAX_SINGLE_ENTRY_CNT) {
|
||||||
return new StatusResponse(
|
return new StatusResponse(
|
||||||
HttpStatus.BAD_REQUEST
|
HttpStatus.BAD_REQUEST
|
||||||
, "주소록은 한번에 100만개까지만 등록이 가능합니다."
|
, "주소록은 한번에 30만개까지만 등록이 가능합니다."
|
||||||
, LocalDateTime.now()
|
, LocalDateTime.now()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -397,6 +397,8 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
|
|||||||
int faxAddrNewCnt = faxAddrListVO.size(); //신규 추가할 주소록 갯수
|
int faxAddrNewCnt = faxAddrListVO.size(); //신규 추가할 주소록 갯수
|
||||||
int sumFaxAddrCnt = faxAddrBefCnt + faxAddrNewCnt;
|
int sumFaxAddrCnt = faxAddrBefCnt + faxAddrNewCnt;
|
||||||
|
|
||||||
|
System.out.println("faxAddrListVO.size() : "+ faxAddrListVO.size());
|
||||||
|
|
||||||
// step1-2 총 갯수가 (주소록 갯수 + 신규 주소록)1000만건 체크
|
// step1-2 총 갯수가 (주소록 갯수 + 신규 주소록)1000만건 체크
|
||||||
if(sumFaxAddrCnt > MAX_FAX_ADDR_CNT) {
|
if(sumFaxAddrCnt > MAX_FAX_ADDR_CNT) {
|
||||||
return new StatusResponse(
|
return new StatusResponse(
|
||||||
@ -439,16 +441,12 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
|
|||||||
AtomicInteger invalid = new AtomicInteger(0); // 스레드-안전(thread-safe)하게 정수 값을 업데이트할 수 있는 기능을 제공
|
AtomicInteger invalid = new AtomicInteger(0); // 스레드-안전(thread-safe)하게 정수 값을 업데이트할 수 있는 기능을 제공
|
||||||
faxAddrListVO.removeIf(faxAddr -> {
|
faxAddrListVO.removeIf(faxAddr -> {
|
||||||
String phoneNo = faxAddr.getAddrPhoneNo();
|
String phoneNo = faxAddr.getAddrPhoneNo();
|
||||||
|
log.info(" + phoneNo :: [{}]", phoneNo);
|
||||||
if (isValidFaxNumber(phoneNo)) {
|
if (isValidFaxNumber(phoneNo)) {
|
||||||
faxAddr.setAddrPhoneNo(phoneNo); // 하이픈이 제거된 유효한 번호 설정
|
faxAddr.setAddrPhoneNo(phoneNo); // 하이픈이 제거된 유효한 번호 설정
|
||||||
trimFieldsBytes(faxAddr); // 다른 필드들에 대한 20바이트 체크 및 자르기
|
trimFieldsBytes(faxAddr); // 다른 필드들에 대한 20바이트 체크 및 자르기
|
||||||
return false; // 유효한 번호는 제거하지 않음
|
return false; // 유효한 번호는 제거하지 않음
|
||||||
} else if (isValidMFaxNumber(phoneNo)) {
|
} else{
|
||||||
faxAddr.setAddrPhoneNo(phoneNo); // 하이픈이 제거된 유효한 번호 설정
|
|
||||||
trimFieldsBytes(faxAddr); // 다른 필드들에 대한 20바이트 체크 및 자르기
|
|
||||||
return false; // 유효한 번호는 제거하지 않음
|
|
||||||
}else{
|
|
||||||
invalid.getAndIncrement(); // 유효하지 않은 번호 개수 증가
|
invalid.getAndIncrement(); // 유효하지 않은 번호 개수 증가
|
||||||
return true; // 유효하지 않은 번호는 제거
|
return true; // 유효하지 않은 번호는 제거
|
||||||
}
|
}
|
||||||
@ -465,6 +463,13 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
|
|||||||
if(faxAddrListVO.size() > 0) {
|
if(faxAddrListVO.size() > 0) {
|
||||||
// 등록
|
// 등록
|
||||||
faxAddrDAO.insertFaxAddrList(faxAddrListVO);
|
faxAddrDAO.insertFaxAddrList(faxAddrListVO);
|
||||||
|
}else {
|
||||||
|
|
||||||
|
return new StatusResponse(
|
||||||
|
HttpStatus.BAD_REQUEST
|
||||||
|
, "오류가 발생하였습니다."
|
||||||
|
, ""
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -494,10 +499,13 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
|
|||||||
System.out.println(formattedDateTime);
|
System.out.println(formattedDateTime);
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("faxAddrListVO.size() : "+ faxAddrListVO.size());
|
||||||
|
|
||||||
|
|
||||||
String message = "저장에 성공했습니다.\n저장 : " + faxAddrListVO.size() + "건"
|
String message = "저장에 성공했습니다.\n저장 : " + faxAddrListVO.size() + "건"
|
||||||
+", INERT 총 시간 : " + executionTime+ "초"
|
+", INERT 총 시간 : " + executionTime+ "초"
|
||||||
+", 현재시간 : " + formattedDateTime;
|
+", 현재시간 : " + formattedDateTime;
|
||||||
|
System.out.println("++ message : "+ message);
|
||||||
return new StatusResponse(
|
return new StatusResponse(
|
||||||
HttpStatus.OK
|
HttpStatus.OK
|
||||||
, message
|
, message
|
||||||
@ -520,17 +528,12 @@ public class FaxAddrServiceImpl extends EgovAbstractServiceImpl implements FaxAd
|
|||||||
if (faxNo == null || faxNo.isEmpty()) {
|
if (faxNo == null || faxNo.isEmpty()) {
|
||||||
return false;
|
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();
|
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) {
|
public static void trimFieldsBytes(FaxAddrVO faxAddr) {
|
||||||
faxAddr.setAddrNm(trimToBytes(faxAddr.getAddrNm(), 20));
|
faxAddr.setAddrNm(trimToBytes(faxAddr.getAddrNm(), 20));
|
||||||
|
|||||||
@ -225,178 +225,6 @@ function getStrFileSize(filesize){
|
|||||||
return sizeStr;
|
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(); // 다음 배치 전송
|
sendBatch(); // 다음 배치 전송
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
alert("오류 알림 : " + returnData.msg);
|
alert("오류 알림 : " + data.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
,error: function (e) {
|
,error: function (e) {
|
||||||
|
|||||||
@ -17,6 +17,9 @@ function addrGroupLoadAjax(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//#############################################################################################
|
||||||
|
//Tabulator
|
||||||
|
//#############################################################################################
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
// 파일 선택 버튼 클릭 이벤트
|
// 파일 선택 버튼 클릭 이벤트
|
||||||
|
|||||||
@ -58,8 +58,6 @@ function checkOnlyHpNum(str) {
|
|||||||
function checkFaxNum(str) {
|
function checkFaxNum(str) {
|
||||||
str = removeDash(str);
|
str = removeDash(str);
|
||||||
var subNum = str.substring(0,3);
|
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})$/;
|
var regExp = /^(02|0[3-6][1-4]|030|050|060|070|080|1\d{2})$/;
|
||||||
return regExp.test(subNum);
|
return regExp.test(subNum);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user