스프링 엑셀 다운로드 구현
pom.xml |
<!-- excel --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> |
servlet-config |
<!-- 다른 뷰리졸버보다 order 높게 --> <beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <beans:property name="order" value="0" /> </beans:bean> <!-- 생성된 엑셀뷰 지정 --> <beans:bean id="excelView" class="com.audien.b2c.mgmt.common.ExcelView"/> |
|
<div class="input-group-btn"> <button type="button" id="btn_excel" class="btn btn-inverse btn-white"> <span class="icon-on-right bigger-110"></span> 엑셀 </button> </div> $("#btn_excel").click(function(){ var target = "delivery";
var chkFirstTime = '${chkFirstTime}'; var statusCd = '${statusCd}'; var searchOption = '${searchOption}'; var searchText = '${searchText}'; var startDate = '${startDate}'; var endDate = '${endDate}';
//excelDownload(target, chkFirstTime, statusCd, payMethodTypeCd, autoYn, searchOption, searchText, startDate, endDate); $.download('<c:url value="/view/common/excel/download.do"/>', 'target='+target +'&chkFirstTime='+chkFirstTime +'&statusCd='+statusCd +'&searchOption='+searchOption +'&searchText='+searchText +'&startDate='+startDate +'&endDate='+endDate ,'post'); });
// Ajax 파일 다운로드 jQuery.download = function(url, data, method){ // url과 data를 입력받음 if( url && data ){ // data 는 string 또는 array/object 를 파라미터로 받는다. data = typeof data == 'string' ? data : jQuery.param(data); // 파라미터를 form의 input으로 만든다. var inputs = ''; jQuery.each(data.split('&'), function(){ var pair = this.split('='); inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />'; }); // request를 보낸다. jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>') .appendTo('body').submit().remove(); }; }; }); |
ViewCommonExcelController |
package com.audien.b2c.mgmt.controller.view.common; import java.io.File; import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import com.audien.b2c.common.constants.Constants; import com.audien.b2c.common.log.LoggerManager; import com.audien.b2c.common.response.Response; import com.audien.b2c.common.utils.MessagePropertie; import com.audien.b2c.common.utils.RequestPrint; import com.audien.b2c.common.utils.StackTrace; import com.audien.b2c.domain.sc.ScUserVo; import com.audien.b2c.domain.sf.SfManageProdPeriodVo; import com.audien.b2c.domain.sf.SfUserProdPeriodVo; import com.audien.b2c.mgmt.service.common.CommonExcelService; import com.audien.b2c.mgmt.service.sf.SfManageProdPeriodService; import com.audien.b2c.mgmt.service.sf.SfUserProdPeriodService; @RestController @RequestMapping("/view/common/excel") public class ViewCommonExcelController {
private static final String _log_prefix = "ViewCommonExcelController - ";
@Inject CommonExcelService commonExcelService;
//엑셀파일 변환 및 다운로드 @RequestMapping("/download.do") public ModelAndView excelTransform(@RequestParam HashMap<String, Object> targetMap, Map<String,Object> model) throws Exception{
String logTitle = _log_prefix + "excelTransform"+targetMap+","+model+"/";
LoggerManager.debug(Constants.LOG_CATEGORY_MGMT, logTitle);
List<HashMap<String, Object>> excelList= null;
excelList = commonExcelService.gets(targetMap);
model.put("excelList", excelList); model.put("target", (String)targetMap.get("target"));
//return "excelView"; return new ModelAndView("excelView", "model", model); } } |
CommonExcelServiceImpl |
package com.audien.b2c.mgmt.service.common.impl; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import javax.inject.Inject; import org.springframework.stereotype.Service; import com.audien.b2c.common.constants.Constants; import com.audien.b2c.common.log.LoggerManager; import com.audien.b2c.mgmt.service.common.CommonExcelService; import com.audien.b2c.persist.cc.CcPurchaseDao; import com.audien.b2c.persist.sf.SfManageProdPeriodDao; import com.audien.b2c.persist.sf.SfUserPurchaseDeliveryDao; @Service public class CommonExcelServiceImpl implements CommonExcelService{
private static final String _log_prefix = "CommonExcelServiceImpl - "; @Inject private SfManageProdPeriodDao sfManageProdPeriodDao;
@Inject private CcPurchaseDao ccPurchaseDao;
@Inject private SfUserPurchaseDeliveryDao sfUserPurchaseDeliveryDao;
@Override public List<HashMap<String, Object>> gets(HashMap<String, Object> targetMap) { String target = (String) targetMap.get("target"); List<HashMap<String, Object>> lists = null;
String logTitle = _log_prefix + "gets/"+targetMap+"/";
LoggerManager.debug(Constants.LOG_CATEGORY_MGMT, logTitle);
//이용권관리 일시 if(target.equals("prodPeriod")){
String chkFirstTime = (String) targetMap.get("chkFirstTime"); if(chkFirstTime==null || chkFirstTime.equals("")){ chkFirstTime = "true"; } String statusCd = (String) targetMap.get("statusCd"); String payMethodTypeCd = (String) targetMap.get("payMethodTypeCd"); String autoYn = (String) targetMap.get("autoYn"); String searchOption = (String) targetMap.get("searchOption"); if(searchOption.equals("")){ searchOption = "0"; } String searchText = (String) targetMap.get("searchText"); String startDate = (String) targetMap.get("startDate"); String endDate = (String) targetMap.get("endDate"); if(chkFirstTime.equals("true")){ Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); endDate = sdf.format(date);
Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DATE, 1); startDate = sdf.format(calendar.getTime()); } if(startDate.indexOf(".") > 0){ startDate = startDate.replaceAll("\\.", ""); startDate = startDate+"000000"; }
if(endDate.indexOf(".") > 0){ endDate = endDate.replaceAll("\\.", ""); endDate = endDate+"235959"; }
lists = sfManageProdPeriodDao.getsExcel(statusCd, payMethodTypeCd, autoYn, Integer.parseInt(searchOption), searchText, startDate, endDate);
//단품관리 일시 }else if(target.equals("purchase")){
String chkFirstTime = (String) targetMap.get("chkFirstTime"); if(chkFirstTime==null || chkFirstTime.equals("")){ chkFirstTime = "true"; } String statusCd = (String) targetMap.get("statusCd"); String payMethodTypeCd = (String) targetMap.get("payMethodTypeCd"); String searchOption = (String) targetMap.get("searchOption"); if(searchOption.equals("")){ searchOption = "0"; } String searchText = (String) targetMap.get("searchText"); String startDate = (String) targetMap.get("startDate"); String endDate = (String) targetMap.get("endDate");
if(chkFirstTime.equals("true")){ Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); endDate = sdf.format(date);
Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DATE, 1); startDate = sdf.format(calendar.getTime()); }
if(startDate.indexOf(".") > 0){ startDate = startDate.replaceAll("\\.", ""); startDate = startDate+"000000"; }
if(endDate.indexOf(".") > 0){ endDate = endDate.replaceAll("\\.", ""); endDate = endDate+"235959"; }
lists = ccPurchaseDao.getsExcel(statusCd, payMethodTypeCd, Integer.parseInt(searchOption), searchText, startDate, endDate);
//배송관리 일시 }else if(target.equals("delivery")){
String chkFirstTime = (String) targetMap.get("chkFirstTime"); if(chkFirstTime==null || chkFirstTime.equals("")){ chkFirstTime = "true"; } String statusCd = (String) targetMap.get("statusCd"); String searchOption = (String) targetMap.get("searchOption"); if(searchOption.equals("")){ searchOption = "0"; } String searchText = (String) targetMap.get("searchText"); String startDate = (String) targetMap.get("startDate"); String endDate = (String) targetMap.get("endDate");
if(chkFirstTime.equals("true")){ Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); endDate = sdf.format(date);
Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DATE, 1); startDate = sdf.format(calendar.getTime()); }
if(startDate.indexOf(".") > 0){ startDate = startDate.replaceAll("\\.", ""); startDate = startDate+"000000"; }
if(endDate.indexOf(".") > 0){ endDate = endDate.replaceAll("\\.", ""); endDate = endDate+"235959"; }
lists = sfUserPurchaseDeliveryDao.getsExcel(statusCd, Integer.parseInt(searchOption), searchText, startDate, endDate); } return lists; } } |
ExcelView |
package com.audien.b2c.mgmt.common; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.servlet.view.document.AbstractXlsView; public class ExcelView extends AbstractXlsView { @Override protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
String excelName = (String) model.get("target"); // 어떤 게시물의 엑셀을 처리하는지
Sheet worksheet = null; Row row = null; if(excelName.equals("prodPeriod")){
worksheet = workbook.createSheet(excelName); excelName=URLEncoder.encode("이용권관리","UTF-8");
@SuppressWarnings("unchecked") List<HashMap<String, Object>> list = (List<HashMap<String, Object>>)model.get("excelList"); // 컨트롤러에서 받아온 List
row = worksheet.createRow(0); row.createCell(0).setCellValue("구매ID"); row.createCell(1).setCellValue("구분"); row.createCell(2).setCellValue("주문번호"); row.createCell(3).setCellValue("사용자ID(사용자명)"); row.createCell(4).setCellValue("상품명"); row.createCell(5).setCellValue("자동결제"); row.createCell(6).setCellValue("결제금액"); row.createCell(7).setCellValue("결제수단"); row.createCell(8).setCellValue("구매일"); row.createCell(9).setCellValue("상태"); row.createCell(10).setCellValue("이용권기간");
for(int i=1;i<list.size()+1;i++){ row = worksheet.createRow(i); row.createCell(0).setCellValue((int)list.get(i-1).get("purchaseId")); if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM00CUPN")){
row.createCell(1).setCellValue("쿠폰"); }else{
row.createCell(1).setCellValue("결제"); } row.createCell(2).setCellValue((String)list.get(i-1).get("purchaseCd"));
if((String)list.get(i-1).get("userNm") != null){
row.createCell(3).setCellValue((String)list.get(i-1).get("loginId")+"("+(String)list.get(i-1).get("userNm")+")"); }else{
row.createCell(3).setCellValue((String)list.get(i-1).get("loginId")); } row.createCell(4).setCellValue((String)list.get(i-1).get("purchaseNm")); row.createCell(5).setCellValue((String)list.get(i-1).get("autoYn")); row.createCell(6).setCellValue((int)list.get(i-1).get("priceDc"));
String payMethodTypeNm = ""; if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM00CARD")){
payMethodTypeNm = "신용카드"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PMMOBILE")){
payMethodTypeNm = "휴대폰"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM00TRAN")){
payMethodTypeNm = "계좌이체"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM0CULTV")){
payMethodTypeNm = "문화상품권"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM0BOOKV")){
payMethodTypeNm = "도서상품권"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM00CUPN")){
payMethodTypeNm = "쿠폰"; }else{
payMethodTypeNm = "기타"; } row.createCell(7).setCellValue(payMethodTypeNm);
String purchaseDt = (String)list.get(i-1).get("purchaseDt"); purchaseDt = purchaseDt.substring(0, 4)+"."+purchaseDt.substring(4, 6)+"."+purchaseDt.substring(6, 8); row.createCell(8).setCellValue(purchaseDt);
String cancelYn = (String)list.get(i-1).get("cancelYn"); String statusCd = (String)list.get(i-1).get("statusCd"); String status = null; if(cancelYn.equals("Y")){ status = "환불완료"; }else{ if(statusCd.equals("P")){ status = "주문접수"; }else if(statusCd.equals("F")){ status = "주문실패"; }else if(statusCd.equals("C")){ status = "입금완료"; } } row.createCell(9).setCellValue(status); String useStartDt = (String)list.get(i-1).get("useStartDt"); useStartDt = useStartDt.substring(0, 4)+"."+useStartDt.substring(4, 6)+"."+useStartDt.substring(6, 8); String useEndDt = (String)list.get(i-1).get("useEndDt"); useEndDt = useEndDt.substring(0, 4)+"."+useEndDt.substring(4, 6)+"."+useEndDt.substring(6, 8); row.createCell(10).setCellValue(useStartDt+" ~ "+useEndDt); } }else if(excelName.equals("purchase")){
worksheet = workbook.createSheet(excelName); excelName=URLEncoder.encode("단품관리","UTF-8");
@SuppressWarnings("unchecked") List<HashMap<String, Object>> list = (List<HashMap<String, Object>>)model.get("excelList");
row = worksheet.createRow(0); row.createCell(0).setCellValue("구매ID"); row.createCell(1).setCellValue("구분"); row.createCell(2).setCellValue("주문번호"); row.createCell(3).setCellValue("사용자ID(사용자명)"); row.createCell(4).setCellValue("상품명"); row.createCell(5).setCellValue("결제금액"); row.createCell(6).setCellValue("결제수단"); row.createCell(7).setCellValue("구매일"); row.createCell(8).setCellValue("상태");
for(int i=1;i<list.size()+1;i++){ row = worksheet.createRow(i); row.createCell(0).setCellValue((int)list.get(i-1).get("purchaseId")); if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM00CUPN")){
row.createCell(1).setCellValue("쿠폰"); }else{
row.createCell(1).setCellValue("결제"); } row.createCell(2).setCellValue((String)list.get(i-1).get("purchaseCd"));
if((String)list.get(i-1).get("userNm") != null){
row.createCell(3).setCellValue((String)list.get(i-1).get("loginId")+"("+(String)list.get(i-1).get("userNm")+")"); }else{
row.createCell(3).setCellValue((String)list.get(i-1).get("loginId")); } row.createCell(4).setCellValue((String)list.get(i-1).get("purchaseNm")); row.createCell(5).setCellValue((int)list.get(i-1).get("priceDc"));
String payMethodTypeNm = ""; if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM00CARD")){
payMethodTypeNm = "신용카드"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PMMOBILE")){
payMethodTypeNm = "휴대폰"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM00TRAN")){
payMethodTypeNm = "계좌이체"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM0CULTV")){
payMethodTypeNm = "문화상품권"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM0BOOKV")){
payMethodTypeNm = "도서상품권"; }else if(((String)list.get(i-1).get("payMethodTypeCd")).equals("PM00CUPN")){
payMethodTypeNm = "쿠폰"; }else{
payMethodTypeNm = "기타"; } row.createCell(6).setCellValue(payMethodTypeNm);
String purchaseDt = (String)list.get(i-1).get("purchaseDt"); purchaseDt = purchaseDt.substring(0, 4)+"."+purchaseDt.substring(4, 6)+"."+purchaseDt.substring(6, 8); row.createCell(7).setCellValue(purchaseDt);
String cancelYn = (String)list.get(i-1).get("cancelYn"); String statusCd = (String)list.get(i-1).get("statusCd"); String status = null; if(cancelYn.equals("Y")){ status = "환불완료"; }else{ if(statusCd.equals("P")){ status = "주문접수"; }else if(statusCd.equals("F")){ status = "주문실패"; }else if(statusCd.equals("C")){ status = "입금완료"; } } row.createCell(8).setCellValue(status); } }else if(excelName.equals("delivery")){
worksheet = workbook.createSheet(excelName); excelName=URLEncoder.encode("배송관리","UTF-8");
@SuppressWarnings("unchecked") List<HashMap<String, Object>> list = (List<HashMap<String, Object>>)model.get("excelList");
row = worksheet.createRow(0); row.createCell(0).setCellValue("배송ID"); row.createCell(1).setCellValue("주문번호"); row.createCell(2).setCellValue("사용자ID(사용자명)"); row.createCell(3).setCellValue("상품명"); row.createCell(4).setCellValue("주문일"); row.createCell(5).setCellValue("결제상태"); row.createCell(6).setCellValue("배송상태");
for(int i=1;i<list.size()+1;i++){ row = worksheet.createRow(i); row.createCell(0).setCellValue((int)list.get(i-1).get("deliveryId")); row.createCell(1).setCellValue((String)list.get(i-1).get("purchaseCd"));
if((String)list.get(i-1).get("userNm") != null){
row.createCell(2).setCellValue((String)list.get(i-1).get("loginId")+"("+(String)list.get(i-1).get("userNm")+")"); }else{
row.createCell(2).setCellValue((String)list.get(i-1).get("loginId")); } row.createCell(3).setCellValue((String)list.get(i-1).get("purchaseNm"));
String purchaseDt = (String)list.get(i-1).get("purchaseDt"); purchaseDt = purchaseDt.substring(0, 4)+"."+purchaseDt.substring(4, 6)+"."+purchaseDt.substring(6, 8); row.createCell(4).setCellValue(purchaseDt);
String cancelYn = (String)list.get(i-1).get("cancelYn"); String purchaseStatusCd = (String)list.get(i-1).get("purchaseStatusCd"); String status = null; if(cancelYn.equals("Y")){ status = "환불완료"; }else{ if(purchaseStatusCd.equals("P")){ status = "주문접수"; }else if(purchaseStatusCd.equals("F")){ status = "주문실패"; }else if(purchaseStatusCd.equals("C")){ status = "결제완료"; } } row.createCell(5).setCellValue(status);
String statusCd = (String)list.get(i-1).get("statusCd"); if(statusCd.equals("C")){ status = "주문완료"; }else if(statusCd.equals("P")){ status = "배송전"; }else if(statusCd.equals("R")){ status = "배송중"; }else if(statusCd.equals("D")){ status = "배송완료"; }else if(statusCd.equals("F")){ status = "주문실패"; }else if(statusCd.equals("E")){ status = "배송실패"; }else if(statusCd.equals("X")){ status = "취소"; } row.createCell(6).setCellValue(status); } } response.setContentType("Application/Msexcel"); response.setHeader("Content-Disposition", "attachment; filename="+excelName+"-excel.xls"); }
} |