Day11 苍穹外卖项目 SpringTask、订单状态定时处理、WebSocket提示来单提醒以及客户催单

目录

1.Spring Task

1.1 介绍

1.2 cron表达式

1.3 入门案例

1.3.1 实现步骤

1.3.2 代码开发

1.3.3 功能测试

2.订单状态定时处理

2.1 需求分析

2.2 代码开发

2.2.1 OrderMapper接口中扩展方法

2.2.2 processTimeoutOrder方法

2.2.3 processDeliveryOrder方法

2.3 功能测试

3.WebSocket

3.1 介绍

3.2 入门案例

3.2.1 案例分析

3.2.2 实现步骤

3.2.3 功能测试

4.来单提醒

4.1 需求分析和设计

4.2 代码开发

4.3 功能测试

4.4 代码提交

5.客户催单

5.1 需求分析和设计

5.2 接口设计

5.2 代码开发

5.2.1 Controller层

5.2.2 Service层接口

5.2.3 Service层实现类

5.2.4 Mapper层

5.3 功能测试

5.4 代码提交


1.Spring Task

1.1 介绍

Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。

定位:定时任务框架。

作用:定时自动执行某段Java代码。

应用场景:

1). 信用卡每月还款提醒

2). 银行贷款每月还款提醒

3). 火车票售票系统处理未支付订单

4). 入职纪念日为用户发送通知

强调:只要是需要定时处理的场景都可以使用Spring Task。

1.2 cron表达式

cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间。

构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义

每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)。是有顺序的。

举例:

2022年10月12日上午9点整 对应的cron表达式为:0 0 9 12 10 ? 2022

注意事项:一般日和周的值不同时设置,其中一个设置,另一个用?表示。

比如:描述2月份的最后一天,最后一天具体是几号呢?可能是28号,也有可能是29号,所以就不能写具体数字。

为了描述这些信息,提供一些特殊的字符。这些具体的细节,我们就不用自己去手写,因为这个cron表达式,它其实有在线生成器。

cron表达式在线生成器:https://cron.qqe2.com/

通配符:

* 表示所有值;

? 表示未说明的值,即不关心它为何值;

- 表示一个指定的范围;

, 表示附加一个可能值;

/ 符号前表示开始时间,符号后表示每次递增的值;

cron表达式案例:

*/5 * * * * ? 每隔5秒执行一次

0 */1 * * * ? 每隔1分钟执行一次

0 0 5-15 * * ? 每天5-15点整点触发

0 0/3 * * * ? 每三分钟触发一次

0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发

0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发

0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

可以直接在这个网站上面,只要根据自己的要求去生成corn表达式即可。所以一般就不用自己去编写这个表达式。

1.3 入门案例

1.3.1 实现步骤

1). 导入maven坐标 spring-context(已存在)

该依赖会被起步依赖进行依赖传递下来。

2). 启动类添加注解 @EnableScheduling 开启任务调度

3). 自定义定时任务类

@Scheduled(cron = "* 1 * * * ?")

1.3.2 代码开发

编写定时任务类:

进入sky-server模块中

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 {
​
    /**
     * 定时任务 每隔5秒触发一次
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void executeTask(){
        log.info("定时任务开始执行:{}",new Date());
    }
}

开启任务调度:

启动类添加注解 @EnableScheduling


@SpringBootApplication
@EnableTransactionManagement //开启注解方式的事务管理
@Slf4j
@EnableCaching
@EnableScheduling
public class SkyApplication {
    public static void main(String[] args) {
        SpringApplication.run(SkyApplication.class, args);
        log.info("server started");
    }
}

1.3.3 功能测试

启动服务,查看日志

每隔5秒执行一次。

2.订单状态定时处理

2.1 需求分析

用户下单后可能存在的情况:

  • 下单后未支付,订单一直处于“待支付”状态

  • 用户收货后管理端未点击完成按钮,订单一直处于“派送中”状态

15分钟未支付,自动取消订单。

将派送中的状态定时改为已完成状态。

具体逻辑为:

  • 通过定时任务每分钟检查一次是否存在支付超时订单(下单后超过15分钟仍未支付则判定为支付超时订单),如果存在则修改订单状态为“已取消”

  • 通过定时任务每天凌晨1点检查一次是否存在“派送中”的订单,如果存在则修改订单状态为“已完成”。

2.2 代码开发

2.2.1 Orde

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值