@golemio/pid 2.12.10-dev.1265884842 → 2.12.10-dev.1266077057
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.
- package/db/example/12_metro_line_A_gtfs_trips.sql +1 -2
- package/db/migrations/postgresql/20240418133218-detailed-stop-times.js +53 -0
- package/db/migrations/postgresql/20240424122841-delay-at-past-stops-release-part-1.js +53 -0
- package/db/migrations/postgresql/sqls/20240418133218-detailed-stop-times-down.sql +263 -0
- package/db/migrations/postgresql/sqls/20240418133218-detailed-stop-times-up.sql +174 -0
- package/db/migrations/postgresql/sqls/20240424122841-delay-at-past-stops-release-part-1-down.sql +1 -0
- package/db/migrations/postgresql/sqls/20240424122841-delay-at-past-stops-release-part-1-up.sql +98 -0
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/tasks/GenerateFilesTask.d.ts +1 -0
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/tasks/GenerateFilesTask.js +30 -12
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/tasks/GenerateFilesTask.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/TripsRepository.d.ts +0 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/TripsRepository.js +4 -21
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/TripsRepository.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/cache/PublicStopTimeCacheRepository.d.ts +4 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/cache/PublicStopTimeCacheRepository.js +39 -2
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/cache/PublicStopTimeCacheRepository.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/RefreshPublicStopTimeCacheTask.js +3 -0
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/RefreshPublicStopTimeCacheTask.js.map +1 -1
- package/dist/schema-definitions/vehicle-positions/models/views/PublicStopTimeModel.d.ts +3 -0
- package/dist/schema-definitions/vehicle-positions/models/views/PublicStopTimeModel.js +12 -0
- package/dist/schema-definitions/vehicle-positions/models/views/PublicStopTimeModel.js.map +1 -1
- package/dist/schema-definitions/vehicle-positions/models/views/index.d.ts +0 -1
- package/dist/schema-definitions/vehicle-positions/models/views/index.js +0 -1
- package/dist/schema-definitions/vehicle-positions/models/views/index.js.map +1 -1
- package/dist/schema-definitions/vehicle-positions/models/views/interfaces/IPublicStopTimeDto.d.ts +3 -0
- package/dist/schema-definitions/vehicle-positions/redis/interfaces/IPublicStopTimeCacheDto.d.ts +3 -0
- package/dist/schema-definitions/vehicle-positions/redis/schemas/PublicStopTimeCacheDtoSchema.js +26 -1
- package/dist/schema-definitions/vehicle-positions/redis/schemas/PublicStopTimeCacheDtoSchema.js.map +1 -1
- package/package.json +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/views/StopTimeDelayPredictionRepository.d.ts +0 -7
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/views/StopTimeDelayPredictionRepository.js +0 -19
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/views/StopTimeDelayPredictionRepository.js.map +0 -1
- package/dist/schema-definitions/vehicle-positions/models/views/StopTimeDelayPredictionModel.d.ts +0 -13
- package/dist/schema-definitions/vehicle-positions/models/views/StopTimeDelayPredictionModel.js +0 -41
- package/dist/schema-definitions/vehicle-positions/models/views/StopTimeDelayPredictionModel.js.map +0 -1
- package/dist/schema-definitions/vehicle-positions/models/views/interfaces/IStopTimeDelayPredictionDto.d.ts +0 -9
- package/dist/schema-definitions/vehicle-positions/models/views/interfaces/IStopTimeDelayPredictionDto.js +0 -3
- package/dist/schema-definitions/vehicle-positions/models/views/interfaces/IStopTimeDelayPredictionDto.js.map +0 -1
|
@@ -97,8 +97,7 @@ INSERT INTO ropidgtfs_run_numbers_actual (route_id,run_number,service_id,trip_id
|
|
|
97
97
|
('L991',5,'1111111-1','991_78_220321',3,NULL,NULL,'2022-10-24 10:23:04.722+02',NULL,NULL,'2022-10-24 10:23:04.722+02',NULL),
|
|
98
98
|
('L991',5,'1111111-1','991_124_201230',3,NULL,NULL,'2022-10-24 10:23:04.722+02',NULL,NULL,'2022-10-24 10:23:04.722+02',NULL),
|
|
99
99
|
('L991',8,'1111111-3','991_124_201230',3,NULL,NULL,'2022-10-24 10:23:04.722+02',NULL,NULL,'2022-10-24 10:23:04.722+02',NULL),
|
|
100
|
-
('L991',9,'1111111-1','991_294_220901',3,NULL,NULL,'2022-10-24 10:23:04.722+02',NULL,NULL,'2022-10-24 10:23:04.722+02',NULL)
|
|
101
|
-
('L991',17,'1111111-3','991_294_220901',3,NULL,NULL,'2022-10-24 10:23:04.722+02',NULL,NULL,'2022-10-24 10:23:04.722+02',NULL);
|
|
100
|
+
('L991',9,'1111111-1','991_294_220901',3,NULL,NULL,'2022-10-24 10:23:04.722+02',NULL,NULL,'2022-10-24 10:23:04.722+02',NULL);
|
|
102
101
|
|
|
103
102
|
WITH init_values AS (
|
|
104
103
|
SELECT CAST(current_date - INTERVAL '1 day' + INTERVAL '10 hour' AS TIMESTAMP WITH TIME ZONE) AT TIME ZONE 'Europe/Prague' AS origin_datetime
|
|
@@ -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', '20240418133218-detailed-stop-times-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', '20240418133218-detailed-stop-times-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,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', '20240424122841-delay-at-past-stops-release-part-1-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', '20240424122841-delay-at-past-stops-release-part-1-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,263 @@
|
|
|
1
|
+
drop view v_public_vehiclepositions_combined_stop_times;
|
|
2
|
+
|
|
3
|
+
drop view v_public_vehiclepositions_future_stop_times;
|
|
4
|
+
|
|
5
|
+
drop view v_public_vehiclepositions_past_stop_times;
|
|
6
|
+
|
|
7
|
+
-- history view
|
|
8
|
+
create view v_public_vehiclepositions_past_stop_times as
|
|
9
|
+
select
|
|
10
|
+
trips_id as rt_trip_id,
|
|
11
|
+
last_stop_sequence as stop_sequence,
|
|
12
|
+
min(delay_stop_arrival) as stop_arr_delay,
|
|
13
|
+
max(delay_stop_departure) as stop_dep_delay
|
|
14
|
+
from
|
|
15
|
+
(
|
|
16
|
+
select
|
|
17
|
+
trips_id,
|
|
18
|
+
last_stop_sequence,
|
|
19
|
+
delay_stop_arrival,
|
|
20
|
+
delay_stop_departure,
|
|
21
|
+
row_number() over seq as rn
|
|
22
|
+
from
|
|
23
|
+
vehiclepositions_positions rt_position
|
|
24
|
+
where
|
|
25
|
+
(
|
|
26
|
+
delay_stop_arrival is not null
|
|
27
|
+
or delay_stop_departure is not null
|
|
28
|
+
)
|
|
29
|
+
and state_position in ('on_track', 'at_stop', 'after_track') window seq as (
|
|
30
|
+
partition by trips_id,
|
|
31
|
+
last_stop_sequence,
|
|
32
|
+
state_position
|
|
33
|
+
order by
|
|
34
|
+
id
|
|
35
|
+
)
|
|
36
|
+
) as sub
|
|
37
|
+
where
|
|
38
|
+
rn = 1
|
|
39
|
+
group by
|
|
40
|
+
trips_id,
|
|
41
|
+
last_stop_sequence
|
|
42
|
+
order by
|
|
43
|
+
trips_id,
|
|
44
|
+
last_stop_sequence;
|
|
45
|
+
|
|
46
|
+
-- prediction view
|
|
47
|
+
create view v_public_vehiclepositions_future_stop_times as with recursive stop_times as (
|
|
48
|
+
select
|
|
49
|
+
rst.trip_id,
|
|
50
|
+
vt.id as trips_id,
|
|
51
|
+
vt.provider_source_type,
|
|
52
|
+
vp.delay,
|
|
53
|
+
coalesce(vp.last_stop_sequence, 1) as initial_stop_sequence,
|
|
54
|
+
vp.state_position,
|
|
55
|
+
rst.stop_sequence,
|
|
56
|
+
rst.computed_dwell_time_seconds,
|
|
57
|
+
case
|
|
58
|
+
when vp.last_stop_sequence is null then vp.delay
|
|
59
|
+
else vp.delay_stop_arrival
|
|
60
|
+
end as arrival_delay_seconds,
|
|
61
|
+
case
|
|
62
|
+
when vp.last_stop_sequence is null then predict_delay_seconds(
|
|
63
|
+
vp.delay,
|
|
64
|
+
rst.computed_dwell_time_seconds,
|
|
65
|
+
vt.provider_source_type
|
|
66
|
+
)
|
|
67
|
+
when vp.state_position = 'at_stop' then case
|
|
68
|
+
when vt.provider_source_type = '1' then greatest(0, vp.delay)
|
|
69
|
+
else vp.delay
|
|
70
|
+
end
|
|
71
|
+
else vp.delay_stop_departure
|
|
72
|
+
end as departure_delay_seconds
|
|
73
|
+
from
|
|
74
|
+
ropidgtfs_stop_times rst
|
|
75
|
+
join vehiclepositions_trips vt on vt.gtfs_trip_id = rst.trip_id
|
|
76
|
+
join vehiclepositions_positions vp on vp.id = vt.last_position_id
|
|
77
|
+
and (
|
|
78
|
+
vp.valid_to is null
|
|
79
|
+
or vp.valid_to >= now()
|
|
80
|
+
)
|
|
81
|
+
and vp.state_position in ('on_track', 'at_stop')
|
|
82
|
+
where
|
|
83
|
+
vt.gtfs_trip_id is not null
|
|
84
|
+
and rst.stop_sequence = coalesce(vp.last_stop_sequence, 1)
|
|
85
|
+
union
|
|
86
|
+
all
|
|
87
|
+
select
|
|
88
|
+
rst.trip_id,
|
|
89
|
+
previous_row.trips_id as trips_id,
|
|
90
|
+
previous_row.provider_source_type,
|
|
91
|
+
previous_row.delay,
|
|
92
|
+
previous_row.initial_stop_sequence,
|
|
93
|
+
previous_row.state_position,
|
|
94
|
+
rst.stop_sequence,
|
|
95
|
+
rst.computed_dwell_time_seconds,
|
|
96
|
+
case
|
|
97
|
+
when rst.stop_sequence - previous_row.initial_stop_sequence = 1
|
|
98
|
+
and previous_row.state_position != 'at_stop' then previous_row.delay
|
|
99
|
+
else previous_row.departure_delay_seconds
|
|
100
|
+
end as arrival_delay_seconds,
|
|
101
|
+
predict_delay_seconds(
|
|
102
|
+
case
|
|
103
|
+
when rst.stop_sequence - previous_row.initial_stop_sequence = 1
|
|
104
|
+
and previous_row.state_position != 'at_stop' then previous_row.delay
|
|
105
|
+
else previous_row.departure_delay_seconds
|
|
106
|
+
end,
|
|
107
|
+
rst.computed_dwell_time_seconds,
|
|
108
|
+
previous_row.provider_source_type
|
|
109
|
+
) as departure_delay_seconds
|
|
110
|
+
from
|
|
111
|
+
stop_times previous_row
|
|
112
|
+
join ropidgtfs_stop_times rst on rst.trip_id = previous_row.trip_id
|
|
113
|
+
and rst.stop_sequence = previous_row.stop_sequence + 1
|
|
114
|
+
)
|
|
115
|
+
select
|
|
116
|
+
trips_id as rt_trip_id,
|
|
117
|
+
stop_sequence,
|
|
118
|
+
coalesce(arrival_delay_seconds, 0) as stop_arr_delay,
|
|
119
|
+
coalesce(departure_delay_seconds, 0) as stop_dep_delay
|
|
120
|
+
from
|
|
121
|
+
stop_times
|
|
122
|
+
order by
|
|
123
|
+
trip_id,
|
|
124
|
+
stop_sequence;
|
|
125
|
+
|
|
126
|
+
-- combined view
|
|
127
|
+
create view v_public_vehiclepositions_combined_stop_times as
|
|
128
|
+
select
|
|
129
|
+
distinct on (rt_trip_id, stop_sequence) stop_times.rt_trip_id,
|
|
130
|
+
vt.gtfs_trip_id,
|
|
131
|
+
stop_times.stop_sequence,
|
|
132
|
+
stop_times.stop_arr_delay,
|
|
133
|
+
stop_times.stop_dep_delay,
|
|
134
|
+
vt.gtfs_route_type,
|
|
135
|
+
vt.gtfs_route_short_name,
|
|
136
|
+
vt.run_number,
|
|
137
|
+
vt.internal_run_number,
|
|
138
|
+
vt.provider_source_type,
|
|
139
|
+
vt.cis_trip_number,
|
|
140
|
+
vt.vehicle_registration_number
|
|
141
|
+
from
|
|
142
|
+
(
|
|
143
|
+
select
|
|
144
|
+
*
|
|
145
|
+
from
|
|
146
|
+
v_public_vehiclepositions_future_stop_times prediction
|
|
147
|
+
union
|
|
148
|
+
all
|
|
149
|
+
select
|
|
150
|
+
*
|
|
151
|
+
from
|
|
152
|
+
v_public_vehiclepositions_past_stop_times history
|
|
153
|
+
) as stop_times
|
|
154
|
+
join vehiclepositions_trips vt on vt.id = stop_times.rt_trip_id
|
|
155
|
+
join vehiclepositions_positions vp on vt.last_position_id = vp.id
|
|
156
|
+
and (
|
|
157
|
+
vp.valid_to is null
|
|
158
|
+
or vp.valid_to >= now()
|
|
159
|
+
)
|
|
160
|
+
and vp.state_position != 'after_track'
|
|
161
|
+
order by
|
|
162
|
+
rt_trip_id,
|
|
163
|
+
stop_sequence;
|
|
164
|
+
|
|
165
|
+
-- old view
|
|
166
|
+
create view v_vehiclepositions_stop_time_delay_prediction as with recursive stop_times as (
|
|
167
|
+
select
|
|
168
|
+
vt.id,
|
|
169
|
+
rst.trip_id,
|
|
170
|
+
vt.provider_source_type,
|
|
171
|
+
vp.delay,
|
|
172
|
+
coalesce(vp.last_stop_sequence, 1) as initial_stop_sequence,
|
|
173
|
+
vp.state_position,
|
|
174
|
+
rst.stop_sequence,
|
|
175
|
+
rst.stop_id,
|
|
176
|
+
rs.platform_code,
|
|
177
|
+
vcs.cis_stop_platform_code,
|
|
178
|
+
rst.computed_dwell_time_seconds,
|
|
179
|
+
case
|
|
180
|
+
when vp.last_stop_sequence is null then vp.delay
|
|
181
|
+
else vp.delay_stop_arrival
|
|
182
|
+
end as arrival_delay_seconds,
|
|
183
|
+
case
|
|
184
|
+
when vp.last_stop_sequence is null then predict_delay_seconds(
|
|
185
|
+
vp.delay,
|
|
186
|
+
rst.computed_dwell_time_seconds,
|
|
187
|
+
vt.provider_source_type
|
|
188
|
+
)
|
|
189
|
+
when vp.state_position = 'at_stop' then case
|
|
190
|
+
when vt.provider_source_type = '1' then greatest(0, vp.delay)
|
|
191
|
+
else vp.delay
|
|
192
|
+
end
|
|
193
|
+
else vp.delay_stop_departure
|
|
194
|
+
end as departure_delay_seconds
|
|
195
|
+
from
|
|
196
|
+
ropidgtfs_stop_times rst
|
|
197
|
+
inner join vehiclepositions_trips vt on vt.gtfs_trip_id = rst.trip_id
|
|
198
|
+
inner join vehiclepositions_positions vp on vp.id = vt.last_position_id
|
|
199
|
+
and (
|
|
200
|
+
vp.valid_to is null
|
|
201
|
+
or vp.valid_to >= now()
|
|
202
|
+
)
|
|
203
|
+
left join ropidgtfs_stops rs on rs.stop_id = rst.stop_id
|
|
204
|
+
left join ropidgtfs_cis_stops rcs on rcs.id = rs.computed_cis_stop_id
|
|
205
|
+
left join vehiclepositions_cis_stops vcs on vcs.rt_trip_id = vt.id
|
|
206
|
+
and vcs.cis_stop_group_id = rcs.cis
|
|
207
|
+
where
|
|
208
|
+
vt.gtfs_trip_id is not null
|
|
209
|
+
and rst.stop_sequence = coalesce(vp.last_stop_sequence, 1)
|
|
210
|
+
union
|
|
211
|
+
all
|
|
212
|
+
select
|
|
213
|
+
previous_row.id,
|
|
214
|
+
rst.trip_id,
|
|
215
|
+
previous_row.provider_source_type,
|
|
216
|
+
previous_row.delay,
|
|
217
|
+
previous_row.initial_stop_sequence,
|
|
218
|
+
previous_row.state_position,
|
|
219
|
+
rst.stop_sequence,
|
|
220
|
+
rst.stop_id,
|
|
221
|
+
rs.platform_code,
|
|
222
|
+
vcs.cis_stop_platform_code,
|
|
223
|
+
rst.computed_dwell_time_seconds,
|
|
224
|
+
case
|
|
225
|
+
when rst.stop_sequence - previous_row.initial_stop_sequence = 1
|
|
226
|
+
and previous_row.state_position != 'at_stop' then previous_row.delay
|
|
227
|
+
else previous_row.departure_delay_seconds
|
|
228
|
+
end as arrival_delay_seconds,
|
|
229
|
+
predict_delay_seconds(
|
|
230
|
+
case
|
|
231
|
+
when rst.stop_sequence - previous_row.initial_stop_sequence = 1
|
|
232
|
+
and previous_row.state_position != 'at_stop' then previous_row.delay
|
|
233
|
+
else previous_row.departure_delay_seconds
|
|
234
|
+
end,
|
|
235
|
+
rst.computed_dwell_time_seconds,
|
|
236
|
+
previous_row.provider_source_type
|
|
237
|
+
) as departure_delay_seconds
|
|
238
|
+
from
|
|
239
|
+
stop_times previous_row
|
|
240
|
+
inner join ropidgtfs_stop_times rst on rst.trip_id = previous_row.trip_id
|
|
241
|
+
and rst.stop_sequence = previous_row.stop_sequence + 1
|
|
242
|
+
left join ropidgtfs_stops rs on rs.stop_id = rst.stop_id
|
|
243
|
+
left join ropidgtfs_cis_stops rcs on rcs.id = rs.computed_cis_stop_id
|
|
244
|
+
left join vehiclepositions_cis_stops vcs on vcs.rt_trip_id = previous_row.id
|
|
245
|
+
and vcs.cis_stop_group_id = rcs.cis
|
|
246
|
+
)
|
|
247
|
+
select
|
|
248
|
+
trip_id,
|
|
249
|
+
stop_sequence,
|
|
250
|
+
stop_id,
|
|
251
|
+
platform_code,
|
|
252
|
+
cis_stop_platform_code,
|
|
253
|
+
arrival_delay_seconds,
|
|
254
|
+
departure_delay_seconds
|
|
255
|
+
from
|
|
256
|
+
stop_times
|
|
257
|
+
order by
|
|
258
|
+
trip_id,
|
|
259
|
+
stop_sequence;
|
|
260
|
+
|
|
261
|
+
comment on view v_vehiclepositions_stop_time_delay_prediction is '
|
|
262
|
+
This view contains the predicted delay of a vehicle at each stop.
|
|
263
|
+
';
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
-- history view
|
|
2
|
+
create
|
|
3
|
+
or replace view v_public_vehiclepositions_past_stop_times as
|
|
4
|
+
select
|
|
5
|
+
trips_id as rt_trip_id,
|
|
6
|
+
last_stop_sequence as stop_sequence,
|
|
7
|
+
min(delay_stop_arrival) as stop_arr_delay,
|
|
8
|
+
max(delay_stop_departure) as stop_dep_delay,
|
|
9
|
+
last_stop_id as stop_id
|
|
10
|
+
from
|
|
11
|
+
(
|
|
12
|
+
select
|
|
13
|
+
trips_id,
|
|
14
|
+
last_stop_id,
|
|
15
|
+
last_stop_sequence,
|
|
16
|
+
delay_stop_arrival,
|
|
17
|
+
delay_stop_departure,
|
|
18
|
+
row_number() over seq as rn
|
|
19
|
+
from
|
|
20
|
+
vehiclepositions_positions rt_position
|
|
21
|
+
where
|
|
22
|
+
(
|
|
23
|
+
delay_stop_arrival is not null
|
|
24
|
+
or delay_stop_departure is not null
|
|
25
|
+
)
|
|
26
|
+
and state_position in ('on_track', 'at_stop', 'after_track') window seq as (
|
|
27
|
+
partition by trips_id,
|
|
28
|
+
last_stop_sequence,
|
|
29
|
+
state_position
|
|
30
|
+
order by
|
|
31
|
+
id
|
|
32
|
+
)
|
|
33
|
+
) as sub
|
|
34
|
+
where
|
|
35
|
+
rn = 1
|
|
36
|
+
group by
|
|
37
|
+
trips_id,
|
|
38
|
+
last_stop_sequence,
|
|
39
|
+
last_stop_id
|
|
40
|
+
order by
|
|
41
|
+
trips_id,
|
|
42
|
+
last_stop_sequence;
|
|
43
|
+
|
|
44
|
+
-- prediction view
|
|
45
|
+
create
|
|
46
|
+
or replace view v_public_vehiclepositions_future_stop_times as with recursive stop_times as (
|
|
47
|
+
select
|
|
48
|
+
rst.trip_id,
|
|
49
|
+
vt.id as trips_id,
|
|
50
|
+
vt.provider_source_type,
|
|
51
|
+
vp.delay,
|
|
52
|
+
coalesce(vp.last_stop_sequence, 1) as initial_stop_sequence,
|
|
53
|
+
vp.state_position,
|
|
54
|
+
rst.stop_id,
|
|
55
|
+
rst.stop_sequence,
|
|
56
|
+
rst.computed_dwell_time_seconds,
|
|
57
|
+
case
|
|
58
|
+
when vp.last_stop_sequence is null then vp.delay
|
|
59
|
+
else vp.delay_stop_arrival
|
|
60
|
+
end as arrival_delay_seconds,
|
|
61
|
+
case
|
|
62
|
+
when vp.last_stop_sequence is null then predict_delay_seconds(
|
|
63
|
+
vp.delay,
|
|
64
|
+
rst.computed_dwell_time_seconds,
|
|
65
|
+
vt.provider_source_type
|
|
66
|
+
)
|
|
67
|
+
when vp.state_position = 'at_stop' then case
|
|
68
|
+
when vt.provider_source_type = '1' then greatest(0, vp.delay)
|
|
69
|
+
else vp.delay
|
|
70
|
+
end
|
|
71
|
+
else vp.delay_stop_departure
|
|
72
|
+
end as departure_delay_seconds
|
|
73
|
+
from
|
|
74
|
+
ropidgtfs_stop_times rst
|
|
75
|
+
join vehiclepositions_trips vt on vt.gtfs_trip_id = rst.trip_id
|
|
76
|
+
join vehiclepositions_positions vp on vp.id = vt.last_position_id
|
|
77
|
+
and (
|
|
78
|
+
vp.valid_to is null
|
|
79
|
+
or vp.valid_to >= now()
|
|
80
|
+
)
|
|
81
|
+
and vp.state_position in ('on_track', 'at_stop')
|
|
82
|
+
where
|
|
83
|
+
vt.gtfs_trip_id is not null
|
|
84
|
+
and rst.stop_sequence = coalesce(vp.last_stop_sequence, 1)
|
|
85
|
+
union
|
|
86
|
+
all
|
|
87
|
+
select
|
|
88
|
+
rst.trip_id,
|
|
89
|
+
previous_row.trips_id as trips_id,
|
|
90
|
+
previous_row.provider_source_type,
|
|
91
|
+
previous_row.delay,
|
|
92
|
+
previous_row.initial_stop_sequence,
|
|
93
|
+
previous_row.state_position,
|
|
94
|
+
rst.stop_id,
|
|
95
|
+
rst.stop_sequence,
|
|
96
|
+
rst.computed_dwell_time_seconds,
|
|
97
|
+
case
|
|
98
|
+
when rst.stop_sequence - previous_row.initial_stop_sequence = 1
|
|
99
|
+
and previous_row.state_position != 'at_stop' then previous_row.delay
|
|
100
|
+
else previous_row.departure_delay_seconds
|
|
101
|
+
end as arrival_delay_seconds,
|
|
102
|
+
predict_delay_seconds(
|
|
103
|
+
case
|
|
104
|
+
when rst.stop_sequence - previous_row.initial_stop_sequence = 1
|
|
105
|
+
and previous_row.state_position != 'at_stop' then previous_row.delay
|
|
106
|
+
else previous_row.departure_delay_seconds
|
|
107
|
+
end,
|
|
108
|
+
rst.computed_dwell_time_seconds,
|
|
109
|
+
previous_row.provider_source_type
|
|
110
|
+
) as departure_delay_seconds
|
|
111
|
+
from
|
|
112
|
+
stop_times previous_row
|
|
113
|
+
join ropidgtfs_stop_times rst on rst.trip_id = previous_row.trip_id
|
|
114
|
+
and rst.stop_sequence = previous_row.stop_sequence + 1
|
|
115
|
+
)
|
|
116
|
+
select
|
|
117
|
+
trips_id as rt_trip_id,
|
|
118
|
+
stop_sequence,
|
|
119
|
+
coalesce(arrival_delay_seconds, 0) as stop_arr_delay,
|
|
120
|
+
coalesce(departure_delay_seconds, 0) as stop_dep_delay,
|
|
121
|
+
stop_id
|
|
122
|
+
from
|
|
123
|
+
stop_times
|
|
124
|
+
order by
|
|
125
|
+
trip_id,
|
|
126
|
+
stop_sequence;
|
|
127
|
+
|
|
128
|
+
-- combined view
|
|
129
|
+
create
|
|
130
|
+
or replace view v_public_vehiclepositions_combined_stop_times as
|
|
131
|
+
select
|
|
132
|
+
distinct on (rt_trip_id, stop_sequence) stop_times.rt_trip_id,
|
|
133
|
+
vt.gtfs_trip_id,
|
|
134
|
+
stop_times.stop_sequence,
|
|
135
|
+
stop_times.stop_arr_delay,
|
|
136
|
+
stop_times.stop_dep_delay,
|
|
137
|
+
vt.gtfs_route_type,
|
|
138
|
+
vt.gtfs_route_short_name,
|
|
139
|
+
vt.run_number,
|
|
140
|
+
vt.internal_run_number,
|
|
141
|
+
vt.provider_source_type,
|
|
142
|
+
vt.cis_trip_number,
|
|
143
|
+
vt.vehicle_registration_number,
|
|
144
|
+
stop_times.stop_id,
|
|
145
|
+
vcs.cis_stop_platform_code,
|
|
146
|
+
rs.platform_code
|
|
147
|
+
from
|
|
148
|
+
(
|
|
149
|
+
select
|
|
150
|
+
*
|
|
151
|
+
from
|
|
152
|
+
v_public_vehiclepositions_future_stop_times prediction
|
|
153
|
+
union
|
|
154
|
+
all
|
|
155
|
+
select
|
|
156
|
+
*
|
|
157
|
+
from
|
|
158
|
+
v_public_vehiclepositions_past_stop_times history
|
|
159
|
+
) as stop_times
|
|
160
|
+
join vehiclepositions_trips vt on vt.id = stop_times.rt_trip_id
|
|
161
|
+
join vehiclepositions_positions vp on vt.last_position_id = vp.id
|
|
162
|
+
and (
|
|
163
|
+
vp.valid_to is null
|
|
164
|
+
or vp.valid_to >= now()
|
|
165
|
+
)
|
|
166
|
+
and vp.state_position != 'after_track'
|
|
167
|
+
left join ropidgtfs_stops rs on rs.stop_id = stop_times.stop_id
|
|
168
|
+
left join vehiclepositions_cis_stops vcs on vcs.rt_trip_id = stop_times.rt_trip_id
|
|
169
|
+
order by
|
|
170
|
+
rt_trip_id,
|
|
171
|
+
stop_sequence;
|
|
172
|
+
|
|
173
|
+
-- old view
|
|
174
|
+
drop view v_vehiclepositions_stop_time_delay_prediction;
|
package/db/migrations/postgresql/sqls/20240424122841-delay-at-past-stops-release-part-1-down.sql
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
drop view v_vehiclepositions_stop_time_delay_prediction;
|
package/db/migrations/postgresql/sqls/20240424122841-delay-at-past-stops-release-part-1-up.sql
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
create view v_vehiclepositions_stop_time_delay_prediction as with recursive stop_times as (
|
|
2
|
+
select
|
|
3
|
+
vt.id,
|
|
4
|
+
rst.trip_id,
|
|
5
|
+
vt.provider_source_type,
|
|
6
|
+
vp.delay,
|
|
7
|
+
coalesce(vp.last_stop_sequence, 1) as initial_stop_sequence,
|
|
8
|
+
vp.state_position,
|
|
9
|
+
rst.stop_sequence,
|
|
10
|
+
rst.stop_id,
|
|
11
|
+
rs.platform_code,
|
|
12
|
+
vcs.cis_stop_platform_code,
|
|
13
|
+
rst.computed_dwell_time_seconds,
|
|
14
|
+
case
|
|
15
|
+
when vp.last_stop_sequence is null then vp.delay
|
|
16
|
+
else vp.delay_stop_arrival
|
|
17
|
+
end as arrival_delay_seconds,
|
|
18
|
+
case
|
|
19
|
+
when vp.last_stop_sequence is null then predict_delay_seconds(
|
|
20
|
+
vp.delay,
|
|
21
|
+
rst.computed_dwell_time_seconds,
|
|
22
|
+
vt.provider_source_type
|
|
23
|
+
)
|
|
24
|
+
when vp.state_position = 'at_stop' then case
|
|
25
|
+
when vt.provider_source_type = '1' then greatest(0, vp.delay)
|
|
26
|
+
else vp.delay
|
|
27
|
+
end
|
|
28
|
+
else vp.delay_stop_departure
|
|
29
|
+
end as departure_delay_seconds
|
|
30
|
+
from
|
|
31
|
+
ropidgtfs_stop_times rst
|
|
32
|
+
inner join vehiclepositions_trips vt on vt.gtfs_trip_id = rst.trip_id
|
|
33
|
+
inner join vehiclepositions_positions vp on vp.id = vt.last_position_id
|
|
34
|
+
and (
|
|
35
|
+
vp.valid_to is null
|
|
36
|
+
or vp.valid_to >= now()
|
|
37
|
+
)
|
|
38
|
+
left join ropidgtfs_stops rs on rs.stop_id = rst.stop_id
|
|
39
|
+
left join ropidgtfs_cis_stops rcs on rcs.id = rs.computed_cis_stop_id
|
|
40
|
+
left join vehiclepositions_cis_stops vcs on vcs.rt_trip_id = vt.id
|
|
41
|
+
and vcs.cis_stop_group_id = rcs.cis
|
|
42
|
+
where
|
|
43
|
+
vt.gtfs_trip_id is not null
|
|
44
|
+
and rst.stop_sequence = coalesce(vp.last_stop_sequence, 1)
|
|
45
|
+
union
|
|
46
|
+
all
|
|
47
|
+
select
|
|
48
|
+
previous_row.id,
|
|
49
|
+
rst.trip_id,
|
|
50
|
+
previous_row.provider_source_type,
|
|
51
|
+
previous_row.delay,
|
|
52
|
+
previous_row.initial_stop_sequence,
|
|
53
|
+
previous_row.state_position,
|
|
54
|
+
rst.stop_sequence,
|
|
55
|
+
rst.stop_id,
|
|
56
|
+
rs.platform_code,
|
|
57
|
+
vcs.cis_stop_platform_code,
|
|
58
|
+
rst.computed_dwell_time_seconds,
|
|
59
|
+
case
|
|
60
|
+
when rst.stop_sequence - previous_row.initial_stop_sequence = 1
|
|
61
|
+
and previous_row.state_position != 'at_stop' then previous_row.delay
|
|
62
|
+
else previous_row.departure_delay_seconds
|
|
63
|
+
end as arrival_delay_seconds,
|
|
64
|
+
predict_delay_seconds(
|
|
65
|
+
case
|
|
66
|
+
when rst.stop_sequence - previous_row.initial_stop_sequence = 1
|
|
67
|
+
and previous_row.state_position != 'at_stop' then previous_row.delay
|
|
68
|
+
else previous_row.departure_delay_seconds
|
|
69
|
+
end,
|
|
70
|
+
rst.computed_dwell_time_seconds,
|
|
71
|
+
previous_row.provider_source_type
|
|
72
|
+
) as departure_delay_seconds
|
|
73
|
+
from
|
|
74
|
+
stop_times previous_row
|
|
75
|
+
inner join ropidgtfs_stop_times rst on rst.trip_id = previous_row.trip_id
|
|
76
|
+
and rst.stop_sequence = previous_row.stop_sequence + 1
|
|
77
|
+
left join ropidgtfs_stops rs on rs.stop_id = rst.stop_id
|
|
78
|
+
left join ropidgtfs_cis_stops rcs on rcs.id = rs.computed_cis_stop_id
|
|
79
|
+
left join vehiclepositions_cis_stops vcs on vcs.rt_trip_id = previous_row.id
|
|
80
|
+
and vcs.cis_stop_group_id = rcs.cis
|
|
81
|
+
)
|
|
82
|
+
select
|
|
83
|
+
trip_id,
|
|
84
|
+
stop_sequence,
|
|
85
|
+
stop_id,
|
|
86
|
+
platform_code,
|
|
87
|
+
cis_stop_platform_code,
|
|
88
|
+
arrival_delay_seconds,
|
|
89
|
+
departure_delay_seconds
|
|
90
|
+
from
|
|
91
|
+
stop_times
|
|
92
|
+
order by
|
|
93
|
+
trip_id,
|
|
94
|
+
stop_sequence;
|
|
95
|
+
|
|
96
|
+
comment on view v_vehiclepositions_stop_time_delay_prediction is '
|
|
97
|
+
This view contains the predicted delay of a vehicle at each stop.
|
|
98
|
+
';
|
package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/tasks/GenerateFilesTask.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare class GenerateFilesTask extends AbstractEmptyTask {
|
|
|
3
3
|
readonly queueName = "generateFiles";
|
|
4
4
|
readonly queueTtl: number;
|
|
5
5
|
private readonly logger;
|
|
6
|
+
private readonly stopTimeRepository;
|
|
6
7
|
private readonly tripsRepository;
|
|
7
8
|
private readonly gtfsRtRedisRepository;
|
|
8
9
|
private readonly alertsGenerator;
|