@golemio/pid 2.12.11 → 2.13.0-rc.1284379387
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/sqls/20240418133218-detailed-stop-times-down.sql +263 -0
- package/db/migrations/postgresql/sqls/20240418133218-detailed-stop-times-up.sql +174 -0
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleDescriptor.d.ts +0 -2
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleDescriptor.js +1 -4
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleDescriptor.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleIdGenerator.d.ts +1 -1
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleIdGenerator.js +1 -1
- package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleIdGenerator.js.map +1 -1
- 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 +33 -13
- 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 +2 -3
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/data-access/TripsRepository.js +13 -24
- 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/data-access/interfaces/TripRepositoryInterfaces.d.ts +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/VPUtils.d.ts +4 -0
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/VPUtils.js +5 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/VPUtils.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/gtfs-trip-run/GTFSTripMetroRunManager.d.ts +1 -0
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/gtfs-trip-run/GTFSTripMetroRunManager.js +4 -0
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/gtfs-trip-run/GTFSTripMetroRunManager.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/public-api/PublicCacheTripsFilter.js +3 -3
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/helpers/public-api/PublicCacheTripsFilter.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/RefreshPublicStopTimeCacheTask.js +4 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/RefreshPublicStopTimeCacheTask.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/RefreshPublicTripCacheTask.js +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/RefreshPublicTripCacheTask.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/PublicApiTripTransformation.d.ts +0 -2
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/PublicApiTripTransformation.js +3 -8
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/transformations/PublicApiTripTransformation.js.map +1 -1
- package/dist/output-gateway/public/service/helpers/trip-scope/strategy/StopTimesTripScopeHandler.d.ts +1 -0
- package/dist/output-gateway/public/service/helpers/trip-scope/strategy/StopTimesTripScopeHandler.js +18 -0
- package/dist/output-gateway/public/service/helpers/trip-scope/strategy/StopTimesTripScopeHandler.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 +2 -2
- 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,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/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleDescriptor.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { IGtfsRtTripDto } from "../../../../../schema-definitions/vehicle-positions/models/interfaces/IGtfsRtTripDto";
|
|
2
2
|
import { IVehicleDescriptor } from "../interfaces/GtfsRealtimeInterfaces";
|
|
3
3
|
export declare class VehicleDescriptor {
|
|
4
|
-
private vehicleIdGenerator;
|
|
5
|
-
constructor();
|
|
6
4
|
getVehicleDescriptor(tripRecord: IGtfsRtTripDto): IVehicleDescriptor;
|
|
7
5
|
}
|
package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleDescriptor.js
CHANGED
|
@@ -3,12 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.VehicleDescriptor = void 0;
|
|
4
4
|
const VehicleIdGenerator_1 = require("./VehicleIdGenerator");
|
|
5
5
|
class VehicleDescriptor {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.vehicleIdGenerator = new VehicleIdGenerator_1.VehicleIdGenerator();
|
|
8
|
-
}
|
|
9
6
|
getVehicleDescriptor(tripRecord) {
|
|
10
7
|
var _a;
|
|
11
|
-
return Object.assign(Object.assign({ id:
|
|
8
|
+
return Object.assign(Object.assign({ id: VehicleIdGenerator_1.VehicleIdGenerator.getVehicleId(tripRecord.id, tripRecord.gtfs_route_type, tripRecord.provider_source_type, tripRecord.gtfs_route_short_name, tripRecord.cis_trip_number, tripRecord.vehicle_registration_number, tripRecord.run_number, tripRecord.internal_run_number) }, (tripRecord.vehicle_registration_number && {
|
|
12
9
|
label: tripRecord.vehicle_registration_number.toString(),
|
|
13
10
|
})), { ".transit_realtime.ovapiVehicleDescriptor": {
|
|
14
11
|
wheelchairAccessible: (_a = tripRecord.wheelchair_accessible) !== null && _a !== void 0 ? _a : undefined,
|
package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleDescriptor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VehicleDescriptor.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleDescriptor.ts"],"names":[],"mappings":";;;AAEA,6DAA0D;AAE1D,MAAa,iBAAiB;
|
|
1
|
+
{"version":3,"file":"VehicleDescriptor.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleDescriptor.ts"],"names":[],"mappings":";;;AAEA,6DAA0D;AAE1D,MAAa,iBAAiB;IACnB,oBAAoB,CAAC,UAA0B;;QAClD,qCACI,EAAE,EAAE,uCAAkB,CAAC,YAAY,CAC/B,UAAU,CAAC,EAAE,EACb,UAAU,CAAC,eAAe,EAC1B,UAAU,CAAC,oBAAoB,EAC/B,UAAU,CAAC,qBAAqB,EAChC,UAAU,CAAC,eAAe,EAC1B,UAAU,CAAC,2BAA2B,EACtC,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,mBAAmB,CACjC,IACE,CAAC,UAAU,CAAC,2BAA2B,IAAI;YAC1C,KAAK,EAAE,UAAU,CAAC,2BAA2B,CAAC,QAAQ,EAAE;SAC3D,CAAC,KACF,0CAA0C,EAAE;gBACxC,oBAAoB,EAAE,MAAA,UAAU,CAAC,qBAAqB,mCAAI,SAAS;gBACnE,WAAW,EAAE,UAAU,CAAC,kBAAkB;oBACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;oBACtF,CAAC,CAAC,SAAS;aAClB,IACH;IACN,CAAC;CACJ;AAxBD,8CAwBC"}
|
package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleIdGenerator.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GTFSRouteTypeEnum } from "../../../../../helpers/RouteTypeEnums";
|
|
2
2
|
import { ProviderSourceTypeEnum } from "../../vehicle-positions/helpers/ProviderSourceTypeEnum";
|
|
3
3
|
export declare class VehicleIdGenerator {
|
|
4
|
-
getVehicleId(trip_id: string, gtfs_route_type: GTFSRouteTypeEnum | null, provider_source_type: ProviderSourceTypeEnum, gtfs_route_short_name: string | null, cis_trip_number: number | null, vehicle_registration_number: number | null, run_number: number | null, internal_run_number: number | null): string;
|
|
4
|
+
static getVehicleId(trip_id: string, gtfs_route_type: GTFSRouteTypeEnum | null, provider_source_type: ProviderSourceTypeEnum, gtfs_route_short_name: string | null, cis_trip_number: number | null, vehicle_registration_number: number | null, run_number: number | null, internal_run_number: number | null): string;
|
|
5
5
|
}
|
package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleIdGenerator.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.VehicleIdGenerator = void 0;
|
|
|
4
4
|
const RouteTypeEnums_1 = require("../../../../../helpers/RouteTypeEnums");
|
|
5
5
|
const ProviderSourceTypeEnum_1 = require("../../vehicle-positions/helpers/ProviderSourceTypeEnum");
|
|
6
6
|
class VehicleIdGenerator {
|
|
7
|
-
getVehicleId(trip_id, gtfs_route_type, provider_source_type, gtfs_route_short_name, cis_trip_number, vehicle_registration_number, run_number, internal_run_number) {
|
|
7
|
+
static getVehicleId(trip_id, gtfs_route_type, provider_source_type, gtfs_route_short_name, cis_trip_number, vehicle_registration_number, run_number, internal_run_number) {
|
|
8
8
|
if (gtfs_route_type === RouteTypeEnums_1.GTFSRouteTypeEnum.TRAIN) {
|
|
9
9
|
return "train-" + cis_trip_number;
|
|
10
10
|
}
|
package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleIdGenerator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VehicleIdGenerator.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleIdGenerator.ts"],"names":[],"mappings":";;;AAAA,0EAA+D;AAC/D,mGAAwH;AAExH,MAAa,kBAAkB;IACpB,YAAY,
|
|
1
|
+
{"version":3,"file":"VehicleIdGenerator.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/vehicle-positions/workers/gtfs-rt/helpers/VehicleIdGenerator.ts"],"names":[],"mappings":";;;AAAA,0EAA+D;AAC/D,mGAAwH;AAExH,MAAa,kBAAkB;IACpB,MAAM,CAAC,YAAY,CACtB,OAAe,EACf,eAAyC,EACzC,oBAA4C,EAC5C,qBAAoC,EACpC,eAA8B,EAC9B,2BAA0C,EAC1C,UAAyB,EACzB,mBAAkC;QAElC,IAAI,eAAe,KAAK,kCAAiB,CAAC,KAAK,EAAE;YAC7C,OAAO,QAAQ,GAAG,eAAe,CAAC;SACrC;QAED,IAAI,eAAe,KAAK,kCAAiB,CAAC,KAAK,EAAE;YAC7C,OAAO,SAAS,qBAAqB,IAAI,mBAAmB,IAAI,UAAU,EAAE,CAAC;SAChF;QAED,IAAI,oBAAoB,KAAK,+CAAsB,CAAC,cAAc,EAAE;YAChE,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;YAClD,OAAO,WAAW,eAAe,IAAI,cAAc,EAAE,CAAC;SACzD;QAED,OAAO,UAAU,GAAG,eAAe,GAAG,GAAG,GAAG,2BAA2B,CAAC;IAC5E,CAAC;CACJ;AA1BD,gDA0BC"}
|
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;
|
package/dist/integration-engine/vehicle-positions/workers/gtfs-rt/tasks/GenerateFilesTask.js
CHANGED
|
@@ -24,9 +24,11 @@ exports.GenerateFilesTask = void 0;
|
|
|
24
24
|
const RouteTypeEnums_1 = require("../../../../../helpers/RouteTypeEnums");
|
|
25
25
|
const ropid_vymi_1 = require("../../../../ropid-vymi");
|
|
26
26
|
const Di_1 = require("../../../ioc/Di");
|
|
27
|
+
const VPContainerToken_1 = require("../../../ioc/VPContainerToken");
|
|
27
28
|
const TripsRepository_1 = require("../../vehicle-positions/data-access/TripsRepository");
|
|
28
29
|
const ioc_1 = require("@golemio/core/dist/integration-engine/ioc");
|
|
29
30
|
const workers_1 = require("@golemio/core/dist/integration-engine/workers");
|
|
31
|
+
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
30
32
|
const ovapi_gtfs_realtime_bindings_1 = require("@golemio/ovapi-gtfs-realtime-bindings");
|
|
31
33
|
const GtfsRtRedisRepository_1 = require("../data-access/GtfsRtRedisRepository");
|
|
32
34
|
const AlertsGenerator_1 = require("../helpers/AlertsGenerator");
|
|
@@ -38,6 +40,7 @@ class GenerateFilesTask extends workers_1.AbstractEmptyTask {
|
|
|
38
40
|
this.queueName = "generateFiles";
|
|
39
41
|
this.queueTtl = 20 * 1000; // 20 seconds
|
|
40
42
|
this.logger = Di_1.VPContainer.resolve(ioc_1.ContainerToken.Logger);
|
|
43
|
+
this.stopTimeRepository = Di_1.VPContainer.resolve(VPContainerToken_1.VPContainerToken.PublicStopTimeCacheRepository);
|
|
41
44
|
this.tripsRepository = new TripsRepository_1.TripsRepository();
|
|
42
45
|
this.gtfsRtRedisRepository = new GtfsRtRedisRepository_1.GtfsRtRedisRepository();
|
|
43
46
|
const vymiEventsRepository = new ropid_vymi_1.RopidVYMIEventsModel();
|
|
@@ -47,13 +50,22 @@ class GenerateFilesTask extends workers_1.AbstractEmptyTask {
|
|
|
47
50
|
}
|
|
48
51
|
execute() {
|
|
49
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
const
|
|
53
|
+
const startDateTime = new Date();
|
|
54
|
+
const tripData = yield this.tripsRepository.findAllForGTFSRt(startDateTime);
|
|
51
55
|
const feedHeader = this.createFeedHeader();
|
|
52
56
|
const updatesMessage = ovapi_gtfs_realtime_bindings_1.transit_realtime.FeedMessage.create({ header: feedHeader });
|
|
53
57
|
const positionsMessage = ovapi_gtfs_realtime_bindings_1.transit_realtime.FeedMessage.create({ header: feedHeader });
|
|
54
58
|
const pidFeedMessage = ovapi_gtfs_realtime_bindings_1.transit_realtime.FeedMessage.create({ header: feedHeader });
|
|
59
|
+
const vehicleDescriptors = tripData.map((tripRecord) => this.vehicleDescriptor.getVehicleDescriptor(tripRecord));
|
|
60
|
+
const vehicleIds = [];
|
|
61
|
+
for (const { id } of vehicleDescriptors) {
|
|
62
|
+
if (typeof id === "string") {
|
|
63
|
+
vehicleIds.push(id);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const stopTimes = yield this.stopTimeRepository.getPublicStopTimeCache(vehicleIds);
|
|
55
67
|
const gtfsTripIdMap = {};
|
|
56
|
-
for (const tripRecord of
|
|
68
|
+
for (const tripRecord of tripData) {
|
|
57
69
|
const tripDescriptor = {
|
|
58
70
|
scheduleRelationship: tripRecord.last_position.is_canceled
|
|
59
71
|
? ovapi_gtfs_realtime_bindings_1.transit_realtime.TripDescriptor.ScheduleRelationship.CANCELED
|
|
@@ -85,7 +97,14 @@ class GenerateFilesTask extends workers_1.AbstractEmptyTask {
|
|
|
85
97
|
positionsMessage.entity.push(positionsMessageEntity);
|
|
86
98
|
// single feed for trip updates and vehicle positions
|
|
87
99
|
const feedMessageEntity = structuredClone(positionsMessageEntity);
|
|
88
|
-
|
|
100
|
+
let stopTimeUpdates = [];
|
|
101
|
+
if (typeof vehicleDescriptor.id === "string") {
|
|
102
|
+
const stopTimesForVehicle = stopTimes.get(vehicleDescriptor.id);
|
|
103
|
+
stopTimeUpdates = this.generateStopTimeUpdate(tripRecord.gtfs_route_type, stopTimesForVehicle);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.logger.error(new golemio_errors_1.GeneralError(`Cannot get stopTimeUpdates for trip with unknown vehicleId and gtfsTripId '${tripRecord.gtfs_trip_id}'`, this.constructor.name, undefined, undefined, "pid"));
|
|
107
|
+
}
|
|
89
108
|
const shouldSkipTripUpdate = stopTimeUpdates.every((el) => el.scheduleRelationship === ovapi_gtfs_realtime_bindings_1.transit_realtime.TripUpdate.StopTimeUpdate.ScheduleRelationship.NO_DATA ||
|
|
90
109
|
gtfsTripIdMap[tripRecord.gtfs_trip_id]);
|
|
91
110
|
if (!shouldSkipTripUpdate) {
|
|
@@ -176,22 +195,23 @@ class GenerateFilesTask extends workers_1.AbstractEmptyTask {
|
|
|
176
195
|
}
|
|
177
196
|
return entity;
|
|
178
197
|
}
|
|
179
|
-
generateStopTimeUpdate(
|
|
198
|
+
generateStopTimeUpdate(routeType, stopTimes) {
|
|
199
|
+
var _a, _b;
|
|
180
200
|
const stopTimeUpdates = [];
|
|
181
|
-
for (const
|
|
182
|
-
const scheduledTrack =
|
|
183
|
-
let actualTrack =
|
|
201
|
+
for (const stopTime of stopTimes) {
|
|
202
|
+
const scheduledTrack = stopTime.platform_code;
|
|
203
|
+
let actualTrack = stopTime.platform_code;
|
|
184
204
|
if (routeType === RouteTypeEnums_1.GTFSRouteTypeEnum.TRAIN) {
|
|
185
|
-
actualTrack =
|
|
205
|
+
actualTrack = stopTime.cis_stop_platform_code;
|
|
186
206
|
}
|
|
187
207
|
stopTimeUpdates.push(Object.assign(Object.assign({ arrival: {
|
|
188
|
-
delay:
|
|
208
|
+
delay: (_a = stopTime.arr_delay) !== null && _a !== void 0 ? _a : stopTime.dep_delay,
|
|
189
209
|
}, departure: {
|
|
190
|
-
delay:
|
|
191
|
-
} }, (
|
|
192
|
-
|
|
210
|
+
delay: (_b = stopTime.dep_delay) !== null && _b !== void 0 ? _b : stopTime.arr_delay,
|
|
211
|
+
} }, (stopTime.arr_delay === null &&
|
|
212
|
+
stopTime.dep_delay === null && {
|
|
193
213
|
scheduleRelationship: ovapi_gtfs_realtime_bindings_1.transit_realtime.TripUpdate.StopTimeUpdate.ScheduleRelationship.NO_DATA,
|
|
194
|
-
})), { stopSequence:
|
|
214
|
+
})), { stopSequence: stopTime.sequence, stopId: stopTime.stop_id, ".transit_realtime.ovapiStopTimeUpdate": Object.assign(Object.assign({}, (scheduledTrack && { scheduledTrack })), (actualTrack && { actualTrack })) }));
|
|
195
215
|
}
|
|
196
216
|
return stopTimeUpdates;
|
|
197
217
|
}
|