diff --git a/pom.xml b/pom.xml index 646b817..89711e3 100644 --- a/pom.xml +++ b/pom.xml @@ -191,11 +191,11 @@ 30.1-jre - + com.refinitiv.ema ema diff --git a/src/main/java/cn/stock/market/lesg/RefinitivConsumer.java b/src/main/java/cn/stock/market/lesg/RefinitivConsumer.java index 166a8a2..3d2591c 100644 --- a/src/main/java/cn/stock/market/lesg/RefinitivConsumer.java +++ b/src/main/java/cn/stock/market/lesg/RefinitivConsumer.java @@ -265,7 +265,7 @@ public class RefinitivConsumer implements ApplicationRunner { } @SneakyThrows - public RetifiveStockHistoryResponse getKLink(String symbol, String resolution){ + public RetifiveStockHistoryResponse getKLink(String symbol, String resolution,String starttime, String endtime){ RetifiveStockHistoryResponse result = new RetifiveStockHistoryResponse(); String token = getToken(); if(StringUtils.isBlank(token)){ @@ -278,60 +278,59 @@ public class RefinitivConsumer implements ApplicationRunner { int countback = 5; String interval = null; String resourceEndpoint = null; - Date start = new Date(); + Date start = new SimpleDateFormat("yyyy-MM-dd").parse(starttime); + Date end = new SimpleDateFormat("yyyy-MM-dd").parse(endtime); + long duration = end.getTime() - start.getTime(); + long minutes = TimeUnit.MILLISECONDS.toMinutes(duration); String fields = null; Integer flag = 0; if(StringUtils.equals("1m",resolution)){ - start = DateTimeUtil.getDayOfMorning(start,0); - countback = 360; + + countback = (int)minutes; interval = "PT1M"; resourceEndpoint = baseURLToday + symbol; fields = "DATE,HIGH_1,LOW_1,OPEN_PRC,TRDPRC_1,NUM_MOVES"; }else if(StringUtils.equals("5m",resolution)){ - start = DateTimeUtil.getDayOfMorning(start,0); - countback = 150; + countback = (int) (minutes/5); interval = "PT5M"; resourceEndpoint = baseURLToday + symbol; fields = "DATE,HIGH_1,LOW_1,OPEN_PRC,TRDPRC_1,NUM_MOVES"; }else if(StringUtils.equals("10m",resolution)){ - start = DateTimeUtil.getDayOfMorning(start,0); - countback = 50; + countback = (int) (minutes/10); interval = "PT10M"; resourceEndpoint = baseURLToday + symbol; fields = "DATE,HIGH_1,LOW_1,OPEN_PRC,TRDPRC_1,NUM_MOVES"; }else if(StringUtils.equals("30m",resolution)){ - start = DateTimeUtil.getDayOfMorning(start,0); - countback = 30; + countback = (int) (minutes/30); interval = "PT30M"; resourceEndpoint = baseURLToday + symbol; fields = "DATE,HIGH_1,LOW_1,OPEN_PRC,TRDPRC_1,NUM_MOVES"; }else if(StringUtils.equals("H",resolution)){ - start = DateTimeUtil.getDayOfMorning(start,0); - countback = 60; + countback = (int) (minutes/60); interval = "PT1H"; resourceEndpoint = baseURLToday + symbol; fields = "DATE,HIGH_1,LOW_1,OPEN_PRC,TRDPRC_1,NUM_MOVES"; }else if(StringUtils.equals("D",resolution)){ - start = DateTimeUtil.getDayOfMorning(start,-30); - countback = 30; + + countback = (int)(minutes/24/60); interval ="P1D"; fields = "DATE,HIGH_1,LOW_1,OPEN_PRC,OFF_CLOSE,NUM_MOVES"; flag = 1; resourceEndpoint = baseURLHistory + symbol; }else if(StringUtils.equals("W",resolution)){ - start = DateTimeUtil.getDayOfMorning(start,-60); - countback = 30; + + countback = (int)(minutes/7/24/60); interval ="P1W"; fields = "DATE,HIGH_1,LOW_1,OPEN_PRC,OFF_CLOSE,NUM_MOVES"; flag = 2; resourceEndpoint = baseURLHistory + symbol; }else if(StringUtils.equals("M",resolution)){ - start = DateTimeUtil.getDayOfYear(start,-1); - countback = 30; + + countback = (int)(minutes/30/24/60); interval ="P1M"; fields = "DATE,HIGH_1,LOW_1,OPEN_PRC,OFF_CLOSE,NUM_MOVES"; flag = 2; @@ -340,9 +339,11 @@ public class RefinitivConsumer implements ApplicationRunner { DateTimeFormatter formatterIso = DateTimeFormatter.ISO_INSTANT; String startStr = start.toInstant().atZone(ZoneId.of("UTC")).format(formatterIso); + String endStr = end.toInstant().atZone(ZoneId.of("UTC")).format(formatterIso); HttpResponse response = HttpUtil.createGet(resourceEndpoint) .form("eventTypes","trade,quote") .form("start",startStr) + .form("end",endStr) .form("count",countback) .form("interval",interval) .form("fields",fields) diff --git a/src/main/java/cn/stock/market/listener/AppClient.java b/src/main/java/cn/stock/market/listener/AppClient.java index 5babe1f..77f68dc 100644 --- a/src/main/java/cn/stock/market/listener/AppClient.java +++ b/src/main/java/cn/stock/market/listener/AppClient.java @@ -1,3 +1,4 @@ +/* package cn.stock.market.listener; import com.thomsonreuters.ema.access.AckMsg; @@ -79,8 +80,10 @@ public class AppClient implements OmmConsumerClient { messageFuture.complete(refreshMsg); } if(expectedItemCount.get()>1){ - /* System.out.println("监听的消息:"+refreshMsg.streamId()+","+refreshMsg.name()+ - ",是否完成:"+refreshMsg.complete());*/ + */ +/* System.out.println("监听的消息:"+refreshMsg.streamId()+","+refreshMsg.name()+ + ",是否完成:"+refreshMsg.complete());*//* + RefreshMsg msg = EmaFactory.createRefreshMsg(refreshMsg); messages.put(refreshMsg.name()+"", msg); // 假设每个refreshMsg都有一个uniqueIdentifier方法 if (messages.size() == expectedItemCount.get()) { // 使用get()获取当前值 @@ -135,3 +138,4 @@ public class AppClient implements OmmConsumerClient { } // 其他消息处理... } +*/ diff --git a/src/main/java/cn/stock/market/listener/ConcurrentAppClient.java b/src/main/java/cn/stock/market/listener/ConcurrentAppClient.java index 108b4a5..582280d 100644 --- a/src/main/java/cn/stock/market/listener/ConcurrentAppClient.java +++ b/src/main/java/cn/stock/market/listener/ConcurrentAppClient.java @@ -1,3 +1,4 @@ +/* package cn.stock.market.listener; import com.thomsonreuters.ema.access.AckMsg; @@ -17,10 +18,12 @@ import org.springframework.stereotype.Service; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; +*/ /** * @author gs * @date 2024/4/8 22:01 - */ + *//* + @Service public class ConcurrentAppClient implements OmmConsumerClient { private final ConcurrentHashMap> futures = new ConcurrentHashMap<>(); @@ -73,3 +76,4 @@ public class ConcurrentAppClient implements OmmConsumerClient { } } +*/ diff --git a/src/main/java/cn/stock/market/listener/MyAppRunner.java b/src/main/java/cn/stock/market/listener/MyAppRunner.java index 3d0d71f..c93bdc4 100644 --- a/src/main/java/cn/stock/market/listener/MyAppRunner.java +++ b/src/main/java/cn/stock/market/listener/MyAppRunner.java @@ -1,3 +1,4 @@ +/* package cn.stock.market.listener; import com.thomsonreuters.ema.access.EmaFactory; @@ -34,3 +35,4 @@ public class MyAppRunner implements ApplicationRunner { } +*/ diff --git a/src/main/java/cn/stock/market/utils/RefinitivUtil.java b/src/main/java/cn/stock/market/utils/RefinitivUtil.java index 0ededf9..73cb66b 100644 --- a/src/main/java/cn/stock/market/utils/RefinitivUtil.java +++ b/src/main/java/cn/stock/market/utils/RefinitivUtil.java @@ -5,6 +5,9 @@ import cn.stock.market.domain.basic.entity.RetifiveStock; import cn.stock.market.dto.RetifiveStockInfo; import cn.stock.market.lesg.InstrumentData; import com.google.common.collect.Lists; +import com.refinitiv.ema.access.DataType; +import com.refinitiv.ema.access.FieldEntry; +import com.refinitiv.ema.access.FieldList; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.util.ReflectionUtils; diff --git a/src/main/java/cn/stock/market/web/MessageRetifiveController.java b/src/main/java/cn/stock/market/web/MessageRetifiveController.java index 9df59dc..1db7f3b 100644 --- a/src/main/java/cn/stock/market/web/MessageRetifiveController.java +++ b/src/main/java/cn/stock/market/web/MessageRetifiveController.java @@ -1,3 +1,4 @@ +/* package cn.stock.market.web; import cn.stock.market.domain.basic.entity.RetifiveStock; @@ -97,7 +98,8 @@ public class MessageRetifiveController { } - /* @GetMapping("/getStockInfoList") + */ +/* @GetMapping("/getStockInfoList") @Deprecated public ServerResponse getStockInfoList() { ExecutorService executorService = Executors.newFixedThreadPool(5); // 创建一个固定大小的线程池 @@ -146,7 +148,8 @@ public class MessageRetifiveController { } return ServerResponse.createBySuccess("操作成功"); - }*/ + }*//* + @GetMapping("/testStockInfoList2") @@ -334,7 +337,8 @@ public class MessageRetifiveController { } - /* void decode(FieldList fieldList) + */ +/* void decode(FieldList fieldList) { for (FieldEntry fieldEntry : fieldList) { @@ -377,7 +381,8 @@ public class MessageRetifiveController { break; } } - }*/ + }*//* + String decode1(FieldList fieldList,String name) { @@ -393,10 +398,12 @@ public class MessageRetifiveController { String symbol = fieldEntry.load().toString(); if(!symbol.contains("blank data")){ mongoTemplate.insert(new SymbolRefinitiv(symbol,"bse",name)); - /* RetifiveStock retifiveStockPO = new RetifiveStock(); + */ +/* RetifiveStock retifiveStockPO = new RetifiveStock(); retifiveStockPO.setSymbol(name); retifiveStockPO.setStockType("bse"); - retifiveStockService.repository().save(retifiveStockPO);*/ + retifiveStockService.repository().save(retifiveStockPO);*//* + } } } @@ -552,18 +559,22 @@ public class MessageRetifiveController { } } - /*StockInfoRefinitiv stockInfoRefinitiv = new StockInfoRefinitiv(); + */ +/*StockInfoRefinitiv stockInfoRefinitiv = new StockInfoRefinitiv(); stockInfoRefinitiv.setStockName(stockName); stockInfoRefinitiv.setStockCode(stockCode); stockInfoRefinitiv.setStatus(status); stockInfoRefinitiv.setStockType("bse"); stockInfoRefinitiv.setCommandStr(name); - mongoTemplate.insert(stockInfoRefinitiv);*/ + 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(); @@ -706,3 +717,4 @@ public class MessageRetifiveController { return itemNames; } } +*/ diff --git a/src/main/java/cn/stock/market/web/RefinitivApiController.java b/src/main/java/cn/stock/market/web/RefinitivApiController.java index fc38caf..c22d66e 100644 --- a/src/main/java/cn/stock/market/web/RefinitivApiController.java +++ b/src/main/java/cn/stock/market/web/RefinitivApiController.java @@ -7,7 +7,6 @@ import cn.stock.market.domain.basic.service.RetifiveStockService; import cn.stock.market.dto.RetifiveStockHistoryResponse; import cn.stock.market.dto.RetifiveStockInfo; import cn.stock.market.lesg.RefinitivConsumer; -import cn.stock.market.listener.AppClient; import cn.stock.market.utils.ServerResponse; import cn.stock.market.web.annotations.EncryptFilter; import io.swagger.annotations.Api; @@ -38,8 +37,6 @@ public class RefinitivApiController { @Resource private RefinitivConsumer refinitivConsumer; - @Resource - private AppClient appClient; @Autowired private RetifiveStockService retifiveStockService; @@ -63,9 +60,6 @@ public class RefinitivApiController { return ServerResponse.createBySuccess("操作成功", retifiveStockInfo); } catch (Exception e) { log.error("获取股票详情link:" + symbol, e); - } finally { - // 可能需要重置或清理资源 - appClient.resetMessageFuture(); } return ServerResponse.createBySuccess("操作成功"); @@ -142,13 +136,13 @@ public class RefinitivApiController { @ApiOperation(value = "查询股票K线", httpMethod = "GET", response = RetifiveStockHistoryResponse.class) @ApiImplicitParams({ - @ApiImplicitParam(name = "symbol",value = "股票对应代码(symbol)",dataType ="String",required = true, paramType = "query"), @ApiImplicitParam(name = "symbol",value = "股票对应代码(symbol)",dataType ="String",required = true, paramType = "query"), @ApiImplicitParam(name = "resolution", value = "单位:60 1D 1W 1D 对应H,D,W,Y", required = true, dataType = "String", paramType = "query"), }) @GetMapping("/getKlink") @EncryptFilter(decryptRequest = false) - public ServerResponse getKlink(@RequestParam("symbol") String symbol, @RequestParam String resolution) { - return ServerResponse.createBySuccess(refinitivConsumer.getKLink(symbol,resolution)); + public ServerResponse getKlink(@RequestParam("symbol") String symbol, @RequestParam("resolution") String resolution, + @RequestParam("starttime") String starttime,@RequestParam("endtime") String endtime) { + return ServerResponse.createBySuccess(refinitivConsumer.getKLink(symbol,resolution,starttime,endtime)); } }