1
0

fix: 修复日线数据检查没有考虑真正停牌日

This commit is contained in:
2025-09-08 20:50:04 +08:00
parent 7a70c037f9
commit f1ab38f871
4 changed files with 39 additions and 14 deletions

View File

@@ -31,5 +31,6 @@ public class LeopardServerApplication implements ApplicationRunner {
public void run(ApplicationArguments args) {
// executor.execute2RespWithEL("THEN(update_daily)");
// executor.execute2RespWithEL("THEN(update_stock)");
// executor.execute2RespWithEL("THEN(check_daily)");
}
}

View File

@@ -1,10 +1,12 @@
package com.lanyuanxiaoyao.leopard.server.service;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.SneakyThrows;
@@ -55,11 +57,20 @@ public class TuShareService {
return tuShareResponse;
}
@SneakyThrows
public TuShareResponse dailyList(LocalDate tradeDate) {
return dailyList(tradeDate, null);
}
@SneakyThrows
public TuShareResponse dailyList(LocalDate tradeDate, String stockCode) {
var paramsMap = new HashMap<String, Object>();
paramsMap.put("trade_date", tradeDate.format(TRADE_FORMAT));
if (StrUtil.isNotBlank(stockCode)) {
paramsMap.put("ts_code", stockCode);
}
var response = HttpUtil.post(API_URL, buildRequest(
"daily",
Map.of("trade_date", tradeDate.format(TRADE_FORMAT)),
paramsMap,
List.of("ts_code", "trade_date", "open", "high", "low", "close", "pre_close", "change", "pct_chg", "vol", "amount")
));
var tuShareResponse = mapper.readValue(response, TuShareResponse.class);

View File

@@ -46,8 +46,12 @@ public class CheckDailyNode extends NodeComponent {
if (exchange.equals(stock.getMarket())) {
var existsTradeDates = dailyService.findDistinctTradeDateByStockId(stock.getId());
var missedTradeDates = allTradeDates.stream()
.filter(date -> date.isBefore(stock.getListedDate()))
.filter(date -> date.isAfter(stock.getListedDate()) || date.isEqual(stock.getListedDate()))
.filter(date -> !existsTradeDates.contains(date))
.filter(date -> {
var response = tuShareService.dailyList(date, stock.getCode());
return !response.data().items().isEmpty();
})
.toList();
if (ObjectUtil.isNotEmpty(missedTradeDates)) {
reports.add(new MissedTradeReport(