苍穹外卖--开发记录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引入了许多创新设计和改进,但网络仍然局限于线性建模模式以及缺乏可解释性。为了应对这些挑战,受到…

数据库框架GORM快速入门【干货】

1.安装依赖 &#xff08;1&#xff09;安装GORM框架 go get -u gorm.io/gorm&#xff08;2&#xff09;安装不同的数据库驱动&#xff08;根据实际情况选择&#xff09; go get -u gorm.io/driver/mysql go get -u gorm.io/driver/postgres go get -u gorm.io/driver/sqlite …

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;导…

京准电钟HR-901GB双GPS北斗卫星时钟服务器

京准电钟HR-901GB双GPS北斗卫星时钟服务器 京准电钟HR-901GB双GPS北斗卫星时钟服务器 作为国家电力系统最重要的设备之一,卫星时间同步装置随着电力行业的发展不断有了新的要求,从单纯的具备时间数据输出能力,发展到装置状态信息上送、对用时设备的对时质量进行监测,确保站点内…

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 的降压应用场…

docker搭建etcd集群环境方式

docker搭建etcd集群环境方式 from: etcd 虚拟机与docker搭建etcd集群环境方式_docker部署etcd集群-CSDN博客 windows系统下 1: “\”要换成&#xff1a;“^” 2: 不能在windows powershell下执行

安全见闻(5)——开阔眼界,不做井底之蛙

安全见闻五&#xff1a;人工智能 内容预览 ≧∀≦ゞ 安全见闻五&#xff1a;人工智能声明导语一、人工智能基础机器学习基础机器学习的典型工作流程1. 数据收集2. 数据预处理3. 模型选择与训练4. 模型评估与优化5. 模型应用 深度学习基础深度学习基本原理1. 神经网络基础2. 多层…

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

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

Linux经常使用命令汇总和总结

Linux经常使用命令汇总和总结 文章目录 Linux经常使用命令汇总和总结一、基本命令二、目录操作命令三、文件操作命令四、压缩文件操作五、查找命令六、su、sudo七、系统服务八、网络管理九、定时任务指令crontab 配置十、其他命令 一、基本命令 1.1 关机和重启 关机 shutdown …

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

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

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

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

ubuntu启用ssh

在Ubuntu上启用SSH服务&#xff0c;你需要安装OpenSSH服务器软件包&#xff0c;然后启动并使SSH服务在启动时自动运行。 更新软件包列表&#xff1a; sudo apt update安装OpenSSH服务器软件包&#xff1a; sudo apt install openssh-server确认SSH服务正在运行&#xff1a; …

MySQL中SQL的执行顺序

MySQL中SQL的执行顺序 在日常的开发工作中&#xff0c;我们经常会自己手写一些sql语句&#xff0c;但是对于这些sql语句是怎么执行的&#xff0c;执行的顺序又是怎么样的呢&#xff1f;想必各位大佬对此也是了解的&#xff0c;所以对sql语言的执行顺序有一定的了解的话&#x…

【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…

pytorch nn.NLLLoss和nn.CrossEntropyLoss函数区别

nn.CrossEntropyLoss(交叉熵损失函数) 和nn.NLLLoss (负对数似然损失函数)的区别 输入格式: nn.CrossEntropyLoss:直接接受未归一化的 logits 作为输入,并在内部自动应用 log_softmax 来计算对数概率。nn.NLLLoss:接受对数概率(log-probabilities)作为输入,也就是说,输…