From 8011a4f2cb20531334a906382f12ffb8c1b34b91 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Wed, 24 Sep 2025 21:57:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dyear=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=9C=A8=E4=B8=8D=E5=90=8C=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9A=84?= =?UTF-8?q?=E8=A1=A8=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leopard/core/entity/FinanceIndicator.java | 2 ++ .../lanyuanxiaoyao/leopard/core/entity/Yearly.java | 2 +- .../leopard/core/repository/DailyRepository.java | 2 -- leopard-server/pom.xml | 5 +++++ .../leopard/server/service/task/UpdateYearly.java | 14 ++++++++++---- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/entity/FinanceIndicator.java b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/entity/FinanceIndicator.java index 2a3f445..b57d045 100644 --- a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/entity/FinanceIndicator.java +++ b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/entity/FinanceIndicator.java @@ -2,6 +2,7 @@ package com.lanyuanxiaoyao.leopard.core.entity; import com.lanyuanxiaoyao.leopard.core.Constants; import com.lanyuanxiaoyao.service.template.entity.SimpleEntity; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EntityListeners; import jakarta.persistence.ManyToOne; @@ -27,6 +28,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; public class FinanceIndicator extends SimpleEntity { @ManyToOne private Stock stock; + @Column(name = "`year`", nullable = false) @Comment("年报年度") private Integer year; @Comment("总股本") diff --git a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/entity/Yearly.java b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/entity/Yearly.java index e697dd5..a840016 100644 --- a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/entity/Yearly.java +++ b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/entity/Yearly.java @@ -30,7 +30,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; @EntityListeners(AuditingEntityListener.class) @Table(name = Constants.DATABASE_PREFIX + "yearly") public class Yearly extends SimpleEntity { - @Column(nullable = false) + @Column(name = "`year`", nullable = false) @Comment("年份") private Integer year; @Comment("开盘价") diff --git a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/repository/DailyRepository.java b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/repository/DailyRepository.java index 2363a88..4980dcc 100644 --- a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/repository/DailyRepository.java +++ b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/repository/DailyRepository.java @@ -25,8 +25,6 @@ public interface DailyRepository extends SimpleRepository { @Query("select min(daily.tradeDate) from Daily daily") LocalDate findMinTradeDate(); - List findAllByTradeDate_YearAndStock_Code(int tradeDateYear, String stockCode); - @EntityGraph(attributePaths = {"stock"}) @Override Optional findOne(Predicate predicate); diff --git a/leopard-server/pom.xml b/leopard-server/pom.xml index 168e565..ee1b9e2 100644 --- a/leopard-server/pom.xml +++ b/leopard-server/pom.xml @@ -78,6 +78,11 @@ postgresql runtime + + com.h2database + h2 + runtime + diff --git a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateYearly.java b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateYearly.java index 9f46f3c..d394cca 100644 --- a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateYearly.java +++ b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/service/task/UpdateYearly.java @@ -1,6 +1,7 @@ package com.lanyuanxiaoyao.leopard.server.service.task; import com.lanyuanxiaoyao.leopard.core.entity.Daily; +import com.lanyuanxiaoyao.leopard.core.entity.QDaily; import com.lanyuanxiaoyao.leopard.core.entity.QYearly; import com.lanyuanxiaoyao.leopard.core.entity.Yearly; import com.lanyuanxiaoyao.leopard.core.repository.DailyRepository; @@ -33,17 +34,21 @@ public class UpdateYearly extends TaskNodeComponent { var startYear = dailyRepository.findMinTradeDate().getYear(); var endYear = dailyRepository.findMaxTradeDate().getYear(); var stocks = stockRepository.findAll(); - for (var year = startYear; year <= endYear; year++) { + for (int year = startYear, index = 0; year <= endYear; year++, index++) { var currentYear = year; transactionTemplate.execute(status -> { try { for (var stock : stocks) { + log.info("Processing {} {}", stock.getCode(), currentYear); if (stock.getListedDate().getYear() > currentYear) { continue; } - var dailies = dailyRepository.findAllByTradeDate_YearAndStock_Code(currentYear, stock.getCode()); + var dailies = dailyRepository.findAll( + QDaily.daily.tradeDate.year().eq(currentYear) + .and(QDaily.daily.stock.eq(stock)) + ); var yearly = yearlyRepository.findOne( - QYearly.yearly.stock.code.eq(stock.getCode()) + QYearly.yearly.stock.eq(stock) .and(QYearly.yearly.year.eq(currentYear)) ).orElseGet(Yearly::new); yearly.setStock(stock); @@ -60,11 +65,12 @@ public class UpdateYearly extends TaskNodeComponent { } return true; } catch (Exception exception) { - log.error("Error", exception); + log.error("Error for %s".formatted(currentYear), exception); status.setRollbackOnly(); return false; } }); + setStep((currentYear - startYear) * 100 / (endYear - startYear + 1)); } } }