1
0

feat: 增加年线行情更新

This commit is contained in:
2025-09-22 23:11:31 +08:00
parent dd81ca1150
commit a9b2561be1
11 changed files with 159 additions and 10 deletions

View File

@@ -17,13 +17,13 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@LiteflowComponent("check_daily")
public class CheckDailyNode extends TaskNodeComponent {
public class CheckDaily extends TaskNodeComponent {
private final StockRepository stockRepository;
private final DailyRepository dailyRepository;
private final TuShareService tuShareService;
public CheckDailyNode(TaskService taskService, StockRepository stockRepository, DailyRepository dailyRepository, TuShareService tuShareService) {
public CheckDaily(TaskService taskService, StockRepository stockRepository, DailyRepository dailyRepository, TuShareService tuShareService) {
super(taskService);
this.stockRepository = stockRepository;
this.dailyRepository = dailyRepository;

View File

@@ -21,7 +21,7 @@ import org.springframework.transaction.support.TransactionTemplate;
@Slf4j
@LiteflowComponent("update_daily")
public class UpdateDailyNode extends NodeComponent {
public class UpdateDaily extends NodeComponent {
private final StockRepository stockRepository;
private final DailyRepository dailyRepository;
@@ -29,7 +29,7 @@ public class UpdateDailyNode extends NodeComponent {
private final TransactionTemplate transactionTemplate;
public UpdateDailyNode(StockRepository stockRepository, DailyRepository dailyRepository, TuShareService tuShareService, TransactionTemplate transactionTemplate) {
public UpdateDaily(StockRepository stockRepository, DailyRepository dailyRepository, TuShareService tuShareService, TransactionTemplate transactionTemplate) {
this.stockRepository = stockRepository;
this.dailyRepository = dailyRepository;
this.tuShareService = tuShareService;

View File

@@ -19,13 +19,13 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@LiteflowComponent("update_finance")
public class UpdateFinanceIndicatorNode extends TaskNodeComponent {
public class UpdateFinanceIndicator extends TaskNodeComponent {
private final FinanceIndicatorRepository financeIndicatorRepository;
private final StockRepository stockRepository;
private final TuShareService tuShareService;
protected UpdateFinanceIndicatorNode(TaskService taskService, FinanceIndicatorRepository financeIndicatorRepository, StockRepository stockRepository, TuShareService tuShareService) {
protected UpdateFinanceIndicator(TaskService taskService, FinanceIndicatorRepository financeIndicatorRepository, StockRepository stockRepository, TuShareService tuShareService) {
super(taskService);
this.financeIndicatorRepository = financeIndicatorRepository;
this.stockRepository = stockRepository;

View File

@@ -11,12 +11,12 @@ import java.time.LocalDate;
import java.util.stream.Collectors;
@LiteflowComponent("update_stock")
public class UpdateStockNode extends NodeComponent {
public class UpdateStock extends NodeComponent {
private final StockRepository stockRepository;
private final TuShareService tuShareService;
public UpdateStockNode(StockRepository stockRepository, TuShareService tuShareService) {
public UpdateStock(StockRepository stockRepository, TuShareService tuShareService) {
this.stockRepository = stockRepository;
this.tuShareService = tuShareService;
}

View File

@@ -0,0 +1,70 @@
package com.lanyuanxiaoyao.leopard.server.service.task;
import com.lanyuanxiaoyao.leopard.core.entity.Daily;
import com.lanyuanxiaoyao.leopard.core.entity.QYearly;
import com.lanyuanxiaoyao.leopard.core.entity.Yearly;
import com.lanyuanxiaoyao.leopard.core.repository.DailyRepository;
import com.lanyuanxiaoyao.leopard.core.repository.StockRepository;
import com.lanyuanxiaoyao.leopard.core.repository.YearlyRepository;
import com.lanyuanxiaoyao.leopard.server.service.TaskService;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.support.TransactionTemplate;
@Slf4j
@LiteflowComponent("update_yearly")
public class UpdateYearly extends TaskNodeComponent {
private final StockRepository stockRepository;
private final DailyRepository dailyRepository;
private final YearlyRepository yearlyRepository;
private final TransactionTemplate transactionTemplate;
protected UpdateYearly(TaskService taskService, StockRepository stockRepository, DailyRepository dailyRepository, YearlyRepository yearlyRepository, TransactionTemplate transactionTemplate) {
super(taskService);
this.stockRepository = stockRepository;
this.dailyRepository = dailyRepository;
this.yearlyRepository = yearlyRepository;
this.transactionTemplate = transactionTemplate;
}
@Override
public void process() {
var startYear = dailyRepository.findMinTradeDate().getYear();
var endYear = dailyRepository.findMaxTradeDate().getYear();
var stocks = stockRepository.findAll();
for (var year = startYear; year <= endYear; year++) {
var currentYear = year;
transactionTemplate.execute(status -> {
try {
for (var stock : stocks) {
if (stock.getListedDate().getYear() > currentYear) {
continue;
}
var dailies = dailyRepository.findAllByTradeDate_YearAndStock_Code(currentYear, stock.getCode());
var yearly = yearlyRepository.findOne(
QYearly.yearly.stock.code.eq(stock.getCode())
.and(QYearly.yearly.year.eq(currentYear))
).orElseGet(Yearly::new);
yearly.setStock(stock);
yearly.setYear(currentYear);
yearly.setClose(dailies.getLast().getHfqClose());
yearly.setOpen(dailies.getFirst().getHfqOpen());
yearly.setHigh(dailies.stream().map(Daily::getHfqHigh).max(Double::compareTo).orElse(0.0));
yearly.setLow(dailies.stream().map(Daily::getHfqLow).min(Double::compareTo).orElse(0.0));
yearly.setVolume(dailies.stream().mapToDouble(Daily::getVolume).sum());
yearly.setTurnover(dailies.stream().mapToDouble(Daily::getTurnover).sum());
yearly.setPriceChangeAmount(yearly.getClose() - yearly.getOpen());
yearly.setPriceFluctuationRange((yearly.getClose() - yearly.getOpen()) / yearly.getOpen());
yearlyRepository.save(yearly);
}
return true;
} catch (Exception exception) {
log.error("Error", exception);
status.setRollbackOnly();
return false;
}
});
}
}
}