浏览代码

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

yangxiaokun 3 年之前
父节点
当前提交
9cd44b4b36

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

@@ -2,17 +2,16 @@ package com.zy.omp.config.mqtt;
 
 import com.zy.omp.common.Constant;
 import com.zy.omp.pojo.dto.MqttMsgDto;
-import com.zy.omp.common.exception.ApiRuntimeException;
 import com.zy.omp.model.*;
 import com.zy.omp.service.*;
 import com.zy.omp.utils.*;
 import com.zy.omp.utils.CoordTransformUtil;
 import com.zy.omp.utils.GaoDeApiUtil;
 import com.zy.omp.websocket.WebSocketServer;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 /**
@@ -21,6 +20,7 @@ import java.time.LocalDateTime;
  * @author yang xiao kun
  * create on 2021/1/19
  */
+@Slf4j
 @Component
 public class MqttCallbackHandler {
 
@@ -173,8 +173,7 @@ public class MqttCallbackHandler {
             // 保存位置信息
             deviceLocationService.saveLocation(location);
         } catch (Exception e) {
-            e.printStackTrace();
-            throw new ApiRuntimeException("处理设备上传位置定位信息出错");
+            log.error("老人机上传位置信息异常", e);
         }
     }
 
@@ -198,8 +197,7 @@ public class MqttCallbackHandler {
             // 保存基本信息
             deviceLpService.updateByNum(deviceLp, num);
         } catch (Exception e) {
-            e.printStackTrace();
-            throw new ApiRuntimeException("处理路牌设备上传定位信息出错");
+            log.error("路牌上传位置信息异常", e);
         }
     }
 
@@ -211,14 +209,24 @@ public class MqttCallbackHandler {
         try {
             String num = topic.split("IMEI")[1];
             setService.getDeviceLocation_LP(num);
-            //如果远程设备的信息与数据库的信息不一致,则发送消息更新远程信息
             DeviceLp dbDevice = deviceLpService.getByNum(num);
-            Double dbWakeInt = dbDevice.getWakeInt() == null ? null : dbDevice.getWakeInt().setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue();
-            Double wakeInt = msg.getDouble("sleept") == null ? null : BigDecimal.valueOf(msg.getDouble("sleept")).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue();
-            if (dbWakeInt == null || !dbWakeInt.equals(wakeInt) || !dbDevice.getThresh().equals(msg.getInt("thresh"))) {
-                setService.updateDevice_LP(num, dbDevice.getWakeInt(), dbDevice.getThresh());
+            if (dbDevice == null) {
+                log.warn("设备需要手动添加至数据库:" + num);
+                return;
             }
             DeviceLp deviceLp = new DeviceLp();
+            Double wakeInt = msg.getDouble("sleept");
+            Integer thresh = msg.getInt("thresh");
+            //若数据库中没有设置唤醒时间和阈值则直接同步设备数据
+            if (dbDevice.getThresh() == null || dbDevice.getWakeInt() == null) {
+                deviceLp.setWakeInt(wakeInt);
+                deviceLp.setThresh(thresh);
+            } else {
+                //如果远程设备的(唤醒时间,阈值)与数据库的数据不一致,则发送消息更新设备的设置数据与数据库保持一致
+                if (!dbDevice.getWakeInt().equals(wakeInt) || !dbDevice.getThresh().equals(thresh)) {
+                    setService.updateDevice_LP(num, dbDevice.getWakeInt(), dbDevice.getThresh());
+                }
+            }
             deviceLp.setDataType(msg.getString("datetype"));
             deviceLp.setBattery(msg.getString("batterynum"));
             deviceLp.setS4g(msg.getString("s4g"));
@@ -233,8 +241,7 @@ public class MqttCallbackHandler {
             // 保存基本信息
             deviceLpService.updateByNum(deviceLp, num);
         } catch (Exception e) {
-            e.printStackTrace();
-            throw new ApiRuntimeException("处理路牌设备上传基本信息出错");
+            log.error("路牌上传基本信息异常", e);
         }
     }
 

+ 2 - 2
src/main/java/com/zy/omp/model/DeviceLp.java

@@ -56,7 +56,7 @@ public class DeviceLp implements Serializable {
     /**
      * 定时唤醒时间
      */
-    private BigDecimal wakeInt;
+    private Double wakeInt;
 
     /**
      * 阈值
@@ -135,6 +135,6 @@ public class DeviceLp implements Serializable {
      */
     public Integer getStatus() {
         if (updateTime == null || wakeInt == null) return 0;
-        return updateTime.compareTo(LocalDateTime.now().minusMinutes(wakeInt.multiply(new BigDecimal(60)).intValue() + 5));
+        return updateTime.compareTo(LocalDateTime.now().minusMinutes((int) (wakeInt * 60) + 5));
     }
 }

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

@@ -159,18 +159,18 @@ public class SetService {
      * 服务器返回授权码
      * 路牌
      */
-    public void updateDevice_LP(String num, BigDecimal wakeInt, Integer thresh) {
+    public void updateDevice_LP(String num, Double wakeInt, Integer thresh) {
         //发送模板消息给设备
         MqttMsgDto msgDto = new MqttMsgDto();
         msgDto.setM(Constant.M_CODE_UPDATE_DEVICE_INFO_LP);
         Map<String, Object> data = new HashMap<>();
         data.put("setf", "true");
-        data.put("wakeint", wakeInt.doubleValue());
+        data.put("wakeint", wakeInt);
         data.put("thresh", thresh);
         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.saveLog(Constant.TOPIC_DEVICE_CLIENT_LP + num, msgDto.toJson(), 1);
     }
 
     /**

+ 94 - 0
src/test/logback-spring.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出
+scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true
+scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
+debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
+-->
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 日志文件输出路径 -->
+    <property name="filePath" value="/Users/smzdm/IdeaProjects"/>
+    <!-- 项目名称 -->
+    <property name="appName" value="omp"/>
+
+    <!-- 控制台输出 -->
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder charset="UTF-8">
+            <!-- 输出日志记录格式 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+
+
+    <!--WARN日志,时间滚动输出-->
+    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${logging.path}/web_warn.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${logging.path}/web-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录warn级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>warn</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--ERROR日志,时间滚动输出-->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文档的路径及文档名 -->
+        <file>${logging.path}/web_error.log</file>
+        <!--日志文档输出格式-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${logging.path}/web-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文档保留天数-->
+            <maxHistory>15</maxHistory>
+        </rollingPolicy>
+        <!-- 此日志文档只记录ERROR级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+
+    <!-- 开发环境:打印控制台 -->
+    <springProfile name="dev">
+        <root level="DEBUG">
+            <appender-ref ref="CONSOLE"/>
+        </root>
+    </springProfile>
+
+    <!-- 生产环境:输出到文档 -->
+    <springProfile name="prod">
+        <root level="info">
+            <appender-ref ref="WARN" />
+            <appender-ref ref="ERROR" />
+        </root>
+    </springProfile>
+
+</configuration>