From 9f60706d957a183433cd61de9e422e565a1f15d4 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 12 Jan 2013 00:54:34 +1300 Subject: Add latest position to device --- .../traccar/web/server/model/DataServiceImpl.java | 4 ++-- src/org/traccar/web/shared/model/Device.java | 8 +++++++ src/org/traccar/web/shared/model/Position.java | 28 +++++++++++----------- 3 files changed, 24 insertions(+), 16 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/web/server/model/DataServiceImpl.java b/src/org/traccar/web/server/model/DataServiceImpl.java index 0b2a80ba..fa7a42d8 100644 --- a/src/org/traccar/web/server/model/DataServiceImpl.java +++ b/src/org/traccar/web/server/model/DataServiceImpl.java @@ -195,8 +195,8 @@ public class DataServiceImpl extends RemoteServiceServlet implements DataService User user = getUser(); if (!user.getDevices().isEmpty()) { TypedQuery query = entityManager.createQuery( - "SELECT x FROM Position x WHERE (x.device, x.time) IN (" + - "SELECT y.device, MAX(y.time) FROM Position y WHERE y.device IN :devices GROUP BY y.device)", Position.class); + "SELECT x FROM Position x WHERE x.id IN (" + + "SELECT y.latestPosition FROM Device y WHERE y IN (:devices))", Position.class); query.setParameter("devices", user.getDevices()); positions.addAll(query.getResultList()); } diff --git a/src/org/traccar/web/shared/model/Device.java b/src/org/traccar/web/shared/model/Device.java index df4afb4b..d638046e 100644 --- a/src/org/traccar/web/shared/model/Device.java +++ b/src/org/traccar/web/shared/model/Device.java @@ -21,6 +21,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.OneToOne; import javax.persistence.Table; @Entity @@ -46,6 +47,13 @@ public class Device implements Serializable { return id; } + @OneToOne + private Position latestPosition; + + public Position getLatestPosition() { + return latestPosition; + } + @Column(unique = true) private String uniqueId; diff --git a/src/org/traccar/web/shared/model/Position.java b/src/org/traccar/web/shared/model/Position.java index 581c94c4..d5fa9a91 100644 --- a/src/org/traccar/web/shared/model/Position.java +++ b/src/org/traccar/web/shared/model/Position.java @@ -75,45 +75,45 @@ public class Position implements Serializable, Cloneable { return time; } - private boolean valid; + private Boolean valid; - public boolean getValid() { + public Boolean getValid() { return valid; } - private double latitude; + private Double latitude; - public double getLatitude() { + public Double getLatitude() { return latitude; } - private double longitude; + private Double longitude; - public double getLongitude() { + public Double getLongitude() { return longitude; } - private double altitude; + private Double altitude; - public double getAltitude() { + public Double getAltitude() { return altitude; } - private double speed; + private Double speed; - public double getSpeed() { + public Double getSpeed() { return speed; } - private double course; + private Double course; - public double getCourse() { + public Double getCourse() { return course; } - private double power; + private Double power; - public double getPower() { + public Double getPower() { return power; } -- cgit v1.2.3