立聪堂德州十三局店 发表于 2025-3-8 12:30:07

WebSocket

maven

                <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
      </dependency>
配置类

package com.sky.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
* WebSocket配置类,用于注册WebSocket的Bean
*/
@Configuration
public class WebSocketConfiguration {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
      return new ServerEndpointExporter();
    }

}

WebSocketServer

package com.sky.websocket;

import org.springframework.stereotype.Component;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
* WebSocket服务
*/
@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {

    //存放会话对象
    private static Map<String, Session> sessionMap = new HashMap();

    /**
   * 连接建立成功调用的方法
   */
    @OnOpen
    public void onOpen(Session session, @PathParam("sid") String sid) {
      System.out.println("客户端:" + sid + "建立连接");
      sessionMap.put(sid, session);
    }

    /**
   * 收到客户端消息后调用的方法
   *
   * @param message 客户端发送过来的消息
   */
    @OnMessage
    public void onMessage(String message, @PathParam("sid") String sid) {
      System.out.println("收到来自客户端:" + sid + "的信息:" + message);
    }

    /**
   * 连接关闭调用的方法
   *
   * @param sid
   */
    @OnClose
    public void onClose(@PathParam("sid") String sid) {
      System.out.println("连接断开:" + sid);
      sessionMap.remove(sid);
    }

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

}
来单提醒

用户下单乐成后,需要第一时间通知外卖商家,通知有两种:语音弹幕 弹出提示框
消息分为两种:来单提醒 和 客户催单
在paysuccess后面加
//通过websocket向客户端推送数据type orderIdcontent
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);
客户催单

Controller层
/*
\* 客户催单
\* */
@GetMapping("/reminder/{id}")
@ApiOperation("客户催单")
public Result reminder(@PathVariable("id") Long id){
       orderService.reminder(id);
return Result.success();
}
service层
/*

\* 客户催单

\* */
@Override
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);//1表示来单提醒2表示客户催单
map.put("orderId",id);
map.put("content","订单号: "+ordersDB.getId());
//调用webSocket向客户端浏览器发送消息
webSocketServer.sendToAllClient(JSON.toJSONString(map));

}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: WebSocket