ShipIt Day 2016: iBeacon Tracking Server
Für unser Ship-It Day Projekt "Mit iBeacons Arbeitszeit erfassen" haben wir eine App für Smartphones und eine Server-Applikation entwickelt. Nachdem wir im ersten Artikel das Projekt und die mobile App vorgestellt haben, geht es in diesem Artikel um die Server-Applikation.
In der Server-Applikation werden alle Daten gespeichert, aggregiert und verwaltet. Die App wurde mit Grails 3.1.1 und Bootstrap 4 (Alpha) umgesetzt.
Die Funktionalitäten
Auf der Startseite wird angezeigt, welche Mitarbeiter gerade im Büro sind und wann sie angekommen sind. Im unteren Teil werden die Mitarbeiter angezeigt, die nicht im Büro sind, und wann sie das Büro verlassen haben.
Für jeden Mitarbeiter gibt es eine Detail-Ansicht, wo die Arbeitszeit für die letzten Tage, Wochen usw. angezeigt werden. Es wird auch eine Liste mit den einzelnen Events angezeigt, wie sie von den Smartphones geschickt wurden.
Außerdem können neue Mitarbeiter angelegt, die wichtigsten Mitarbeiter-Daten bearbeitet und Geräte einem Mitarbeiter zugeordnet werden. Sendet ein neues Gerät Daten an die Applikation, taucht es automatisch in der Übersicht auf und kann einem Mitarbeiter zugeordnet werden.
REST-API
Die Daten werden über eine REST-Schnittstelle von der App entgegen genommen. Über diese Schnittstelle kann die App ebenfalls die aggregierten Daten für einen Mitarbeiter abrufen. Außerdem ist eine Schnittstelle für unser zweites ShipIt-Day Projekt, das Dashboard, vorhanden. So könnte auch das Dashboard die anwesenden Mitarbeiter anzeigen.
Durch Grails 3 kamen diese Schnittstellen praktisch umsonst bei der Entwicklung mit. Grails erkennt automatisch, ob der Client HTML oder JSON empfangen will, und sendet selbständig die richtige Antwort. Eine Funktion, die alle anwesenden und abwesenden Mitarbeiter in zwei Listen zurück gibt sieht z.B. so aus:
def index() {
List<User> usersInOffice = User.findAllByStatus(UserStatus.IN_OFFICE)
List<User> usersOutOfOffice = User.findAllByStatus(UserStatus.OUT_OF_OFFICE)
def result = [usersInOffice: usersInOffice, usersOutOfOffice: usersOutOfOffice]
respond result
}
Auch die Integration von Bootstrap gelingt auf Anhieb und macht eine solche Anwendung ohne großen Aufwand gleich um einiges hübscher
Weiter-Entwicklung
Fazit
Der ShipIt Day hat viel Spaß gemacht und für das eine oder andere Gelächter gesorgt. Die Projekte sind für zwei Tage Entwicklung ganz gut gelungen und wir freuen uns schon auf den nächsten ShipIt Day.