苍穹外卖项目---------收获以及改进(9-12)

①Spring Task-------实现系统定时任务

概念: 

 应用场景:

使用步骤:

实现订单超时和前一天派送中的订单的自动任务处理:

@Component
@Slf4j
public class Mytask {@Autowiredprivate OrderServiceimpl orderServiceimpl;/*** 处理订单超时的任务*/@Scheduled(cron = "0 * * * * ?")//每分钟触发一次public void processTimeoutOrder(){log.info("定时处理超时订单,{}", LocalDateTime.now());//先去数据库中查是否有超时的订单List<Orders> ordersList = orderServiceimpl.query().eq("status", 1).lt("order_time", LocalDateTime.now().plusMinutes(-15)).list();//如果有if(ordersList != null && ordersList.size() > 0){for (Orders orders : ordersList) {//设置订单的取消orders.setStatus(6);orders.setCancelReason("订单超时取消");orders.setCancelTime(LocalDateTime.now());//更新数据库orderServiceimpl.updateById(orders);}}}/*** 处理一直处于派送中状态的订单*/@Scheduled(cron = "0 0 1 * * ?")//每天凌晨1点执行一次public void processDeliveryOrder(){log.info("处理一直处于派送中状态的订单,{}", LocalDateTime.now());//先去数据库中查是否有前一天还在派送的订单List<Orders> ordersList = orderServiceimpl.query().eq("status", 4).lt("order_time", LocalDateTime.now().plusMinutes(-60)).list();//如果有if(ordersList != null && ordersList.size() > 0){for (Orders orders : ordersList) {//设置订单的取消orders.setStatus(5);//更新数据库orderServiceimpl.updateById(orders);}}}
}

②WebSocket-------实现前后端无请求的数据交互

概念:

 应用场景:

使用步骤:

<!--        websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>

实现前后端之间长连接的消息互传:

WebSocketServer类:
/*** WebSocket服务*/
@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {//存放会话对象private static Map<String, Session> sessionMap = new HashMap();/*** 连接建立成功调用的方法*/@OnOpenpublic void onOpen(Session session, @PathParam("sid") String sid) {System.out.println("客户端:" + sid + "建立连接");sessionMap.put(sid, session);}/*** 收到客户端消息后调用的方法** @param message 客户端发送过来的消息*/@OnMessagepublic void onMessage(String message, @PathParam("sid") String sid) {System.out.println("收到来自客户端:" + sid + "的信息:" + message);}/*** 连接关闭调用的方法** @param sid*/@OnClosepublic void onClose(@PathParam("sid") String sid) {System.out.println("连接断开:" + sid);sessionMap.remove(sid);}/*** 群发** @param message*///后端自己调用该方法进行消息的发送public void sendToAllClient(String message) {Collection<Session> sessions = sessionMap.values();for (Session session : sessions) {try {//服务器向客户端发送消息session.getBasicRemote().sendText(message);} catch (Exception e) {e.printStackTrace();}}}}
WebSocketConfiguration类:用于配置注册
/*** WebSocket配置类,用于注册WebSocket的Bean*/
@Configuration
public class WebSocketConfiguration {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}
 前端的实例代码:
<!DOCTYPE HTML>
<html>
<head><meta charset="UTF-8"><title>WebSocket Demo</title>
</head>
<body><input id="text" type="text" /><button onclick="send()">发送消息</button><button onclick="closeWebSocket()">关闭连接</button><div id="message"></div>
</body>
<script type="text/javascript">var websocket = null;var clientId = Math.random().toString(36).substr(2);//判断当前浏览器是否支持WebSocketif('WebSocket' in window){//连接WebSocket节点websocket = new WebSocket("ws://localhost:8080/ws/"+clientId);}else{alert('Not support websocket')}//连接发生错误的回调方法websocket.onerror = function(){setMessageInnerHTML("error");};//连接成功建立的回调方法websocket.onopen = function(){setMessageInnerHTML("连接成功");}//接收到消息的回调方法websocket.onmessage = function(event){setMessageInnerHTML(event.data);}//连接关闭的回调方法websocket.onclose = function(){setMessageInnerHTML("close");}//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。window.onbeforeunload = function(){websocket.close();}//将消息显示在网页上function setMessageInnerHTML(innerHTML){document.getElementById('message').innerHTML += innerHTML + '<br/>';}//发送消息function send(){var message = document.getElementById('text').value;websocket.send(message);}//关闭连接function closeWebSocket() {websocket.close();}
</script>
</html>

③Apache POI

第一步:引入依赖

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></dependency>

第二步:创建并且写入数据

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Springtest {public static void write() throws Exception {//在内存中创建一个Excel文件XSSFWorkbook excel = new XSSFWorkbook();//在Excel中创建一个sheet页XSSFSheet sheet = excel.createSheet("info");//在sheet页中创建行对象XSSFRow row = sheet.createRow(1);//在行上创建单元格,并且写入内容row.createCell(1).setCellValue("姓名");row.createCell(2).setCellValue("城市");List<String> name = new ArrayList<>();name.add("张三");name.add("李四");name.add("王五");List<String> city = new ArrayList<>();city.add("长沙");city.add("武汉");city.add("广州");for(int i=2;i<5;i++){row = sheet.createRow(i);row.createCell(1).setCellValue(name.get(i - 2));row.createCell(2).setCellValue(city.get(i - 2));}//输出流将内存中的Excel文件写入磁盘FileOutputStream fileOutputStream = new FileOutputStream(new File("F:\\info.xlsx"));excel.write(fileOutputStream);//关闭资源fileOutputStream.close();excel.close();}@Testpublic void test() throws Exception {write();}
}

第三步:读取Excel文件并且读入

public static void read() throws Exception {//读取磁盘上已经存在的Excel文件FileInputStream fileInputStream = new FileInputStream(new File("F:\\info.xlsx"));XSSFWorkbook excel = new XSSFWorkbook(fileInputStream);//获取Excel中的sheet页XSSFSheet sheet = excel.getSheet("info");//获取Sheet中的数据的最后一行的行号int lastRowNum = sheet.getLastRowNum();for(int i=1;i<=lastRowNum;i++){XSSFRow row = sheet.getRow(i);String stringCellValue1 = row.getCell(1).getStringCellValue();String stringCellValue2 = row.getCell(2).getStringCellValue();System.out.print("stringCellValue1 = " + stringCellValue1+"  ");System.out.println("stringCellValue2 = " + stringCellValue2);}//关闭资源fileInputStream.close();excel.close();}@Testpublic void test01() throws Exception {read();}

OK!到此苍穹外面项目终于结束!!,学到了很多,继续加油!!

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

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

相关文章

ETLCloud中如何执行Java Bean脚本

ETLCloud中如何执行Java Bean脚本 在ETLCloud这一强大的数据集成和转换平台中&#xff0c;执行Java Bean脚本的能力为其增添了更多的灵活性和扩展性。Java Bean脚本不仅仅是一段简单的代码&#xff0c;而是一种强大的工具&#xff0c;可以帮助用户定制和优化数据处理的每一个环…

泵站远程启停

随着物联网技术的迅猛发展&#xff0c;传统泵站的管理方式正面临前所未有的变革。在这一变革的浪潮中&#xff0c;HiWoo Cloud平台凭借其卓越的技术实力和创新理念&#xff0c;为泵站远程启停控制带来了全新的解决方案。本文将详细介绍HiWoo Cloud平台在泵站远程启停方面的应用…

交流回馈电网测试电源的技术突破

交流回馈电网测试电源&#xff1a;电力系统中的关键组件的深度解析析 交流回馈电网测试电源作为电力系统的关键组成部分&#xff0c;其重要性和作用不容忽视。交流回馈电网测试电源是一种电力测试设备&#xff0c;主要用于模拟真实电网环境&#xff0c;对电力电子设备进行长时间…

VirtualBox7安装ubantu server 22.04通过NAT+Only-Host双网卡实现宿主机与虚拟机互通

目录 背景环境安装虚拟机配置网卡修改ssh端口遇到的坑参考文章 背景 时间长没用docker了&#xff0c;有些命令都快忘了&#xff0c;心血来潮想着搞个docker玩一玩&#xff0c;所以需要先搞一个虚拟机&#xff0c;因为之前CentOS用的比较多&#xff0c;所以这次想试一试ubantu。…

ESP-01S刷固件ESP8266_NonOS_AT_Bin_V1.7.5_1 笔记240510

ESP-01S刷固件ESP8266_NonOS_AT_Bin_V1.7.5_1 笔记240510 固件下载地址 ESP-AT固件页面: https://www.espressif.com.cn/zh-hans/products/sdks/esp-at/resource 直接下载ESP8266 NonOS AT Bin V1.7.5.zip: https://www.espressif.com.cn/sites/default/files/ap/ESP8266_No…

哈希表(unordered_set、unordered_map)

文章目录 一、unordered_set、unordered_map的介绍二、哈希表的建立方法2.1闭散列2.2开散列&#xff08;哈希桶/拉链法&#xff09; 三、闭散列代码&#xff08;除留余数法&#xff09;四、开散列代码&#xff08;拉链法/哈希桶&#xff09; 一、unordered_set、unordered_map的…

翻译/润色找哪里比较专业,机构怎么选?

英文专业术语多&#xff0c;润色是很有必要的&#xff0c;大家可以选择专业的文章翻译润色服务&#xff0c;一定要挑选好正规的机构&#xff0c;这样的机构在出版过程中会为作者提供多项支持&#xff0c;对顺利发表是有帮助的。 科研领域英文论文专业润色包含这些内容&#xff…

【字符函数与字符串函数】

文章目录 一、strlen函数1.strlen函数的使用2.strlen函数的模拟实现(1)计算器办法(2)不创建临时变量计数器(3)指针 二、strcpy函数1、strcpy函数的使用2、strcpy函数的模拟实现 三、strcat函数1、strcat函数的使用2、strcat模拟实现3、字符串自己给自己追加&#xff1f; 四、st…

itextpdf 7生成pdf(主要是文字和表格,支持中文)

我们经常会遇到要导出pdf的需求,方式有很多种 今天的教程是采用itextpdf的方式生成pdf itextpdf是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF文档&#xff0c;而且可以将Html文件转化为PDF文件。 这里先展示一下效果图 首先在pom.xml中引入相关依赖 <dep…

C语言实现猜数字小游戏

1.随机数生成 要想实现猜数字小游戏&#xff0c;依赖于随机数的生成 1.1 rand()函数 这个函数是用来生成随机数的&#xff0c;返回值是正整数&#xff0c;他的值的范围是0到rand_max之间的&#xff0c;rand_max的值在大多数编译器上面是32767&#xff0c;rand()函数的使用必…

【算法】动态规划之背包DP问题(2024.5.11)

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列 【算法】动态规划之线性DP问题-CSDN博客 01背包 步骤&#xff1a; 分析容量j与w[i]的关系&#xff0c;然后分析是否要放…

全新神经网络架构KAN——本文用于学习与探索

论文地址&#xff1a;https://arxiv.org/pdf/2404.19756 Github&#xff1a;GitHub - KindXiaoming/pykan: Kolmogorov Arnold Networks 文档说明&#xff1a;Welcome to Kolmogorov Arnold Network (KAN) documentation! — Kolmogorov Arnold Network documentation 本文仅…