From 4db963b0e54e396ad626ea9aa2649c795fe9d438 Mon Sep 17 00:00:00 2001 From: vu-tran Date: Fri, 27 Jun 2025 17:14:48 +0700 Subject: [PATCH] update top active --- .../stock/market/web/MoneyApiController.java | 46 +++++-------------- .../market/web/service/MoneyApiService.java | 34 ++++++++++++++ 2 files changed, 45 insertions(+), 35 deletions(-) diff --git a/src/main/java/cn/stock/market/web/MoneyApiController.java b/src/main/java/cn/stock/market/web/MoneyApiController.java index 026ea21..7fb6fd6 100644 --- a/src/main/java/cn/stock/market/web/MoneyApiController.java +++ b/src/main/java/cn/stock/market/web/MoneyApiController.java @@ -12,6 +12,7 @@ import cn.stock.market.domain.basic.service.StockService; import cn.stock.market.dto.*; import cn.stock.market.dto.query.StockChartDto; import cn.stock.market.infrastructure.db.po.QMoneyStockPO; +import cn.stock.market.infrastructure.db.po.QStockPO; import cn.stock.market.utils.HttpRequest; import cn.stock.market.utils.NseIndiaRequest; import cn.stock.market.utils.ServerResponse; @@ -643,43 +644,18 @@ public class MoneyApiController { @ResponseBody @EncryptFilter(decryptRequest = false) - public List getTopActive(@RequestParam String stockType) { - List moneyStockSuggestDTOS = null; - moneyStockSuggestDTOS = activesStockSuggestCache.getIfPresent(stockType); - if (moneyStockSuggestDTOS == null) { - if (StringUtils.equals(stockType, "nse")) { - moneyStockSuggestDTOS = nseActives(); - } else if (StringUtils.equals(stockType, "bse")) { - moneyStockSuggestDTOS = bseActives(); - } - Map map = new HashMap<>(); - moneyStockSuggestDTOS = moneyStockSuggestDTOS.stream() - .filter(f -> StringUtils.isNotBlank(f.getStockName())) - .filter(i -> map.putIfAbsent(i.getStockName(), Boolean.TRUE) == null).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(moneyStockSuggestDTOS)) { - moneyStockSuggestDTOS.stream().forEach(f -> f.setDispId(extractLastSegment(f.getStockUrl()))); - List selfUlrList = moneyStockSuggestDTOS.stream().map(MoneyStockSuggestDTO::getStockName).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(selfUlrList)) { - List all = moneyStockRepository.findAll(QMoneyStockPO.moneyStockPO.stockName.in(selfUlrList)); - if (CollectionUtils.isNotEmpty(all)) { - moneyStockSuggestDTOS.stream().filter(f -> all.stream().anyMatch(s -> s.getStockName().equals(f.getStockName()))) - .forEach(f -> f.setScId(all.stream().filter(s -> s.getStockName().equals(f.getStockName())).findFirst().orElse(null).getMoneyScId())); - } - List noScIdList = moneyStockSuggestDTOS.stream().filter(f -> StringUtils.isBlank(f.getScId())).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(noScIdList)) { - List dispIdList = noScIdList.stream().map(MoneyStockSuggestDTO::getDispId).collect(Collectors.toList()); - List all1 = moneyStockRepository.findAll(QMoneyStockPO.moneyStockPO.selfDispId.in(dispIdList)); - if (CollectionUtils.isNotEmpty(all1)) { - moneyStockSuggestDTOS.stream().filter(f -> all1.stream().anyMatch(s -> s.getSelfDispId().equals(f.getDispId()))) - .forEach(f -> f.setScId(all.stream().filter(s -> s.getSelfDispId().equals(f.getDispId())).findFirst().orElse(null).getMoneyScId())); - } - } - } - activesStockSuggestCache.put(stockType, moneyStockSuggestDTOS); + public List getTopActive(@RequestParam String stockType) { + List topActiveCode = Arrays.asList("SAP","LIN","SIE","DTE","RHM","MUV2","SHL","DB1","MRK", + "BMW", "VOW3", "DHL","ENI","BAS","HEI","ADS","CBK","TLX", "BAYN", "RWE"); + List stocks = stockRepository.findAll(QStockPO.stockPO.stockCode.in(topActiveCode)); + List stockQuoteDatas = moneyApiService.getStocksQuote(stocks); + for (StockQuoteData stockQuoteData : stockQuoteDatas) { + Stock name = stocks.stream().filter(e->e.getStockCode().equals(stockQuoteData.getSymbol())).findFirst().orElse(null); + if (name != null) { + stockQuoteData.setName(name.getStockName()); } } - - return moneyStockSuggestDTOS; + return stockQuoteDatas; } private static void addToListDouble(List list, String value) { diff --git a/src/main/java/cn/stock/market/web/service/MoneyApiService.java b/src/main/java/cn/stock/market/web/service/MoneyApiService.java index 92e028d..16fae98 100644 --- a/src/main/java/cn/stock/market/web/service/MoneyApiService.java +++ b/src/main/java/cn/stock/market/web/service/MoneyApiService.java @@ -16,6 +16,7 @@ import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; @Service public class MoneyApiService { @@ -97,6 +98,39 @@ public class MoneyApiService { return null; } + public List getStocksQuote(List stocks) { + Config config = SpringUtils.getBean(Config.class); + String codes = stocks.stream().map(e->e.getStockCode()).collect(Collectors.joining(",")); + + String url = config.getStockUrlPrefix() + "/api/ger-market/stocks/query-list?symbols=" + codes; + + 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://moneytj.com"); + headers.add("referer", "https://moneytj.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 entity = new HttpEntity<>(headers); + RestTemplate restTemplate = new RestTemplate(); + + try { + ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class); + ObjectMapper mapper = new ObjectMapper(); + StockQuoteResponse quoteResponse = mapper.readValue(response.getBody(), StockQuoteResponse.class); + if (quoteResponse != null && quoteResponse.getData() != null && !quoteResponse.getData().isEmpty()) { + return quoteResponse.getData(); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + private StockHistoryResponse convertToHistoryResponse(RawStockApiResponse apiResponse) { StockHistoryResponse response = new StockHistoryResponse(); response.setS("ok");