Compare commits
6 Commits
main
...
feature/up
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88bfdfa7fa | ||
|
|
51bcd72051 | ||
|
|
769b35046e | ||
|
|
368f4f2f9f | ||
|
|
4053683339 | ||
|
|
9fd87aaf89 |
@@ -15,6 +15,7 @@ build:
|
||||
only:
|
||||
- main
|
||||
- develop
|
||||
- develop_red
|
||||
before_script:
|
||||
- echo '<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
@@ -52,6 +53,7 @@ dockerize:
|
||||
only:
|
||||
- main
|
||||
- develop
|
||||
- develop_red
|
||||
script:
|
||||
- echo ">>>>>>Start Building Docker Image<<<<<<"
|
||||
- pwd
|
||||
@@ -72,17 +74,15 @@ dockerize:
|
||||
deploy-dev:
|
||||
stage: deploy
|
||||
only:
|
||||
- develop
|
||||
- develop_red
|
||||
script:
|
||||
- echo "Deploying application..."
|
||||
- ls
|
||||
- apk update
|
||||
- apk add curl
|
||||
- apk add curl openssh sshpass
|
||||
- |
|
||||
curl -X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"namespace":"dgdev", "deployment_name":"germany-stock-market"}' \
|
||||
https://updater-dgdev.moneytj.com/restart-deployment
|
||||
sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no ubuntu@"$SSH_HOST" "./deploy_service.sh market $CI_PIPELINE_ID"
|
||||
- echo "Application successfully deployed."
|
||||
|
||||
|
||||
|
||||
@@ -31,6 +31,9 @@ public class StockNewTask {
|
||||
private static final String BASE_URL = "https://symbol-search.tradingview.com/symbol_search/v3/";
|
||||
private static final String PARAMS = "?start={start}&hl=1&country=DE&lang=en&search_type=stocks&domain=production&sort_by_country=US&promo=true&exchange={exchange}";
|
||||
|
||||
private static final String US_URL =
|
||||
"https://financialmodelingprep.com/api/v3/stock-screener";
|
||||
private static final String US_API_KEY = "57ZI1xeAsqHY7ag0FBuMkwQzt6TQ60dG";
|
||||
@Autowired
|
||||
StockRepository stockRepository;
|
||||
|
||||
@@ -113,4 +116,71 @@ public class StockNewTask {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Scheduled(cron = "0 0 8 * * *")
|
||||
// @PostConstruct
|
||||
public void fetchListStock() {
|
||||
try {
|
||||
List<Stock> nasdaqStocks = fetchStocksByExchange("NASDAQ");
|
||||
List<Stock> nyseStocks = fetchStocksByExchange("NYSE");
|
||||
|
||||
List<Stock> allActiveStocks = new ArrayList<>();
|
||||
allActiveStocks.addAll(nasdaqStocks);
|
||||
allActiveStocks.addAll(nyseStocks);
|
||||
|
||||
try {
|
||||
if (!allActiveStocks.isEmpty()) {
|
||||
stockRepository.saveAll(allActiveStocks);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Insert stock failed: {}", e.getMessage());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Error fetchListStock every day: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private static List<Stock> fetchStocksByExchange(String exchange) throws Exception {
|
||||
List<Stock> result = new ArrayList<>();
|
||||
|
||||
String url = US_URL + "?exchange=" + exchange + "&apikey=" + US_API_KEY;
|
||||
|
||||
Request request = new Request.Builder()
|
||||
.url(url)
|
||||
.addHeader("accept", "application/json")
|
||||
.addHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)")
|
||||
.build();
|
||||
|
||||
Response response = client.newCall(request).execute();
|
||||
|
||||
if (!response.isSuccessful()) {
|
||||
throw new RuntimeException("HTTP error code: " + response.code());
|
||||
}
|
||||
|
||||
String body = response.body().string();
|
||||
JSONArray array = new JSONArray(body);
|
||||
|
||||
for (int i = 0; i < array.length(); i++) {
|
||||
JSONObject obj = array.getJSONObject(i);
|
||||
if (!obj.optBoolean("isActivelyTrading", false) && obj.optBoolean("isEtf", false)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Stock stock = new Stock();
|
||||
|
||||
String stockCodeNew = obj.getString("symbol") + ":" + obj.getString("exchangeShortName");
|
||||
|
||||
stock.setStockName(obj.getString("companyName"));
|
||||
stock.setStockCode(stockCodeNew);
|
||||
stock.setStockSpell(obj.getString("symbol"));
|
||||
stock.setStockType(obj.getString("exchangeShortName"));
|
||||
stock.setStockGid(stockCodeNew);
|
||||
stock.setStockSymbol(obj.getString("symbol"));
|
||||
|
||||
result.add(stock);
|
||||
}
|
||||
|
||||
System.out.println("Fetched " + result.size() + " stocks for exchange: " + exchange);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package cn.stock.market.web;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.qutaojing.common.jpa.ConditionBuilder;
|
||||
import cn.stock.market.MoneyStockSuggestDTO;
|
||||
import cn.stock.market.domain.basic.entity.MoneyStock;
|
||||
import cn.stock.market.domain.basic.entity.OptionalStock;
|
||||
@@ -614,10 +615,22 @@ public class MoneyApiController {
|
||||
@ResponseBody
|
||||
@EncryptFilter(decryptRequest = false)
|
||||
|
||||
public List<StockQuoteData> getTopActive(@RequestParam String stockType) {
|
||||
List<String> topActiveCode = Arrays.asList("SAP","LIN","SIE","DTE","RHM","MUV2","SHL","DB1","MRK",
|
||||
"BMW", "VOW3", "DHL","ENI","BAS","HEI","ADS","CBK","TLX", "BAYN", "RWE");
|
||||
List<Stock> stocks = stockRepository.findAll(QStockPO.stockPO.stockCode.in(topActiveCode));
|
||||
public List<StockQuoteData> getTopActive(@RequestParam(value = "stockType", required = false) String stockType, @RequestParam(value = "type", required = false) String type) {
|
||||
List<String> topActiveCode = Arrays.asList("AAPL:NASDAQ","MSFT:NASDAQ","GOOGL:NASDAQ","AMZN:NASDAQ","META:NASDAQ","TSLA:NASDAQ","NVDA:NASDAQ","BRK.B:NYSE","JPM:NYSE",
|
||||
"UNH:NYSE", "V:NYSE", "MA:NYSE","JNJ:NYSE","XOM:NYSE","PG:NYSE","HD:NYSE","LLY:NYSE","KO:NYSE", "PEP:NASDAQ", "NFLX:NASDAQ",
|
||||
"SAP:XETR", "SIE:XETR", "DTE:XETR", "ALV:XETR", "BAS:XETR", "BMW:XETR", "VOW3:XETR", "ADS:XETR", "BAYN:XETR", "RWE:XETR",
|
||||
"DBK:XETR", "MUV2:XETR", "FME:XETR", "FRE:XETR", "HEI:XETR", "HEN3:XETR", "LIN:XETR", "IFX:XETR", "CON:XETR", "ZAL:XETR");
|
||||
QStockPO q = QStockPO.stockPO;
|
||||
ConditionBuilder builder = ConditionBuilder.builder();
|
||||
builder.and(q.stockCode.in(topActiveCode));
|
||||
if(type != null && !type.trim().isEmpty()) {
|
||||
if (type.equals("us")) {
|
||||
builder.and(q.stockType.in("NASDAQ", "NYSE"));
|
||||
} else if (type.equals("dg")) {
|
||||
builder.and(q.stockType.in("XETR"));
|
||||
}
|
||||
}
|
||||
List<Stock> stocks = stockRepository.findAll(builder.build());
|
||||
List<StockQuoteData> stockQuoteDatas = moneyApiService.getStocksQuote(stocks);
|
||||
for (StockQuoteData stockQuoteData : stockQuoteDatas) {
|
||||
Stock name = stocks.stream().filter(e->e.getStockCode().equals(stockQuoteData.getSymbol())).findFirst().orElse(null);
|
||||
|
||||
@@ -3,9 +3,9 @@ spring:
|
||||
show-sql: true
|
||||
# Redis配置
|
||||
redis:
|
||||
host: 43.153.142.41
|
||||
password: a5v8b86P4mVzFlUqJV
|
||||
port: 30041
|
||||
host: 43.160.197.177
|
||||
password: redispass123
|
||||
port: 6379
|
||||
database: 1
|
||||
lettuce:
|
||||
pool:
|
||||
@@ -17,9 +17,9 @@ spring:
|
||||
datasource:
|
||||
stock-market:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://43.153.142.41:30040/germany_stock?useUnicode=true&characterEncoding=utf-8
|
||||
url: jdbc:mysql://43.160.197.177:3306/germany_stock?useUnicode=true&characterEncoding=utf-8
|
||||
username: root
|
||||
password: uNejHIFQGJOUtYTmE
|
||||
password: mysqlpass123
|
||||
maxActive: 500
|
||||
testWhileIdle: true
|
||||
validationQuery: SELECT 1
|
||||
|
||||
Reference in New Issue
Block a user