mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-03-16 09:00:47 +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 com.openisle.model.LotteryPost;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface LotteryPostRepository extends JpaRepository<LotteryPost, Long> {
|
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.ConcurrentMap;
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class PostService {
|
public class PostService {
|
||||||
private final PostRepository postRepository;
|
private final PostRepository postRepository;
|
||||||
@@ -100,6 +102,20 @@ public class PostService {
|
|||||||
this.publishMode = publishMode;
|
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() {
|
public PublishMode getPublishMode() {
|
||||||
return publishMode;
|
return publishMode;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user