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