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

server/2024/10/21 7:56:43/

苍穹外卖--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.ppmy.cn/server/55875.html

相关文章

【Gin】项目搭建 一

环境准备 首先确保自己电脑安装了Golang 开始项目 1、初始化项目 mkdir gin-hello; # 创建文件夹 cd gin-hello; # 需要到刚创建的文件夹里操作 go mod init goserver; # 初始化项目&#xff0c;项目名称&#xff1a;goserver go get -u github.com/gin-gonic/gin; # 下载…

A Threat Actors 出售 18 万名 Shopify 用户信息

BreachForums 论坛成员最近发布了涉及 Shopify 的重大数据泄露事件。 据报道&#xff0c;属于近 180,000 名用户的敏感数据遭到泄露。 Shopify Inc. 是一家总部位于安大略省渥太华的加拿大公司。 开发和营销同名电子商务平台、Shopify POS 销售点系统以及专用于企业的营销工…

影刀_扩展屏幕运行总结

首先&#xff0c;先看一个例子“&#xff1a; 滑块拼图验证免费版 1、影刀在扩展屏幕&#xff0c;谷歌在主屏幕。成功 2、影刀主屏幕&#xff0c;谷歌在扩展屏幕&#xff0c;失败。 3、都在扩展屏幕&#xff0c;失败。 4、都在主屏幕上&#xff0c;成功。从上面的例子可以看出…

大力出奇迹:大语言模型的崛起与挑战

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;大语言模型&#xff08;LLM&#xff09;的出现与应用&#xff0c;彻底改变了我们与机器互动的方式。本文将探讨ChatGPT等大语言模型的定义、…

3个让你爽到爆炸的学习工具

We OCR WeOCR 是一个基于浏览器的文字识别工具&#xff0c;用户可以通过上传图片来识别其中的文本信息。它是一个渐进式网络应用程序&#xff08;PWA&#xff09;&#xff0c;可以在浏览器中离线使用。WeOCR 是开源的&#xff0c;并且基于 Tesseract OCR 引擎开发。用户无需在本…

Spring Boot中的高并发处理

Spring Boot中的高并发处理 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们来探讨一下在Spring Boot中如何实现高并发处理。 一、什么是高…

Linux性能优化(uptime)

uptime 当我们发现系统变慢时,我们通常做的第一件事,就是执行top或者uptime命令,来了解系统的负载情况。 [root@server ~]# uptime14:51:04 up 1 min, 2 users, load average: 0.71, 0.28, 0.10 14:51:04 : 当前时间up 1 min : 系统的运行时间2 users : 正在登陆用户数…

Vue中Class数据绑定

Class数据绑定 数据绑定的一个常见需求场景是操作CSS class列表&#xff0c;因为class是attribute&#xff08;属性&#xff09;&#xff0c;我们可以和其他attribute一样使用v-bind 将它们和动态的字符串绑定。但是&#xff0c;在处理比较复杂的绑定时&#xff0c;通过拼接生…