@golemio/pid 2.11.7-dev.1165818521 → 2.11.7-dev.1168947446

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/db/example/00_clear_test_data.sql +1 -0
  2. package/db/example/18_train_trip_with_cis_platform_code.sql +57 -0
  3. package/db/migrations/postgresql/20240205151434-cis-platform-code.js +53 -0
  4. package/db/migrations/postgresql/sqls/20240205151434-cis-platform-code-down.sql +341 -0
  5. package/db/migrations/postgresql/sqls/20240205151434-cis-platform-code-up.sql +382 -0
  6. package/dist/integration-engine/ropid-gtfs/data-access/precomputed/DeparturesRepository.js +3 -1
  7. package/dist/integration-engine/ropid-gtfs/data-access/precomputed/DeparturesRepository.js.map +1 -1
  8. package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/tasks/GenerateFilesTask.js +10 -4
  9. package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/tasks/GenerateFilesTask.js.map +1 -1
  10. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/CisStopRepository.d.ts +4 -0
  11. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/CisStopRepository.js +19 -0
  12. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/CisStopRepository.js.map +1 -0
  13. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/TripsRepository.js +9 -1
  14. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/TripsRepository.js.map +1 -1
  15. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/interfaces/TripRepositoryInterfaces.d.ts +1 -0
  16. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/mpv-net/MpvStopParser.d.ts +10 -0
  17. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/mpv-net/MpvStopParser.js +20 -0
  18. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/mpv-net/MpvStopParser.js.map +1 -0
  19. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/interfaces/MpvMessageInterfaces.d.ts +0 -1
  20. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/interfaces/TransformationInterfaces.d.ts +3 -17
  21. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/SaveDataToDBTask.d.ts +2 -1
  22. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/SaveDataToDBTask.js +11 -7
  23. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/SaveDataToDBTask.js.map +1 -1
  24. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/{PositionsTransformation.d.ts → MpvMessageTransformation.d.ts} +1 -1
  25. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/{PositionsTransformation.js → MpvMessageTransformation.js} +15 -55
  26. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/MpvMessageTransformation.js.map +1 -0
  27. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/PublicApiTripTransformation.js +2 -1
  28. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/PublicApiTripTransformation.js.map +1 -1
  29. package/dist/output-gateway/pid/helpers/DepartureBoardMapper.d.ts +7 -0
  30. package/dist/output-gateway/pid/helpers/DepartureBoardMapper.js +13 -1
  31. package/dist/output-gateway/pid/helpers/DepartureBoardMapper.js.map +1 -1
  32. package/dist/output-gateway/pid/index.d.ts +1 -0
  33. package/dist/output-gateway/pid/index.js.map +1 -1
  34. package/dist/schema-definitions/ropid-gtfs/RopidGTFSPrecomputed.js.map +1 -1
  35. package/dist/schema-definitions/ropid-gtfs/interfaces/IStopDto.d.ts +3 -0
  36. package/dist/schema-definitions/ropid-gtfs/models/StopDto.d.ts +3 -2
  37. package/dist/schema-definitions/ropid-gtfs/models/StopDto.js +7 -0
  38. package/dist/schema-definitions/ropid-gtfs/models/StopDto.js.map +1 -1
  39. package/dist/schema-definitions/ropid-gtfs/models/StopTimesDto.d.ts +1 -1
  40. package/dist/schema-definitions/ropid-gtfs/models/StopTimesDto.js +1 -1
  41. package/dist/schema-definitions/ropid-gtfs/models/StopTimesDto.js.map +1 -1
  42. package/dist/schema-definitions/ropid-gtfs/models/precomputed/DeparturesModel.d.ts +1 -0
  43. package/dist/schema-definitions/ropid-gtfs/models/precomputed/DeparturesModel.js +4 -0
  44. package/dist/schema-definitions/ropid-gtfs/models/precomputed/DeparturesModel.js.map +1 -1
  45. package/dist/schema-definitions/ropid-gtfs/models/precomputed/interfaces/IDeparturesModel.d.ts +1 -0
  46. package/dist/schema-definitions/vehicle-positions/models/CisStopModel.d.ts +11 -0
  47. package/dist/schema-definitions/vehicle-positions/models/CisStopModel.js +41 -0
  48. package/dist/schema-definitions/vehicle-positions/models/CisStopModel.js.map +1 -0
  49. package/dist/schema-definitions/vehicle-positions/models/VPTripsModel.js.map +1 -1
  50. package/dist/schema-definitions/vehicle-positions/models/interfaces/ICisStopDto.d.ts +5 -0
  51. package/dist/schema-definitions/vehicle-positions/models/interfaces/ICisStopDto.js +3 -0
  52. package/dist/schema-definitions/vehicle-positions/models/interfaces/ICisStopDto.js.map +1 -0
  53. package/dist/schema-definitions/vehicle-positions/models/interfaces/IGtfsRtTripDto.d.ts +2 -0
  54. package/dist/schema-definitions/vehicle-positions/models/views/StopTimeDelayPredictionModel.d.ts +2 -0
  55. package/dist/schema-definitions/vehicle-positions/models/views/StopTimeDelayPredictionModel.js +8 -0
  56. package/dist/schema-definitions/vehicle-positions/models/views/StopTimeDelayPredictionModel.js.map +1 -1
  57. package/dist/schema-definitions/vehicle-positions/models/views/interfaces/IStopTimeDelayPredictionDto.d.ts +2 -0
  58. package/docs/assets/pid_vp_cis_erd.jpg +0 -0
  59. package/docs/implementation_documentation.md +4 -0
  60. package/package.json +1 -1
  61. package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/PositionsTransformation.js.map +0 -1
@@ -25,6 +25,7 @@ TRUNCATE
25
25
  "vehiclepositions_metro_runs_messages",
26
26
  "vehiclepositions_regional_bus_runs_messages",
27
27
  "vehiclepositions_vehicle_descriptors",
28
+ "vehiclepositions_cis_stops",
28
29
  "ropid_departures_directions",
29
30
  "ropid_departures_presets",
30
31
  "ropid_departures_preset_logs",
@@ -0,0 +1,57 @@
1
+ -- ropidgtfs_cis_stops_actual
2
+ INSERT INTO ropidgtfs_cis_stops_actual (alt_idos_name,cis,id,jtsk_x,jtsk_y,lat,lon,platform,wheelchair_access,"zone",create_batch_id,created_at,created_by,update_batch_id,updated_at,updated_by) VALUES
3
+ ('Praha hl.n.',5457076,'142/301',-741816.7,-1043640.06,50.0830956,14.4361944,NULL,'possible','P',NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL);
4
+
5
+ -- ropidgtfs_stops_actual
6
+ INSERT INTO ropidgtfs_stops_actual (location_type,parent_station,platform_code,stop_id,stop_lat,stop_lon,stop_name,stop_url,wheelchair_boarding,zone_id,level_id,stop_code,stop_desc,stop_timezone,asw_node_id,asw_stop_id,create_batch_id,created_at,created_by,update_batch_id,updated_at,updated_by) VALUES
7
+ (0,NULL,NULL,'U142Z301',50.083096,14.436194,'Praha hl.n.',NULL,0,'P',NULL,NULL,NULL,NULL,142,301,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL);
8
+
9
+ -- ropidgtfs_stop_times_actual
10
+ INSERT INTO ropidgtfs_stop_times_actual (arrival_time,arrival_time_seconds,departure_time,departure_time_seconds,drop_off_type,pickup_type,shape_dist_traveled,stop_headsign,stop_id,stop_sequence,trip_id,timepoint,create_batch_id,created_at,created_by,update_batch_id,updated_at,updated_by) VALUES
11
+ ('11:05:00',NULL,'11:05:00',NULL,'0','0',0.0,NULL,'U1384Z301',1,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
12
+ ('11:10:30',NULL,'11:10:30',NULL,'0','0',6.965987,NULL,'U1592Z301',2,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
13
+ ('11:13:00',NULL,'11:13:30',NULL,'0','0',9.234362,NULL,'U1383Z301',3,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
14
+ ('11:15:30',NULL,'11:15:30',NULL,'0','0',10.599476,NULL,'U1553Z301',4,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
15
+ ('11:16:00',NULL,'11:16:00',NULL,'1','1',10.977712,NULL,'T55045',5,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
16
+ ('11:18:00',NULL,'11:18:00',NULL,'0','0',12.081005,NULL,'U1595Z301',6,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
17
+ ('11:21:30',NULL,'11:22:00',NULL,'0','0',15.744629,NULL,'U1554Z301',7,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
18
+ ('11:24:00',NULL,'11:24:00',NULL,'0','0',17.446669,NULL,'U1863Z301',8,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
19
+ ('11:27:00',NULL,'11:27:00',NULL,'0','0',20.199308,NULL,'U2277Z301',9,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
20
+ ('11:30:30',NULL,'11:31:00',NULL,'0','0',23.272876,NULL,'U1696Z301',10,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL);
21
+ INSERT INTO ropidgtfs_stop_times_actual (arrival_time,arrival_time_seconds,departure_time,departure_time_seconds,drop_off_type,pickup_type,shape_dist_traveled,stop_headsign,stop_id,stop_sequence,trip_id,timepoint,create_batch_id,created_at,created_by,update_batch_id,updated_at,updated_by) VALUES
22
+ ('11:34:30',NULL,'11:34:30',NULL,'0','0',26.724406,NULL,'U1928Z301',11,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
23
+ ('11:38:00',NULL,'11:38:30',NULL,'0','0',30.18869,NULL,'U2142Z301',12,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
24
+ ('11:40:00',NULL,'11:40:00',NULL,'1','1',31.640481,NULL,'T54985',13,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
25
+ ('11:41:30',NULL,'11:41:30',NULL,'0','0',33.55939,NULL,'U1175Z301',14,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
26
+ ('11:45:00',NULL,'11:45:30',NULL,'0','0',36.897057,NULL,'U461Z301',15,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
27
+ ('11:48:00',NULL,'11:48:00',NULL,'0','0',39.372307,NULL,'U1069Z301',16,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
28
+ ('11:50:30',NULL,'11:51:00',NULL,'0','0',41.600968,NULL,'U453Z301',17,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
29
+ ('11:53:30',NULL,'11:53:30',NULL,'0','0',44.317898,NULL,'U2781Z301',18,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
30
+ ('11:57:00',NULL,'11:57:00',NULL,'0','0',46.670035,NULL,'U680Z301',19,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
31
+ ('12:00:00',NULL,'12:00:00',NULL,'0','0',48.583367,NULL,'U463Z301',20,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL);
32
+ INSERT INTO ropidgtfs_stop_times_actual (arrival_time,arrival_time_seconds,departure_time,departure_time_seconds,drop_off_type,pickup_type,shape_dist_traveled,stop_headsign,stop_id,stop_sequence,trip_id,timepoint,create_batch_id,created_at,created_by,update_batch_id,updated_at,updated_by) VALUES
33
+ ('12:03:00',NULL,'12:03:00',NULL,'1','1',50.333377,NULL,'T57073',21,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL),
34
+ ('12:05:00',NULL,'12:05:00',NULL,'0','0',51.193462,NULL,'U142Z301',22,'1309_2530_231210',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL);
35
+
36
+
37
+ -- ropidgtfs_routes_actual
38
+ INSERT INTO ropidgtfs_routes_actual (agency_id,is_night,route_color,route_desc,route_id,route_long_name,route_short_name,route_text_color,route_type,route_url,is_regional,is_substitute_transport,create_batch_id,created_at,created_by,update_batch_id,updated_at,updated_by) VALUES
39
+ ('99','0','251E62',NULL,'L1309','Lysá nad Labem - Praha - Říčany - Strančice - Čerčany - Benešov u Prahy','S9','FFFFFF',2,'https://cz/linka/S9','1','0',NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL);
40
+
41
+
42
+ -- ropidgtfs_trips_actual
43
+ INSERT INTO ropidgtfs_trips_actual (bikes_allowed,block_id,direction_id,exceptional,route_id,service_id,shape_id,trip_headsign,trip_id,wheelchair_accessible,create_batch_id,created_at,created_by,update_batch_id,updated_at,updated_by,trip_operation_type,trip_short_name) VALUES
44
+ (1,NULL,0,0,'L1309','1111111-2','L1249V1','Praha hl.n.','1309_2530_231210',1,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'2024-02-06 05:23:14.828',NULL,NULL,'Os 2530');
45
+
46
+
47
+ -- vehiclepositions_trips
48
+ INSERT INTO vehiclepositions_trips (cis_line_id,cis_trip_number,run_number,cis_line_short_name,created_at,gtfs_route_id,gtfs_route_short_name,gtfs_trip_id,id,updated_at,start_cis_stop_id,start_cis_stop_platform_code,start_time,start_timestamp,vehicle_type_id,wheelchair_accessible,create_batch_id,created_by,update_batch_id,updated_by,agency_name_scheduled,origin_route_name,agency_name_real,vehicle_registration_number,gtfs_trip_headsign,start_asw_stop_id,gtfs_route_type,gtfs_block_id,last_position_id,is_canceled,end_timestamp,gtfs_trip_short_name,last_position_context,internal_run_number,internal_route_name,gtfs_date,provider_source_type,gtfs_direction_id,gtfs_shape_id) VALUES
49
+ ('none',2530,NULL,'S9',concat(CURRENT_DATE,'T10:05:52Z')::timestamp,'L1309','S9','1309_2530_231210',concat(CURRENT_DATE,'T10:05:00Z_2530'),concat(CURRENT_DATE,'T11:07:25Z')::timestamp,5455106,NULL,'11:05:00',concat(CURRENT_DATE,'T10:05:00Z')::timestamp,0,true,NULL,NULL,NULL,NULL,'ČESKÉ DRÁHY',NULL,NULL,NULL,'Praha hl.n.',NULL,2,NULL,2679563888,false,concat(CURRENT_DATE,'T11:05:00Z')::timestamp,'Os 2530',NULL,NULL,NULL,CURRENT_DATE,'1',0,'L1249V1');
50
+
51
+ -- vehiclepositions_positions
52
+ INSERT INTO vehiclepositions_positions (created_at,delay,delay_stop_arrival,delay_stop_departure,next_stop_id,shape_dist_traveled,is_canceled,lat,lng,origin_time,origin_timestamp,is_tracked,trips_id,create_batch_id,created_by,update_batch_id,updated_at,updated_by,id,bearing,cis_last_stop_id,cis_last_stop_sequence,last_stop_id,last_stop_sequence,next_stop_sequence,speed,last_stop_arrival_time,last_stop_departure_time,next_stop_arrival_time,next_stop_departure_time,asw_last_stop_id,state_process,state_position,this_stop_id,this_stop_sequence,tcp_event,last_stop_headsign,last_stop_name,next_stop_name,this_stop_name,valid_to,scheduled_timestamp) VALUES
53
+ (concat(CURRENT_DATE,'T11:06:05Z')::timestamp,35,60,NULL,'U142Z301',51.193,false,50.0829926,14.4362745,'12:05:35',concat(CURRENT_DATE,'T11:05:35Z')::timestamp,true,concat(CURRENT_DATE,'T10:05:00Z_2530'),NULL,NULL,NULL,'2024-02-06 12:06:06.762',NULL,2679563888,25,5457076,19,'U142Z301',22,22,NULL,concat(CURRENT_DATE,'T11:05:00Z')::timestamp,concat(CURRENT_DATE,'T11:05:00Z')::timestamp,concat(CURRENT_DATE,'T11:05:00Z')::timestamp,concat(CURRENT_DATE,'T11:05:00Z')::timestamp,NULL,'processed','at_stop','U142Z301',22,NULL,NULL,'Praha hl.n.',NULL,NULL,NULL,NULL);
54
+
55
+ -- vehiclepositions_cis_stops
56
+ insert into vehiclepositions_cis_stops (rt_trip_id, cis_stop_group_id, cis_stop_platform_code, created_at, updated_at) VALUES
57
+ (concat(CURRENT_DATE,'T10:05:00Z_2530'), 5457076, '1A/1', now(), now());
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var dbm;
4
+ var type;
5
+ var seed;
6
+ var fs = require('fs');
7
+ var path = require('path');
8
+ var Promise;
9
+
10
+ /**
11
+ * We receive the dbmigrate dependency from dbmigrate initially.
12
+ * This enables us to not have to rely on NODE_PATH.
13
+ */
14
+ exports.setup = function(options, seedLink) {
15
+ dbm = options.dbmigrate;
16
+ type = dbm.dataType;
17
+ seed = seedLink;
18
+ Promise = options.Promise;
19
+ };
20
+
21
+ exports.up = function(db) {
22
+ var filePath = path.join(__dirname, 'sqls', '20240205151434-cis-platform-code-up.sql');
23
+ return new Promise( function( resolve, reject ) {
24
+ fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
25
+ if (err) return reject(err);
26
+ console.log('received data: ' + data);
27
+
28
+ resolve(data);
29
+ });
30
+ })
31
+ .then(function(data) {
32
+ return db.runSql(data);
33
+ });
34
+ };
35
+
36
+ exports.down = function(db) {
37
+ var filePath = path.join(__dirname, 'sqls', '20240205151434-cis-platform-code-down.sql');
38
+ return new Promise( function( resolve, reject ) {
39
+ fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
40
+ if (err) return reject(err);
41
+ console.log('received data: ' + data);
42
+
43
+ resolve(data);
44
+ });
45
+ })
46
+ .then(function(data) {
47
+ return db.runSql(data);
48
+ });
49
+ };
50
+
51
+ exports._meta = {
52
+ "version": 1
53
+ };
@@ -0,0 +1,341 @@
1
+ CREATE OR REPLACE PROCEDURE vehiclepositions_data_retention(inout numberOfRows int, in dataRetentionMinutes int)
2
+ LANGUAGE plpgsql
3
+ SET search_path FROM CURRENT
4
+ AS $procedure$
5
+ declare
6
+ idsForDelete varchar(255)[];
7
+ begin
8
+ select array_agg(t.id) from vehiclepositions_trips t
9
+ left join vehiclepositions_positions p on
10
+ p.id = t.last_position_id
11
+ where
12
+ p.valid_to < (NOW() - (dataRetentionMinutes || ' minutes')::interval)
13
+ or (gtfs_trip_id is null and p.created_at < NOW() - (dataRetentionMinutes || ' minutes')::interval) -- entries with valid to is null
14
+ into idsForDelete;
15
+
16
+ INSERT INTO vehiclepositions_trips_history
17
+ select * from vehiclepositions_trips where id = ANY(idsForDelete)
18
+ on conflict do nothing;
19
+
20
+ INSERT INTO vehiclepositions_positions_history
21
+ select * from vehiclepositions_positions where trips_id = ANY(idsForDelete)
22
+ on conflict do nothing;
23
+
24
+ insert into vehiclepositions_stop_times_history (
25
+ rt_trip_id,
26
+ gtfs_date,
27
+ gtfs_trip_id,
28
+ gtfs_direction_id,
29
+ gtfs_route_short_name,
30
+ gtfs_route_type,
31
+ run_number,
32
+ vehicle_registration_number,
33
+ gtfs_stop_id,
34
+ gtfs_stop_sequence,
35
+ current_stop_arrival,
36
+ current_stop_departure,
37
+ current_stop_arr_delay,
38
+ current_stop_dep_delay,
39
+ created_at,
40
+ updated_at,
41
+ origin_route_name
42
+ )
43
+ select
44
+ rt_trip.id,
45
+ rt_trip.gtfs_date,
46
+ rt_trip.gtfs_trip_id,
47
+ rt_trip.gtfs_direction_id,
48
+ rt_trip.gtfs_route_short_name,
49
+ rt_trip.gtfs_route_type,
50
+ rt_trip.run_number,
51
+ rt_trip.vehicle_registration_number,
52
+ stop_time.stop_id,
53
+ stop_time.stop_sequence,
54
+ stop_time.stop_arrival,
55
+ stop_time.stop_departure,
56
+ stop_time.stop_arr_delay,
57
+ stop_time.stop_dep_delay,
58
+ now(),
59
+ now(),
60
+ rt_trip.origin_route_name
61
+ from
62
+ vehiclepositions_trips rt_trip
63
+ join
64
+ v_vehiclepositions_past_stop_times stop_time on stop_time.rt_trip_id = rt_trip.id
65
+ where
66
+ rt_trip.id = ANY(idsForDelete)
67
+ on conflict do nothing;
68
+
69
+
70
+ delete from vehiclepositions_positions where trips_id = ANY(idsForDelete);
71
+ delete from vehiclepositions_trips where id = ANY(idsForDelete);
72
+
73
+ select array_length(idsForDelete,1) into numberOfRows;
74
+ end;
75
+ $procedure$;
76
+
77
+
78
+ drop function get_departures;
79
+ create function get_departures (
80
+ stopsIds varchar,
81
+ mode int,
82
+ dateDepartureBetweenStart timestamptz,
83
+ dateDepartureBetweenEnd timestamptz,
84
+ isNegativeMinutesBefore int,
85
+ dateCanceledDepartureBetweenStart timestamptz,
86
+ dateCanceledDepartureBetweenEnd timestamptz,
87
+ airconditioninfoenabled int
88
+ )
89
+ returns table (
90
+ departure_datetime_real timestamptz,
91
+ arrival_datetime_real timestamptz,
92
+ stop_sequence int2,
93
+ stop_headsign varchar(70),
94
+ arrival_datetime timestamptz,
95
+ departure_datetime timestamptz,
96
+ stop_id varchar(25),
97
+ platform_code varchar(10),
98
+ wheelchair_boarding int2,
99
+ min_stop_sequence int2,
100
+ max_stop_sequence int2,
101
+ trip_id varchar(50),
102
+ trip_headsign varchar(100),
103
+ trip_short_name varchar(30),
104
+ wheelchair_accessible int2,
105
+ route_short_name varchar(50),
106
+ route_type int2,
107
+ route_id varchar(20),
108
+ is_night bpchar(1),
109
+ is_regional bpchar(1),
110
+ is_substitute_transport bpchar(1),
111
+ next_stop_id varchar(30),
112
+ delay_seconds int4,
113
+ real_wheelchair_accessible bool,
114
+ is_canceled bool,
115
+ "trip.gtfs_trip_short_name" varchar(255),
116
+ "trip.gtfs_date" date,
117
+ "trip.internal_route_name" varchar(50),
118
+ "trip.internal_run_number" int4,
119
+ "trip.last_position.last_stop_id" varchar(255),
120
+ "trip.last_position.last_stop_sequence" int4,
121
+ "trip.last_position.last_stop_name" varchar(255),
122
+ "trip.last_position.this_stop_sequence" int4,
123
+ "trip.vehicle_descriptor.is_air_conditioned" bool,
124
+ delay_minutes int4,
125
+ is_delay_available bool
126
+ )
127
+ language SQL
128
+ set search_path from current
129
+ as $$
130
+ select
131
+ departure_boards_detailed."computed.departure_datetime_real",
132
+ departure_boards_detailed."computed.arrival_datetime_real",
133
+ departure_boards_detailed."ropidgtfs_precomputed_departures.stop_sequence",
134
+ departure_boards_detailed."ropidgtfs_precomputed_departures.stop_headsign",
135
+ departure_boards_detailed."ropidgtfs_precomputed_departures.arrival_datetime",
136
+ departure_boards_detailed."ropidgtfs_precomputed_departures.departure_datetime",
137
+ departure_boards_detailed."ropidgtfs_precomputed_departures.stop_id",
138
+ departure_boards_detailed."ropidgtfs_precomputed_departures.platform_code",
139
+ departure_boards_detailed."ropidgtfs_precomputed_departures.wheelchair_boarding",
140
+ departure_boards_detailed."ropidgtfs_precomputed_departures.min_stop_sequence",
141
+ departure_boards_detailed."ropidgtfs_precomputed_departures.max_stop_sequence",
142
+ departure_boards_detailed."ropidgtfs_precomputed_departures.trip_id",
143
+ departure_boards_detailed."ropidgtfs_precomputed_departures.trip_headsign",
144
+ departure_boards_detailed."ropidgtfs_precomputed_departures.trip_short_name",
145
+ departure_boards_detailed."ropidgtfs_precomputed_departures.wheelchair_accessible",
146
+ departure_boards_detailed."ropidgtfs_precomputed_departures.route_short_name",
147
+ departure_boards_detailed."ropidgtfs_precomputed_departures.route_type",
148
+ departure_boards_detailed."ropidgtfs_precomputed_departures.route_id",
149
+ departure_boards_detailed."ropidgtfs_precomputed_departures.is_night",
150
+ departure_boards_detailed."ropidgtfs_precomputed_departures.is_regional",
151
+ departure_boards_detailed."ropidgtfs_precomputed_departures.is_substitute_transport",
152
+ departure_boards_detailed."ropidgtfs_precomputed_departures.next_stop_id",
153
+ departure_boards_detailed."delay_seconds",
154
+ departure_boards_detailed."real_wheelchair_accessible",
155
+ departure_boards_detailed."is_canceled",
156
+ departure_boards_detailed."trip.gtfs_trip_short_name",
157
+ departure_boards_detailed."trip.gtfs_date",
158
+ departure_boards_detailed."trip.internal_route_name",
159
+ departure_boards_detailed."trip.internal_run_number",
160
+ departure_boards_detailed."trip.last_position.last_stop_id",
161
+ departure_boards_detailed."trip.last_position.last_stop_sequence",
162
+ departure_boards_detailed."trip.last_position.last_stop_name",
163
+ departure_boards_detailed."trip.last_position.this_stop_sequence",
164
+ case when airconditioninfoenabled = 1 then departure_boards_detailed."trip.vehicle_descriptor.is_air_conditioned" else NULL end,
165
+ TRUNC(departure_boards_detailed."trip.last_position.delay"::DECIMAL / 60, 0)::int as "delay_minutes",
166
+ case when departure_boards_detailed."trip.last_position.delay" is null then false else true end as "is_delay_available"
167
+ from (
168
+ select
169
+ ("departure_datetime"
170
+ + MAKE_INTERVAL(secs => (case when "trip.last_position.delay" is null then 0 else "trip.last_position.delay" end))
171
+ - case when (MAKE_INTERVAL(secs => (case when "trip.last_position.delay" is null then 0 else "trip.last_position.delay" end)) > MAKE_INTERVAL())
172
+ then least (
173
+ MAKE_INTERVAL(secs => (case when "trip.last_position.delay" is null then 0 else "trip.last_position.delay" end)),
174
+ ("departure_datetime" - "arrival_datetime")::interval
175
+ )
176
+ else MAKE_INTERVAL()
177
+ end
178
+ ) "computed.departure_datetime_real",
179
+ "arrival_datetime" + MAKE_INTERVAL(secs => (
180
+ CASE WHEN "trip.last_position.delay" IS NULL THEN 0 ELSE "trip.last_position.delay" end
181
+ )) "computed.arrival_datetime_real",
182
+ "ropidgtfs_precomputed_departures"."stop_sequence" as "ropidgtfs_precomputed_departures.stop_sequence",
183
+ "ropidgtfs_precomputed_departures"."stop_headsign" as "ropidgtfs_precomputed_departures.stop_headsign",
184
+ "ropidgtfs_precomputed_departures"."pickup_type" as "ropidgtfs_precomputed_departures.pickup_type",
185
+ "ropidgtfs_precomputed_departures"."drop_off_type" as "ropidgtfs_precomputed_departures.drop_off_type",
186
+ "ropidgtfs_precomputed_departures"."arrival_time" as "ropidgtfs_precomputed_departures.arrival_time",
187
+ "ropidgtfs_precomputed_departures"."arrival_datetime" as "ropidgtfs_precomputed_departures.arrival_datetime",
188
+ "ropidgtfs_precomputed_departures"."departure_time" as "ropidgtfs_precomputed_departures.departure_time",
189
+ "ropidgtfs_precomputed_departures"."departure_datetime" as "ropidgtfs_precomputed_departures.departure_datetime",
190
+ "ropidgtfs_precomputed_departures"."stop_id" as "ropidgtfs_precomputed_departures.stop_id",
191
+ "ropidgtfs_precomputed_departures"."stop_name" as "ropidgtfs_precomputed_departures.stop_name",
192
+ "ropidgtfs_precomputed_departures"."platform_code" as "ropidgtfs_precomputed_departures.platform_code",
193
+ "ropidgtfs_precomputed_departures"."wheelchair_boarding" as "ropidgtfs_precomputed_departures.wheelchair_boarding",
194
+ "ropidgtfs_precomputed_departures"."min_stop_sequence" as "ropidgtfs_precomputed_departures.min_stop_sequence",
195
+ "ropidgtfs_precomputed_departures"."max_stop_sequence" as "ropidgtfs_precomputed_departures.max_stop_sequence",
196
+ "ropidgtfs_precomputed_departures"."trip_id" as "ropidgtfs_precomputed_departures.trip_id",
197
+ "ropidgtfs_precomputed_departures"."trip_headsign" as "ropidgtfs_precomputed_departures.trip_headsign",
198
+ "ropidgtfs_precomputed_departures"."trip_short_name" as "ropidgtfs_precomputed_departures.trip_short_name",
199
+ "ropidgtfs_precomputed_departures"."wheelchair_accessible" as "ropidgtfs_precomputed_departures.wheelchair_accessible",
200
+ "ropidgtfs_precomputed_departures"."service_id" as "ropidgtfs_precomputed_departures.service_id",
201
+ "ropidgtfs_precomputed_departures"."date" as "ropidgtfs_precomputed_departures.date",
202
+ "ropidgtfs_precomputed_departures"."route_short_name" as "ropidgtfs_precomputed_departures.route_short_name",
203
+ "ropidgtfs_precomputed_departures"."route_type" as "ropidgtfs_precomputed_departures.route_type",
204
+ "ropidgtfs_precomputed_departures"."route_id" as "ropidgtfs_precomputed_departures.route_id",
205
+ "ropidgtfs_precomputed_departures"."is_night" as "ropidgtfs_precomputed_departures.is_night",
206
+ "ropidgtfs_precomputed_departures"."is_regional" as "ropidgtfs_precomputed_departures.is_regional",
207
+ "ropidgtfs_precomputed_departures"."is_substitute_transport" as "ropidgtfs_precomputed_departures.is_substitute_transport",
208
+ "ropidgtfs_precomputed_departures"."next_stop_sequence" as "ropidgtfs_precomputed_departures.next_stop_sequence",
209
+ "ropidgtfs_precomputed_departures"."next_stop_id" as "ropidgtfs_precomputed_departures.next_stop_id",
210
+ "ropidgtfs_precomputed_departures"."last_stop_sequence" as "ropidgtfs_precomputed_departures.last_stop_sequence",
211
+ "ropidgtfs_precomputed_departures"."last_stop_id" as "ropidgtfs_precomputed_departures.last_stop_id",
212
+ x.*
213
+ from
214
+ "ropidgtfs_precomputed_departures" as "ropidgtfs_precomputed_departures"
215
+ left outer join v_vehiclepositions_trip_position_vehicle_info as x on
216
+ "ropidgtfs_precomputed_departures"."trip_id" = x."trip.gtfs_trip_id"
217
+ ) departure_boards_detailed
218
+ where
219
+ departure_boards_detailed."ropidgtfs_precomputed_departures.stop_id" = ANY(STRING_TO_ARRAY(stopsIds,','))
220
+ and (
221
+ (
222
+ (
223
+ (mode = 1 and departure_boards_detailed."computed.arrival_datetime_real" between dateDepartureBetweenStart and dateDepartureBetweenEnd)
224
+ or (mode != 1 and departure_boards_detailed."computed.departure_datetime_real" between dateDepartureBetweenStart and dateDepartureBetweenEnd)
225
+ )
226
+ and
227
+ (
228
+ 0 = isNegativeMinutesBefore
229
+ or ( -- pro záporné minutes before
230
+ departure_boards_detailed."ropidgtfs_precomputed_departures.stop_sequence" >= departure_boards_detailed."trip.last_position.last_stop_sequence"
231
+ or departure_boards_detailed."trip.last_position.last_stop_sequence" IS null
232
+ )
233
+ )
234
+
235
+ )
236
+ or (
237
+ departure_boards_detailed."trip.is_canceled" = true
238
+ and
239
+ (
240
+ (mode = 1 and departure_boards_detailed."computed.arrival_datetime_real" between dateCanceledDepartureBetweenStart and dateCanceledDepartureBetweenEnd)
241
+ or (mode != 1 and departure_boards_detailed."computed.departure_datetime_real" between dateCanceledDepartureBetweenStart and dateCanceledDepartureBetweenEnd)
242
+ )
243
+ )
244
+ ) and
245
+ (
246
+ (mode = 1 and (departure_boards_detailed."ropidgtfs_precomputed_departures.pickup_type" != '1' and departure_boards_detailed."ropidgtfs_precomputed_departures.stop_sequence" != departure_boards_detailed."ropidgtfs_precomputed_departures.max_stop_sequence")) -- mode default/departures
247
+ or (mode=2 and (departure_boards_detailed."ropidgtfs_precomputed_departures.drop_off_type" != '1' and departure_boards_detailed."ropidgtfs_precomputed_departures.stop_sequence" != departure_boards_detailed."ropidgtfs_precomputed_departures.min_stop_sequence")) -- mode arrivals
248
+ or (mode=3 and (departure_boards_detailed."ropidgtfs_precomputed_departures.pickup_type" != '1')) -- mode mixed
249
+ );
250
+ $$;
251
+
252
+ drop view v_vehiclepositions_stop_time_delay_prediction;
253
+ create view v_vehiclepositions_stop_time_delay_prediction as
254
+ with recursive stop_times as (
255
+ select
256
+ rst.trip_id,
257
+ vt.provider_source_type,
258
+ vp.delay,
259
+ coalesce(vp.last_stop_sequence, 1) as initial_stop_sequence,
260
+ vp.state_position,
261
+ rst.stop_sequence,
262
+ rst.stop_id,
263
+ rst.computed_dwell_time_seconds,
264
+ case when vp.last_stop_sequence is null
265
+ then vp.delay
266
+ else vp.delay_stop_arrival
267
+ end as arrival_delay_seconds,
268
+ case when vp.last_stop_sequence is null
269
+ then predict_delay_seconds(vp.delay, rst.computed_dwell_time_seconds, vt.provider_source_type)
270
+ when vp.state_position = 'at_stop'
271
+ then case when vt.provider_source_type = '1' then greatest(0, vp.delay) else vp.delay end
272
+ else vp.delay_stop_departure
273
+ end as departure_delay_seconds
274
+ from ropidgtfs_stop_times rst
275
+ inner join vehiclepositions_trips vt on vt.gtfs_trip_id = rst.trip_id
276
+ inner join vehiclepositions_positions vp on vp.id = vt.last_position_id
277
+ and (vp.valid_to is null or vp.valid_to >= now())
278
+ where
279
+ vt.gtfs_trip_id is not null
280
+ and rst.stop_sequence = coalesce(vp.last_stop_sequence, 1)
281
+ union all
282
+ select
283
+ rst.trip_id,
284
+ previous_row.provider_source_type,
285
+ previous_row.delay,
286
+ previous_row.initial_stop_sequence,
287
+ previous_row.state_position,
288
+ rst.stop_sequence,
289
+ rst.stop_id,
290
+ rst.computed_dwell_time_seconds,
291
+ case when rst.stop_sequence - previous_row.initial_stop_sequence = 1 and previous_row.state_position != 'at_stop'
292
+ then previous_row.delay
293
+ else previous_row.departure_delay_seconds
294
+ end as arrival_delay_seconds,
295
+ predict_delay_seconds(
296
+ case when rst.stop_sequence - previous_row.initial_stop_sequence = 1 and previous_row.state_position != 'at_stop' then previous_row.delay else previous_row.departure_delay_seconds end,
297
+ rst.computed_dwell_time_seconds,
298
+ previous_row.provider_source_type
299
+ ) as departure_delay_seconds
300
+ from stop_times previous_row
301
+ inner join ropidgtfs_stop_times rst on rst.trip_id = previous_row.trip_id and rst.stop_sequence = previous_row.stop_sequence + 1
302
+ )
303
+ select trip_id, stop_sequence, stop_id, arrival_delay_seconds, departure_delay_seconds
304
+ from stop_times
305
+ order by trip_id, stop_sequence;
306
+
307
+ comment on view v_vehiclepositions_stop_time_delay_prediction is '
308
+ This view contains the predicted delay of a vehicle at each stop.
309
+ ';
310
+
311
+
312
+ CREATE OR REPLACE PROCEDURE ropidgtfs_preparetmptables()
313
+ LANGUAGE plpgsql
314
+ SET search_path from CURRENT
315
+ AS $procedure$
316
+ begin
317
+ CALL ropidgtfs_cleanTmpTables();
318
+ CALL ropidgtfs_cleanOldTables();
319
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_agency');
320
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_calendar');
321
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_calendar_dates');
322
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_shapes');
323
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_stop_times');
324
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_stops');
325
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_routes');
326
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_route_sub_agencies');
327
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_trips');
328
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_cis_stops');
329
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_cis_stop_groups');
330
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_run_numbers');
331
+ CALL ropidgtfs_prepareTmpTable('ropidgtfs_ois');
332
+ alter table ropidgtfs_stop_times_tmp drop computed_dwell_time_seconds;
333
+ alter table ropidgtfs_stop_times_tmp add computed_dwell_time_seconds int2 NOT NULL GENERATED ALWAYS AS (calculate_dwell_time_seconds(arrival_time, departure_time)) stored;
334
+ end
335
+ $procedure$
336
+ ;
337
+
338
+
339
+ alter table ropidgtfs_stops drop column computed_cis_stop_id;
340
+ alter table ropidgtfs_precomputed_departures drop column cis_stop_group_id;
341
+ drop table vehiclepositions_cis_stops;