|
1前台实现
- connect:function() {
- var webSocketIP = window.CRM_CONFIG.WebSocketIP;
- var target = 'ws://'+webSocketIP+'/websocket';
- if ('WebSocket' in window) {
- ws = new WebSocket(target);
- } else if ('MozWebSocket' in window) {
- ws = new MozWebSocket(target);
- } else {
- return;
- }
- ws.onopen = function () {
- console.log('Info: WebSocket connection opened.');
- document.getElementById("wsMsg").style.display = "block";
- };
- var self = this;
- ws.onmessage = function (event) {
- if('您有如下工单需要及时处理:'!= event.data) {
- self.setState({wsMessage: event.data})
- document.getElementById("wsMsg").style.display = "block";
- }else{
- document.getElementById("wsMsg").style.display = "none";
- }
- };
- <div id="wsMsg" className="msgDialog msgDiv">
- <div className="msgContent" ><a onClick ={this.closeMsg}> X </a></div>
- {this.state.wsMessage}
- </div>
复制代码 2、pom.xml依赖
- <!--spring-websocket-->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-websocket</artifactId>
- <version>${spring.version}</version>
- </dependency>
复制代码 3、spring.xml配置
- <!--websocket 配置-->
- <bean id="websocket" class="com.oasis.crm.controller.websocket.WebsocketEndPoint"/>
- <websocket:handlers allowed-origins="*">
- <websocket:mapping path="/websocket" handler="websocket"/>
- <websocket:handshake-interceptors>
- <bean class="com.oasis.crm.controller.websocket.HandshakeInterceptor"/>
- </websocket:handshake-interceptors>
- </websocket:handlers>
复制代码 4、java代码
- package com.oasis.crm.controller.websocket;
- import com.oasis.crm.dao.biz.user.UserDao;
- import com.oasis.crm.model.biz.user.User;
- import com.oasis.crm.service.biz.order.AcceptedWorkOrderService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.socket.CloseStatus;
- import org.springframework.web.socket.TextMessage;
- import org.springframework.web.socket.WebSocketSession;
- import org.springframework.web.socket.handler.TextWebSocketHandler;
- import java.util.Timer;
- import java.util.TimerTask;
- /**
- * 推送即将要处理完成的受理单给处理人
- */
- @RequestMapping("/websocket")
- public class WebsocketEndPoint extends TextWebSocketHandler {
- @Autowired
- private AcceptedWorkOrderService acceptedWorkOrderService;
- @Autowired
- private UserDao userDao;
- private Timer timer;
- @Override
- protected void handleTextMessage(WebSocketSession session,
- TextMessage message) throws Exception {
- if(!session.isOpen()){
- timer.cancel();
- return;
- }
- super.handleTextMessage(session, message);
- session.sendMessage(message);
- }
- @Override
- public void afterConnectionEstablished(WebSocketSession session) throws Exception {
- String loginUserName = session.getPrincipal().getName();
- User user = userDao.findUserByLoginName(loginUserName);
- timer = new Timer(true);
- long delay = 0;
- OrderTimeTask orderTimeTask = new OrderTimeTask(user,session);
- timer.schedule(orderTimeTask,delay, 60000);// 设定指定的时间time,此处为1分钟
- }
- class OrderTimeTask extends TimerTask{
- private User user;
- private WebSocketSession session;
- public OrderTimeTask(User user,WebSocketSession session){
- this.user = user;
- this.session = session;
- }
- @Override
- public void run() {
- try {
- String reminder = acceptedWorkOrderService.getLastReminderOrder(user.getId());
- TextMessage textMessage = new TextMessage(reminder);
- handleMessage(session,textMessage);
- } catch (Exception e){
- e.printStackTrace();
- }
- }
- }
- @Override
- public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
- System.out.println("Connection Closed!");
- }
- }
复制代码- package com.oasis.crm.controller.websocket;
- import org.springframework.http.server.ServerHttpRequest;
- import org.springframework.http.server.ServerHttpResponse;
- import org.springframework.web.socket.WebSocketHandler;
- import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
- import java.util.Map;
- public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
-
- @Override
- public boolean beforeHandshake(ServerHttpRequest request,
- ServerHttpResponse response, WebSocketHandler wsHandler,
- Map<String, Object> attributes) throws Exception {
- return super.beforeHandshake(request, response, wsHandler, attributes);
- }
- @Override
- public void afterHandshake(ServerHttpRequest request,
- ServerHttpResponse response, WebSocketHandler wsHandler,
- Exception ex) {
- super.afterHandshake(request, response, wsHandler, ex);
- }
- }
复制代码 或者前台拉定时取消息
- setInterval(()=> {
- this.getReminders();
- }, 300000);
- getReminders(){
- $.getJSON(Remote.acceptedWorkOrder.reminderOrders,packVo=>{
- this.setState({
- wsMessage:packVo.vo
- });
- });
- if('您有如下工单需要及时处理:'!= this.state.wsMessage&&''!=this.state.wsMessage){
- document.getElementById("wsMsg").style.display = "block";
- }else{
- document.getElementById("wsMsg").style.display = "none";
- }
- }
复制代码 原始地址:
|
|