管制层

@PostMapping("/questionListExport")@ApiOperation(httpMethod = "POST",value = "",notes = "列表导")public WGJsonResult questionListExport(@RequestBody BackQuestionExport param, HttpServletResponse response) throws Exception {    return backQuestionService.questionListExport(param,response);}

服务层

@Overridepublic WGJsonResult questionListExport(BackQuestionExport param, HttpServletResponse response) throws IOException {    PageHelper.startPage(param.getPageNo(),param.getPageSize());   List<BackQuestionExport> eports = backQuestionMapper.questionListExport(param);   Map<String,List<BackQuestionExport>> dataMap = eports.stream().collect(Collectors.groupingBy(p->p.getInvitName()+"_"+p.getInvitId(), Collectors.toList()));   exportExcel(response, dataMap);  //导出之后记录日志 ask_exp_imp_record    addLog(eports,1);   return success("下载胜利");}private void exportExcel(HttpServletResponse response, Map<String, List<BackQuestionExport>> map) throws IOException {    SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss");    String nowDate = sdf4.format(new Date());    String fileName = nowDate + ".zip";    // 获取我的项目根门路    String rootPath =System.getProperty("user.dir")+"_"+nowDate;//        System.out.println("-----------"+System.getProperty("user.dir"));    File f = new File(rootPath);    if (!f.exists()) {        f.mkdirs();    }    String tempPath = "";    response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);    response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));    ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(rootPath + File.separator + fileName));    try {        for (Map.Entry<String, List<BackQuestionExport>> entry : map.entrySet()) {            String k = entry.getKey();            List<BackQuestionExport> value = entry.getValue();            tempPath = rootPath + File.separator + k + ".xlsx";            EasyExcel.write(tempPath, BackQuestionExport.class).sheet("问答数据").doWrite(value);            //创立输出流读取文件            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(tempPath));            //将文件写入zip内,行将文件进行打包            zipOutputStream.putNextEntry(new ZipEntry(nowDate+File.separator+k + ".xlsx"));            //写入文件的办法,同上            int size = 0;            byte[] buffer = new byte[1024];  //设置读取数据缓存大小            while ((size = bis.read(buffer)) > 0) {                zipOutputStream.write(buffer, 0, size);            }            bis.close();        }        //敞开数据流,留神敞开的程序        zipOutputStream.close();        FileInputStream fis = new FileInputStream(rootPath + File.separator + fileName);        BufferedInputStream buff = new BufferedInputStream(fis);        byte[] b = new byte[1024];// 相当于咱们的缓存        int k = 0;// 该值用于计算以后理论下载了多少字节        OutputStream out = response.getOutputStream();// 从response对象中失去输入流,筹备下载        // 开始循环下载        while ((k = buff.read(b)) > 0) {            out.write(b, 0, k);        }        out.close();        buff.close();    } catch (Exception e) {        System.out.println(e.fillInStackTrace());    } finally {        if (!f.exists())            return;        if (f.isFile()) {            f.delete();            return;        }        File[] files = f.listFiles();        for (int i = 0; i < files.length; i++) {            files[i].delete();        }        f.delete();    }}

sql

<select id="questionListExport" resultMap="UserBackQuestionExpMap">    SELECT * FROM    (    SELECT        ic.question_id,        ic.id,        ic.invit_id,        ic.invit_name,        DATE_FORMAT( ic.insert_time, '%Y-%m-%d %H:%i:%S' ) insert_time,        ic.is_export,        aq.question,        aq.label_value,        aq.lable_name,        aq.`describe`,        REPLACE ( uc.file_path, ',', ',\\n' ) file_path,        IF(ak.answer IS NOT NULL,1,0) answerFlag    FROM        invit_contact ic        LEFT JOIN ask_question aq ON ic.question_id = aq.id        LEFT JOIN ( SELECT table_id, GROUP_CONCAT( file_path ) file_path FROM upload_change WHERE table_name = 'ask_question' GROUP BY table_id ) uc ON uc.table_id = ic.question_id        LEFT JOIN (SELECT question_id, GROUP_CONCAT( ak.result SEPARATOR ',' )as answer  FROM  ask_question aq LEFT JOIN ask_answer ak ON aq.id = ak.question_id GROUP BY ak.question_id        ) ak  ON ic.question_id  = ak.question_id    WHERE        aq.is_del = 0    )f    <include refid="SearchSql"/>    ORDER BY insert_time DESC</select>