From 66eccce4cb47dbcb51358f6a81ed4a406b1b355a Mon Sep 17 00:00:00 2001
From: VoGiaHuy2058 <39868777+vogiahuy2058@users.noreply.github.com>
Date: Tue, 17 Jun 2025 17:33:18 +0700
Subject: [PATCH 1/3] apply new daily stock
---
pom.xml | 6 ++
.../infrastructure/db/po/QMoneyStockPO.java | 6 ++
.../infrastructure/db/po/QStockIpoPO.java | 3 +-
.../cn/stock/market/StockMarketLaunch.java | 34 +++---
.../cn/stock/market/dto/model/Symbol.java | 27 +++++
.../infrastructure/job/StockNewTask.java | 102 ++++++++++++++++++
src/main/resources/application-base-alpha.yml | 4 +-
7 files changed, 162 insertions(+), 20 deletions(-)
create mode 100644 src/main/java/cn/stock/market/dto/model/Symbol.java
create mode 100644 src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java
diff --git a/pom.xml b/pom.xml
index bd70d8f..341677e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,6 +89,12 @@
4.1.0
+
+ org.json
+ json
+ 20240303
+
+
io.springfox
springfox-swagger2
diff --git a/src/main/generated/cn/stock/market/infrastructure/db/po/QMoneyStockPO.java b/src/main/generated/cn/stock/market/infrastructure/db/po/QMoneyStockPO.java
index b719747..7e6ffb0 100644
--- a/src/main/generated/cn/stock/market/infrastructure/db/po/QMoneyStockPO.java
+++ b/src/main/generated/cn/stock/market/infrastructure/db/po/QMoneyStockPO.java
@@ -29,6 +29,10 @@ public class QMoneyStockPO extends EntityPathBase {
public final StringPath moneyScId = createString("moneyScId");
+ public final StringPath nseIndiaChartId = createString("nseIndiaChartId");
+
+ public final StringPath nseIndiaId = createString("nseIndiaId");
+
public final DateTimePath saveTime = createDateTime("saveTime", java.util.Date.class);
public final StringPath selfDispId = createString("selfDispId");
@@ -39,6 +43,8 @@ public class QMoneyStockPO extends EntityPathBase {
public final StringPath stockType = createString("stockType");
+ public final BooleanPath useFromBseindia = createBoolean("useFromBseindia");
+
public QMoneyStockPO(String variable) {
super(MoneyStockPO.class, forVariable(variable));
}
diff --git a/src/main/generated/cn/stock/market/infrastructure/db/po/QStockIpoPO.java b/src/main/generated/cn/stock/market/infrastructure/db/po/QStockIpoPO.java
index 657c8d4..3a39af1 100644
--- a/src/main/generated/cn/stock/market/infrastructure/db/po/QStockIpoPO.java
+++ b/src/main/generated/cn/stock/market/infrastructure/db/po/QStockIpoPO.java
@@ -23,6 +23,8 @@ public class QStockIpoPO extends EntityPathBase {
public final DateTimePath createDate = createDateTime("createDate", java.util.Date.class);
+ public final StringPath exchangeType = createString("exchangeType");
+
public final NumberPath id = createNumber("id", Integer.class);
public final NumberPath isList = createNumber("isList", Integer.class);
@@ -38,7 +40,6 @@ public class QStockIpoPO extends EntityPathBase {
public final StringPath stockCode = createString("stockCode");
public final StringPath stockName = createString("stockName");
- public final StringPath exchangeType = createString("exchangeType");
public final NumberPath stockPrice = createNumber("stockPrice", java.math.BigDecimal.class);
diff --git a/src/main/java/cn/stock/market/StockMarketLaunch.java b/src/main/java/cn/stock/market/StockMarketLaunch.java
index 446cab2..803f7f8 100644
--- a/src/main/java/cn/stock/market/StockMarketLaunch.java
+++ b/src/main/java/cn/stock/market/StockMarketLaunch.java
@@ -41,23 +41,23 @@ public class StockMarketLaunch implements CommandLineRunner {
MDC.put(MdcUtil.TRACE_ID, MdcUtil.getTraceId());
log.info("StockMarketLaunch RUNNING....");
- String marketDomain = env.getProperty("market.domain");
- if(StringUtils.isNotBlank(marketDomain)) {
- log.info("发现marketDomain: {}", marketDomain);
- SiteSetting siteSetting = SiteSettingRepository.of().get();
- if(siteSetting == null) {
- log.info("找不到siteSetting信息, 无法设置");
- } else {
- log.info("设置前: {}", JSON.toJSONString(siteSetting));
- boolean flag = siteSetting.checkAndAddIfNoExists(marketDomain);
- if(! flag) {
- SiteSettingRepository.of().saveAndFlush(siteSetting);
- log.info("已经设置: {}....", JSON.toJSONString(siteSetting));
- } else {
- log.info("包含, 跳过....");
- }
- }
- }
+// String marketDomain = env.getProperty("market.domain");
+// if(StringUtils.isNotBlank(marketDomain)) {
+// log.info("发现marketDomain: {}", marketDomain);
+// SiteSetting siteSetting = SiteSettingRepository.of().get();
+// if(siteSetting == null) {
+// log.info("找不到siteSetting信息, 无法设置");
+// } else {
+// log.info("设置前: {}", JSON.toJSONString(siteSetting));
+// boolean flag = siteSetting.checkAndAddIfNoExists(marketDomain);
+// if(! flag) {
+// SiteSettingRepository.of().saveAndFlush(siteSetting);
+// log.info("已经设置: {}....", JSON.toJSONString(siteSetting));
+// } else {
+// log.info("包含, 跳过....");
+// }
+// }
+// }
}
// @Bean
diff --git a/src/main/java/cn/stock/market/dto/model/Symbol.java b/src/main/java/cn/stock/market/dto/model/Symbol.java
new file mode 100644
index 0000000..44436b0
--- /dev/null
+++ b/src/main/java/cn/stock/market/dto/model/Symbol.java
@@ -0,0 +1,27 @@
+package cn.stock.market.dto.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Symbol {
+ private String symbol;
+ private String description;
+ private String type;
+ private String exchange;
+ private String currencyCode;
+ private String currencyLogoid;
+ private String logoid;
+ private String providerId;
+ private String sourceLogoid;
+ private String sourceId;
+ private String country;
+ private boolean isPrimaryListing;
+ private List typespecs;
+
+ // Getters and setters
+ // Bạn có thể dùng Lombok nếu muốn ngắn gọn hơn
+ // Hoặc generate getter/setter trong IDE
+
+}
diff --git a/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java b/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java
new file mode 100644
index 0000000..7e3a9e9
--- /dev/null
+++ b/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java
@@ -0,0 +1,102 @@
+package cn.stock.market.infrastructure.job;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.*;
+
+import cn.stock.market.domain.basic.entity.Stock;
+import cn.stock.market.dto.model.Symbol;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import org.json.*;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+@Component
+public class StockNewTask {
+
+ private static final OkHttpClient client = new OkHttpClient();
+ private static final String BASE_URL = "https://symbol-search.tradingview.com/symbol_search/v3/";
+ private static final String PARAMS = "?start=%d&hl=1&country=DE&lang=en&search_type=stocks&domain=production&sort_by_country=US&promo=true&exchange=XETR";
+
+ @PostConstruct
+ public void test() throws Exception {
+ List allSymbols = new ArrayList<>();
+ int start = 0;
+ int symbolsRemaining;
+
+ do {
+ int finalStart = start;
+ if(start > 0){
+ finalStart = start + 1;
+ }
+
+ String url = BASE_URL + String.format(PARAMS, finalStart);
+ Request request = new Request.Builder()
+ .url(url)
+ .addHeader("Origin", "https://www.tradingview.com")
+ .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
+ .addHeader("Accept", "application/json, text/plain, */*")
+ .addHeader("Referer", "https://www.tradingview.com/")
+ .build();
+
+ Response response = client.newCall(request).execute();
+
+ if (!response.isSuccessful()) {
+ throw new RuntimeException("Unexpected response code: " + response.code());
+ }
+
+ String responseBody = response.body().string();
+ JSONObject json = new JSONObject(responseBody);
+ JSONArray symbols = json.getJSONArray("symbols");
+ symbolsRemaining = json.getInt("symbols_remaining");
+
+ for (int i = 0; i < symbols.length(); i++) {
+ JSONObject s = symbols.getJSONObject(i);
+ Symbol symbol = new Symbol();
+
+ symbol.setSymbol(s.optString("symbol"));
+ symbol.setDescription(s.optString("description"));
+ symbol.setType(s.optString("type"));
+ symbol.setExchange(s.optString("exchange"));
+ symbol.setCurrencyCode(s.optString("currency_code"));
+ symbol.setCurrencyLogoid(s.optString("currency-logoid"));
+ symbol.setLogoid(s.optString("logoid"));
+ symbol.setProviderId(s.optString("provider_id"));
+ symbol.setSourceLogoid(s.optString("source_logoid"));
+ symbol.setSourceId(s.optString("source_id"));
+ symbol.setCountry(s.optString("country"));
+ symbol.setPrimaryListing(s.optBoolean("is_primary_listing", false));
+Stock stock = new Stock();
+ // typespecs array
+ JSONArray typespecsArr = s.optJSONArray("typespecs");
+ List typespecsList = new ArrayList<>();
+ if (typespecsArr != null) {
+ for (int j = 0; j < typespecsArr.length(); j++) {
+ typespecsList.add(typespecsArr.getString(j));
+ }
+ }
+ symbol.setTypespecs(typespecsList);
+
+ allSymbols.add(symbol);
+ }
+
+ Thread.sleep(1000);
+
+ start += symbols.length();
+ System.out.println("Fetched: " + symbols.length() + ", Remaining: " + symbolsRemaining);
+
+ } while (symbolsRemaining > 0);
+
+ // Output test
+ for (int i = 0; i < Math.min(5, allSymbols.size()); i++) {
+ Symbol s = allSymbols.get(i);
+ System.out.println(s.getSymbol() + " - " + s.getDescription());
+ }
+ // Lúc này bạn có thể insert vào DB hoặc return từ service
+ }
+}
diff --git a/src/main/resources/application-base-alpha.yml b/src/main/resources/application-base-alpha.yml
index 9b896bb..62e2472 100644
--- a/src/main/resources/application-base-alpha.yml
+++ b/src/main/resources/application-base-alpha.yml
@@ -3,7 +3,7 @@ spring:
show-sql: true
# Redis配置
redis:
- host: 43.153.174.179
+ host: 43.153.142.41
password: a5v8b86P4mVzFlUqJV
port: 30001
database: 1
@@ -17,7 +17,7 @@ spring:
datasource:
stock-market:
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://43.153.174.179:30000/india_stock?useUnicode=true&characterEncoding=utf-8
+ url: jdbc:mysql://43.153.142.41:30000/india_stock?useUnicode=true&characterEncoding=utf-8
username: root
password: uNejHIFQGJOUtYTmE
maxActive: 500
From 476645109d1d36e30d3d48d8fc79b004f5c8d2d9 Mon Sep 17 00:00:00 2001
From: VoGiaHuy2058 <39868777+vogiahuy2058@users.noreply.github.com>
Date: Wed, 18 Jun 2025 07:52:49 +0700
Subject: [PATCH 2/3] done for stockTemp repository
---
.../infrastructure/db/po/QStockTempPO.java | 43 +++++++++++++
.../basic/convert/StockTempConvert.java | 25 ++++++++
.../market/domain/basic/entity/StockTemp.java | 26 ++++++++
.../basic/repository/StockTempRepository.java | 63 +++++++++++++++++++
.../infrastructure/db/po/StockTempPO.java | 39 ++++++++++++
.../infrastructure/db/repo/StockTempRepo.java | 15 +++++
.../infrastructure/job/StockNewTask.java | 26 +++++++-
7 files changed, 234 insertions(+), 3 deletions(-)
create mode 100644 src/main/generated/cn/stock/market/infrastructure/db/po/QStockTempPO.java
create mode 100644 src/main/java/cn/stock/market/domain/basic/convert/StockTempConvert.java
create mode 100644 src/main/java/cn/stock/market/domain/basic/entity/StockTemp.java
create mode 100644 src/main/java/cn/stock/market/domain/basic/repository/StockTempRepository.java
create mode 100644 src/main/java/cn/stock/market/infrastructure/db/po/StockTempPO.java
create mode 100644 src/main/java/cn/stock/market/infrastructure/db/repo/StockTempRepo.java
diff --git a/src/main/generated/cn/stock/market/infrastructure/db/po/QStockTempPO.java b/src/main/generated/cn/stock/market/infrastructure/db/po/QStockTempPO.java
new file mode 100644
index 0000000..c4dd448
--- /dev/null
+++ b/src/main/generated/cn/stock/market/infrastructure/db/po/QStockTempPO.java
@@ -0,0 +1,43 @@
+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;
+
+
+/**
+ * QStockTempPO is a Querydsl query type for StockTempPO
+ */
+@Generated("com.querydsl.codegen.EntitySerializer")
+public class QStockTempPO extends EntityPathBase {
+
+ private static final long serialVersionUID = 1973569078L;
+
+ public static final QStockTempPO stockTempPO = new QStockTempPO("stockTempPO");
+
+ public final NumberPath id = createNumber("id", Integer.class);
+
+ public final StringPath stockGid = createString("stockGid");
+
+ public final StringPath stockLogo = createString("stockLogo");
+
+ public final StringPath stockType = createString("stockType");
+
+ public QStockTempPO(String variable) {
+ super(StockTempPO.class, forVariable(variable));
+ }
+
+ public QStockTempPO(Path extends StockTempPO> path) {
+ super(path.getType(), path.getMetadata());
+ }
+
+ public QStockTempPO(PathMetadata metadata) {
+ super(StockTempPO.class, metadata);
+ }
+
+}
+
diff --git a/src/main/java/cn/stock/market/domain/basic/convert/StockTempConvert.java b/src/main/java/cn/stock/market/domain/basic/convert/StockTempConvert.java
new file mode 100644
index 0000000..8874d4a
--- /dev/null
+++ b/src/main/java/cn/stock/market/domain/basic/convert/StockTempConvert.java
@@ -0,0 +1,25 @@
+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.Stock;
+import cn.stock.market.domain.basic.entity.StockTemp;
+import cn.stock.market.infrastructure.db.po.StockPO;
+import cn.stock.market.infrastructure.db.po.StockTempPO;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+/**
+ * StockConvert
+ *
+ * @author rplees
+ * @email rplees.i.ly@gmail.com
+ * @created 2023/06/17
+ */
+@Component
+@Lazy
+public class StockTempConvert extends SimpleEntityPOConvert {
+ public static StockTempConvert of() {
+ return SpringUtils.getBean(StockTempConvert.class);
+ }
+}
diff --git a/src/main/java/cn/stock/market/domain/basic/entity/StockTemp.java b/src/main/java/cn/stock/market/domain/basic/entity/StockTemp.java
new file mode 100644
index 0000000..e81ad33
--- /dev/null
+++ b/src/main/java/cn/stock/market/domain/basic/entity/StockTemp.java
@@ -0,0 +1,26 @@
+package cn.stock.market.domain.basic.entity;
+
+import cn.qutaojing.common.utils.Beans;
+import cn.stock.market.dto.command.StockCreateCommand;
+import cn.stock.market.infrastructure.db.po.StockPO;
+import cn.stock.market.infrastructure.db.po.StockTempPO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * Stock
+ *
+ * @author rplees
+ * @email rplees.i.ly@gmail.com
+ * @created 2023/06/17
+ */
+@Data
+@NoArgsConstructor
+@SuperBuilder
+@EqualsAndHashCode(
+ callSuper = false
+)
+public class StockTemp extends StockTempPO {
+}
diff --git a/src/main/java/cn/stock/market/domain/basic/repository/StockTempRepository.java b/src/main/java/cn/stock/market/domain/basic/repository/StockTempRepository.java
new file mode 100644
index 0000000..1742f51
--- /dev/null
+++ b/src/main/java/cn/stock/market/domain/basic/repository/StockTempRepository.java
@@ -0,0 +1,63 @@
+package cn.stock.market.domain.basic.repository;
+
+import cn.qutaojing.common.domain.convert.IEntityPOConvert;
+import cn.qutaojing.common.domain.respostory.LocalCacheBean;
+import cn.qutaojing.common.domain.respostory.LocalCacheRepository;
+import cn.qutaojing.common.jpa.ConditionBuilder;
+import cn.qutaojing.common.utils.SpringUtils;
+import cn.stock.market.domain.basic.convert.StockConvert;
+import cn.stock.market.domain.basic.convert.StockTempConvert;
+import cn.stock.market.domain.basic.entity.Stock;
+import cn.stock.market.domain.basic.entity.StockTemp;
+import cn.stock.market.infrastructure.db.po.QStockPO;
+import cn.stock.market.infrastructure.db.po.QStockTempPO;
+import cn.stock.market.infrastructure.db.po.StockPO;
+import cn.stock.market.infrastructure.db.po.StockTempPO;
+import cn.stock.market.infrastructure.db.repo.StockRepo;
+import cn.stock.market.infrastructure.db.repo.StockTempRepo;
+import com.google.common.cache.CacheBuilder;
+import com.rp.spring.jpa.GenericJpaRepository;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * StockRepository
+ *
+ * @author rplees
+ * @email rplees.i.ly@gmail.com
+ * @created 2023/06/17
+ */
+@Repository
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class StockTempRepository extends LocalCacheRepository {
+ final StockTempRepo repo;
+ final StockTempConvert convert;
+ final static QStockTempPO q = QStockTempPO.stockTempPO;
+
+ public List findAllForCheck() {
+ return findAll();
+ }
+
+ @Override
+ public GenericJpaRepository repo() {
+ return repo;
+ }
+
+ @Override
+ public IEntityPOConvert convert() {
+ return convert;
+ }
+
+ public static StockTempRepository of() {
+ return SpringUtils.getBean(StockTempRepository.class);
+ }
+}
diff --git a/src/main/java/cn/stock/market/infrastructure/db/po/StockTempPO.java b/src/main/java/cn/stock/market/infrastructure/db/po/StockTempPO.java
new file mode 100644
index 0000000..6801bc8
--- /dev/null
+++ b/src/main/java/cn/stock/market/infrastructure/db/po/StockTempPO.java
@@ -0,0 +1,39 @@
+package cn.stock.market.infrastructure.db.po;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * StockPO
+ *
+ * @author rplees
+ * @email rplees.i.ly@gmail.com
+ * @created 2023/06/17
+ */
+@SuperBuilder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@DynamicInsert
+@DynamicUpdate
+@Table(name = "stockTemp")
+public class StockTempPO {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ Integer id;
+
+ String stockType;
+
+ String stockGid;
+
+ String stockLogo;
+}
diff --git a/src/main/java/cn/stock/market/infrastructure/db/repo/StockTempRepo.java b/src/main/java/cn/stock/market/infrastructure/db/repo/StockTempRepo.java
new file mode 100644
index 0000000..6ef0ad4
--- /dev/null
+++ b/src/main/java/cn/stock/market/infrastructure/db/repo/StockTempRepo.java
@@ -0,0 +1,15 @@
+package cn.stock.market.infrastructure.db.repo;
+
+import cn.stock.market.infrastructure.db.po.StockPO;
+import cn.stock.market.infrastructure.db.po.StockTempPO;
+import com.rp.spring.jpa.GenericJpaRepository;
+
+/**
+ * StockRepo
+ *
+ * @author rplees
+ * @email rplees.i.ly@gmail.com
+ * @created 2023/06/17
+ */
+public interface StockTempRepo extends GenericJpaRepository {
+}
diff --git a/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java b/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java
index 7e3a9e9..b724325 100644
--- a/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java
+++ b/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java
@@ -5,8 +5,12 @@ import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
+import java.util.stream.Collectors;
import cn.stock.market.domain.basic.entity.Stock;
+import cn.stock.market.domain.basic.entity.StockTemp;
+import cn.stock.market.domain.basic.repository.StockRepository;
+import cn.stock.market.domain.basic.repository.StockTempRepository;
import cn.stock.market.dto.model.Symbol;
import okhttp3.OkHttpClient;
import okhttp3.Request;
@@ -18,12 +22,16 @@ import javax.annotation.PostConstruct;
@Component
public class StockNewTask {
-
+ final StockTempRepository repository;
private static final OkHttpClient client = new OkHttpClient();
private static final String BASE_URL = "https://symbol-search.tradingview.com/symbol_search/v3/";
private static final String PARAMS = "?start=%d&hl=1&country=DE&lang=en&search_type=stocks&domain=production&sort_by_country=US&promo=true&exchange=XETR";
- @PostConstruct
+ public StockNewTask(StockTempRepository repository) {
+ this.repository = repository;
+ }
+
+ @PostConstruct
public void test() throws Exception {
List allSymbols = new ArrayList<>();
int start = 0;
@@ -71,7 +79,6 @@ public class StockNewTask {
symbol.setSourceId(s.optString("source_id"));
symbol.setCountry(s.optString("country"));
symbol.setPrimaryListing(s.optBoolean("is_primary_listing", false));
-Stock stock = new Stock();
// typespecs array
JSONArray typespecsArr = s.optJSONArray("typespecs");
List typespecsList = new ArrayList<>();
@@ -98,5 +105,18 @@ Stock stock = new Stock();
System.out.println(s.getSymbol() + " - " + s.getDescription());
}
// Lúc này bạn có thể insert vào DB hoặc return từ service
+
+ allSymbols = allSymbols.stream().filter(x -> x.getType().equals("stock")).collect(Collectors.toList());
+
+ List stockTemps = repository.findAllForCheck();
+
+ if(stockTemps != null && !stockTemps.isEmpty()){
+ for (Symbol symbol : allSymbols) {
+ if((symbol.getSymbol() + ":" + symbol.getExchange()).contains())
+ }
+ }
+ else{
+ repository.of().saveAll(stockTemps);
+ }
}
}
From cd06493b9cf4a06b8db5be05549cf81a5b0c2613 Mon Sep 17 00:00:00 2001
From: VoGiaHuy2058 <39868777+vogiahuy2058@users.noreply.github.com>
Date: Wed, 18 Jun 2025 10:37:12 +0700
Subject: [PATCH 3/3] done requuiement
---
src/main/java/cn/stock/market/dto/model/Symbol.java | 1 +
.../java/cn/stock/market/infrastructure/job/StockNewTask.java | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/main/java/cn/stock/market/dto/model/Symbol.java b/src/main/java/cn/stock/market/dto/model/Symbol.java
index 44436b0..16990c4 100644
--- a/src/main/java/cn/stock/market/dto/model/Symbol.java
+++ b/src/main/java/cn/stock/market/dto/model/Symbol.java
@@ -8,6 +8,7 @@ import java.util.List;
public class Symbol {
private String symbol;
private String description;
+ private String stockGid;
private String type;
private String exchange;
private String currencyCode;
diff --git a/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java b/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java
index b724325..cbdd572 100644
--- a/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java
+++ b/src/main/java/cn/stock/market/infrastructure/job/StockNewTask.java
@@ -75,10 +75,11 @@ public class StockNewTask {
symbol.setCurrencyLogoid(s.optString("currency-logoid"));
symbol.setLogoid(s.optString("logoid"));
symbol.setProviderId(s.optString("provider_id"));
- symbol.setSourceLogoid(s.optString("source_logoid"));
+ symbol.setSourceLogoid("https://s3-symbol-logo.tradingview.com/" + s.optString("source_logoid") + "--big.svg");
symbol.setSourceId(s.optString("source_id"));
symbol.setCountry(s.optString("country"));
symbol.setPrimaryListing(s.optBoolean("is_primary_listing", false));
+ symbol.setStockGid(symbol.getExchange() + ":" + symbol.getSymbol());
// typespecs array
JSONArray typespecsArr = s.optJSONArray("typespecs");
List typespecsList = new ArrayList<>();