Erweiterungen
This commit is contained in:
@@ -5,10 +5,12 @@ import com.vaadin.flow.theme.Theme;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
import java.time.Clock;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableScheduling
|
||||
@Theme("default")
|
||||
public class Application implements AppShellConfigurator {
|
||||
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
package de.assecutor.votianlt.service;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.YearMonth;
|
||||
|
||||
/**
|
||||
* Service für monatliche Scheduler-Aufgaben, die am letzten Tag des Monats (Ultimo) ausgeführt werden.
|
||||
*/
|
||||
@Service
|
||||
public class MonthlySchedulerService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(MonthlySchedulerService.class);
|
||||
|
||||
/**
|
||||
* Scheduler, der täglich um 23:00 Uhr läuft und prüft, ob heute der letzte Tag des Monats ist.
|
||||
* Wenn ja, wird die monatliche Aufgabe ausgeführt.
|
||||
*/
|
||||
@Scheduled(cron = "0 0 23 * * *") // Täglich um 23:00 Uhr
|
||||
public void checkAndRunMonthlyTask() {
|
||||
LocalDate today = LocalDate.now();
|
||||
LocalDate lastDayOfMonth = YearMonth.from(today).atEndOfMonth();
|
||||
|
||||
if (today.equals(lastDayOfMonth)) {
|
||||
logger.info("Heute ist der letzte Tag des Monats ({}). Führe monatliche Aufgabe aus.", today);
|
||||
runMonthlyUltimoTask();
|
||||
} else {
|
||||
logger.debug("Heute ({}) ist nicht der letzte Tag des Monats. Nächster Ultimo: {}",
|
||||
today, lastDayOfMonth);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Alternative Implementierung: Direkter Cron-Ausdruck für den letzten Tag des Monats.
|
||||
* Dieser Scheduler läuft am letzten Tag jedes Monats um 23:00 Uhr.
|
||||
*
|
||||
* Hinweis: Dieser Ansatz ist weniger flexibel, da er nicht alle Monate korrekt abdeckt.
|
||||
* Der obige Ansatz mit täglicher Prüfung ist robuster.
|
||||
*/
|
||||
// @Scheduled(cron = "0 0 23 L * *") // Am letzten Tag des Monats um 23:00 Uhr
|
||||
public void runMonthlyUltimoTaskDirect() {
|
||||
logger.info("Monatliche Ultimo-Aufgabe wird direkt ausgeführt am: {}", LocalDate.now());
|
||||
runMonthlyUltimoTask();
|
||||
}
|
||||
|
||||
/**
|
||||
* Die eigentliche monatliche Aufgabe, die am Ultimo ausgeführt wird.
|
||||
* Hier können Sie Ihre spezifische Geschäftslogik implementieren.
|
||||
*/
|
||||
private void runMonthlyUltimoTask() {
|
||||
try {
|
||||
logger.info("=== MONATLICHE ULTIMO-AUFGABE GESTARTET ===");
|
||||
|
||||
// TODO: Hier Ihre spezifische Geschäftslogik implementieren
|
||||
// Beispiele:
|
||||
// - Monatliche Berichte generieren
|
||||
// - Datenbereinigung durchführen
|
||||
// - Rechnungen erstellen
|
||||
// - Statistiken berechnen
|
||||
// - E-Mail-Benachrichtigungen versenden
|
||||
|
||||
// Beispiel-Implementierung:
|
||||
generateMonthlyReports();
|
||||
cleanupOldData();
|
||||
sendMonthlyNotifications();
|
||||
|
||||
logger.info("=== MONATLICHE ULTIMO-AUFGABE ERFOLGREICH ABGESCHLOSSEN ===");
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("Fehler bei der Ausführung der monatlichen Ultimo-Aufgabe", e);
|
||||
// Hier könnten Sie zusätzliche Fehlerbehandlung implementieren,
|
||||
// z.B. E-Mail-Benachrichtigung an Administratoren
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Beispiel-Methode: Monatliche Berichte generieren
|
||||
*/
|
||||
private void generateMonthlyReports() {
|
||||
logger.info("Generiere monatliche Berichte...");
|
||||
// TODO: Implementierung der Berichtsgenerierung
|
||||
}
|
||||
|
||||
/**
|
||||
* Beispiel-Methode: Alte Daten bereinigen
|
||||
*/
|
||||
private void cleanupOldData() {
|
||||
logger.info("Bereinige alte Daten...");
|
||||
// TODO: Implementierung der Datenbereinigung
|
||||
}
|
||||
|
||||
/**
|
||||
* Beispiel-Methode: Monatliche Benachrichtigungen versenden
|
||||
*/
|
||||
private void sendMonthlyNotifications() {
|
||||
logger.info("Versende monatliche Benachrichtigungen...");
|
||||
// TODO: Implementierung der Benachrichtigungen
|
||||
}
|
||||
|
||||
/**
|
||||
* Hilfsmethode zum manuellen Auslösen der monatlichen Aufgabe (z.B. für Tests)
|
||||
*/
|
||||
public void triggerMonthlyTaskManually() {
|
||||
logger.info("Monatliche Aufgabe wird manuell ausgelöst");
|
||||
runMonthlyUltimoTask();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user