Selaa lähdekoodia

修改事件发送实体,将位置信息移动到描述中

Memory_LG 9 kuukautta sitten
vanhempi
commit
9b5539e27c

+ 51 - 36
src/main/java/com/sooka/sponest/data/housingconstruction/handler/TaskHandler.java

@@ -231,7 +231,7 @@ public class TaskHandler {
         //上报人为企业id
         sensorEventVo.setSensorId(MapUtils.getString(carInfo, "enterpriseId"));
         sensorEventVo.setReportTime(new Date());
-        sensorEventVo.setAddress(address);
+        sensorEventVo.setAddress(getAddress(eventSlatSlon, jsonObject.getJSONObject("addressmap")));
         //上报人名称为车号
 //        sensorEventVo.setReportor(MapUtils.getString(carInfo, "carNumber"));
         //上报人为企业名称
@@ -240,7 +240,7 @@ public class TaskHandler {
         template.append(MapUtils.getString(carInfo, "enterpriseName"))
                 .append("的").append(MapUtils.getString(carInfo, "driverName"))
                 .append("驾驶").append(MapUtils.getString(carInfo, "carNumber"))
-                .append("车辆").append("发生%s")
+                .append("车辆").append(address).append("发生%s")
                 .append(",设定的阈值为%skm/h");
         System.out.println("事件推送实体 =》 " + sensorEventVo);
         //发送事件
@@ -259,53 +259,57 @@ public class TaskHandler {
 
         List<GpsEntity> gpsEntities = JSONArray.parseArray(totaltrips.toJSONString(), GpsEntity.class);
         gpsEntities.forEach(gps -> {
-            System.out.println("gps = " + gps);
             double v = gps.getMaxspeed() / 1000;
             if (v > speedThreshold) {
-                addressResult.append("在").append(getAddressStr(gps, addressmap, String.valueOf(v))).append(";");
+                //超速开始
+                String mapKeyStart = getStr(gps.getSlat()) + "_" + getStr(gps.getSlon());
+                //超速结束
+                String mapKeyEnd = getStr(gps.getElat()) + "_" + getStr(gps.getElon());
+                String addressStr = "{" + addressmap.getString(mapKeyStart) + ">>>" + addressmap.getString(mapKeyEnd) + "}区间最高时速为" + v + "km/h";
+                String address = addressStr.replace("null", "未知位置");
+                addressResult.append("在").append(address).append(";");
             }
-
         });
         return addressResult.toString();
     }
 
-    //根据每条车速信息,获取发生地点范围
-    private String getAddressStr(GpsEntity entity, JSONObject addressmap, String maxSpeed) {
-        //超速开始
-        String mapKeyStart = getStr(entity.getSlat()) + "_" + getStr(entity.getSlon());
-        //超速结束
-        String mapKeyEnd = getStr(entity.getElat()) + "_" + getStr(entity.getElon());
-        return "{" + addressmap.getString(mapKeyStart) + ">>>" + addressmap.getString(mapKeyEnd) + "}区间最高时速为" + maxSpeed +"km/h";
-    }
-
     /**
-     * @param str 需要截取的数字
+     * @param s 需要截取的数字
      */
-    public String getStr(String str) {
-        // 判断是整数还是小数,如果是整数,则小数点后用0补位
-        if (!str.contains(".")) {
-            String b = ".";
-            for (int a = 0; a < 5; a++) {
-                b = b + "0";
-            }
-            return str + b;
+    public static String getStr(String s) {
+        // 找到小数点的位置
+        int decimalIndex = s.indexOf('.');
+
+        // 如果没有小数点,直接返回原字符串
+        if (decimalIndex == -1) {
+            return s;
         }
-        // 获取小数点的位置
-        int index = str.indexOf(".");
-        String beforeNum = str.substring(0, index + 1);
-        // 获取小数点后面是否有num位,不足用0补位
-        String afterNum = str.replace(beforeNum, "");
-        // 判断小数点后位数是否大于保留的位数
-        if (afterNum.length() <= 5) {
-            for (int a = afterNum.length(); a < 5; a++) {
-                afterNum = afterNum + "0";
-            }
-        } else {
-            afterNum = afterNum.substring(0, 5);
+
+        // 截取小数点后面的部分
+        String decimalPart = s.substring(decimalIndex + 1);
+
+        // 截取前五个数字
+        if (decimalPart.length() > 5) {
+            decimalPart = decimalPart.substring(0, 5);
+        }
+
+        // 删除末尾的零
+        while (decimalPart.length() > 0 && decimalPart.charAt(decimalPart.length() - 1) == '0') {
+            decimalPart = decimalPart.substring(0, decimalPart.length() - 1);
+        }
+
+        // 如果没有小数部分,返回整数部分
+        if (decimalPart.isEmpty()) {
+            return s.substring(0, decimalIndex);
         }
-        return beforeNum + afterNum;
+
+        // 返回处理后的字符串
+        return s.substring(0, decimalIndex + 1) + decimalPart;
     }
 
+    /**
+     * 获取事件集合中时间最早的一个经纬度信息
+     */
     private String getEventSlatSlon(JSONObject jsonObject){
         JSONArray totaltrips = jsonObject.getJSONArray("totaltrips");
         List<GpsEntity> gpsEntities = JSONArray.parseArray(totaltrips.toJSONString(), GpsEntity.class);
@@ -321,4 +325,15 @@ public class TaskHandler {
             return "false";
         }
     }
+
+    /**
+     * 根据最早的经纬度信息获取位置信息
+     * @param latAndLon 最早的经纬度信息
+     * @param addressmap 地点结合
+     * @return 事件位置
+     */
+    private String getAddress(String latAndLon, JSONObject addressmap){
+        String[] split = latAndLon.split("_");
+        return addressmap.getString(getStr(split[0]) + "_" + getStr(split[1]));
+    }
 }