优化定时同步Refinitiv股票数据任务

This commit is contained in:
zhangjian
2024-05-07 17:36:05 +08:00
parent d799898bcc
commit 14d19f1812

View File

@@ -25,6 +25,7 @@ import java.util.stream.Collectors;
@RestController @RestController
public class RefinitivTask { public class RefinitivTask {
private static final String SYMBOL_LINK_PREFIX = "#EQ.BO";
@Autowired @Autowired
private RefinitivConsumer refinitivConsumer; private RefinitivConsumer refinitivConsumer;
@Autowired @Autowired
@@ -58,26 +59,29 @@ public class RefinitivTask {
private List<String> getSymbolList() { private List<String> getSymbolList() {
List<String> symbols = new ArrayList<>(); List<String> symbols = new ArrayList<>();
List<String> itemNameList = generateItemNames(); int seq = 0;
for (String itemName : itemNameList) { String symbolLink = seq + SYMBOL_LINK_PREFIX;
try { String nextLink = null;
// 等待消息 try {
InstrumentData[] dataBySymbol = refinitivConsumer.getDataBySymbol(itemName); InstrumentData[] dataBySymbol = refinitivConsumer.getDataBySymbol(symbolLink);
String nextLink = decode(dataBySymbol[0].getDataMap(), symbols); nextLink = decode(dataBySymbol[0].getDataMap(), symbols);
while (StringUtils.isNotBlank(nextLink) && !nextLink.contains("blank data")) { while (StringUtils.isNotBlank(nextLink) && !nextLink.contains("blank data")) {
dataBySymbol = refinitivConsumer.getDataBySymbol(nextLink); dataBySymbol = refinitivConsumer.getDataBySymbol(nextLink);
nextLink = decode(dataBySymbol[0].getDataMap(), symbols); nextLink = decode(dataBySymbol[0].getDataMap(), symbols);
}
} catch (Exception e) {
log.error("每天18点定时同步Refinitiv股票数据出错数据未查出symbol = {}", itemName, e);
} }
} catch (Exception e) {
log.error("每天18点定时同步Refinitiv股票数据出错数据未查出nextLink = {}", nextLink, e);
} }
return symbols; return symbols.stream().distinct().collect(Collectors.toList());
} }
private String decode(Map<String, String> dataMap, List<String> symbols) { private String decode(Map<String, String> dataMap, List<String> symbols) {
String nextLink = null; String nextLink = null;
if (dataMap.get("NEXT_LR") == null) {
return nextLink;
}
for (Map.Entry<String, String> entry : dataMap.entrySet()) { for (Map.Entry<String, String> entry : dataMap.entrySet()) {
if (entry.getKey().startsWith("LINK_") && !entry.getValue().contains("blank data")) { if (entry.getKey().startsWith("LINK_") && !entry.getValue().contains("blank data")) {
symbols.add(entry.getValue()); symbols.add(entry.getValue());
@@ -85,24 +89,9 @@ public class RefinitivTask {
if (entry.getKey().startsWith("NEXT_LR")) { if (entry.getKey().startsWith("NEXT_LR")) {
nextLink = entry.getValue(); nextLink = entry.getValue();
if (nextLink.contains("blank data")) {
break;
}
} }
} }
return nextLink; return nextLink;
} }
private static List<String> generateItemNames() {
List<String> itemNames = new ArrayList<>();
// 从字母 'A' 到 'Z'
for (char letter = 'A'; letter <= 'Z'; letter++) {
String itemName = "0#" + letter + ".BO";
itemNames.add(itemName);
}
return itemNames;
}
} }