1
0

feat: 增加金字塔选股任务

This commit is contained in:
2025-09-25 17:46:52 +08:00
parent 02508a5426
commit 3991effa88
4 changed files with 50 additions and 3 deletions

View File

@@ -25,13 +25,11 @@ import org.springframework.stereotype.Service;
@Slf4j
@Service
public class StockService extends SimpleServiceSupport<Stock> {
private final StockRepository stockRepository;
private final FinanceIndicatorRepository financeIndicatorRepository;
private final DailyRepository dailyRepository;
public StockService(StockRepository repository, FinanceIndicatorRepository financeIndicatorRepository, DailyRepository dailyRepository) {
super(repository);
this.stockRepository = repository;
this.financeIndicatorRepository = financeIndicatorRepository;
this.dailyRepository = dailyRepository;
}

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.lanyuanxiaoyao.leopard.core.entity.Task;
import com.lanyuanxiaoyao.leopard.core.repository.TaskRepository;
import com.lanyuanxiaoyao.leopard.server.service.task.PyramidSelect;
import com.lanyuanxiaoyao.leopard.server.service.task.TaskRunner;
import com.lanyuanxiaoyao.leopard.server.service.task.UpdateDailyTask;
import com.lanyuanxiaoyao.leopard.server.service.task.UpdateFinanceIndicatorTask;
@@ -40,7 +41,8 @@ public class TaskService extends SimpleServiceSupport<Task> {
new TaskTemplate("更新股票信息", "更新股票信息", UpdateStockTask.class),
new TaskTemplate("更新年线指标", "更新年线指标", UpdateYearlyTask.class),
new TaskTemplate("更新日线数据", "更新日线数据", UpdateDailyTask.class),
new TaskTemplate("更新财务指标", "更新财务指标", UpdateFinanceIndicatorTask.class)
new TaskTemplate("更新财务指标", "更新财务指标", UpdateFinanceIndicatorTask.class),
new TaskTemplate("金字塔选股", "金字塔选股", PyramidSelect.class)
).collect(Collectors.toSet());
private final Map<String, TaskTemplate> templateMap = templates.stream()
.collect(Collectors.toMap(TaskTemplate::id, template -> template));

View File

@@ -0,0 +1,45 @@
package com.lanyuanxiaoyao.leopard.server.service.task;
import com.lanyuanxiaoyao.leopard.core.entity.StockCollection;
import com.lanyuanxiaoyao.leopard.core.repository.StockCollectionRepository;
import com.lanyuanxiaoyao.leopard.core.service.selector.PyramidStockSelector;
import com.lanyuanxiaoyao.leopard.core.service.selector.StockSelector;
import java.time.LocalDate;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* 金字塔选股
*
* @author lanyuanxiaoyao
* @version 20250925
*/
@Slf4j
@Component
public class PyramidSelect extends TaskRunner {
private final StockCollectionRepository stockCollectionRepository;
private final PyramidStockSelector pyramidStockSelector;
protected PyramidSelect(ApplicationContext context, StockCollectionRepository stockCollectionRepository, PyramidStockSelector pyramidStockSelector) {
super(context);
this.stockCollectionRepository = stockCollectionRepository;
this.pyramidStockSelector = pyramidStockSelector;
}
@Transactional(rollbackFor = Throwable.class)
@Override
public String process(Map<String, Object> params, StepUpdater updater) throws Exception {
var candidates = pyramidStockSelector.select(new PyramidStockSelector.Request(LocalDate.now().getYear(), 50));
var collection = new StockCollection();
collection.setName("金字塔选股");
collection.setDescription("金字塔选股");
collection.setStocks(candidates.stream().map(StockSelector.Candidate::stock).collect(Collectors.toSet()));
stockCollectionRepository.save(collection);
return null;
}
}