redis实现未支付时间超时就删除订单,并给前端反应一个已过期

embedded/2024/9/24 23:27:30/

1.创建订单缓存,设置过期时间为一分钟

now 是一个表示当前时间的对象,offset 方法用于对当前时间进行偏移。
redisTemplate.expireAt(paymentKey, now.offset(DateField.SECOND, 60));

2.创建KeyExpiredListener类并且继承KeyExpirationEventMessageListener,用于监听Redis缓存过期。

在里面实现onMessage来实现键过期进行的回调函数

 

 @Override@Transactional//修改记录public void onMessage(Message message, byte[] pattern) {//获取过期数据的KeyString key = message.toString();//判断过期的数据是否为挂号单if (key.startsWith("registration_payment_")) {//从Key中提取挂号单流水号String outTradeNo = key.split("_")[2];//更新挂号支付订单状态为4medicalRegistrationDao.discardPayment(outTradeNo);//出诊计划已挂号人数减去1doctorWorkPlanDao.releaseNumByOutTradeNo(outTradeNo);//出诊时段已挂号人数减去1doctorWorkPlanScheduleDao.releaseNumByOutTradeNo(outTradeNo);//删除缓存中的已挂号人数//查询挂号单的workPlanId和scheduleIdHashMap map = medicalRegistrationDao.searchWorkPlanIdAndScheduleId(outTradeNo);int scheduleId = MapUtil.getInt(map, "doctorScheduleId");int workPlanId = MapUtil.getInt(map, "workPlanId");key = "doctor_schedule_" + scheduleId;//出诊时间段的缓存if (redisTemplate.hasKey(key)) {//存在没有过期//更新缓存中已挂号人数的数量减去1redisTemplate.opsForHash().increment(key, "num", -1);}}//super.onMessage(message, pattern);super.onMessage(message, pattern);}

上面是我写的代码,就是过期调用 DAO 层的方法,更新挂号支付订单状态为 4,表示订单已废弃。分别调用 DAO 层的方法,将对应的出诊计划和出诊时段的已挂号人数减去 1。因为我这个项目最多同一时段只能挂号三个人、


http://www.ppmy.cn/embedded/6827.html

相关文章

十大排序——5.选择排序

这篇文章我们来介绍一下选择排序 目录 1.介绍 2.代码实现 3.小结与思考 1.介绍 选择排序:选择排序( Selection sort)是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个…

通过Dockerfile 创建 kali-novnc

创建Dockerfile # 使用官方Kali镜像作为基础镜像 FROM kalilinux/kali-rolling# 设置工作目录 WORKDIR /app# 将当前目录下的所有文件复制到工作目录中 COPY ./run.sh . RUN chmod x /app/run.sh# 安装项目依赖 RUN apt update -y RUN apt upgrade -y# 安装中文字体支持 apt …

《Linux运维总结:Kylin V10+ARM架构CPU基于docker-compose一键离线部署redis6.2.8之容器版哨兵集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统&…

酷得智能 无人机方案开发

东莞市酷得智能科技有限公司,是一家专业的技术服务公司,致力于为各类智能硬件提供高效、稳定、安全的底层驱动解决方案。拥有一支经验丰富、技术精湛的团队,能够为客户提供全方位的底层驱动开发服务。 无人机功能介绍: 1、自动跟…

【春秋云境】CVE-2023-4450 jeect-boot queryFieldBySql接口RCE漏洞

靶场介绍 JeecgBoot 是一个开源的低代码开发平台,Jimureport 是低代码报表组件之一。当前漏洞在 1.6.1 以下的 Jimureport 组件库中都存在,由于未授权的 API /jmreport/queryFieldBySql 使用了 freemarker 解析 SQL 语句从而导致了 RCE 漏洞的产生。 开…

【QT】QChartView和QChart的一些图表设置

enum RubberBand {NoRubberBand 0x0,VerticalRubberBand 0x1,HorizontalRubberBand 0x2,RectangleRubberBand 0x3};在 Qt Charts 中,QChartView 类提供了一些方法和属性来控制图表的渲染和交互行为。这些方法包括 setRenderHint 和 setRubberBand,它…

【iOS安全】iOS ARM汇编

mov指令 MOV X22, X0 将X0的值移到X22中 参数传递 参数1:寄存器X0传递 参数2:寄存器X1传递 参数3:寄存器X2传递 参数4:寄存器X3传递 如果需要传递更多参数,会使用栈来传递 返回值 ARM架构下,通常使用…

废液收集系统物联网远程监控解决方案

废液收集系统物联网远程监控解决方案 在面对日益严峻的环保压力和严格的法律法规要求下,构建一套高效、智能的废液收集系统物联网远程监控解决方案显得尤为重要。该方案旨在通过深度融合物联网技术、云计算、大数据分析等先进手段,实现对废液收集系统的…