CoinServiceImpl.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package top.lvzhiqiang.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.jsoup.Connection;
  6. import org.springframework.stereotype.Service;
  7. import top.lvzhiqiang.service.CoinService;
  8. import top.lvzhiqiang.util.CheckSign4Bitget;
  9. import top.lvzhiqiang.util.DateUtils;
  10. import top.lvzhiqiang.util.JsoupUtil;
  11. import java.io.UnsupportedEncodingException;
  12. import java.net.Proxy;
  13. import java.security.InvalidKeyException;
  14. import java.util.HashMap;
  15. import java.util.Map;
  16. /**
  17. * Coin ServiceImpl
  18. *
  19. * @author lvzhiqiang
  20. * 2023/9/5 15:23
  21. */
  22. @Service
  23. @Slf4j
  24. public class CoinServiceImpl implements CoinService {
  25. // 所有REST请求的header都必须包含以下key:
  26. private static final Map<String, String> basicHeaderMap = new HashMap<>();
  27. // 主域名 URL
  28. private static final String mainUrl = "https://api.bitget.com";
  29. // 私钥,由系统随机生成,用于签名的生成。
  30. private static final String secretKey = "1fdd0fc2976bea80189ba13710e12825ca3ef6c5e25a0d76fd03f8f6cd4a61d9";
  31. static {
  32. // API KEY作为一个字符串。
  33. basicHeaderMap.put("ACCESS-KEY", "bg_433d37306df0e8901c6d107c6d9e9111");
  34. // 使用base64编码签名(请参阅签名消息)。
  35. basicHeaderMap.put("ACCESS-SIGN", "");
  36. // 您请求的时间戳。
  37. basicHeaderMap.put("ACCESS-TIMESTAMP", "");
  38. // 您在创建API KEY时设置的口令。
  39. basicHeaderMap.put("ACCESS-PASSPHRASE", "7f934f62f2701bee932204580d115228");
  40. // 统一设置为application/json。
  41. basicHeaderMap.put("Content-Type", "application/json");
  42. // 支持多语言, 如:中文(zh-CN),英语(en-US)
  43. basicHeaderMap.put("locale", "zh-CN");
  44. }
  45. @Override
  46. public String monitorJob() {
  47. return null;
  48. }
  49. /**
  50. * 获取全部合约仓位信息V2
  51. *
  52. * @author lvzhiqiang
  53. * 2023/9/5 15:23
  54. */
  55. @Override
  56. public String findAllPositionv2() {
  57. JSONObject result = handleAllPositionV2();
  58. JSONArray data = result.getJSONArray("data");
  59. StringBuffer sb = new StringBuffer("total:".concat(String.valueOf(data.size())).concat("<br/>"));
  60. sb.append("<table border=\"1\" cellspacing=\"0\"><tr>");
  61. sb.append("<th>币对名称</th>");
  62. sb.append("<th>保证金币种</th>");
  63. sb.append("<th>持仓方向</th>");
  64. sb.append("<th>当前委托待成交的数量</th>");
  65. sb.append("<th>保证金数量</th>");
  66. sb.append("<th>自动追加保证金</th>");
  67. sb.append("<th>仓位可用</th>");
  68. sb.append("<th>仓位冻结</th>");
  69. sb.append("<th>仓位总数量</th>");
  70. sb.append("<th>杠杆倍数</th>");
  71. sb.append("<th>已实现盈亏</th>");
  72. sb.append("<th>平均开仓价</th>");
  73. sb.append("<th>保证金模式</th>");
  74. sb.append("<th>持仓模式</th>");
  75. sb.append("<th>未实现盈亏</th>");
  76. sb.append("<th>预估强平价</th>");
  77. sb.append("<th>维持保证金率</th>");
  78. sb.append("<th>标记价格</th>");
  79. sb.append("<th>最近更新时间</th>");
  80. sb.append("</tr>");
  81. for (int i = 0; i < data.size(); i++) {
  82. JSONObject jsonObject = data.getJSONObject(i);
  83. sb.append("<tr>");
  84. sb.append("<td>").append(jsonObject.getString("symbol")).append("</td>");
  85. sb.append("<td>").append(jsonObject.getString("marginCoin")).append("</td>");
  86. sb.append("<td>").append(jsonObject.getString("holdSide")).append("</td>");
  87. sb.append("<td>").append(jsonObject.getString("openDelegateCount")).append("</td>");
  88. sb.append("<td>").append(jsonObject.getString("margin")).append("</td>");
  89. sb.append("<td>").append(jsonObject.getString("autoMargin")).append("</td>");
  90. sb.append("<td>").append(jsonObject.getString("available")).append("</td>");
  91. sb.append("<td>").append(jsonObject.getString("locked")).append("</td>");
  92. sb.append("<td>").append(jsonObject.getString("total")).append("</td>");
  93. sb.append("<td>").append(jsonObject.getString("leverage")).append("</td>");
  94. sb.append("<td>").append(jsonObject.getString("achievedProfits")).append("</td>");
  95. sb.append("<td>").append(jsonObject.getString("averageOpenPrice")).append("</td>");
  96. sb.append("<td>").append(jsonObject.getString("marginMode")).append("</td>");
  97. sb.append("<td>").append(jsonObject.getString("holdMode")).append("</td>");
  98. sb.append("<td>").append(jsonObject.getString("unrealizedPL")).append("</td>");
  99. sb.append("<td>").append(jsonObject.getString("liquidationPrice")).append("</td>");
  100. sb.append("<td>").append(jsonObject.getString("keepMarginRate")).append("</td>");
  101. sb.append("<td>").append(jsonObject.getString("marketPrice")).append("</td>");
  102. sb.append("<td>").append(DateUtils.timeToString(jsonObject.getLong("cTime"))).append("</td>");
  103. sb.append("</tr>");
  104. }
  105. sb.append("</table>");
  106. return sb.toString();
  107. }
  108. /**
  109. * 处理全部合约仓位信息V2
  110. */
  111. @Override
  112. public JSONObject handleAllPositionV2() {
  113. String requestPath = "/api/mix/v1/position/allPosition-v2";
  114. String timestamp = String.valueOf(System.currentTimeMillis());
  115. String queryString = "productType=umcbl";
  116. Map<String, String> headerMap = new HashMap<>();
  117. headerMap.putAll(basicHeaderMap);
  118. try {
  119. String accessSign = CheckSign4Bitget.generate(timestamp, "GET", requestPath, queryString, null, secretKey);
  120. headerMap.put("ACCESS-TIMESTAMP", timestamp);
  121. headerMap.put("ACCESS-SIGN", accessSign);
  122. } catch (CloneNotSupportedException e) {
  123. throw new RuntimeException(e);
  124. } catch (InvalidKeyException e) {
  125. throw new RuntimeException(e);
  126. } catch (UnsupportedEncodingException e) {
  127. throw new RuntimeException(e);
  128. }
  129. Map<String, String> paramMap = new HashMap<>();
  130. paramMap.put("productType", "umcbl");
  131. try {
  132. String requestUrl = mainUrl + requestPath;
  133. //Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7890));
  134. Connection.Response response = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, Proxy.NO_PROXY, headerMap, paramMap);
  135. return JSONObject.parseObject(response.body());
  136. } catch (Exception e) {
  137. throw new RuntimeException(e);
  138. }
  139. }
  140. }