관리자 > 기소유예 엑셀 등록 진행중

This commit is contained in:
hylee 2024-01-09 18:07:34 +09:00
parent b999a0b7c1
commit f19109e26f
8 changed files with 953 additions and 291 deletions

View File

@ -1,81 +1,83 @@
package kcc.com.cmm.service;
import java.util.List;
import java.util.Map;
import kcc.com.cmm.ComDefaultCodeVO;
/**
*
* 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기 위한 서비스 인터페이스
* @author 공통서비스 개발팀 이삼섭
* @since 2009.04.01
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.03.11 이삼섭 최초 생성
*
* </pre>
*/
public interface EgovCmmUseService {
/**
* 공통코드를 조회한다.
*
* @param vo
* @return List(코드)
* @throws Exception
*/
public List<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception;
/**
* 공통코드를 조회한다.(by String codeId)
*
* @param String codeId
* @return List(코드)
* @throws Exception
*/
public List<CmmnDetailCode> selectCmmCodeDetail(String codeId) throws Exception;
/**
* ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다.
*
* @param voList
* @return Map(코드)
* @throws Exception
*/
public Map<String, List<CmmnDetailCode>> selectCmmCodeDetails(List<?> voList) throws Exception;
/**
* 조직정보를 코드형태로 리턴한다.
*
* @param 조회조건정보 vo
* @return 조직정보 List
* @throws Exception
*/
public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception;
/**
* 그룹정보를 코드형태로 리턴한다.
*
* @param 조회조건정보 vo
* @return 그룹정보 List
* @throws Exception
*/
public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception;
public CmmnDetailCode selectCmmCodeDetailValue(ComDefaultCodeVO vo) ;
public String selectCmmCodeDetailCodeValue(ComDefaultCodeVO vo);
public String selectCmmCodeDetailCodeValueOnlyName(ComDefaultCodeVO vo);
public List<CmmnDetailCode> selectCmmCodeDetailOrderByCode(ComDefaultCodeVO codeParam);
}
package kcc.com.cmm.service;
import java.util.List;
import java.util.Map;
import kcc.com.cmm.ComDefaultCodeVO;
/**
*
* 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기 위한 서비스 인터페이스
* @author 공통서비스 개발팀 이삼섭
* @since 2009.04.01
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.03.11 이삼섭 최초 생성
*
* </pre>
*/
public interface EgovCmmUseService {
/**
* 공통코드를 조회한다.
*
* @param vo
* @return List(코드)
* @throws Exception
*/
public List<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception;
/**
* 공통코드를 조회한다.(by String codeId)
*
* @param String codeId
* @return List(코드)
* @throws Exception
*/
public List<CmmnDetailCode> selectCmmCodeDetail(String codeId) throws Exception;
/**
* ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다.
*
* @param voList
* @return Map(코드)
* @throws Exception
*/
public Map<String, List<CmmnDetailCode>> selectCmmCodeDetails(List<?> voList) throws Exception;
/**
* 조직정보를 코드형태로 리턴한다.
*
* @param 조회조건정보 vo
* @return 조직정보 List
* @throws Exception
*/
public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception;
/**
* 그룹정보를 코드형태로 리턴한다.
*
* @param 조회조건정보 vo
* @return 그룹정보 List
* @throws Exception
*/
public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception;
public CmmnDetailCode selectCmmCodeDetailValue(ComDefaultCodeVO vo) ;
public String selectCmmCodeDetailCodeValue(ComDefaultCodeVO vo);
public String selectCmmCodeDetailCodeValueOnlyName(ComDefaultCodeVO vo);
public List<CmmnDetailCode> selectCmmCodeDetailOrderByCode(ComDefaultCodeVO codeParam);
String selectCmmCodeDetailCode(ComDefaultCodeVO vo);
}

View File

@ -1,145 +1,157 @@
package kcc.com.cmm.service.impl;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import kcc.com.cmm.ComDefaultCodeVO;
import kcc.com.cmm.service.CmmnDetailCode;
import kcc.com.cmm.service.EgovCmmUseService;
/**
* @Class Name : EgovCmmUseServiceImpl.java
* @Description : 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기위한 서비스 구현 클래스
* @Modification Information
*
* 수정일 수정자 수정내용
* ------- ------- -------------------
* 2009. 3. 11. 이삼섭
*
* @author 공통 서비스 개발팀 이삼섭
* @since 2009. 3. 11.
* @version
* @see
*
*/
@Service("EgovCmmUseService")
public class EgovCmmUseServiceImpl extends EgovAbstractServiceImpl implements EgovCmmUseService {
@Resource(name = "cmmUseDAO")
private CmmUseDAO cmmUseDAO;
/**
* 공통코드를 조회한다.
*
* @param vo
* @return
* @throws Exception
*/
@Override
public List<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception {
return cmmUseDAO.selectCmmCodeDetail(vo);
}
/**
* 공통코드를 조회한다.(by String codeId)
*
* @param String codeId
* @return
* @throws Exception
*/
@Override
public List<CmmnDetailCode> selectCmmCodeDetail(String codeId) throws Exception {
ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO();
comDefaultCodeVO.setCodeId(codeId);
return cmmUseDAO.selectCmmCodeDetail(comDefaultCodeVO);
}
/**
* ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다.
*
* @param voList
* @return
* @throws Exception
*/
@Override
@SuppressWarnings("rawtypes")
public Map<String, List<CmmnDetailCode>> selectCmmCodeDetails(List voList) throws Exception {
ComDefaultCodeVO vo;
Map<String, List<CmmnDetailCode>> map = new HashMap<String, List<CmmnDetailCode>>();
Iterator<?> iter = voList.iterator();
while (iter.hasNext()) {
vo = (ComDefaultCodeVO) iter.next();
map.put(vo.getCodeId(), cmmUseDAO.selectCmmCodeDetail(vo));
}
return map;
}
/**
* 조직정보를 코드형태로 리턴한다.
*
* @param 조회조건정보 vo
* @return 조직정보 List
* @throws Exception
*/
@Override
public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception {
return cmmUseDAO.selectOgrnztIdDetail(vo);
}
/**
* 그룹정보를 코드형태로 리턴한다.
*
* @param 조회조건정보 vo
* @return 그룹정보 List
* @throws Exception
*/
@Override
public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception {
return cmmUseDAO.selectGroupIdDetail(vo);
}
@Override
public CmmnDetailCode selectCmmCodeDetailValue(ComDefaultCodeVO vo) {
return cmmUseDAO.selectCmmCodeDetailValue(vo);
}
@Override
public String selectCmmCodeDetailCodeValue(ComDefaultCodeVO vo) {
String resultCodeNm = "";
if(StringUtils.isNotBlank(vo.getCodeId()) && StringUtils.isNotBlank(vo.getCode())){
CmmnDetailCode code = cmmUseDAO.selectCmmCodeDetailValue(vo);
if(code != null){
resultCodeNm = code.getCodeNm();
}
}
return resultCodeNm;
}
@Override
public String selectCmmCodeDetailCodeValueOnlyName(ComDefaultCodeVO vo) {
String resultCodeNm = "";
if(StringUtils.isNotBlank(vo.getCodeId()) && StringUtils.isNotBlank(vo.getCode())){
CmmnDetailCode code = cmmUseDAO.selectCmmCodeDetailValueOnlyName(vo);
if(code != null){
resultCodeNm = code.getCodeNm();
}
}
return resultCodeNm;
}
@Override
public List<CmmnDetailCode> selectCmmCodeDetailOrderByCode(ComDefaultCodeVO codeParam) {
// TODO Auto-generated method stub
return cmmUseDAO.selectCmmCodeDetailOrderByCode(codeParam);
}
}
package kcc.com.cmm.service.impl;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import kcc.com.cmm.ComDefaultCodeVO;
import kcc.com.cmm.service.CmmnDetailCode;
import kcc.com.cmm.service.EgovCmmUseService;
/**
* @Class Name : EgovCmmUseServiceImpl.java
* @Description : 공통코드등 전체 업무에서 공용해서 사용해야 하는 서비스를 정의하기위한 서비스 구현 클래스
* @Modification Information
*
* 수정일 수정자 수정내용
* ------- ------- -------------------
* 2009. 3. 11. 이삼섭
*
* @author 공통 서비스 개발팀 이삼섭
* @since 2009. 3. 11.
* @version
* @see
*
*/
@Service("EgovCmmUseService")
public class EgovCmmUseServiceImpl extends EgovAbstractServiceImpl implements EgovCmmUseService {
@Resource(name = "cmmUseDAO")
private CmmUseDAO cmmUseDAO;
/**
* 공통코드를 조회한다.
*
* @param vo
* @return
* @throws Exception
*/
@Override
public List<CmmnDetailCode> selectCmmCodeDetail(ComDefaultCodeVO vo) throws Exception {
return cmmUseDAO.selectCmmCodeDetail(vo);
}
/**
* 공통코드를 조회한다.(by String codeId)
*
* @param String codeId
* @return
* @throws Exception
*/
@Override
public List<CmmnDetailCode> selectCmmCodeDetail(String codeId) throws Exception {
ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO();
comDefaultCodeVO.setCodeId(codeId);
return cmmUseDAO.selectCmmCodeDetail(comDefaultCodeVO);
}
/**
* ComDefaultCodeVO의 리스트를 받아서 여러개의 코드 리스트를 맵에 담아서 리턴한다.
*
* @param voList
* @return
* @throws Exception
*/
@Override
@SuppressWarnings("rawtypes")
public Map<String, List<CmmnDetailCode>> selectCmmCodeDetails(List voList) throws Exception {
ComDefaultCodeVO vo;
Map<String, List<CmmnDetailCode>> map = new HashMap<String, List<CmmnDetailCode>>();
Iterator<?> iter = voList.iterator();
while (iter.hasNext()) {
vo = (ComDefaultCodeVO) iter.next();
map.put(vo.getCodeId(), cmmUseDAO.selectCmmCodeDetail(vo));
}
return map;
}
/**
* 조직정보를 코드형태로 리턴한다.
*
* @param 조회조건정보 vo
* @return 조직정보 List
* @throws Exception
*/
@Override
public List<CmmnDetailCode> selectOgrnztIdDetail(ComDefaultCodeVO vo) throws Exception {
return cmmUseDAO.selectOgrnztIdDetail(vo);
}
/**
* 그룹정보를 코드형태로 리턴한다.
*
* @param 조회조건정보 vo
* @return 그룹정보 List
* @throws Exception
*/
@Override
public List<CmmnDetailCode> selectGroupIdDetail(ComDefaultCodeVO vo) throws Exception {
return cmmUseDAO.selectGroupIdDetail(vo);
}
@Override
public CmmnDetailCode selectCmmCodeDetailValue(ComDefaultCodeVO vo) {
return cmmUseDAO.selectCmmCodeDetailValue(vo);
}
@Override
public String selectCmmCodeDetailCode(ComDefaultCodeVO vo) {
String resultCodeNm = "";
if(StringUtils.isNotBlank(vo.getCodeId()) && StringUtils.isNotBlank(vo.getCode())){
CmmnDetailCode code = cmmUseDAO.selectCmmCodeDetailValue(vo);
if(code != null){
resultCodeNm = code.getCode();
}
}
return resultCodeNm;
}
@Override
public String selectCmmCodeDetailCodeValue(ComDefaultCodeVO vo) {
String resultCodeNm = "";
if(StringUtils.isNotBlank(vo.getCodeId()) && StringUtils.isNotBlank(vo.getCode())){
CmmnDetailCode code = cmmUseDAO.selectCmmCodeDetailValue(vo);
if(code != null){
resultCodeNm = code.getCodeNm();
}
}
return resultCodeNm;
}
@Override
public String selectCmmCodeDetailCodeValueOnlyName(ComDefaultCodeVO vo) {
String resultCodeNm = "";
if(StringUtils.isNotBlank(vo.getCodeId()) && StringUtils.isNotBlank(vo.getCode())){
CmmnDetailCode code = cmmUseDAO.selectCmmCodeDetailValueOnlyName(vo);
if(code != null){
resultCodeNm = code.getCodeNm();
}
}
return resultCodeNm;
}
@Override
public List<CmmnDetailCode> selectCmmCodeDetailOrderByCode(ComDefaultCodeVO codeParam) {
// TODO Auto-generated method stub
return cmmUseDAO.selectCmmCodeDetailOrderByCode(codeParam);
}
}

View File

@ -49,6 +49,7 @@ public class CndtnTrgtMngVO extends ComDefaultVO implements Serializable {
private List<String> sspnIdtmtTrgtOrdList;
private String eduAplctOrd; //신청한 교육 순번
private String rmrks; //비고
@ -232,11 +233,33 @@ public class CndtnTrgtMngVO extends ComDefaultVO implements Serializable {
public void setEduAplctOrd(String eduAplctOrd) {
this.eduAplctOrd = eduAplctOrd;
}
public String getRmrks() {
return rmrks;
}
public void setRmrks(String rmrks) {
this.rmrks = rmrks;
}
@Override
public String toString() {
return "\n CndtnTrgtMngVO => \n"
+ " reqPnttm=[" + reqPnttm + "] // 요청 점수 시간\n"
+ ", vntYear=[" + vntYear + "] // 사건 년도\n"
+ ", vntNmbr=[" + vntNmbr + "] // 사건 번호\n"
+ ", cmptntAthrt=[" + cmptntAthrt + "] // 관할 권한\n"
+ ", dBirth=[" + dBirth + "] // 생년월일\n"
+ ", trgtNm=[" + trgtNm + "] // 대상자 이름\n"
+ ", sex=[" + sex + "] // 성별\n"
+ ", addr=[" + addr + "] // 주소\n"
+ ", post=[" + post + "] // 우편번호\n"
+ ", clphone=[" + clphone + "] // 핸드폰 번호\n"
+ ", reqNmbr=[" + reqNmbr + "] // 요청 번호\n"
+ ", prsctrNm=[" + prsctrNm + "] // 담당 검사 이름\n"
+ ", reqStateCd=[" + reqStateCd + "] // 요청 상태 코드\n"
+ ", eduStateCd=[" + eduStateCd + "] // 교육 상태 코드\n"
+ ", prcsAplctPrdOrdCmplt=[" + prcsAplctPrdOrdCmplt + "] // 처리 신청 기간 순서 완료\n"
+ ", rmrks=[" + rmrks + "] // 비고\n"
;
}
}

View File

@ -0,0 +1,117 @@
package kcc.ve.oprtn.cndtnSspnIdtmt.trgtMng.service.impl;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import kcc.com.cmm.ComDefaultCodeVO;
import kcc.com.cmm.service.EgovCmmUseService;
import kcc.ve.oprtn.cndtnSspnIdtmt.trgtMng.service.CndtnTrgtMngVO;
public class TrgtExcelReader {
private static final Logger LOGGER = LoggerFactory.getLogger(TrgtExcelReader.class);
private String filePathAndNm;
public TrgtExcelReader(String filePathAndNm) {
this.filePathAndNm = filePathAndNm;
}
public List<CndtnTrgtMngVO> readExcelFile() throws EncryptedDocumentException, InvalidFormatException {
try (FileInputStream fis = new FileInputStream(filePathAndNm)) {
Workbook workbook = WorkbookFactory.create(fis);
Sheet sheet = workbook.getSheetAt(0);
List<CndtnTrgtMngVO> cndtnTrgtInfoMngVOList = new ArrayList<>();
// 번째 (헤더) 건너뛰고 시작
for (int i = 3; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
if (row != null) {
CndtnTrgtMngVO cndtnTrgtMngVO = new CndtnTrgtMngVO();
// cndtnTrgtMngVO.set getCellValue(row.getCell(0));
cndtnTrgtMngVO.setReqPnttm(getCellValue(row.getCell(1))); // 의뢰번호
String vntInfo[] = getCellValue(row.getCell(2)).split("형제");
cndtnTrgtMngVO.setVntYear( vntInfo[0] ); // 사건번호
cndtnTrgtMngVO.setVntNmbr( vntInfo[1] ); // 사건번호 번호
cndtnTrgtMngVO.setCmptntAthrt( getCellValue(row.getCell(3)));
cndtnTrgtMngVO.setdBirth( getCellValue(row.getCell(4)).replaceAll("-", "")); // 생년월일
cndtnTrgtMngVO.setTrgtNm( getCellValue(row.getCell(5))); // 대상자 이름
cndtnTrgtMngVO.setSex( getCellValue(row.getCell(6)));
cndtnTrgtMngVO.setAddr( getCellValue(row.getCell(7))); // 주소, detail과 구분해야함
cndtnTrgtMngVO.setPost( getCellValue(row.getCell(8))); // 우편번호
cndtnTrgtMngVO.setClphone( getCellValue(row.getCell(9)).replaceAll("-", "")); // 핸드폰
cndtnTrgtMngVO.setReqNmbr( getCellValue(row.getCell(10))); // 의뢰번호
cndtnTrgtMngVO.setPrsctrNm( getCellValue(row.getCell(11))); // 담당검사 이름
cndtnTrgtMngVO.setReqStateCd( getCellValue(row.getCell(12)) ); // 의뢰상태 코드 , if로 구분해야함
cndtnTrgtMngVO.setEduStateCd( getCellValue(row.getCell(13))); // 교육 상태 코드
cndtnTrgtMngVO.setPrcsAplctPrdOrdCmplt( getCellValue(row.getCell(14))); // 병합상태코드
cndtnTrgtMngVO.setRmrks( getCellValue(row.getCell(15))); // 비고
cndtnTrgtInfoMngVOList.add(cndtnTrgtMngVO);
}
}
return cndtnTrgtInfoMngVOList;
} catch (IOException e) {
e.printStackTrace();
return Collections.emptyList();
}
}
private String getCellValue(Cell cell) {
if (cell == null) {
return "";
}
CellType cellType = cell.getCellTypeEnum(); // 또는 cell.getCellType() 사용하세요 (POI 버전에 따라 다름)
switch (cellType) {
case STRING:
return cell.getStringCellValue();
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
// 'java.util.Date' 객체를 얻습니다.
Date date = cell.getDateCellValue();
// 원하는 형식으로 날짜를 포맷합니다.
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.format(date);
} else {
double numericValue = cell.getNumericCellValue();
if (Math.floor(numericValue) == numericValue) {
return String.valueOf((int) numericValue);
} else {
return String.valueOf(numericValue);
}
}
case BOOLEAN:
return Boolean.toString(cell.getBooleanCellValue());
default:
return "";
}
}
}

View File

@ -47,6 +47,7 @@ import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsOnlnCntntService;
import kcc.ve.instr.tngrVisitEdu.prcsInfo.service.VEPrcsService;
import kcc.ve.oprtn.cndtnSspnIdtmt.trgtMng.service.CndtnTrgtMngService;
import kcc.ve.oprtn.cndtnSspnIdtmt.trgtMng.service.CndtnTrgtMngVO;
import kcc.ve.oprtn.cndtnSspnIdtmt.trgtMng.service.impl.TrgtExcelReader;
/**
* 기반강화연수(관리자)
@ -540,6 +541,153 @@ public class CndtnTrgtMngController {
}
/**
* @methodName : trgtExcelRegAjax
* @author : 이호영
* @date : 2024.01.08
* @description : 대상자 EXCEL UPLOAD
* @param cndtnTrgtInfoMngVO
* @param model
* @param request
* @param multiRequest
* @return
* @throws Exception
*/
@RequestMapping("/kccadr/oprtn/cndtnSspnIdtmt/trgtExcelRegAjax.do")
public ModelAndView trgtExcelRegAjax(
@ModelAttribute("cndtnTrgtInfoMngVO") CndtnTrgtMngVO cndtnTrgtInfoMngVO
, ModelMap model
, HttpServletRequest request
, final MultipartHttpServletRequest multiRequest
) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 처리====================================
//로그인 정보 가져오기
String s_oprtnLoginCheckNInfo = checkLoginUtil.oprtnCheckNInfo(model);
if (!"".equals(s_oprtnLoginCheckNInfo)) {
modelAndView.addObject("result", "loginFail");
return modelAndView;
}
//로그인 처리====================================
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
SsoLoginVO ssoLoginVO = checkLoginUtil.getSSOLoginVO(request); //SSO 로그인 정보 가져오기
// 파일 저장후 atchFileId return
// String s_scholSealAtchFileId = this.getAtchFileId(request, multiRequest, modelAndView);
//TEST
String s_scholSealAtchFileId = "FILE_000000000001530";
// 등록 파일 select
FileVO fileVO = new FileVO();
fileVO.setAtchFileId(s_scholSealAtchFileId);
List<FileVO> fileList = fileService.selectFileInfs(fileVO);
if(fileList.size() > 0) {
System.out.println(fileList.get(0).toString());
FileVO fileInfoVO = fileList.get(0);
// String filePathAndNm = fileInfoVO.getFileStreCours() + fileInfoVO.getStreFileNm()+"."+fileInfoVO.getFileExtsn();
String filePathAndNm = fileInfoVO.getFileStreCours() + fileInfoVO.getStreFileNm();
LOGGER.info(" ++ filePathAndNm :: [{}]", filePathAndNm);
TrgtExcelReader reader = new TrgtExcelReader(filePathAndNm);
try {
long startTime = System.currentTimeMillis();
List<CndtnTrgtMngVO> trgtExcelVOList = reader.readExcelFile();
long endTime = System.currentTimeMillis();
double duration = (endTime - startTime) / 1000.0; // 밀리초를 초로 변환
System.out.println("Execution time: " + duration + " milliseconds");
LOGGER.info("trgtExcelVOList.size() :: [{}]", trgtExcelVOList.size());
LOGGER.info("trgtExcelVOList.get(0).toString() :: [{}]", trgtExcelVOList.get(0).toString());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
// 파일이 없을 경우
}else {
modelAndView.addObject("result", "fail");
}
return modelAndView;
}
private String getAtchFileId(HttpServletRequest request, MultipartHttpServletRequest multiRequest,
ModelAndView modelAndView) throws Exception { //step2.파일 처리====================================
//파일 정상 처리 여부와 첨부 파일 정보
//String atchFileId = this.takeFile(multiRequest, modelAndView, bmVO);
//파일 제한 수량 가져오기, 없으면 기본값 사용
int i_file_limit = checkFileUtil.getLimitCount(request); // file count
int i_limit_size = checkFileUtil.getLimitSize(request); // file MB
String s_file_exts = checkFileUtil.getS_exts(); // file exts
String s_scholSealAtchFileId = "";
try {
s_scholSealAtchFileId = checkFileUtil.fileValCheckNdbInsert(
multiRequest, modelAndView
, "trgtExcel_" //file_name_prefix
, s_file_exts
, i_limit_size
, i_file_limit
); //EXT, MB size and ea
if ("ERROR".equals(s_scholSealAtchFileId)) return "";
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return s_scholSealAtchFileId;
}
@RequestMapping("/kccadr/oprtn/cndtnSspnIdtmt/popup/excelUploadPopup.do")
public String excelUploadPopup(
@ModelAttribute("cndtnTrgtInfoMngVO") CndtnTrgtMngVO cndtnTrgtInfoMngVO
, ModelMap model
, RedirectAttributes redirectAttributes
, HttpSession session
, HttpServletRequest request
) throws Exception {
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
SsoLoginVO ssoLoginVO = checkLoginUtil.getSSOLoginVO(request); //SSO 로그인 정보 가져오기
//로그인 처리====================================
if(StringUtils.isEmpty(cndtnTrgtInfoMngVO.getdBirth())) {
cndtnTrgtInfoMngVO.setdBirth(cndtnTrgtInfoMngVO.getDBirth());
}
// return "/oprtn/cndtnSspnIdtmt/popup/duplChkPopup";
return "/oprtn/cndtnSspnIdtmt/popup/excelUploadPopup";
}
@RequestMapping("/kccadr/oprtn/cndtnSspnIdtmt/popup/duplChkPopup.do")
public String duplChkPopup(
@ -555,25 +703,23 @@ public class CndtnTrgtMngController {
LoginVO loginVO = checkLoginUtil.getAuthLoginVO(); //권한에 따른 로그인 정보 가져오기
SsoLoginVO ssoLoginVO = checkLoginUtil.getSSOLoginVO(request); //SSO 로그인 정보 가져오기
//로그인 처리====================================
CndtnTrgtMngVO cndtnTrgtInfo = cndtnTrgtInfoMngService.selectDetail(cndtnTrgtInfoMngVO);
cndtnTrgtInfo = egovCryptoUtil.decryptCndtnTrgtMngVOInfo(cndtnTrgtInfo);
if(StringUtils.isEmpty(cndtnTrgtInfoMngVO.getdBirth())) {
cndtnTrgtInfoMngVO.setdBirth(cndtnTrgtInfoMngVO.getDBirth());
}
try {
//검색을 위한 암호화
System.out.println("cndtnTrgtInfoMngVO.getTrgtNm() : "+ cndtnTrgtInfoMngVO.getTrgtNm());
cndtnTrgtInfoMngVO = egovCryptoUtil.encryptCndtnTrgtMngVOInfo(cndtnTrgtInfoMngVO);
System.out.println("cndtnTrgtInfoMngVO.getdBirth() : "+ cndtnTrgtInfoMngVO.getdBirth());
System.out.println("cndtnTrgtInfoMngVO.getTrgtNm() : "+ cndtnTrgtInfoMngVO.getTrgtNm());
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
//검색을 위한 암호화
cndtnTrgtInfoMngVO = egovCryptoUtil.encryptCndtnTrgtMngVOInfo(cndtnTrgtInfoMngVO);
//병합대상자 검색
List<CndtnTrgtMngVO> cndtnTrgtInfoMngVOList = this._getMergeSearchList(model, cndtnTrgtInfoMngVO);
@ -582,6 +728,7 @@ public class CndtnTrgtMngController {
cndtnTrgtInfoMngVO = egovCryptoUtil.decryptCndtnTrgtMngVOInfo(cndtnTrgtInfoMngVO);
model.addAttribute("list", cndtnTrgtInfoMngVOList);
model.addAttribute("cndtnTrgtInfo", cndtnTrgtInfo);

View File

@ -1,46 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] %p{length=1} %c %M %L | %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="org.apache" level="ERROR"></Logger>
<Logger name="org.springframework" level="ERROR"></Logger>
<Logger name="egovframework" level="ERROR"></Logger>
<Logger name="egovframework.rte" level="DEBUG"></Logger>
<Logger name="com.ibatis.sqlmap" level="INFO"></Logger>
<Logger name="egovframework.let" level="DEBUG"></Logger>
<Logger name="egovframework.com.cmm" level="DEBUG"></Logger>
<Logger name="egovframework.kccadr" level="DEBUG"></Logger>
<!-- <Logger name="jdbc.sqlonly" level="DEBUG">
<RegexFilter regex="(?s).*NOT_SQL_LOG.*" onMatch="DENY" onMismatch="NEUTRAL" useRawMsg="true" />
</Logger> -->
<Logger name="jdbc.sqltiming" level="WARN" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="jdbc.audit" level="OFF"></Logger>
<Logger name="jdbc.resultset" level="OFF"></Logger>
<Logger name="jdbc.resultsettable" level="OFF"></Logger>
<Logger name="jdbc.connection" level="OFF"></Logger>
<logger name="java.sql.ResultSet" level="OFF"></logger>
<logger name="java.sql.PreparedStatement" level="OFF"></logger>
<logger name="java.sql.Connection" level="OFF"></logger>
<logger name="org.quartz.core.QuartzSchedulerThread" level="OFF"></logger>
<logger name="org.quartz.core.JobRunShell" level="OFF"></logger>
<logger name="log4jdbc.debug" level="OFF"></logger>
<Root level="DEBUG">
<AppenderRef ref="console" />
</Root>
</Loggers>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<Property name="LOG_PATTERN">[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] [%-5level] %logger{36}:%L - %msg%n</Property>
<Property name="LOG_HOME">${catalina.base}/logs/heqms</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}" />
<!--
<PatternLayout pattern="%d %5p [%c] %m%n" />
-->
</Console>
</Appenders>
<Loggers>
<Logger name="org.apache" level="ERROR"></Logger>
<Logger name="org.springframework" level="ERROR"></Logger>
<Logger name="egovframework" level="ERROR"></Logger>
<Logger name="egovframework.rte" level="DEBUG"></Logger>
<Logger name="com.ibatis.sqlmap" level="INFO"></Logger>
<Logger name="egovframework.let" level="DEBUG"></Logger>
<Logger name="egovframework.com.cmm" level="DEBUG"></Logger>
<Logger name="egovframework.kccadr" level="DEBUG"></Logger>
<!-- <Logger name="jdbc.sqlonly" level="DEBUG">
<RegexFilter regex="(?s).*NOT_SQL_LOG.*" onMatch="DENY" onMismatch="NEUTRAL" useRawMsg="true" />
</Logger> -->
<Logger name="jdbc.sqltiming" level="WARN" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="jdbc.audit" level="OFF"></Logger>
<Logger name="jdbc.resultset" level="OFF"></Logger>
<Logger name="jdbc.resultsettable" level="OFF"></Logger>
<Logger name="jdbc.connection" level="OFF"></Logger>
<logger name="java.sql.ResultSet" level="OFF"></logger>
<logger name="java.sql.PreparedStatement" level="OFF"></logger>
<logger name="java.sql.Connection" level="OFF"></logger>
<logger name="org.quartz.core.QuartzSchedulerThread" level="OFF"></logger>
<logger name="org.quartz.core.JobRunShell" level="OFF"></logger>
<logger name="log4jdbc.debug" level="OFF"></logger>
<Root level="DEBUG">
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>

View File

@ -154,10 +154,130 @@
<form:form id="listForm" name="listForm" method="post" onsubmit="return false;">
<input type="hidden" name="sspnIdtmtTrgtOrd" id="sspnIdtmtTrgtOrd" value="<c:out value="${cndtnTrgtInfoMngVO.sspnIdtmtTrgtOrd}" />" />
<div class="area_popup">
<div class="tb_tit01">
<p>병합 대상자 목록</p>
<div class="tb_tit01">
<p>기준 대상자 정보</p>
</div>
<div class="cont_popup">
<!-- list_top -->
<%-- <div class="list_top">
<div class="list_top_1">
<div class="util_left">
<p>병합 대상자 검색</p>
</div>
<div class="util_right">
<input type="text" id="trgtNm" name="trgtNm" placeholder="이름" value="<c:out value='${cndtnTrgtInfoMngVO.trgtNm }' /> " />
<button type="button" class="btn_type08" onclick="fncGoSearch(1); return false;">검색</button>
</div>
</div>
</div> --%>
<!-- <div class="pop_tb_tit01"> -->
<!-- <p>병합 대상자 목록</p> -->
<!-- </div> -->
<div class="pop_tb_type01">
<table>
<colgroup>
<col style="width: 100px">
<col style="width: 100px">
<col style="width: 80px">
<col style="width: 100px">
<col style="width: 80px">
<col style="width: 60px">
<col style="width: 140px">
<col style="width: 80px">
<col style="width: 80px">
<col style="width: auto">
<col style="width: 80px">
</colgroup>
<thead>
<tr>
<th>의뢰일</th>
<th>사건번호</th>
<th>관할청</th>
<th>생년월일</th>
<th>성명</th>
<th>성별</th>
<th>의뢰번호</th>
<th>의뢰상태</th>
<th>교육상태</th>
<th>주소</th>
<th>검사명</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<c:set var="reqPnttm" value="${fn:substring(cndtnTrgtInfo.reqPnttm, 0, 10)}" />
<%-- <fmt:formatDate value="${list.reqPnttm }" pattern="yyyy-MM-dd" /> --%>
<c:out value="${reqPnttm }" />
</td>
<td>
<c:out value="${cndtnTrgtInfo.vntYear }" />형제<c:out value="${cndtnTrgtInfo.vntNmbr }" />
</td>
<td>
<c:out value="${cndtnTrgtInfo.cmptntAthrt }" />
</td>
<td>
<c:out value="${cndtnTrgtInfo.dBirth }" />
</td>
<td>
<c:out value="${cndtnTrgtInfo.trgtNm }" />
</td>
<td>
<ve:code codeId="COM014" code="${cndtnTrgtInfo.sex }"/>
</td>
<td>
<c:out value="${cndtnTrgtInfo.reqNmbr }" />
</td>
<td>
<ve:code codeId="VEA005" code="${cndtnTrgtInfo.reqStateCd }"/>
</td>
<td>
<ve:code codeId="VEA002" code="${cndtnTrgtInfo.eduStateCd }"/>
</td>
<c:set var="fullAddr" value="${cndtnTrgtInfo.addr} ${cndtnTrgtInfo.addrDetail}" />
<%-- <c:set var="fullAddr" value="${cndtnTrgtInfo.addr}" /> --%>
<td title="${fullAddr}">
<c:out value="${cndtnTrgtInfo.addr }" />
<c:out value="${cndtnTrgtInfo.addrDetail }" />
<%-- ${fn:length(fullAddr)> 5 ? fn:substring(fullAddr, 0, 5).concat('...') : ''} --%>
</td>
<td>
<c:out value="${cndtnTrgtInfo.prsctrNm }" />
</td>
</tr>
</tbody>
</table>
</div>
<!-- page -->
<!-- <div class="page"> -->
<%-- <ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" /> --%>
<!-- </div> -->
<!-- //page -->
<div class="btn_wrap_pop btn_layout01">
<div class="btn_left">
</div>
<div class="btn_center">
<button type="button" class="btn_type04" onclick="fnUpdate(); return false;">병합 처리</button>
<!-- <button type="button" class="btn_type04" onclick="self.close();">닫기</button> -->
<button type="button" class="btn_type04" onclick="fn_close()">닫기</button>
</div>
<div class="btn_right">
</div>
</div>
</div>
</div>
<div class="area_popup">
<div class="tb_tit01">
<p>병합 대상자 목록</p>
</div>
<div class="cont_popup">
<!-- list_top -->
<%-- <div class="list_top">

View File

@ -0,0 +1,231 @@
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<%@ taglib prefix="ve" uri="/WEB-INF/tlds/kcc_tld.tld"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
/**
* @Class Name : eduAcmdtAplctPopup.jsp
* @Description : 숙박신청내용보기 팝업
* @Modification Information
* @
* @ 수정일 수정자 수정내용
* @ ------- -------- ---------------------------
* @ 2022.01.07 박진순 최초 생성
* @author 박진순
* @since 2020.01.07
* @version 1.0
* @see
*
*/
%>
<html lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
</script>
<title>숙박신청내용보기팝업</title>
<script type="text/javaScript" language="javascript">
$(document).ready(function() {
$(".btn_type01").on('click', function(){
$("#file_temp").click();
});
});
function setDataSave(){
var data = new FormData(document.getElementById("createForm"));
//첨부파일 등록 처리-step2
_fileForm2.forEach(function(obj, idx) {
if (obj) data.append("file"+idx, obj.fileObj);
});
if(confirm("등록하시겠습니까?")){
// var url = "${pageContext.request.contextPath}/kccadr/oprtn/cndtnSspnIdtmt/trgtRegAjax.do";
var url = "${pageContext.request.contextPath}/kccadr/oprtn/cndtnSspnIdtmt/trgtExcelRegAjax.do";
console.log(data);
$.ajax({
type:"POST",
enctype: 'multipart/form-data',
url: url,
data: data,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success:function(returnData){
console.log('returnData :: ', returnData);
if(returnData.result == "success"){
alert("등록되었습니다.");
// fncGoList();
$('#sspnIdtmtTrgtOrd').val(returnData.sspnIdtmtTrgtOrd);
// 중복체크 ajax
// fn_duplChk();
}else if(returnData.result == "fail"){
alert(returnData.message);
$('#cmptntAthrt').prop('disabled', true);
}
},
error:function(request , status, error){
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
$('#cmptntAthrt').prop('disabled', true);
}
});
}
}
// 닫기
function fncPopClose(){
self.close();
}
</script>
</head>
<body>
<form:form id="createForm" name="createForm" method="post" commandName="vEEduAplctVO" onsubmit="return false;">
<!-- cont_tit -->
<div class="cont_tit">
<h2>대상자 엑셀 업로드</h2>
<!-- <ul class="cont_nav"> -->
<!-- <li class="home"><a href="/"><i></i></a></li> -->
<!-- <li> -->
<!-- <p>조건부기소유예관리</p> -->
<!-- </li> -->
<!-- <li><span class="cur_nav">대상자 목록</span></li> -->
<!-- <li><span class="cur_nav">대상자 등록</span></li> -->
<!-- </ul> -->
</div>
<div class="area_popup">
<div class="cont_popup">
<table class="pop_tb_type02">
<colgroup>
<col style="width: 140px;">
<col style="width: auto;">
<col style="width: 140px;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th scope="row">
<p class="req_text"><span>필수입력 항목</span>*</p>
<p>첨부파일</p>
</th>
<td class="upload_area" colspan="3">
<!-- <input type="text" id="fileNm" size="30" class="file_input" readonly> --><!-- <button type="button" class="btnType01 btn_add_file">파일 첨부하기</button> -->
<input type="file" id="file_temp" name="file_temp" class="uploadFile" style="display:none"/>
<button type="button" id="filebutton" class="btn_type01">파일 첨부하기</button>
<p style="padding-left:30px;">첨부파일 가능 용량은 20MB입니다. </p><!-- <p style="color:red;font-weight:500">업로드 순서는 1.신청서 2.안내문 입니다.</p> -->
<div class="file_wrap file_upload_box no_img_box">
<table class="tbType02">
<caption>첨부파일 리스트 : 파일명, 종류, 크기, 삭제</caption>
<colgroup>
<col style="width: 60%;">
<col style="width: auto;">
<col style="width: 20%;">
<col style="width: 10%;">
</colgroup>
<thead>
<!-- <th>
<input type="checkbox" id="all_check"><label for="all_check"></label>
</th> -->
<th scope="col">파일 명</th>
<th scope="col">종류</th>
<th scope="col">크기</th>
<th scope="col">삭제</th>
</thead>
<tbody class="tb_file_before">
<tr>
<td colspan="4">
<p>첨부하실 파일을 <span>마우스로 끌어서</span> 넣어주세요.</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="file_wrap fileAfter file_list_div">
<table class="tbType02">
<caption>첨부파일 리스트 : 파일명, 종류, 크기, 삭제</caption>
<colgroup>
<col style="width: 60%">
<col style="width: 10%">
<col style="width: 20%">
<col style="width: 10%">
</colgroup>
<thead>
<!-- <th>
<input type="checkbox" id="all_check"><label for="all_check"></label>
</th> -->
<th scope="col">파일 명</th>
<th scope="col">종류</th>
<th scope="col">크기</th>
<th scope="col">삭제</th>
</thead>
<tbody id="tbody_fiielist" class="tb_file_after">
<c:forEach var="fileList" items="${fileList}" varStatus="status">
<tr class="item_<c:out value='${fileList.atchFileId}' />_<c:out value='${fileList.fileSn}' /> uploaded_obj">
<input type="hidden" name="fileSize" class="item_file_size" value="${fileList.fileSize}">
<td class="td_filename">
<!-- <img src="/direct/img/upload_hwp_img.png" alt="" /> -->
<span class="file_name_text"><c:out value='${fileList.orignlFileNm}' /></span>
</td>
<td class="td_filesort">
<span class="file_filesort_text" value="<c:out value="${fileList.fileExtsn}"/>"><c:out value="${fileList.fileExtsn}"/></span>
</td>
<td class="td_filesize">
<span class="file_size_text" value="<c:out value="${fileList.fileMg}"/>"><c:out value="${fileList.fileMg}"/></span>
</td>
<td>
<button type="button" class="btn_del" onclick="delAtchFile('<c:out value='${fileList.atchFileId}' />', '<c:out value='${fileList.fileSn}' />'); return false;" title="파일삭제"><i></i></button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
<!-- 교육결과상세 화면에서 호출 시 버튼 비노출 -->
<c:if test="${status ne 'end'}">
<div class="btn_wrap_pop btn_layout01">
<div class="btn_left">
</div>
<div class="btn_center">
<button type="button" onclick="setDataSave(); return false;" class="btn_type04">엑셀 등록</button>
<button type="button" onclick="fncPopClose(); return false;" class="btn_type02">닫기</button>
</div>
<div class="btn_right">
<!-- <button type="button" onclick="fncEduAcmdtAplctRejectInfo(); return false;" class="btn_type03" id="btnReject">반려</button> -->
</div>
</div>
</c:if>
<c:if test="${status eq 'end'}">
<div class="btn_wrap_pop btn_layout01">
<div class="btn_left">
</div>
<div class="btn_center">
<button type="button" onclick="fncPopClose(); return false;" class="btn_type02">닫기</button>
</div>
<div class="btn_right">
</div>
</div>
</c:if>
</div>
</div>
</form:form>
</body>
</html>