From eba80bd9cc454a390c450564ce503313251ba725 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Fri, 12 Sep 2025 16:16:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=97=A5=E7=BA=BF?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9B=B4=E6=96=B0=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/service/task/UpdateDailyNode.java | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateDailyNode.java b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateDailyNode.java index deadf7e..0a03023 100644 --- a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateDailyNode.java +++ b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateDailyNode.java @@ -1,25 +1,28 @@ package com.lanyuanxiaoyao.leopard.server.service.task; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.lanyuanxiaoyao.leopard.core.entity.Daily; import com.lanyuanxiaoyao.leopard.core.entity.Stock; import com.lanyuanxiaoyao.leopard.core.repository.DailyRepository; import com.lanyuanxiaoyao.leopard.core.repository.StockRepository; +import com.lanyuanxiaoyao.leopard.server.helper.NumberHelper; +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.HashMap; import java.util.HashSet; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.support.TransactionTemplate; @Slf4j @LiteflowComponent("update_daily") -public class UpdateDailyNode extends NodeComponent { +public class UpdateDailyNode extends TaskNodeComponent { private final StockRepository stockRepository; private final DailyRepository dailyRepository; @@ -27,14 +30,14 @@ public class UpdateDailyNode extends NodeComponent { private final TransactionTemplate transactionTemplate; - public UpdateDailyNode(StockRepository stockRepository, DailyRepository dailyRepository, TuShareService tuShareService, TransactionTemplate transactionTemplate) { + public UpdateDailyNode(TaskService taskService, StockRepository stockRepository, DailyRepository dailyRepository, TuShareService tuShareService, TransactionTemplate transactionTemplate) { + super(taskService); this.stockRepository = stockRepository; this.dailyRepository = dailyRepository; this.tuShareService = tuShareService; this.transactionTemplate = transactionTemplate; } - // @Transactional(rollbackOn = Throwable.class) @Override public void process() { var tradeDates = new HashSet(); @@ -50,11 +53,13 @@ public class UpdateDailyNode extends NodeComponent { var nowDate = LocalDate.now(); var stocks = stockRepository.findAll(); var stocksMap = stocks.stream().collect(Collectors.toMap(Stock::getCode, stock -> stock)); - tradeDates.stream() + var allTradeDates = tradeDates.stream() .filter(date -> date.isBefore(nowDate) || date.isEqual(nowDate)) .filter(date -> !existsTradeDates.contains(date)) .sorted() - .parallel() + .toList(); + var total = new AtomicInteger(allTradeDates.size()); + allTradeDates.parallelStream() .forEach(tradeDate -> { var factorResponse = tuShareService.factorList(tradeDate); var factorMap = new HashMap(); @@ -65,30 +70,27 @@ public class UpdateDailyNode extends NodeComponent { var response = tuShareService.dailyList(tradeDate); transactionTemplate.execute(status -> { try { - var count = 0; for (List item : response.data().items()) { var code = item.get(0); if (stocksMap.containsKey(code)) { - count++; var stock = stocksMap.get(code); var factor = factorMap.get(code); var daily = new Daily(); - daily.setTradeDate(LocalDate.parse(item.get(1), TuShareService.TRADE_FORMAT)); - daily.setOpen(item.get(2) == null ? null : Double.parseDouble(item.get(2))); - daily.setHigh(item.get(3) == null ? null : Double.parseDouble(item.get(3))); - daily.setLow(item.get(4) == null ? null : Double.parseDouble(item.get(4))); - daily.setClose(item.get(5) == null ? null : Double.parseDouble(item.get(5))); - daily.setPreviousClose(item.get(6) == null ? null : Double.parseDouble(item.get(6))); - daily.setPriceChangeAmount(item.get(7) == null ? null : Double.parseDouble(item.get(7))); - daily.setPriceFluctuationRange(item.get(8) == null ? null : Double.parseDouble(item.get(8))); - daily.setVolume(item.get(9) == null ? null : Double.parseDouble(item.get(9))); - daily.setTurnover(item.get(10) == null ? null : Double.parseDouble(item.get(10)) * 1000); + daily.setTradeDate(tradeDate); + daily.setOpen(NumberHelper.parseDouble(item.get(2))); + daily.setHigh(NumberUtil.parseDouble(item.get(3))); + daily.setLow(NumberUtil.parseDouble(item.get(4))); + daily.setClose(NumberUtil.parseDouble(item.get(5))); + daily.setPreviousClose(NumberUtil.parseDouble(item.get(6))); + daily.setPriceChangeAmount(NumberUtil.parseDouble(item.get(7))); + daily.setPriceFluctuationRange(NumberUtil.parseDouble(item.get(8))); + daily.setVolume(NumberUtil.parseDouble(item.get(9))); + daily.setTurnover(NumberUtil.parseDouble(item.get(10))); daily.setFactor(factor); daily.setStock(stock); dailyRepository.save(daily); } } - log.info("Trade date: {} {}", tradeDate, count); return true; } catch (Exception exception) { log.error("Error", exception);