fix: 修复year字段在不同数据库的表现
This commit is contained in:
@@ -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("总股本")
|
||||||
|
|||||||
@@ -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("开盘价")
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user