【苍穹外卖 | 项目日记】第八天
前言:
昨天晚上跑完步回来宿舍都快停电了,就没写项目日记,今天补上

目录
前言:
今日完结任务:
今日收获:
引入百度地图接口:
引入spring task ,定时处理异常订单:
引入websocket实现用户端催单和商家端的来单提醒:
杂项知识点:
总结:
今日完结任务:
- 对用户订单进行优化,引入了百度地图接口,增加了配送范围的判断
- 引入了spring task ,定时处理异常订单(异常未付款和异常未派送)
- 引入了websocket,实现了用户端的催单功能和商家端的来单提醒功能
今日收获:
引入百度地图接口:
这个功能的思想很简单,就是提前存储商家位置,百度地图接口会根据该地址得到准确的经纬度,之后在用户点单的时候,再得到用户提供地址的经纬度,进行计算,判断距离是否超过限定值,如果超过则在后端抛出地址异常。这个唯一的缺点就是前端并没有给出相对应接收后端消息的代码,因此异常只会在后端被抛出,前端会卡顿


引入spring task ,定时处理异常订单:
这个功能确实很实用和常见,我们在日常生活中也经常遇见:CSDN的每周小结。这就是通过定时任务做的,而这个依赖很小,小到连自己的实体都没有,它属于是spring context中的一个附属依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>版本号</version>
</dependency>
而设置定时任务的基本代码设计很简单
设置定时
----------------------------------------------------
代码体

我们使用@Scheduled来设置定时,在括号里我们采用的是cron表达式,他从左到右分别为:秒 分 时 天 周 月
而我们也不需要独立掌握cron表达式的书写,这种东西网上一大堆的转换器,这里我随便贴一个
在线Cron表达式生成器 (qqe2.com)
引入定时任务使得我们后端可以自动对异常订单进行处理,简化了我们的操作。但是需要注意定时任务虽然很好用,但是在设置定时的时候,还是不要太频繁,因为我们这里的定时任务中包括了对数据库的查询,就好比我贴出来的代码,他对用户超过15分钟的未付款超时订单进行处理,如果我们设置一秒一次,虽然可以,但是大量查询数据库会造成性能问题,因此定时任务的核心在于:如何高效率的设置任务。
此外使用定时任务还需要在代码入口使用@EnableScheduling来开启spring task

引入websocket实现用户端催单和商家端的来单提醒:
websocket本质上和我们之前介绍的http一样,本质上还是一种通信协议,他和http的区别主要在于:websocket使得服务端有了能力向客户端推送数据。在我们http协议中,采用的是请求-响应的模式。
HTTP介绍:一文了解什么是HTTP_我是一盘牛肉的博客-CSDN博客
关于websocket的详细介绍我们放到杂项知识点中,现在我们先只谈它在本项目中的使用
应用场景为:当用户端下单之后,服务端需要接收消息返回给商家端,当用户催单的时候,也是如此
这里的核心问题就在于:如何使得服务端可以返回消息给前端。
其实我们可以发现:像这种后端发送数据的技术,我们之前还学过HttpCline这项技术
HttpClient广泛用于客户端与服务器之间的请求-响应通信,通常使用在HTTP API的调用、数据获取等场景。WebSocket适用于实时应用程序,如聊天应用、实时数据监控、多人协同编辑等场景,它可以实现实时双向通信。
并且httpCline是无状态协议,如果使用它来向前端返送数据,就要不断的连接-断开-连接。而websocket是长连接,这样就大大提高了效率。

这里简单的展示了用户下单之后利用websocket来对商家端进行提醒。
而他也需要一个注册类来注册一个websocket

并且需要我们前端设置接收器来接收后端发送的json类型的数据。
结果展示:
并且附带语音提示。
我没有写过聊天室,但是我感觉是否用户与商家的聊天也是这个思路,基于websocket,用户发送消息到服务器,服务器再使用websocket来转发给商家,商家给用户发送消息也是同样操作。
杂项知识点:
1.什么是websocket:
WebSocket是一种在客户端和服务器之间实现全双工通信的协议。它通过在客户端和服务器之间建立一个长久的连接,并且允许客户端和服务器之间实时地进行双向通信。
与传统的HTTP请求-响应模式不同,WebSocket允许服务器主动向客户端推送数据,而不需要客户端发送请求。这种实时通信的特性使得WebSocket在实时应用程序和实时数据传输方面非常有用。
WebSocket协议通过HTTP协议进行初始握手过程,然后转换为WebSocket连接。它使用了自定义的二进制或文本消息格式,可以在连接建立后直接发送和接收消息。通常使用ws://或wss://作为WebSocket连接的URL前缀。
WebSocket的优势包括:
-
实时性:WebSocket提供了实时双向通信的能力,允许服务器主动向客户端推送数据,实现实时的消息传输和更新。
-
效率和性能:WebSocket协议相比于HTTP请求,具有更低的开销和更高的性能,因为它避免了重复的请求头和无效的响应。
-
跨域支持:WebSocket能够轻松处理跨域请求,因为它是一种单一源的通信协议,主要受到服务器的限制。
-
广泛的浏览器支持:现代浏览器几乎都支持WebSocket协议,并且提供了一些用于创建WebSocket连接和处理消息的JavaScript API。
WebSocket在各种领域都有广泛的应用,包括在线聊天、实时数据监控、多人游戏、协同编辑等。它为开发
总结:
今天的收获还算不错,学习了spring task和 websocket这两个比较常用的知识点。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

相关文章:
【苍穹外卖 | 项目日记】第八天
前言: 昨天晚上跑完步回来宿舍都快停电了,就没写项目日记,今天补上 目录 前言: 今日完结任务: 今日收获: 引入百度地图接口: 引入spring task ,定时处理异常订单: …...
概念解析 | 毫米波雷达与计算机视觉的融合
注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:毫米波雷达与计算机视觉的融合。 毫米波雷达与计算机视觉的融合 Sensors | Free Full-Text | MmWave Radar and Vision Fusion for Object Detection in Autonomous Driving: A …...
嵌入式硬件中常见的100种硬件选型方式
1请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌)。 电阻: 美国:AVX、VISHAY 威世 日本:KOA 兴亚、Kyocera 京瓷、muRata 村田、Panasonic 松下、ROHM 罗姆、susumu、TDK 台湾:LIZ 丽智、PHY…...
Kubernetes 通过 Deployment 部署Jupyterlab
概要 在Kubernetes上部署jupyterlab服务,链接Kubernetes集群内的MySQL,实现简单的数据开发功能。 前置条件 镜像准备:自定义Docker镜像--Jupyterlab-CSDN博客 MySQL-Statefulset准备:StatefulSet 简单实践 Kubernetes-CSDN博客…...
【Linux常用命令15】shell脚本
shell概述:shell是一个命令行解释器,它接收应用程序或用户的命令,然后调用操作系统内核 Linux Shell 种类非常多, 常见的有: Bourne Shell (/usr/bin/sh 或/bin/sh)、 Bourne Again Shell (/bin/bash)、 C Shell (/us…...
LTE系统TDD无线帧结构特点
LTE系统TDD无线帧结构的特点主要表现在以下几个方面: 无线帧结构时间描述的最小单位是采样周期Ts。在LTE中,每个子载波为2048阶IFFT采样,△f15kHz,因此采样周期Ts1/(204815000)0.033us。 TDD的帧结构包括两个5ms的半帧࿰…...
微信小程序OA会议系统数据交互
前言 经过我们所写的上一文章:微信小程序会议OA系统其他页面-CSDN博客 在我们的是基础面板上面,可以看到出来我们的数据是死数据,今天我们就完善我们的是数据 后台 在我们去完成项目之前我们要把我们的项目后台准备好资源我放在我资源中&…...
TypeScript环境安装
一、windows环境 安装node,附带自动安装npm工具 安装tsc npm install -g typescript 对于不支持 Nuget 的项目类型,你可以使用 TypeScript Visual Studio 扩展。 你可以使用 Visual Studio 中的 Extensions > Manage Extensions 安装扩展。 安装下…...
连接Mumu模拟器使用ADB
要连接Mumu模拟器使用ADB,您可以按照以下详细步骤进行操作: 安装ADB驱动程序:在您的计算机上安装ADB驱动程序。ADB是Android Debug Bridge的缩写,它允许您与Android设备进行通信。您可以从Android开发者网站(https://d…...
springboot缓存篇之mybatis一级缓存和二级缓存
前言 相信很多人都用过mybatis,这篇文章主要是介绍mybatis的缓存,了解一下mybatis缓存是如何实现,以及它在实际中的应用 一级缓存 什么是mybatis一级缓存?我们先看一个例子: GetMapping("/list") public…...
云计算认证有哪些?认证考了有什么用?
云计算作为一项快速发展的技术,对人才的需求持续增长。无论是男生还是女生,只要具备相关的技能和知识,都可以在云计算领域找到就业机会。 目前入行云计算最好最便捷的方式就是考证,拿到一个云计算相关的证书,就能开启…...
[ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【云计算洞察】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | …...
c语言练习91:合并两个有序链表
合并两个有序链表 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 代码1: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct Li…...
【Qt控件之QTabBar】介绍及使用
概述 QTabBar类提供了一个选项卡栏,例如用于选项卡对话框。 QTabBar非常简单易用,它使用预定义的形状绘制选项卡,并在选择选项卡时发出信号。它可以被子类化以调整外观和感觉。Qt还提供了一个实现好的QTabWidget。 每个选项卡具有一个tabT…...
最新Tuxera NTFS2023最新版Mac读写NTFS磁盘工具 更新详情介绍
Tuxera NTFS for Mac是一款Mac系统NTFS磁盘读写软件。在系统默认状态下,MacOSX只能实现对NTFS的读取功能,Tuxera NTFS可以帮助MacOS 系统的电脑顺利实现对NTFS分区的读/写功能。Tuxera NTFS 2023完美兼容最新版本的MacOS 11 Big Sur,在M1芯片…...
AndroidX使用Paho MQTT报找不到android/support/v4/content/LocalBroadcastManager
网上有直接引用support-v4包的,但我用的AndroidX,不能为这个类再引用support-v4 直接自己创建这个类,把androidx.localbroadcastmanager.content.LocalBroadcastManager改改就行。 虽然奇葩但能解决问题 package android.support.v4.content…...
Filter与Listener(过滤器与监听器)
1.Filter 1.过滤器概述 过滤器——Filter,它是JavaWeb三大组件之一。另外两个是Servlet和Listener 它可以对web应用中的所有资源进行拦截,并且在拦截之后进行一些特殊的操作 在程序中访问服务器资源时,当一个请求到来,服务器首…...
【刷题篇】反转链表
文章目录 一、206.反转链表二、92.反转链表 ||三、25. K 个一组翻转链表 一、206.反转链表 class Solution { public://使用头插//三个指针也可以ListNode* reverseList(ListNode* head) {if(headnullptr)return nullptr;ListNode* curhead;ListNode* newheadnew ListNode(0);L…...
【C语言小游戏--猜数字】
文章目录 前言1.游戏描述2.代码实现2.1打印菜单2.2构建基础框架2.3玩游戏2.3.1生成随机数2.3.1.1rand()2.3.1.2srand()2.3.1.3time() 2.3.2game() 2.4自己设定猜的次数 3.完整代码 前言 猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏,下…...
Vue计算属性computed和监听watch
1.计算属性 初衷:为了解决模块里面有太多的计算逻辑让模版难以维护。 计算属性可以依赖一个数据也可以依赖多个数据的变化 使用场景: 商品单价和数量改变时,商品总价更改。如果写在方法里面,那么每次修改商品单价和数量时都会…...
Masa Mods中文汉化包:让Minecraft专业模组成为你的母语工具
Masa Mods中文汉化包:让Minecraft专业模组成为你的母语工具 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 你是否曾在Minecraft中使用Litematica、Tweakeroo这些强大模组时…...
ENVI 5.3处理Landsat8数据实战:如何高效完成辐射定标、FLAASH大气校正与矢量裁剪三连击?
ENVI 5.3高效处理Landsat8数据的三大核心技巧 遥感影像预处理是定量遥感分析的基础环节,但传统教程往往停留在单一功能操作层面。本文将分享如何通过ENVI 5.3构建自动化预处理流水线,实现从辐射定标到成果输出的全流程优化。不同于基础操作手册ÿ…...
告别手动MIGO:ABAPer如何用BAPI批量处理交货单收货提升效率
告别手动MIGO:ABAPer如何用BAPI批量处理交货单收货提升效率 在SAP物流执行模块中,外向交货单的收货过账(MIGO 101)是供应链管理的关键环节。当企业面临日均上百笔交货单处理需求时,传统手工操作不仅效率低下࿰…...
Zotero重复文献合并插件:5分钟快速清理学术库的终极指南
Zotero重复文献合并插件:5分钟快速清理学术库的终极指南 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 还在为Zotero文献库中堆积…...
GLM-TTS音色管理实测:自定义保存与加载音色,打造专属语音库
GLM-TTS音色管理实测:自定义保存与加载音色,打造专属语音库 1. 引言:为什么需要音色管理功能 在语音合成应用中,我们经常需要反复使用某些特定的音色。传统TTS系统每次生成语音都需要重新上传参考音频,不仅效率低下&…...
手把手教你部署NaViL-9B:双卡配置与快速测试全记录
手把手教你部署NaViL-9B:双卡配置与快速测试全记录 1. 环境准备与快速部署 1.1 硬件要求 显卡配置:至少2张24GB显存的NVIDIA显卡(如RTX 3090或A10G)系统内存:建议64GB以上存储空间:至少50GB可用空间&…...
【4月急救】论文AI率怎么稳降至5%?实测手工润色核心方法与4款降AI工具清单
屏幕前的学弟学妹们,最近还好吗? 是不是刚刚经历了这样的至暗时刻:顶着黑眼圈熬了三个大夜,好不容易把两万字的文章初稿怼出来,查重过了,心里正美滋滋呢,结果教务处突然发了一条通知——要查AI…...
5分钟上手!RTX 4090专属Anything to RealCharacters 2.5D转真人引擎保姆级部署教程
5分钟上手!RTX 4090专属Anything to RealCharacters 2.5D转真人引擎保姆级部署教程 1. 项目简介与核心优势 如果你手头有一张喜欢的二次元头像或2.5D插画,想把它变成真实人物照片,现在有了专为RTX 4090显卡优化的解决方案。Anything to Rea…...
JS逆向|猿人学逆向反混淆练习平台第13题加密分析
关注它,不迷路。本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!一.题目地址https://match.yuanrenxue.cn/match/13二.抓包分析先打开控制台&…...
保姆级教程:用Python 3.6和pymilvus 1.1.0搞定Milvus向量数据库的增删改查
Python 3.6与Milvus向量数据库实战:从零开始构建AI应用 在人工智能和机器学习领域,向量数据库正成为处理高维数据的核心工具。Milvus作为一款开源的向量数据库,因其高效的相似性搜索能力而备受开发者青睐。本文将带你从零开始,使用…...
