瀏覽代碼

1.webSocket通知

QuietShadow 3 年之前
父節點
當前提交
6a83594c44

+ 4 - 0
pom.xml

@@ -134,6 +134,10 @@
 			<artifactId>axis2-transport-http</artifactId>
 			<version>1.8.0</version>
 		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-websocket</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 10 - 10
src/main/java/com/steerinfo/auth/shiro/config/ShiroConfig.java

@@ -1,12 +1,8 @@
 package com.steerinfo.auth.shiro.config;
 
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.Filter;
-
+import com.steerinfo.auth.shiro.cache.CustomCacheManager;
+import com.steerinfo.auth.shiro.jwt.JwtStatelessAccessControlFilter;
+import com.steerinfo.auth.shiro.realm.UserModularRealmAuthenticator;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authc.pam.AllSuccessfulStrategy;
 import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
@@ -21,9 +17,11 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import com.steerinfo.auth.shiro.cache.CustomCacheManager;
-import com.steerinfo.auth.shiro.jwt.JwtStatelessAccessControlFilter;
-import com.steerinfo.auth.shiro.realm.UserModularRealmAuthenticator;
+import javax.servlet.Filter;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Shiro权限配置
@@ -175,6 +173,8 @@ public class ShiroConfig {
         filterChainDefinitionMap.put(versionBefore + "/ifmesemsswapfile/**", AUTH_ANON);
         filterChainDefinitionMap.put(versionBefore + "/ifmesemsproductorder/**", AUTH_ANON);
         filterChainDefinitionMap.put(versionBefore + "/mesemsdieseloils/**", AUTH_ANON);
+        // websocket不拦截
+        filterChainDefinitionMap.put("/websocket/**", AUTH_ANON);
     }
     
 }

+ 75 - 0
src/main/java/com/steerinfo/ems/Utils/WebSocket.java

@@ -0,0 +1,75 @@
+package com.steerinfo.ems.Utils;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RestController;
+
+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.HashMap;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * @author Shadow
+ * @create 2021-09-18 14:54
+ * @project xt-ems-api
+ */
+@ServerEndpoint("/websocket/{shopId}")
+@RestController
+@Component
+//此注解相当于设置访问URL
+public class WebSocket {
+
+    private Session session;
+
+    private static CopyOnWriteArraySet<WebSocket> webSockets =new CopyOnWriteArraySet<>();
+    private static Map<String,Session> sessionPool = new HashMap<String,Session>();
+
+    @OnOpen
+    public void onOpen(Session session, @PathParam(value="shopId")String shopId) {
+        this.session = session;
+        webSockets.add(this);
+        sessionPool.put(shopId, session);
+        System.out.println("【websocket消息】有新的连接,总数为:"+webSockets.size());
+    }
+
+    @OnClose
+    public void onClose() {
+        webSockets.remove(this);
+        System.out.println("【websocket消息】连接断开,总数为:"+webSockets.size());
+    }
+
+    @OnMessage
+    public void onMessage(String message) {
+        System.out.println("【websocket消息】收到客户端消息:"+message);
+    }
+
+    // 此为广播消息
+    public void sendAllMessage(String message) {
+        for(WebSocket webSocket : webSockets) {
+            System.out.println("【websocket消息】广播消息:"+message);
+            try {
+                webSocket.session.getAsyncRemote().sendText(message);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    // 此为单点消息
+    public void sendOneMessage(String shopId, String message) {
+        Session session = sessionPool.get(shopId);
+        if (session != null) {
+            try {
+                session.getAsyncRemote().sendText(message);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+}

+ 26 - 0
src/main/java/com/steerinfo/ems/Utils/WebSocketConfig.java

@@ -0,0 +1,26 @@
+package com.steerinfo.ems.Utils;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
+import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+/**
+ * @author Shadow
+ * @create 2021-09-18 14:49
+ * @project xt-ems-api
+ */
+@Configuration
+@EnableWebSocket
+public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
+    /**
+     * 注入ServerEndpointExporter,
+     * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
+     */
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+
+}

+ 25 - 3
src/main/java/com/steerinfo/ems/emsgmpcjh/controller/EmsGmPcJhController.java

@@ -1,13 +1,15 @@
 package com.steerinfo.ems.emsgmpcjh.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.steerinfo.auth.utils.JwtUtil;
 import com.steerinfo.ems.Utils.DateUtils;
+import com.steerinfo.ems.Utils.WebSocket;
 import com.steerinfo.ems.emsgmpcjh.mapper.EmsGmPcJhMapper;
 import com.steerinfo.ems.emsgmpcjh.model.EmsGmPcJh;
+import com.steerinfo.ems.emsgmpcjh.service.IEmsGmPcJhService;
 import com.steerinfo.framework.controller.BaseRESTfulController;
 import com.steerinfo.framework.controller.RESTfulResult;
 import com.steerinfo.framework.service.pagehelper.PageList;
-import com.steerinfo.ems.emsgmpcjh.service.IEmsGmPcJhService;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
@@ -15,8 +17,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
-import java.rmi.MarshalledObject;
-import java.util.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * EmsGmPcJh RESTful接口:
@@ -43,6 +46,8 @@ public class EmsGmPcJhController extends BaseRESTfulController {
     IEmsGmPcJhService emsGmPcJhService;
     @Autowired
     EmsGmPcJhMapper emsGmPcJhMapper;
+    @Autowired
+    private WebSocket webSocket;
 
     @ApiOperation(value="获取列表", notes="分页查询")
     @ApiImplicitParams({
@@ -170,17 +175,34 @@ public class EmsGmPcJhController extends BaseRESTfulController {
     @PutMapping(value = "/updatestate", produces  = "application/json;charset=UTF-8")
     public RESTfulResult updatestate(@RequestBody EmsGmPcJh[] models){
         String userId = JwtUtil.getUseridByToken();
+        String soketMessage="国贸订单编号";
+        boolean result = false;
         for (EmsGmPcJh model : models) {
             EmsGmPcJh emsGmPcJh = this.emsGmPcJhMapper.selectByPrimaryKey(model.getId());
             if(emsGmPcJh.getState().equals("2")) {
                 return failed(null,"操作失败,编号为"+emsGmPcJh.getId()+"已经接收");
             }
+            if(emsGmPcJh.getState().equals("0")) {
+                result = true;
+                soketMessage+=emsGmPcJh.getId()+",";
+            }
             model.setYxfWeight(new BigDecimal("0"));
             model.setKxfWeight(model.getPlanWeight());
             model.setUpdateTime(new Date());
             model.setUpdateMan(userId);
             emsGmPcJhService.updateState(model);
         }
+        if(result){
+        soketMessage += "已下发,请注意接收";
+        String[] roles = {"生产部-生产处"};
+        Map <String, Object> map = new HashMap<String,Object>();
+        map.put("role",roles);
+        map.put("title","国贸订单下发");
+        map.put("message",soketMessage);
+        map.put("tips","您好,有新的国贸计划已下发,请注意接收。");
+        soketMessage= JSON.toJSONString(map);
+            webSocket.sendAllMessage(soketMessage);
+        }
         return success();
     }
     @ApiOperation(value="获取列表", notes="分页模糊查询")

+ 6 - 1
src/main/resources/application.yml

@@ -1,2 +1,7 @@
 api:
-  version:v1
+  version:v1
+spring:
+  servlet:
+    multipart:
+      max-file-size: 10MB
+      max-request-size: 10MB

+ 9 - 9
src/main/resources/bootstrap.yml

@@ -10,15 +10,15 @@ spring:
       #默认值为0.1f,现在为了测试设置100%采集
       percentage: 1.0
   cloud:
-    config:
-      fail-fast: true
-      discovery:
-        enabled: true
-        service-id: config-server
+    #    config:
+    #      fail-fast: true
+    #      discovery:
+    #        enabled: true
+    #        service-id: config-server
     bus:
       trace:
-       enabled: true
-      enabled: true
+        enabled: false
+      enabled: false
 server:
   port: ${SERVER_PORT:8086}
   tomcat:
@@ -26,7 +26,7 @@ server:
 eureka:
   client:
     serviceUrl:
-      defaultZone: http://root:root@${EUREKA_HOST:localhost}:${EUREKA_PORT:8019}/eureka/
+      defaultZone: http://root:root@${EUREKA_HOST:172.16.90.238}:${EUREKA_PORT:8086}/eureka/
     metadata-map:
       cluster: ribbon
   instance:
@@ -43,4 +43,4 @@ management:
   endpoints:
     web:
       exposure:
-        include: '*'
+        include: '*'