package com.yami.trading.huobi.websocket.service.huobi;
|
|
import java.util.List;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.yami.trading.huobi.websocket.client.req.account.GetBalanceRequest;
|
import com.yami.trading.huobi.websocket.service.huobi.connection.HuobiRestConnection25519;
|
import org.apache.commons.lang3.StringUtils;
|
|
import com.yami.trading.huobi.websocket.client.CrossMarginClient;
|
import com.yami.trading.huobi.websocket.client.req.crossmargin.CrossMarginApplyLoanRequest;
|
import com.yami.trading.huobi.websocket.client.req.crossmargin.CrossMarginLoanOrdersRequest;
|
import com.yami.trading.huobi.websocket.client.req.crossmargin.CrossMarginRepayLoanRequest;
|
import com.yami.trading.huobi.websocket.client.req.crossmargin.CrossMarginTransferRequest;
|
import com.yami.trading.huobi.websocket.client.req.crossmargin.GeneralLoanOrdersRequest;
|
import com.yami.trading.huobi.websocket.client.req.crossmargin.GeneralRepayLoanRequest;
|
import com.yami.trading.huobi.websocket.constant.Options;
|
import com.yami.trading.huobi.websocket.constant.enums.MarginTransferDirectionEnum;
|
import com.yami.trading.huobi.websocket.model.crossmargin.CrossMarginAccount;
|
import com.yami.trading.huobi.websocket.model.crossmargin.CrossMarginCurrencyInfo;
|
import com.yami.trading.huobi.websocket.model.crossmargin.CrossMarginLoadOrder;
|
import com.yami.trading.huobi.websocket.model.crossmargin.GeneralRepayLoanRecord;
|
import com.yami.trading.huobi.websocket.model.crossmargin.GeneralRepayLoanResult;
|
import com.yami.trading.huobi.websocket.service.huobi.connection.HuobiRestConnection;
|
import com.yami.trading.huobi.websocket.service.huobi.parser.account.GeneralRepayLoanRecordParser;
|
import com.yami.trading.huobi.websocket.service.huobi.parser.account.GeneralRepayLoanResultParser;
|
import com.yami.trading.huobi.websocket.service.huobi.parser.crossmargin.CrossMarginAccountParser;
|
import com.yami.trading.huobi.websocket.service.huobi.parser.crossmargin.CrossMarginCurrencyInfoParser;
|
import com.yami.trading.huobi.websocket.service.huobi.parser.crossmargin.CrossMarginLoadOrderParser;
|
import com.yami.trading.huobi.websocket.service.huobi.signature.UrlParamsBuilder;
|
import com.yami.trading.huobi.websocket.utils.InputChecker;
|
|
public class HuobiCrossMarginService implements CrossMarginClient {
|
|
public static final String TRANSFER_TO_MARGIN_PATH = "/v1/cross-margin/transfer-in";//资产划入(全仓)
|
public static final String TRANSFER_TO_SPOT_PATH = "/v1/cross-margin/transfer-out";//资产划出(全仓)
|
public static final String APPLY_LOAN_PATH = "/v1/cross-margin/orders";//申请借币(全仓)
|
public static final String REPAY_LOAN_PATH = "/v1/cross-margin/orders/{order-id}/repay";//归还借币(全仓)
|
|
public static final String GET_BALANCE_PATH = "/v1/cross-margin/accounts/balance";//借币账户详情(全仓)
|
public static final String GET_LOAN_INFO_PATH = "/v1/cross-margin/loan-info";//查询借币币息率及额度(全仓)
|
public static final String GET_LOAN_ORDER_PATH = "/v1/cross-margin/loan-orders";//查询借币订单(全仓)
|
public static final String GENERAL_REPAY_LOAN_PATH = "/v2/account/repayment";//归还借币(全仓逐仓通用)
|
public static final String GENERAL_GET_REPAYMENT_LOAN_RECORDS_PATH = "/v2/account/repayment";//还币交易记录查询
|
|
|
private Options options;
|
|
private HuobiRestConnection restConnection;
|
|
public HuobiCrossMarginService(Options options) {
|
this.options = options;
|
if(options.getSign().equals("256")){
|
this.restConnection = new HuobiRestConnection(options);
|
}else if(options.getSign().equals("25519")){
|
this.restConnection = new HuobiRestConnection25519(options);
|
}
|
}
|
|
@Override
|
public Long transfer(CrossMarginTransferRequest request) {
|
|
InputChecker.checker()
|
.shouldNotNull(request.getDirection(), "direction")
|
.checkCurrency(request.getCurrency())
|
.shouldNotNull(request.getAmount(), "amount");
|
|
String path = null;
|
if (request.getDirection() == MarginTransferDirectionEnum.SPOT_TO_MARGIN) {
|
path = TRANSFER_TO_MARGIN_PATH;
|
} else {
|
path = TRANSFER_TO_SPOT_PATH;
|
}
|
|
UrlParamsBuilder builder = UrlParamsBuilder.build()
|
.putToPost("currency", request.getCurrency())
|
.putToPost("amount", request.getAmount());
|
JSONObject jsonObject = restConnection.executePostWithSignature(path, builder);
|
return jsonObject.getLong("data");
|
}
|
|
@Override
|
public Long applyLoan(CrossMarginApplyLoanRequest request) {
|
|
InputChecker.checker()
|
.checkCurrency(request.getCurrency())
|
.shouldNotNull(request.getAmount(), "amount");
|
|
UrlParamsBuilder builder = UrlParamsBuilder.build()
|
.putToPost("currency", request.getCurrency())
|
.putToPost("amount", request.getAmount());
|
|
JSONObject jsonObject = restConnection.executePostWithSignature(APPLY_LOAN_PATH, builder);
|
return jsonObject.getLong("data");
|
}
|
|
@Override
|
public void repayLoan(CrossMarginRepayLoanRequest request) {
|
InputChecker.checker()
|
.shouldNotNull(request.getOrderId(), "order-id")
|
.shouldNotNull(request.getAmount(), "amount");
|
|
UrlParamsBuilder builder = UrlParamsBuilder.build()
|
.putToPost("amount", request.getAmount());
|
|
String path = REPAY_LOAN_PATH.replace("{order-id}", request.getOrderId().toString());
|
restConnection.executePostWithSignature(path, builder);
|
}
|
|
@Override
|
public List<CrossMarginLoadOrder> getLoanOrders(CrossMarginLoanOrdersRequest request) {
|
|
UrlParamsBuilder builder = UrlParamsBuilder.build()
|
.putToUrl("currency", request.getCurrency())
|
.putToUrl("start-date", request.getStartDate(), "yyyy-MM-dd")
|
.putToUrl("end-date", request.getEndDate(), "yyyy-MM-dd")
|
.putToUrl("states", request.getStatesString())
|
.putToUrl("from", request.getFrom())
|
.putToUrl("size", request.getSize())
|
.putToUrl("direct", request.getDirection() == null ? null : request.getDirection().getCode())
|
.putToUrl("sub-uid", request.getSubUid());
|
|
JSONObject jsonObject = restConnection.executeGetWithSignature(GET_LOAN_ORDER_PATH, builder);
|
JSONArray data = jsonObject.getJSONArray("data");
|
return new CrossMarginLoadOrderParser().parseArray(data);
|
}
|
|
@Override
|
public CrossMarginAccount getLoanBalance(GetBalanceRequest request) {
|
UrlParamsBuilder builder = UrlParamsBuilder.build()
|
.putToUrl("sub-uid", request.getSubUid());
|
JSONObject jsonObject = restConnection.executeGetWithSignature(GET_BALANCE_PATH, builder);
|
JSONObject data = jsonObject.getJSONObject("data");
|
return new CrossMarginAccountParser().parse(data);
|
}
|
|
@Override
|
public List<CrossMarginCurrencyInfo> getLoanInfo() {
|
JSONObject jsonObject = restConnection.executeGetWithSignature(GET_LOAN_INFO_PATH, UrlParamsBuilder.build());
|
JSONArray data = jsonObject.getJSONArray("data");
|
return new CrossMarginCurrencyInfoParser().parseArray(data);
|
}
|
|
@Override
|
public List<GeneralRepayLoanResult> repayLoan(GeneralRepayLoanRequest request) {
|
InputChecker.checker()
|
.shouldNotNull(request.getAccountId(), "accountId")
|
.shouldNotNull(request.getCurrency(), "currency")
|
.shouldNotNull(request.getAmount(), "amount");
|
|
UrlParamsBuilder builder = UrlParamsBuilder.build()
|
.putToPost("accountId", request.getAccountId())
|
.putToPost("currency", request.getCurrency())
|
.putToPost("amount", request.getAmount())
|
.putToPost("transactId", request.getTransactId());
|
JSONObject jsonObject = restConnection.executePostWithSignature(GENERAL_REPAY_LOAN_PATH, builder);
|
JSONArray data = jsonObject.getJSONArray("data");
|
return new GeneralRepayLoanResultParser().parseArray(data);
|
}
|
|
@Override
|
public List<GeneralRepayLoanRecord> getRepaymentLoanRecords(GeneralLoanOrdersRequest request) {
|
UrlParamsBuilder builder = UrlParamsBuilder.build();
|
if (StringUtils.isNotEmpty(request.getRepayId()))
|
builder.putToUrl("repayId", request.getRepayId());
|
if (StringUtils.isNotEmpty(request.getAccountId()))
|
builder.putToUrl("accountId", request.getAccountId());
|
if (StringUtils.isNotEmpty(request.getCurrency()))
|
builder.putToUrl("currency", request.getCurrency());
|
if (request.getStartTime() != 0)
|
builder.putToUrl("startTime", request.getStartTime());
|
if (request.getEndTime() != 0)
|
builder.putToUrl("endTime", request.getEndTime());
|
if (request.getSort() != null)
|
builder.putToUrl("sort", request.getSort().getSort());
|
if (request.getLimit() != 0)
|
builder.putToUrl("limit", request.getLimit());
|
if (request.getFromId() != 0)
|
builder.putToUrl("fromId", request.getFromId());
|
JSONObject jsonObject = restConnection.executeGetWithSignature(GENERAL_GET_REPAYMENT_LOAN_RECORDS_PATH, builder);
|
JSONArray data = jsonObject.getJSONArray("data");
|
return new GeneralRepayLoanRecordParser().parseArray(data);
|
}
|
|
|
}
|