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 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<>();