stockIpo代码提交
This commit is contained in:
19
pom.xml
19
pom.xml
@@ -216,6 +216,25 @@
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
|
||||
<plugin>
|
||||
<groupId>com.mysema.maven</groupId>
|
||||
<artifactId>apt-maven-plugin</artifactId>
|
||||
<version>1.1.3</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>process</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>src/main/generated</outputDirectory>
|
||||
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
|
||||
<plugin>
|
||||
<groupId>com.mysema.maven</groupId>
|
||||
<artifactId>apt-maven-plugin</artifactId>
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package cn.stock.market.infrastructure.db.po;
|
||||
|
||||
import static com.querydsl.core.types.PathMetadataFactory.*;
|
||||
|
||||
import com.querydsl.core.types.dsl.*;
|
||||
|
||||
import com.querydsl.core.types.PathMetadata;
|
||||
import javax.annotation.Generated;
|
||||
import com.querydsl.core.types.Path;
|
||||
|
||||
|
||||
/**
|
||||
* QStockIpoPO is a Querydsl query type for StockIpoPO
|
||||
*/
|
||||
@Generated("com.querydsl.codegen.EntitySerializer")
|
||||
public class QStockIpoPO extends EntityPathBase<StockIpoPO> {
|
||||
|
||||
private static final long serialVersionUID = 1023664740L;
|
||||
|
||||
public static final QStockIpoPO stockIpoPO = new QStockIpoPO("stockIpoPO");
|
||||
|
||||
public final StringPath apply = createString("apply");
|
||||
|
||||
public final DateTimePath<java.util.Date> createDate = createDateTime("createDate", java.util.Date.class);
|
||||
|
||||
public final NumberPath<Integer> id = createNumber("id", Integer.class);
|
||||
|
||||
public final NumberPath<Integer> isList = createNumber("isList", Integer.class);
|
||||
|
||||
public final NumberPath<Integer> isShow = createNumber("isShow", Integer.class);
|
||||
|
||||
public final DateTimePath<java.util.Date> listingDate = createDateTime("listingDate", java.util.Date.class);
|
||||
|
||||
public final NumberPath<java.math.BigDecimal> peRatio = createNumber("peRatio", java.math.BigDecimal.class);
|
||||
|
||||
public final StringPath sourceType = createString("sourceType");
|
||||
|
||||
public final StringPath stockCode = createString("stockCode");
|
||||
|
||||
public final StringPath stockName = createString("stockName");
|
||||
|
||||
public final NumberPath<java.math.BigDecimal> stockPrice = createNumber("stockPrice", java.math.BigDecimal.class);
|
||||
|
||||
public final DateTimePath<java.util.Date> subscriptionDate = createDateTime("subscriptionDate", java.util.Date.class);
|
||||
|
||||
public final NumberPath<Integer> totalNumber = createNumber("totalNumber", Integer.class);
|
||||
|
||||
public final DateTimePath<java.util.Date> updateDate = createDateTime("updateDate", java.util.Date.class);
|
||||
|
||||
public QStockIpoPO(String variable) {
|
||||
super(StockIpoPO.class, forVariable(variable));
|
||||
}
|
||||
|
||||
public QStockIpoPO(Path<? extends StockIpoPO> path) {
|
||||
super(path.getType(), path.getMetadata());
|
||||
}
|
||||
|
||||
public QStockIpoPO(PathMetadata metadata) {
|
||||
super(StockIpoPO.class, metadata);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package cn.stock.market.application.assembler;
|
||||
|
||||
import cn.qutaojing.common.utils.Beans;
|
||||
import cn.qutaojing.common.utils.SpringUtils;
|
||||
import cn.stock.market.domain.basic.entity.StockIpo;
|
||||
import cn.stock.market.dto.StockIpoDTO;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* StockIpoAssembler
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@Component
|
||||
@Lazy
|
||||
public class StockIpoAssembler {
|
||||
public StockIpoDTO toDTO(StockIpo e) {
|
||||
StockIpoDTO dto = Beans.mapper(e, StockIpoDTO.class);
|
||||
if(dto == null) return dto;
|
||||
fill(e, dto);
|
||||
return dto;
|
||||
}
|
||||
|
||||
protected void fill(StockIpo e, StockIpoDTO dto) {
|
||||
if(dto == null) return;
|
||||
return;
|
||||
}
|
||||
|
||||
public static StockIpoAssembler of() {
|
||||
return SpringUtils.getBean(StockIpoAssembler.class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package cn.stock.market.domain.basic.convert;
|
||||
|
||||
import cn.qutaojing.common.domain.convert.SimpleEntityPOConvert;
|
||||
import cn.qutaojing.common.utils.SpringUtils;
|
||||
import cn.stock.market.domain.basic.entity.StockIpo;
|
||||
import cn.stock.market.infrastructure.db.po.StockIpoPO;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* StockIpoConvert
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@Component
|
||||
@Lazy
|
||||
public class StockIpoConvert extends SimpleEntityPOConvert<StockIpo, StockIpoPO> {
|
||||
public static StockIpoConvert of() {
|
||||
return SpringUtils.getBean(StockIpoConvert.class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package cn.stock.market.domain.basic.entity;
|
||||
|
||||
import cn.qutaojing.common.utils.Beans;
|
||||
import cn.stock.market.dto.command.StockIpoCreateCommand;
|
||||
import cn.stock.market.infrastructure.db.po.StockIpoPO;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* StockIpo
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@SuperBuilder
|
||||
@EqualsAndHashCode(
|
||||
callSuper = false
|
||||
)
|
||||
public class StockIpo extends StockIpoPO {
|
||||
public void update(StockIpoCreateCommand cmd) {
|
||||
Beans.copyProperties(cmd, this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package cn.stock.market.domain.basic.factory;
|
||||
|
||||
import cn.qutaojing.common.utils.SpringUtils;
|
||||
import cn.stock.market.domain.basic.entity.StockIpo;
|
||||
import cn.stock.market.dto.command.StockIpoCreateCommand;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* StockIpoFactory
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@Component
|
||||
@Lazy
|
||||
public class StockIpoFactory {
|
||||
public static StockIpoFactory of() {
|
||||
return SpringUtils.getBean(StockIpoFactory.class);
|
||||
}
|
||||
|
||||
public StockIpo from(StockIpoCreateCommand cmd) {
|
||||
StockIpo e = StockIpo.builder().build();
|
||||
e.update(cmd);
|
||||
return e;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package cn.stock.market.domain.basic.repository;
|
||||
|
||||
import cn.qutaojing.common.domain.convert.IEntityPOConvert;
|
||||
import cn.qutaojing.common.domain.respostory.SimplePoConvertEntityRepository;
|
||||
import cn.qutaojing.common.utils.SpringUtils;
|
||||
import cn.stock.market.domain.basic.convert.StockIpoConvert;
|
||||
import cn.stock.market.domain.basic.entity.StockIpo;
|
||||
import cn.stock.market.infrastructure.db.po.StockIpoPO;
|
||||
import cn.stock.market.infrastructure.db.repo.StockIpoRepo;
|
||||
import com.rp.spring.jpa.GenericJpaRepository;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Override;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* StockIpoRepository
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@Repository
|
||||
@RequiredArgsConstructor(
|
||||
onConstructor = @__(@Autowired)
|
||||
)
|
||||
public class StockIpoRepository extends SimplePoConvertEntityRepository<StockIpo, StockIpoPO, Integer> {
|
||||
final StockIpoRepo repo;
|
||||
|
||||
final StockIpoConvert convert;
|
||||
|
||||
@Override
|
||||
public GenericJpaRepository<StockIpoPO, Integer> repo() {
|
||||
return repo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEntityPOConvert<StockIpo, StockIpoPO> convert() {
|
||||
return convert;
|
||||
}
|
||||
|
||||
public static StockIpoRepository of() {
|
||||
return SpringUtils.getBean(StockIpoRepository.class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package cn.stock.market.domain.basic.service;
|
||||
|
||||
import cn.qutaojing.common.utils.SpringUtils;
|
||||
import cn.stock.market.domain.basic.factory.StockIpoFactory;
|
||||
import cn.stock.market.domain.basic.repository.StockIpoRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* StockIpoService
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor(
|
||||
onConstructor = @__(@Autowired)
|
||||
)
|
||||
public class StockIpoService {
|
||||
final StockIpoRepository repository;
|
||||
|
||||
final StockIpoFactory factory;
|
||||
|
||||
public StockIpoRepository repository() {
|
||||
return repository;
|
||||
}
|
||||
|
||||
public static StockIpoService of() {
|
||||
return SpringUtils.getBean(StockIpoService.class);
|
||||
}
|
||||
}
|
||||
23
src/main/java/cn/stock/market/dto/StockIpoDTO.java
Normal file
23
src/main/java/cn/stock/market/dto/StockIpoDTO.java
Normal file
@@ -0,0 +1,23 @@
|
||||
package cn.stock.market.dto;
|
||||
|
||||
import cn.stock.market.infrastructure.db.po.StockIpoPO;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* StockIpoDTO
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@SuperBuilder
|
||||
@EqualsAndHashCode(
|
||||
callSuper = false
|
||||
)
|
||||
public class StockIpoDTO extends StockIpoPO {
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package cn.stock.market.dto.command;
|
||||
|
||||
import java.lang.Integer;
|
||||
import java.lang.String;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* StockIpoCreateCommand
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
public class StockIpoCreateCommand {
|
||||
Integer id;
|
||||
|
||||
/**
|
||||
* 股票代码 */
|
||||
String stockCode;
|
||||
|
||||
/**
|
||||
* 股票名称 */
|
||||
String stockName;
|
||||
|
||||
/**
|
||||
* 发行价格 */
|
||||
BigDecimal stockPrice;
|
||||
|
||||
/**
|
||||
* 申购日期 */
|
||||
Date subscriptionDate;
|
||||
|
||||
/**
|
||||
* 上市日期 */
|
||||
Date listingDate;
|
||||
|
||||
/**
|
||||
* 是否显示【1 显示,2 不显示】 */
|
||||
Integer isShow;
|
||||
|
||||
/**
|
||||
* 是否上市【1 未上市,2 已上市】 */
|
||||
Integer isList;
|
||||
|
||||
Date createDate;
|
||||
|
||||
Date updateDate;
|
||||
|
||||
/**
|
||||
* 发行总数 */
|
||||
Integer totalNumber;
|
||||
|
||||
/**
|
||||
* 申请总额 */
|
||||
String apply;
|
||||
|
||||
/**
|
||||
* 市盈率 */
|
||||
BigDecimal peRatio;
|
||||
|
||||
String sourceType;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package cn.stock.market.dto.command;
|
||||
|
||||
import java.lang.Integer;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* StockIpoModifyCommand
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(
|
||||
callSuper = false
|
||||
)
|
||||
public class StockIpoModifyCommand extends StockIpoCreateCommand {
|
||||
Integer id;
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package cn.stock.market.infrastructure.db.po;
|
||||
|
||||
import java.lang.Integer;
|
||||
import java.lang.String;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import org.hibernate.annotations.DynamicInsert;
|
||||
import org.hibernate.annotations.DynamicUpdate;
|
||||
|
||||
/**
|
||||
* StockIpoPO
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Entity
|
||||
@DynamicInsert
|
||||
@DynamicUpdate
|
||||
@Table(
|
||||
name = "stock_ipo"
|
||||
)
|
||||
public class StockIpoPO {
|
||||
@Id
|
||||
@GeneratedValue(
|
||||
strategy = javax.persistence.GenerationType.IDENTITY
|
||||
)
|
||||
Integer id;
|
||||
|
||||
/**
|
||||
* 股票代码 */
|
||||
String stockCode;
|
||||
|
||||
/**
|
||||
* 股票名称 */
|
||||
String stockName;
|
||||
|
||||
/**
|
||||
* 发行价格 */
|
||||
BigDecimal stockPrice;
|
||||
|
||||
/**
|
||||
* 申购日期 */
|
||||
Date subscriptionDate;
|
||||
|
||||
/**
|
||||
* 上市日期 */
|
||||
Date listingDate;
|
||||
|
||||
/**
|
||||
* 是否显示【1 显示,2 不显示】 */
|
||||
Integer isShow;
|
||||
|
||||
/**
|
||||
* 是否上市【1 未上市,2 已上市】 */
|
||||
Integer isList;
|
||||
|
||||
Date createDate;
|
||||
|
||||
Date updateDate;
|
||||
|
||||
/**
|
||||
* 发行总数 */
|
||||
Integer totalNumber;
|
||||
|
||||
/**
|
||||
* 申请总额 */
|
||||
String apply;
|
||||
|
||||
/**
|
||||
* 市盈率 */
|
||||
BigDecimal peRatio;
|
||||
|
||||
String sourceType;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package cn.stock.market.infrastructure.db.repo;
|
||||
|
||||
import cn.stock.market.infrastructure.db.po.StockIpoPO;
|
||||
import com.rp.spring.jpa.GenericJpaRepository;
|
||||
import java.lang.Integer;
|
||||
|
||||
/**
|
||||
* StockIpoRepo
|
||||
*
|
||||
* @author rplees
|
||||
* @email rplees.i.ly@gmail.com
|
||||
* @created 2023/12/28
|
||||
*/
|
||||
public interface StockIpoRepo extends GenericJpaRepository<StockIpoPO, Integer> {
|
||||
}
|
||||
@@ -1,11 +1,24 @@
|
||||
package cn.stock.market.infrastructure.job;
|
||||
|
||||
import cn.stock.market.domain.basic.entity.BtodayStock;
|
||||
import cn.stock.market.domain.basic.entity.StockIpo;
|
||||
import cn.stock.market.domain.basic.repository.BtodayStockRepository;
|
||||
import cn.stock.market.domain.basic.repository.StockIpoRepository;
|
||||
import cn.stock.market.dto.StockIpoDTO;
|
||||
import cn.stock.market.infrastructure.db.po.QStockIpoPO;
|
||||
import cn.stock.market.infrastructure.db.po.StockIpoPO;
|
||||
import cn.stock.market.infrastructure.db.repo.BtodayStockRepo;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpRequest;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.jsoup.Jsoup;
|
||||
import org.jsoup.nodes.Document;
|
||||
import org.jsoup.nodes.Element;
|
||||
@@ -17,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
@@ -33,6 +47,8 @@ public class Scraper {
|
||||
|
||||
@Autowired
|
||||
private BtodayStockRepository btodayStockRepo;
|
||||
@Autowired
|
||||
private StockIpoRepository stockIpoRepository;
|
||||
|
||||
private final ExecutorService executorService = Executors.newFixedThreadPool(5);
|
||||
|
||||
@@ -80,6 +96,124 @@ public class Scraper {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Scheduled(cron = "0 0 5 * * ?")
|
||||
@RequestMapping("/testScraperGetMoneyControllerNewIPO")
|
||||
public void schedule2() {
|
||||
// 目标 URL
|
||||
String url = "https://www.moneycontrol.com/ipo/open-upcoming-ipos";
|
||||
// 创建 HttpClient 实例
|
||||
HttpClient client = HttpClients.createDefault();
|
||||
// 创建 HttpGet 请求
|
||||
HttpGet request = new HttpGet(url);
|
||||
try {
|
||||
// 执行请求
|
||||
HttpResponse response = client.execute(request);
|
||||
|
||||
// 检查请求是否成功
|
||||
if (response.getStatusLine().getStatusCode() == 200) {
|
||||
// 获取响应体
|
||||
String responseBody = EntityUtils.toString(response.getEntity());
|
||||
|
||||
// 使用 Jsoup 解析 HTML
|
||||
Document doc = Jsoup.parse(responseBody);
|
||||
|
||||
// 找到包含 JSON 数据的 <script> 标签
|
||||
Element scriptTag = doc.selectFirst("script#__NEXT_DATA__");
|
||||
|
||||
if (scriptTag != null) {
|
||||
// 获取 JSON 数据
|
||||
String jsonDataStr = scriptTag.html();
|
||||
|
||||
// 将 JSON 字符串解析为 Java JSONObject
|
||||
JSONObject jsonObject = JSONObject.parseObject(jsonDataStr);
|
||||
log.info(jsonObject.toJSONString());
|
||||
|
||||
JSONObject pageProps = jsonObject.getJSONObject("props").getJSONObject("pageProps");
|
||||
JSONObject ipoTableData = pageProps.getJSONObject("ipoTableData");
|
||||
|
||||
// 解析 openData 和 upcomingData
|
||||
JSONArray openData = ipoTableData.getJSONArray("openData");
|
||||
JSONArray upcomingData = ipoTableData.getJSONArray("upcomingData");
|
||||
List<StockIpo> listStockIpoList = new ArrayList<>();
|
||||
for (int i = 0; i < openData.size(); i++) {
|
||||
JSONObject entry = openData.getJSONObject(i);
|
||||
StockIpo stockIpo = new StockIpo();
|
||||
stockIpo.setStockCode(entry.getString("sc_id"));
|
||||
stockIpo.setStockName(entry.getString("company_name"));
|
||||
stockIpo.setStockPrice(entry.getBigDecimal("issue_price"));
|
||||
stockIpo.setSubscriptionDate(convertStringToTimestamp(entry.getString("open_date")));
|
||||
stockIpo.setListingDate(convertStringToTimestamp(entry.getString("listing_date")));
|
||||
stockIpo.setTotalNumber(entry.getInteger("lot_size"));
|
||||
stockIpo.setApply(entry.getString("total_subs"));
|
||||
stockIpo.setCreateDate(new Date());
|
||||
stockIpo.setUpdateDate(new Date());
|
||||
stockIpo.setSourceType("3");
|
||||
listStockIpoList.add(stockIpo);
|
||||
}
|
||||
|
||||
for (int i = 0; i < upcomingData.size(); i++) {
|
||||
JSONObject entry = upcomingData.getJSONObject(i);
|
||||
StockIpo stockIpo = new StockIpo();
|
||||
stockIpo.setStockCode(entry.getString("sc_id"));
|
||||
stockIpo.setStockName(entry.getString("company_name"));
|
||||
stockIpo.setStockPrice(entry.getBigDecimal("issue_price"));
|
||||
stockIpo.setSubscriptionDate(convertStringToTimestamp(entry.getString("open_date")));
|
||||
stockIpo.setListingDate(convertStringToTimestamp(entry.getString("listing_date")));
|
||||
stockIpo.setTotalNumber(entry.getInteger("lot_size"));
|
||||
stockIpo.setApply(entry.getString("total_subs"));
|
||||
stockIpo.setCreateDate(new Date());
|
||||
stockIpo.setUpdateDate(new Date());
|
||||
stockIpo.setSourceType("3");
|
||||
listStockIpoList.add(stockIpo);
|
||||
}
|
||||
|
||||
// stockIpoRepository.saveAll(listStockIpoList);
|
||||
|
||||
List<String> nameList = Lists.transform(listStockIpoList, StockIpo::getStockName);
|
||||
List<StockIpo> existStockIpoList = stockIpoRepository.findAll(QStockIpoPO.stockIpoPO.stockName.in(nameList));
|
||||
List<String> existingStockNames = existStockIpoList.stream()
|
||||
.map(StockIpo::getStockName)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
listStockIpoList = listStockIpoList.stream()
|
||||
.filter(stockIpos -> !existingStockNames.contains(stockIpos.getStockName()))
|
||||
.collect(Collectors.toList());
|
||||
//保存全部的新股
|
||||
stockIpoRepository.saveAll(listStockIpoList);
|
||||
|
||||
// 输出整个 JSON 数据
|
||||
} else {
|
||||
log.info("未找到包含 JSON 数据的 <script> 标签");
|
||||
}
|
||||
} else {
|
||||
log.info("HTTP请求失败,状态码:" + response.getStatusLine().getStatusCode());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.error("获取新股接口发生异常",e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static Timestamp convertStringToTimestamp(String dateString) {
|
||||
// 实现将字符串转换为 Timestamp 的逻辑
|
||||
// 这里假设 dateString 是合法的日期时间字符串
|
||||
if(StringUtils.isNotBlank(dateString)){
|
||||
return Timestamp.valueOf(dateString + " 00:00:00");
|
||||
}else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private void processSubMap(Map<String, String> sefUrlList) {
|
||||
for (Map.Entry<String, String> entry : sefUrlList.entrySet()) {
|
||||
String companyName = entry.getKey();
|
||||
|
||||
@@ -50,7 +50,7 @@ public class JpaDDDGen {
|
||||
/**
|
||||
* cs_statistic - 要生成的数据库表
|
||||
*/
|
||||
Cons.tableNameToEntiyMapping.put("btoday_stock", null);
|
||||
Cons.tableNameToEntiyMapping.put("stock_ipo", null);
|
||||
|
||||
ToolDDD.g(getMySQLDataSource().getConnection());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user