找回密码
 立即注册
查看: 54|回复: 0

WebSocket来单提醒和客户催单

[复制链接]

153

主题

5

精华

157

金币

技术维护QQ:515138

积分
339
发表于 2025-12-30 08:53:27 | 显示全部楼层 |阅读模式
WebSocket来单提醒和客户催单
import com.alibaba.fastjson.JSON;
  1. @Autowired
  2.     private WebSocketServer webSocketServer;
  3.         /**
  4.      * 支付成功,修改订单状态
  5.      *
  6.      * @param outTradeNo
  7.      */
  8.     public void paySuccess(String outTradeNo) {
  9.         // 当前登录用户id
  10.         Long userId = BaseContext.getCurrentId();
  11.         // 根据订单号查询当前用户的订单
  12.         Orders ordersDB = orderMapper.getByNumberAndUserId(outTradeNo, userId);
  13.         // 根据订单id更新订单的状态、支付方式、支付状态、结账时间
  14.         Orders orders = Orders.builder()
  15.                 .id(ordersDB.getId())
  16.                 .status(Orders.TO_BE_CONFIRMED)
  17.                 .payStatus(Orders.PAID)
  18.                 .checkoutTime(LocalDateTime.now())
  19.                 .build();
  20.         orderMapper.update(orders);
  21.                 //////////////////////////////////////////////
  22.         Map map = new HashMap();
  23.         map.put("type", 1);//消息类型,1表示来单提醒
  24.         map.put("orderId", orders.getId());
  25.         map.put("content", "订单号:" + outTradeNo);
  26.         //通过WebSocket实现来单提醒,向客户端浏览器推送消息
  27.         webSocketServer.sendToAllClient(JSON.toJSONString(map));
  28.         ///////////////////////////////////////////////////
  29.     }
复制代码

WebSocket服务
  1. package com.zidiu.websocket;
  2. import jakarta.websocket.server.ServerEndpoint;
  3. import org.springframework.stereotype.Component;
  4. import jakarta.websocket.OnClose;
  5. import jakarta.websocket.OnMessage;
  6. import jakarta.websocket.OnOpen;
  7. import jakarta.websocket.Session;
  8. import jakarta.websocket.server.PathParam;
  9. import java.util.Collection;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. /**
  13. * WebSocket服务
  14. */
  15. @Component
  16. @ServerEndpoint("/ws/{sid}")
  17. public class WebSocketServer {
  18.     //存放会话对象
  19.     private static Map<String, Session> sessionMap = new HashMap();
  20.     /**
  21.      * 连接建立成功调用的方法
  22.      */
  23.     @OnOpen
  24.     public void onOpen(Session session, @PathParam("sid") String sid) {
  25.         System.out.println("客户端:" + sid + "建立连接");
  26.         sessionMap.put(sid, session);
  27.     }
  28.     /**
  29.      * 收到客户端消息后调用的方法
  30.      *
  31.      * @param message 客户端发送过来的消息
  32.      */
  33.     @OnMessage
  34.     public void onMessage(String message, @PathParam("sid") String sid) {
  35.         System.out.println("收到来自客户端:" + sid + "的信息:" + message);
  36.     }
  37.     /**
  38.      * 连接关闭调用的方法
  39.      *
  40.      * @param sid
  41.      */
  42.     @OnClose
  43.     public void onClose(@PathParam("sid") String sid) {
  44.         System.out.println("连接断开:" + sid);
  45.         sessionMap.remove(sid);
  46.     }
  47.     /**
  48.      * 群发
  49.      *
  50.      * @param message
  51.      */
  52.     public void sendToAllClient(String message) {
  53.         Collection<Session> sessions = sessionMap.values();
  54.         for (Session session : sessions) {
  55.             try {
  56.                 //服务器向客户端发送消息
  57.                 session.getBasicRemote().sendText(message);
  58.             } catch (Exception e) {
  59.                 e.printStackTrace();
  60.             }
  61.         }
  62.     }
  63. }
复制代码
客户催单

  1. /**
  2.      * 用户催单
  3.      *
  4.      * @param id
  5.      * @return
  6.      */
  7.     @GetMapping("/reminder/{id}")
  8.     @ApiOperation("用户催单")
  9.     public Result reminder(@PathVariable("id") Long id) {
  10.         orderService.reminder(id);
  11.         return Result.success();
  12.     }
复制代码
  1. /**
  2.      * 用户催单
  3.      * @param id
  4.      */
  5.     void reminder(Long id);
复制代码
  1. /**
  2.      * 用户催单
  3.      *
  4.      * @param id
  5.      */
  6.     public void reminder(Long id) {
  7.         // 查询订单是否存在
  8.         Orders orders = orderMapper.getById(id);
  9.         if (orders == null) {
  10.             throw new OrderBusinessException(MessageConstant.ORDER_NOT_FOUND);
  11.         }
  12.         //基于WebSocket实现催单
  13.         Map map = new HashMap();
  14.         map.put("type", 2);//2代表用户催单
  15.         map.put("orderId", id);
  16.         map.put("content", "订单号:" + orders.getNumber());
  17.         webSocketServer.sendToAllClient(JSON.toJSONString(map));
  18.     }
复制代码
  1. /**
  2.      * 根据id查询订单
  3.      * @param id
  4.      */
  5.     @Select("select * from orders where id=#{id}")
  6.     Orders getById(Long id);
复制代码





上一篇:内网穿透cpolar软件
下一篇:Apache ECharts数据可视化图表库
网站建设,公众号小程序开发,系统定制,软件App开发,技术维护【联系我们】手机/微信:17817817816 QQ:515138

QQ|Archiver|自丢网 ( 粤ICP备2024252464号-1 )

GMT+8, 2026-1-13 16:11

专注于网站建设,公众号小程序制作,商城小程序,系统定制,软件App开发

【联系我们】手机/微信:17817817816 QQ:515138

快速回复 返回顶部 返回列表