구매하기 버튼을 누른 회원의 번호와 상품명, 상품 종류, 조회일 로그를 보여주는 게시판을 만들고 조회한 화면 그대로를 관리자가 엑셀로 다운받을 수 있는 기능을 구현해보았다.
(*엑셀 다운로드 API를 활용하여 개발함.)
로그 조회시 DTO(VO)를 따로 만들어 값을 저장하지 않고 HashMap을 이용하여 각 로그를 key, value 형태로 담아 List로 만들어서 가져왔다.
for문으로 번호(index)를 내림차순으로 정렬시키고 등록일의 날짜 - 시간을 시-분-초 까지 보여지게 포맷팅해서 조회일로 보여준다.
페이지네이션 값과, 다운로드 될 때의 파일명, 샘플 엑셀 시트의 이름 값들을 넘겨주고, EgovExcelView 클래스의 인스턴스를 생성한다.
@RequestMapping(path = "/excel")
public View excel(FnncVo listVo, Model model) throws Exception {
try {
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(listVo.getPageIndex());
paginationInfo.setRecordCountPerPage(listVo.getRecordCountPerPage());
paginationInfo.setPageSize(listVo.getPageSize());
listVo.setFirstIndex(paginationInfo.getFirstRecordIndex());
listVo.setLastIndex(paginationInfo.getLastRecordIndex());
List<HashMap<String, Object>> resultList = staticsService.staticsList(listVo);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (null != resultList && resultList.size() > 0) {
paginationInfo.setTotalRecordCount(staticsService.count(listVo));
}else {
paginationInfo.setTotalRecordCount(0);
}
if (null != resultList) {
int index = paginationInfo.getTotalRecordCount() + 1 - ((paginationInfo.getCurrentPageNo()-1) * paginationInfo.getRecordCountPerPage() + 1);
for (HashMap<String, Object> result : resultList) {
result.put("click_rcord_sn", index);
result.put("regist_dt", format.format(result.get("regist_dt")));
index --;
}
}
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("XLS_ID", "STATICS");
model.addAttribute("XLS_SAVEAS_NM","회원_통계");
model.addAttribute("list", resultList);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return new EgovExcelView();
}