| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | @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()); |
| | |
| | | .chg(realtime.getChg()) |
| | | .type(item.getType()) |
| | | .category(item.getCategory()) |
| | | .pid(item.getStockCode()) |
| | | .build(); |
| | | list.add(dto); |
| | | } |
| | |
| | | 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 { |
| | |
| | | @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; |
| | |
| | | // })).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() |
| | |
| | | .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()); |