苍穹外面day13(day10)---订单状态定时处理、来单提醒和客户催单



Spring Task

同学们可以看我这篇文章
Spring Task初学-CSDN博客
订单状态定时处理




新建OrderTask
/*** 定时任务类,定时处理订单状态*/
@Component
@Slf4j
public class OrderTask {@Autowiredprivate OrderMapper orderMapper;/*** 处理超时订单的方法*/@Scheduled(cron = "0 * * * * ? ") //每分钟触发一次public void processTimeoutOrder(){log.info("定时处理超市订单:{}", LocalDateTime.now());//select * from orders where status = ? and order_time < (当前时间-15分钟)LocalDateTime time = LocalDateTime.now().plusMinutes(-15);List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, time);if(ordersList != null && ordersList.size() > 0){for (Orders orders : ordersList) {orders.setStatus(Orders.CANCELLED);orders.setCancelReason("订单超时,自动取消");orders.setCancelTime(LocalDateTime.now());orderMapper.update(orders);}}}/*** 处理一直处于派送中状态的订单*/@Scheduled(cron = "0 0 1 * * ?") //每天凌晨1点触发一次public void processDeliveryOrder(){log.info("定时处理处于派送中的订单:{}",LocalDateTime.now());List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS, LocalDateTime.now().plusHours(-1));if(ordersList != null && ordersList.size() > 0){for (Orders orders : ordersList) {orders.setStatus(Orders.COMPLETED);orderMapper.update(orders);}}}
}
WebSocket

这篇文章详细讲解了WebScoket:
WebSocket初学-CSDN博客
来单提醒


只需要在paySuccess(OrderServiceIpl中)这个方法中稍微改动一下就行了,
主要是创建了一个HashMap对象map,用于存储要发送给客户端的消息内容。type字段设置为1,表示这是一个来单提醒。 orderId字段设置为订单的ID。 content字段包含订单号的文本信息。 使用JSON库(如阿里巴巴的fastjson)将map对象转换为JSON字符串json。 调用webSocketServer的sendToAllClient方法,将JSON字符串json发送给所有连接的客户端。这通常用于实时通知客户端订单状态的变更。
/*** 支付成功,修改订单状态** @param outTradeNo*/public void paySuccess(String outTradeNo) {// 根据订单号查询订单Orders ordersDB = orderMapper.getByNumber(outTradeNo);// 根据订单id更新订单的状态、支付方式、支付状态、结账时间Orders orders = Orders.builder().id(ordersDB.getId()).status(Orders.TO_BE_CONFIRMED).payStatus(Orders.PAID).checkoutTime(LocalDateTime.now()).build();orderMapper.update(orders);//通过websocket向客户端浏览器推送消息 type orderId contentMap map = new HashMap();map.put("type",1);//1表示来单提醒,2表示用户催单map.put("orderId",ordersDB.getId());map.put("content","订单号:"+outTradeNo);String json = JSON.toJSONString(map);webSocketServer.sendToAllClient(json);}
功能测试:
客户催单


逻辑跟来单提醒差不多

接口设计

user/OrdreController
/*** 催单* @param id* @return*/@GetMapping("/reminder/{id}")@ApiOperation("催单")public Result reminder(@PathVariable Long id){orderService.reminder(id);return Result.success();}
OrderService
/*** 催单* @param id*/void reminder(Long id);
OrderServiceImpl
/*** 催单* @param id*/public void reminder(Long id) {//根据id查询订单Orders ordersDB = orderMapper.getbyId(id);// 校验订单是否存在,并且状态为4if(ordersDB == null){throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);}Map map = new HashMap();map.put("type",2);map.put("orderId",ordersDB.getId());map.put("content","订单号:"+ordersDB.getNumber());//通过webSocketServer向客户端浏览器推送消息webSocketServer.sendToAllClient(JSON.toJSONString(map));}
功能测试

相关文章:
苍穹外面day13(day10)---订单状态定时处理、来单提醒和客户催单
Spring Task 同学们可以看我这篇文章 Spring Task初学-CSDN博客 订单状态定时处理 新建OrderTask /*** 定时任务类,定时处理订单状态*/ Component Slf4j public class OrderTask {Autowiredprivate OrderMapper orderMapper;/*** 处理超时订单的方法*/Scheduled(c…...
RCE和php文件上传
一、远程命令执行(RCE) RCE漏洞概述 RCE漏洞允许攻击者通过某种方式在目标服务器上执行任意命令。这种漏洞通常出现在服务器端语言中,如PHP。 RCE漏洞原理 PHP中的一些函数可以执行命令或代码,但如果对这些函数的输入未加限制&a…...
nextjs 实现TodoList网页应用案例
参考: https://nextjs.org/ Next.js 是用于网络的一种 React 框架。一些世界上最大的公司在使用它,它能够借助 React 组件的力量让您创建高质量的网络应用程序。 1、创建项目: 另外注意:pages与app路由存在冲突,如果有…...
U盘格式化了怎么恢复数据?教你U盘恢复妙招
U盘作为便携式存储设备,在我们的日常生活和工作中发挥着重要作用。然而,有时由于操作失误或其他原因,我们可能会格式化U盘,从而导致数据丢失。当遭遇这种情况时,很多人会感到焦虑和困惑。不过,幸运的是&…...
化工厂室内外4G/5G+蓝牙+GPS/北斗RTK人员定位系统解决方案
化工厂是高风险场所,含有大量有毒、易燃、易爆、易腐蚀等化学物品,并且环境复杂、设备繁多,一旦出现人为疏忽或者违规操作很容易引发重大安全事故,因此对化工厂员工、外来访客进行科学合理地管控,提升化工厂管理人员管…...
【知识跨境电商API接口丨python数分实战】国际电商平台用户成交转化分析
今天这篇文章将给大家介绍国际电商平台用户成交转化分析案例。 01 初步思路 问题已经明确 GMV的下降,可能出在用户下单成交环节。 这里需要明确GMV下降是今年与去年相比吗?明确GMV下降到底如何判断出来的?对比的对象是什么?如…...
【SpringBoot】Java对象级联校验
对于Javabean对象中的普通属性字段,我们可以直接使用注解进行数据校验,那如果是关联对象呢?其实也很简单,在属性上添加Valid就可以作为属性对象的内部属性进行验证。 public class User{ Size(min3,max5,message"list的Size在…...
【Redis 进阶】哨兵 Sentinel(重点理解流程和原理)
Redis 的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工进行主从切换,同时大量的客户端需要被通知切换到新的主节点上,对于上了一定规模的应用来说,这种方案是无法接受的,于是 Redis 从 2.8 开始…...
CSS实现元素hover时背景色拉伸渐变
HTML代码 <ul><li><p><a href"#">Facebook搜索</a></p></li><li><p><a href"#">Instagram搜索</a></p></li><li><p><a href"#">Google搜索&…...
Activity收不到bundle值
Activity有四种启动模式,一般为默认。 当Activity的启动模式为singleTask或singleInstance的时候,通过Intent传值,getIntent是接收不到值的,为null。 当Activity的启动模式为singletop的时候,若Activity位于栈顶&…...
ZBrush
所有建模软件最开始需要搞清楚的就是基础操作,如旋转视角,放大缩小,移动等,一般可以看上手教程 zbrush中雕刻很重要的概念是笔刷:ZBrush笔刷介绍-CSDN博客 基本操作 编辑模式:T 清除画布:ctr…...
【多线程-从零开始-贰】线程的构造方法和常见属性
Thread 的常见构造方法 在创建线程的时候,是可以给线程起名字的。默认为 Thread-0 、Thread-1… 不会影响线程执行效果,可以更好地进行管理 ThreadGroup -线程组 把多个线程放到一组里,方便统一的设置线程的一些属性不过现在很少用到&#…...
力扣:100379. 新增道路查询后的最短距离 I(Java,BFS)
目录 题目描述:示例 :代码实现: 题目描述: 给你一个整数 n 和一个二维整数数组 queries。 有 n 个城市,编号从 0 到 n - 1。初始时,每个城市 i 都有一条单向道路通往城市 i 1( 0 < i < …...
程序开发的常用设计思想
程序开发的设计思想多种多样,每种思想都旨在提高软件的可读性、可维护性、可扩展性和性能。以下是一些常见的程序开发设计思想: 1. 面向对象编程(Object-Oriented Programming, OOP) 核心思想: 将程序视为对象的集合…...
Qt之Gui
组件依赖关系 应用 #mermaid-svg-GADicZtZJRVVUeiF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GADicZtZJRVVUeiF .error-icon{fill:#552222;}#mermaid-svg-GADicZtZJRVVUeiF .error-text{fill:#552222;stroke:#…...
Linux操作系统之进程信号
进程信号 一、信号1、概念2、系统定义的信号列表3、常见的信号处理方式 二、产生信号的方式1、终端按键(1)组合键(2)示例代码(3)运行结果 2、调用系统函数(1)kill命令(2&…...
科普文:微服务之Spring Cloud Alibaba消息队列组件RocketMQ工作原理
概叙 本文探讨 RocketMQ 的事务消息原理,并从源码角度进行分析,以及事务消息适合什么场景,使用事务消息需要注意哪些事项。 同时详细介绍RocketMQ 事务消息的基本流程,并通过源码分析揭示了其内部实现原理,尽管事务消…...
黑马头条vue2.0项目实战(五)——首页—频道编辑
目录 1. 使用页面弹出层 1.1 页面弹出层简单使用 1.2 创建频道编辑组件 1.3 页面布局 2. 展示我的频道 3. 展示推荐频道列表 3.1 获取所有频道 3.2 处理展示推荐频道 4. 添加频道 5. 编辑频道 5.1 处理编辑状态 5.2 切换频道 5.3 让激活频道高亮 5.4 删除频道 6.…...
Java:基础语法
基础语法 1. 基本结构类和方法 2. 变量和数据类型基本数据类型引用数据类型 3. 操作符算术操作符比较操作符逻辑操作符 4. 控制结构条件语句循环语句 5. 数组6. 方法7. 面向对象编程类和对象继承多态 8. 异常处理9. 常用类库 1. 基本结构 类和方法 Java程序的基本单位是类&am…...
安装bedtools详细步骤和详细介绍bedtools用法
安装bedtools详细步骤和详细介绍bedtools用法 一、安装bedtools详细步骤下载解压安装编译依赖编译设置环境变量激活环境变量执行命令查看版本二、详细介绍bedtools用法使用bedtools示例用法bedtools intersectbedtools bamtobedbedtools window一、安装bedtools详细步骤 下载 …...
暗黑3技能自动化释放:告别机械操作,重燃战斗激情 - 基于AutoHotkey的智能宏工具实现
暗黑3技能自动化释放:告别机械操作,重燃战斗激情 - 基于AutoHotkey的智能宏工具实现 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelpe…...
目录:AI 多智能体框架开发:从架构设计到生产落地
🚀 AI 多智能体框架开发:从架构设计到生产落地 🛠 专栏引言 当大模型的潜力不再受限于“对话框”,AI 的真正价值开始在自主任务完成(Task Autonomy)中爆发。然而,从单体 Agent 到生产级多智能…...
Hunyuan-MT-7B多语翻译实战:跨境电商独立站商品页SEO多语内容批量生成
Hunyuan-MT-7B多语翻译实战:跨境电商独立站商品页SEO多语内容批量生成 1. 项目背景与价值 跨境电商独立站面临的最大挑战之一,就是如何为不同语言市场的用户提供本地化的商品内容。传统的人工翻译方式成本高、效率低,而机器翻译又往往无法保…...
GTE多任务NLP引擎部署教程:离线环境下的安装、配置与测试
GTE多任务NLP引擎部署教程:离线环境下的安装、配置与测试 1. 环境准备与快速部署 1.1 系统要求与依赖检查 在开始部署前,请确保您的离线服务器满足以下最低要求: 操作系统:Ubuntu 20.04/22.04 或 CentOS 7/8(推荐&…...
FireRedASR Pro优化指南:如何提升长音频识别效率
FireRedASR Pro优化指南:如何提升长音频识别效率 1. 长音频识别的核心挑战 语音识别系统在处理长音频时面临几个关键瓶颈问题: 内存压力:随着音频时长增加,需要缓存的中间状态呈指数级增长计算复杂度:注意力机制的时…...
Pixel Couplet Gen快速上手:三步完成像素春联生成器本地部署与微信小程序对接
Pixel Couplet Gen快速上手:三步完成像素春联生成器本地部署与微信小程序对接 1. 项目概览 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的AI春联生成器。通过ModelScope大模型驱动,它能够将用户输入的文字愿望转化为富有创意的像素风格…...
OpenClaw硬件监控:Gemma-3-12b-it分析传感器数据并预警
OpenClaw硬件监控:Gemma-3-12b-it分析传感器数据并预警 1. 为什么需要AI驱动的硬件监控? 去年夏天,我的家用服务器因为CPU散热器故障导致过热关机,丢失了正在处理的科研数据。这件事让我开始思考:传统的阈值告警太被…...
word简历模板(含范文),免费下载
word简历模板导言 在竞争激烈的求职市场中,一份专业、个性化的简历是叩开理想企业大门的关键。简历不仅是个人经历的罗列,更是能力、潜力与职业规划的集中体现。然而,许多求职者因缺乏经验或模板参考,难以突出自身优势࿰…...
IronCalc 性能基准测试:与传统电子表格引擎的对比分析
IronCalc 性能基准测试:与传统电子表格引擎的对比分析 【免费下载链接】IronCalc Main engine of the IronCalc ecosystem 项目地址: https://gitcode.com/gh_mirrors/ir/IronCalc IronCalc 是一个基于 Rust 语言开发的现代化开源电子表格引擎,专…...
《QGIS快速入门与应用基础》256:SVG格式:适合矢量图二次编辑
作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...
