Browse Source

增加服务器请求设备信息接口

yangxiaokun 3 years ago
parent
commit
03bd352fd4

+ 5 - 2
src/main/java/com/zy/bms/common/Constant.java

@@ -41,8 +41,11 @@ public class Constant {
         public static final String UBI_GET_SET_INFO = "29";
         //普适型 - 设备设置信息 device -> serve
         public static final String UBI_SET_INFO = "30";
-        //同步更新路牌设备信息
-        public static final String LP_UPDATE_DEVICE_INFO = "71";
+        //普适性-服务器主动请求获取心跳包
+        public static final String UBI_REQUEST_HEARTBEAT = "80";
+        //路牌-同步更新路牌本地设置
+        public static final String LP_SET_LOCAL_INFO = "71";
+
     }
 
     /**

+ 21 - 0
src/main/java/com/zy/bms/controller/ubi/UbiWxController.java

@@ -6,6 +6,7 @@ import com.zy.bms.controller.BaseController;
 import com.zy.bms.entity.Group;
 import com.zy.bms.entity.PrivilegeApplyRecord;
 import com.zy.bms.service.IGroupService;
+import com.zy.bms.service.IPostMqttMsgService;
 import com.zy.bms.service.IPrivilegeApplyRecordService;
 import com.zy.bms.service.IUserPrivilegeService;
 import com.zy.bms.service.ubi.IUbiInfoStateService;
@@ -37,6 +38,8 @@ public class UbiWxController extends BaseController {
     private IUbiInfoStateService ubiInfoStateService;
     @Resource
     private IGroupService groupService;
+    @Resource
+    private IPostMqttMsgService postMqttMsgService;
 
     /**
      * 查看用户拥有权限的设备组列表
@@ -75,6 +78,24 @@ public class UbiWxController extends BaseController {
         return ServerResponse.success(ubiInfoStateService.getDetailWx(openNum));
     }
 
+    /**
+     * 蜂鸣器
+     */
+    @GetMapping("buzzing.do")
+    public ServerResponse buzzing(String openNum) {
+        postMqttMsgService.requestBuzzingUbi(openNum);
+        return ServerResponse.success();
+    }
+
+    /**
+     * 立即请求获取最新心跳包
+     */
+    @GetMapping("heartbeat.do")
+    public ServerResponse heartbeat(String openNum) {
+        postMqttMsgService.requestHeartbeatUbi(openNum);
+        return ServerResponse.success();
+    }
+
     /**
      * 获取设备详情信息
      */

+ 1 - 1
src/main/java/com/zy/bms/handler/LpHandlers.java

@@ -46,7 +46,7 @@ public class LpHandlers {
             //如果远程设备的(唤醒时间,阈值)与数据库的数据不一致,则发送消息更新设备的设置数据与数据库保持一致
             if ((dbWakeInt != null && !dbWakeInt.equals(wakeInt)) ||
                     (dbDevice.getThresh() != null && !dbDevice.getThresh().equals(thresh))) {
-                postMqttMsgService.updateDeviceInfoLp(openNum, wakeInt, thresh);
+                postMqttMsgService.setWakeAndThreshLp(openNum, wakeInt, thresh);
             }
             //更新数据库设备状态信息
             lpInfoStateService.update(device, new QueryWrapper<LpInfoState>().eq("open_num", openNum));

+ 2 - 9
src/main/java/com/zy/bms/handler/MqttCallbackHandler.java

@@ -42,14 +42,7 @@ public class MqttCallbackHandler {
     public void handle(String topic, String payload) {
         //设备码
         String openNum = Constant.splitOpenNum(topic);
-        MqttDTO mqttDTO;
-        try {
-            //解析消息
-            mqttDTO = MqttDTO.parse(payload);
-        } catch (Exception e) {
-            log.error("mqtt消息格式异常:" + payload, e);
-            return;
-        }
+        MqttDTO mqttDTO = MqttDTO.parse(payload);
         // 1. 存储日志 --- 接收
         logsService.saveReceive(topic, payload);
         // 2. 根据报文标识代码 M 处理消息
@@ -71,7 +64,7 @@ public class MqttCallbackHandler {
             }
         }
         // 3. 转发消息至网页,忽略注册的报文
-        webSocketHandler.massMessage(Constant.splitOpenNum(topic), payload);
+        webSocketHandler.massMessage(openNum, payload);
     }
 
     /**

+ 7 - 7
src/main/java/com/zy/bms/handler/WebSocketHandler.java

@@ -48,13 +48,13 @@ public class WebSocketHandler {
         webSocketMap.get(deviceId).remove(session);
     }
 
-    ///**
-    //* 连接错误
-    //*/
-    //@OnError
-    //public void onError(Session session, Throwable error, @PathParam("deviceId") String deviceId) {
-    //   webSocketMap.get(deviceId).remove(session);
-    //}
+    /**
+    * 连接错误
+    */
+    @OnError
+    public void onError(Session session, Throwable error, @PathParam("deviceId") String deviceId) {
+       webSocketMap.get(deviceId).remove(session);
+    }
 
     /**
      * 群发消息

+ 23 - 5
src/main/java/com/zy/bms/service/IPostMqttMsgService.java

@@ -30,18 +30,36 @@ public interface IPostMqttMsgService {
     void handleRegister(DeviceBase device);
 
     /**
+     * 路牌
+     * 更新唤醒时间和阈值
+     *
+     * @param openNum 设备码
+     * @param wakeInt 唤醒时间
+     * @param thresh  阈值
+     */
+    void setWakeAndThreshLp(String openNum, BigDecimal wakeInt, Integer thresh);
+
+    /**
+     * 普适性
      * 获取设备本地设置
      *
      * @param openNum 设备码
      */
-    void getDeviceLocalSet(String openNum);
+    void requestLocalSetUbi(String openNum);
 
     /**
-     * 更新路牌的设置信息
+     * 普适性
+     * 服务器主动请求获取心跳包
+     *
+     * @param openNum 设备码
+     */
+    void requestHeartbeatUbi(String openNum);
+
+    /**
+     * 普适性
+     * 服务器主动发送请求蜂鸣器
      *
      * @param openNum 设备码
-     * @param wakeInt 唤醒时间
-     * @param thresh  阈值
      */
-    void updateDeviceInfoLp(String openNum, BigDecimal wakeInt, Integer thresh);
+    void requestBuzzingUbi(String openNum);
 }

+ 19 - 11
src/main/java/com/zy/bms/service/impl/PostMqttMsgServiceImpl.java

@@ -3,20 +3,14 @@ package com.zy.bms.service.impl;
 import com.zy.bms.common.Constant;
 import com.zy.bms.config.mqtt.MqttGateway;
 import com.zy.bms.entity.DeviceBase;
-import com.zy.bms.entity.lp.LpInfoState;
 import com.zy.bms.handler.WebSocketHandler;
 import com.zy.bms.pojo.dto.MqttDTO;
-import com.zy.bms.pojo.io.set.AlarmIO;
-import com.zy.bms.pojo.io.set.NtripIO;
-import com.zy.bms.pojo.io.set.SetIO;
-import com.zy.bms.pojo.io.set.TcpIO;
+import com.zy.bms.pojo.io.set.*;
 import com.zy.bms.service.IPostMqttMsgService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * 向设备发送协议消息 服务类
@@ -55,19 +49,33 @@ public class PostMqttMsgServiceImpl implements IPostMqttMsgService {
     }
 
     @Override
-    public void getDeviceLocalSet(String openNum) {
+    public void requestLocalSetUbi(String openNum) {
         MqttDTO mqttDTO = new MqttDTO(Constant.M.UBI_GET_SET_INFO);
         mqttDTO.put("getset", "getset");
         sendMqttMessage(Constant.TOPIC.DEVICE_CLIENT + openNum, mqttDTO.json());
     }
 
     @Override
-    public void updateDeviceInfoLp(String openNum, BigDecimal wakeInt, Integer thresh) {
-        MqttDTO mqttDTO = new MqttDTO(Constant.M.LP_UPDATE_DEVICE_INFO);
+    public void setWakeAndThreshLp(String openNum, BigDecimal wakeInt, Integer thresh) {
+        MqttDTO mqttDTO = new MqttDTO(Constant.M.LP_SET_LOCAL_INFO);
         mqttDTO.put("setf", "true").put("wakeint", wakeInt).put("thresh", thresh);
         sendMqttMessage(Constant.TOPIC.DEVICE_CLIENT_LP + openNum, mqttDTO.json());
     }
 
+    @Override
+    public void requestHeartbeatUbi(String openNum) {
+        MqttDTO mqttDTO = new MqttDTO(Constant.M.UBI_REQUEST_HEARTBEAT);
+        mqttDTO.put("fun", "gethearbeat");
+        sendMqttMessage(Constant.TOPIC.DEVICE_CLIENT + openNum, mqttDTO.json());
+    }
+
+    @Override
+    public void requestBuzzingUbi(String openNum) {
+        MqttDTO mqttDTO = new MqttDTO(Constant.M.UBI_REQUEST_HEARTBEAT);
+        mqttDTO.put("fun", "buzzerring");
+        sendMqttMessage(Constant.TOPIC.DEVICE_CLIENT + openNum, mqttDTO.json());
+    }
+
     /**
      * 发送Mqtt 消息
      *
@@ -78,7 +86,7 @@ public class PostMqttMsgServiceImpl implements IPostMqttMsgService {
         // 1. 发送 MQTT 协议消息
         mqttGateway.sendMsgToMqtt(payload, topic);
         // 2. 存储消息日志
-        mqttLogService.saveSend(Constant.TOPIC.REGISTER_CLIENT, payload);
+        mqttLogService.saveSend(topic, payload);
         // 3. 消息同步转发至webSocket
         webSocketHandler.massMessage(Constant.splitOpenNum(topic), payload);
     }