定时推送账单添加执行日志;

This commit is contained in:
王奎兴
2026-03-24 10:35:37 +08:00
parent 9825b64016
commit a98bf7327f
3 changed files with 33 additions and 10 deletions
@@ -14,6 +14,7 @@ import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@Component @Component
public class BillingScheduler { public class BillingScheduler {
@@ -37,18 +38,27 @@ public class BillingScheduler {
List<ScheduledTask> tasks = scheduledTaskMapper.findPendingTasks( List<ScheduledTask> tasks = scheduledTaskMapper.findPendingTasks(
start, now, "PENDING", 100); start, now, "PENDING", 100);
List<ScheduledTaskLog> taskLogs = scheduledTaskLogMapper.findTasks();
for (ScheduledTask task : tasks) { for (ScheduledTask task : tasks) {
try { try {
// 乐观锁更新状态,防止重复执行 Long taskId = task.getId();
int updated = scheduledTaskMapper.updateStatusIfPending( List<ScheduledTaskLog> matchedLogs = taskLogs.stream()
task.getId(), "PENDING", "PROCESSING"); .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) { if (updated > 0) {
// 异步执行具体业务 // 异步执行具体业务
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
executeTask(task); executeTask(task);
}); });
}
} }
} catch (Exception e) { } catch (Exception e) {
scheduledTaskMapper.updateStatus(task.getId(), "FAILED"); scheduledTaskMapper.updateStatus(task.getId(), "FAILED");
@@ -10,5 +10,5 @@ import java.time.LocalDateTime;
import java.util.List; import java.util.List;
public interface ScheduledTaskLogMapper extends BaseMapper<ScheduledTaskLog> { public interface ScheduledTaskLogMapper extends BaseMapper<ScheduledTaskLog> {
List<ScheduledTaskLog> findTasks();
} }
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mhd.basic.domain.scheduledTaskLog.repository.mapper.ScheduledTaskLogMapper">
<!-- 查询待执行任务 -->
<select id="findTasks" resultType="com.mhd.basic.domain.scheduledTaskLog.entity.ScheduledTaskLog">
SELECT *
FROM SCHEDULED_TASK_LOG
WHERE TRUNC(EXECUTE_TIME, 'MONTH') = TRUNC(SYSDATE, 'MONTH');
</select>
</mapper>