苍穹外卖--POI-导出运营数据Excel报表

This commit is contained in:
2025-12-02 15:32:35 +08:00
parent 7469f1f209
commit 6646144612
4 changed files with 80 additions and 4 deletions

View File

@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
@RestController
@@ -85,4 +86,14 @@ public class ReportController {
return Result.success(vo);
}
/**
* 使用响应对象,导出报表数据
* @param response
*/
@ApiOperation("导出报表数据")
@GetMapping("/export")
public void exportExcel(HttpServletResponse response) throws Exception {
reportService.exportExcel(response);
}
}

View File

@@ -5,6 +5,7 @@ import com.sky.vo.SalesTop10ReportVO;
import com.sky.vo.TurnoverReportVO;
import com.sky.vo.UserReportVO;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
public interface ReportService {
@@ -39,4 +40,6 @@ public interface ReportService {
* @return
*/
SalesTop10ReportVO getTop10(LocalDate begin, LocalDate end);
void exportExcel(HttpServletResponse response) throws Exception;
}

View File

@@ -5,14 +5,19 @@ import com.sky.entity.Orders;
import com.sky.mapper.OrderMapper;
import com.sky.mapper.UserMapper;
import com.sky.service.ReportService;
import com.sky.vo.OrderReportVO;
import com.sky.vo.SalesTop10ReportVO;
import com.sky.vo.TurnoverReportVO;
import com.sky.vo.UserReportVO;
import com.sky.service.WorkspaceService;
import com.sky.vo.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -31,6 +36,9 @@ public class ReportServiceImpl implements ReportService {
@Autowired
private UserMapper userMapper;
@Autowired
private WorkspaceService workspaceService;
/**
* 统计指定时间内每天的营业额数据
@@ -230,4 +238,58 @@ public class ReportServiceImpl implements ReportService {
return salesTop10ReportVO;
}
@Override
public void exportExcel(HttpServletResponse response) throws Exception {
//准备30天的今日数据工作台模块实现完毕
LocalDate now = LocalDate.now();//今日日期
LocalDate beginDate = now.minusDays(30);//开始日期
LocalDate endDate = now.minusDays(1);//结束日期
LocalDateTime beginTime = LocalDateTime.of(beginDate, LocalTime.MIN);
LocalDateTime endTime = LocalDateTime.of(endDate, LocalTime.MAX);
//查询近30天的每日数据
BusinessDataVO businessData = workspaceService.getBusinessData(beginTime, endTime);
//使用输入流读取服务器的模版将30天的商业数据填充到模版中
InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
XSSFWorkbook excel = new XSSFWorkbook(in);
XSSFSheet sheet = excel.getSheetAt(0);
//时间范围填充
sheet.getRow(1).getCell(1).setCellValue(beginDate.toString()+""+endDate.toString());
//概览数据填充
sheet.getRow(3).getCell(2).setCellValue(businessData.getTurnover());
sheet.getRow(3).getCell(4).setCellValue(businessData.getOrderCompletionRate());
sheet.getRow(3).getCell(6).setCellValue(businessData.getNewUsers());
sheet.getRow(4).getCell(2).setCellValue(businessData.getValidOrderCount());
sheet.getRow(4).getCell(4).setCellValue(businessData.getUnitPrice());
//填充明细数据一共30行
for (int i = 0; i < 30; i++) {
//从开始日期动态获取近30天的每天的日期
LocalDate date = beginDate.plusDays(i);//1-1 1-2 1-3 -----1-30
BusinessDataVO data = workspaceService.getBusinessData(LocalDateTime.of(date,LocalTime.MIN), LocalDateTime.of(date,LocalTime.MAX));
//获取动态的row
XSSFRow row = sheet.getRow(7 + i);
//动态填充一行数据
row.getCell(1).setCellValue(date.toString());
row.getCell(2).setCellValue(data.getTurnover());
row.getCell(3).setCellValue(data.getValidOrderCount());
row.getCell(4).setCellValue(data.getOrderCompletionRate());
row.getCell(5).setCellValue(data.getUnitPrice());
row.getCell(6).setCellValue(data.getNewUsers());
}
//填充完毕excel文件数据之后通过响应对象的输出流将excel字节数据输出到对应的客户端浏览器中
ServletOutputStream out = response.getOutputStream();
excel.write(out);
//资源释放
out.close();
excel.close();
}
}