1
zyy
2025-11-07 865464c7b3aa65eba7469a256cfd01af64ba581f
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;
@@ -54,6 +52,9 @@
   @GetMapping("api/hobi!getRealtime.action")
   public Result<List<Realtime>> getRealtime(@RequestParam String symbol) {
      try {
         if (symbol == null || symbol.isEmpty()){
            return Result.succeed();
         }
         List<Realtime> data = this.dataService.realtime(symbol);
         data.forEach(d->{
            Item bySymbol = itemService.findBySymbol(d.getSymbol());
@@ -213,6 +214,7 @@
                     .chg(realtime.getChg())
                     .type(item.getType())
                     .category(item.getCategory())
                     .pid(item.getStockCode())
                     .build();
               list.add(dto);
            }
@@ -257,10 +259,12 @@
         items.addAll(itemsTop);
      } else if ("US-stocks".equals(type)) {
         // 只查询指数top6
         items = itemService.cacheGetAll().stream().filter(item -> "global".equals(item.getCategory())).limit(3).collect(Collectors.toList());
         List<Item> itemsTop = itemService.cacheGetAll().stream().filter(item -> "technology,prominent".equals(item.getCategory())).sorted(Comparator.comparing(Item::getSorted).reversed()).limit(size)
         items = itemService.cacheGetAll().stream().filter(item -> item.getType().equalsIgnoreCase(Item.US_STOCKS))
               .sorted(Comparator.comparing(Item::getSorted).reversed())
               .limit(3).collect(Collectors.toList());
         /*List<Item> itemsTop = itemService.cacheGetAll().stream().filter(item -> "technology,prominent".equals(item.getCategory())).sorted(Comparator.comparing(Item::getSorted).reversed()).limit(size)
               .collect(Collectors.toList());
         items.addAll(itemsTop);
         items.addAll(itemsTop);*/
      }
      // 加密货币、外汇、 top4
      else {
@@ -282,11 +286,14 @@
                                         @RequestParam(required = false) Integer pageNo,
                                         @RequestParam(required = false) Integer pageSize) {
      try {
         pageSize = null == pageSize ? 1000 : pageSize;
         pageSize = null == pageSize ? 50 : pageSize;
         List<Item> itemsTotal;
         List<Item> items = new ArrayList<>();
         //按字符串排序
         List<Item> itemList = itemService.cacheGetAll().stream().sorted(Comparator.comparing(Item::getSorted).reversed()).collect(Collectors.toList());
         if (type != null && type.equalsIgnoreCase(Item.US_STOCKS)) {
            category = null;
         }
         //按数字排序
//         List<Item> itemList = itemService.cacheGetAll().stream().sorted(Comparator.comparing(Item::getSorted, (x,y)->{
//            int xInt = 0;
@@ -301,41 +308,35 @@
//         })).collect(Collectors.toList());
         if (null != type && null != category) {
            String finalCategory = category;
            // 知名类 需要模糊查询
            if ("prominent".equals(category)) {
               itemsTotal = new ArrayList<>(itemList).stream().filter(item -> item.getType().equals(type)
                     && item.getCategory().contains(category)).collect(Collectors.toList());
                     && item.getCategory().contains(finalCategory)).collect(Collectors.toList());
            } else {
               itemsTotal = new ArrayList<>(itemList).stream().filter(item -> item.getType().equals(type)
                     && item.getCategory().equals(category)).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());
                     && item.getCategory().equals(finalCategory)).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());
            }
            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()
@@ -356,12 +357,22 @@
                     .chg(realtime.getChg())
                     .category(item.getCategory())
                     .type(item.getType())
                     .pid(item.getStockCode())
                     .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());
         return ok;