优化定时同步Refinitiv股票数据任务
This commit is contained in:
@@ -25,6 +25,7 @@ import java.util.stream.Collectors;
|
||||
@RestController
|
||||
public class RefinitivTask {
|
||||
|
||||
private static final String SYMBOL_LINK_PREFIX = "#EQ.BO";
|
||||
@Autowired
|
||||
private RefinitivConsumer refinitivConsumer;
|
||||
@Autowired
|
||||
@@ -58,26 +59,29 @@ public class RefinitivTask {
|
||||
|
||||
private List<String> getSymbolList() {
|
||||
List<String> symbols = new ArrayList<>();
|
||||
List<String> itemNameList = generateItemNames();
|
||||
for (String itemName : itemNameList) {
|
||||
int seq = 0;
|
||||
String symbolLink = seq + SYMBOL_LINK_PREFIX;
|
||||
String nextLink = null;
|
||||
try {
|
||||
// 等待消息
|
||||
InstrumentData[] dataBySymbol = refinitivConsumer.getDataBySymbol(itemName);
|
||||
String nextLink = decode(dataBySymbol[0].getDataMap(), symbols);
|
||||
InstrumentData[] dataBySymbol = refinitivConsumer.getDataBySymbol(symbolLink);
|
||||
nextLink = decode(dataBySymbol[0].getDataMap(), symbols);
|
||||
while (StringUtils.isNotBlank(nextLink) && !nextLink.contains("blank data")) {
|
||||
dataBySymbol = refinitivConsumer.getDataBySymbol(nextLink);
|
||||
nextLink = decode(dataBySymbol[0].getDataMap(), symbols);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("每天18点定时同步Refinitiv股票数据出错,数据未查出,symbol = {}", itemName, 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) {
|
||||
String nextLink = null;
|
||||
if (dataMap.get("NEXT_LR") == null) {
|
||||
return nextLink;
|
||||
}
|
||||
|
||||
for (Map.Entry<String, String> entry : dataMap.entrySet()) {
|
||||
if (entry.getKey().startsWith("LINK_") && !entry.getValue().contains("blank data")) {
|
||||
symbols.add(entry.getValue());
|
||||
@@ -85,24 +89,9 @@ public class RefinitivTask {
|
||||
|
||||
if (entry.getKey().startsWith("NEXT_LR")) {
|
||||
nextLink = entry.getValue();
|
||||
if (nextLink.contains("blank data")) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user