From 3c1da43eae66216235a93166f00407388df60f59 Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu Date: Thu, 16 May 2024 18:49:53 +0200 Subject: [PATCH 1/3] add vehicle_id to /reports/scheduleAdh report --- .../api/resources/ReportsApi.java | 2 +- .../transitclock/core/reports/Reports.java | 20 ++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/transitclock/api/resources/ReportsApi.java b/app/src/main/java/org/transitclock/api/resources/ReportsApi.java index cc5c4d44d..4612fd7d0 100644 --- a/app/src/main/java/org/transitclock/api/resources/ReportsApi.java +++ b/app/src/main/java/org/transitclock/api/resources/ReportsApi.java @@ -105,7 +105,7 @@ ResponseEntity scheduleAdhReport( StandardParameters stdParameters, @Parameter(description = "Route id") @RequestParam(value = "r") String routeId, @Parameter(description = "Begin date(MM-DD-YYYY.") @RequestParam(value = "beginDate") String beginDate, - @Parameter(description = "Num days.", required = false) @RequestParam(value = "numDays", required = false) int numDays, + @Parameter(description = "Num days.") @RequestParam(value = "numDays", defaultValue = "1", required = false) int numDays, @Parameter(description = "Begin time(HH:MM)") @RequestParam(value = "beginTime") String beginTime, @Parameter(description = "End time(HH:MM)") @RequestParam(value = "endTime") String endTime, @Parameter(description = "Allowable early in mins(default 1.0)") diff --git a/app/src/main/java/org/transitclock/core/reports/Reports.java b/app/src/main/java/org/transitclock/core/reports/Reports.java index c9673ffc3..17c312375 100644 --- a/app/src/main/java/org/transitclock/core/reports/Reports.java +++ b/app/src/main/java/org/transitclock/core/reports/Reports.java @@ -251,7 +251,8 @@ public static String getScheduleAdhByStops( // + " abs(((ad.time / 1000) - (ad.scheduled_time / 1000))) AS // difference_in_seconds, \n" + " s.id AS stop_id, \n" - + " ad.stop_order AS stop_order \n" + + " ad.stop_order AS stop_order, \n" + + " ad.vehicle_id AS v_id \n" + " FROM arrivals_departures ad, stops s \n" + "WHERE " // To get stop name @@ -276,7 +277,8 @@ public static String getScheduleAdhByStops( // + " ((ad.time / 1000) - (ad.scheduled_time / 1000)) AS // difference_in_seconds, \n" + " s.id AS stop_id, \n" - + " ad.stop_order AS stop_order \n" + + " ad.stop_order AS stop_order, \n" + + " ad.vehicle_id AS v_id \n" + " FROM arrivals_departures ad, Stops s \n" + "WHERE " // To get stop name @@ -294,18 +296,18 @@ public static String getScheduleAdhByStops( + " \n" + " ORDER BY direction_id, ad.stop_order, s.name \n" + "), \n" - + "trips_late_query_v2 AS ( SELECT" - + " array_to_string(array_agg(trips_late::text || ' (' ||" - + " difference_in_seconds::text || ')' order by trips_late::text), '; ') AS" - + " trips_late, \n" + + "trips_late_query_v2 AS ( SELECT \n" + + " array_to_string(array_agg('trip: ' || trips_late::text || ' (' ||" + + " difference_in_seconds::text || '), vehicle: ' || v_id::text order by trips_late::text), '; ')" + + " AS trips_late, \n" + " stop_id, \n" + " stop_order \n" + " FROM trips_late_query_with_time \n" + " GROUP BY stop_id, stop_order \n" + " ), \n" - + " trips_early_query_v2 AS ( \n" - + " SELECT array_to_string(array_agg(trips_early::text || ' (' ||" - + " difference_in_seconds::text || ')' order by trips_early::text), '; ')" + + " trips_early_query_v2 AS ( SELECT \n" + + " array_to_string(array_agg('trip: ' || trips_early::text || ' (' ||" + + " difference_in_seconds::text || '), vehicle: ' || v_id::text order by trips_early::text), '; ')" + " AS trips_early, \n" + " stop_id, \n" + " stop_order \n" From 5be7fee559d63e7a5d4d8ee7491b609e09186132 Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu Date: Fri, 17 May 2024 10:14:54 +0200 Subject: [PATCH 2/3] add an alternative pattern for date in reports --- .../java/org/transitclock/api/resources/ReportsApi.java | 6 +++--- .../main/java/org/transitclock/core/reports/SqlUtils.java | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/transitclock/api/resources/ReportsApi.java b/app/src/main/java/org/transitclock/api/resources/ReportsApi.java index 4612fd7d0..783234095 100644 --- a/app/src/main/java/org/transitclock/api/resources/ReportsApi.java +++ b/app/src/main/java/org/transitclock/api/resources/ReportsApi.java @@ -47,8 +47,8 @@ ResponseEntity getTripsWithTravelTimes( ResponseEntity getAvlReport( StandardParameters stdParameters, @Parameter(description = "Vehicle id") @RequestParam(value = "v") String vehicleId, - @Parameter(description = "Begin date(MM-DD-YYYY.") @RequestParam(value = "beginDate") String beginDate, - @Parameter(description = "Num days.", required = false) @RequestParam(value = "numDays", required = false) int numDays, + @Parameter(description = "Begin date(MM-DD-YYYY or YYYY-MM-DD") @RequestParam(value = "beginDate") String beginDate, + @Parameter(description = "Num days.") @RequestParam(value = "numDays", defaultValue = "1", required = false) int numDays, @Parameter(description = "Begin time(HH:MM)") @RequestParam(value = "beginTime", required = false) String beginTime, @Parameter(description = "End time(HH:MM)") @RequestParam(value = "endTime", required = false) String endTime); @@ -104,7 +104,7 @@ ResponseEntity getTrips( ResponseEntity scheduleAdhReport( StandardParameters stdParameters, @Parameter(description = "Route id") @RequestParam(value = "r") String routeId, - @Parameter(description = "Begin date(MM-DD-YYYY.") @RequestParam(value = "beginDate") String beginDate, + @Parameter(description = "Begin date(MM-DD-YYYY or YYYY-MM-DD") @RequestParam(value = "beginDate") String beginDate, @Parameter(description = "Num days.") @RequestParam(value = "numDays", defaultValue = "1", required = false) int numDays, @Parameter(description = "Begin time(HH:MM)") @RequestParam(value = "beginTime") String beginTime, @Parameter(description = "End time(HH:MM)") @RequestParam(value = "endTime") String endTime, diff --git a/app/src/main/java/org/transitclock/core/reports/SqlUtils.java b/app/src/main/java/org/transitclock/core/reports/SqlUtils.java index f138336d0..7c67877d1 100644 --- a/app/src/main/java/org/transitclock/core/reports/SqlUtils.java +++ b/app/src/main/java/org/transitclock/core/reports/SqlUtils.java @@ -217,10 +217,12 @@ public static String timeRangeClause( SimpleDateFormat currentFormat = new SimpleDateFormat("MM-dd-yyyy"); SimpleDateFormat requiredFormat = new SimpleDateFormat("yyyy-MM-dd"); + if (beginDate.charAt(4) != '-') { // for two patterns MM-dd-yyyy & yyyy-MM-dd try { beginDate = requiredFormat.format(currentFormat.parse(beginDate)); } catch (ParseException e) { logger.error("Exception happened while processing time-range clause", e); + } } return " AND %s BETWEEN '%s' AND TIMESTAMP '%s' + INTERVAL '%d day' %s " .formatted(timeColumnName, beginDate, beginDate, numDays, timeSql); From c88d0c81f527c3bad1eb94e0c7371bff620868aa Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu Date: Sun, 19 May 2024 21:37:00 +0200 Subject: [PATCH 3/3] validate date format yyyy-mm-dd --- .../java/org/transitclock/core/reports/SqlUtils.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/transitclock/core/reports/SqlUtils.java b/app/src/main/java/org/transitclock/core/reports/SqlUtils.java index 7c67877d1..8a8cb4f82 100644 --- a/app/src/main/java/org/transitclock/core/reports/SqlUtils.java +++ b/app/src/main/java/org/transitclock/core/reports/SqlUtils.java @@ -217,13 +217,17 @@ public static String timeRangeClause( SimpleDateFormat currentFormat = new SimpleDateFormat("MM-dd-yyyy"); SimpleDateFormat requiredFormat = new SimpleDateFormat("yyyy-MM-dd"); - if (beginDate.charAt(4) != '-') { // for two patterns MM-dd-yyyy & yyyy-MM-dd + try { - beginDate = requiredFormat.format(currentFormat.parse(beginDate)); + if (beginDate.charAt(4) != '-') { // for two patterns MM-dd-yyyy & yyyy-MM-dd + beginDate = requiredFormat.format(currentFormat.parse(beginDate)); + } else { + requiredFormat.parse(beginDate); + } } catch (ParseException e) { logger.error("Exception happened while processing time-range clause", e); - } } + return " AND %s BETWEEN '%s' AND TIMESTAMP '%s' + INTERVAL '%d day' %s " .formatted(timeColumnName, beginDate, beginDate, numDays, timeSql); }