jiazx0107@163.com
2023-10-25 dfb8e7111399231421ffa13b3c060de2283df5e1
四川省网关接口相关3
已修改2个文件
已添加10个文件
471 ■■■■■ 文件已修改
src/main/java/com/fzzy/gateway/entity/GatewayDevice.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/api/GatewaySyncService.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/data/GrainData.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/data/IdCardData.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/data/LprData.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/data/SyncReqData.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacket.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/data/WebSocketPacketHeader.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/data/WeightInfo.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDevice.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketDeviceLed.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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);
    }
}
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);
}
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";
}
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;//地址
}
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";
}
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;
}
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;
}
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;
}
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";
}
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));
            }
        }
    }
}
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));
            }
        }
    }
}