From 92f3d6f3dd47a2ed421113a01e83262306f780f7 Mon Sep 17 00:00:00 2001 From: Achilles Date: Sat, 6 Jan 2024 12:22:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/stock/market/MoneyStockSuggestDTO.java | 25 ++ .../stock/market/web/MoneyApiController.java | 385 +++++++++++++++++- 2 files changed, 403 insertions(+), 7 deletions(-) create mode 100644 src/main/java/cn/stock/market/MoneyStockSuggestDTO.java diff --git a/src/main/java/cn/stock/market/MoneyStockSuggestDTO.java b/src/main/java/cn/stock/market/MoneyStockSuggestDTO.java new file mode 100644 index 0000000..5298486 --- /dev/null +++ b/src/main/java/cn/stock/market/MoneyStockSuggestDTO.java @@ -0,0 +1,25 @@ +package cn.stock.market; + +import lombok.Data; + +/** + * @author gs + * @date 2024/1/6 11:12 + */ +@Data +public class MoneyStockSuggestDTO { + + private String stockType; + private String stockName; + private String stockUrl; + private String highPrice; + private String lowPrice; + private String lastPrice; + private String prevClosePrice; + private String change; + private String changePercent; + + private String scId; + + +} diff --git a/src/main/java/cn/stock/market/web/MoneyApiController.java b/src/main/java/cn/stock/market/web/MoneyApiController.java index 7c359d1..b253b16 100644 --- a/src/main/java/cn/stock/market/web/MoneyApiController.java +++ b/src/main/java/cn/stock/market/web/MoneyApiController.java @@ -1,12 +1,23 @@ package cn.stock.market.web; +import cn.stock.market.MoneyStockSuggestDTO; +import cn.stock.market.domain.basic.entity.MoneyStock; +import cn.stock.market.domain.basic.repository.MoneyStockRepository; +import cn.stock.market.infrastructure.db.po.QMoneyStockPO; import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; @@ -16,18 +27,27 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + /** * @author gs * @date 2024/1/4 10:25 */ @RestController @Api(value = "/MoneyApiController", tags = "money股票行情") +@Slf4j public class MoneyApiController { @Autowired private RestTemplate restTemplate; + @Autowired + private MoneyStockRepository moneyStockRepository; + @ApiOperation(value = "股票详情信息",httpMethod = "GET") @ApiImplicitParams({ @@ -133,23 +153,26 @@ public class MoneyApiController { }) @GetMapping("/api/market/money/getStockDetail") @ResponseBody - public JSONObject forwardRequest(@RequestParam String stockType, @RequestParam String symbol) { + public JSONObject getStockDetail(@RequestParam String stockType, @RequestParam String symbol) { String url = String.format("https://priceapi.moneycontrol.com/pricefeed/%s/equitycash/%s",stockType,symbol); // 设置重试次数 int maxRetries = 3; for (int retry = 1; retry <= maxRetries; retry++) { - ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class); + try { + ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class); - if (responseEntity.getStatusCode().value() == 200 && responseEntity.getBody() != null) { - return JSONObject.parseObject(responseEntity.getBody()); + if (responseEntity.getStatusCode().value() == 200 && responseEntity.getBody() != null) { + return JSONObject.parseObject(responseEntity.getBody()); + } + + } catch (Exception e) { } - // 如果不是最后一次重试,则等待一段时间再进行下一次重试 if (retry < maxRetries) { try { - // 你可以根据需要调整等待的时间 - Thread.sleep(100); // 1秒钟 + // 1秒钟 + Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } @@ -158,4 +181,352 @@ public class MoneyApiController { return null; } + + + private static void nseActives() { + String url = "https://www.moneycontrol.com/stocks/marketstats/nse-mostactive-stocks/nifty-50-9/"; + try { + Document doc = Jsoup.connect(url).get(); + int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size(); + System.err.println(size); + for (int i =1;i<=size;i++){ + Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > a").first(); + if (company_a != null) { + String stockUrl = company_a.attr("href"); + String stockName = company_a.text(); + log.info(stockName); + log.info(stockUrl); + } + + String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td:nth-child(2)").first()); + log.info(highPrice); + + String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first()); + log.info(lowPrice); + + String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first()); + log.info(lastPrice); + + String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first()); + log.info(change); + + String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first()); + log.info(changePercent); + + log.info("---------------------------------------------" + i); + } + + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static void bseActives() { + String url = "https://www.moneycontrol.com/stocks/marketstats/bsemact1/index.php"; + try { + Document doc = Jsoup.connect(url).get(); + int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size(); + System.err.println(size); + for (int i =1;i<=size;i++){ + Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > a").first(); + if (company_a != null) { + String stockUrl = company_a.attr("href"); + String stockName = company_a.text(); + log.info(stockName); + log.info(stockUrl); + } + + String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first()); + log.info(highPrice); + + String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first()); + log.info(lowPrice); + + String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first()); + log.info(lastPrice); + + String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first()); + log.info(prevClosePrice); + + String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first()); + log.info(change); + + String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first()); + log.info(changePercent); + + log.info("---------------------------------------------" + i); + } + + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static List bseGainer() { + String url = "https://www.moneycontrol.com/stocks/marketstats/bse-gainer/sensex_4/"; + List list = Lists.newArrayList(); + try { + Document doc = Jsoup.connect(url).get(); + int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size(); + for (int i =1;i<=size;i++){ + Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > a").first(); + MoneyStockSuggestDTO dto = new MoneyStockSuggestDTO(); + if (company_a != null) { + String stockUrl = company_a.attr("href"); + String stockName = company_a.text(); + log.info(stockName); + log.info(stockUrl); + dto.setStockName(stockName); + dto.setStockUrl(stockUrl); + } + + String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first()); + dto.setHighPrice(highPrice); + + String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first()); + dto.setLowPrice(lowPrice); + + String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first()); + dto.setLastPrice(lastPrice); + + String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first()); + dto.setPrevClosePrice(prevClosePrice); + + String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first()); + dto.setChange(change); + + String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first()); + dto.setChangePercent(changePercent); + + dto.setStockType("bse"); + list.add(dto); + log.info("---------------------------------------------" + i); + } + + } catch (IOException e) { + e.printStackTrace(); + } + return list; + } + + private static List nseGainer() { + String url = "https://www.moneycontrol.com/stocks/marketstats/nsegainer/index.php"; + List list = Lists.newArrayList(); + try { + Document doc = Jsoup.connect(url).get(); + int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size(); + for (int i =1;i<=size;i++){ + MoneyStockSuggestDTO dto = new MoneyStockSuggestDTO(); + Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > h3 > a").first(); + if (company_a != null) { + String stockUrl = company_a.attr("href"); + String stockName = company_a.text(); + dto.setStockUrl(stockUrl); + dto.setStockName(stockName); + } + + String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first()); + dto.setHighPrice(highPrice); + + String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first()); + dto.setLowPrice(lowPrice); + + String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first()); + dto.setLastPrice(lastPrice); + + String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first()); + dto.setPrevClosePrice(prevClosePrice); + + String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first()); + dto.setChange(change); + + String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first()); + dto.setChangePercent(changePercent); + dto.setStockType("nse"); + list.add(dto); + } + + } catch (IOException e) { + e.printStackTrace(); + } + return list; + } + + private static List nseTopLoser() { + String url = "https://www.moneycontrol.com/stocks/marketstats/nseloser/index.php"; + List list = Lists.newArrayList(); + + try { + Document doc = Jsoup.connect(url).get(); + int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size(); + for (int i =1;i<=size;i++){ + MoneyStockSuggestDTO dto = new MoneyStockSuggestDTO(); + Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child("+i+") > td.PR > span > h3 > a").first(); + if (company_a != null) { + String stockUrl = company_a.attr("href"); + String stockName = company_a.text(); + dto.setStockUrl(stockUrl); + dto.setStockName(stockName); + } + + String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first()); + dto.setHighPrice(highPrice); + String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first()); + dto.setLowPrice(lowPrice); + String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first()); + dto.setLastPrice(lastPrice); + + String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first()); + dto.setPrevClosePrice(prevClosePrice); + + String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first()); + dto.setChange(change); + + String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first()); + dto.setChangePercent(changePercent); + dto.setStockType("nse"); + list.add(dto); + log.info("---------------------------------------------" + i); + } + + } catch (IOException e) { + e.printStackTrace(); + } + return list; + } + + private static List bseTopLoser() { + String url = "https://www.moneycontrol.com/stocks/marketstats/bse-loser/sensex_4/"; + List list = Lists.newArrayList(); + + try { + Document doc = Jsoup.connect(url).get(); + int size = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr").size(); + for (int i =1;i<=size;i++){ + Element company_a = doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td.PR > span > a").first(); + MoneyStockSuggestDTO dto = new MoneyStockSuggestDTO(); + if (company_a != null) { + String stockUrl = company_a.attr("href"); + String stockName = company_a.text(); + dto.setStockName(stockName); + dto.setStockUrl(stockUrl); + + } + + String highPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(2)").first()); + dto.setHighPrice(highPrice); + + String lowPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(3)").first()); + dto.setLowPrice(lowPrice); + + String lastPrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(4)").first()); + dto.setLastPrice(lastPrice); + + String prevClosePrice = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(5)").first()); + dto.setPrevClosePrice(prevClosePrice); + + String change = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(6)").first()); + dto.setChange(change); + + String changePercent = getTextOrEmpty(doc.select("#mc_content > section > section > div.clearfix.stat_container > div.columnst.FR.wbg.brdwht > div > div > div.bsr_table.hist_tbl_hm > table > tbody > tr:nth-child(" + i + ") > td:nth-child(7)").first()); + dto.setChangePercent(changePercent); + list.add(dto); + log.info("---------------------------------------------" + i); + } + + } catch (IOException e) { + e.printStackTrace(); + } + return list; + } + + // 辅助方法,获取元素的文本或返回空字符串 + private static String getTextOrEmpty(Element element) { + return element != null ? element.text() : ""; + } + + + + + @ApiOperation(value = "股票推荐TopGainer",httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name="stockType",value = "BSE或者NSE"), + }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "" + + "股票推荐相关: top gainer", response = JSONObject.class), + }) + @GetMapping("/api/market/money/getTopGainer") + @ResponseBody + public List getTopGainer(@RequestParam String stockType) { + List moneyStockSuggestDTOS = null; + if(StringUtils.equals(stockType,"nse")){ + moneyStockSuggestDTOS = nseGainer(); + }else if(StringUtils.equals(stockType,"bse")){ + moneyStockSuggestDTOS = bseGainer(); + } + if(CollectionUtils.isNotEmpty(moneyStockSuggestDTOS)){ + moneyStockSuggestDTOS.stream().forEach(f-> + f.getStockUrl().replaceAll("(? selfUlrList = moneyStockSuggestDTOS.stream().map(MoneyStockSuggestDTO::getStockUrl).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(selfUlrList)){ + List all = moneyStockRepository.findAll(QMoneyStockPO.moneyStockPO.selfUrl.in(selfUlrList)); + if(CollectionUtils.isNotEmpty(all)){ + moneyStockSuggestDTOS.stream().filter(f->all.stream().anyMatch(s->s.getSelfUrl().equals(f.getStockUrl()))) + .forEach(f->f.setScId(all.stream().filter(s->s.getSelfUrl().equals(f.getStockUrl())).findFirst().orElse(null).getMoneyScId())); + } + } + } + return moneyStockSuggestDTOS; + } + + + @ApiOperation(value = "股票推荐TopLoser",httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name="stockType",value = "BSE或者NSE"), + }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "" + + "股票推荐相关: top gainer", response = JSONObject.class), + }) + @GetMapping("/api/market/money/getTopLoser") + @ResponseBody + public List getTopLoser(@RequestParam String stockType) { + List moneyStockSuggestDTOS = null; + if(StringUtils.equals(stockType,"nse")){ + moneyStockSuggestDTOS = nseTopLoser(); + }else if(StringUtils.equals(stockType,"bse")){ + moneyStockSuggestDTOS = bseTopLoser(); + } + if (CollectionUtils.isNotEmpty(moneyStockSuggestDTOS)){ + moneyStockSuggestDTOS.stream().forEach(f-> + f.getStockUrl().replaceAll("(? selfUlrList = moneyStockSuggestDTOS.stream().map(MoneyStockSuggestDTO::getStockUrl).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(selfUlrList)){ + List all = moneyStockRepository.findAll(QMoneyStockPO.moneyStockPO.selfUrl.in(selfUlrList)); + if(CollectionUtils.isNotEmpty(all)){ + moneyStockSuggestDTOS.stream().filter(f->all.stream().anyMatch(s->s.getSelfUrl().equals(f.getStockUrl()))) + .forEach(f->f.setScId(all.stream().filter(s->s.getSelfUrl().equals(f.getStockUrl())).findFirst().orElse(null).getMoneyScId())); + } + } + } + + return moneyStockSuggestDTOS; + } + + + + + + public static void main(String[] args) { + nseGainer(); + nseActives(); + nseTopLoser(); + + bseActives(); + bseGainer(); + bseTopLoser(); + } + }