diff options
Diffstat (limited to 'src/org')
-rw-r--r-- | src/org/traccar/DistanceHandler.java | 3 | ||||
-rw-r--r-- | src/org/traccar/reports/Summary.java | 25 |
2 files changed, 17 insertions, 11 deletions
diff --git a/src/org/traccar/DistanceHandler.java b/src/org/traccar/DistanceHandler.java index 99b240150..7537e2867 100644 --- a/src/org/traccar/DistanceHandler.java +++ b/src/org/traccar/DistanceHandler.java @@ -55,8 +55,7 @@ public class DistanceHandler extends BaseDataHandler { if (!position.getAttributes().containsKey(Position.KEY_DISTANCE)) { position.set(Position.KEY_DISTANCE, distance); } - totalDistance += distance; - totalDistance = BigDecimal.valueOf(totalDistance).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + totalDistance = BigDecimal.valueOf(totalDistance + distance).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); position.set(Position.KEY_TOTAL_DISTANCE, totalDistance); return position; diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index e2c11e7b1..402e6d432 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -16,6 +16,8 @@ */ package org.traccar.reports; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.sql.SQLException; import java.util.Collection; import java.util.Date; @@ -34,7 +36,7 @@ public final class Summary { private Summary() { } - private static SummaryReport calculateGeneralResult(long deviceId, Date from, Date to) throws SQLException { + private static SummaryReport calculateSummaryResult(long deviceId, Date from, Date to) throws SQLException { SummaryReport result = new SummaryReport(); result.setDeviceId(deviceId); result.setDeviceName(Context.getDeviceManager().getDeviceById(deviceId).getName()); @@ -62,15 +64,20 @@ public final class Summary { } if (firstPosition.getAttributes().containsKey(Position.KEY_ODOMETER) && previousPosition.getAttributes().containsKey(Position.KEY_ODOMETER)) { - result.setDistance(((Double) previousPosition.getAttributes().get(Position.KEY_ODOMETER) - - (Double) firstPosition.getAttributes().get(Position.KEY_ODOMETER)) * 1000); + result.setDistance((Integer.parseInt(previousPosition.getAttributes().get(Position.KEY_ODOMETER) + .toString()) + - Integer.parseInt(firstPosition.getAttributes().get(Position.KEY_ODOMETER).toString())) + * 1000); } else if (firstPosition.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE) && previousPosition.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE)) { - result.setDistance((Double) previousPosition.getAttributes().get(Position.KEY_TOTAL_DISTANCE) - - (Double) firstPosition.getAttributes().get(Position.KEY_TOTAL_DISTANCE)); + result.setDistance(((Number) previousPosition.getAttributes().get(Position.KEY_TOTAL_DISTANCE)) + .doubleValue() + - ((Number) firstPosition.getAttributes().get(Position.KEY_TOTAL_DISTANCE)).doubleValue()); } - - result.setAverageSpeed(speedSum / positions.size()); + result.setDistance(new BigDecimal(result.getDistance()) + .setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + result.setAverageSpeed(new BigDecimal(speedSum / positions.size()) + .setScale(3, RoundingMode.HALF_EVEN).doubleValue()); } return result; } @@ -80,7 +87,7 @@ public final class Summary { JsonArrayBuilder json = Json.createArrayBuilder(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); - json.add(JsonConverter.objectToJson(calculateGeneralResult(deviceId, from, to))); + json.add(JsonConverter.objectToJson(calculateSummaryResult(deviceId, from, to))); } return json.build().toString(); } @@ -91,7 +98,7 @@ public final class Summary { csv.addHeaderLine(new SummaryReport()); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); - csv.addLine(calculateGeneralResult(deviceId, from, to)); + csv.addLine(calculateSummaryResult(deviceId, from, to)); } return csv.build(); } |