Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/com/zy/omp/config/mqtt/MqttCallbackHandler.java
chenyi406 3 years ago
parent
commit
1c4310e753

+ 1 - 1
src/main/java/com/zy/omp/common/Constant.java

@@ -34,7 +34,7 @@ public class Constant {
 
     public static final String M_CODE_UPLOAD_INFO_LP = "70";//路牌设备上传信息
     public static final String M_CODE_UPDATE_DEVICE_INFO_LP = "71";//同步更新路牌设备信息
-
+    public static final String M_CODE_UPLOAD_LOCATION_INFO_LP = "72";//路牌设备上传定位信息
 
     /**
      * 主题前缀

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

@@ -62,7 +62,12 @@ public class MqttCallbackHandler {
                     registerHandler_LP(msgDto);
                     break;
                 }
-                // 设备上传信息
+                // 设备上传定位信息
+                case Constant.M_CODE_UPLOAD_LOCATION_INFO_LP: {
+                    uploadLocationInfoLPHandler(topic, msgDto);
+                    break;
+                }
+                // 设备上传基本信息
                 case Constant.M_CODE_UPLOAD_INFO_LP: {
                     uploadDeviceInfoLPHandler(topic, msgDto);
                     break;
@@ -133,7 +138,7 @@ public class MqttCallbackHandler {
             deviceLp = new DeviceLp();
             deviceLp.setNum(num);
             deviceLp.setClientId(Constant.LP_DEVICE_ID_PREFIX + num);
-            deviceLp.setPassword(MD5Util.MD5Encode(num));
+            deviceLp.setPassword(MD5Util.encodeCut(num));
             deviceLp.setGroup(obj.getString("group"));
             deviceLpService.save(deviceLp);
         }
@@ -174,12 +179,38 @@ public class MqttCallbackHandler {
     }
 
     /**
-     * 处理设备信息上传
+     * 处理设备定位信息上传
+     * 路牌
+     */
+    private void uploadLocationInfoLPHandler(String topic, MqttMsgDto msg) {
+        try {
+            String num = topic.split("IMEI")[1];
+            DeviceLp deviceLp = new DeviceLp();
+            deviceLp.setMode(msg.getInt("mode"));
+            deviceLp.setLng(msg.getString("lng"));
+            deviceLp.setLat(msg.getString("lat"));
+            //转换后的坐标
+            String[] gcj = CoordTransformUtil.wgs84toGcj02(deviceLp.getLng(), deviceLp.getLat());
+            deviceLp.setLngGcj(gcj[0]);
+            deviceLp.setLatGcj(gcj[1]);
+            // 逆地理位置解析
+            deviceLp.setSite(GaoDeApiUtil.regeo(deviceLp.getLngGcj(), deviceLp.getLatGcj()));
+            // 保存基本信息
+            deviceLpService.updateByNum(deviceLp, num);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ApiRuntimeException("处理路牌设备上传定位信息出错");
+        }
+    }
+
+    /**
+     * 处理设备基本信息上传
      * 路牌
      */
     private void uploadDeviceInfoLPHandler(String topic, MqttMsgDto msg) {
         try {
             String num = topic.split("IMEI")[1];
+            setService.getDeviceLocation_LP(num);
             //如果远程设备的信息与数据库的信息不一致,则发送消息更新远程信息
             DeviceLp dbDevice = deviceLpService.getByNum(num);
             System.out.println(dbDevice.getWakeInt());
@@ -189,6 +220,7 @@ public class MqttCallbackHandler {
                 setService.updateDevice_LP(num, dbDevice.getWakeInt(), dbDevice.getThresh());
             }
             DeviceLp deviceLp = new DeviceLp();
+            deviceLp.setDataType(msg.getString("datetype"));
             deviceLp.setBattery(msg.getString("batterynum"));
             deviceLp.setS4g(msg.getString("s4g"));
             deviceLp.setX(msg.getString("x"));
@@ -198,20 +230,11 @@ public class MqttCallbackHandler {
             deviceLp.setAngley(msg.getString("angley"));
             deviceLp.setAnglez(msg.getString("anglez"));
             deviceLp.setTemp(msg.getString("temp"));
-            deviceLp.setLon(msg.getString("lon"));
-            deviceLp.setLat(msg.getString("lat"));
-            deviceLp.setUpdateTime(LocalDateTime.now());
-            //转换后的坐标
-            String[] gcj = CoordTransformUtil.wgs84toGcj02(deviceLp.getLon(), deviceLp.getLat());
-            deviceLp.setLonGcj(gcj[0]);
-            deviceLp.setLatGcj(gcj[1]);
-            // 逆地理位置解析
-            deviceLp.setSite(GaoDeApiUtil.regeo(deviceLp.getLonGcj(), deviceLp.getLatGcj()));
-            // 保存位置信息
+            // 保存基本信息
             deviceLpService.updateByNum(deviceLp, num);
         } catch (Exception e) {
             e.printStackTrace();
-            throw new ApiRuntimeException("处理设备上传位置定位信息出错");
+            throw new ApiRuntimeException("处理路牌设备上传基本信息出错");
         }
     }
 

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

@@ -115,8 +115,25 @@ public class DeviceLp implements Serializable {
      */
     private String site;
 
+    /**
+     * 定位模式 1:GPS 2:基站
+     */
+    private Integer mode;
+
+    /**
+     * 上传类型
+     */
+    private String  dataType;
+
     /**
      * 数据更新时间
      */
     private LocalDateTime updateTime;
+
+    /**
+     * 获取在线状态
+     */
+    public Integer getStatus() {
+        return updateTime.compareTo(LocalDateTime.now().minusMinutes(wakeInt * 60 + 5));
+    }
 }

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

@@ -172,4 +172,21 @@ public class SetService {
         // 3. 存储消息日志
         mqttLogService.saveLog(Constant.M_CODE_UPDATE_DEVICE_INFO_LP, msgDto.toJson(), 1);
     }
+
+    /**
+     * 获取路牌定位信息
+     * 路牌
+     */
+    public void getDeviceLocation_LP(String num) {
+        //发送模板消息给设备
+        MqttMsgDto msgDto = new MqttMsgDto();
+        msgDto.setM(Constant.M_CODE_UPDATE_DEVICE_INFO_LP);
+        Map<String, Object> data = new HashMap<>();
+        data.put("setf", "false");
+        data.put("getlocation", "true");
+        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);
+    }
 }

+ 25 - 0
src/main/java/com/zy/omp/utils/MD5Util.java

@@ -32,4 +32,29 @@ public class MD5Util {
             return "MD5";
         }
     }
+
+    /**
+     * MD5 字符串加密
+     * 裁剪 用作密码,短几位
+     *
+     * @param plainText 加密字符串
+     */
+    public static String encodeCut(String plainText) {
+        try {
+            StringBuilder stringBuilder = new StringBuilder();
+            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
+            messageDigest.update(plainText.getBytes());
+            byte[] bytes = messageDigest.digest();
+            int i;
+            for (byte value : bytes) {
+                i = value;
+                if (i < 0) i += 256;
+                if (i < 16) stringBuilder.append("0");
+                stringBuilder.append(Integer.toHexString(i));
+            }
+            return stringBuilder.toString().substring(16);
+        } catch (Exception e) {
+            return "MD5";
+        }
+    }
 }