|
|
@@ -40,6 +40,9 @@ public class CoinService2Impl implements CoinService2 {
|
|
|
|
|
|
private static final String secretKey = "Do5YDooH9OFimHXsF6nhi7rTZfxIZWWxaP35zsBEktGvCbogtbzBHpJs5cdVmple";
|
|
|
private static final String apiKey = "1qY3LgxmNcW1dku8NiL8NWX8KZG4SBevXHtqLFgzWZbAuJ207CUuf0FSNzIAONh5";
|
|
|
+ String baseUrl = "https://fapi.binance.com";
|
|
|
+ String businessUrl = "/fapi/v1/allOrders";
|
|
|
+ String businessUrl2 = "/fapi/v1/userTrades";
|
|
|
|
|
|
@Resource
|
|
|
private CoinMapper coinMapper;
|
|
|
@@ -55,28 +58,27 @@ public class CoinService2Impl implements CoinService2 {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
|
|
- public void syncData4Binance(String startTime, String endTime, String pageSize) {
|
|
|
- String baseUrl = "https://fapi.binance.com";
|
|
|
- String businessUrl;
|
|
|
- String businessUrl2;
|
|
|
+ public void syncData4Binance(String startTime, String endTime, String pageSize, Proxy proxy_, Boolean exchangeInfoFlag) {
|
|
|
Connection.Response response = null;
|
|
|
- Proxy proxy = Proxy.NO_PROXY;
|
|
|
+ Proxy proxy = proxy_ != null ? proxy_ : Proxy.NO_PROXY;
|
|
|
Map<String, String> paramMap = new LinkedHashMap<>();
|
|
|
Map<String, String> headerMap = new HashMap<>();
|
|
|
|
|
|
// 1同步合约交易对
|
|
|
- /*try {
|
|
|
- businessUrl = "/fapi/v1/exchangeInfo";
|
|
|
- response = JsoupUtil.requestBody(baseUrl + businessUrl, "GET", proxy, headerMap, paramMap);
|
|
|
- JSONArray symbolList = JSONObject.parseObject(response.body()).getJSONArray("symbols");
|
|
|
- if (symbolList.size() > 0) {
|
|
|
- coinMapper.insertCoinBinanceSymbolList(JSONArray.parseArray(symbolList.toJSONString(), CoinBinanceSymbol.class));
|
|
|
- log.warn("syncData4Binance->exchangeInfo,startTime={},endTime={},size={}", startTime, endTime, symbolList.size());
|
|
|
+ if (exchangeInfoFlag != null && exchangeInfoFlag) {
|
|
|
+ try {
|
|
|
+ businessUrl = "/fapi/v1/exchangeInfo";
|
|
|
+ response = JsoupUtil.requestBody(baseUrl + businessUrl, "GET", proxy, headerMap, paramMap);
|
|
|
+ JSONArray symbolList = JSONObject.parseObject(response.body()).getJSONArray("symbols");
|
|
|
+ if (symbolList.size() > 0) {
|
|
|
+ coinMapper.insertCoinBinanceSymbolList(JSONArray.parseArray(symbolList.toJSONString(), CoinBinanceSymbol.class));
|
|
|
+ log.warn("syncData4Binance->exchangeInfo,startTime={},endTime={},size={}", startTime, endTime, symbolList.size());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("syncData4Binance->exchangeInfo error,response={}", response, e);
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("syncData4Binance->exchangeInfo error,response={}", response, e);
|
|
|
- }*/
|
|
|
+ }
|
|
|
+
|
|
|
// 2同步订单历史
|
|
|
// 2.1获取合约交易对
|
|
|
Map<String, Object> queryParamMap = new HashMap<>();
|
|
|
@@ -91,73 +93,76 @@ public class CoinService2Impl implements CoinService2 {
|
|
|
// 2.3循环调取查询所有订单(包括历史订单)接口
|
|
|
headerMap.put("X-MBX-APIKEY", apiKey);
|
|
|
try {
|
|
|
- businessUrl = "/fapi/v1/allOrders";
|
|
|
- businessUrl2 = "/fapi/v1/userTrades";
|
|
|
for (CoinBinanceSymbol coinBinanceSymbol : coinBinanceSymbolList) {
|
|
|
- List<CoinBinanceOrderHistory> coinBinanceOrderHistoryListAll = new ArrayList<>();
|
|
|
- //权重: 5;每12秒调1次
|
|
|
- Thread.sleep(12000L);
|
|
|
-
|
|
|
- paramMap.clear();
|
|
|
- String timestamp = String.valueOf(System.currentTimeMillis());
|
|
|
- paramMap.put("symbol", coinBinanceSymbol.getSymbol());
|
|
|
- paramMap.put("startTime", startTime);
|
|
|
- paramMap.put("endTime", endTime);
|
|
|
- paramMap.put("timestamp", timestamp);
|
|
|
- String queryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
|
|
|
- String sign = generate("", "", "", queryString, null, secretKey);
|
|
|
- paramMap.put("signature", sign);
|
|
|
-
|
|
|
- try {
|
|
|
- response = JsoupUtil.requestBody(baseUrl + businessUrl, "GET", proxy, headerMap, paramMap);
|
|
|
- JSONArray orderList = JSONArray.parseArray(response.body());
|
|
|
- if (orderList != null && orderList.size() > 0) {
|
|
|
- List<CoinBinanceOrderHistory> coinBinanceOrderHistoryList = JSONArray.parseArray(orderList.toJSONString(), CoinBinanceOrderHistory.class);
|
|
|
- for (CoinBinanceOrderHistory coinBinanceOrderHistory : coinBinanceOrderHistoryList) {
|
|
|
- if (orderIdList.contains(coinBinanceOrderHistory.getOrderId())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- paramMap.clear();
|
|
|
- timestamp = String.valueOf(System.currentTimeMillis());
|
|
|
- paramMap.put("symbol", coinBinanceSymbol.getSymbol());
|
|
|
- paramMap.put("orderId", coinBinanceOrderHistory.getOrderId());
|
|
|
- paramMap.put("startTime", startTime);
|
|
|
- paramMap.put("endTime", endTime);
|
|
|
- paramMap.put("timestamp", timestamp);
|
|
|
- queryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
|
|
|
- sign = generate("", "", "", queryString, null, secretKey);
|
|
|
- paramMap.put("signature", sign);
|
|
|
- response = JsoupUtil.requestBody(baseUrl + businessUrl2, "GET", proxy, headerMap, paramMap);
|
|
|
- JSONArray userTradeList = JSONArray.parseArray(response.body());
|
|
|
- BigDecimal commission = BigDecimal.ZERO;
|
|
|
- BigDecimal realizedPnl = BigDecimal.ZERO;
|
|
|
- if (userTradeList != null && userTradeList.size() > 0) {
|
|
|
- for (int i = 0; i < userTradeList.size(); i++) {
|
|
|
- JSONObject userTradeJO = userTradeList.getJSONObject(i);
|
|
|
- commission = commission.add(new BigDecimal(userTradeJO.getString("commission")));
|
|
|
- realizedPnl = realizedPnl.add(new BigDecimal(userTradeJO.getString("realizedPnl")));
|
|
|
- }
|
|
|
- coinBinanceOrderHistory.setCommission(commission.setScale(4, RoundingMode.HALF_UP));
|
|
|
- coinBinanceOrderHistory.setRealizedPnl(realizedPnl.setScale(4, RoundingMode.HALF_UP));
|
|
|
- }
|
|
|
-
|
|
|
- coinBinanceOrderHistoryListAll.add(coinBinanceOrderHistory);
|
|
|
- System.out.println(coinBinanceOrderHistory);
|
|
|
- }
|
|
|
+ syncData4BinanceSub(paramMap, startTime, endTime, proxy_, headerMap, orderIdList, coinBinanceSymbol);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("syncData4Binance->allOrders error,response={}", response, e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
|
|
+ public void syncData4BinanceSub(Map<String, String> paramMap, String startTime, String endTime, Proxy proxy, Map<String, String> headerMap, List<String> orderIdList, CoinBinanceSymbol coinBinanceSymbol) throws Exception {
|
|
|
+ List<CoinBinanceOrderHistory> coinBinanceOrderHistoryListAll = new ArrayList<>();
|
|
|
+ //权重: 5;每秒调8次
|
|
|
+ Thread.sleep(500L);
|
|
|
+
|
|
|
+ paramMap.clear();
|
|
|
+ String timestamp = String.valueOf(System.currentTimeMillis());
|
|
|
+ paramMap.put("symbol", coinBinanceSymbol.getSymbol());
|
|
|
+ paramMap.put("startTime", startTime);
|
|
|
+ paramMap.put("endTime", endTime);
|
|
|
+ paramMap.put("timestamp", timestamp);
|
|
|
+ String queryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
|
|
|
+ String sign = generate("", "", "", queryString, null, secretKey);
|
|
|
+ paramMap.put("signature", sign);
|
|
|
+
|
|
|
+ Connection.Response response = null;
|
|
|
+ try {
|
|
|
+ response = JsoupUtil.requestBody(baseUrl + businessUrl, "GET", proxy, headerMap, paramMap);
|
|
|
+ JSONArray orderList = JSONArray.parseArray(response.body());
|
|
|
+ if (orderList != null && orderList.size() > 0) {
|
|
|
+ List<CoinBinanceOrderHistory> coinBinanceOrderHistoryList = JSONArray.parseArray(orderList.toJSONString(), CoinBinanceOrderHistory.class);
|
|
|
+ for (CoinBinanceOrderHistory coinBinanceOrderHistory : coinBinanceOrderHistoryList) {
|
|
|
+ if (orderIdList.contains(coinBinanceOrderHistory.getOrderId())) {
|
|
|
+ continue;
|
|
|
}
|
|
|
|
|
|
- if (coinBinanceOrderHistoryListAll.size() > 0) {
|
|
|
- coinMapper.insertOrUpdateBinanceOrderHistoryList(coinBinanceOrderHistoryListAll);
|
|
|
- log.warn("syncData4Binance->allOrders sub,startTime={},endTime={},size={}", startTime, endTime, coinBinanceOrderHistoryListAll.size());
|
|
|
+ paramMap.clear();
|
|
|
+ timestamp = String.valueOf(System.currentTimeMillis());
|
|
|
+ paramMap.put("symbol", coinBinanceSymbol.getSymbol());
|
|
|
+ paramMap.put("orderId", coinBinanceOrderHistory.getOrderId());
|
|
|
+ paramMap.put("startTime", startTime);
|
|
|
+ paramMap.put("endTime", endTime);
|
|
|
+ paramMap.put("timestamp", timestamp);
|
|
|
+ queryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
|
|
|
+ sign = generate("", "", "", queryString, null, secretKey);
|
|
|
+ paramMap.put("signature", sign);
|
|
|
+ response = JsoupUtil.requestBody(baseUrl + businessUrl2, "GET", proxy, headerMap, paramMap);
|
|
|
+ JSONArray userTradeList = JSONArray.parseArray(response.body());
|
|
|
+ BigDecimal commission = BigDecimal.ZERO;
|
|
|
+ BigDecimal realizedPnl = BigDecimal.ZERO;
|
|
|
+ if (userTradeList != null && userTradeList.size() > 0) {
|
|
|
+ for (int i = 0; i < userTradeList.size(); i++) {
|
|
|
+ JSONObject userTradeJO = userTradeList.getJSONObject(i);
|
|
|
+ commission = commission.add(new BigDecimal(userTradeJO.getString("commission")));
|
|
|
+ realizedPnl = realizedPnl.add(new BigDecimal(userTradeJO.getString("realizedPnl")));
|
|
|
+ }
|
|
|
+ coinBinanceOrderHistory.setCommission(commission.setScale(4, RoundingMode.HALF_UP));
|
|
|
+ coinBinanceOrderHistory.setRealizedPnl(realizedPnl.setScale(4, RoundingMode.HALF_UP));
|
|
|
}
|
|
|
- } catch (Exception ee) {
|
|
|
- log.error("syncData4Binance->allOrders sub error,response={}", response, ee);
|
|
|
+
|
|
|
+ coinBinanceOrderHistoryListAll.add(coinBinanceOrderHistory);
|
|
|
+ System.out.println(coinBinanceOrderHistory);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("syncData4Binance->allOrders error,response={}", response, e);
|
|
|
+ if (coinBinanceOrderHistoryListAll.size() > 0) {
|
|
|
+ coinMapper.insertOrUpdateBinanceOrderHistoryList(coinBinanceOrderHistoryListAll);
|
|
|
+ log.warn("syncData4Binance->allOrders sub,startTime={},endTime={},size={}", startTime, endTime, coinBinanceOrderHistoryListAll.size());
|
|
|
+ }
|
|
|
+ } catch (Exception ee) {
|
|
|
+ log.error("syncData4Binance->allOrders sub error,response={}", response, ee);
|
|
|
}
|
|
|
}
|
|
|
|