done save exchange type and save money stock
This commit is contained in:
@@ -79,6 +79,8 @@ public class StockIpoPO {
|
|||||||
* 申请总额 */
|
* 申请总额 */
|
||||||
String apply;
|
String apply;
|
||||||
|
|
||||||
|
String exchangeType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 市盈率 */
|
* 市盈率 */
|
||||||
BigDecimal peRatio;
|
BigDecimal peRatio;
|
||||||
|
|||||||
@@ -1,14 +1,18 @@
|
|||||||
package cn.stock.market.infrastructure.job;
|
package cn.stock.market.infrastructure.job;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.stock.market.domain.basic.entity.BtodayStock;
|
import cn.stock.market.domain.basic.entity.BtodayStock;
|
||||||
|
import cn.stock.market.domain.basic.entity.MoneyStock;
|
||||||
import cn.stock.market.domain.basic.entity.StockIpo;
|
import cn.stock.market.domain.basic.entity.StockIpo;
|
||||||
import cn.stock.market.domain.basic.repository.BtodayStockRepository;
|
import cn.stock.market.domain.basic.repository.BtodayStockRepository;
|
||||||
|
import cn.stock.market.domain.basic.repository.MoneyStockRepository;
|
||||||
import cn.stock.market.domain.basic.repository.StockIpoRepository;
|
import cn.stock.market.domain.basic.repository.StockIpoRepository;
|
||||||
import cn.stock.market.dto.StockIpoDTO;
|
import cn.stock.market.dto.StockIpoDTO;
|
||||||
import cn.stock.market.infrastructure.db.po.QStockIpoPO;
|
import cn.stock.market.infrastructure.db.po.QStockIpoPO;
|
||||||
import cn.stock.market.infrastructure.db.po.StockIpoPO;
|
import cn.stock.market.infrastructure.db.po.StockIpoPO;
|
||||||
import cn.stock.market.infrastructure.db.repo.BtodayStockRepo;
|
import cn.stock.market.infrastructure.db.repo.BtodayStockRepo;
|
||||||
|
import com.alibaba.druid.sql.visitor.functions.Now;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
@@ -31,14 +35,11 @@ import org.springframework.stereotype.Component;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
@@ -54,6 +55,8 @@ public class Scraper {
|
|||||||
private StockIpoRepository stockIpoRepository;
|
private StockIpoRepository stockIpoRepository;
|
||||||
|
|
||||||
private final ExecutorService executorService = Executors.newFixedThreadPool(5);
|
private final ExecutorService executorService = Executors.newFixedThreadPool(5);
|
||||||
|
@Autowired
|
||||||
|
private MoneyStockRepository moneyStockRepository;
|
||||||
|
|
||||||
|
|
||||||
@Scheduled(cron = "0 0 1 */2 * ?")
|
@Scheduled(cron = "0 0 1 */2 * ?")
|
||||||
@@ -103,7 +106,8 @@ public class Scraper {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Scheduled(cron = "0 0 18 * * ?")
|
// @Scheduled(cron = "0 0 18 * * ?")
|
||||||
|
@PostConstruct
|
||||||
@RequestMapping("/testScraperGetMoneyControllerNewIPO")
|
@RequestMapping("/testScraperGetMoneyControllerNewIPO")
|
||||||
public void getMoneyControllerNewIPOSchedule() {
|
public void getMoneyControllerNewIPOSchedule() {
|
||||||
log.info("定时任务执行获取新股ipo的方法开始执行");
|
log.info("定时任务执行获取新股ipo的方法开始执行");
|
||||||
@@ -163,7 +167,28 @@ public class Scraper {
|
|||||||
stockIpo.setCreateDate(new Date());
|
stockIpo.setCreateDate(new Date());
|
||||||
stockIpo.setUpdateDate(new Date());
|
stockIpo.setUpdateDate(new Date());
|
||||||
stockIpo.setSourceType("3");
|
stockIpo.setSourceType("3");
|
||||||
listStockIpoList.add(stockIpo);
|
|
||||||
|
if (stockIpo.getStockCode() == null || stockIpo.getStockName() == null){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> exchanges = getIpoExchange(stockIpo.getStockName(), stockIpo.getStockCode());
|
||||||
|
|
||||||
|
for (String exchange : exchanges) {
|
||||||
|
StockIpo ipo = new StockIpo();
|
||||||
|
ipo.setStockCode(stockIpo.getStockCode());
|
||||||
|
ipo.setStockName(stockIpo.getStockName());
|
||||||
|
ipo.setStockPrice(stockIpo.getStockPrice());
|
||||||
|
ipo.setSubscriptionDate(stockIpo.getSubscriptionDate());
|
||||||
|
ipo.setListingDate(stockIpo.getListingDate());
|
||||||
|
ipo.setTotalNumber(stockIpo.getTotalNumber());
|
||||||
|
ipo.setApply(stockIpo.getApply());
|
||||||
|
ipo.setCreateDate(stockIpo.getCreateDate());
|
||||||
|
ipo.setUpdateDate(stockIpo.getUpdateDate());
|
||||||
|
ipo.setExchangeType(exchange);
|
||||||
|
|
||||||
|
listStockIpoList.add(ipo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < upcomingData.size(); i++) {
|
for (int i = 0; i < upcomingData.size(); i++) {
|
||||||
@@ -186,11 +211,37 @@ public class Scraper {
|
|||||||
stockIpo.setCreateDate(new Date());
|
stockIpo.setCreateDate(new Date());
|
||||||
stockIpo.setUpdateDate(new Date());
|
stockIpo.setUpdateDate(new Date());
|
||||||
stockIpo.setSourceType("3");
|
stockIpo.setSourceType("3");
|
||||||
listStockIpoList.add(stockIpo);
|
|
||||||
|
if (stockIpo.getStockCode() == null || stockIpo.getStockName() == null){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> exchanges = getIpoExchange(stockIpo.getStockName(), stockIpo.getStockCode());
|
||||||
|
|
||||||
|
for (String exchange : exchanges) {
|
||||||
|
StockIpo ipo = new StockIpo();
|
||||||
|
ipo.setStockCode(stockIpo.getStockCode());
|
||||||
|
ipo.setStockName(stockIpo.getStockName());
|
||||||
|
ipo.setStockPrice(stockIpo.getStockPrice());
|
||||||
|
ipo.setSubscriptionDate(stockIpo.getSubscriptionDate());
|
||||||
|
ipo.setListingDate(stockIpo.getListingDate());
|
||||||
|
ipo.setTotalNumber(stockIpo.getTotalNumber());
|
||||||
|
ipo.setApply(stockIpo.getApply());
|
||||||
|
ipo.setCreateDate(stockIpo.getCreateDate());
|
||||||
|
ipo.setUpdateDate(stockIpo.getUpdateDate());
|
||||||
|
ipo.setExchangeType(exchange);
|
||||||
|
|
||||||
|
listStockIpoList.add(ipo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// stockIpoRepository.saveAll(listStockIpoList);
|
// stockIpoRepository.saveAll(listStockIpoList);
|
||||||
|
|
||||||
|
if (!listStockIpoList.isEmpty())
|
||||||
|
{
|
||||||
|
listStockIpoList = listStockIpoList.stream().filter(a -> StringUtils.isNotBlank(a.getStockName())).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
List<String> scIdList = Lists.transform(listStockIpoList, StockIpo::getStockCode);
|
List<String> scIdList = Lists.transform(listStockIpoList, StockIpo::getStockCode);
|
||||||
if(CollectionUtil.isNotEmpty(scIdList)){
|
if(CollectionUtil.isNotEmpty(scIdList)){
|
||||||
List<StockIpo> existStockIpoList = stockIpoRepository.findAll(QStockIpoPO.stockIpoPO.stockCode.in(scIdList));
|
List<StockIpo> existStockIpoList = stockIpoRepository.findAll(QStockIpoPO.stockIpoPO.stockCode.in(scIdList));
|
||||||
@@ -205,6 +256,10 @@ public class Scraper {
|
|||||||
//保存全部的新股
|
//保存全部的新股
|
||||||
if(CollectionUtil.isNotEmpty(listStockIpoList)){
|
if(CollectionUtil.isNotEmpty(listStockIpoList)){
|
||||||
stockIpoRepository.saveAll(listStockIpoList);
|
stockIpoRepository.saveAll(listStockIpoList);
|
||||||
|
|
||||||
|
List<MoneyStock> moneyStockList = convertToMoneyStock(listStockIpoList);
|
||||||
|
moneyStockRepository.saveAll(moneyStockList);
|
||||||
|
|
||||||
log.info("定时任务执行获取新股ipo的方法开始结束,保存了数据:{}", JSON.toJSONString(listStockIpoList));
|
log.info("定时任务执行获取新股ipo的方法开始结束,保存了数据:{}", JSON.toJSONString(listStockIpoList));
|
||||||
}else {
|
}else {
|
||||||
log.info("定时任务执行获取新股ipo的方法开始结束,没有数据");
|
log.info("定时任务执行获取新股ipo的方法开始结束,没有数据");
|
||||||
@@ -378,4 +433,64 @@ public class Scraper {
|
|||||||
log.info("Getting web detail URL: " + url + "...");
|
log.info("Getting web detail URL: " + url + "...");
|
||||||
return Jsoup.connect(url).ignoreContentType(true).execute().body();
|
return Jsoup.connect(url).ignoreContentType(true).execute().body();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getIpoExchange(String stockName, String stockCode) {
|
||||||
|
List<String> exchanges = new ArrayList<>();
|
||||||
|
String url = "https://www.moneycontrol.com/ipo/{stockName}-{stockCode}-ipodetail";
|
||||||
|
url = url.replace("{stockName}", stockName.toLowerCase().replace(" ", "-")).replace("{stockCode}", stockCode.toLowerCase());
|
||||||
|
|
||||||
|
org.apache.http.client.HttpClient client = HttpClients.createDefault();
|
||||||
|
HttpGet request = new HttpGet(url);
|
||||||
|
try {
|
||||||
|
org.apache.http.HttpResponse response = client.execute(request);
|
||||||
|
|
||||||
|
if (response.getStatusLine().getStatusCode() == 200) {
|
||||||
|
String responseBody = EntityUtils.toString(response.getEntity());
|
||||||
|
Document doc = Jsoup.parse(responseBody);
|
||||||
|
|
||||||
|
Element scriptTag = doc.selectFirst("script#__NEXT_DATA__");
|
||||||
|
|
||||||
|
if (scriptTag != null) {
|
||||||
|
String jsonDataStr = scriptTag.html();
|
||||||
|
|
||||||
|
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(jsonDataStr);
|
||||||
|
log.info("获取到新股的json信息:" + jsonObject.toJSONString());
|
||||||
|
|
||||||
|
com.alibaba.fastjson.JSONObject pageProps = jsonObject.getJSONObject("props").getJSONObject("pageProps");
|
||||||
|
com.alibaba.fastjson.JSONObject overview = pageProps.getJSONObject("ipoDetails").getJSONObject("ipoDetails").getJSONObject("overview");
|
||||||
|
|
||||||
|
String exchangeStr = overview.getString("listing_on");
|
||||||
|
|
||||||
|
if (exchangeStr != null && !exchangeStr.isEmpty() && !exchangeStr.equals("null")) {
|
||||||
|
exchanges.addAll(new ArrayList<>(Arrays.asList(exchangeStr.split(","))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
log.info(e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exchanges.isEmpty()) {
|
||||||
|
exchanges.add("");
|
||||||
|
}
|
||||||
|
|
||||||
|
return exchanges;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MoneyStock> convertToMoneyStock(List<StockIpo> stockIpoList) {
|
||||||
|
return stockIpoList.stream().map(this::convert).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private MoneyStock convert(StockIpo stockIpo) {
|
||||||
|
MoneyStock moneyStock = new MoneyStock();
|
||||||
|
|
||||||
|
moneyStock.setStockName(stockIpo.getStockName());
|
||||||
|
moneyStock.setMoneyScId(stockIpo.getStockCode());
|
||||||
|
moneyStock.setSelfDispId(stockIpo.getStockCode());
|
||||||
|
moneyStock.setStockType(stockIpo.getExchangeType());
|
||||||
|
moneyStock.setSaveTime(DateTime.now());
|
||||||
|
|
||||||
|
return moneyStock;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ spring:
|
|||||||
show-sql: true
|
show-sql: true
|
||||||
# Redis配置
|
# Redis配置
|
||||||
redis:
|
redis:
|
||||||
host: lb-b6sze686-7db6hgvsx05ef8nz.clb.sg-tencentclb.net
|
host: 43.156.40.39
|
||||||
password: a5v8b86P4mVzFlUqJV
|
password: a5v8b86P4mVzFlUqJV
|
||||||
port: 56379
|
port: 30031
|
||||||
database: 1
|
database: 1
|
||||||
lettuce:
|
lettuce:
|
||||||
pool:
|
pool:
|
||||||
@@ -17,7 +17,7 @@ spring:
|
|||||||
datasource:
|
datasource:
|
||||||
stock-market:
|
stock-market:
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
url: jdbc:mysql://lb-1ju43bvw-p0ecnv4by9ju8six.clb.ap-singapore.tencentclb.com:53306/india_stock?useUnicode=true&characterEncoding=utf-8
|
url: jdbc:mysql://43.156.40.39:30030/india_stock?useUnicode=true&characterEncoding=utf-8
|
||||||
username: root
|
username: root
|
||||||
password: uNejHIFQGJOUtYTmE
|
password: uNejHIFQGJOUtYTmE
|
||||||
maxActive: 500
|
maxActive: 500
|
||||||
|
|||||||
Reference in New Issue
Block a user