diff --git a/src/main/java/kcc/kccadr/adrpr/web/AdrPrsctLinkController.java b/src/main/java/kcc/kccadr/adrpr/web/AdrPrsctLinkController.java index 1fcb13ff..9e0b5777 100644 --- a/src/main/java/kcc/kccadr/adrpr/web/AdrPrsctLinkController.java +++ b/src/main/java/kcc/kccadr/adrpr/web/AdrPrsctLinkController.java @@ -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> hashMapList = new ArrayList>(); + //엑셀 확장자에 따른 처리 로직 분리 - //확장자가 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(); - - int totRowDataCnt = 0; - for(int r=1; r 20001) { + if(Ext.equals("xls")) { + HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); + HSSFSheet sheet = workbook.getSheetAt(0); + + if(sheet.getLastRowNum() > 20001) { // errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; jr.setSuccess(false); jr.setMessage(errMessage); return jr; } - List> hashMapList = new ArrayList>(); 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 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()){ //숫자타임을 문자로 변환 @@ -327,8 +320,8 @@ public class AdrPrsctLinkController { } cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; } - - // 항목 체크 + + // 항목 체크 Start if(j == 0) { //배당일 if(getItemChk("dividendDate", cellValue) && errSts) { @@ -416,7 +409,165 @@ public class AdrPrsctLinkController { errSts = false; 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 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 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) { @@ -427,39 +578,41 @@ public class AdrPrsctLinkController { //jr.setData(hashMapList); jr.setSuccess(true); - - if(errItemCnt > 0) { - jr.setMessage("유효하지 않은 형식의 데이터가 " + errItemCnt +"건입니다.\n" + errItemLine.trim()); - }else { - jr.setMessage(""); - - //Step1. 데이터 변환 - List adrPrsctLinkList = new ArrayList(); - // List foreach 문 - for (HashMap item : hashMapList) { - AdrPrsctLinkVO adrPrsctLinkVO = new AdrPrsctLinkVO(); - adrPrsctLinkVO.setDividendDate(item.get("dividendDate")); - adrPrsctLinkVO.setPrsctNo(item.get("prsctNo")); - adrPrsctLinkVO.setPrsctAdrNo(item.get("prsctAdrNo")); - adrPrsctLinkVO.setPlntfNm(item.get("plntfNm")); - adrPrsctLinkVO.setPlntfPhone(item.get("plntfPhone")); - adrPrsctLinkVO.setDfndnNm(item.get("dfndnNm")); - adrPrsctLinkVO.setDfndnPhone(item.get("dfndnPhone")); - adrPrsctLinkVO.setPrsctCn(item.get("prsctCn")); - adrPrsctLinkVO.setFrstRegisterId(loginVO.getUniqId()); - adrPrsctLinkVO.setLastUpdusrId(loginVO.getUniqId()); - - //List Add - adrPrsctLinkList.add(adrPrsctLinkVO); - } - - //Step2. 데이터 저장 - adrPrsctLinkService.adrPrsctLinkListInsert(adrPrsctLinkList); - } + } //xlsx 처리 끝 + + // 데이터 저장 START + if(errItemCnt > 0) { + jr.setMessage("유효하지 않은 형식의 데이터가 " + errItemCnt +"건입니다.\n" + errItemLine.trim()); + }else { + jr.setMessage(""); + + //Step1. 데이터 변환 + List adrPrsctLinkList = new ArrayList(); + // List foreach 문 + for (HashMap item : hashMapList) { + AdrPrsctLinkVO adrPrsctLinkVO = new AdrPrsctLinkVO(); + adrPrsctLinkVO.setDividendDate(item.get("dividendDate")); + adrPrsctLinkVO.setPrsctNo(item.get("prsctNo")); + adrPrsctLinkVO.setPrsctAdrNo(item.get("prsctAdrNo")); + adrPrsctLinkVO.setPlntfNm(item.get("plntfNm")); + adrPrsctLinkVO.setPlntfPhone(item.get("plntfPhone")); + adrPrsctLinkVO.setDfndnNm(item.get("dfndnNm")); + adrPrsctLinkVO.setDfndnPhone(item.get("dfndnPhone")); + adrPrsctLinkVO.setPrsctCn(item.get("prsctCn")); + adrPrsctLinkVO.setFrstRegisterId(loginVO.getUniqId()); + adrPrsctLinkVO.setLastUpdusrId(loginVO.getUniqId()); + + //List Add + adrPrsctLinkList.add(adrPrsctLinkVO); + } + + //Step2. 데이터 저장 + adrPrsctLinkService.adrPrsctLinkListInsert(adrPrsctLinkList); + } + // 데이터 저장 END } - } } else {