From a98bf7327f7625a1f33bb151de989236b392dbe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com> Date: Tue, 24 Mar 2026 10:35:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E6=8E=A8=E9=80=81=E8=B4=A6?= =?UTF-8?q?=E5=8D=95=E6=B7=BB=E5=8A=A0=E6=89=A7=E8=A1=8C=E6=97=A5=E5=BF=97?= =?UTF-8?q?;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/task/BillingScheduler.java | 28 +++++++++++++------ .../mapper/ScheduledTaskLogMapper.java | 2 +- .../mapper/basic/ScheduledTaskLogMapper.xml | 13 +++++++++ 3 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 mhd-modules/mhd-system/src/main/resources/mapper/basic/ScheduledTaskLogMapper.xml 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