update top active

This commit is contained in:
vu-tran
2025-06-27 17:14:48 +07:00
parent 401983255a
commit 4db963b0e5
2 changed files with 45 additions and 35 deletions

View File

@@ -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<MoneyStockSuggestDTO> getTopActive(@RequestParam String stockType) {
List<MoneyStockSuggestDTO> 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<Object, Boolean> 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<String> selfUlrList = moneyStockSuggestDTOS.stream().map(MoneyStockSuggestDTO::getStockName).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(selfUlrList)) {
List<MoneyStock> 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<MoneyStockSuggestDTO> noScIdList = moneyStockSuggestDTOS.stream().filter(f -> StringUtils.isBlank(f.getScId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(noScIdList)) {
List<String> dispIdList = noScIdList.stream().map(MoneyStockSuggestDTO::getDispId).collect(Collectors.toList());
List<MoneyStock> 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<StockQuoteData> getTopActive(@RequestParam String stockType) {
List<String> topActiveCode = Arrays.asList("SAP","LIN","SIE","DTE","RHM","MUV2","SHL","DB1","MRK",
"BMW", "VOW3", "DHL","ENI","BAS","HEI","ADS","CBK","TLX", "BAYN", "RWE");
List<Stock> stocks = stockRepository.findAll(QStockPO.stockPO.stockCode.in(topActiveCode));
List<StockQuoteData> 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<Double> list, String value) {

View File

@@ -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<StockQuoteData> getStocksQuote(List<Stock> 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<String> entity = new HttpEntity<>(headers);
RestTemplate restTemplate = new RestTemplate();
try {
ResponseEntity<String> 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");