aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/reports/Summary.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/traccar/reports/Summary.java')
-rw-r--r--src/main/java/org/traccar/reports/Summary.java20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/main/java/org/traccar/reports/Summary.java b/src/main/java/org/traccar/reports/Summary.java
index 83fe9caf7..d576ac1e6 100644
--- a/src/main/java/org/traccar/reports/Summary.java
+++ b/src/main/java/org/traccar/reports/Summary.java
@@ -28,6 +28,7 @@ import java.util.Date;
import org.jxls.util.JxlsHelper;
import org.traccar.Context;
+import org.traccar.helper.UnitsConverter;
import org.traccar.model.Position;
import org.traccar.reports.model.SummaryReport;
@@ -43,13 +44,11 @@ public final class Summary {
if (positions != null && !positions.isEmpty()) {
Position firstPosition = null;
Position previousPosition = null;
- double speedSum = 0;
for (Position position : positions) {
if (firstPosition == null) {
firstPosition = position;
}
previousPosition = position;
- speedSum += position.getSpeed();
if (position.getSpeed() > result.getMaxSpeed()) {
result.setMaxSpeed(position.getSpeed());
}
@@ -57,13 +56,22 @@ public final class Summary {
boolean ignoreOdometer = Context.getDeviceManager()
.lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, false, true);
result.setDistance(ReportUtils.calculateDistance(firstPosition, previousPosition, !ignoreOdometer));
- result.setAverageSpeed(speedSum / positions.size());
result.setSpentFuel(ReportUtils.calculateFuel(firstPosition, previousPosition));
+ long durationMilliseconds;
if (firstPosition.getAttributes().containsKey(Position.KEY_HOURS)
&& previousPosition.getAttributes().containsKey(Position.KEY_HOURS)) {
- result.setEngineHours(
- previousPosition.getLong(Position.KEY_HOURS) - firstPosition.getLong(Position.KEY_HOURS));
+ durationMilliseconds =
+ previousPosition.getLong(Position.KEY_HOURS) - firstPosition.getLong(Position.KEY_HOURS);
+ result.setEngineHours(durationMilliseconds);
+ } else {
+ durationMilliseconds =
+ previousPosition.getFixTime().getTime() - firstPosition.getFixTime().getTime();
+ }
+
+ if (durationMilliseconds > 0) {
+ result.setAverageSpeed(
+ UnitsConverter.knotsFromMps(result.getDistance() * 1000 / durationMilliseconds));
}
if (!ignoreOdometer
@@ -77,7 +85,7 @@ public final class Summary {
}
result.setStartTime(firstPosition.getFixTime());
- result.setEndTime(previousPosition.getServerTime());
+ result.setEndTime(previousPosition.getFixTime());
}
return result;
}