业务场景:
后台需要提供一个导出所有数据的接口,将导出的excel表格返回给前端展示
代码层面:
展示主要跟导出功能相关的代码,主要流程:获取业务数据,形成excel数据流,导出excel
@PostMapping(value = "/v1/analysis/mission/readrecordExport")
public void readrecordExport(@RequestBody MissionReadRecordRequest missionReadRecordRequest,HttpServletResponse response) throws IOException {
missionReadRecordRequest.setPage(1);
missionReadRecordRequest.setSize(99999);
if(missionReadRecordRequest.getBeginTime()==null){
missionReadRecordRequest.setBeginTime(DateUtils.getDate(-30));
}
if(missionReadRecordRequest.getEndTime()==null){
missionReadRecordRequest.setEndTime(new Date());
}else{
missionReadRecordRequest.setEndTime(DateUtils.getDateAfter(missionReadRecordRequest.getEndTime(),1));
}
List<MissionReadRecord> list = missionReadRecordService.getMemberMissionReadRecordList(missionReadRecordRequest);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss");
String title = simpleDateFormat.format(new Date()) + ".xls";
//使用流将数据导出
OutputStream out = null;
try {
out = response.getOutputStream();
//防止中文乱码
response.setHeader("Content-Type", "application/x-xls");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment;fileName=" + new String(title.getBytes(), "UTF-8"));
Map<String, String> headers = new LinkedHashMap<>();
headers.put("createTime", "创建时间");
headers.put("jobType", "任务类型");
headers.put("readContentType", "阅读内容类型");
headers.put("title", "内容标题");
headers.put("objectId", "内容id");
headers.put("coinAmount", "奖励金币数");
headers.put("readTime", "阅读时长");
headers.put("todayCount", "当日同类奖励计数");
List<Map<String, Object>> dataset = list.stream()
.map(dto -> {
Map<String, Object> map = new HashMap<>();
map.put("createTime", dto.getCreateTime());
map.put("jobType", dto.getJobType());
map.put("readContentType", dto.getReadContentType());
map.put("title", dto.getTitle());
map.put("objectId", dto.getObjectId());
map.put("coinAmount", dto.getCoinAmount());
map.put("readTime", dto.getReadTime());
map.put("todayCount", dto.getTodayCount());
return map;
})
.collect(Collectors.toList());
ExcelUtil.exportExcelwithTitle(title, headers, dataset, out, "yyyy-MM-dd HH:mm:ss");
} finally {
if (out != null) {
out.flush();
}
if (out != null) {
out.close();
}
}
}
package com.mongcent.core.commons.ui.ExcelUtil;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collectio