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