diff --git a/src/main/java/cn/stock/market/domain/basic/service/StockService.java b/src/main/java/cn/stock/market/domain/basic/service/StockService.java index 1e29ea0..818b724 100644 --- a/src/main/java/cn/stock/market/domain/basic/service/StockService.java +++ b/src/main/java/cn/stock/market/domain/basic/service/StockService.java @@ -945,8 +945,10 @@ public class StockService { market.setName("BSESENSEX指数"); vo1.setIndexVo(market); - String type = "min"; - List list = InvestingApis.of().kline(StockCode.of(stockCode), type); + String period = "P1D"; + String interval = "PT5M"; + String type = "day"; + List list = InvestingApis.of().kIndex(stockCode,period,interval, type); if(list == null || list.size() == 0){ type = "day"; list = InvestingApis.of().kline(StockCode.of(stockCode), type); @@ -958,13 +960,15 @@ public class StockService { } try { IndiaIndexVo vo2 = new IndiaIndexVo(); - String stockCode = "8985"; //"17940"; + String stockCode = "17940"; //"17940";8985 IndiaStockVO market = InvestingApis.of().market(StockCode.of(stockCode)); market.setName("NIFTY50指数"); vo2.setIndexVo(market); - String type = "min"; - List list = InvestingApis.of().kline(StockCode.of(stockCode), type); + String period = "P1D"; + String interval = "PT1M"; + String type = "day"; + List list = InvestingApis.of().kIndex(stockCode,period,interval, type); if(list == null || list.size() == 0){ type = "day"; list = InvestingApis.of().kline(StockCode.of(stockCode), type); diff --git a/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingApis.java b/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingApis.java index 0720def..fa410cf 100644 --- a/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingApis.java +++ b/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingApis.java @@ -153,7 +153,6 @@ public class InvestingApis { "Time": "1698055197", "Url": "/equities/aditya-birla", "Volume": 3693615 - * @param httpClient * @param currPage * @param pageSize * @return @@ -252,7 +251,35 @@ public class InvestingApis { .collect(Collectors.toList()) ; } - + public List kIndex(String code,String period, String interval,String type) throws IOException { + if(code == null) { + throw new RuntimeException("找不到股票信息"); + } + Date nowDate = new Date(); + JSONObject json = InvestingInvokerApis.of().__IndiaIndex(code, period,interval); + return json + .getJSONArray("data") + .stream() + .map(val -> { + JSONArray _ar = (JSONArray) val; + JSONObject item = new JSONObject(); + item.put("date", _ar.get(0)); + item.put("open", _ar.get(1)); + item.put("high", _ar.get(2)); + item.put("low", _ar.get(3)); + item.put("close", _ar.get(4)); + item.put("volume", _ar.get(5)); + return item; + }).filter(val -> { + if("day".equalsIgnoreCase(type)) { + return DateUtil.isSameDay(nowDate, new Date(val.getLong("date"))); + } + return true; + }) + .collect(Collectors.toList()) + ; + } + public static InvestingApis of() { return new InvestingApis(); } diff --git a/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingInvokerApis.java b/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingInvokerApis.java index 57924da..06b5f2e 100644 --- a/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingInvokerApis.java +++ b/src/main/java/cn/stock/market/infrastructure/api/investing/InvestingInvokerApis.java @@ -201,6 +201,15 @@ public class InvestingInvokerApis { String body = httpClient().newCall(builder.build()).execute().body().string(); return JSON.parseObject(body); } + + public JSONObject __IndiaIndex(String code,String period, String interval)throws IOException { + String tmpl = "https://api.investing.com/api/financialdata/{}/historical/chart/?period={}&interval={}&pointscount=160"; + String url = StrFormatter.format(tmpl, code, period, interval); + Builder builder = builderGet(url); + + String body = httpClient().newCall(builder.build()).execute().body().string(); + return JSON.parseObject(body); + } public static InvestingInvokerApis of() { return new InvestingInvokerApis(); diff --git a/src/main/java/cn/stock/market/infrastructure/db/po/BtodayStockPO.java b/src/main/java/cn/stock/market/infrastructure/db/po/BtodayStockPO.java index fddb048..5802af8 100644 --- a/src/main/java/cn/stock/market/infrastructure/db/po/BtodayStockPO.java +++ b/src/main/java/cn/stock/market/infrastructure/db/po/BtodayStockPO.java @@ -71,4 +71,10 @@ public class BtodayStockPO { /** * 上次更新时间 */ Date lastUpdateTime; + + /** 是否锁定 0否 1是 */ + Integer isLock; + + /** 是否展示 0是 1否 */ + Integer isShow; } diff --git a/src/main/java/cn/stock/market/infrastructure/job/MoneyScraper.java b/src/main/java/cn/stock/market/infrastructure/job/MoneyScraper.java index 91f5826..f507632 100644 --- a/src/main/java/cn/stock/market/infrastructure/job/MoneyScraper.java +++ b/src/main/java/cn/stock/market/infrastructure/job/MoneyScraper.java @@ -15,6 +15,7 @@ import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -49,6 +50,7 @@ public class MoneyScraper { private MoneyStockRepository moneyStockRepository; @GetMapping("testScraperGetMoneyControlStock") + @Scheduled(cron = "0 0 2 */2 * ?") public void schedule(){ List letters = new ArrayList<>(); for (char c = 'A'; c <= 'Z'; c++) { diff --git a/src/main/java/cn/stock/market/infrastructure/job/Scraper.java b/src/main/java/cn/stock/market/infrastructure/job/Scraper.java index fa3e607..23dfa4e 100644 --- a/src/main/java/cn/stock/market/infrastructure/job/Scraper.java +++ b/src/main/java/cn/stock/market/infrastructure/job/Scraper.java @@ -1,5 +1,6 @@ package cn.stock.market.infrastructure.job; +import cn.hutool.core.collection.CollectionUtil; import cn.stock.market.domain.basic.entity.BtodayStock; import cn.stock.market.domain.basic.entity.StockIpo; import cn.stock.market.domain.basic.repository.BtodayStockRepository; @@ -151,7 +152,7 @@ public class Scraper { stockIpo.setApply(entry.getString("total_subs")); stockIpo.setCreateDate(new Date()); stockIpo.setUpdateDate(new Date()); - stockIpo.setSourceType("2"); + stockIpo.setSourceType("3"); listStockIpoList.add(stockIpo); } @@ -173,17 +174,23 @@ public class Scraper { // stockIpoRepository.saveAll(listStockIpoList); - List nameList = Lists.transform(listStockIpoList, StockIpo::getStockName); - List existStockIpoList = stockIpoRepository.findAll(QStockIpoPO.stockIpoPO.stockName.in(nameList)); - List existingStockNames = existStockIpoList.stream() - .map(StockIpo::getStockName) - .collect(Collectors.toList()); + List scIdList = Lists.transform(listStockIpoList, StockIpo::getStockCode); + if(CollectionUtil.isNotEmpty(scIdList)){ + List existStockIpoList = stockIpoRepository.findAll(QStockIpoPO.stockIpoPO.stockCode.in(scIdList)); + List existingStockScIds = existStockIpoList.stream() + .map(StockIpo::getStockCode) + .collect(Collectors.toList()); + + listStockIpoList = listStockIpoList.stream() + .filter(stockIpos -> !existingStockScIds.contains(stockIpos.getStockCode())) + .collect(Collectors.toList()); + + //保存全部的新股 + if(CollectionUtil.isNotEmpty(listStockIpoList)){ + stockIpoRepository.saveAll(listStockIpoList); + } + } - listStockIpoList = listStockIpoList.stream() - .filter(stockIpos -> !existingStockNames.contains(stockIpos.getStockName())) - .collect(Collectors.toList()); - //保存全部的新股 - stockIpoRepository.saveAll(listStockIpoList); // 输出整个 JSON 数据 } else { @@ -257,6 +264,8 @@ public class Scraper { btodayStock.setSelfUrl(url); btodayStock.setUrl(detailUrl); btodayStock.setLastUpdateTime(new Date()); + btodayStock.setIsLock(0); + btodayStock.setIsShow(0); btodayStockRepo.save(btodayStock); /* if (webInfo != null) { diff --git a/src/main/java/cn/stock/market/web/MoneyApiController.java b/src/main/java/cn/stock/market/web/MoneyApiController.java index 7c6846f..742e70d 100644 --- a/src/main/java/cn/stock/market/web/MoneyApiController.java +++ b/src/main/java/cn/stock/market/web/MoneyApiController.java @@ -744,17 +744,17 @@ public class MoneyApiController { private Cache> gainerStockSuggestCache = CacheBuilder.newBuilder() .maximumSize(100) // 设置缓存的最大大小 - .expireAfterWrite(1, TimeUnit.HOURS) // 设置缓存条目的过期时间 + .expireAfterWrite(1, TimeUnit.MINUTES) // 设置缓存条目的过期时间 .build(); private Cache> loserStockSuggestCache = CacheBuilder.newBuilder() .maximumSize(100) // 设置缓存的最大大小 - .expireAfterWrite(1, TimeUnit.HOURS) // 设置缓存条目的过期时间 + .expireAfterWrite(1, TimeUnit.MINUTES) // 设置缓存条目的过期时间 .build(); private Cache> activesStockSuggestCache = CacheBuilder.newBuilder() .maximumSize(100) // 设置缓存的最大大小 - .expireAfterWrite(30, TimeUnit.MINUTES) // 设置缓存条目的过期时间 + .expireAfterWrite(1, TimeUnit.MINUTES) // 设置缓存条目的过期时间 .build(); } diff --git a/src/main/java/cn/stock/market/web/StockApiController.java b/src/main/java/cn/stock/market/web/StockApiController.java index 1a6d0e1..069d640 100644 --- a/src/main/java/cn/stock/market/web/StockApiController.java +++ b/src/main/java/cn/stock/market/web/StockApiController.java @@ -167,6 +167,34 @@ public class StockApiController { return ServerResponse.createBySuccess(newsRepository.findAll(ConditionBuilder.builder().build(), PageParam.of(pageNum, pageSize), QSiteNewsPO.siteNewsPO.id.desc())); } + @RequestMapping({"test.do"}) + @ResponseBody + public ServerResponse test(@RequestParam("url") String url, @RequestParam("pageNum") Integer pageNum) { + String news = stockService.getNews(); + List newsList = Arrays.asList(news.split(" newsInfo = stockService.getNewsInfo(contentUrl); + siteNews.setContent(newsInfo.get(0)); + siteNews.setTitle(newsInfo.get(1)); + List list = newsRepository.findAll(QSiteNewsPO.siteNewsPO.sourceId.eq(id)); + if (list.size() == 0) { + newsRepository.save(siteNews); + } + }); + return ServerResponse.createBySuccess(); + } + //印度股票时线-K线 @RequestMapping({"getINDTimeK.do"}) @ApiOperation(value = "印度股票K线", httpMethod = "GET")