新版仿ok交易所-后端
1
zyy
2026-05-29 7289903c3b78d4e6e141e3a5e976ddef52e9fc97
trading-order-huobi/src/main/java/com.yami.trading.huobi/data/internal/RemoteDataServiceImpl.java
@@ -73,10 +73,6 @@
    @Override
    public List<Kline> kline(String symbol, String line) {
        Item bySymbol = itemService.findBySymbol(symbol);
        if(Item.cryptos.equals(bySymbol.getType())){
            return klineCryptos(symbol, line);
        }
        KlineTimeObject timeObject = DataCache.getKline(symbol, line);
        List<Kline> list = new ArrayList<Kline>();
        if (timeObject != null) {
@@ -85,7 +81,7 @@
        List<Kline> list_clone = new ArrayList<Kline>();
        try {
            for (int i = 0; i < list.size(); i++) {
                if(list.get(i) == null){
                if (list.get(i) == null) {
                    continue;
                }
                Kline kline = (Kline) list.get(i).clone();
@@ -96,71 +92,61 @@
        }
        Realtime realtime = DataCache.getLatestRealTime(symbol);
        if (realtime != null) {
            Kline kline = null;
            if (KlineConstant.PERIOD_1MIN.equals(line)) {
                kline = klineService.bulidKline1Minute(realtime, KlineConstant.PERIOD_1MIN);
            } else if (KlineConstant.PERIOD_5MIN.equals(line)) {
                kline = klineService.bulidKline5Minute(realtime, KlineConstant.PERIOD_5MIN);
            } else if (KlineConstant.PERIOD_15MIN.equals(line)) {
                kline = klineService.bulidKline15Minute(realtime, KlineConstant.PERIOD_15MIN);
            } else if (KlineConstant.PERIOD_30MIN.equals(line)) {
                kline = klineService.bulidKline30Minute(realtime, KlineConstant.PERIOD_30MIN);
            } else if (KlineConstant.PERIOD_60MIN.equals(line)) {
                kline = klineService.bulidKline60Minute(realtime, KlineConstant.PERIOD_60MIN);
            } else if (KlineConstant.PERIOD_4HOUR.equals(line)) {
                kline = klineService.bulidKline4Hour(realtime, KlineConstant.PERIOD_4HOUR);
            } else if (KlineConstant.PERIOD_1DAY.equals(line)) {
                kline = klineService.bulidKline1Day(realtime, KlineConstant.PERIOD_1DAY);
            } else if (KlineConstant.PERIOD_5DAY.equals(line)) {
                kline = klineService.bulidKline5Day(realtime, KlineConstant.PERIOD_5DAY);
            } else if (KlineConstant.PERIOD_1WEEK.equals(line)) {
                kline = klineService.bulidKline1Week(realtime, KlineConstant.PERIOD_1WEEK);
            } else if (KlineConstant.PERIOD_1MON.equals(line)) {
                kline = klineService.bulidKline1Mon(realtime, KlineConstant.PERIOD_1MON);
            } else if (KlineConstant.PERIOD_QUARTER.equals(line)) {
                kline = klineService.bulidKline1Mon(realtime, KlineConstant.PERIOD_QUARTER);
            } else if (KlineConstant.PERIOD_YEAR.equals(line)) {
                kline = klineService.bulidKline1Mon(realtime, KlineConstant.PERIOD_YEAR);
            }
            if (null != kline) {
                list_clone.add(kline);
            }
        if (realtime == null) {
            realtime = DataCache.getRealtime(symbol);
        }
        // 按时间升序
        if (realtime != null) {
            appendOrReplaceKline(list_clone, buildCurrentKline(realtime, line));
        }
        Collections.sort(list_clone);
        return list_clone;
    }
    private Kline buildCurrentKline(Realtime realtime, String line) {
        if (KlineConstant.PERIOD_1MIN.equals(line)) {
            return klineService.bulidKline1Minute(realtime, KlineConstant.PERIOD_1MIN);
        } else if (KlineConstant.PERIOD_5MIN.equals(line)) {
            return klineService.bulidKline5Minute(realtime, KlineConstant.PERIOD_5MIN);
        } else if (KlineConstant.PERIOD_15MIN.equals(line)) {
            return klineService.bulidKline15Minute(realtime, KlineConstant.PERIOD_15MIN);
        } else if (KlineConstant.PERIOD_30MIN.equals(line)) {
            return klineService.bulidKline30Minute(realtime, KlineConstant.PERIOD_30MIN);
        } else if (KlineConstant.PERIOD_60MIN.equals(line)) {
            return klineService.bulidKline60Minute(realtime, KlineConstant.PERIOD_60MIN);
        } else if (KlineConstant.PERIOD_4HOUR.equals(line)) {
            return klineService.bulidKline4Hour(realtime, KlineConstant.PERIOD_4HOUR);
        } else if (KlineConstant.PERIOD_1DAY.equals(line)) {
            return klineService.bulidKline1Day(realtime, KlineConstant.PERIOD_1DAY);
        } else if (KlineConstant.PERIOD_5DAY.equals(line)) {
            return klineService.bulidKline5Day(realtime, KlineConstant.PERIOD_5DAY);
        } else if (KlineConstant.PERIOD_1WEEK.equals(line)) {
            return klineService.bulidKline1Week(realtime, KlineConstant.PERIOD_1WEEK);
        } else if (KlineConstant.PERIOD_1MON.equals(line)) {
            return klineService.bulidKline1Mon(realtime, KlineConstant.PERIOD_1MON);
        } else if (KlineConstant.PERIOD_QUARTER.equals(line)) {
            return klineService.bulidKlineQuarter(realtime, KlineConstant.PERIOD_QUARTER);
        } else if (KlineConstant.PERIOD_YEAR.equals(line)) {
            return klineService.bulidKlineYear(realtime, KlineConstant.PERIOD_YEAR);
        }
        return null;
    }
    public List<Kline> klineCryptos(String symbol, String line) {
        KlineTimeObject timeObject = DataCache.getKline(symbol, line);
        List<Kline> list = new ArrayList<Kline>();
        if (timeObject != null) {
            list = timeObject.getKline();
        return kline(symbol, line);
    }
    private void appendOrReplaceKline(List<Kline> list, Kline kline) {
        if (kline == null) {
            return;
        }
        List<Kline> list_clone = new ArrayList<Kline>();
        try {
            for (int i = 0; i < list.size(); i++) {
                Kline kline = (Kline) list.get(i).clone();
                list_clone.add(kline);
        for (int i = list.size() - 1; i >= 0; i--) {
            Kline existing = list.get(i);
            if (existing.getTs() != null && existing.getTs().equals(kline.getTs())) {
                list.set(i, kline);
                return;
            }
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        Realtime realtime = DataCache.getRealtime(symbol);
        Kline hobiOne = DataCache.getKline_hobi().get(symbol + "_" + line);
        Kline lastOne = null;
        if (list != null && list.size() > 0) {
            lastOne = list.get(list.size() - 1);
        }
        if (realtime != null && hobiOne != null && lastOne != null) {
            list_clone.add(this.klineService.bulidKline(realtime, lastOne, hobiOne, line));
        }
        Collections.sort(list_clone); // 按时间升序
        return list_clone;
        list.add(kline);
    }
    @Override