1
zyy3
2025-11-05 91bbc719126310f09031e55967c059c0a01f20b1
trading-order-huobi/src/main/java/com/yami/trading/huobi/data/internal/KlineServiceImpl.java
@@ -1,13 +1,19 @@
package com.yami.trading.huobi.data.internal;
import cn.hutool.http.HttpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yami.trading.bean.data.domain.Kline;
import com.yami.trading.bean.data.domain.Realtime;
import com.yami.trading.bean.item.domain.Item;
import com.yami.trading.common.config.RequestDataHelper;
import com.yami.trading.common.constants.Constants;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.exception.YamiShopBindException;
import com.yami.trading.common.util.DateUtils;
import com.yami.trading.huobi.websocket.constant.enums.EStockType;
import com.yami.trading.service.MarketOpenChecker;
import com.yami.trading.common.util.ThreadUtils;
import com.yami.trading.common.util.UTCDateUtils;
@@ -16,6 +22,7 @@
import com.yami.trading.service.data.RealtimeService;
import com.yami.trading.service.item.ItemService;
import com.yami.trading.service.syspara.SysparaService;
import lombok.Data;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -952,4 +959,49 @@
        }
        return result;
    }
    @Data
    class kData {
        long t;
        String c;
        String o;
        String h;
        String l;
        String v;
        String vo;
    }
    @Override
    public List<Kline> getKData(Item item, String interval) {
        try {
            EStockType eStockType = EStockType.US;
            Object object = HttpUtil.get(eStockType.stockUrl + "kline?pid=" + item.getStockCode() + "&interval=" + interval + "&key=" + eStockType.stockKey);
            Gson gson = new Gson();
            List<kData> dataList = gson.fromJson(object.toString(), new TypeToken<List<kData>>(){}.getType());
            logger.info("{}获取{}条K线" , item.getSymbol() ,dataList.size());
            Realtime realtime = DataCache.getRealtime(item.getSymbol());
            // 修改 List 中的最后一条数据
            kData lastData = dataList.get(dataList.size() - 1);
            lastData.setC(String.valueOf(realtime.getClose()));
            lastData.setO(String.valueOf(realtime.getOpen()));
            lastData.setH(String.valueOf(realtime.getHigh()));
            lastData.setL(String.valueOf(realtime.getLow()));
            List<Kline> list = new ArrayList<>();
            for (int i = 0; i < dataList.size(); i++) {
                kData kData = dataList.get(i);
                Kline kline = new Kline();
                kline.setTs(Long.valueOf(kData.getT() + "000"));
                kline.setClose(Double.valueOf(kData.getC()));
                kline.setOpen(Double.valueOf(kData.getO()));
                kline.setHigh(Double.valueOf(kData.getH()));
                kline.setLow(Double.valueOf(kData.getL()));
                list.add(kline);
            }
            return list;
        } catch (Exception e) {
            logger.error("getKData error", e);
        }
        return null;
    }
}