|
|
@@ -0,0 +1,79 @@
|
|
|
+package top.lvzhiqiang.service.impl;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.xxl.job.core.context.XxlJobHelper;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.jsoup.Connection;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.StopWatch;
|
|
|
+import top.lvzhiqiang.config.InitRunner;
|
|
|
+import top.lvzhiqiang.entity.CoinBitgetMixFundrate;
|
|
|
+import top.lvzhiqiang.mapper.CoinBitgetMapper;
|
|
|
+import top.lvzhiqiang.service.CoinBitgetService;
|
|
|
+import top.lvzhiqiang.util.JsoupUtil;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Coin Bitget ServiceImpl
|
|
|
+ *
|
|
|
+ * @author lvzhiqiang
|
|
|
+ * 2025/12/8 19:31
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class CoinBitgetServiceImpl implements CoinBitgetService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private CoinBitgetMapper coinBitgetMapper;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 同步合约资金周期
|
|
|
+ *
|
|
|
+ * @return com.xxl.job.core.biz.model.ReturnT<java.lang.String>
|
|
|
+ * @author lvzhiqiang
|
|
|
+ * 2025/10/18 11:04
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void syncMixFundrateTime() throws Exception {
|
|
|
+ StopWatch stopWatch = new StopWatch();
|
|
|
+ stopWatch.start();
|
|
|
+
|
|
|
+ String bitgetMixfundRateUrl = InitRunner.dicCodeMap.get("bitget_mixfundrate_url").getCodeValue();
|
|
|
+
|
|
|
+ Connection.Response response = JsoupUtil.requestBody(bitgetMixfundRateUrl, JsoupUtil.HTTP_GET, InitRunner.proxy, null, null);
|
|
|
+ JSONObject result = JSONObject.parseObject(response.body());
|
|
|
+ JSONArray dataJA = result.getJSONArray("data");
|
|
|
+
|
|
|
+ List<CoinBitgetMixFundrate> mixFundrateList = new ArrayList<>();
|
|
|
+ CoinBitgetMixFundrate mixFundrate;
|
|
|
+ for (int i = 0; i < dataJA.size(); i++) {
|
|
|
+ JSONObject dataJO = dataJA.getJSONObject(i);
|
|
|
+
|
|
|
+ mixFundrate = new CoinBitgetMixFundrate();
|
|
|
+ mixFundrate.setSymbol(dataJO.getString("symbol"));
|
|
|
+ mixFundrate.setFundingRate(dataJO.getString("fundingRate"));
|
|
|
+ mixFundrate.setFundingRateInterval(dataJO.getString("fundingRateInterval"));
|
|
|
+ mixFundrate.setNextUpdate(dataJO.getString("nextUpdate"));
|
|
|
+ mixFundrate.setMinFundingRate(dataJO.getString("minFundingRate"));
|
|
|
+ mixFundrate.setMaxFundingRate(dataJO.getString("maxFundingRate"));
|
|
|
+
|
|
|
+ mixFundrateList.add(mixFundrate);
|
|
|
+ }
|
|
|
+
|
|
|
+ int MAX_NUMBER = 100;
|
|
|
+ // 新增或者更新
|
|
|
+ Stream.iterate(0, n -> n + 1).limit((mixFundrateList.size() + MAX_NUMBER - 1) / MAX_NUMBER)
|
|
|
+ .forEach(i -> {
|
|
|
+ List<CoinBitgetMixFundrate> list = mixFundrateList.stream().skip((long) i * MAX_NUMBER).limit(MAX_NUMBER).collect(Collectors.toList());
|
|
|
+ coinBitgetMapper.insertOrUpdateMixFundrateList(list);
|
|
|
+ });
|
|
|
+
|
|
|
+ XxlJobHelper.log("耗时={},总数={}", stopWatch.getTotalTimeSeconds(), mixFundrateList.size());
|
|
|
+ }
|
|
|
+}
|