diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/scheduledTask/repository/task/BillingScheduler.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/scheduledTask/repository/task/BillingScheduler.java index 226662cb5..a7de656dd 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/scheduledTask/repository/task/BillingScheduler.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/scheduledTask/repository/task/BillingScheduler.java @@ -14,6 +14,7 @@ import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; @Component public class BillingScheduler { @@ -37,18 +38,27 @@ public class BillingScheduler { List tasks = scheduledTaskMapper.findPendingTasks( start, now, "PENDING", 100); - + List taskLogs = scheduledTaskLogMapper.findTasks(); for (ScheduledTask task : tasks) { try { - // 乐观锁更新状态,防止重复执行 - int updated = scheduledTaskMapper.updateStatusIfPending( - task.getId(), "PENDING", "PROCESSING"); + Long taskId = task.getId(); + List matchedLogs = taskLogs.stream() + .filter(log -> taskId.equals(log.getTaskId())) + .collect(Collectors.toList()); + if (matchedLogs.size() > 0) { + //如果本月已经执行过跳过 + continue; + } else { + // 乐观锁更新状态,防止重复执行 + int updated = scheduledTaskMapper.updateStatusIfPending( + task.getId(), "PENDING", "PROCESSING"); - if (updated > 0) { - // 异步执行具体业务 - CompletableFuture.runAsync(() -> { - executeTask(task); - }); + if (updated > 0) { + // 异步执行具体业务 + CompletableFuture.runAsync(() -> { + executeTask(task); + }); + } } } catch (Exception e) { scheduledTaskMapper.updateStatus(task.getId(), "FAILED"); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/scheduledTaskLog/repository/mapper/ScheduledTaskLogMapper.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/scheduledTaskLog/repository/mapper/ScheduledTaskLogMapper.java index a18a1dd14..2740536dc 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/scheduledTaskLog/repository/mapper/ScheduledTaskLogMapper.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/scheduledTaskLog/repository/mapper/ScheduledTaskLogMapper.java @@ -10,5 +10,5 @@ import java.time.LocalDateTime; import java.util.List; public interface ScheduledTaskLogMapper extends BaseMapper { - + List findTasks(); } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ScheduledTaskLogMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ScheduledTaskLogMapper.xml new file mode 100644 index 000000000..d41e6005d --- /dev/null +++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ScheduledTaskLogMapper.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file