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