定时推送账单添加执行日志;
This commit is contained in:
+19
-9
@@ -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");
|
||||||
|
|||||||
+1
-1
@@ -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>
|
||||||
Reference in New Issue
Block a user