Version 2 (modified by 3 months ago) ( diff ) | ,
---|
Стартување на возење
Само корисник со улога патник може да започне возење. Прво одбира билет со кој сака да се вози. Потоа бира постојка на која се качува и откога ќе одбере постојка му се листаат сите активни инстанци на линии кои се уште не ја поминале таа станица.
Тригер во база:
Пред да се внесе возењето во база се извршува тригер во база за да се провери валидноста на билетот:
create or replace function check_expiry_date() returns trigger as $$ begin if exists( select 1 from vozenje v where v.patnik_id = new.patnik_id and v.end_date is null ) then update vozenje set end_date = now(), status = 'FINISHED' where id in (select v.id from vozenje v where v.patnik_id = new.patnik_id and v.end_date is null); end if; if exists( select 1 from bilet where id = new.bilet_id and datum_aktivacija is null ) then update bilet set datum_aktivacija = now(), status = 'ACTIVE' where id = new.bilet_id; end if; if exists( select 1 from bilet b join tipbilet tb on b.tip_id = tb.id where b.id = new.bilet_id and ((b.datum_aktivacija + (tb.trajnost || ' milliseconds')::interval) < now()) ) then update bilet set status = 'EXPIRED' where id = new.bilet_id; end if; if exists( select 1 from bilet b join tipbilet tb on b.tip_id = tb.id where b.id = new.bilet_id and ((b.datum_aktivacija + (tb.trajnost || ' milliseconds')::interval) < now()) ) then RAISE exception 'Ticket is expired'; end if; return new; end; $$ language plpgsql; create or replace trigger check_validity_of_ticket before insert on vozenje for each row execute function check_expiry_date();
Query за да се добијат потрбните инстанци на линии:
@Query( value = """ select distinct inl.id from instanca_na_linija inl join instanca_na_linija_postojka_na_linija inlpnl on inl.id = inlpnl.instanca_na_linija_id where end_date is null and linija_id in ( select distinct(pnl.linija_id) from postojka_na_linija pnl where postojka_id = ?1 ) except select inl.id from postojka_na_linija pnl join instanca_na_linija inl on inl.linija_id = pnl.linija_id and inl.pravec_id = pnl.pravec_id join instanca_na_linija_postojka_na_linija inlpnl on inl.id = inlpnl.instanca_na_linija_id and pnl.id = inlpnl.postojka_na_linija_id where inl.end_date is null and postojka_id = ?1; """, nativeQuery = true, ) fun findIncomingRouteInstancesForStation(stationId: Int): List<Long>
Attachments (1)
- старт-возење.png (71.7 KB ) - added by 3 months ago.
Download all attachments as: .zip
Note:
See TracWiki
for help on using the wiki.