mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-02-20 05:50:53 +08:00
Reschedule lottery finalization on startup
This commit is contained in:
@@ -3,5 +3,11 @@ package com.openisle.repository;
|
||||
import com.openisle.model.LotteryPost;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
public interface LotteryPostRepository extends JpaRepository<LotteryPost, Long> {
|
||||
List<LotteryPost> findByEndTimeAfterAndWinnersIsEmpty(LocalDateTime now);
|
||||
|
||||
List<LotteryPost> findByEndTimeBeforeAndWinnersIsEmpty(LocalDateTime now);
|
||||
}
|
||||
|
||||
@@ -42,6 +42,8 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
|
||||
@Service
|
||||
public class PostService {
|
||||
private final PostRepository postRepository;
|
||||
@@ -100,6 +102,20 @@ public class PostService {
|
||||
this.publishMode = publishMode;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
private void rescheduleLotteries() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
for (LotteryPost lp : lotteryPostRepository.findByEndTimeAfterAndWinnersIsEmpty(now)) {
|
||||
ScheduledFuture<?> future = taskScheduler.schedule(
|
||||
() -> finalizeLottery(lp.getId()),
|
||||
java.util.Date.from(lp.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
|
||||
scheduledFinalizations.put(lp.getId(), future);
|
||||
}
|
||||
for (LotteryPost lp : lotteryPostRepository.findByEndTimeBeforeAndWinnersIsEmpty(now)) {
|
||||
finalizeLottery(lp.getId());
|
||||
}
|
||||
}
|
||||
|
||||
public PublishMode getPublishMode() {
|
||||
return publishMode;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user