środa, 5 września 2018

Pomiar czasu - algorytm cz2 - rejestracja czasu

Zbudowane na szybko zapytanie  do dodawania (rejestracji) czasu dla zawodnika na razie w SQL-u, nie co od tyłu to powinno być częścią pierwszą ale jakoś tak wyszło. W poniższym kodzie mamy sprawdzanie przerwy w odbiciu czyli 30 minut, zapytanie działa, to samo można by zrobić po stronie kodu aplikacji, testowo zrobione w SQL dla mnie łatwiej, łącznie ze startem.
 Jeżeli miało by to być po stronie aplikacji, a do tego będę dążył żeby wyeliminować procedury rozwiązanie to będzie oparte o EntityFrameworka i Linq w dodatkowym module aplikacji (gdyż tym razem maraton podzielony jest na wiele modułów).
W aplikacji jest moduł dostępu do danych, można by zrobić osobny moduł tylko do rejestracji czasu, ta sama baza ale inne tabele (do przemyślenia).
Zapomniałem dodać, zapytanie działa.



-- rejestracja czasu
declare @zaw_id int = 1
declare @iloscRejestracji int
declare @odbicie datetime
declare @rejestracja datetime = '2018-09-05 17:05:00'
declare @roznicaCzasu int
declare @licznik int
--
select @iloscRejestracji = count(czas_id) from Time_Registration
where zaw_id = @zaw_id

if(@iloscRejestracji > 0)
begin
       select top 1 @odbicie = czas_registration from Time_Registration
where zaw_id = @zaw_id order by czas_registration desc
       select @roznicaCzasu = DATEDIFF(minute,@odbicie,@rejestracja)
       if( @roznicaCzasu > 30 )
       begin
             --mozliwosc inserta
             select @licznik = czas_counter from Time_Registration
where zaw_id = @zaw_id
             set @licznik = @licznik + 1
             INSERT INTO [dbo].[Time_Registration]
           ([czas_registration],[czas_counter],[zaw_id])
     VALUES
           (@rejestracja,@licznik,@zaw_id)
                print 'czas zarejestrowany'
       end
       else
       begin
             print 'brak mozliwosci odbicia - limit czasu'
       end
end
else
begin

       INSERT INTO [dbo].[Time_Registration]
           ([czas_registration],[czas_counter],[zaw_id])
     VALUES
           (GETDATE(),1,@zaw_id)

       print 'start zawodnika'
end


Brak komentarzy:

Prześlij komentarz

 Po wielu miesiącach przerwy Czteroletnim exodusie do bloga ismartdev, który zdechł w zeszłym roku w listopadzie, na powrót wstąpiłem w ten ...