| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- package top.lvzhiqiang.service.impl;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import lombok.extern.slf4j.Slf4j;
- import org.jsoup.Connection;
- import org.springframework.stereotype.Service;
- import top.lvzhiqiang.service.CoinService;
- import top.lvzhiqiang.util.CheckSign4Bitget;
- import top.lvzhiqiang.util.DateUtils;
- import top.lvzhiqiang.util.JsoupUtil;
- import java.io.UnsupportedEncodingException;
- import java.net.Proxy;
- import java.security.InvalidKeyException;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * Coin ServiceImpl
- *
- * @author lvzhiqiang
- * 2023/9/5 15:23
- */
- @Service
- @Slf4j
- public class CoinServiceImpl implements CoinService {
- // 所有REST请求的header都必须包含以下key:
- private static final Map<String, String> basicHeaderMap = new HashMap<>();
- // 主域名 URL
- private static final String mainUrl = "https://api.bitget.com";
- // 私钥,由系统随机生成,用于签名的生成。
- private static final String secretKey = "1fdd0fc2976bea80189ba13710e12825ca3ef6c5e25a0d76fd03f8f6cd4a61d9";
- static {
- // API KEY作为一个字符串。
- basicHeaderMap.put("ACCESS-KEY", "bg_433d37306df0e8901c6d107c6d9e9111");
- // 使用base64编码签名(请参阅签名消息)。
- basicHeaderMap.put("ACCESS-SIGN", "");
- // 您请求的时间戳。
- basicHeaderMap.put("ACCESS-TIMESTAMP", "");
- // 您在创建API KEY时设置的口令。
- basicHeaderMap.put("ACCESS-PASSPHRASE", "7f934f62f2701bee932204580d115228");
- // 统一设置为application/json。
- basicHeaderMap.put("Content-Type", "application/json");
- // 支持多语言, 如:中文(zh-CN),英语(en-US)
- basicHeaderMap.put("locale", "zh-CN");
- }
- @Override
- public String monitorJob() {
- return null;
- }
- /**
- * 获取全部合约仓位信息V2
- *
- * @author lvzhiqiang
- * 2023/9/5 15:23
- */
- @Override
- public String findAllPositionv2() {
- JSONObject result = handleAllPositionV2();
- JSONArray data = result.getJSONArray("data");
- StringBuffer sb = new StringBuffer("total:".concat(String.valueOf(data.size())).concat("<br/>"));
- sb.append("<table border=\"1\" cellspacing=\"0\"><tr>");
- sb.append("<th>币对名称</th>");
- sb.append("<th>保证金币种</th>");
- sb.append("<th>持仓方向</th>");
- sb.append("<th>当前委托待成交的数量</th>");
- sb.append("<th>保证金数量</th>");
- sb.append("<th>自动追加保证金</th>");
- sb.append("<th>仓位可用</th>");
- sb.append("<th>仓位冻结</th>");
- sb.append("<th>仓位总数量</th>");
- sb.append("<th>杠杆倍数</th>");
- sb.append("<th>已实现盈亏</th>");
- sb.append("<th>平均开仓价</th>");
- sb.append("<th>保证金模式</th>");
- sb.append("<th>持仓模式</th>");
- sb.append("<th>未实现盈亏</th>");
- sb.append("<th>预估强平价</th>");
- sb.append("<th>维持保证金率</th>");
- sb.append("<th>标记价格</th>");
- sb.append("<th>最近更新时间</th>");
- sb.append("</tr>");
- for (int i = 0; i < data.size(); i++) {
- JSONObject jsonObject = data.getJSONObject(i);
- sb.append("<tr>");
- sb.append("<td>").append(jsonObject.getString("symbol")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("marginCoin")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("holdSide")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("openDelegateCount")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("margin")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("autoMargin")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("available")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("locked")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("total")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("leverage")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("achievedProfits")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("averageOpenPrice")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("marginMode")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("holdMode")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("unrealizedPL")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("liquidationPrice")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("keepMarginRate")).append("</td>");
- sb.append("<td>").append(jsonObject.getString("marketPrice")).append("</td>");
- sb.append("<td>").append(DateUtils.timeToString(jsonObject.getLong("cTime"))).append("</td>");
- sb.append("</tr>");
- }
- sb.append("</table>");
- return sb.toString();
- }
- /**
- * 处理全部合约仓位信息V2
- */
- @Override
- public JSONObject handleAllPositionV2() {
- String requestPath = "/api/mix/v1/position/allPosition-v2";
- String timestamp = String.valueOf(System.currentTimeMillis());
- String queryString = "productType=umcbl";
- Map<String, String> headerMap = new HashMap<>();
- headerMap.putAll(basicHeaderMap);
- try {
- String accessSign = CheckSign4Bitget.generate(timestamp, "GET", requestPath, queryString, null, secretKey);
- headerMap.put("ACCESS-TIMESTAMP", timestamp);
- headerMap.put("ACCESS-SIGN", accessSign);
- } catch (CloneNotSupportedException e) {
- throw new RuntimeException(e);
- } catch (InvalidKeyException e) {
- throw new RuntimeException(e);
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException(e);
- }
- Map<String, String> paramMap = new HashMap<>();
- paramMap.put("productType", "umcbl");
- try {
- String requestUrl = mainUrl + requestPath;
- //Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7890));
- Connection.Response response = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, Proxy.NO_PROXY, headerMap, paramMap);
- return JSONObject.parseObject(response.body());
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- }
|