1
0

fix: 修复year字段在不同数据库的表现

This commit is contained in:
2025-09-24 21:57:07 +08:00
parent a9b2561be1
commit 8011a4f2cb
5 changed files with 18 additions and 7 deletions

View File

@@ -2,6 +2,7 @@ package com.lanyuanxiaoyao.leopard.core.entity;
import com.lanyuanxiaoyao.leopard.core.Constants; import com.lanyuanxiaoyao.leopard.core.Constants;
import com.lanyuanxiaoyao.service.template.entity.SimpleEntity; import com.lanyuanxiaoyao.service.template.entity.SimpleEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners; import jakarta.persistence.EntityListeners;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
@@ -27,6 +28,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
public class FinanceIndicator extends SimpleEntity { public class FinanceIndicator extends SimpleEntity {
@ManyToOne @ManyToOne
private Stock stock; private Stock stock;
@Column(name = "`year`", nullable = false)
@Comment("年报年度") @Comment("年报年度")
private Integer year; private Integer year;
@Comment("总股本") @Comment("总股本")

View File

@@ -30,7 +30,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
@EntityListeners(AuditingEntityListener.class) @EntityListeners(AuditingEntityListener.class)
@Table(name = Constants.DATABASE_PREFIX + "yearly") @Table(name = Constants.DATABASE_PREFIX + "yearly")
public class Yearly extends SimpleEntity { public class Yearly extends SimpleEntity {
@Column(nullable = false) @Column(name = "`year`", nullable = false)
@Comment("年份") @Comment("年份")
private Integer year; private Integer year;
@Comment("开盘价") @Comment("开盘价")

View File

@@ -25,8 +25,6 @@ public interface DailyRepository extends SimpleRepository<Daily> {
@Query("select min(daily.tradeDate) from Daily daily") @Query("select min(daily.tradeDate) from Daily daily")
LocalDate findMinTradeDate(); LocalDate findMinTradeDate();
List<Daily> findAllByTradeDate_YearAndStock_Code(int tradeDateYear, String stockCode);
@EntityGraph(attributePaths = {"stock"}) @EntityGraph(attributePaths = {"stock"})
@Override @Override
Optional<Daily> findOne(Predicate predicate); Optional<Daily> findOne(Predicate predicate);

View File

@@ -78,6 +78,11 @@
<artifactId>postgresql</artifactId> <artifactId>postgresql</artifactId>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -1,6 +1,7 @@
package com.lanyuanxiaoyao.leopard.server.service.task; package com.lanyuanxiaoyao.leopard.server.service.task;
import com.lanyuanxiaoyao.leopard.core.entity.Daily; 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.QYearly;
import com.lanyuanxiaoyao.leopard.core.entity.Yearly; import com.lanyuanxiaoyao.leopard.core.entity.Yearly;
import com.lanyuanxiaoyao.leopard.core.repository.DailyRepository; import com.lanyuanxiaoyao.leopard.core.repository.DailyRepository;
@@ -33,17 +34,21 @@ public class UpdateYearly extends TaskNodeComponent {
var startYear = dailyRepository.findMinTradeDate().getYear(); var startYear = dailyRepository.findMinTradeDate().getYear();
var endYear = dailyRepository.findMaxTradeDate().getYear(); var endYear = dailyRepository.findMaxTradeDate().getYear();
var stocks = stockRepository.findAll(); var stocks = stockRepository.findAll();
for (var year = startYear; year <= endYear; year++) { for (int year = startYear, index = 0; year <= endYear; year++, index++) {
var currentYear = year; var currentYear = year;
transactionTemplate.execute(status -> { transactionTemplate.execute(status -> {
try { try {
for (var stock : stocks) { for (var stock : stocks) {
log.info("Processing {} {}", stock.getCode(), currentYear);
if (stock.getListedDate().getYear() > currentYear) { if (stock.getListedDate().getYear() > currentYear) {
continue; 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( var yearly = yearlyRepository.findOne(
QYearly.yearly.stock.code.eq(stock.getCode()) QYearly.yearly.stock.eq(stock)
.and(QYearly.yearly.year.eq(currentYear)) .and(QYearly.yearly.year.eq(currentYear))
).orElseGet(Yearly::new); ).orElseGet(Yearly::new);
yearly.setStock(stock); yearly.setStock(stock);
@@ -60,11 +65,12 @@ public class UpdateYearly extends TaskNodeComponent {
} }
return true; return true;
} catch (Exception exception) { } catch (Exception exception) {
log.error("Error", exception); log.error("Error for %s".formatted(currentYear), exception);
status.setRollbackOnly(); status.setRollbackOnly();
return false; return false;
} }
}); });
setStep((currentYear - startYear) * 100 / (endYear - startYear + 1));
} }
} }
} }