苍穹外卖day10

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去推送数据

需求分析

客户催单

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值