diff --git a/src/main/java/cn/stock/market/listener/AppClient.java b/src/main/java/cn/stock/market/listener/AppClient.java index c6f3fb2..678dc51 100644 --- a/src/main/java/cn/stock/market/listener/AppClient.java +++ b/src/main/java/cn/stock/market/listener/AppClient.java @@ -52,7 +52,7 @@ public class AppClient implements OmmConsumerClient { @Override public void onRefreshMsg(RefreshMsg refreshMsg, OmmConsumerEvent event) { - log.error("监听的消息:"+refreshMsg.toString()); + // log.error("监听的消息:"+refreshMsg.toString()); messageFuture.complete(refreshMsg); } @@ -78,7 +78,6 @@ public class AppClient implements OmmConsumerClient { @Override public void onAllMsg(Msg msg, OmmConsumerEvent consumerEvent) { - } // 其他消息处理... } diff --git a/src/main/java/cn/stock/market/web/MessageRetifiveController.java b/src/main/java/cn/stock/market/web/MessageRetifiveController.java index d869486..beae64a 100644 --- a/src/main/java/cn/stock/market/web/MessageRetifiveController.java +++ b/src/main/java/cn/stock/market/web/MessageRetifiveController.java @@ -10,6 +10,7 @@ import cn.stock.market.listener.StockInfoRefinitiv; import cn.stock.market.listener.SymbolRefinitiv; import cn.stock.market.utils.ServerResponse; import com.google.common.collect.Lists; +import com.thomsonreuters.ema.access.Data; import com.thomsonreuters.ema.access.DataType; import com.thomsonreuters.ema.access.FieldEntry; import com.thomsonreuters.ema.access.FieldList; @@ -214,6 +215,104 @@ public class MessageRetifiveController { + @GetMapping("/getBSETopActivesList") + public ServerResponse getGainerList(String itemName) { + + // 计算每个线程应处理的元素数量 + String name = ".AV.BO"; + List 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 strings = decode4(refreshMsg.payload().fieldList()); + for (String link : strings) { + appClient.subscribe(link); // 根据itemName订阅 + // 等待消息 + RefreshMsg refreshMsg2 = appClient.getMessageFuture().get(10, TimeUnit.SECONDS); + if (DataType.DataTypes.FIELD_LIST == refreshMsg2.payload().dataType()){ + list.add(decode3(refreshMsg2.payload().fieldList(),refreshMsg2.name())); + } + } + } + } catch (Exception e) { + log.error("获取股票详情link:"+name,e); + } + return ServerResponse.createBySuccess("操作成功",list); + } + + @GetMapping("/getBSETopGainerList") + public ServerResponse getBSETopGainerList() { + + // 计算每个线程应处理的元素数量 + String name = ".PG.BO"; + List 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 strings = decode4(refreshMsg.payload().fieldList()); + for (String link : strings) { + appClient.subscribe(link); // 根据itemName订阅 + // 等待消息 + RefreshMsg refreshMsg2 = appClient.getMessageFuture().get(10, TimeUnit.SECONDS); + if (DataType.DataTypes.FIELD_LIST == refreshMsg2.payload().dataType()){ + list.add(decode3(refreshMsg2.payload().fieldList(),refreshMsg2.name())); + } + } + } + } catch (Exception e) { + log.error("获取股票详情link:"+name,e); + } + return ServerResponse.createBySuccess("操作成功",list); + } + + + @GetMapping("/getBSETopLoserList") + public ServerResponse getBSETopLoserList() { + + // 计算每个线程应处理的元素数量 + String name = ".PL.BO"; + List 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 strings = decode4(refreshMsg.payload().fieldList()); + for (String link : strings) { + appClient.subscribe(link); // 根据itemName订阅 + // 等待消息 + RefreshMsg refreshMsg2 = appClient.getMessageFuture().get(10, TimeUnit.SECONDS); + if (DataType.DataTypes.FIELD_LIST == refreshMsg2.payload().dataType()){ + list.add(decode3(refreshMsg2.payload().fieldList(),refreshMsg2.name())); + } + } + } + } catch (Exception e) { + log.error("获取股票详情link:"+name,e); + } + return ServerResponse.createBySuccess("操作成功",list); + } + + private List decode4(FieldList fieldList) { + List list = Lists.newArrayList(); + String nextLink = ""; + for (FieldEntry fieldEntry : fieldList){ + // System.err.println("Fid: " + fieldEntry.fieldId() + " Name = " + fieldEntry.name() + " DataType: " + DataType.asString(fieldEntry.load().dataType()) + " Value: "+ fieldEntry.load().toString()); + if(fieldEntry.name().startsWith("BR_LINK")){ + nextLink = fieldEntry.load().toString(); + if(!nextLink.contains("blank data")){ + list.add(nextLink); + } + } + } + return list; + } + + /* void decode(FieldList fieldList) { for (FieldEntry fieldEntry : fieldList) @@ -267,7 +366,7 @@ public class MessageRetifiveController { while (iter.hasNext()) { fieldEntry = iter.next(); - System.out.println("Fid: " + fieldEntry.fieldId() + " Name: " + fieldEntry.name() + " value: " + fieldEntry.load()); + //System.out.println("Fid: " + fieldEntry.fieldId() + " Name: " + fieldEntry.name() + " value: " + fieldEntry.load()); if(fieldEntry.name().startsWith("LINK_")){ if(fieldEntry.loadType() == DataType.DataTypes.ASCII){ String symbol = fieldEntry.load().toString(); @@ -344,7 +443,7 @@ public class MessageRetifiveController { while (iter.hasNext()) { fieldEntry = iter.next(); - System.out.println("Fid: " + fieldEntry.fieldId() + " Name: " + fieldEntry.name() +" Unit: "+DataType.asString(fieldEntry.loadType()) + " value: " + fieldEntry.load()); + // 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(); @@ -440,10 +539,10 @@ public class MessageRetifiveController { stockInfoRefinitiv.setCommandStr(name); mongoTemplate.insert(stockInfoRefinitiv);*/ - RetifiveStockInfo retifiveStockInfo = RetifiveStockInfo.builder().stockCode(stockCode).stockName(stockName).symbol(name).status(status) + /* 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(); + .build();*/ RetifiveStock retifiveStock = RetifiveStock.builder().stockType(stockType).saveTime(new Date()).isLock(0).isShow(0) .stockCode(stockCode).symbol(name).stockName(stockName).build(); @@ -473,7 +572,7 @@ public class MessageRetifiveController { while (iter.hasNext()) { fieldEntry = iter.next(); - System.out.println("Fid: " + fieldEntry.fieldId() + " Name: " + fieldEntry.name() +" Unit: "+DataType.asString(fieldEntry.loadType()) + " value: " + fieldEntry.load()); + // 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(); @@ -569,6 +668,8 @@ public class MessageRetifiveController { } + + private static List generateItemNames() { List itemNames = new ArrayList<>();