From 2c2b7b86a53bf2d0d337c1f39d385cca37c919fa Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Mon, 1 Dec 2025 11:33:56 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8B=8D=E7=A9=B9=E5=A4=96=E5=8D=96--=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=8A=B6=E6=80=81=E8=87=AA=E5=8A=A8=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=9A=E8=B6=85=E6=97=B6=E6=9C=AA=E6=94=AF=E4=BB=98&?= =?UTF-8?q?=E6=B4=BE=E9=80=81=E4=B8=AD=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=B7=B2?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/sky/SkyApplication.java | 2 + .../main/java/com/sky/mapper/OrderMapper.java | 10 +++ .../src/main/java/com/sky/task/MyTask.java | 17 +++++ .../src/main/java/com/sky/task/OrderTask.java | 65 +++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 sky-server/src/main/java/com/sky/task/MyTask.java create mode 100644 sky-server/src/main/java/com/sky/task/OrderTask.java diff --git a/sky-server/src/main/java/com/sky/SkyApplication.java b/sky-server/src/main/java/com/sky/SkyApplication.java index 5c75b01..afce5df 100644 --- a/sky-server/src/main/java/com/sky/SkyApplication.java +++ b/sky-server/src/main/java/com/sky/SkyApplication.java @@ -4,12 +4,14 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication @EnableTransactionManagement //开启注解方式的事务管理 @Slf4j @EnableCaching //开启缓存注解功能 +@EnableScheduling//开启任务调度 public class SkyApplication { public static void main(String[] args) { SpringApplication.run(SkyApplication.class, args); diff --git a/sky-server/src/main/java/com/sky/mapper/OrderMapper.java b/sky-server/src/main/java/com/sky/mapper/OrderMapper.java index efe15fb..fdc9a41 100644 --- a/sky-server/src/main/java/com/sky/mapper/OrderMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/OrderMapper.java @@ -6,6 +6,7 @@ import com.sky.entity.Orders; import org.apache.ibatis.annotations.*; import java.time.LocalDateTime; +import java.util.List; @Mapper public interface OrderMapper { @@ -47,4 +48,13 @@ public interface OrderMapper { */ @Select("select count(id) from orders where status = #{status}") Integer countStatus(Integer status); + + /** + * 根据支付状态和时间获取订单的查询操作 + * @param status + * @param time + * @return + */ + @Select("select * from orders where status = #{status} and order_time < #{time}") + List getByStatusAndOrderTime(Integer status, LocalDateTime time); } diff --git a/sky-server/src/main/java/com/sky/task/MyTask.java b/sky-server/src/main/java/com/sky/task/MyTask.java new file mode 100644 index 0000000..85159dc --- /dev/null +++ b/sky-server/src/main/java/com/sky/task/MyTask.java @@ -0,0 +1,17 @@ +package com.sky.task; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +@Slf4j +public class MyTask { + +// @Scheduled(cron = "0/5 * * * * ?") + public void executeTask(){ + log.info("定时任务开始执行:{}",new Date()); + } +} diff --git a/sky-server/src/main/java/com/sky/task/OrderTask.java b/sky-server/src/main/java/com/sky/task/OrderTask.java new file mode 100644 index 0000000..3c2e8d0 --- /dev/null +++ b/sky-server/src/main/java/com/sky/task/OrderTask.java @@ -0,0 +1,65 @@ +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 +@Slf4j +public class OrderTask { + + @Autowired + private OrderMapper orderMapper; + + //处理订单超时未支付状态 +// @Scheduled(cron = "0 * * * * ? ") + @Scheduled(cron = "0/5 * * * * ? ") + public void procesTimeOutOrder(){ + log.info("定时任务自动执行,处理支付超时订单:"+ LocalDateTime.now()); + //每分中查询一下订单,是否有超过15分(下单时间+15分钟 < 当前时间) + //select * from orders where status = 未支付 and order_time < 当前时间 - 15分钟; + LocalDateTime timeout = LocalDateTime.now().minusMinutes(15); + //根据支付状态和时间获取订单的查询操作 + List orders = orderMapper.getByStatusAndOrderTime(Orders.PENDING_PAYMENT,timeout); + //全部设置订单的状态为已取消,并设置取消原因 + if (orders != null && orders.size() > 0) { + orders.stream().forEach(order->{ + order.setStatus(Orders.CANCELLED); + order.setCancelReason("支付超时,自动取消"); + order.setCancelTime(LocalDateTime.now()); + orderMapper.update(order); + }); + } + } + + + + //每日处理“派送中”的订单为已完成,每天凌晨1点执行一次 +// @Scheduled(cron = "0 0 1 * * ? ") + @Scheduled(cron = "0/5 * * * * ? ") + public void processPsOrder(){ + log.info("定时任务自动执行,处理派送中,未完成的订单:"+ LocalDateTime.now()); + //每天上午1点查询一下,前一天是否有派送中,未完成的订单(下单时间< 当前时间 - 1小时) + //select * from orders where status = 派送中 and order_time < 当前时间 - 1小时; + LocalDateTime time = LocalDateTime.now().plusMinutes(-60); + + + //根据支付状态和时间获取订单的查询操作 + List orders = orderMapper.getByStatusAndOrderTime(Orders.DELIVERY_IN_PROGRESS,time); + //全部设置订单的状态为已完成 + if (orders != null && orders.size() > 0) { + orders.stream().forEach(order->{ + order.setStatus(Orders.COMPLETED); + order.setDeliveryTime(LocalDateTime.now()); + orderMapper.update(order); + }); + } + } + +}