苍穹外卖--开发记录day12(完结篇)

目录

  • 苍穹外卖day12
    • 一:工作台
    • 二:apachePOI
    • 三:导出excel报表(最后一个功能!!)
  • 总结(项目完结心得)

苍穹外卖day12

一:工作台

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码导入之后就是这样的效果,基本上是对原本的代码的调用,这里就不多赘述了;

二:apachePOI

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1:写入:

public static void write() throws IOException {XSSFWorkbook excel = new XSSFWorkbook();XSSFSheet sheet = excel.createSheet("info");XSSFRow row = sheet.createRow(1);row.createCell(1).setCellValue("姓名");row.createCell(2).setCellValue("城市");XSSFRow row1 = sheet.createRow(2);row1.createCell(1).setCellValue("张三");row1.createCell(2).setCellValue("天津");FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\info.xlsx"));excel.write(fileOutputStream);excel.close();fileOutputStream.close();
}

首先创建一个excel对象,然后使用createSheet创建一个表单页面,使用createRow创建一行,使用setCellValue在这一行里添加数据,然后我们需要将这个excel中的内容导入到文件中,所以创建一个文件输入流,将excel的内容通过write写入;最后别忘记关闭资源;

2:读取:

public static void read()throws Exception {FileInputStream FileinputStream = new FileInputStream(new File("D:\\info.xlsx"));XSSFWorkbook sheets = new XSSFWorkbook(FileinputStream);XSSFSheet sheetAt = sheets.getSheetAt(0);int lastRowNum = sheetAt.getLastRowNum();for (int i = 1; i <=lastRowNum; i++) {XSSFRow row = sheetAt.getRow(i);String stringCellValue = row.getCell(1).getStringCellValue();String stringCellValue1 = row.getCell(2).getStringCellValue();System.out.println(stringCellValue1+" "+stringCellValue);}FileinputStream.close();sheets.close();
}

首先获取创建一个文件输出流,我们使用XSSFWorkbook对象将文件输出流中的对象获取到,然后获取到最后一行的行号,进行读取,我们要使用循环来读取:通过getSheetAt获取表单;通过getRow获取每一行,通过getCell获取行中指定的单元格,通过getStringCellValue将单元格的数据转成字符串;

三:导出excel报表(最后一个功能!!)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5C28568%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage

这里我们不用返回参数,最后是将文件通过文件输出流直接输出;

controller:

@GetMapping("/export")
public void export(HttpServletResponse response){reportService.export(response);
}

因为我们要将文件输出到浏览器上,所以要接收一个response对象,用于将其输出到浏览器中

service:

@Override
public void export(HttpServletResponse response) {LocalDate now = LocalDate.now();LocalDate begin = now.plusDays(-30);LocalDate end = now.plusDays(-1);BusinessDataVO businessDatapuls = workspaceService.getBusinessDatapuls(LocalDateTime.of(begin, LocalTime.MIN),LocalDateTime.of(end, LocalTime.MAX));InputStream resourceAsStream =this.getClass().getClassLoader().getResourceAsStream("template/运营数据报表模板.xlsx");try {//填充报表数据XSSFWorkbook sheets = new XSSFWorkbook(resourceAsStream);XSSFSheet sheetAt = sheets.getSheetAt(0);sheetAt.getRow(1).getCell(1).setCellValue(begin+"--"+end+"营业数据");sheetAt.getRow(3).getCell(2).setCellValue(businessDatapuls.getTurnover());sheetAt.getRow(3).getCell(4).setCellValue(businessDatapuls.getOrderCompletionRate());sheetAt.getRow(3).getCell(6).setCellValue(businessDatapuls.getNewUsers());sheetAt.getRow(4).getCell(2).setCellValue(businessDatapuls.getValidOrderCount());sheetAt.getRow(4).getCell(4).setCellValue(businessDatapuls.getUnitPrice());for (int i = 7; i < 37; i++) {BusinessDataVO businessData = workspaceService.getBusinessData(begin);XSSFRow row = sheetAt.getRow(i);row.getCell(1).setCellValue(String.valueOf(begin));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);}ServletOutputStream outputStream = response.getOutputStream();sheets.write(outputStream);outputStream.close();sheets.close();} catch (IOException e) {throw new RuntimeException(e);}
}

service这部分比较复杂,总体上分为三个方面:1:获取数据;2:填充数据;3:输出至浏览器

1:我们之前再工作台导入的代码中有一个方法是返回我们的需要的这些数据的,我们调用那个方法getBusinessDatapuls获取数据,因为我们获取的数据是最近三十天,也就是从三十天前到昨天,我们通过plusDays来计算时间;2:然后要填充数据,我们首先要获取模板,我们将模板文件放置在项目文件下,通过类加载器的getResourceAsStream,获取这个文件的输入流,我们再创建一个XSSFWorkbook对象,将输出流放入其中,接下来就是对数据的封装了,我们按照行和单元格来为数据赋值,前面的概览数据,下面是每天的数据,每天的数据我们就要去调用方法获取到每一天的数据,我们可以使用for循环来完成这个操作,这需要对每一行的逻辑进行编写然后循环就行,3:然后我们再从response中获取输出流我们将excel表格输出进去就行,然后别忘了关闭资源;

总结(项目完结心得)

我是从大概10月13号开始跟着视频做项目,做到今天用了差不多10天左右,苍穹外卖是我学完javaweb做的第一个项目,真的感觉收获很多,过完整个项目让我大致熟悉了项目的开发流程,需求分析-阅读文档-开发代码-测试,让我熟悉了项目的crud,熟悉了mvc的三层架构,同时还让我们了解了一些新的技术,比如说用swagger来生成接口文档,redis的基本使用,微信小程序的开发流程,websocket实现双向通信等等,个人觉得非常适合做刚学完javaweb熟悉ssm操作的第一个项目,接下来我会去学习微服务,再深入了一下微服务,我还会去把苍穹外卖的前端给简单过一遍,虽然是后端但也得知道一点前端的东西。(附上一张完结撒花的图片,弹幕的网友真的是我坚持下去的动力之一,泪目)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 虚拟机(JVM)中的内存泄漏排查技巧及各种内存查看命令分析工具推荐

文章目录 引言什么是内存泄漏&#xff1f;工具和技术1. 使用 jstat 监控 JVM2. 使用 jmap 生成堆转储文件3. 使用 jvisualvm 分析堆转储文件4. 使用 MAT&#xff08;Memory Analyzer Tool&#xff09;5. 使用 YourKit 或 JProfiler6. 代码审查和静态分析 实战案例案例 1&#x…

使用U-KAN训练自己的数据集 — 医疗影像分割

<U-KAN Makes Strong Backbone for Medical Image Segmentation and Generation> U-Net已成为各种视觉应用的基石,如图像分割和扩散概率模型。虽然通过整合变压器或mlp引入了许多创新设计和改进,但网络仍然局限于线性建模模式以及缺乏可解释性。为了应对这些挑战,受到…

ChartCheck: Explainable Fact-Checking over Real-World Chart Images

论文地址: https://aclanthology.org/2024.findings-acl.828.pdfhttps://aclanthology.org/2024.findings-acl.828.pdf 1.概述 事实验证技术在自然语言处理领域获得了广泛关注,尤其是在针对误导性陈述的检查方面。然而,利用图表等数据可视化来传播信息误导的情况却很少受到…

【简历】25届浙江某211大学JAVA简历:明明项目有货,但是长篇大论减分!!

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 另外&#xff1a;我们出这一系列校招简历指导的原因&#xff0c;就是看很多学生被忽悠&#xff0c;没有先定位大厂、中厂还是小公司&#xff0c;导…

Logistic回归(分类)问题探讨与实践

说明 在本专栏机器学习_墨#≯的博客-CSDN博客之前的博文中&#xff0c;已经对感知机[1]、SVM[2]以及线性回归问题[3]做过探讨和实践。感知机以及SVM是用来做分类的&#xff0c;线性回归是用来做拟合的。本文将要探讨的Logistic回归(逻辑回归)则是使用线性回归的方法来做分类(二…

90V转5V4A同步降压芯片WT6037

90V转5V4A同步降压芯片WT6037 WT6037 被定义为一款高压同步降压转换器&#xff0c;其设计可在 10V 至 90V 的宽泛工作电压区间内稳定运行。该转换器尤其适用于需承受宽电压输入范围的电池组系统&#xff0c;诸如 12V 至 72V 的电池组&#xff0c;以及 60V 至 90V 的降压应用场…

DOL 电机启动器接触器选择和选型

接触器连接在断路器和热过载保护继电器之间。接触器的选型和选择过程与断路器在计算满载电流和计算额定电流方面的过程类似。不同之处在于市场上可用组件的选择表。 从断路器的选型和选型中&#xff0c;我们发现&#xff1a; 电机尺寸 6HP 功率(P)4476W 电机FLC7.78A 断路…

汽车免拆诊断案例 | 2019 款奥迪 A6L 车行驶中偶发熄火

故障现象  一辆2019款奥迪A6L车&#xff0c;搭载2.0T发动机&#xff0c;累计行驶里程约为9万km。车主反映&#xff0c;车辆行驶中偶发熄火&#xff0c;故障频率较高。 故障诊断  接车后试车&#xff0c;起动发动机&#xff0c;可以正常起动着机。使用故障检测仪检测&#x…

一起搭WPF架构之完结总结篇

一起搭WPF架构之完结总结篇 前言设计总结设计介绍页面一页面二页面三 结束 前言 整体基于WPF架构&#xff0c;根据自己的需求简单设计与实现了衣橱的数据统计、增加与读取数据、并展示数据的小软件。我知道自己在设计方面还有很多不足&#xff0c;暂时先做到这里了&#xff0c…

【SQL|大数据|数据清洗|过滤】where条件中 “ != “ 和 “ NOT IN() ” 对NULL的处理

对数据进行清洗过滤的时候&#xff0c;NULL往往是一个很特殊的存在&#xff0c;对NULL值的存在通常有以下三种方式 1、保留NULL 2、过滤掉NULL 3、将NULL替换为其他符合业务需求的默认常量 下面是一些常用处理NULL的方式&#xff1a; 如下图所示数据源&#xff1a; car_vin&…

天锐绿盾与Ping32内网安全保护能力对比,选择最优方案

在数字化时代&#xff0c;企业内网安全面临着越来越多的挑战。有效保护内网数据安全&#xff0c;防止信息泄露和外部攻击至关重要。今天&#xff0c;我们将对比天锐绿盾和Ping32这两款内网安全保护软件&#xff0c;帮助您选择最适合的解决方案。 1. 安全防护机制 Ping32 Ping…

熔解曲线技术路线简介

在实时荧光定量PCR&#xff08;qPCR&#xff09;实验中&#xff0c;当双链DNA受热时&#xff0c;其互补碱基之间的氢键会逐渐断裂&#xff0c;导致双链分离成两条单链&#xff0c;这一过程被称为DNA的“熔解”。 总的DNA双螺旋结构降解一半的温度称为熔解温度&#xff08;Tm&a…

游戏推荐业务中基于 sentinel 的动态限流实践

作者&#xff1a;来自 vivo 互联网服务器团队- Gao Meng 本文介绍了一种基于 sentinel 进行二次开发的动态限流解决方案&#xff0c;包括什么是动态限流、为什么需要引入动态限流、以及动态限流的实现原理。 一、背景 1.1 当前的限流方案 随着互联网的发展及业务的增长&…

python基础综合案例(数据可视化-地图可视化)

1.基础地图使用 注意写名字的时候要写全名&#xff0c;比如上海市不能写出上海&#xff0c;不然看不到数据 鼠标点击即可看到数据 设置属性的时候不要忘记导包 # 演示地图可视化的基础使用 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts # 准…

MongoDB安装配置及配置和启动服务

MongoDB 安装配置 附&#xff1a;MongoDB官网下载地址&#xff1a; https://www.mongodb.com/download-center/community 注&#xff1a; 官网可以下载最新版的MongoDB安装包&#xff0c;有MSI安装版和ZIP安装版。我们课堂上使用4.4.4的ZIP安装版。安装版参考博客&#xff1…

JavaScript 在网页设计中的四大精彩案例:画布时钟、自动轮播图、表单验证与可拖动元素

在网页开发中&#xff0c;JavaScript 发挥着至关重要的作用&#xff0c;为网页带来丰富的交互性和动态效果&#xff0c;极大地提升了用户体验。本文将通过几个具体案例展示 JavaScript 的强大魅力。 一、美丽的画布时钟 这是一个使用 JavaScript 在网页上创建美丽画布时钟的案…

Pytorch Note

cat函数: cat函数不会增加维度&#xff0c;默认按照dim0连接张量 stack函数: stack函数会增加一个维度 nn.Linear的默认输入: torch中默认输入一定要为tensor&#xff0c;并且默认是tensor.float32&#xff0c;此外device如果没有model.to(device)放到gpu上面默认会在cpu上运…

RabbitMQ系列学习笔记(十)--通配符模式

文章目录 一、通配符模式原理二、通配符模式实战1、消费者代码2、生产者代码3、查看运行结果 本文参考&#xff1a; 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、通配符模式原理 通配符模式&#xff…

2024 睿抗机器人开发者大赛(RAICOM)-【网络安全】CTF 部分WP

文章目录 一、前言二、MICS你是黑客么循环的压缩包Goodtime 三、WEBpy 四、Crypto变异凯撒RSAcrypto3 一、前言 WP不完整&#xff0c;仅供参考&#xff01; 除WEB&#xff0c;RE&#xff0c;PWN外&#xff0c;其余附件均已打包完毕 也是一个对MISC比较友好的一个比赛~ 123网…

写了一个SpringBoot的后端管理系统(仅后端)pine-manage-system

文章目录 前言正文&#x1f680; 技术栈&#x1f6e0;️ 功能模块&#x1f4c1; 项目结构&#x1f308; 接口文档&#x1f680; 项目启动 附录项目功能代码示例1、数据库拦截器-打印sql执行时间2、数据记录变更拦截器3、用户角色数据权限拦截器4、实体转换器接口5、触发器模版6…