Browse Source

完善路牌上传设备信息逻辑

yangxiaokun 3 years ago
parent
commit
e2838f841f

+ 1 - 1
src/main/java/com/zy/omp/config/mqtt/MqttCallbackHandler.java

@@ -51,7 +51,7 @@ public class MqttCallbackHandler {
      */
     void handle(String topic, String payload) {
         //存储日志-接收
-        mqttLogService.saveLog(topic, payload, 0);
+        mqttLogService.saveReceiveLog(topic, payload);
         //消息返回JSON转Object
         MqttMsgDto msgDto = MqttMsgDto.parse(payload);
         //路牌项目

+ 37 - 4
src/main/java/com/zy/omp/service/MqttLogService.java

@@ -10,6 +10,8 @@ import com.zy.omp.model.MqttLog;
 import com.zy.omp.pojo.dto.MqttMsgDto;
 import org.springframework.stereotype.Service;
 
+import java.util.HashSet;
+
 /**
  * MQTT 收发日志 Service
  *
@@ -19,6 +21,36 @@ import org.springframework.stereotype.Service;
 @Service
 public class MqttLogService extends ServiceImpl<MqttLogMapper, MqttLog> {
 
+    //所有的注册主题
+    private static final HashSet<String> registerSet = new HashSet<>();
+
+    static {
+        registerSet.add(Constant.TOPIC_REGISTER_CLIENT);
+        registerSet.add(Constant.TOPIC_DEVICE_CLIENT_LP);
+        registerSet.add(Constant.TOPIC_REGISTER_SERVER);
+        registerSet.add(Constant.TOPIC_DEVICE_SERVER_LP);
+    }
+
+    /**
+     * 保存接收的消息日志
+     *
+     * @param topic   主题
+     * @param payload 消息内容
+     */
+    public void saveReceiveLog(String topic, String payload) {
+        saveLog(topic, payload, 0);
+    }
+
+    /**
+     * 保存发送的消息日志
+     *
+     * @param topic   主题
+     * @param payload 消息内容
+     */
+    public void saveSendLog(String topic, String payload) {
+        saveLog(topic, payload, 1);
+    }
+
     /**
      * 保存 日志
      *
@@ -26,16 +58,17 @@ public class MqttLogService extends ServiceImpl<MqttLogMapper, MqttLog> {
      * @param payload 消息内容
      * @param tag     0收 1发
      */
-    public void saveLog(String topic, String payload, Integer tag) {
+    private void saveLog(String topic, String payload, Integer tag) {
         MqttLog entity = new MqttLog();
         entity.setTopic(topic);
         //mqtt 日志类型
         entity.setTag(tag);
         //获取消息解析对象
         MqttMsgDto mqttMsgDto = MqttMsgDto.parse(payload);
-        String regTopic = tag == 0 ? Constant.TOPIC_REGISTER_SERVER : Constant.TOPIC_REGISTER_CLIENT;
-        //区分注册报文和普通报文,注册报文取设备随机码
-        entity.setDeviceId(topic.contains(regTopic) ? mqttMsgDto.getString("regnum") : mqttMsgDto.getDeviceId());
+        //注册报文与普通报文不同,注册报文取设备随机码
+        String[] topicSplit = topic.split("/");
+        String deviceId = topicSplit.length > 1 ? topicSplit[1] : null;
+        entity.setDeviceId(registerSet.contains(topic) ? mqttMsgDto.getString("regnum") : deviceId);
         //mqtt 指令
         entity.setInstruction(mqttMsgDto.getM());
         entity.setContent(payload);

+ 24 - 25
src/main/java/com/zy/omp/service/SetService.java

@@ -13,7 +13,6 @@ import com.zy.omp.websocket.WebSocketServer;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -50,32 +49,12 @@ public class SetService {
         // 2. 设置信息保存至数据库
         saveToDataBase(code, io);
         // 3. 存储消息日志
-        mqttLogService.saveLog(io.getTopic(), msgDto.toJson(), 1);
+        mqttLogService.saveSendLog(io.getTopic(), msgDto.toJson());
         // 4. 消息转发前端webSocket
         String deviceId = io.getTopic().split("/")[1];
         webSocketServer.massMessage(deviceId, msgDto.toJson());
     }
 
-    /**
-     * 服务器返回授权码
-     * 老人机
-     */
-    public void returnCode_OMP(Device device) {
-        //发送模板消息给设备
-        MqttMsgDto msgDto = new MqttMsgDto();
-        msgDto.setM(Constant.M_CODE_RETURN_CODE);
-        msgDto.setR(Constant.TOPIC_REGISTER_CLIENT);
-        msgDto.setT(Constant.TOPIC_REGISTER_SERVER);
-        Map<String, Object> data = new HashMap<>();
-        data.put("regnum", device.getNum());
-        data.put("deviceid", device.getClientId());
-        data.put("password", device.getPassword());
-        msgDto.setData(data);
-        mqttGateway.sendMsgToMqtt(msgDto.toJson(), Constant.TOPIC_REGISTER_CLIENT);
-        // 3. 存储消息日志
-        mqttLogService.saveLog(Constant.TOPIC_REGISTER_CLIENT, msgDto.toJson(), 1);
-    }
-
     /**
      * 存储至数据库
      */
@@ -136,6 +115,26 @@ public class SetService {
         return result;
     }
 
+    /**
+     * 服务器返回授权码
+     * 老人机
+     */
+    public void returnCode_OMP(Device device) {
+        //发送模板消息给设备
+        MqttMsgDto msgDto = new MqttMsgDto();
+        msgDto.setM(Constant.M_CODE_RETURN_CODE);
+        msgDto.setR(Constant.TOPIC_REGISTER_CLIENT);
+        msgDto.setT(Constant.TOPIC_REGISTER_SERVER);
+        Map<String, Object> data = new HashMap<>();
+        data.put("regnum", device.getNum());
+        data.put("deviceid", device.getClientId());
+        data.put("password", device.getPassword());
+        msgDto.setData(data);
+        mqttGateway.sendMsgToMqtt(msgDto.toJson(), Constant.TOPIC_REGISTER_CLIENT);
+        // 3. 存储消息日志
+        mqttLogService.saveSendLog(Constant.TOPIC_REGISTER_CLIENT, msgDto.toJson());
+    }
+
     /**
      * 服务器返回授权码
      * 路牌
@@ -152,7 +151,7 @@ public class SetService {
         msgDto.setData(data);
         mqttGateway.sendMsgToMqtt(msgDto.toJson(), Constant.TOPIC_REGISTER_CLIENT_LP);
         // 3. 存储消息日志
-        mqttLogService.saveLog(Constant.TOPIC_REGISTER_CLIENT_LP, msgDto.toJson(), 1);
+        mqttLogService.saveSendLog(Constant.TOPIC_REGISTER_CLIENT_LP, msgDto.toJson());
     }
 
     /**
@@ -170,7 +169,7 @@ public class SetService {
         msgDto.setData(data);
         mqttGateway.sendMsgToMqtt(msgDto.toJson(), Constant.TOPIC_DEVICE_CLIENT_LP + num);
         // 3. 存储消息日志
-        mqttLogService.saveLog(Constant.TOPIC_DEVICE_CLIENT_LP + num, msgDto.toJson(), 1);
+        mqttLogService.saveSendLog(Constant.TOPIC_DEVICE_CLIENT_LP + num, msgDto.toJson());
     }
 
     /**
@@ -187,6 +186,6 @@ public class SetService {
         msgDto.setData(data);
         mqttGateway.sendMsgToMqtt(msgDto.toJson(), Constant.TOPIC_DEVICE_CLIENT_LP + num);
         // 3. 存储消息日志
-        mqttLogService.saveLog(Constant.M_CODE_UPDATE_DEVICE_INFO_LP, msgDto.toJson(), 1);
+        mqttLogService.saveSendLog(Constant.M_CODE_UPDATE_DEVICE_INFO_LP, msgDto.toJson());
     }
 }