Developers

스프링 엑셀 다운로드 구현

오페투오소 2017. 1. 4. 14:20

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");

}

}