home-page

This commit is contained in:
VoGiaHuy2058
2025-06-18 17:51:36 +07:00
parent 5b3504f32a
commit 9785a391a2
4 changed files with 115 additions and 3 deletions

View File

@@ -13,6 +13,7 @@ import cn.hutool.core.text.StrFormatter;
import cn.stock.market.dto.model.*;
import cn.stock.market.infrastructure.api.EttechchartsApis;
import cn.stock.market.infrastructure.api.GrowwInApis;
import cn.stock.market.infrastructure.api.HomeApiIndex;
import cn.stock.market.infrastructure.api.TodayApis;
import cn.stock.market.infrastructure.api.investing.IndiaIndexVo;
import cn.stock.market.infrastructure.api.investing.IndiaStockVO;
@@ -1048,7 +1049,8 @@ public class StockService {
return ServerResponse.createBySuccess(indexVoList);
}
public ServerResponse getIndexByBtoday(){
public ServerResponse getIndexByBtoday() throws Exception {
List<StockIndex> list = HomeApiIndex.fetchStockIndices();
List<IndiaIndexVo> indexVoList = new ArrayList<>();
try {
String exchange = "bse";

View File

@@ -0,0 +1,31 @@
package cn.stock.market.dto.model;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class StockIndex {
private String id;
private String symbol;
private String name;
private String exchange;
private String micCode;
private String datetime;
private long timestamp;
private Double open;
private Double high;
private Double low;
private Double close;
private Long volume;
private Double previousClose;
private Double change;
private Double percentChange;
private Long averageVolume;
private Boolean isMarketOpen;
private Long marketCap;
private String fiftyTwoWeek;
private Integer icon;
// Getters & setters (hoặc dùng @Data nếu có Lombok)
}

View File

@@ -0,0 +1,75 @@
package cn.stock.market.infrastructure.api;
import cn.stock.market.dto.model.StockIndex;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class HomeApiIndex {
private static final OkHttpClient client = new OkHttpClient();
private static final String API_URL = "https://apinode-dgdev.moneytj.com/api/ger-market/stocks/query-list?symbols=XETR:DAX,XETR:MDAX,XETR:SDXP,XETR:HDAX";
public static List<StockIndex> fetchStockIndices() throws Exception {
List<StockIndex> result = new ArrayList<>();
Request request = new Request.Builder()
.url(API_URL)
.addHeader("User-Agent", "Mozilla/5.0")
.addHeader("Accept", "application/json")
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) {
throw new RuntimeException("HTTP error code: " + response.code());
}
String body = response.body().string();
JSONObject json = new JSONObject(body);
JSONArray data = json.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject obj = data.getJSONObject(i);
StockIndex index = new StockIndex();
index.setId(obj.optString("id"));
index.setSymbol(obj.optString("symbol"));
index.setName(obj.optString("name"));
index.setExchange(obj.optString("exchange"));
index.setMicCode(obj.optString("mic_code"));
index.setDatetime(obj.optString("datetime"));
index.setTimestamp(obj.optLong("timestamp"));
index.setOpen(getDoubleOrNull(obj, "open"));
index.setHigh(getDoubleOrNull(obj, "high"));
index.setLow(getDoubleOrNull(obj, "low"));
index.setClose(getDoubleOrNull(obj, "close"));
index.setVolume(getLongOrNull(obj, "volume"));
index.setPreviousClose(getDoubleOrNull(obj, "previous_close"));
index.setChange(getDoubleOrNull(obj, "change"));
index.setPercentChange(getDoubleOrNull(obj, "percent_change"));
index.setAverageVolume(getLongOrNull(obj, "average_volume"));
index.setIsMarketOpen(obj.optBoolean("is_market_open"));
index.setMarketCap(getLongOrNull(obj, "market_cap"));
index.setFiftyTwoWeek(obj.optString("fifty_two_week", null));
index.setIcon(obj.optInt("icon", 0));
result.add(index);
}
return result;
}
// Helper to safely parse nullable numbers
private static Double getDoubleOrNull(JSONObject obj, String key) {
return obj.isNull(key) ? null : obj.optDouble(key);
}
private static Long getLongOrNull(JSONObject obj, String key) {
return obj.isNull(key) ? null : obj.optLong(key);
}
}

View File

@@ -249,8 +249,12 @@ public class StockApiController {
public ServerResponse getIndiaIndexByToday() {
String INDEX_CODE = "TODAY_INDEX";
return RequestCacheUtils.cache("getIndiaIndexByToday.do", INDEX_CODE,6000, (string) -> {
return this.stockService.getIndexByBtoday();
});
try {
return this.stockService.getIndexByBtoday();
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@RequestMapping({"getIndiaIndexByEttech.do"})
@ApiOperation(value = "印度--获取指定指数信息-Ettech", httpMethod = "GET")