@Cacheable(value = "KLineBuss.querySeriesByCode") public Series querySeriesByCode(String code, int month) { Futures prod = productBuss.queryFuturesByCode(code); if (prod == null) { return Series.EMPTY; } else { List<KLine> kLineList = null; if (month < 0) { kLineList = this.queryAscByCode(code); } else { Calendar cal = Calendar.getInstance(); Date endDt = cal.getTime(); cal.add(Calendar.MONTH, -month); Date startDt = cal.getTime(); kLineList = kLineRepos.findByCodeAndDtBetweenOrderByDtAsc(code, startDt, endDt); } List<Price> prices = kLineList .stream() .map( kLine -> { return new Price(kLine.getDt(), kLine.getEndPrice()); }) .collect(Collectors.toList()); return new Series(prod.getCode(), prod.getName(), prices); } }
public ProdDailyPrice queryProdDailyPrice(String code, int month) { Futures prod = productBuss.queryFuturesByCode(code); if (prod == null) { return null; } else { List<KLine> kLineList = null; List<ProdIndex> indexList = null; if (month < 0) { // 所有 kLineList = kLineRepos.findByCodeOrderByDtAsc(code); indexList = prodIndexRepos.findByCodeOrderByDtAsc(code); } else { // 指定月数 Calendar cal = Calendar.getInstance(); Date endDt = cal.getTime(); cal.add(Calendar.MONTH, -month); Date startDt = cal.getTime(); kLineList = kLineRepos.findByCodeAndDtBetweenOrderByDtAsc(code, startDt, endDt); indexList = prodIndexRepos.findByCodeAndDtBetweenOrderByDtAsc(code, startDt, endDt); } List<Price> mainPriceList = kLineList .stream() .map( kLine -> { return new Price(kLine.getDt(), kLine.getEndPrice()); }) .collect(Collectors.toList()); List<Price> indexPriceList = indexList .stream() .map( index -> { return new Price(index.getDt(), index.getPrice()); }) .collect(Collectors.toList()); return new ProdDailyPrice(prod.getCode(), prod.getName(), mainPriceList, indexPriceList); } }
@Cacheable(value = "KLineBuss.queryAllGroup") public List<KLineGroup> queryAllGroup() { Map<Date, Map<String, KLine>> kLineMap = kLineRepos .findAll() .stream() .collect( Collectors.groupingBy( KLine::getDt, Collectors.toMap(KLine::getCode, kLine -> kLine))); List<KLineGroup> list = kLineMap .entrySet() .stream() .map(entry -> new KLineGroup(entry.getKey(), entry.getValue())) .sorted() .collect(Collectors.toList()); return Collections.unmodifiableList(list); }
@Cacheable(value = "KLineBuss.queryAscByCode") public List<KLine> queryAscByCode(String code) { return Collections.unmodifiableList(kLineRepos.findByCodeOrderByDtAsc(code)); }