路孚特数据源添加接口: 1-获取BSE股票推荐TopActives; 2-获取BSE股票推荐TopGainers; 3-获取BSE股票推荐TopLosers

This commit is contained in:
zhangjian
2024-04-20 22:05:24 +08:00
parent 87202f2b91
commit 60e8fa41d4
2 changed files with 209 additions and 0 deletions

View File

@@ -1,12 +1,14 @@
package cn.stock.market.utils;
import cn.stock.market.dto.RetifiveStockInfo;
import com.google.common.collect.Lists;
import com.thomsonreuters.ema.access.DataType;
import com.thomsonreuters.ema.access.FieldEntry;
import com.thomsonreuters.ema.access.FieldList;
import org.apache.commons.lang3.StringUtils;
import java.util.Iterator;
import java.util.List;
/**
* RefinitivUtil
@@ -131,4 +133,134 @@ public class RefinitivUtil {
.changeValue(changeValue)
.build();
}
public static List<String> decode(FieldList fieldList) {
List<String> list = Lists.newArrayList();
String nextLink = "";
for (FieldEntry fieldEntry : fieldList){
if(fieldEntry.name().startsWith("BR_LINK")){
nextLink = fieldEntry.load().toString();
if(!nextLink.contains("blank data")){
list.add(nextLink);
}
}
}
return list;
}
public static RetifiveStockInfo decode(FieldList fieldList, String name) {
Iterator<FieldEntry> iter = fieldList.iterator();
FieldEntry fieldEntry;
String stockName = "";
String stockCode = "";
String status = "";
String price = "";
String openPrice = "";
String previousPrice = "";
String percentChange = "";
String week52High ="";
String week52Low = "";
String high = "";
String low = "";
String volume = "";//实时交易数量
String stockType = "";
String changeValue = "";
while (iter.hasNext())
{
fieldEntry = iter.next();
// System.out.println("Fid: " + fieldEntry.fieldId() + " Name: " + fieldEntry.name() +" Unit: "+DataType.asString(fieldEntry.loadType()) + " value: " + fieldEntry.load());
if(fieldEntry.name().equals("DSPLY_NAME")){
if(fieldEntry.loadType() == DataType.DataTypes.RMTES) {
stockName = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("PROV_SYMB")){
if(fieldEntry.loadType() == DataType.DataTypes.RMTES) {
stockCode = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("INST_PHASE")){
if(fieldEntry.loadType() == DataType.DataTypes.ENUM) {
status = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("OPEN_PRC")){
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
openPrice = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("HST_CLOSE")){
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
previousPrice = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("52WK_HIGH")){
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
week52High = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("52WK_LOW")){
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
week52Low = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("PCTCHNG")){ // NETCHNG_1
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
percentChange = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("NETCHNG_1")){ // NETCHNG_1
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
changeValue = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("HIGH_1")){
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
high = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("LOW_1")){
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
low = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("IRGVOL")){
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
volume = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("TRDPRC_1")){
if(fieldEntry.loadType() == DataType.DataTypes.REAL) {
price = fieldEntry.load().toString();
}
}
if(fieldEntry.name().equals("RDN_EXCHID")){
if(fieldEntry.loadType() == DataType.DataTypes.ENUM) {
stockType = fieldEntry.load().toString();
if(StringUtils.equals(stockType,"145")){
stockType = "bse";//孟买国家交易所
}else if(StringUtils.equals(stockType,"147")){
stockType = "nse";//印度国家交易所
}
}
}
}
RetifiveStockInfo retifiveStockInfo = RetifiveStockInfo.builder().stockCode(stockCode).stockName(stockName).symbol(name).status(status)
.openPrice(openPrice).currentPrice(price).highPrice(high).lowPrice(low).previousPrice(previousPrice).changePercent(percentChange)
.volume(volume).week52HighPrice(week52High).week52LowPrice(week52Low).stockType(stockType).changeValue(changeValue)
.build();
return retifiveStockInfo;
}
}

View File

@@ -79,4 +79,81 @@ public class RefinitivApiController {
return ServerResponse.createBySuccess("操作成功", list);
}
@ApiOperation(value = "获取BSE股票推荐TopActives", httpMethod = "GET", response = RetifiveStockInfo.class)
@GetMapping("/getBSETopActives")
@EncryptFilter(decryptRequest = false)
public ServerResponse<?> getBSETopActives() {
String name = ".AV.BO";
List<RetifiveStockInfo> list = Lists.newArrayList();
try {
appClient.subscribe(name); // 根据itemName订阅
// 等待消息
RefreshMsg refreshMsg = appClient.getMessageFuture().get(10, TimeUnit.SECONDS);// 设置超时时间例如10秒
if (DataType.DataTypes.FIELD_LIST == refreshMsg.payload().dataType()) {
List<String> strings = RefinitivUtil.decode(refreshMsg.payload().fieldList());
appClient.subscribeList(strings); // 根据itemName订阅
// 等待消息
List<RefreshMsg> refreshMsgs = appClient.getMessagesFuture().get(10, TimeUnit.SECONDS);
for (RefreshMsg msg : refreshMsgs) {
list.add(RefinitivUtil.decode(msg.payload().fieldList(), msg.name()));
}
}
} catch (Exception e) {
log.error("获取股票详情link:" + name, e);
}
return ServerResponse.createBySuccess("操作成功", list);
}
@ApiOperation(value = "获取BSE股票推荐TopGainers", httpMethod = "GET", response = RetifiveStockInfo.class)
@GetMapping("/getBSETopGainers")
@EncryptFilter(decryptRequest = false)
public ServerResponse<?> getBSETopGainers() {
String name = ".PG.BO";
List<RetifiveStockInfo> list = Lists.newArrayList();
try {
appClient.subscribe(name); // 根据itemName订阅
// 等待消息
RefreshMsg refreshMsg = appClient.getMessageFuture().get(10, TimeUnit.SECONDS);// 设置超时时间例如10秒
if (DataType.DataTypes.FIELD_LIST == refreshMsg.payload().dataType()) {
List<String> strings = RefinitivUtil.decode(refreshMsg.payload().fieldList());
appClient.subscribeList(strings); // 根据itemName订阅
// 等待消息
List<RefreshMsg> refreshMsgs = appClient.getMessagesFuture().get(10, TimeUnit.SECONDS);
for (RefreshMsg msg : refreshMsgs) {
list.add(RefinitivUtil.decode(msg.payload().fieldList(), msg.name()));
}
}
} catch (Exception e) {
log.error("获取股票详情link:" + name, e);
}
return ServerResponse.createBySuccess("操作成功", list);
}
@ApiOperation(value = "获取BSE股票推荐TopLosers", httpMethod = "GET", response = RetifiveStockInfo.class)
@GetMapping("/getBSETopLosers")
@EncryptFilter(decryptRequest = false)
public ServerResponse<?> getBSETopLosers() {
String name = ".PL.BO";
List<RetifiveStockInfo> list = Lists.newArrayList();
try {
appClient.subscribe(name); // 根据itemName订阅
// 等待消息
RefreshMsg refreshMsg = appClient.getMessageFuture().get(10, TimeUnit.SECONDS);// 设置超时时间例如10秒
if (DataType.DataTypes.FIELD_LIST == refreshMsg.payload().dataType()){
List<String> strings = RefinitivUtil.decode(refreshMsg.payload().fieldList());
appClient.subscribeList(strings); // 根据itemName订阅
// 等待消息
List<RefreshMsg> refreshMsgs = appClient.getMessagesFuture().get(10, TimeUnit.SECONDS);
for (RefreshMsg msg : refreshMsgs) {
list.add(RefinitivUtil.decode(msg.payload().fieldList(),msg.name()));
}
}
} catch (Exception e) {
log.error("获取股票详情link:"+name,e);
}
return ServerResponse.createBySuccess("操作成功",list);
}
}