Erweiterungen

This commit is contained in:
2025-09-18 10:10:33 +02:00
parent 10745a7203
commit a13aa09a63
2 changed files with 113 additions and 0 deletions

View File

@@ -5,10 +5,12 @@ import com.vaadin.flow.theme.Theme;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import java.time.Clock; import java.time.Clock;
@SpringBootApplication @SpringBootApplication
@EnableScheduling
@Theme("default") @Theme("default")
public class Application implements AppShellConfigurator { public class Application implements AppShellConfigurator {

View File

@@ -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();
}
}