文章目录
-
- 概要
- 整体架构流程
- 技术细节
- 小结
概要
产品原型
在数据统计页面,有一个数据导出的按钮,点击该按钮时,其实就会下载一个文件。这个文件实际上是一个Excel形式的文件,文件中主要包含最近30日运营相关的数据。表格的形式已经固定,主要由概览数据和明细数据两部分组成。真正导出这个报表之后,相对应的数字就会填充在表格中,就可以进行存档。
原型图:
需求分析以及接口设计
业务规则:
-
导出Excel形式的报表文件
-
导出最近30天的运营数据
技术细节
1.Controller层
/**
* 导出运营数据Excel表
* @param response
*/
@GetMapping("/export")
@ApiOperation("导出运营数据Excel表")
public void export(HttpServletResponse response){
reportService.export(response);
}
2.Service层:
/**
* 导出运营数据Excel表
* @param httpServletResponse
*/
public void export(HttpServletResponse httpServletResponse) {
//1.查询近30天的运营数据
LocalDateTime begin = LocalDateTime.now().minusDays(30);
LocalDateTime end = LocalDateTime.now().minusDays(1);
BusinessDataVO businessData = workspaceService.getBusinessData(begin,end);
//2.将运营数据写入Excel表
//2.1读取模版
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/excel.xlsx");
try {
//2.2将运营数据填充到模版
XSSFWorkbook excel = new XSSFWorkbook(inputStream);
XSSFSheet sheet = excel.getSheet("Sheet1");
//填充时间
XSSFRow row = sheet.getRow(1);
row.getCell(1).setCellValue("时间:" + begin + "~" + end);
//填充概览数据(第4行)
row = sheet.getRow(3);
row.getCell(2).setCellValue(businessData.getTurnover());
row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
row.getCell(6).setCellValue(businessData.getNewUsers());
//第5行
row = sheet.getRow(4);
row.getCell(2).setCellValue(businessData.getValidOrderCount());
row.getCell(4).setCellValue(businessData.getUnitPrice());
//明细数据(第8行开始)
for (int i = 0; i < 30; i++) {
//获取到每一行
row = sheet.getRow(7 + i);
//填充一行的数据
//获取到每一天
LocalDateTime date = begin.plusDays(i);
//准备每天的明细数据
businessData = workspaceService.getBusinessData(date, date.plusDays(1));
row.getCell(1).setCellValue(date.toString());
row.getCell(2).setCellValue(businessData.getTurnover());
row.getCell(3).setCellValue(businessData.getValidOrderCount());
row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
row.getCell(5).setCellValue(businessData.getUnitPrice());
row.getCell(6).setCellValue(businessData.getNewUsers());
}
//3.下载操作
ServletOutputStream outputStream = httpServletResponse.getOutputStream();
excel.write(outputStream);
//关流
outputStream.flush();
outputStream.close();
inputStream.close();
excel.close();
} catch (IOException e) {
e.printStackTrace();
}
}