|
@@ -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]));
|
|
|
+ }
|
|
|
}
|