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