苍穹外卖day10

news2024/9/22 12:44:40

苍穹外卖day10

  • Spring Task
  • 订单状态定时处理
  • WebSocket
    • 应用(弹幕,网页聊天,体育实况更新,股票基金实时更新)
  • 来单题型
    • 代码实现
    • 需求分析
  • 客户催单

Spring Task

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

链接: 在线生成器

在线生成器
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

订单状态定时处理

每分钟检查一下,是否有订单超过十五分钟,如果有的话就取消

	@Scheduled(cron = "0 * * * * ?  ")
    public void processTimeoutOrder(){
        log.info("定时处理超时订单:{}", LocalDateTime.now());


        LocalDateTime localDateTime = LocalDateTime.now().plusMinutes(-15);
        //查询超时的订单 待付款
        List<Orders> list = orderMapper.getByStatusAndOrderTime(Orders.PENDING_PAYMENT,localDateTime);

        if(list != null && list.size() > 0){
            for(Orders orders : list){
                orders.setStatus(Orders.CANCELLED);
                orders.setCancelReason("订单超时,自动取消");
                orders.setCancelTime(LocalDateTime.now());
            }

        }

    }
@Select("select * from orders where status status = #{status} and order_time<#{orderTime}")
    List<Orders> getByStatusAndOrderTime(Integer status,LocalDateTime orderTime);
//处理一直在派送的订单
    @Scheduled(cron = "0 0 1 * * ?")
    public void processDeliverOrder(){
        log.info("定时处理派送中的订单L{}",LocalDateTime.now());

        LocalDateTime localDateTime = LocalDateTime.now().plusMinutes(-60);
        List<Orders> list = orderMapper.getByStatusAndOrderTime(Orders.DELIVERY_IN_PROGRESS,localDateTime);
        if(list != null && list.size() > 0){
            for(Orders orders : list){
                orders.setStatus(Orders.COMPLETED);
                orderMapper.update(orders);
            }

        }



    }

WebSocket

http是短链接,使用请求到回复的那一小段时间是连接的

在这里插入图片描述

应用(弹幕,网页聊天,体育实况更新,股票基金实时更新)

来单题型

在这里插入图片描述
需要WebSocket保持长连接
支付成功之后,调用WebSocket的相关API实现服务端向客户端推送消息
约定服务端发送给客户端浏览器的数据格式为JSON

代码实现

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向客户端浏览器推送消息
        Map map = new HashMap();
        map.put("type",1);//表示1来单提醒 2客户催单
        map.put("orderId",ordersDB.getId());
        map.put("content","订单号:"+outTradeNo);
        String jsonString = JSON.toJSONString(map);
        webSocketServer.sendToAllClient(jsonString);
    }

使用webSocketServer的函数进行websocket的消息传输

public void sendToAllClient(String message) {
        Collection<Session> sessions = sessionMap.values();
        for (Session session : sessions) {
            try {
                //服务器向客户端发送消息
                session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

使用session去推送数据

需求分析

客户催单

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

木舟0基础学习Java的第二十五天(JavaWeb)

XML 概念和体系 XML指可扩展标记语言&#xff08;EXtensible Markup Language&#xff09; XML没有预定义标签 需要自定义标签 <标签></标签> XML特点 XML数据以纯文本格式存储 实现不同应用程序之间的数据通信 实现不同平台的数据通信 实现不同平台的数据共…

Linux------Cortex-A架构的处理器运行模型与其寄存器组

寄存器组分为 外设寄存器组 比如&#xff1a;和总线相连的io寄存器&#xff0c;usart配置寄存器&#xff0c;spi配置寄存器等等 内核寄存器组&#xff1a;R0-R15 CPSR SPSR一共18个寄存器组&#xff0c;内核寄存器组用来记录当前程序地址状态&#xff0c;当前执行指令等&a…

8月来得及|1000/660/880题45天带刷计划!

刷题不在于多&#xff0c;而在于精 你选的这几本题集没有问题&#xff0c;660题专门训练客观题&#xff0c;880题和1000题都是不错的综合性题集&#xff0c;特别适合在强化阶段进行刷题训练&#xff0c;但是问题是你做这么多题&#xff0c;也不一定能起到多好的作用。 刷题的…

Linux | 进程概念详解:冯诺依曼体系结构、进程基本概念、PCB、进程组织、fork()创建子进程、进程运行逻辑

文章目录 进程概念1、冯诺依曼体系结构2、进程2.1基本概念2.2描述进程-PCB2.3组织进程2.4查看进程2.5通过系统调用获取进程标识符2.6通过系统调用创建进程-fork初识头文件与返回值fork函数的调用逻辑和底层逻辑 进程概念 1、冯诺依曼体系结构 目前我们认识的计算机中&#xff…

dm 到 dm 的 HS 同步部署

一、数据库部署 完成两节点数据库部署并初始化&#xff0c;配置参数如下&#xff1a; 节点 192.168.2.132 192.168.2.133 数据库版本 DM8 DM8 实例名 DM1 DM2 端口号 5236 5236 数据文件路径 /home/dmdba/dmdata /home/dmdba/dmdata 二、 dmhs 部署 1. 部署…

户外无线麦克风哪个牌子好,领夹麦克风十大品牌排行榜推荐

​为了在数字时代的浪潮中有效传达自己的思想和感情&#xff0c;选择合适的声音工具变得尤为重要。无线领夹麦克风就是这样一种工具&#xff0c;它能够帮助我们在任何环境下都保持最佳的语音传递效果。经过慎重考虑和市场调研&#xff0c;我为大家推荐几款性能卓越且价格合理的…

测试报告----功能测试

目录 一、项目背景 二、项目功能 &#xff08;1&#xff09;页面1&#xff1a;用户注册 &#xff08;2&#xff09;页面2&#xff1a;登陆页面 &#xff08;3&#xff09;页面3&#xff1a;信息主页 &#xff08;4&#xff09;页面4&#xff1a;详情页面 ​编辑&#xf…

获取当前路由器的外网IP(WAN IP)

GPT-4o (OpenAI) 获取当前路由器的外网IP&#xff08;WAN IP&#xff09;可以通过以下几种方法&#xff1a; 1. 访问路由器管理页面&#xff1a; - 通常路由器的管理页面可以通过在浏览器中输入路由器的IP地址来访问&#xff08;例如&#xff0c;192.168.0.1 或 192.168.1…

接口基础知识9:详解response body(响应体)

课程大纲 一、定义 HTTP响应体&#xff08;HTTP Response Body&#xff09;&#xff1a;服务器返回给客户端的数据部分&#xff0c;‌它包含了服务器对客户端请求的响应内容&#xff08;如客户端请求的资源、客户端请求的执行结果&#xff09;。 与请求类似&#xff0c;HTTP …

使用python实现3D聚类图

实验记录&#xff0c;在做XX得分预测的实验中&#xff0c;做了一个基于Python的3D聚类图&#xff0c;水平有限&#xff0c;仅供参考。 一、以实现三个类别聚类为例 代码&#xff1a; import pandas as pd import numpy as np from sklearn.decomposition import PCA from sk…

【Prometheus】监控系统

目录 一.Prometheus概述 1.Prometheus的认识与了解 2.Prometheus的特点 3.Prometheus存储引擎 TSDB 的特点优势 4.Prometheus 的生态组件 Prometheus server Client Library Exporters Service Discovery Alertmanager Pushgateway Grafana 5.Prometheus 的…

二叉树(四)

一、二叉树的性质 二、练习 1.某二叉树共有399个节点&#xff0c;其中有199个度为2的节点&#xff0c;则二叉树中的叶子节点数为&#xff08; &#xff09;。 A.不存在这样的树 B.200 C.198 D.199 答案&#xff1a;B 参考二叉树的性质第三条 2.在具有2…

如何将系统/数据/程序从一个硬盘驱动器迁移到另一个硬盘驱动器

何时需要硬盘迁移软件 大多数时候&#xff0c;计算机用户考虑迁移硬盘的原因是&#xff1a; 旧硬盘太小&#xff0c;无法存储不断增加的数据&#xff0c;您需要将这些数据转移到更大的硬盘上。 您购买了比当前硬盘更大更快的新硬盘&#xff0c;并且想要将程序和数据移动到新硬…

数据库分库分表的介绍

为什么要分库分表 把存于一个库的数据分散到多个库中&#xff0c;把存于一个表的数据分散到多个表中。如果说读写分离是为了分散数据库读写操作压力&#xff0c;分库分表就是为了分散存储压力&#xff0c;一般情况下&#xff0c;单表数据量到达千万级别&#xff0c;就可以考虑…

怎么才能真正学好网络安全?一文搞懂网络安全体系

文章目录 前言 网络安全研发具体干什么&#xff1f;二进制安全具体干什么&#xff1f;网络渗透具体干什么&#xff1f;网络渗透方向的工作有下面几个方向&#xff1a;网络安全的学习路线网络安全的学习路线大纲网络安全初体验学习方法 如何入门学习网络安全【黑客】 【----帮助…

suricata编译安装和运行

目录 编译安装 运行 调试 编译安装 apt -y install autoconf automake build-essential cargo \ libjansson-dev libpcap-dev libpcre2-dev libtool \ libyaml-dev make pkg-config rustc zlib1g-dev apt-get install libpcre3-dev wget https://www.openin…

Python编码系列—Python数据可视化:Matplotlib与Seaborn的实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

google浏览器chrome用户数据(拓展程序,书签等)丢失问题

一、问题背景 我出现这个情况的问题背景是&#xff1a;因为C盘块满了想清理一部分空间&#xff08;具体看这&#xff1a;windows -- C盘清理_c盘softwaredistribution-CSDN博客&#xff09;&#xff0c;于是找到了更改AppDatta这个方法&#xff0c;但因为&#xff0c;当时做迁移…

ZooKeeper 的四种 Znode (数据节点)类型

ZooKeeper 的四种 Znode &#xff08;数据节点&#xff09;类型 1. PERSISTENT&#xff08;持久节点&#xff09;2. EPHEMERAL&#xff08;临时节点&#xff09;3. PERSISTENT_SEQUENTIAL&#xff08;持久顺序节点&#xff09;4. EPHEMERAL_SEQUENTIAL&#xff08;临时顺序节点…

Zookeeper 如何保证事务的顺序一致性

Zookeeper 如何保证事务的顺序一致性 1、ZXID&#xff1a;唯一事务标识2、两阶段提交协议3、同步与复制 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Apache ZooKeeper 通过几个关键机制来确保事务的顺序一致性&#xff0c;这些机制包括全…