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

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

导出运营数据Excel报表

需求分析和设计

产品原型

在数据统计页面,有一个数据导出的按钮,点击该按钮时,其实就会下载一个文件。这个文件实际上是一个Excel形式的文件,文件中主要包含最近30日运营相关的数据。表格的形式已经固定,主要由概览数据和明细数据两部分组成。真正导出这个报表之后,相对应的数字就会填充在表格中,就可以进行存档。

业务规则:

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

注意:

  • 当前接口没有传递参数,因为导出的是最近30天的运营数据,后端计算即可,所以不需要任何参数

  • 当前接口没有返回数据,因为报表导出功能本质上是文件下载,服务端会通过输出流将Excel文件下载到客户端浏览器

代码开发

实现步骤

1). 设计Excel模板文件

2). 查询近30天的运营数据

3). 将查询到的运营数据写入模板文件

4). 通过输出流将Excel文件下载到客户端浏览器

Controller层

根据接口定义,在ReportController中创建export方法:

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

在ReportService接口中声明导出运营数据报表的方法:

	/**
     * 导出近30天的运营数据报表
     * @param response
     **/
    void exportBusinessData(HttpServletResponse response);
Service层实现类

在ReportServiceImpl实现类中实现导出运营数据报表的方法:

提前将资料中的运营数据报表模板.xlsx拷贝到项目的resources/template目录中

    /**导出近30天的运营数据报表
     * @param response
     **/
    public void exportBusinessData(HttpServletResponse response) {
        LocalDate begin = LocalDate.now().minusDays(30);
        LocalDate end = LocalDate.now().minusDays(1);
        //查询概览运营数据,提供给Excel模板文件
        BusinessDataVO businessData = workspaceService.getBusinessData(LocalDateTime.of(begin,LocalTime.MIN), LocalDateTime.of(end, LocalTime.MAX));
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");
        try {
            //基于提供好的模板文件创建一个新的Excel表格对象
            XSSFWorkbook excel = new XSSFWorkbook(inputStream);
            //获得Excel文件中的一个Sheet页
            XSSFSheet sheet = excel.getSheet("Sheet1");

            sheet.getRow(1).getCell(1).setCellValue(begin + "至" + end);
            //获得第4行
            XSSFRow row = sheet.getRow(3);
            //获取单元格
            row.getCell(2).setCellValue(businessData.getTurnover());
            row.getCell(4).setCellValue(businessData.getOrderCompletionRate());
            row.getCell(6).setCellValue(businessData.getNewUsers());
            row = sheet.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 = sheet.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());
            }
            //通过输出流将文件下载到客户端浏览器中
            ServletOutputStream out = response.getOutputStream();
            excel.write(out);
            //关闭资源
            out.flush();
            out.close();
            excel.close();

        }catch (IOException e){
            e.printStackTrace();
        }
    }

http://www.kler.cn/news/156710.html

相关文章:

  • 【go语言开发】Minio基本使用,包括环境搭建,接口封装和代码测试
  • mac mini只有键盘怎么连接蓝牙鼠标
  • 使用 PHPMailer 实现邮件的实时发送
  • Java中synchronized与Lock的区别与使用
  • CityEngine2023 shp数据城市与路网三维模型并导入UE5
  • 科普关于msvcp140.dll文件是什么内容,解决msvcp140.dll丢失的修复方法
  • Reactor网络线程模型
  • 第十五届蓝桥杯模拟赛(第二期 C++)
  • prometheus基础,结合node_exporter监控节点
  • docker配置redis主从、哨兵集群
  • css新闻链接案例
  • Clickhouse Join
  • 外包干了4年,技术退步太明显了。。。。。
  • Mac IDEA解决Maven项目命令行报错:command not found: mvn
  • [C国演义] 第二十三章
  • SpringBoot + Spring Cloud Alibaba + Nacos实现服务管理
  • Qt 网络通信
  • 【JavaEE】单例模式
  • 使用ESP8266驱动TFT显示屏
  • html/css中用float实现的盒子案例
  • virtualbox上win7企业微信CPU高问题
  • 企业微信协议开发,API接口调用
  • 大数据基础设施搭建 - 数据装载
  • C++ 系列 第五篇 C++ 算术运算符及类型转换
  • ClickHouse入门手册1.0
  • GO基础之变量与常量
  • 专业课:递归非递归中序遍历
  • LeetCode [中等] 二叉树中序—二叉搜索树中第K小的元素
  • 【wvp】测试记录
  • 百度收录批量查询工具,免费SEO优化排名工具