苍穹外卖--sky-take-out(四)10-12

苍穹外卖--sky-take-out(一)

苍穹外卖--sky-take-out(一)-CSDN博客​编辑https://blog.csdn.net/kussm_/article/details/138614737?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/kussm_/article/details/138614737?spm=1001.2014.3001.5501

苍穹外卖--sky-take-out(二)

苍穹外卖--sky-take-out(二)3-5-CSDN博客​编辑https://blog.csdn.net/kussm_/article/details/139378730?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/kussm_/article/details/139378730?spm=1001.2014.3001.5501

苍穹外卖--sky-take-out(三) 

苍穹外卖--sky-take-out(三)6-9_@value("${sky.baidu.ak}")-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/kussm_/article/details/139396187?spm=1001.2014.3001.5501


Spring Task

是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。

定位:定时任务框架

作用:定时自动执行某段Java代码

cron表达式

cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间

构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义

每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)

这些具体的细节,我们就不用自己去手写,因为这个cron表达式,它其实有在线生成器。

cron表达式在线生成器:在线Cron表达式生成器

入门案例

启动类添加注解 @EnableScheduling 开启任务调度

@Scheduled(cron = "0/5 * * * * ?")

订单状态定时处理

 


WebSocket

WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。

HTTP协议和WebSocket协议对比:

  • HTTP是短连接
  • WebSocket是长连接
  • HTTP通信是单向的,基于请求响应模式
  • WebSocket支持双向通信
  • HTTP和WebSocket底层都是TCP连接

实现步骤

1). 直接使用websocket.html页面作为WebSocket客户端

2). 导入WebSocket的maven坐标

3). 导入WebSocket服务端组件WebSocketServer,用于和客户端通信

4). 导入配置类WebSocketConfiguration,注册WebSocket的服务端组件

5). 导入定时任务类WebSocketTask,定时向客户端推送数据

来单提醒

设计

通过WebSocket实现管理端页面和服务端保持长连接

调用WebSocket相关API实现服务端向客户端发送消息

判断消息类型选择消息提示播报音

约定发送给客户端的数据格式JSON

代码

解决跳过支付后的方法来单提醒

苍穹外卖-day10:Spring Task、订单状态定时处理、来单提醒(WebSocket的应用)、客户催单(WebSocket的应用)_java 订单消息提醒-CSDN博客

客户催单

设计

催单按钮


ApacheECharts

图表技术

营业统计

需求设计

  • 已完成的订单金额合计
  • 可视化报表,x轴日期,y轴营业额
  • 根据时间选择时间区间

接口设计

get

请求参数:开始和结束日期

返回数据:日期列表和营业额列表 //前端来定

代码开发

vo对象返回

用户统计

日期和用户总量

返会数据:日期列表,新增用户列表,总用户列表

代码开发

vo对象封装返回数据

controller

@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate bing

使用LocalDate类来接收,用@DateTimeFormat来定义日期的格式

调用service层的函数来统计

serviceimpl

//因为返回的是vo封端对象,所以依据vo对象来处理

//datelist

存放从bing到end之间的每天对应的日期

先定义list集合对象

list.add(begin)

使用while死循环来添加后一天,一直到==end

begin = begin.plusDays(1)//表示退后一天

list.add(begin)//加入这退后的一天

//newUserList存放每天的新增用户数量

查询用户表UserMapper

sql:select count(id) from user where createtime< ? 和 > ?

//totalUserList存放每天的总用户数量

sql:select count(id) from user where createtime < ?

遍历datelist来取到每一天的用户数量

对date进行处理,因为date是LocalTime类的对象,要变成LocalDateTime类才行

LocalDateTime.of(date,localTime.MIN)//min就是00.00,作为起始时间

LocalDateTime.of(date,localTime.max)//min就是23.59,作为结束时间

构建一个Map集合来传递给mapper层

Map map = new HashMap();

map.put(end,endTime)//传入截至时间

然后调用mapper层即可查询总用户数量

totalUser = userMapper.countByMap(map);

再传入开始时间,查询新增用户对象

最后对list的对象们转成String对象,封装进vo对象

利用StringUtils.join(list对象,",")//用逗号分割转换为String字符串

封装vo

使用.builder().build();

mapper(xml)

查询即可

订单统计

有效订单:状态为已完成的订单

三个数字:订单总数,有效订单,订单完成率

接口设计

返回结果:日期list,三个数字,总订单list,有效订单list

代码开发

vo封装接口返回数据

controller

请求路径:ordersStatistics

请求开始日期和结束日期

调用service层

serviceImpl

准备日期list

遍历日期list查询每天的有效订单数和订单总数

订单总数

select count(id) from orders where order_time > ? and order_time<?

获取开始时刻:将LocalDate对象转为LocalDateTime对象

LocalDateTime.of(date,localTime.MIN)

订单有效数

select count(id) from orders where order_time > ? and order_time<? and status =5;

创建新的方法来进行统计订单数量

创建map集合,传入开始时间,结束时间和状态封装进map,然后将map对象传给mapper层

创建list集合来存放订单数和有效订单数

计算时间区间内的订单总数

可以使用stream流来简化写法

//时间区间内的总订单数

Integer totalOrderCount = orderCountList.stream().reduce(Integer::sum).get();

计算完成率时:判断订单总数是否为0;

传数据给vo类封装;

mapperxml

动态查询

 


Apache POI

一般情况POI是处理操作Excel文件

读写操作

使用

写操作

  1. 导入maven坐标
  2. 创建Excel文件并且写入文件内容

//内存中创建

XSSFWorkbook excel = new XSSFWorkbook();

  1. 创建Sheet页

XSSFSheet sheet = excel.createSheet("Sheet1");

  1. 创建行,0代表第一行

XSSFRow row1 = sheet.createRow(0);

  1. 创建单元格并在单元格中设置值,单元格编号也是从0开始,1表示第2个单元格

row1.createCell(1).setCellValue("姓名");

  1. 内存写入到磁盘中去

需要用到字节流

FileOutputStream out = new FileOutputStream(new File("D:\\test.xlsx"));

//通过输出流将内存中的Excel文件写入到磁盘上

excel.write(out);

  1. 关闭资源

//关闭资源

out.flush();

out.close();

excel.close();

读操作

  1. 读取磁盘指定文件

FileInputStream in = new FileInputStream(new File("D:\\itcast.xlsx"));

//通过输入流读取指定的Excel文件

XSSFWorkbook excel = new XSSFWorkbook(in);

  1. 获取Excel表中的Sheet页

//获取Excel文件的第1个Sheet页

XSSFSheet sheet = excel.getSheetAt(0);

  1. 获取Sheet页中的最后一行的行号

int lastRowNum = sheet.getLastRowNum();

  1. 从0行开始遍历读取到最后一行

for (int i = 0; i <= lastRowNum; i++) {}

  1. 获取Sheet页中的行

XSSFRow titleRow = sheet.getRow(i);

  1. 获取行的第2个单元格

XSSFCell cell1 = titleRow.getCell(1);

  1. 获取单元格中的文本内容

String cellValue1 = cell1.getStringCellValue();

  1. 关闭资源

//关闭资源

in.close();

excel.close();

导出运营数据Excel表

需求分析

导出excel表

导出最近30天运营数据

GET

代码开发

  1. 设计Excel模板文件
  2. 查询近30天的运营数据
  3. 将查询到的运营数据写入模板文件
  4. 通过输入流将Excel文件下载到客户端浏览器

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

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

相关文章

Unity动画系统(2)

6.1 动画系统基础2-3_哔哩哔哩_bilibili p316 模型添加Animator组件 动画控制器 AnimatorController AnimatorController 可以通过代码控制动画速度 建立动画间的联系 bool值的设定 trigger p318 trigger点击的时候触发&#xff0c;如喊叫&#xff0c;开枪及换子弹等&#x…

在js中如何Json字符串格式不对,如何处理

如果 JSON 字符串格式不正确&#xff0c;解析它时会抛出异常&#xff0c;但我们可以尝试尽可能提取有效的信息。以下是一个方法&#xff0c;可以使用正则表达式和字符串操作来提取部分有效的 JSON 内容&#xff0c;即使整个字符串无法被 JSON.parse 完全解析。 示例代码如下&a…

错误 [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试 python ping

报错提示&#xff1a;错误 [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试 用python做了一个批量ping脚本&#xff0c;在windows专业版上没问题&#xff0c;但是到了windows服务器就出现这个报错 解决方法&#xff1a;右键 管理员身份运行 这个脚本 …

sql拉链表

1、定义&#xff1a;维护历史状态以及最新数据的一种表 2、使用场景 1、有一些表的数据量很大&#xff0c;比如一张用户表&#xff0c;大约1亿条记录&#xff0c;50个字段&#xff0c;这种表 2.表中的部分字段会被update更新操作&#xff0c;如用户联系方式&#xff0c;产品的…

compute和computeIfAbsent的区别和用法

compute和computeIfAbsent都是Map接口中的默认方法&#xff0c;用于在映射中进行键值对的计算和更新。它们的主要区别在于它们的行为和使用场景。 compute 方法 定义: V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction);参数: k…

在 WebGPU 与 Vulkan 之间做出正确的选择(Making the Right Choice between WebGPU vs Vulkan)

在 WebGPU 与 Vulkan 之间做出正确的选择&#xff08;Making the Right Choice between WebGPU vs Vulkan&#xff09; WebGPU 和 Vulkan 之间的主要区别WebGPU 是什么&#xff1f;它适合谁使用&#xff1f;Vulkan 是什么&#xff1f;它适合谁使用&#xff1f;WebGPU 和 Vulkan…

修改CentOS7 yum源

修改CentOS默认yum源为阿里镜像源 备份系统自带yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载ailiyun的yum源配置文件 CentOS7 yum源如下&#xff1a; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun…

AI领域最需要掌握的技术是什么?

在AI领域&#xff0c;掌握一系列核心技术和相关知识是非常重要的&#xff0c;以下是AI专业人士最需要掌握的一些关键技术&#xff1a; 1. **数学基础** - 线性代数&#xff1a;用于处理向量和矩阵&#xff0c;是机器学习和深度学习的基石。 - 微积分&#xff1a;用于理解函数的…

SpringBoot项目使用WebSocket提示Error creating bean with name ‘serverEndpointExporter‘

问题描述&#xff1a;WebSocket在Controller中正常工作&#xff0c;但是在之后使用SpringBootTest进行单元测试的时候&#xff0c;突然提示WebSocket的相关错误。 错误提示&#xff1a; Exception encountered during context initialization - cancelling refresh attempt: …

项目中的代码记录日常

项目中的代码记录日常 /// <summary> /// 修改任务状态 /// </summary> private void StartProcess21() {Process21Task new Thread(() >{while (CommonUtility.IsWorking){try{if (tPAgvTasksList.Count > 0){Parallel.ForEach(tPAgvTasksList, new Paral…

gitlab push的时候需要密码,你忘记了密码

情景: 忘记密码,且登入网页端gitlab的密码并不能在push的时候使用,应该两者是两个不同的密码 解决方法: 直接设置ssh密钥登入,不使用密码gitlab添加SSH密钥——查看本地密钥 & 生成ssh密钥_gitlab生成ssh密钥-CSDN博客

[OC]萝卜圈Python手动机器人脚本

这是给机器人设置的端口&#xff0c;对照用 代码 # #作者:溥哥’ ##机器人驱动主程序 #请在main中编写您自己的机器人驱动代码 import msvcrt def main():a"none"while True:key_input msvcrt.getch()akey_inputif abw:print(a)robot_drv.set_motors(1,40,2,40,3,…

uniapp学习笔记

uniapp官网地址&#xff1a;https://uniapp.dcloud.net.cn/ 学习源码&#xff1a;https://gitee.com/qingnian8/uniapp-ling_project.git 颜色网址&#xff1a;https://colordrop.io/ uniapp中如何获取导航中的路由信息&#xff1f; onLoad(e){console.log(e)console.log(e.w…

C#根据类的public属性加载类中对应字段的XML

<?xml version"1.0" encoding"utf-8"?> <root><UserLogin ID"0" UserName"" UserPassWord"" Level"1" PowerName"默认用户" PowerID"0" Remark"" IsEnabled"…

java八股文面试题

Java八股文面试题通常涵盖了Java语言的基础知识、高级特性、框架应用、数据库操作等多个方面。以下是一些常见的Java面试题及其详细回答&#xff0c;按照不同的主题进行分类&#xff1a; 一、Java基础 面向对象的特征有哪些&#xff1f; 抽象&#xff1a;忽略与当前目标无关的…

2.2.4 C#中显示控件BDPictureBox 的实现----ROI交互

2.2.4 C#中显示控件BDPictureBox 的实现----ROI交互 1 界面效果 在设定模式下&#xff0c;可以进行ROI 框的拖动&#xff0c;这里以Rect1举例说明 2 增加ROI类定义 /// <summary> /// ROI_single /// 用于描述图片感兴趣区域 /// type: 0:Rect1;1:Rect2;2:Circle ;3:…

C++ //练习 14.31 我们的StrBlobPtr类没有定义拷贝构造函数、赋值运算符及析构函数,为什么?

C Primer&#xff08;第5版&#xff09; 练习 14.31 练习 14.31 我们的StrBlobPtr类没有定义拷贝构造函数、赋值运算符及析构函数&#xff0c;为什么&#xff1f; 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释&#xff1a; 因为…

工业路由器与家用路由器的区别

在现代网络环境中&#xff0c;路由器扮演着至关重要的角色。无论是在家庭网络还是在工业网络&#xff0c;选择合适的路由器都至关重要。本文将从多个角度&#xff0c;对工业路由器与家用路由器进行详细比较&#xff0c;帮助您更好地理解二者的区别。 1、安全性 工业路由器&…

大模型应用开发实战基础

大模型应用开发实战基础 1. 背景 大模型如日中天&#xff0c;各行各业都受它影响&#xff0c;但是作为程序员&#xff0c;除了让它翻译代码不知道用它干什么&#xff0c;就像是拿着锤子的木匠&#xff0c;找不到钉子在哪。一边听着别人说2024是AI元年&#xff0c;一边又不知所…

PostgreSQL的系统视图pg_stat_database_conflicts

PostgreSQL的系统视图pg_stat_database_conflicts 在 PostgreSQL 中&#xff0c; pg_stat_database_conflicts 是一个视图&#xff0c;用于监控并发操作导致的数据库冲突情况。了解和监控这些冲突可以帮助数据库管理员调优系统&#xff0c;以更好地处理并发事务。 pg_stat_da…