From dfb8e7111399231421ffa13b3c060de2283df5e1 Mon Sep 17 00:00:00 2001
From: jiazx0107@163.com <jiazx0107@163.com>
Date: 星期三, 25 十月 2023 11:56:49 +0800
Subject: [PATCH] 四川省网关接口相关3

---
 src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDevice.java    |  107 +++++++++++++
 src/main/java/com/fzzy/gateway/sc2023/data/GrainData.java               |   37 ++++
 src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java     |   32 +++
 src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacket.java         |   23 ++
 src/main/java/com/fzzy/gateway/sc2023/api/GatewaySyncService.java       |   62 +++++++
 src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacketHeader.java   |   20 ++
 src/main/java/com/fzzy/gateway/sc2023/data/WeightInfo.java              |   24 +++
 src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDeviceLed.java |  107 +++++++++++++
 src/main/java/com/fzzy/gateway/sc2023/data/LprData.java                 |   17 ++
 src/main/java/com/fzzy/gateway/entity/GatewayDevice.java                |    9 
 src/main/java/com/fzzy/gateway/sc2023/data/IdCardData.java              |   17 ++
 src/main/java/com/fzzy/gateway/sc2023/data/SyncReqData.java             |   16 ++
 12 files changed, 464 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java
index 77966f4..9497a15 100644
--- a/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java
+++ b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java
@@ -23,11 +23,16 @@
     @PropertyDef(label = "绯荤粺ID")
     private String id;
 
-    @Column(name = "DeVICE_ID_", length = 100)
+
+    @Column(name = "DEVICE_SN_", length = 50)
+    @PropertyDef(label = "璁惧搴忓垪鍙�")
+    private String deviceSn;
+
+    @Column(name = "DEVICE_ID_", length = 100)
     @PropertyDef(label = "璁惧ID")
     private String deviceId;
 
-    @Column(name = "DeVICE_NAME_", length = 50)
+    @Column(name = "DEVICE_NAME_", length = 50)
     @PropertyDef(label = "鍚嶇О")
     private String deviceName;
 
diff --git a/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java b/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java
index b438d6a..c82bb05 100644
--- a/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java
+++ b/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java
@@ -12,15 +12,26 @@
 @Component
 public class GatewayRemoteManager implements ApplicationContextAware {
 
-    public static Map<String, GatewayRemoteService> remoteMap1 = new HashMap<>();
+    public static Map<String, GatewayRemoteService> remoteMap = new HashMap<>();
+
+    public static Map<String, GatewaySyncService> syncMap = new HashMap<>();
 
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
-        Map<String, GatewayRemoteService> serviceMap = applicationContext.getBeansOfType(GatewayRemoteService.class);
+        Map<String, GatewayRemoteService> serviceMap1 = applicationContext.getBeansOfType(GatewayRemoteService.class);
 
-        for (String key : serviceMap.keySet()) {
-            remoteMap1.put(serviceMap.get(key).getProtocol(), serviceMap.get(key));
+        for (String key : serviceMap1.keySet()) {
+            remoteMap.put(serviceMap1.get(key).getProtocol(), serviceMap1.get(key));
         }
+
+
+        Map<String, GatewaySyncService> serviceMap2 = applicationContext.getBeansOfType(GatewaySyncService.class);
+
+        for (String key : serviceMap2.keySet()) {
+            syncMap.put(serviceMap2.get(key).getProtocol(), serviceMap2.get(key));
+        }
+
+
     }
 
 
@@ -31,7 +42,18 @@
      * @return
      */
     public GatewayRemoteService getRemoteService(String protocol) {
-        return remoteMap1.get(protocol);
+        return remoteMap.get(protocol);
+    }
+
+
+    /**
+     * 鏍规嵁瀹炵幇鍗忚鑾峰彇褰撳墠瀹炵幇鏂规硶
+     *
+     * @param protocol
+     * @return
+     */
+    public GatewaySyncService getSyncService(String protocol) {
+        return syncMap.get(protocol);
     }
 
 }
diff --git a/src/main/java/com/fzzy/gateway/sc2023/api/GatewaySyncService.java b/src/main/java/com/fzzy/gateway/sc2023/api/GatewaySyncService.java
new file mode 100644
index 0000000..1fae9d7
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/api/GatewaySyncService.java
@@ -0,0 +1,62 @@
+package com.fzzy.gateway.sc2023.api;
+
+
+import com.fzzy.gateway.sc2023.data.*;
+
+/**
+ * 缃戝叧璁惧鍚屾鎺ュ彛锛屾牴鎹笟鍔¢渶姹傚畾涔夋帴鍙�
+ */
+public interface GatewaySyncService {
+
+    /**
+     * 鍗忚瀹氫箟
+     *
+     * @return
+     */
+    String getProtocol();
+
+
+    /**
+     * 鍚屾鍦扮淇℃伅
+     *
+     * @return
+     */
+    public WeightInfo syncWeightInfo(SyncReqData reqData);
+
+
+    /**
+     * 杞︾墝璇嗗埆鑾峰彇
+     *
+     * @return
+     */
+    public LprData syncLpr(SyncReqData reqData);
+
+
+    /**
+     * 韬唤璇佽鍗″櫒
+     *
+     * @return
+     */
+    public IdCardData syncIdCard(SyncReqData reqData);
+
+
+    /**
+     * 鎺ㄩ�佹姤鏂囩粰LED
+     * <p>
+     *  TODO>>>>>褰撳墠鎺ュ彛鏂囨。鐪嬩笉鎳�
+     *
+     * @return
+     */
+    public String push2Led(SyncReqData reqData);
+
+
+    /**
+     * 鍚屾绮儏淇℃伅
+     *
+     * @param reqData
+     * @return
+     */
+    public GrainData syncGrain(SyncReqData reqData);
+
+
+}
diff --git a/src/main/java/com/fzzy/gateway/sc2023/data/GrainData.java b/src/main/java/com/fzzy/gateway/sc2023/data/GrainData.java
new file mode 100644
index 0000000..7c76db4
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/data/GrainData.java
@@ -0,0 +1,37 @@
+package com.fzzy.gateway.sc2023.data;
+
+import lombok.Data;
+
+/**
+ * 绮儏淇℃伅
+ */
+@Data
+public class GrainData {
+
+    private String messageId;
+
+    private String deviceId;
+
+    private String avgTemperature;
+
+    private String minTemperature;
+
+    private String maxTemperature;
+
+    private String collectTime;
+
+    private String minX;
+
+    private String minY;
+
+    private String minZ;
+
+    private String maxX;
+
+    private String maxY;
+
+    private String maxZ;
+
+    private String apISource = "apiTemperature";
+
+}
diff --git a/src/main/java/com/fzzy/gateway/sc2023/data/IdCardData.java b/src/main/java/com/fzzy/gateway/sc2023/data/IdCardData.java
new file mode 100644
index 0000000..0b91c22
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/data/IdCardData.java
@@ -0,0 +1,17 @@
+package com.fzzy.gateway.sc2023.data;
+
+import lombok.Data;
+
+/**
+ * 韬唤璇佷俊鎭�
+ */
+@Data
+public class IdCardData {
+
+    private String dentityCard;//璇诲彇鍒扮殑韬唤璇佸彿,杩涜瀵圭О鍔犲瘑
+
+    private String userName;//鐢ㄦ埛濮撳悕
+
+    private String address;//鍦板潃
+
+}
diff --git a/src/main/java/com/fzzy/gateway/sc2023/data/LprData.java b/src/main/java/com/fzzy/gateway/sc2023/data/LprData.java
new file mode 100644
index 0000000..2ac12ef
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/data/LprData.java
@@ -0,0 +1,17 @@
+package com.fzzy.gateway.sc2023.data;
+
+import lombok.Data;
+
+/**
+ * 杞︾墝璇嗗埆缁撴灉
+ */
+@Data
+public class LprData {
+
+    private String deviceId;
+
+    private String carNumber;
+
+    private String position = "big";
+
+}
diff --git a/src/main/java/com/fzzy/gateway/sc2023/data/SyncReqData.java b/src/main/java/com/fzzy/gateway/sc2023/data/SyncReqData.java
new file mode 100644
index 0000000..b1cc1e1
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/data/SyncReqData.java
@@ -0,0 +1,16 @@
+package com.fzzy.gateway.sc2023.data;
+
+public class SyncReqData {
+
+    private String productId;
+
+    private String deviceId;
+
+    private String messageType;
+
+    private String messageId;
+
+    private String functionId;
+
+    private String jsonData;
+}
diff --git a/src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacket.java b/src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacket.java
new file mode 100644
index 0000000..1b0d7c0
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacket.java
@@ -0,0 +1,23 @@
+package com.fzzy.gateway.sc2023.data;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.Data;
+
+@Data
+public class WebSocketPacket {
+
+
+    private WebSocketPacketHeader headers;
+
+    private String messageType;
+
+    private String messageId;
+
+    private String functionId;
+
+    private String deviceId;
+
+    private JSONObject properties;
+
+    private long timestamp;
+}
diff --git a/src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacketHeader.java b/src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacketHeader.java
new file mode 100644
index 0000000..57ee7d4
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacketHeader.java
@@ -0,0 +1,20 @@
+package com.fzzy.gateway.sc2023.data;
+
+import lombok.Data;
+
+@Data
+public class WebSocketPacketHeader {
+
+
+    private String productId;
+
+    private String keepOnlineTimeoutSeconds;
+
+    private String keepOnline;
+
+    private String deviceName;
+
+    private String orgId;
+
+
+}
diff --git a/src/main/java/com/fzzy/gateway/sc2023/data/WeightInfo.java b/src/main/java/com/fzzy/gateway/sc2023/data/WeightInfo.java
new file mode 100644
index 0000000..5544c23
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/data/WeightInfo.java
@@ -0,0 +1,24 @@
+package com.fzzy.gateway.sc2023.data;
+
+import lombok.Data;
+
+/**
+ * 绉伴噸淇℃伅杩斿洖
+ */
+@Data
+public class WeightInfo {
+
+
+    private String deviceId;
+    
+    private boolean exceed;
+
+    private Double grossWeight;
+
+    private Double netWeight;
+
+    private Double tareWeight = 0.0;
+
+    private String weightUnit = "KG";
+
+}
diff --git a/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDevice.java b/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDevice.java
new file mode 100644
index 0000000..79f37a2
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDevice.java
@@ -0,0 +1,107 @@
+package com.fzzy.gateway.sc2023.websocket;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fzzy.gateway.sc2023.data.WebSocketPacket;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+@ServerEndpoint(value = "/device/${productId}/${deviceId}/message/property/report")
+public class WebSocketDevice {
+
+    private static Map<String, Session> sessionPool = new ConcurrentHashMap<>();
+    private static Map<String, String> sessionIds = new ConcurrentHashMap<>();
+
+    // 涓庢煇涓鎴风鐨勮繛鎺ヤ細璇濓紝闇�瑕侀�氳繃瀹冩潵缁欏鎴风鍙戦�佹暟鎹�
+    private Session session;
+
+
+    @OnOpen
+    public void onOpen(Session session,
+                       @PathParam("productId") String productId,
+                       @PathParam("deviceId") String deviceId,
+                       @PathParam("clientId") String clientId
+    ) throws Exception {
+
+        this.session = session;
+
+        String key = productId + "-" + deviceId;
+
+        sessionPool.put(key, session);
+        sessionIds.put(session.getId(), key);
+
+        log.info("new webSocket,clientId={}", key);
+    }
+
+    @OnClose
+    public void onClose() {
+
+        String key = sessionIds.get(session.getId());
+
+        sessionPool.remove(key);
+        sessionIds.remove(session.getId());
+
+        log.info("WebSocket杩炴帴鍏抽棴={}", key);
+
+
+    }
+
+    /**
+     * 鏀跺埌鍓嶇鍙戦�佺殑淇℃伅
+     *
+     * @param message
+     * @param session
+     */
+    @OnMessage
+    public void onMessage(String message, Session session) {
+
+        log.info("鏉ヨ嚜瀹㈡埛绔俊鎭�:\n" + message);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("鍙戠敓閿欒");
+
+        String key = sessionIds.get(session.getId());
+
+        sessionPool.remove(key);
+        sessionIds.remove(session.getId());
+        error.printStackTrace();
+    }
+
+
+    /**
+     * @param packet
+     */
+    public static void sendByPacket(WebSocketPacket packet) {
+        if (StringUtils.isEmpty(packet.getDeviceId())) {
+            log.error("WebSocket淇℃伅鎺ㄩ�佸け璐ワ紝璁惧缂栫爜涓虹┖銆�");
+            return;
+        }
+
+        String tag = packet.getDeviceId();
+
+        // 閬嶅巻鎺ㄩ��
+        Session session;
+        for (String key : sessionPool.keySet()) {
+            if (key.indexOf(tag) != -1) {
+                session = sessionPool.get(key);
+                session.getAsyncRemote().sendText(
+                        JSONObject.toJSONString(packet));
+            }
+        }
+    }
+
+
+}
diff --git a/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDeviceLed.java b/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDeviceLed.java
new file mode 100644
index 0000000..e0eac23
--- /dev/null
+++ b/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDeviceLed.java
@@ -0,0 +1,107 @@
+package com.fzzy.gateway.sc2023.websocket;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fzzy.gateway.sc2023.data.WebSocketPacket;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+@ServerEndpoint(value = "/device-message-sender/${productId}/${deviceId}")
+public class WebSocketDeviceLed {
+
+    private static Map<String, Session> sessionPool = new ConcurrentHashMap<>();
+    private static Map<String, String> sessionIds = new ConcurrentHashMap<>();
+
+    // 涓庢煇涓鎴风鐨勮繛鎺ヤ細璇濓紝闇�瑕侀�氳繃瀹冩潵缁欏鎴风鍙戦�佹暟鎹�
+    private Session session;
+
+
+    @OnOpen
+    public void onOpen(Session session,
+                       @PathParam("productId") String productId,
+                       @PathParam("deviceId") String deviceId,
+                       @PathParam("clientId") String clientId
+    ) throws Exception {
+
+        this.session = session;
+
+        String key = productId + "-" + deviceId;
+
+        sessionPool.put(key, session);
+        sessionIds.put(session.getId(), key);
+
+        log.info("new webSocket,clientId={}", key);
+    }
+
+    @OnClose
+    public void onClose() {
+
+        String key = sessionIds.get(session.getId());
+
+        sessionPool.remove(key);
+        sessionIds.remove(session.getId());
+
+        log.info("WebSocket杩炴帴鍏抽棴={}", key);
+
+
+    }
+
+    /**
+     * 鏀跺埌鍓嶇鍙戦�佺殑淇℃伅
+     *
+     * @param message
+     * @param session
+     */
+    @OnMessage
+    public void onMessage(String message, Session session) {
+
+        log.info("鏉ヨ嚜鍓嶇鐨勪俊鎭�:\n" + message);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("鍙戠敓閿欒");
+
+        String key = sessionIds.get(session.getId());
+
+        sessionPool.remove(key);
+        sessionIds.remove(session.getId());
+        error.printStackTrace();
+    }
+
+
+    /**
+     * @param packet
+     */
+    public static void sendByPacket(WebSocketPacket packet) {
+        if (StringUtils.isEmpty(packet.getDeviceId())) {
+            log.error("WebSocket淇℃伅鎺ㄩ�佸け璐ワ紝璁惧缂栫爜涓虹┖銆�");
+            return;
+        }
+
+        String tag = packet.getDeviceId();
+
+        // 閬嶅巻鎺ㄩ��
+        Session session;
+        for (String key : sessionPool.keySet()) {
+            if (key.indexOf(tag) != -1) {
+                session = sessionPool.get(key);
+                session.getAsyncRemote().sendText(
+                        JSONObject.toJSONString(packet));
+            }
+        }
+    }
+
+
+}

--
Gitblit v1.9.3