1
0

feat: 任务增加进度接口

This commit is contained in:
2025-09-08 21:26:39 +08:00
parent 30225afcba
commit 3114654280
7 changed files with 72 additions and 27 deletions

View File

@@ -59,6 +59,9 @@ public class Task extends SimpleEntity {
@Enumerated(EnumType.STRING)
@Comment("任务状态")
private Status status = Status.RUNNING;
@Column(nullable = false)
@Comment("任务进度")
private Integer step = 0;
@Comment("任务开始时间")
private LocalDateTime launchedTime;
@Comment("任务结束时间")

View File

@@ -15,4 +15,8 @@ public interface TaskRepository extends SimpleRepository<Task> {
@Modifying
@Query("update Task task set task.status = com.lanyuanxiaoyao.leopard.core.entity.Task.Status.FAILURE where task.status = com.lanyuanxiaoyao.leopard.core.entity.Task.Status.RUNNING")
void updateAllRunningTaskToFailure();
@Modifying
@Query("update Task task set task.step = ?1 where task.id = ?2")
void updateStepById(Integer step, Long id);
}

View File

@@ -73,7 +73,8 @@ public class TaskController extends SimpleControllerSupport<Task, Void, TaskCont
task.getLaunchedTime(),
task.getFinishedTime(),
cost.cost(),
cost.costText()
cost.costText(),
task.getStep()
);
};
}
@@ -92,7 +93,8 @@ public class TaskController extends SimpleControllerSupport<Task, Void, TaskCont
task.getLaunchedTime(),
task.getFinishedTime(),
cost.cost(),
cost.costText()
cost.costText(),
task.getStep()
);
};
}
@@ -105,7 +107,8 @@ public class TaskController extends SimpleControllerSupport<Task, Void, TaskCont
LocalDateTime launchedTime,
LocalDateTime finishedTime,
Long cost,
String costText
String costText,
Integer step
) {
}
@@ -119,7 +122,8 @@ public class TaskController extends SimpleControllerSupport<Task, Void, TaskCont
LocalDateTime launchedTime,
LocalDateTime finishedTime,
Long cost,
String costText
String costText,
Integer step
) {
}

View File

@@ -42,4 +42,9 @@ public class TaskService extends SimpleServiceSupport<Task> {
var context = new TaskMonitorNodes.TaskMonitorContext(template);
flowExecutor.execute2Future(template.getChain(), params, context);
}
@Transactional(rollbackOn = Throwable.class)
public void updateStepById(Integer step, Long id) {
taskRepository.updateStepById(step, id);
}
}

View File

@@ -6,9 +6,9 @@ import cn.hutool.core.util.StrUtil;
import com.lanyuanxiaoyao.leopard.core.entity.Stock;
import com.lanyuanxiaoyao.leopard.server.service.DailyService;
import com.lanyuanxiaoyao.leopard.server.service.StockService;
import com.lanyuanxiaoyao.leopard.server.service.TaskService;
import com.lanyuanxiaoyao.leopard.server.service.TuShareService;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@@ -17,12 +17,13 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@LiteflowComponent("check_daily")
public class CheckDailyNode extends NodeComponent {
public class CheckDailyNode extends TaskNodeComponent {
private final StockService stockService;
private final DailyService dailyService;
private final TuShareService tuShareService;
public CheckDailyNode(StockService stockService, DailyService dailyService, TuShareService tuShareService) {
public CheckDailyNode(TaskService taskService, StockService stockService, DailyService dailyService, TuShareService tuShareService) {
super(taskService);
this.stockService = stockService;
this.dailyService = dailyService;
this.tuShareService = tuShareService;
@@ -42,7 +43,9 @@ public class CheckDailyNode extends NodeComponent {
.map(item -> LocalDate.parse(item.get(0), TuShareService.TRADE_FORMAT))
.filter(date -> date.isBefore(nowDate) || date.isEqual(nowDate))
.toList();
stocks.forEach(stock -> {
var total = stocks.size();
var progress = 0;
for (Stock stock : stocks) {
if (exchange.equals(stock.getMarket())) {
var existsTradeDates = dailyService.findDistinctTradeDateByStockId(stock.getId());
var missedTradeDates = allTradeDates.stream()
@@ -62,7 +65,8 @@ public class CheckDailyNode extends NodeComponent {
));
}
}
});
setStep(++progress * 100 / total);
}
}
if (ObjectUtil.isNotEmpty(reports)) {
var context = getContextBean(TaskMonitorNodes.TaskMonitorContext.class);

View File

@@ -45,6 +45,7 @@ public class TaskMonitorNodes {
if (ObjectUtil.isNotNull(taskId)) {
var task = taskService.detail(taskId);
task.setStatus(Task.Status.SUCCESS);
task.setStep(100);
task.setFinishedTime(LocalDateTime.now());
var result = node.<String>getContextValue("taskResult");
if (StrUtil.isNotBlank(result)) {

View File

@@ -0,0 +1,24 @@
package com.lanyuanxiaoyao.leopard.server.service.task;
import com.lanyuanxiaoyao.leopard.server.service.TaskService;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.exception.NoSuchContextBeanException;
public abstract class TaskNodeComponent extends NodeComponent {
private final TaskService taskService;
protected TaskNodeComponent(TaskService taskService) {
this.taskService = taskService;
}
protected void setStep(int step) {
if (step < 0 || step > 100) {
throw new IllegalArgumentException("step must be between 0 and 100");
}
try {
var context = getContextBean(TaskMonitorNodes.TaskMonitorContext.class);
taskService.updateStepById(step, context.getTaskId());
} catch (NoSuchContextBeanException ignored) {
}
}
}