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)); } } }