fix: retifive K线获取优化

This commit is contained in:
vercel
2024-05-06 15:28:00 +08:00
parent 2c2fcc0bab
commit 5c726fa5fa
3 changed files with 45 additions and 11 deletions

View File

@@ -0,0 +1,17 @@
package cn.stock.market.dto;
import lombok.Data;
import java.util.List;
@Data
public class RetifiveStockHistoryResponse {
private String s;
private List<Long> t;
private List<Double> o;
private List<Double> h;
private List<Double> l;
private List<Double> c;
private List<Double> v;
}

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.stock.market.domain.basic.entity.RetifiveStock; import cn.stock.market.domain.basic.entity.RetifiveStock;
import cn.stock.market.dto.RetifiveStockHistoryResponse;
import cn.stock.market.dto.RetifiveStockInfo; import cn.stock.market.dto.RetifiveStockInfo;
import cn.stock.market.dto.StockHistoryResponse; import cn.stock.market.dto.StockHistoryResponse;
import cn.stock.market.utils.DateTimeUtil; import cn.stock.market.utils.DateTimeUtil;
@@ -15,6 +16,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.refinitiv.ema.access.*; import com.refinitiv.ema.access.*;
import com.refinitiv.ema.rdm.EmaRdm; import com.refinitiv.ema.rdm.EmaRdm;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@@ -24,12 +26,17 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant; import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME;
import static java.util.concurrent.TimeUnit.SECONDS; import static java.util.concurrent.TimeUnit.SECONDS;
/** /**
@@ -257,8 +264,9 @@ public class RefinitivConsumer implements ApplicationRunner {
} }
} }
public StockHistoryResponse getKLink(String symbol,String resolution){ @SneakyThrows
StockHistoryResponse result = new StockHistoryResponse(); public RetifiveStockHistoryResponse getKLink(String symbol, String resolution){
RetifiveStockHistoryResponse result = new RetifiveStockHistoryResponse();
String token = getToken(); String token = getToken();
if(StringUtils.isBlank(token)){ if(StringUtils.isBlank(token)){
throw new SysTipsException("token为空"); throw new SysTipsException("token为空");
@@ -317,9 +325,13 @@ public class RefinitivConsumer implements ApplicationRunner {
resourceEndpoint = baseURLHistory + symbol; resourceEndpoint = baseURLHistory + symbol;
} }
// 创建DateTimeFormatter以匹配所需的格式
DateTimeFormatter formatterIso = DateTimeFormatter.ISO_INSTANT;
// 格式化Instant
String startStr = start.toInstant().atZone(ZoneId.of("UTC")).format(formatterIso);
HttpResponse response = HttpUtil.createGet(resourceEndpoint) HttpResponse response = HttpUtil.createGet(resourceEndpoint)
.form("eventTypes","trade,quote") .form("eventTypes","trade,quote")
.form("start","2023-05-11T18:30:12.000000000Z") .form("start",startStr)
.form("count",countback) .form("count",countback)
.form("interval",interval) .form("interval",interval)
.header("Authorization","Bearer " + token) .header("Authorization","Bearer " + token)
@@ -334,20 +346,24 @@ public class RefinitivConsumer implements ApplicationRunner {
List<Double> h = new ArrayList<>(); // 最高价 List<Double> h = new ArrayList<>(); // 最高价
List<Double> l = new ArrayList<>();//最低价 List<Double> l = new ArrayList<>();//最低价
List<Double> c = new ArrayList<>();//当前价 List<Double> c = new ArrayList<>();//当前价
List<Long> v = new ArrayList<>();//交易量 List<Double> v = new ArrayList<>();//交易量
for(int i = 0; i < dateArray.size(); i++){ for(int i = 0; i < dateArray.size(); i++){
JSONArray date = dateArray.getJSONArray(i); JSONArray date = dateArray.getJSONArray(i);
if(StringUtils.equals("D",resolution) || StringUtils.equals("W",resolution) || StringUtils.equals("M",resolution)){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date d = formatter.parse(date.get(0).toString());
t.add(d.getTime());
}else {
Instant instant = Instant.parse(date.get(0).toString());
Instant instant = Instant.parse(date.get(0).toString()); long timestampMillis = instant.getEpochSecond();
long timestampMillis = instant.toEpochMilli(); t.add(timestampMillis);
t.add(timestampMillis); }
o.add(Double.valueOf(date.get(3).toString())); o.add(Double.valueOf(date.get(3).toString()));
h.add(Double.valueOf(date.get(1).toString())); h.add(Double.valueOf(date.get(1).toString()));
l.add(Double.valueOf(date.get(2).toString())); l.add(Double.valueOf(date.get(2).toString()));
c.add(Double.valueOf(date.get(4).toString())); c.add(Double.valueOf(date.get(4).toString()));
v.add(Long.valueOf(date.get(6).toString())); v.add(Double.valueOf(date.get(6).toString()));
} }
result.setT(t); result.setT(t);
result.setO(o); result.setO(o);

View File

@@ -3,6 +3,7 @@ package cn.stock.market.web;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.stock.market.domain.basic.entity.RetifiveStock; import cn.stock.market.domain.basic.entity.RetifiveStock;
import cn.stock.market.domain.basic.service.RetifiveStockService; import cn.stock.market.domain.basic.service.RetifiveStockService;
import cn.stock.market.dto.RetifiveStockHistoryResponse;
import cn.stock.market.dto.RetifiveStockInfo; import cn.stock.market.dto.RetifiveStockInfo;
import cn.stock.market.lesg.RefinitivConsumer; import cn.stock.market.lesg.RefinitivConsumer;
import cn.stock.market.listener.AppClient; import cn.stock.market.listener.AppClient;
@@ -133,7 +134,7 @@ public class RefinitivApiController {
} }
@ApiOperation(value = "查询股票K线", httpMethod = "GET", response = RetifiveStockInfo.class) @ApiOperation(value = "查询股票K线", httpMethod = "GET", response = RetifiveStockHistoryResponse.class)
@ApiImplicitParams({ @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 = "symbol",value = "股票对应代码symbol",dataType ="String",required = true, paramType = "query"), @ApiImplicitParam(name = "symbol",value = "股票对应代码symbol",dataType ="String",required = true, paramType = "query"),