Definire i giorni lavorativi e il tempo di lavoro

2

Sto lavorando allo sviluppo del software di parcheggio SMS e sono bloccato a un certo punto per un mese ... Devo implementare i periodi di pagamento (o tempo di lavoro, di una giornata lavorativa, se lo farai). Ecco il problema:

Per esempio, i vigili urbani lavorano dal lunedì al sabato. Dal lunedì al venerdì, gli orari di lavoro sono dalle 07:00 alle 21:00, mentre il sabato l'orario di lavoro è dalle 07:00 alle 14:00. La richiesta del progetto era che il cliente potesse pagare il parcheggio tramite SMS illimitato, cosa che ho fatto, ma non ha implementato questa logica. Ho iniziato a creare un tavolo per questi periodi di pagamento, è composto da: dayofweek (INT, per l'uso con la funzione mysql DAYOFWEEK, per dirmi quale giorno della settimana è la data corrente), work_start e work_stop (DATETIME, per definire l'avvio e termine della giornata lavorativa), ma non sono sicuro se dovrei utilizzare DATETIME, a causa della data, o dovrei utilizzare solo TIME.

L'idea è questa:

Se invii un SMS, alle 20:50, lunedì, dovrebbe essere valido fino alle 07:50, martedì (è pagato all'ora). Prolungare il tempo di pagamento, per quanto riguarda il tempo di lavoro in settimana. Attualmente, funziona estendendo il tempo all'ora senza questa regola. Avrei davvero bisogno di aiuto, o di alcune idee, sono rimasto bloccato per un po 'di tempo ...

    
posta user2553268 05.07.2013 - 12:27
fonte

3 risposte

1

Credo che sarebbe molto più semplice avere una tabella che memorizza ogni ora (supponendo che sia la tua risoluzione) se il parcheggio è fatturato (= 1) o gratuito (= 0). Quindi esegui un'iterazione nel tempo in cui il tuo cliente ha pagato sottraendo il valore fino a esaurimento del suo credito per determinare l'ultimo periodo ammissibile.

Suggerirei anche di usare due tabelle: la prima per il normale programma settimanale e la seconda per le vacanze. In tal modo, puoi facilmente tenere traccia delle vacanze e adattarle rapidamente (ad esempio per eventi speciali che offrono parcheggio gratuito, ecc.), Pur essendo in grado di gestire un modello predefinito in modo molto conveniente. Dovresti moltiplicare entrambi i valori (una istruzione AND binaria), quindi procedere come sopra.

    
risposta data 05.07.2013 - 16:36
fonte
1

È necessaria la logica del codice programma per implementare periodi di tempo pagati . Se si consente il pagamento in un giorno per passare a quello successivo, si desidera realmente avere due record di "tempo pagato".

(Dopo tutto, cosa succede quando qualcuno paga il 29 dicembre, e non ritira la sua auto fino a martedì 2 gennaio, dopo due fine settimana e una vacanza in un anno separato? E il parcheggio vuole sapere le loro entrate per mese, trimestre e anno?)

Quando serializzi le informazioni su un database, ti consigliamo comunque due tabelle. "Pagamenti via SMS" e "tempo di parcheggio", che consente pagamenti futuri per altre cose (ad es. SMS per pagare la tariffa più alta per un biglietto) e parcheggi legali per altri motivi (ospiti / residenti, coupon promozionali, ecc. )

In alternativa, se il parcheggio dispone di un sistema intelligente per tenere traccia dei tempi di entrata e uscita delle auto, è sufficiente registrare gli eventi, estrarre una fattura e confrontarla con la registrazione dei pagamenti, che si tratti di SMS o meno. Un "pagamento via SMS" darebbe un credito per 60 minuti (o 3600 secondi, a seconda della risoluzione), e se l'auto ha registrato il tempo senza pagamenti ottengono il secondo, più alto, tasso per non pagare in tempo.

    
risposta data 05.08.2013 - 01:58
fonte
0

Il modo più semplice per tenere in considerazione i periodi di pagamento (orario di lavoro) è quello di cambiare le cose e memorizzare i periodi durante i quali il parcheggio è gratuito.

Quindi puoi regolare valid_from e valid_to timestamp usando un algoritmo come questo:

if (active_payment)
    valid_from = active_payment.valid_to
else
    valid_from = now
if (valid_from in free_parking_period)
    valid_from = free_parking_period.end
valid_to = valid_from + 1 hour
if (valid_to in free_parking_period)
    valid_to = free_parking_period.end + (valid_to - free_parking_period.start)

Per archiviare i periodi di parcheggio gratuito, vorrei semplicemente utilizzare la soluzione più semplice di due colonne DATETIME con l'inizio e la fine di ciascun periodo. Se c'è un parcheggio gratuito la domenica e nei giorni festivi, questo ammonterà a circa 300 voci per un anno.

    
risposta data 05.07.2013 - 16:20
fonte

Leggi altre domande sui tag