苍穹外卖day12笔记
一、工作台
联系昨天
要实现的功能和昨天差不多,都是查询数据。
所以我们就写出查询语句,然后直接导入已经写好的代码。
实现效果

查询语句
今日数据
营业额
select count(amount) from orders
where status=5 and order_time >= #{begin} and order_time <= #{end}
有效订单
select count(*) from orders
where status=5 and order_time >= #{begin} and order_time <= #{end}
订单完成率
所有订单:
select count(*) from orders
where order_time >= #{begin} and order_time <= #{end}
订单完成率 = 有效订单 / 所有订单
平均客单价
平均客单价 = 营业额 / 有效订单
新增用户数
select count(*) from user
where create_time >= #{begin} and create_time <= #{end}
订单数据
待接单
select count(*) from orders
where status=2 and order_time >=#{begin} and order_time <= #{end}
待派送
select count(*) from orders
where status=3 and order_time >=#{begin} and order_time <= #{end}
已完成
select count(*) from orders
where status=5 and order_time >=#{begin} and order_time <= #{end}
已取消
select count(*) from orders
where status=6 and order_time >=#{begin} and order_time <= #{end}
全部订单
select count(*) from orders
where order_time >=#{begin} and order_time <= #{end}
菜品总览
起售菜品
select count(*) from dish
where status=1
停售菜品
select count(*) from dish
where status=1
套餐总览
起售套餐
select count(*) from setmeal
where status=1
停售套餐
select count(*) from setmeal
where status=0
导入代码
下载好黑马该项目的资料:

然后自己导入。
二、Apache POI
介绍
操作Office文件的包。本文该项目中主要用来读写excel表。
应用场景主要在:交易明细、销量统计、批量数据导入(批量添加)
写入Excel
步骤
-
先创建Excel文档/工作簿
-
在工作簿中创建表格
-
在表格中创建行
-
在行中创建单元格
-
往单元格中设置数据
-
将整个Excel文档写到硬盘上
代码
直接在测试类中写例子的测试的。
@Test
public void testWrite() throws IOException {// 1. 创建整个工作簿XSSFWorkbook workbook = new XSSFWorkbook();// 2. 在工作簿中创建表格XSSFSheet sheet1 = workbook.createSheet("表格1");// 3. 在表格中创建行XSSFRow row_1 = sheet1.createRow(1);// 4. 在行中创建单元格XSSFCell cell_1_0 = row_1.createCell(0);// 5. 网单元格中设置数据cell_1_0.setCellValue("哈哈,我是cell_1_0");// 6. 将整个Excel文档写到硬盘上FileOutputStream fos = new FileOutputStream("D:/a.xlsx");workbook.write(fos);// 7. 释放资源fos.close();workbook.close();
}
读出Excel
步骤
-
先创建工作簿,关联本地Excel文档
-
从工作簿中获取表格
-
从表格中获取行
-
从行中获取单元格
-
从单元格中获取数据
代码
@Test
public void testRead() throws IOException {// 1. 先创建工作簿,关联本地Excel文档XSSFWorkbook workbook = new XSSFWorkbook("D:/a.xlsx");// 2. 从工作簿中获取表格XSSFSheet sheet = workbook.getSheetAt(0);// 3. 从表格中获取行XSSFRow row4 = sheet.getRow(3);// 4. 从行中获取单元格 以及 5. 从单元格中获取数据String name = row4.getCell(0).getStringCellValue();String age = row4.getCell(1).getStringCellValue();System.out.println(name);System.out.println(age);XSSFRow row5 = sheet.getRow(4);System.out.println(row5.getCell(0).getStringCellValue());System.out.println(row5.getCell(1).getNumericCellValue());workbook.close();
}
三、导出运营数据
需求分析
导出近30天的运营数据。
步骤
-
读取Excel模版到内存中。
-
准备运营数据
-
将数据写到Excel模板中。
-
将Excel文档响应回浏览器(文件下载)
代码
Controller:
@GetMapping("/export")
@ApiOperation("导出运营数据报表")
public String export(HttpServletResponse response) throws IOException {reportService.exportBusinessData(response);return "OK";
}
Service:
@Override
public void exportBusinessData(HttpServletResponse response) throws IOException{InputStream is = ClassLoader.getSystemResourceAsStream("运营数据报表模板.xlsx");XSSFWorkbook workbook = new XSSFWorkbook(is);LocalDate begin = LocalDate.now().plusDays(-30);LocalDate end = LocalDate.now().plusDays(-1);BusinessDataVO businessDataVO = workspaceService.getBusinessData(LocalDateTime.of(begin, LocalTime.MIN),LocalDateTime.of(end, LocalTime.MAX));XSSFSheet sheet = workbook.getSheetAt(0);sheet.getRow(1).getCell(1).setCellValue("时间:" + begin + "至" + end);XSSFRow row4 = sheet.getRow(3);row4.getCell(2).setCellValue(businessDataVO.getTurnover());row4.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());row4.getCell(6).setCellValue(businessDataVO.getNewUsers());XSSFRow row5 = sheet.getRow(4);row5.getCell(2).setCellValue(businessDataVO.getValidOrderCount());row5.getCell(4).setCellValue(businessDataVO.getUnitPrice());int i = 0;while (begin.compareTo(end) <= 0) {BusinessDataVO businessData = workspaceService.getBusinessData(LocalDateTime.of(begin, LocalTime.MIN),LocalDateTime.of(begin, LocalTime.MAX));XSSFRow row = sheet.getRow(7 + i++);row.getCell(1).setCellValue(begin.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());begin = begin.plusDays(1);}workbook.write(response.getOutputStream());}
注意的点
ClassLoader能加载的文件位置
ClassLoader能加载的文件位置在resources下。
放入resources后需要的操作
需要用maven构建管理的complie编译一下,才能保证类加载器ClassLoader加载到。
创建的POI与Office对应的下标
下标中getRow(0)与getCell(1)对应的分别是第一列第2行的数据。
相关文章:
苍穹外卖day12笔记
一、工作台 联系昨天 要实现的功能和昨天差不多,都是查询数据。 所以我们就写出查询语句,然后直接导入已经写好的代码。 实现效果 查询语句 今日数据 营业额 select count(amount) from orders where status5 and order_time > #{begin} and …...
Prometheus技术文档-基本使用-配置文件全解!!!!!
简介: Prometheus是一个开源的系统监控和告警系统,由Google的BorgMon监控系统发展而来。它主要用于监控和度量各种时间序列数据,比如系统性能、网络延迟、应用程序错误等。Prometheus通过采集监控数据并存储在时间序列数据库中,…...
宋浩高等数学笔记(十一)曲线积分与曲面积分
个人认为同济高数乃至数学一中最烧脑的一章。。。重点在于计算方式的掌握,如果理解不了可以暂时不强求,背熟积分公式即可。此外本贴暂时忽略两类曲面积分之间的联系,以及高斯公式的相关内容,日后会尽快更新,争取高效率…...
安卓如何快速定位native内存泄露。
步骤1)cat /proc/pid/status,观察下面俩个指标 RssAnon: 5300 kB //一直增大说明匿名映射的内存增大,malloc本质就是调用匿名映射分 配内存 RssFile: 26884 kB //文件句柄泄露&#…...
redis学习笔记(二)
文章目录 redis数据类型string(字符串)1. 设置键值2. 设置键值的过期时间3. 关于设置保存数据的有效期4. 设置多个键值5. 字符串拼接值6. 根据键获取值7. 自增自减8. 获取字符串的长度9. 比特流操作 redis数据类型 redis可以理解成一个全局的大字典&…...
不侵入代码的rem适配,支持桌面缩放,vue2的适配方案,包含echarts适配
此方式不侵入代码,自动把px单位转换成rem单位 首先安装postcss-pxtorem5.1.1 yarn add postcss-pxtorem5.1.1 npm install postcss-pxtorem5.1.1 --save 项目根目录新建 postcss.config.js module.exports {plugins: {postcss-pxtorem: {rootValue: 14,propList…...
智能合约 -- 常规漏洞分析 + 实例
1.重入攻击 漏洞分析 攻击者利用合约漏洞,通过fallback()或者receive()函数进行函数递归进行无限取钱。 刚才试了一下可以递归10次,貌似就结束了。 直接看代码: 银行合约:有存钱、取钱、查看账户余额等函数。攻击合约: 攻击、以及合约接…...
JavaScript 操作历史记录api怎样使用 JavaScript
JavaScript 操作历史记录api怎样使用 JavaScript History 是 window 对象中的一个 JavaScript 对象,它包含了关于浏览器会话历史的详细信息。你所访问过的 URL 列表将被像堆栈一样存储起来。浏览器上的返回和前进按钮使用的就是 history 的信息。 History 对象包含…...
Spring 容器
提示:英语很重要,单词是读的,是拼出来的,和拼音一样 文章目录 前言前期准备1️⃣ DI 依赖注入1、xml 配置方式2、注解方式 annotation❗相关注解Spring中Bean的作用域❗Scope() 注解Qualifier("XXXServiceImpl") 指定哪…...
【腾讯云Cloud Studio实战训练营】使用React快速构建点餐H5
文章目录 前言一、Cloud Studio是什么二、Cloud Studio特点三、Cloud Studio使用1.访问官网2.账号注册3.模板选择4.模板初始化5.H5开发安装 antd-mobile安装 Less安装 normalize上传项目需要的素材替换App.js主文件项目启动、展示 6.发布仓库 总结 前言 随着云计算产业的发展&…...
Java培训课程哪个品牌好?快拿小本本记好
Java是一门广泛应用于企业级应用程序开发的高级编程语言,具有较高的学习和职业发展价值。但是,在选择Java培训课程时,很多人会遇到一个问题:Java培训课程哪个品牌好?小编经过多方分析和比较,从专业培训的角度…...
leetcode19. 删除链表的倒数第 N 个结点
题目:leetcode19. 删除链表的倒数第 N 个结点 描述: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 思路: 让前面的节点比后面的节点先走n1步,因为从链表的尾节点的下一个节点开始&…...
c51单片机串行通信示例代码(单片机--单片机通信)(附带proteus线路图)
//这个发送端代码 #include "reg51.h" #include "myheader.h" #define uchar unsigned char long int sleep_i0; long int main_i0; void main() {uchar sendx[6]{2,0,2,3,8,1};sleep(2000);TMOD0x20;TH10XF4;//根据波特率计算公式这里需要设置为这么多才能…...
UML之四种事物
目录 结构事物 行为事物 分组事物: 注释事物 结构事物 1.类(Class) -类是对一组具有相同属性、方法、关系和语义的对象的描述。一个类实现一个或多个接口 2.接口(interface) -接口描述 了一个类或构件的一个服务的操作集。接口仅仅是定义了一组操作的规范&…...
盒子模型和新盒子模型及区别
盒子模型是用于描述 HTML 元素在页面中占据的空间的概念。它将每个元素视为一个矩形框,由内容区域、内边距、边框和外边距组成。这个传统的盒子模型也被称为 "标准盒子模型"。 新盒子模型是指使用 CSS3 中的 box-sizing 属性设置为 border-box 后的一种盒…...
移动端Vue组件库-vant
Vant 是有赞前端团队开源的移动端vue组件库,适用于手机端h5页面。 鉴于百度搜索不到vant官方网址,分享一下vant组件库官网地址,方便新手使用 vant官网地址Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. 通过 …...
Java课题笔记~ JSP内置对象
(1)九个内置对象 jsp的内置对象:JSP内置对象是不需要声明和创建就可以在JSP页面脚本中使用的成员变量。 九个内置对象: 1.out对象 在JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象…...
数据结构笔记--链表经典高频题
目录 前言 1--反转单向链表 2--反转单向链表-II 3--反转双向链表 4--打印两个有序链表的公共部分 5--回文链表 6--链表调整 7--复制含有随机指针结点的链表 8--两个单链表相交问题 前言 面经: 针对链表的题目,对于笔试可以不太在乎空间复杂度&a…...
Android Ble蓝牙App(三)特性和属性
Ble蓝牙App(三)特性使用 前言正文一、获取属性列表二、属性适配器三、获取特性名称四、特性适配器五、加载特性六、显示特性和属性七、源码 前言 在上一篇中我们完成了连接和发现服务两个动作,那么再发现服务之后要做什么呢?发现服…...
日常BUG——使用Long类型作id,后端返回给前段后精度丢失问题
😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 数据库long类型Id: 前端返回的Id实体类: Data ApiModel("xxx") public class …...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
