Come automatizzare determinate attività in un'applicazione web?

2

Sto lavorando al mio progetto finale per un corso chiamato Applicazioni Web in ASP.NET.

Fondamentalmente, è un'applicazione web per i negozianti per gestire i conti del denaro dei loro clienti nei loro negozi.

Per aprire un account, il negoziante e l'altra persona devono concordare la durata del periodo per il conto, il tasso di interesse e altre variabili.

Ad esempio, supponiamo che una persona apra un account oggi e in due settimane, deve pagare tutti i prodotti che ha comprato. Se non paga quel giorno, ha addebitato una tariffa per il pagamento in ritardo. Questa tassa di pagamento in ritardo viene addebitata ogni giorno fino a quando la persona annulla il suo debito.

È importante ricordare che una persona può pagare parzialmente o totalmente l'importo dovuto prima del giorno di chiusura.

Ora, come posso eseguire quell'azione nella mia applicazione web, in modo che controlli dopo un periodo di tempo se l'utente ha pagato o meno e se non lo ha, controlla tutti i giorni fino a quando l'utente non ha cancellato tutti i suoi debiti ?

Questo è lo pseudocodice per l'azione che voglio eseguire:

Questo pseudocodice può essere ulteriormente migliorato, ma penso che spieghi cosa voglio ottenere

if today is the closing day for a user's account
   if user's account amount is 0
      don't execute this task anymore and discard it
   else 
      charge the person a late payment fee

if today's date is greater than the closing day for a user's account
   if user's account amount is 0
      don't execute this task anymore and discard it
   else 
      charge the person a late payment fee

Inoltre, questa azione dovrebbe essere eseguita sul database o sul server?

Sto utilizzando Asp.Net MVC5 e IIS 10.0 per lo sviluppo dell'applicazione web. E per il database, sto usando SQL Server 2014.

Spero di essere stato chiaro e se non l'avessi fatto, per favore fammelo sapere. E a proposito, l'inglese non è la mia lingua madre; si prega di scusare eventuali errori da parte mia.

    
posta GianMS 30.06.2017 - 06:30
fonte

4 risposte

2

Nulla nelle tue richieste suggerisce che devi eseguire un batch ogni giorno. Invece, è necessario essere in grado di calcolare il saldo di un cliente nel momento in cui è necessario: quando l'utente richiede il suo saldo, riceve una fattura o se desidera stampare lettere di raccolta.

La cosa divertente dei computer è che non sanno che giorno è. Non è necessario eseguire un calcolo nel giorno in cui si applica-- puoi farlo in modo retroattivo.

Ad esempio, se un utente ha aperto un account il 1 ° gennaio e oggi è il 1 ° febbraio e desideri calcolare il suo saldo, ti serve solo qualcosa come

public decimal GetCurrentBalance(User user)
{
    var balance = user.BalanceAsOfDate(user.DateAccountOpened);
    for (DateTime d = user.DateAccountOpened; d < DateTime.Today; d = d.AddDays(1))
    {
        if (d > user.dateAccountOpened.AddDays(14))
        {
            balance += lateFeeAmount;
        }
    }
    return balance;
}

In molte situazioni forse sarebbe preferibile avere un lavoro giornaliero-- ad es. se hai rapporti giornalieri che sommano i crediti della società-- ma per il tuo problema specifico, non è necessario.

    
risposta data 30.06.2017 - 21:39
fonte
1

I programmi fanno bene i lavori ripetitivi.

Invece di pianificare le attività in una data e un momento precisi, prova a pianificare 3 attività periodiche.

Attività 1: account in scadenza

Diciamo che questa attività viene eseguita una volta all'ora. L'attività cerca nel database quegli account che stanno per scadere (ad esempio, entro 2-3 giorni). I proprietari sono informati riguardo a questo argomento almeno una volta.

Attività 2: chiusura degli account

Come le attività precedenti, potrebbe essere eseguito una volta all'ora. L'attività cerca gli account che scadono oggi per chiuderli.

Attività 3: Calcola penalità

Questa attività potrebbe essere pianificata per essere eseguita giornalmente. Cerca account già scaduti con importi superiori a 0. Calcola e aggiorna la penalità.

Per quanto riguarda questo argomento, potresti essere interessato a: processi batch e Programmatori di lavoro .

Esistono numerosi modi per pianificare le attività. Sono un fan della semplicità quindi suggerirei di cercare programmatori di attività compatibili con espressioni cron .

Nota : la periodicità suggerita qui è solo a scopo illustrativo, messa a punto in base alle tue preferenze ed esigenze.

    
risposta data 30.06.2017 - 09:02
fonte
0

Esecuzione dell'applicazione console pianificata

  1. Preferisco un'applicazione console per questo tipo di lavoro, perché con una console applicazione posso fare calcoli e logica personalizzati. La console l'applicazione può anche utilizzare le stored procedure.
  2. Un altro vantaggio dell'applicazione console è la possibilità di monitorare le attività del registro. Se genera qualche errore che possiamo vedere sulla console. Inoltre, il registro può anche essere salvato in DB, file di testo ecc.
  3. Un'applicazione console è indipendente dal database specifico. Può funzionare con SQL Server, Oracle ecc.

Pianificazione di un'applicazione console da eseguire su base periodica su Windows Server o Windows 7/10

  1. Apri Task Scheduler Applicazione nel sistema operativo Windows
  2. In Action Menu , fai clic su Crea attività.
  3. Nella finestra Crea attività. Imposta Trigger , ovvero il programma di esecuzione dell'applicazione console
  4. Nella stessa finestra - imposta Action i.e. il percorso dell'eseguibile.
  5. Fai clic su OK e chiudi la finestra. Fine
risposta data 04.07.2017 - 08:11
fonte
-1

Penso che un buon modo per farlo sarebbe sul lato SQL Server. Creare un LAVORO che esegue una procedura memorizzata (forse ogni ora? Giorno?) Che entra e controlla e modifica i dati di conseguenza. Il front-end finirà per raccogliere i dati ogni volta che effettui una chiamata di servizio.

    
risposta data 30.06.2017 - 18:55
fonte

Leggi altre domande sui tag