要实现的功能和昨天差不多,都是查询数据。
所以我们就写出查询语句,然后直接导入已经写好的代码。
select count(amount) from orders
where status=5 and order_time >= #{begin} and order_time <= #{end}
select count(*) from orders
where status=5 and order_time >= #{begin} and order_time <= #{end}
所有订单:
select count(*) from orders
where order_time >= #{begin} and order_time <= #{end}
订单完成率 = 有效订单 / 所有订单
平均客单价 = 营业额 / 有效订单
select count(*) from user
where create_time >= #{begin} and create_time <= #{end}
select count(*) from orders
where status=2 and order_time >=#{begin} and order_time <= #{end}
select count(*) from orders
where status=3 and order_time >=#{begin} and order_time <= #{end}
select count(*) from orders
where status=5 and order_time >=#{begin} and order_time <= #{end}
select count(*) from orders
where status=6 and order_time >=#{begin} and order_time <= #{end}
select count(*) from orders
where order_time >=#{begin} and order_time <= #{end}
select count(*) from dish
where status=1
select count(*) from dish
where status=1
select count(*) from setmeal
where status=1
select count(*) from setmeal
where status=0
下载好黑马该项目的资料:
然后自己导入。
操作Office文件的包。本文该项目中主要用来读写excel表。
应用场景主要在:交易明细、销量统计、批量数据导入(批量添加)
先创建Excel文档/工作簿
在工作簿中创建表格
在表格中创建行
在行中创建单元格
往单元格中设置数据
将整个Excel文档写到硬盘上
直接在测试类中写例子的测试的。
@Test
public void testWrite() throws IOException {
// 1. 创建整个工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 2. 在工作簿中创建表格
XSSFSheet sheet1 = workbook.createSheet("表格1");
// 3. 在表格中创建行
XSSFRow row_1 = sheet1.createRow(1);
// 4. 在行中创建单元格
XSSFCell cell_1_0 = row_1.createCell(0);
// 5. 网单元格中设置数据
cell_1_0.setCellValue("哈哈,我是cell_1_0");
// 6. 将整个Excel文档写到硬盘上
FileOutputStream fos = new FileOutputStream("D:/a.xlsx");
workbook.write(fos);
// 7. 释放资源
fos.close();
workbook.close();
}
先创建工作簿,关联本地Excel文档
从工作簿中获取表格
从表格中获取行
从行中获取单元格
从单元格中获取数据
@Test
public void testRead() throws IOException {
// 1. 先创建工作簿,关联本地Excel文档
XSSFWorkbook workbook = new XSSFWorkbook("D:/a.xlsx");
// 2. 从工作簿中获取表格
XSSFSheet sheet = workbook.getSheetAt(0);
// 3. 从表格中获取行
XSSFRow row4 = sheet.getRow(3);
// 4. 从行中获取单元格 以及 5. 从单元格中获取数据
String name = row4.getCell(0).getStringCellValue();
String age = row4.getCell(1).getStringCellValue();
System.out.println(name);
System.out.println(age);
XSSFRow row5 = sheet.getRow(4);
System.out.println(row5.getCell(0).getStringCellValue());
System.out.println(row5.getCell(1).getNumericCellValue());
workbook.close();
}
导出近30天的运营数据。
读取Excel模版到内存中。
准备运营数据
将数据写到Excel模板中。
将Excel文档响应回浏览器(文件下载)
Controller:
@GetMapping("/export")
@ApiOperation("导出运营数据报表")
public String export(HttpServletResponse response) throws IOException {
reportService.exportBusinessData(response);
return "OK";
}
Service:
@Override
public void exportBusinessData(HttpServletResponse response) throws IOException{
InputStream is = ClassLoader.getSystemResourceAsStream("运营数据报表模板.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(is);
LocalDate begin = LocalDate.now().plusDays(-30);
LocalDate end = LocalDate.now().plusDays(-1);
BusinessDataVO businessDataVO = workspaceService.getBusinessData(
LocalDateTime.of(begin, LocalTime.MIN),
LocalDateTime.of(end, LocalTime.MAX)
);
XSSFSheet sheet = workbook.getSheetAt(0);
sheet.getRow(1).getCell(1).setCellValue("时间:" + begin + "至" + end);
XSSFRow row4 = sheet.getRow(3);
row4.getCell(2).setCellValue(businessDataVO.getTurnover());
row4.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());
row4.getCell(6).setCellValue(businessDataVO.getNewUsers());
XSSFRow row5 = sheet.getRow(4);
row5.getCell(2).setCellValue(businessDataVO.getValidOrderCount());
row5.getCell(4).setCellValue(businessDataVO.getUnitPrice());
int i = 0;
while (begin.compareTo(end) <= 0) {
BusinessDataVO businessData = workspaceService.getBusinessData(LocalDateTime.of(begin, LocalTime.MIN),
LocalDateTime.of(begin, LocalTime.MAX));
XSSFRow row = sheet.getRow(7 + i++);
row.getCell(1).setCellValue(begin.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());
begin = begin.plusDays(1);
}
workbook.write(response.getOutputStream());
}
ClassLoader能加载的文件位置在resources下。
需要用maven构建管理的complie编译一下,才能保证类加载器ClassLoader加载到。
下标中getRow(0)与getCell(1)对应的分别是第一列第2行的数据。