当前位置: 首页 > ai >正文

#苍穹外卖# (day 12)

目录

day12 数据统计Excel报表

1 工作台

1 界面展示

2 需求分析

2 Apache POI

导出运营数据Excel报表

1 Controller层导出运营数据报表

2 Service业务层接口实现

3 Service层接口实现类


day12 数据统计Excel报表

1 工作台

1 界面展示

2 需求分析

接口设计:

  1. 今日数据接口

  2. 订单管理接口

  3. 菜品总览接口

  4. 套餐总览接口

  5. 订单搜索接口(已完成)

  6. 各个状态的订单数量统计接口(已完成)

2 Apache POI

简单代码示例

package com.sky.test;import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;
import java.io.FileOutputStream;public class POITest {public static void main(String[] args) {try {testRead();} catch (Exception e) {e.printStackTrace();}}/*** 通过POI创建Excel文件并写入内容*/public static void testWriter() throws Exception {// 在内存当中创建一个Excel文件XSSFWorkbook excel = new XSSFWorkbook();// 显式创建两个Sheet页XSSFSheet employeeInfoSheet = excel.createSheet("员工信息");XSSFSheet employeeAddressSheet = excel.createSheet("员工住址");// 在Sheet页中创建行对象XSSFRow row1 = employeeInfoSheet.createRow(0);XSSFRow row2 = employeeAddressSheet.createRow(0);// 在Excel文件当中创建单元格并设置值row1.createCell(0).setCellValue("xiaoaniter1");row1.createCell(1).setCellValue("xiaoaniter2");row2.createCell(0).setCellValue("xiaoaniter3");row2.createCell(1).setCellValue("xiaoaniter4");// 将Excel文件输出到磁盘中try (FileOutputStream fos = new FileOutputStream("D:\\test1.xlsx")) {excel.write(fos);}// 关闭资源excel.close();}/*** 通过POI读取Excel文件** @throws Exception*/public static void testRead() throws Exception {// 通过文件输入流创建Excel文件FileInputStream fileInputStream = new FileInputStream("D:\\test1.xlsx");XSSFWorkbook excel = new XSSFWorkbook(fileInputStream);//读取Excel文件的第一个sheet页XSSFSheet sheet = excel.getSheetAt(1);for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {XSSFRow row = sheet.getRow(i);for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {System.out.print(row.getCell(j) + "\t");}}excel.close();fileInputStream.close();}
}

导出运营数据Excel报表

业务规则:

  • 导出Excel形式的报表文件
  • 导出最近30天的运行数据

代码开发实现步骤:

  • 1 设计Excel模板文件
  • 2 查询最近30天的数据
  • 3 将查询的数据填充
  • 4 将文件下载到客户端浏览器

代码实现:

1 Controller层导出运营数据报表

    /*** 导出运营数据报表** @param response*/@GetMapping("/export")@ApiOperation("导出运营数据报表")public void export(HttpServletResponse response) {reportService.exportBusinessData(response);log.info("导出运营数据报表");}

2 Service业务层接口实现

    /*** 导出Excel数据报表** @param response*/void exportBusinessData(HttpServletResponse response);

3 Service层接口实现类

    @Autowiredprivate WorkspaceService workspaceService;/*** 导出Excel数据报表** @param response*/@Overridepublic void exportBusinessData(HttpServletResponse response) {//1 查询数据库,获取营业数据(最近三十天)LocalDate begin =LocalDate.now().minusDays(30);LocalDate end = LocalDate.now().minusDays(1);LocalDateTime beginTime = LocalDateTime.of(begin, LocalTime.MIN);//获取当前日期的起始时间LocalDateTime endTime = LocalDateTime.of(end, LocalTime.MAX);//获取当前日期的结束时间BusinessDataVO businessData = workspaceService.getBusinessData(beginTime, endTime);//2 通过POI将数据写道Excel文件中InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");try {assert resourceAsStream != null;//创建工作簿XSSFWorkbook excel = new XSSFWorkbook(resourceAsStream);//填充数据(获取Sheet页)XSSFSheet sheet1 = excel.getSheet("Sheet1");//概览数据//填充数据时间sheet1.getRow(1).getCell(1).setCellValue("时间"+begin + "至" + end);//获取第四行XSSFRow row = sheet1.getRow(3);//获取第四行row.getCell(2).setCellValue(businessData.getTurnover());//营业额row.getCell(4).setCellValue(businessData.getOrderCompletionRate());//订单完成率row.getCell(6).setCellValue(businessData.getNewUsers());//新增用户row = sheet1.getRow(4);//获取第五行row.getCell(2).setCellValue(businessData.getValidOrderCount());//有效订单数row.getCell(4).setCellValue(businessData.getUnitPrice());//平均客单价//明细数据(最近三十天)for (int i = 0; i < 30; i++) {LocalDate date = begin.plusDays(i);businessData = workspaceService.getBusinessData(LocalDateTime.of(date, LocalTime.MIN),LocalDateTime.of(date, LocalTime.MAX));//获取指定日期的营业数据row = sheet1.getRow(7 + i);//获取行数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 通过输出流将Excel文件下载到客户端浏览器ServletOutputStream outputStream = response.getOutputStream();excel.write(outputStream);outputStream.close();excel.close();log.info("导出Excel数据报表成功");} catch (IOException e) {throw new RuntimeException(e);}}

http://www.xdnf.cn/news/2397.html

相关文章:

  • 2025年大一ACM训练-搜索
  • 如何创建并使用极狐GitLab 部署令牌?
  • 特征工程四-1:自定义函数find_similar_docs查找最相似文档案例
  • ts全局导入接口
  • 8.Excel:数据验证和下拉列表
  • C++入门小馆: STL 之queue和stack
  • 图像预处理-形态学变换
  • ESP32-S3 入门学习笔记(四):LED实验
  • shell脚本部署disu博客
  • java当中的类加载器
  • 大模型评测调研报告
  • docker compose -p的踩坑经验
  • terraform查看资源建的关联关系
  • PyQt Python列表操作全解析:从基础到实战
  • 北峰专业数字集群通信系统:构建消防指挥调度的智能化基石
  • 中国地区土地覆盖综合数据集
  • DigitalOcean推出Valkey托管缓存服务
  • Lua 第11部分 小插曲:出现频率最高的单词
  • 驼峰命名法(Camel Case)与匈牙利命名法(Hungarian Notation)详解
  • Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式
  • 3、Linux操作系统下,linux的技术手册使用(man)
  • flask返回文件的同时返回其他参数
  • 微服务即时通信系统(十二)---入口网关子服务
  • 北京工业大学25计专上岸经验分享
  • Spark-Streaming核心编程的总结
  • 全新升级:BRAV-7601-T003高性能无风扇AI边缘计算系统,助力智能未来!
  • 教育培训平台源码选型避坑指南:如何避免二次开发的高成本?
  • STM32 驱动 INA226 测量电流电压功率
  • 【MCP】从一个天气查询服务带你了解MCP
  • C++ 基础内容入门