订单定时状态处理业务(SpringTask)
文章目录
-
- 概要
- 整体架构流程
- 技术细节
- 小结
概要
订单定时状态处理通常涉及到对订单状态进行定期检查,并根据订单的状态自动执行某些操作,比如关闭未支付的订单、自动确认收货等.
需求分析以及接口设计
需求分析
用户下单后可能存在的情况:
-
下单后15min内未支付,订单一直处于“待支付”状态
-
用户收货后管理端未点击完成按钮,订单一直处于“派送中”状态
技术细节
对于上面两种情况需要通过定时任务来修改订单状态,具体逻辑为:
-
通过定时任务每分钟检查一次是否存在支付超时订单(下单后超过15分钟仍未支付则判定为支付超时订单),如果存在则修改订单状态为“已取消”
-
通过定时任务每天凌晨1点检查一次是否存在“派送中”的订单,如果存在则修改订单状态为“已完成”
1.task:
由于Springtask定时状态处理不需要通过接口调用,是自动执行的,所以不需要controller层
package com.sky.task;import com.sky.entity.Orders;
import com.sky.mapper.OrderMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.util.List;@Component//加入Spring容器
@Slf4j
public class OrderTask {@Autowiredprivate OrderMapper orderMapper;@Scheduled(cron = "0 * * * * ?")//每分钟执行一次public void processTimeOutOrder(){log.info("定时处理订单超时的订单");LocalDateTime orderTime = LocalDateTime.now().plusMinutes(-15);//查询到未支付且超时的订单List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.UN_PAID,orderTime);//遍历这些订单,更改他们的状态,取消时间和取消原因,再更新表if(ordersList != null && ordersList.size() > 0){for (Orders orders : ordersList) {orders.setStatus(Orders.CANCELLED);orders.setCancelTime(LocalDateTime.now());orders.setCancelReason("订单超时,已被自动取消");orderMapper.update(orders);}}}@Scheduled(cron = "0 0 1 * * ? ")//每天凌晨一点执行一次public void processDeliveryOrder(){log.info("定时处理派送中的订单");LocalDateTime orderTime = LocalDateTime.now().plusMinutes(60);//每天凌晨0点执行一次//查询到正在派送的订单List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS,orderTime);//遍历这些订单,更改他们的状态,取消时间和取消原因,再更新表if(ordersList != null && ordersList.size() > 0){for (Orders orders : ordersList) {orders.setStatus(Orders.COMPLETED);orderMapper.update(orders);}}}}
2.Mapper层:
@Select("select * from `sky-take-out`.orders where status = #{status} and order_time < #{orderTime}")List<Orders> getByStatusAndOrderTimeLT(Integer status, LocalDateTime orderTime);
效果展示
相关文章:
订单定时状态处理业务(SpringTask)
文章目录 概要整体架构流程技术细节小结 概要 订单定时状态处理通常涉及到对订单状态进行定期检查,并根据订单的状态自动执行某些操作,比如关闭未支付的订单、自动确认收货等. 需求分析以及接口设计 需求分析 用户下单后可能存在的情况: …...
STM32 | ADC+RS485(第十天)
点击上方"蓝字"关注我们 01、ADC概述 ADC, Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号.例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的…...
python打包成能够在mac里面运行的程序
要将你的PyQt5应用程序打包成可以在macOS上运行的独立应用程序,可以使用工具如PyInstaller或py2app。下面是使用py2app的详细步骤,因为它是macOS上专用的打包工具,并且更好地支持PyQt5。 1. 安装py2app 首先,确保你的macOS系统上…...
基于FPGA的数字信号处理(20)--半减器和全减器
目录 1、前言 2、半减器 3、全减器 4、减法器 文章总目录点这里:《基于FPGA的数字信号处理》专栏的导航与说明 1、前言 既然有半加器和全加器,那自然也有半减器和全减器了。尽管在电路中减法的实现基本都是 补码 加法 的形式,但是正所谓…...
Python:单引号,双引号,三引号的区别
在Python中,单引号()、双引号(")和三引号( 或 """)都可以用来定义字符串,但它们之间有一些区别: 单引号()和双引号…...
电子电气架构 ---SOMEIP/SD初入门
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...
一些数学基础概念
一些数学基础概念 概率密度函数(PDF) 概率密度函数(Probability Density Function,简称 PDF)是描述连续随机变量的概率分布的一种函数。它用来表示随机变量在各个取值区间内的概率密度。 1. 定义 对于一个连续随机变量 ( X ),…...
责任有限公司的一般组织结构
责任有限公司(有限责任公司,LLC)的组织结构通常是为了确保公司运营的有效性和管理的透明度。以下是一般责任有限公司的组织结构及其主要组成部分: 1. 股东(Shareholders) 职责和角色 所有者:…...
Leetcode3227. 字符串元音游戏
Every day a Leetcode 题目来源:3227. 字符串元音游戏 解法1:博弈论 分类讨论: 如果 s 不包含任何元音,小红输。如果 s 包含奇数个元音,小红可以直接把整个 s 移除,小红赢。如果 s 包含正偶数个元音&am…...
网络流量分析在运维管理中的重要性与实施策略
在运维管理工作中,网络流量分析是一项不可或缺的技术手段。通过对网络流量的深入剖析,运维团队能够更全面地了解网络状态,及时发现潜在问题,优化网络性能,从而确保企业网络的稳定与高效运行。本文将详细探讨网络流量分…...
通信原理实验——PCM编译码
PCM编译码 实验目的 理解PCM编译码原理及PCM编译码性能熟悉PCM编译码专用集成芯片的功能和使用方法及各种时钟关系熟悉语音数字化技术的主要指标及测量方法 主要仪器设备及软件 硬件:多功能实验箱、示波器、导线 软件:无 实验原理 1. 抽样信号的量…...
matlab的strel()函数的使用方法(OK)
这个函数 是形态学的结构元素 使用方法如下 SE strel(nhood) SE strel("diamond",r) SE strel("disk",r) SE strel("disk",r,n) SE strel("octagon",r) SE strel("line",len,deg) SE strel("rectangle",…...
Linux:Linux权限解析
一、Linux下的用户分类 在Linux下,有两种用户,一种是超级用户,一种是普通用户 超级用户:可以再linux系统下做任何事情,不受权限限制(制定规则,但不需要遵守规则) 普通用户࿱…...
Spring面试篇章——IOC
IOC概念和原理 IOC概念 IOC就是控制反射,把对象创建和对象之间的调用过程,交给Spring进行管理使用IOC的目的:降低耦合度 IOC底层原理 xml解析、工厂模式、反射 图解: 原始模式 耦合度太高了,即当dao改了…...
适合制造业的项目管理软件都有哪些?
项目管理软件涉及进度、预算成本、资源、开发、流程、质量、风险、工时、知识文档、商务等各个方面,是企业项目管理领域的重要辅助工具,能够帮助组织提高项目管理水平与质量,确保项目顺利进行。 一、 奥博思 PowerProject 项目管理系统 Pow…...
微应用(Micro-Applications)、微前端(Micro Frontend)、Qiankun 框架之间的区别和联系
简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo :联系我们:VX :tja6288 / EMAIL: 347969164@qq.com 文章目录 微应用(Micro-Applications)、微…...
String的底层构造
1.String类对象的构造(后面有每一个接口的实现) #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace bit {class string{public:typedef char* iterator;typedef const…...
Binder机制的原理
Binder机制是Android系统中用于进程间通信(IPC)的核心机制,它基于C/S(客户端-服务端)模型,允许不同进程间进行高效的通信和数据交换。以下是对Binder机制原理的详细解析: 1. Binder架构 Binde…...
JavaScript输出数据的方法?
在JavaScript中,输出数据有以下几种方法: 使用console.log()函数:使用console.log()函数可以将数据输出到浏览器的控制台,例如: console.log("Hello, World!");使用alert()函数:使用alert()函数…...
Redis学习笔记——第19章 事务
第19章 事务 19.1 事务的实现 19.1.1 事务开始 使用multi命令开启一个事务 通过修改客户端的flags字段为REDIS_MULTI 19.1.2 命令入队 当开启事务之后,exec、discard、watch、multi命令立即执行,而其他命令会放入一个队列中,并返回Queue…...
OpenClaw技能开发入门:为千问3.5-9B编写自定义文件处理器
OpenClaw技能开发入门:为千问3.5-9B编写自定义文件处理器 1. 为什么需要自定义文件处理器 上周我在整理项目文档时,发现一个重复性痛点:每次收到同事发来的Markdown文件,都需要手动执行"格式校验→重命名→按日期归档→生成…...
面向对象分析模型深入分析
面向对象分析模型深入分析 面向对象分析(Object-Oriented Analysis, OOA)是系统分析师在需求阶段的核心工作方法。它强调从问题域中的客观实体出发,以“对象”为基本单元建立业务模型,而不是从功能或数据流出发。下面从核心概念、三大模型、建模流程到实战案例进行全面解析…...
java单例模式 懒汉式(双重检查锁)
/*** 懒汉式 方式6 双重检查锁*/ public class SingletonLazy {// 1、私有构造方法private SingletonLazy(){}// 2、在成员变量位置声明一个静态对象private static volatile SingletonLazy instance; // 关键字volatile:禁止指令重排序,确保绝对安全// …...
新手学吉他必看,这5个常见误区,避开了少走3个月弯路
经常会看到很多新手学吉他,学着学着就卡壳学不下去了,不是嫌按弦手疼,就是曲子弹不下去。特别是一些自学的朋友,网上随便东找些课,西看些视频,学下来进步很慢,3个月之后就改打“退堂鼓”了。其实…...
HUSB238 USB-C PD物理层驱动设计与ESP32集成指南
1. HUSB238 驱动库概述HUSB238 是由 Microchip 推出的 USB Type-C 和 USB PD(Power Delivery)源端(Source)控制器,专为高集成度、小尺寸 USB-C 充电应用设计。其核心功能包括:USB-C 插拔检测(CC…...
AI Memory 全景解析:让 Agent 真正记住你
AI Memory 全景解析:让 Agent 真正"记住"你 你有没有遇到过这种场景:明明昨天告诉 AI 助手你喜欢简洁的代码风格,今天它又开始写冗长的注释;或者你费心纠正了一个错误,下次对话它照犯不误。这就是 AI 没有记…...
别再买成品了!手把手教你用立创EDA复刻TP4056充电板,成本不到3块钱
3元自制18650充电器:立创EDA复刻TP4056全流程实战 每次看到抽屉里闲置的18650电池,总想给它们配个充电器,但市面上的成品要么价格虚高,要么功能过剩。作为一个常年折腾电子制作的爱好者,我发现用立创EDA复刻TP4056充电…...
【Linux复习】:基础指令/常用工具
基础指令 目录相关 pwd 打印当前所在路径ls 列出目录内容 ls # 简单列表 ls -l # 详细信息(权限、大小、时间) ls -a # 显示隐藏文件 ls -la # 详细 隐藏 ls -lt # 按时间排序cd 切换目录 cd /home # 绝对路径 cd .. …...
掌握SQL窗口函数,轻松处理复杂数据分析
SQL 窗口函数(Window Function)是一种强大的分析工具,能够在不缩减原始数据行数的前提下执行复杂计算。这种函数通过对一组相关数据行(称为"窗口")进行计算,并将结果直接附加到每一行记录中。窗口…...
项目介绍 MATLAB实现基于栅格地图法(Grid Map)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力
MATLAB实现基于栅格地图法(Grid Map)进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序,GUI设计和代码详解) 随着无人机技术的迅速…...
