public static ReporteHistorialViajeV getReporteViajes(String userEmail) { boolean enabled = EnvHelper.reporteViajesEnabled(); if (!enabled) { return null; } Iterable<Viaje> iter = viajes().find("{recorrido.usuarios.email: #}", userEmail).as(Viaje.class); ReporteHistorialViajeV reporte = new ReporteHistorialViajeV(); int numeroDeViajes = 0; int numeroDeViajesGrupales = 0; int numeroDeViajesIndividuales = 0; for (Viaje v : iter) { numeroDeViajes++; if (v.recorrido.usuarios.size() == 1) { numeroDeViajesIndividuales++; } else { numeroDeViajesGrupales++; } } reporte.setNumeroDeViajes(numeroDeViajes); reporte.setNumeroDeViajesGrupales(numeroDeViajesGrupales); reporte.setNumeroDeViajesIndividuales(numeroDeViajesIndividuales); return reporte; }
// Reportes public static ReporteMetricasV getReporteMetricas(String userEmail) { boolean enabled = EnvHelper.reporteMetricasEnabled(); if (!enabled) { return null; } Iterable<Viaje> iter = viajes().find("{recorrido.usuarios.email: #}", userEmail).as(Viaje.class); ReporteMetricasV reporte = new ReporteMetricasV(); if (!iter.iterator().hasNext()) { reporte.setDistanciaTotal(0); reporte.setTiempoTotal(0); return reporte; } Pattern patternDistancia = Pattern.compile("^\\d*\\.\\d*"); Pattern patternTiempo = Pattern.compile("((\\d*)\\sdays?)?\\s?((\\d*)\\shours?)?\\s?((\\d*)\\smins?)?"); double distanciaTotal = 0; double tiempoTotal = 0; for (Viaje v : iter) { String distancia = v.distancia; String tiempo = v.tiempo; Matcher matcherDistancia = patternDistancia.matcher(distancia); if (matcherDistancia.find()) { double dist = Double.valueOf(matcherDistancia.group()); distanciaTotal += dist; } Matcher matcherTiempo = patternTiempo.matcher(tiempo); if (matcherTiempo.find()) { String days = matcherTiempo.group(2); String hour = matcherTiempo.group(4); String min = matcherTiempo.group(6); System.out.println(days + ", " + hour + ", " + min); tiempoTotal += (days != null) ? Double.valueOf(days) * 24 : 0; tiempoTotal += (hour != null) ? Double.valueOf(hour) : 0; tiempoTotal += (min != null) ? Double.valueOf(min) / 60 : 0; } System.out.println( distancia + "(" + distanciaTotal + ")" + ", " + tiempo + "(" + tiempoTotal + ")"); } reporte.setDistanciaTotal(distanciaTotal); reporte.setTiempoTotal(tiempoTotal); return reporte; }