Merge branch 'feature/update_bseindia_detail' into 'develop'
update chart See merge request india/india_market_java!52
This commit is contained in:
@@ -6,9 +6,7 @@ import cn.stock.market.domain.basic.entity.MoneyStock;
|
||||
import cn.stock.market.domain.basic.entity.OptionalStock;
|
||||
import cn.stock.market.domain.basic.repository.MoneyStockRepository;
|
||||
import cn.stock.market.domain.basic.repository.OptionalStockRepository;
|
||||
import cn.stock.market.dto.OptionalStockResponse;
|
||||
import cn.stock.market.dto.StockHistoryRequest;
|
||||
import cn.stock.market.dto.StockHistoryResponse;
|
||||
import cn.stock.market.dto.*;
|
||||
import cn.stock.market.dto.query.StockChartDto;
|
||||
import cn.stock.market.infrastructure.db.po.QMoneyStockPO;
|
||||
import cn.stock.market.utils.HttpRequest;
|
||||
@@ -21,6 +19,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
@@ -54,6 +55,8 @@ import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Instant;
|
||||
import java.time.YearMonth;
|
||||
import java.time.ZoneId;
|
||||
@@ -354,6 +357,30 @@ public class MoneyApiController {
|
||||
return volume.toString();
|
||||
}
|
||||
|
||||
private String getChartData(String scripcode, String resolution) {
|
||||
String url = "https://charting.bseindia.com/charting/RestDataProvider.svc/getDat?exch=B&type=b&mode=bseL&fromdate=01-01-1991-01%3A01%3A00-AM&scode=" + scripcode;
|
||||
if (resolution.equals("H")) {
|
||||
url = "https://charting.bseindia.com/charting/RestDataProvider.svc/getDatI?exch=B&type=b&mode=bseL&fromdate=01-01-1991-01%3A01%3A00-AM&scode=" + scripcode;
|
||||
}
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("accept", "application/json, text/plain, */*");
|
||||
headers.add("accept-language", "en-US,en;q=0.9,vi;q=0.8");
|
||||
headers.add("origin", "https://www.bseindia.com");
|
||||
headers.add("referer", "https://www.bseindia.com/");
|
||||
headers.add("sec-ch-ua", "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"");
|
||||
headers.add("sec-ch-ua-mobile", "?0");
|
||||
headers.add("sec-ch-ua-platform", "\"Windows\"");
|
||||
headers.add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36");
|
||||
|
||||
HttpEntity<String> entity = new HttpEntity<>(headers);
|
||||
|
||||
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
|
||||
|
||||
return response.getBody();
|
||||
}
|
||||
|
||||
private static List<MoneyStockSuggestDTO> nseActives() {
|
||||
List<MoneyStockSuggestDTO> list = new ArrayList<>();
|
||||
String url = "https://www.moneycontrol.com/stocks/marketstats/nse-mostactive-stocks/nifty-50-9/";
|
||||
@@ -769,6 +796,33 @@ public class MoneyApiController {
|
||||
return moneyStockSuggestDTOS;
|
||||
}
|
||||
|
||||
private static void addToListDouble(List<Double> list, String value) {
|
||||
String[] values = value.split(",");
|
||||
for (String v : values) {
|
||||
list.add(Double.parseDouble(v));
|
||||
}
|
||||
}
|
||||
|
||||
private static void addToList(List<Long> list, String value) {
|
||||
String[] values = value.split(",");
|
||||
for (String v : values) {
|
||||
list.add(Math.round(Double.parseDouble(v)));
|
||||
}
|
||||
}
|
||||
|
||||
private static void addDatesToList(List<Long> list, String value) {
|
||||
String[] dates = value.split(",");
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.US);
|
||||
for (String dateStr : dates) {
|
||||
try {
|
||||
Date date = sdf.parse(dateStr);
|
||||
list.add(date.getTime());
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@GetMapping({"/market/api/market/money/history/kLine", "/api/market/money/history/kLine"})
|
||||
@ApiOperation(value = "获取kline的money数据源", notes = "获取kline的money数据源", response = StockHistoryResponse.class)
|
||||
@@ -785,6 +839,69 @@ public class MoneyApiController {
|
||||
public ResponseEntity<StockHistoryResponse> getStockHistory(@RequestParam String symbol,
|
||||
@RequestParam String resolution
|
||||
) {
|
||||
MoneyStock moneyStock1 = moneyStockRepository.findOne(
|
||||
QMoneyStockPO.moneyStockPO.moneyScId.eq(symbol)
|
||||
.and(QMoneyStockPO.moneyStockPO.isLock.eq(0))
|
||||
.and(QMoneyStockPO.moneyStockPO.isShow.eq(0)))
|
||||
.orElse(null);
|
||||
|
||||
if (moneyStock1 != null) {
|
||||
|
||||
String json = this.getChartData(moneyStock1.getNseIndiaId(), resolution);
|
||||
|
||||
Gson gson = new Gson();
|
||||
|
||||
JsonObject outerJson = gson.fromJson(json, JsonObject.class);
|
||||
|
||||
String innerJsonString;
|
||||
|
||||
if (resolution.equals("H")) {
|
||||
innerJsonString = outerJson.get("getDatIResult").getAsString();
|
||||
} else {
|
||||
innerJsonString = outerJson.get("getDatResult").getAsString();
|
||||
}
|
||||
|
||||
JsonObject innerJson = gson.fromJson(innerJsonString, JsonObject.class);
|
||||
|
||||
JsonArray dataInputValues = innerJson.getAsJsonArray("DataInputValues");
|
||||
|
||||
List<Double> openList = new ArrayList<>();
|
||||
List<Double> highList = new ArrayList<>();
|
||||
List<Double> lowList = new ArrayList<>();
|
||||
List<Double> closeList = new ArrayList<>();
|
||||
List<Long> volumeList = new ArrayList<>();
|
||||
List<Long> dateList = new ArrayList<>();
|
||||
|
||||
if (dataInputValues.size() > 0) {
|
||||
JsonObject dataObject = dataInputValues.get(0).getAsJsonObject();
|
||||
|
||||
JsonArray openArray = dataObject.getAsJsonArray("OpenData");
|
||||
JsonArray highArray = dataObject.getAsJsonArray("HighData");
|
||||
JsonArray lowArray = dataObject.getAsJsonArray("LowData");
|
||||
JsonArray closeArray = dataObject.getAsJsonArray("CloseData");
|
||||
JsonArray volumeArray = dataObject.getAsJsonArray("VolumeData");
|
||||
JsonArray dateArray = dataObject.getAsJsonArray("DateData");
|
||||
|
||||
openArray.forEach(o -> addToListDouble(openList, o.getAsJsonObject().get("Open").getAsString()));
|
||||
highArray.forEach(h -> addToListDouble(highList, h.getAsJsonObject().get("High").getAsString()));
|
||||
lowArray.forEach(l -> addToListDouble(lowList, l.getAsJsonObject().get("Low").getAsString()));
|
||||
closeArray.forEach(c -> addToListDouble(closeList, c.getAsJsonObject().get("Close").getAsString()));
|
||||
volumeArray.forEach(v -> addToList(volumeList, v.getAsJsonObject().get("Volume").getAsString()));
|
||||
dateArray.forEach(d -> addDatesToList(dateList, d.getAsJsonObject().get("Date").getAsString()));
|
||||
|
||||
StockHistoryResponse response = new StockHistoryResponse();
|
||||
response.setS("ok");
|
||||
response.setT(dateList);
|
||||
response.setO(openList);
|
||||
response.setH(highList);
|
||||
response.setL(lowList);
|
||||
response.setC(closeList);
|
||||
response.setV(volumeList);
|
||||
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
}
|
||||
|
||||
// 向外部API发起请求,并获取响应
|
||||
StockHistoryRequest request = new StockHistoryRequest();
|
||||
request.setSymbol(symbol);
|
||||
|
||||
Reference in New Issue
Block a user