fix: 修复日线数据采集时出现null值的情况
This commit is contained in:
@@ -5,6 +5,7 @@ import com.lanyuanxiaoyao.service.template.entity.SimpleEntity;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.EntityListeners;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.persistence.Table;
|
||||
import java.time.LocalDate;
|
||||
@@ -53,6 +54,7 @@ public class Daily extends SimpleEntity {
|
||||
private Double factor;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable = false)
|
||||
@ToString.Exclude
|
||||
private Stock stock;
|
||||
}
|
||||
|
||||
@@ -11,4 +11,7 @@ import org.springframework.stereotype.Repository;
|
||||
public interface DailyRepository extends SimpleRepository<Daily> {
|
||||
@Query("select distinct daily.tradeDate from Daily daily")
|
||||
List<LocalDate> findDistinctTradeDate();
|
||||
|
||||
@Query("select distinct daily.tradeDate from Daily daily where daily.stock.id = ?1")
|
||||
List<LocalDate> findDistinctTradeDateByStockId(Long stockId);
|
||||
}
|
||||
|
||||
@@ -19,4 +19,8 @@ public class DailyService extends SimpleServiceSupport<Daily> {
|
||||
public List<LocalDate> findDistinctTradeDate() {
|
||||
return dailyRepository.findDistinctTradeDate();
|
||||
}
|
||||
|
||||
public List<LocalDate> findDistinctTradeDateByStockId(Long stockId) {
|
||||
return dailyRepository.findDistinctTradeDateByStockId(stockId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.lanyuanxiaoyao.leopard.server.service.task;
|
||||
|
||||
import cn.hutool.core.thread.ThreadUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.lanyuanxiaoyao.leopard.server.entity.Daily;
|
||||
@@ -52,50 +51,49 @@ public class UpdateDailyNode extends NodeComponent {
|
||||
.filter(date -> !existsTradeDates.contains(date))
|
||||
.sorted()
|
||||
.toList();
|
||||
log.info("Target: {}", targetDates);
|
||||
var stocks = stockService.list();
|
||||
var stocksMap = stocks.stream().collect(Collectors.toMap(Stock::getCode, stock -> stock));
|
||||
for (LocalDate tradeDate : targetDates) {
|
||||
log.info("Trade date: {}", tradeDate);
|
||||
var factorResponse = tuShareService.factorList(tradeDate);
|
||||
var factorMap = new HashMap<String, Double>();
|
||||
for (List<String> item : factorResponse.data().items()) {
|
||||
factorMap.put(item.get(0), Double.valueOf(item.get(2)));
|
||||
}
|
||||
log.info("Factor: {}", factorMap);
|
||||
|
||||
var response = tuShareService.dailyList(tradeDate);
|
||||
transactionTemplate.execute(status -> {
|
||||
try {
|
||||
var count = 0;
|
||||
for (List<String> 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(Double.valueOf(item.get(2)));
|
||||
daily.setHigh(Double.valueOf(item.get(3)));
|
||||
daily.setLow(Double.valueOf(item.get(4)));
|
||||
daily.setClose(Double.valueOf(item.get(5)));
|
||||
daily.setPreviousClose(Double.valueOf(item.get(6)));
|
||||
daily.setPriceChangeAmount(Double.valueOf(item.get(7)));
|
||||
daily.setPriceFluctuationRange(Double.valueOf(item.get(8)));
|
||||
daily.setVolume(Double.valueOf(item.get(9)));
|
||||
daily.setTurnover(Double.valueOf(item.get(10)));
|
||||
daily.setOpen(item.get(2) == null ? null : Double.valueOf(item.get(2)));
|
||||
daily.setHigh(item.get(3) == null ? null : Double.valueOf(item.get(3)));
|
||||
daily.setLow(item.get(4) == null ? null : Double.valueOf(item.get(4)));
|
||||
daily.setClose(item.get(5) == null ? null : Double.valueOf(item.get(5)));
|
||||
daily.setPreviousClose(item.get(6) == null ? null : Double.valueOf(item.get(6)));
|
||||
daily.setPriceChangeAmount(item.get(7) == null ? null : Double.valueOf(item.get(7)));
|
||||
daily.setPriceFluctuationRange(item.get(8) == null ? null : Double.valueOf(item.get(8)));
|
||||
daily.setVolume(item.get(9) == null ? null : Double.valueOf(item.get(9)));
|
||||
daily.setTurnover(item.get(10) == null ? null : Double.valueOf(item.get(10)));
|
||||
daily.setFactor(factor);
|
||||
daily.setStock(stock);
|
||||
log.info("Daily: {}", daily);
|
||||
dailyService.save(daily);
|
||||
}
|
||||
}
|
||||
log.info("Trade date: {} {}", tradeDate, count);
|
||||
return true;
|
||||
} catch (Exception exception) {
|
||||
log.error("Error", exception);
|
||||
status.setRollbackOnly();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
ThreadUtil.safeSleep(1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ Content-Type: application/json
|
||||
"api_name": "daily",
|
||||
"token": "{{api_key}}",
|
||||
"params": {
|
||||
"trade_date": "19901219"
|
||||
"trade_date": "19931213"
|
||||
},
|
||||
"fields": [
|
||||
"ts_code",
|
||||
|
||||
Reference in New Issue
Block a user