blob: 2ca443e64465483112547c87995c376db34025d8 [file] [log] [blame]
rhj6b9e3af2025-06-09 22:00:38 +08001package scheduler;
2
3import cheat.Cheat;
4import database.Database1;
5import org.slf4j.Logger;
6import org.slf4j.LoggerFactory;
7import java.util.concurrent.Executors;
8import java.util.concurrent.ScheduledExecutorService;
9import java.util.concurrent.TimeUnit;
10
11/**
12 * 定时任务服务,负责定期执行各种维护任务
13 */
14public class SchedulerService {
15 private static final Logger logger = LoggerFactory.getLogger(SchedulerService.class);
16 private final ScheduledExecutorService scheduler;
17 private final Cheat cheat;
18 private final Database1 database1;
19
20 public SchedulerService() {
21 this.scheduler = Executors.newScheduledThreadPool(2);
22 this.cheat = new Cheat();
23 this.database1 = new Database1();
24 logger.info("SchedulerService 初始化完成");
25 }
26
27 /**
28 * 启动所有定时任务
29 */
30 public void start() {
31 // 每分钟执行一次 PunishUser 函数
32 scheduler.scheduleAtFixedRate(
33 this::executePunishUser,
34 0, // 初始延迟1分钟
35 1, // 每1分钟执行一次
36 TimeUnit.MINUTES
37 );
38
39 logger.info("定时任务已启动 - PunishUser 任务将每分钟执行一次");
40 }
41
42 /**
43 * 执行用户惩罚任务
44 */
45 private void executePunishUser() {
46 try {
47 logger.info("开始执行 PunishUser 定时任务");
48 cheat.PunishUser();
49 database1.SettleBeg();
50 logger.info("PunishUser 定时任务执行完成");
51 } catch (Exception e) {
52 logger.error("执行 PunishUser 定时任务时发生错误: {}", e.getMessage(), e);
53 }
54 }
55
56 /**
57 * 停止所有定时任务
58 */
59 public void stop() {
60 if (scheduler != null && !scheduler.isShutdown()) {
61 scheduler.shutdown();
62 try {
63 if (!scheduler.awaitTermination(10, TimeUnit.SECONDS)) {
64 scheduler.shutdownNow();
65 }
66 logger.info("定时任务服务已停止");
67 } catch (InterruptedException e) {
68 scheduler.shutdownNow();
69 Thread.currentThread().interrupt();
70 logger.warn("停止定时任务服务时被中断");
71 }
72 }
73 }
74}