1
zyy3
2025-11-06 5880c05eaaaf5350cd4a69afeaf197e4aea70156
1
4 files modified
83 ■■■■■ changed files
trading-order-admin/src/main/java/com/yami/trading/admin/task/StockTask.java 8 ●●●● patch | view | raw | blame | history
trading-order-admin/src/main/java/com/yami/trading/api/controller/KlineController.java 8 ●●●● patch | view | raw | blame | history
trading-order-admin/src/main/java/com/yami/trading/api/controller/RealtimeController.java 30 ●●●●● patch | view | raw | blame | history
trading-order-huobi/src/main/java/com/yami/trading/huobi/data/internal/KlineServiceImpl.java 37 ●●●● patch | view | raw | blame | history
trading-order-admin/src/main/java/com/yami/trading/admin/task/StockTask.java
@@ -215,6 +215,12 @@
            if (list.isEmpty()) {
                return;
            }
            /*list.forEach( x-> {
                if (x.getSymbol().equalsIgnoreCase("IONM")) {
                    System.out.println(x);
                    System.out.println(x);
                }
            });*/
            List<Item> indicesList = itemService.list(new QueryWrapper<Item>()
                    .eq("type", Item.indices));
@@ -259,7 +265,7 @@
    public static void main(String[] args) {
        StockTask task = new StockTask();
        task.loadAllStock(EStockType.US);
        task.initAllStock(EStockType.US);
    }
    @Override
trading-order-admin/src/main/java/com/yami/trading/api/controller/KlineController.java
@@ -71,8 +71,12 @@
            if (!Item.cryptos.equals(bySymbol.getType())) {
                if (bySymbol.getType().equalsIgnoreCase(Item.US_STOCKS)) {
                    data = klineService.getKData(bySymbol, line);
                    formatKlineTimestamps(data, line);
                    return Result.succeed(this.build(data, line, symbol));
                    if (!data.isEmpty()) {
                        formatKlineTimestamps(data, line);
                        return Result.succeed(this.build(data, line, symbol));
                    } else {
                        return Result.succeed(null);
                    }
                } else {
                    return getKlineForNonCryptos(bySymbol, line, symbol);
                }
trading-order-admin/src/main/java/com/yami/trading/api/controller/RealtimeController.java
@@ -1,7 +1,6 @@
package com.yami.trading.api.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.text.split.SplitIter;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.yami.trading.bean.data.domain.Realtime;
@@ -10,7 +9,6 @@
import com.yami.trading.bean.item.domain.Item;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.exception.YamiShopBindException;
import com.yami.trading.common.util.StringUtils;
import com.yami.trading.huobi.data.DataCache;
import com.yami.trading.service.data.DataService;
import com.yami.trading.service.item.ItemService;
@@ -318,34 +316,26 @@
                    itemsTotal = new ArrayList<>(itemList).stream().filter(item -> item.getType().equals(type)
                            && item.getCategory().equals(finalCategory)).collect(Collectors.toList());
                }
                if (pageNo * pageSize - pageSize < itemsTotal.size()) {
                    int pages = itemsTotal.size() % pageSize == 0 ? itemsTotal.size() / pageSize : itemsTotal.size() / pageSize + 1;
                    int start = pageNo <= 0 ? 0 : (pageNo > pages ? (pages - 1) * pageSize : (pageNo - 1) * pageSize);
                    items = itemsTotal.stream().skip(start).limit(pageSize).collect(Collectors.toList());
                }
            } else if (null != type) {
                itemsTotal = new ArrayList<>(itemList).stream().filter(item -> item.getType().equals(type))
                        .collect(Collectors.toList());
                if (pageNo * pageSize - pageSize < itemsTotal.size()) {
                    int pages = itemsTotal.size() % pageSize == 0 ? itemsTotal.size() / pageSize : itemsTotal.size() / pageSize + 1;
                    int start = pageNo <= 0 ? 0 : (pageNo > pages ? (pages - 1) * pageSize : (pageNo - 1) * pageSize);
                    items = itemsTotal.stream().skip(start).limit(pageSize).collect(Collectors.toList());
                    items.forEach(x -> x.setCategory("prominent"));
                }
                itemsTotal.forEach(x -> x.setCategory("prominent"));
            } else {
                itemsTotal = new ArrayList<>(itemList);
                List<String> symbols = Item.types;
                for (String symbol : symbols) {
                    List<Item> list = itemsTotal.stream().filter(item -> symbol.equals(item.getType())).limit(5).collect(Collectors.toList());
                    if (list.size() > 0) {
                        items.addAll(list);
                        itemsTotal.addAll(list);
                    }
                }
            }
            List<QueryRealtimeDTO> list = new ArrayList<>();
            assert items != null;
            items.forEach(item -> {
            assert itemsTotal != null;
            List<QueryRealtimeDTO> finalList = list;
            itemsTotal.forEach(item -> {
                Realtime realtime = DataCache.getRealtime(item.getSymbol());
                if (realtime != null) {
                    QueryRealtimeDTO dto = QueryRealtimeDTO.builder()
@@ -367,13 +357,19 @@
                            .category(item.getCategory())
                            .type(item.getType())
                            .build();
                    list.add(dto);
                    finalList.add(dto);
                } else {
                    log.error("获取行情接口,realtime is null;币种->{}", item.getSymbol());
                }
            });
            list = finalList;
            if (!list.isEmpty()) {
                list.sort(Comparator.comparing(QueryRealtimeDTO::getChangeRatio).reversed());
                if (pageNo * pageSize - pageSize < itemsTotal.size()) {
                    int pages = itemsTotal.size() % pageSize == 0 ? itemsTotal.size() / pageSize : itemsTotal.size() / pageSize + 1;
                    int start = pageNo <= 0 ? 0 : (pageNo > pages ? (pages - 1) * pageSize : (pageNo - 1) * pageSize);
                    list = list.stream().skip(start).limit(pageSize).collect(Collectors.toList());
                }
            }
            Result<List<QueryRealtimeDTO>> ok = Result.ok(list);
            ok.setTotal((long) itemsTotal.size());
trading-order-huobi/src/main/java/com/yami/trading/huobi/data/internal/KlineServiceImpl.java
@@ -979,25 +979,28 @@
            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);
            if (!dataList.isEmpty() && dataList.size() > 0) {
                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()));
                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);