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

news2025/1/21 12:10:57

Spring Task

同学们可以看我这篇文章

Spring Task初学-CSDN博客

 

订单状态定时处理

新建OrderTask

/**
 * 定时任务类,定时处理订单状态
 */
@Component
@Slf4j
public class OrderTask {

    @Autowired
    private 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 content
        Map 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);

        // 校验订单是否存在,并且状态为4
        if(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));
    }

功能测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【嵌入式之RTOS】什么是消息队列

目录 一、FreeRTOS消息队列的基本概念 二、FreeRTOS消息队列的工作原理 三、FreeRTOS消息队列的特点 四、FreeRTOS消息队列的应用 五、示例 消息队列是一种用于任务间通信的机制&#xff0c;它允许一个任务&#xff08;生产者&#xff09;向消息队列发送消息&#xff0c;而…

使用uniapp+Django开发的在线工具网站

引言 在当今数字化时代&#xff0c;在线工具网站为用户提供了便捷的服务和功能&#xff0c;本文分享了我使用UniApp和Django开发的一款多平台在线工具网站。通过这个项目&#xff0c;我探索了跨平台开发与强大的后端框架结合的优势&#xff0c;实现了用户友好的界面和稳健的功…

【C++】二维数组定义方式

二维数组有四种定义方式 1、数据类型 数组名[行数 ][ 列数 ]; 2、数据类型 数组名[ 行数 ][ 列数 ]{{数据1&#xff0c;数据2}&#xff0c;{数据3&#xff0c;数据4 }}; 3、数据类型 数组名[ 行数 ][ 列数 ]{数据1&#xff0c;数据2&#xff0c;数据3&#xff…

C++ 标准库和标准模板库

参考&#xff1a; C STL 教程 | 菜鸟教程 (runoob.com) C标准库和标准模板库 - 星朝 - 博客园 (cnblogs.com) C强大的功能来源于其丰富的类库及库函数资源。C标准库的内容总共在50个标准头文件中定义。在C开发中&#xff0c;要尽可能地利用标准库完成。这样做的直接好处包括&am…

【Jenkins未授权访问漏洞 】

默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令&#xff0c;攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务&#xff0c;通过脚本执行界面从而获取服务器权限。 第一步&#xff1a;使用fofa语句搜索 搜索语句&#xff1a; port&…

NICE Seminar(2022-7-17)进化约束优化(中南大学王勇教授)

​​​​​​​ ACO偏向于离散 DE和PSO偏向于连续变量 确定性替换和随机替换 存在缺陷&#xff0c;可行域可能有多个。 Pfea为可行解所占比例 目标空间中的可行域与在决策空间的可行域中的对应关系&#xff1f;&#xff1f;&#xff1f; 维度中套维度&#xff1f;&#xff1…

苹果 Safari 的隐私保护与广告追踪问题 :技术进展与挑战

隐私保护的进展与挑战 近年来&#xff0c;浏览器行业在隐私保护技术方面取得了显著进展&#xff0c;尤其是在广告追踪领域。谷歌的 Chrome 浏览器推广了隐私沙盒&#xff0c;通过将用户可能感兴趣的主题分类并推送给广告商。Mozilla Firefox 和 Meta Facebook 则推出了一种名为…

C 语言学习(5) ---- 汇编语法基础

目录 汇编语言基础x86 体系的寄存器说明Intel 和 AT&T 语法"helloworld" 汇编程序分析指令和伪指令TBD 汇编语言基础 汇编程序基本由 4 种类型的组件组成&#xff1a;指令&#xff08;instruction&#xff09;、伪指令&#xff08;directive&#xff09;、标号&…

Python在指定文件夹下创建虚拟环境

基于不同python版本和第三方包版本开发的项目&#xff0c;为了方便学习和管理python环境&#xff0c;可以在指定的文件夹里创建项目所需的虚拟环境。具体流程如下&#xff1a; (1) 以管理员身份打开Ananconda Prompt&#xff0c;查看当前虚拟环境&#xff0c;输入命令如下&…

C#中的Modbus协议

协议介绍 关于Modbus协议&#xff1a; Modbus协议是MODICON&#xff08;莫迪康&#xff09;&#xff08;现施耐德品牌&#xff09;在1979年开发的&#xff0c;是全球第一个真正用于现场的总线协议&#xff1b;Modbus协议是应用于电子控制器上的一种通用语言。通过此协议&…

一、报名与安装软件

声明 首先声明这个考试是需要费用的&#xff0c;目前我缴纳的费用是980元 官网 报名与学习官网为&#xff1a;https://cloud.aigccert.com/web/index 选择此处&#xff0c;点击报名后按要求完善个人信息。 完善个人信息后可以开始学习视频&#xff0c;视频内容看起来多其实…

Servlet开发流程 (里面有Idea项目添加Tomcat依赖详细教程)

目标: 校验注册时&#xff0c;用户名是否被占用。通过客户端向一个Servlet发送请求&#xff0c;携带username&#xff0c;如果用户 名是zhangsan&#xff0c;则向客户端响应 NO&#xff0c;如果是其他&#xff0c;响应YES。 1.在idea中创建web工程 1右键点击父工程-New-Module …

【MySQL 01】在 Ubuntu 22.04 环境下安装 MySQL

文章目录 &#x1f308; 1. 说明&#x1f308; 2. 卸载不必要的环境&#x1f308; 3. 安装 MySQL&#x1f308; 4. 启动和关闭 MySQL 服务&#x1f308; 5. 临时登录 MySQL&#x1f308; 6. 设置 MySQL 密码&#x1f308; 7. 配置 MySQL &#x1f308; 1. 说明 在安装与卸载中…

此卷不包含可识别的文件系统‘及高效数据恢复策略

在数字信息的海洋中遨游时&#xff0c;我们偶尔会遭遇“此卷不包含可识别的文件系统”这一突如其来的警示&#xff0c;它像是一道无形的屏障&#xff0c;阻挡了我们与宝贵数据之间的直接联系。这一错误提示&#xff0c;往往意味着存储设备的文件系统结构出现了异常&#xff0c;…

嵌入式全栈开发学习笔记---数据结构概述

目录 入门级概念 什么是数据结构&#xff1f; 什么是算法&#xff1f;算法和数据结构有什么联系&#xff1f; 为什么要学习数据结构&#xff1f; 逻辑结构 线性结构&#xff08;嵌入式领域的重点&#xff09; 树形结构 图形结构 线性结构&#xff08;嵌入式领域的重点…

【书生大模型实战营(暑假场)】入门任务二 Git 关卡

入门任务二 Git 关卡 参考&#xff1a; 教程任务 1 闯关任务 1.1 使用 Git 完成破冰介绍 本任务将基于开发机实现&#xff0c;重点在于熟悉Git操作。首先要了解 Git操作的常见四部曲&#xff0c;即&#xff1a;舔 Add&#xff0c;提 Commit&#xff0c;拉 Pull&#xff0c…

架构师知识梳理(一):计算机硬件

目录 计算机硬件组成 CPU CPU的组成 CPU的功能 校验码 奇偶校验 CRC CRC计算案例 指令 指令指行过程 指令系统 指令系统分类 指令流水线技术 流水线技术相关计算公式 存储 计算机存储系统设计 高速缓存Cache 缓存的局部性原理 地址映射 替换算法 关于命中…

2024华数杯数学建模竞赛选题建议+初步分析

提示&#xff1a;DS C君认为的难度&#xff1a;C<A<B&#xff0c;开放度&#xff1a;A<B<C。 综合评价来看 A题适合对机械臂和机器人运动学感兴趣的同学&#xff0c;尤其是有一定编程和优化算法基础的同学。不建议非相关专业同学选择。 B题挑战较大&#xff0…

红黑树的概念及应用

参考文章&#xff1a;红黑树c实现 一.红黑树是什么 红黑树是一种自平衡二叉查找树&#xff0c;是计算机科学领域中的一种数据结构&#xff0c;典型的用途是实现关联数组&#xff0c;存储有序的数据。它可以在O(logn)时间内做查找&#xff0c;插入和删除&#xff0c;这里的n是树…

Docker Remote API 未授权访问漏洞

Docker Remote API 未授权访问漏洞 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的LINUX机器上&#xff0c;也可以实现虚拟化。 Docker swarm 是一个将docker集群变成单一虚拟的docker…