Package org.jeecgframework.web.cgform.controller.excel

Source Code of org.jeecgframework.web.cgform.controller.excel.ExcelTempletController

package org.jeecgframework.web.cgform.controller.excel;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jeecgframework.web.cgform.common.CgAutoListConstant;
import org.jeecgframework.web.cgform.entity.config.CgFormFieldEntity;
import org.jeecgframework.web.cgform.service.autolist.ConfigServiceI;
import org.jeecgframework.web.cgform.service.build.DataBaseService;
import org.jeecgframework.web.cgform.service.config.CgFormFieldServiceI;
import org.jeecgframework.web.cgform.service.excel.ExcelTempletService;
import org.jeecgframework.web.cgform.service.impl.config.util.FieldNumComparator;

import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.util.BrowserUtils;
import org.jeecgframework.core.util.ExceptionUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.UUIDGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;

/**
* @ClassName: excelTempletController
* @Description: excel模版处理
* @author huiyong
*/
@Controller
@RequestMapping("/excelTempletController")
public class ExcelTempletController extends BaseController {
  private static final Logger logger = Logger
      .getLogger(ExcelTempletController.class);
  private String message;
  @Autowired
  private ConfigServiceI configService;
  @Autowired
  private CgFormFieldServiceI cgFormFieldService;
  @Autowired
  private DataBaseService dataBaseService;

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

  /**
   * 导出excel模版
   *
   * @param request
   * @param response
   */
  @SuppressWarnings("all")
  @RequestMapping(params = "exportXls")
  public void exportXls(HttpServletRequest request,
      HttpServletResponse response) {

    String codedFileName = "模版文件";
    String sheetName="导出信息";
    List<CgFormFieldEntity> lists = null;
    if (StringUtil.isNotEmpty(request.getParameter("tableName"))) {
      String configId = request.getParameter("tableName");
      String jversion = cgFormFieldService.getCgFormVersionByTableName(configId);
      Map<String, Object> configs = configService.queryConfigs(configId,jversion);
      //表单列集合
      lists = (List<CgFormFieldEntity>) configs.get(CgAutoListConstant.FILEDS);
      // 对字段列按顺序排序
      Collections.sort(lists, new FieldNumComparator());
      //表的中文名称
      sheetName = (String)configs.get(CgAutoListConstant.CONFIG_NAME);
      //表的英文名称
      String tableName = (String)configs.get(CgAutoListConstant.TABLENAME);
      //导出文件名称 form表单中文名-v版本号.xsl
      codedFileName = sheetName+"_"+tableName+"-v"+(String)configs.get(CgAutoListConstant.CONFIG_VERSION);
      // 生成提示信息,
      response.setContentType("application/vnd.ms-excel");

      OutputStream fOut = null;
      try {

        // 根据浏览器进行转码,使其支持中文文件名
        String browse = BrowserUtils.checkBrowse(request);
        if ("MSIE".equalsIgnoreCase(browse.substring(0, 4))) {
          response.setHeader("content-disposition",
              "attachment;filename="
                  + java.net.URLEncoder.encode(codedFileName,
                      "UTF-8") + ".xls");
        } else {
          String newtitle = new String(codedFileName.getBytes("UTF-8"),
              "ISO8859-1");
          response.setHeader("content-disposition",
              "attachment;filename=" + newtitle + ".xls");
        }
        // 产生工作簿对象
        HSSFWorkbook workbook = null;
        workbook = ExcelTempletService.exportExcel(sheetName, lists);
        fOut = response.getOutputStream();
        workbook.write(fOut);
      } catch (UnsupportedEncodingException e1) {

      } catch (Exception e) {

      } finally {
        try {
          fOut.flush();
          fOut.close();
        } catch (IOException e) {

        }
      }
    } else {
      throw new BusinessException("参数错误");
    }
   
  }

  @RequestMapping(params = "goImplXls" , method = RequestMethod.GET)
    public ModelAndView goImplXls(HttpServletRequest request) {
    request.setAttribute("tableName", request.getParameter("tableName"));
      return  new ModelAndView("jeecg/cgform/excel/upload");
    }
 
  /**
   * 上传模版数据
   * @param request
   * @param response
   * @return
   */
  @RequestMapping(params = "importExcel", method = RequestMethod.POST)
  @ResponseBody
  @SuppressWarnings("all")
  public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
    String message = "上传成功";
    AjaxJson j = new AjaxJson();
    String configId = request.getParameter("tableName");
    String jversion = cgFormFieldService.getCgFormVersionByTableName(configId);
    Map<String, Object> configs = configService.queryConfigs(configId,jversion);
    //数据库中版本号
    String version = (String)configs.get(CgAutoListConstant.CONFIG_VERSION);
    List<CgFormFieldEntity> lists = (List<CgFormFieldEntity>) configs.get(CgAutoListConstant.FILEDS);
   
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
    for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
      MultipartFile file = entity.getValue();// 获取上传文件对象
      //上传文件的版本号
      String docVersion = getDocVersion(file.getOriginalFilename());
      if (docVersion.equals(version)) {
        List<Map<String, Object>> listDate;
        try {
          //读取excel模版数据
          listDate = (List<Map<String, Object>>) ExcelTempletService.importExcelByIs(file.getInputStream(), lists);
          if (listDate==null) {
            message = "识别模版数据错误";
            logger.error(message);
          }else{
            for (Map<String, Object> map : listDate) {
              map.put("id", UUIDGenerator.generate());
              int num = dataBaseService.insertTable(configId, map);
            }
            message = "文件导入成功!";
          }
        } catch (IOException e) {
          message = "文件导入失败!";
          logger.error(ExceptionUtil.getExceptionMessage(e));
        }
      }else{
        message = "模版文件版本和表达不匹配,请重新下载模版";
        logger.error(message);
      }
    }
    j.setMsg(message);
    return j;
  }
  /**
   * 返回模版文件的版本号
   * 默认文件名是: form表单中文名-v版本号.xsl
   * 也有可能是: form表单中文名-v版本号(1).xsl
   * @param docName
   * @return
   */
  private static String  getDocVersion(String docName){
    if(docName.indexOf("(")>0){
      return docName.substring(docName.indexOf("-v")+2, docName.indexOf("("));
    }else {
      return docName.substring(docName.indexOf("-v")+2, docName.indexOf("."));
    }
  }
}
TOP

Related Classes of org.jeecgframework.web.cgform.controller.excel.ExcelTempletController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.