검찰연계 엑셀업로드 기능 추가

This commit is contained in:
itn 2023-10-25 12:39:30 +09:00
parent c31f9eff61
commit 428796741e

View File

@ -8,6 +8,10 @@ import java.util.Locale;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
@ -269,56 +273,45 @@ public class AdrPrsctLinkController {
int errItemCnt = 0;
String errItemLine = "";
List<HashMap<String, String>> hashMapList = new ArrayList<HashMap<String, String>>();
//엑셀 확장자에 따른 처리 로직 분리
//확장자가 xlsx
if(Ext.equals("xlsx")) {
OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream());
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기
opcPackage.close();
if(Ext.equals("xls")) {
HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream());
HSSFSheet sheet = workbook.getSheetAt(0);
int totRowDataCnt = 0;
for(int r=1; r<sheet.getPhysicalNumberOfRows(); r++) {
XSSFRow tmpRow = sheet.getRow(r);
XSSFCell cell = null;
if(tmpRow.getCell(1) != null) {
cell = tmpRow.getCell(1); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5
if(cell != null && !cell.toString().trim().equals("")) {
totRowDataCnt++;
}
}
}
if(totRowDataCnt > 20001) {
if(sheet.getLastRowNum() > 20001) { //
errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
jr.setSuccess(false);
jr.setMessage(errMessage);
return jr;
}
List<HashMap<String, String>> hashMapList = new ArrayList<HashMap<String, String>>();
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
XSSFRow row = sheet.getRow(i); //열읽기
HSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap<String, String> hashMap = new HashMap<>();
// 행의 두번째 (이름부터 받아오기)
XSSFCell cell = null;
HSSFCell cell = null;
boolean errSts = true;
for(int j = 0 ; j <= 7; j++){ //행읽기(6행까지나 2행까지만 필요)
for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요)
cellValue = "";
cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5
if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
//System.out.println("Cell 데이터가 없습니다.");
if(j == 1) {
if (sheet.getLastRowNum() == i) {
continue;
}
//errPhoneCnt++;
//errSts = false;
break;
}
}
if(null != cell){
switch(cell.getCellType()){ //숫자타임을 문자로 변환
@ -328,7 +321,7 @@ public class AdrPrsctLinkController {
cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ;
}
// 항목 체크
// 항목 체크 Start
if(j == 0) {
//배당일
if(getItemChk("dividendDate", cellValue) && errSts) {
@ -417,6 +410,164 @@ public class AdrPrsctLinkController {
break;
}
}
// 항목 체크 End
}
if(errSts) {
hashMapList.add(hashMap);
}
}
//jr.setData(hashMapList);
jr.setSuccess(true);
}
else {
//확장자가 xlsx
OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream());
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기
opcPackage.close();
int totRowDataCnt = 0;
for(int r=1; r<sheet.getPhysicalNumberOfRows(); r++) {
XSSFRow tmpRow = sheet.getRow(r);
XSSFCell cell = null;
if(tmpRow.getCell(1) != null) {
cell = tmpRow.getCell(1); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5
if(cell != null && !cell.toString().trim().equals("")) {
totRowDataCnt++;
}
}
}
if(totRowDataCnt > 20001) {
errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.";
jr.setSuccess(false);
jr.setMessage(errMessage);
return jr;
}
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
XSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap<String, String> hashMap = new HashMap<>();
// 행의 두번째 (이름부터 받아오기)
XSSFCell cell = null;
boolean errSts = true;
for(int j = 0 ; j <= 7; j++){ //행읽기(6행까지나 2행까지만 필요)
cellValue = "";
cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5
if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면
if(j == 1) {
if (sheet.getLastRowNum() == i) {
continue;
}
break;
}
}
if(null != cell){
switch(cell.getCellType()){ //숫자타임을 문자로 변환
case Cell.CELL_TYPE_NUMERIC:
cell.setCellType(Cell.CELL_TYPE_STRING);
}
cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ;
}
// 항목 체크 Start
if(j == 0) {
//배당일
if(getItemChk("dividendDate", cellValue) && errSts) {
hashMap.put("dividendDate", cellValue);
}else {
errItemCnt++;
errItemLine += (i+1) + "행(배당일) ";
errSts = false;
break;
}
}
if(j == 1) {
//본사건번호
if(getItemChk("prsctNo", cellValue) && errSts) {
hashMap.put("prsctNo", cellValue);
}else {
errItemCnt++;
errItemLine += (i+1) + "행(본사건번호) ";
errSts = false;
break;
}
}
if(j == 2) {
//조정사건번호
if(getItemChk("prsctAdrNo", cellValue) && errSts) {
hashMap.put("prsctAdrNo", cellValue);
}else {
errItemCnt++;
errItemLine += (i+1) + "행(조정사건번호) ";
errSts = false;
break;
}
}
if(j == 3) {
//원고 이름
if(getItemChk("plntfNm", cellValue) && errSts) {
hashMap.put("plntfNm", cellValue);
}else {
errItemCnt++;
errItemLine += (i+1) + "행(원고 이름) ";
errSts = false;
break;
}
}
if(j == 4) {
//원고 연락처
if(getItemChk("plntfPhone", cellValue) && errSts) {
hashMap.put("plntfPhone", cellValue);
}else {
errItemCnt++;
errItemLine += (i+1) + "행(원고 연락처) ";
errSts = false;
break;
}
}
if(j == 5) {
//피고 이름
if(getItemChk("dfndnNm", cellValue) && errSts) {
hashMap.put("dfndnNm", cellValue);
}else {
errItemCnt++;
errItemLine += (i+1) + "행(피고 이름) ";
errSts = false;
break;
}
}
if(j == 6) {
//피고 연락처
if(getItemChk("dfndnPhone", cellValue) && errSts) {
hashMap.put("dfndnPhone", cellValue);
}else {
errItemCnt++;
errItemLine += (i+1) + "행(피고 연락처) ";
errSts = false;
break;
}
}
if(j == 7) {
//사건내용
if(getItemChk("prsctCn", cellValue) && errSts) {
hashMap.put("prsctCn", cellValue);
}else {
errItemCnt++;
errItemLine += (i+1) + "행(사건내용) ";
errSts = false;
break;
}
}
// 항목 체크 End
}
if(errSts) {
@ -428,6 +579,9 @@ public class AdrPrsctLinkController {
//jr.setData(hashMapList);
jr.setSuccess(true);
} //xlsx 처리
// 데이터 저장 START
if(errItemCnt > 0) {
jr.setMessage("유효하지 않은 형식의 데이터가 " + errItemCnt +"건입니다.\n" + errItemLine.trim());
}else {
@ -456,10 +610,9 @@ public class AdrPrsctLinkController {
//Step2. 데이터 저장
adrPrsctLinkService.adrPrsctLinkListInsert(adrPrsctLinkList);
}
} //xlsx 처리
// 데이터 저장 END
}
}
}
else {