当前位置: 首页 > news >正文

苍穹外卖day10

苍穹外卖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.mrgr.cn/news/2180.html

相关文章:

  • JS获取当前浏览器名称
  • SQL触发器的级联魔力:数据完整性的守护者
  • 使用Seaborn绘制热力图
  • 18705 01背包问题
  • 注意!2024年下半年软考报名已开始
  • 机器学习之 K 近邻算法图像识别实战
  • CUDA-MODE课程笔记 第7课: Quantization Cuda vs Triton
  • 嵌入式软件--PCB DAY 1
  • python爬虫爬取某图书网页实例
  • ollama使用llama3.1案例
  • 鸿蒙(API 12 Beta3版)【DRM会话管理(ArkTS)】数字版权保护
  • C#全国增值税发票真伪查验-发票验真API-票据ocr
  • 双亲委派机制的优势与劣势
  • 入门 - vue中v-model的实现原理和完整用法详解
  • 4-1-3 arduino驱动直流电机(电机专项教程)
  • Linux之进程间通信(下)
  • 每日一问:深入理解JVM——结构与类的加载过程解析
  • 面了一个测试工程师要求月薪26K,总感觉他背了很多面试题...
  • 【Python】 Scrapy 爬虫:如何设置深度优先与广度优先采集策略
  • Git提交时emoji的使用