From 60e8fa41d434ebe5742ab088662509517c6468e3 Mon Sep 17 00:00:00 2001 From: zhangjian Date: Sat, 20 Apr 2024 22:05:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=AF=E5=AD=9A=E7=89=B9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=BA=90=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3:=201-=E8=8E=B7?= =?UTF-8?q?=E5=8F=96BSE=E8=82=A1=E7=A5=A8=E6=8E=A8=E8=8D=90TopActives;=202?= =?UTF-8?q?-=E8=8E=B7=E5=8F=96BSE=E8=82=A1=E7=A5=A8=E6=8E=A8=E8=8D=90TopGa?= =?UTF-8?q?iners;=203-=E8=8E=B7=E5=8F=96BSE=E8=82=A1=E7=A5=A8=E6=8E=A8?= =?UTF-8?q?=E8=8D=90TopLosers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/stock/market/utils/RefinitivUtil.java | 132 ++++++++++++++++++ .../market/web/RefinitivApiController.java | 77 ++++++++++ 2 files changed, 209 insertions(+) diff --git a/src/main/java/cn/stock/market/utils/RefinitivUtil.java b/src/main/java/cn/stock/market/utils/RefinitivUtil.java index a310bbf..2776101 100644 --- a/src/main/java/cn/stock/market/utils/RefinitivUtil.java +++ b/src/main/java/cn/stock/market/utils/RefinitivUtil.java @@ -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 decode(FieldList fieldList) { + List 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 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; + } } diff --git a/src/main/java/cn/stock/market/web/RefinitivApiController.java b/src/main/java/cn/stock/market/web/RefinitivApiController.java index 62ee306..68befdc 100644 --- a/src/main/java/cn/stock/market/web/RefinitivApiController.java +++ b/src/main/java/cn/stock/market/web/RefinitivApiController.java @@ -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 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 = RefinitivUtil.decode(refreshMsg.payload().fieldList()); + appClient.subscribeList(strings); // 根据itemName订阅 + // 等待消息 + List 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 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 = RefinitivUtil.decode(refreshMsg.payload().fieldList()); + appClient.subscribeList(strings); // 根据itemName订阅 + // 等待消息 + List 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 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 = RefinitivUtil.decode(refreshMsg.payload().fieldList()); + appClient.subscribeList(strings); // 根据itemName订阅 + // 等待消息 + List 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); + } }