优化定时同步Refinitiv股票数据任务
This commit is contained in:
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user