From 870e7a04a73869a28d0d303bb16f202b8adfa7d5 Mon Sep 17 00:00:00 2001 From: Lxy Date: Mon, 26 Jan 2026 00:28:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=90=8E=E7=AB=AF=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E5=AE=8C=E6=88=90=EF=BC=9B=E5=BE=85=E7=BB=A7?= =?UTF-8?q?=E7=BB=AD=E4=BC=98=E5=8C=96=E6=88=96=E8=B0=83=E6=95=B4=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../newstocksystem/mapper/TTrendsMapper.java | 24 +++++++++ .../service/impl/TTrendsServiceImpl.java | 53 ++++++++++++------- .../mapper/newstocksystem/TTrendsMapper.xml | 29 ++++++++++ 3 files changed, 87 insertions(+), 19 deletions(-) diff --git a/newstock-system/src/main/java/com/ruoyi/newstocksystem/mapper/TTrendsMapper.java b/newstock-system/src/main/java/com/ruoyi/newstocksystem/mapper/TTrendsMapper.java index d79ff6c..c28f6aa 100644 --- a/newstock-system/src/main/java/com/ruoyi/newstocksystem/mapper/TTrendsMapper.java +++ b/newstock-system/src/main/java/com/ruoyi/newstocksystem/mapper/TTrendsMapper.java @@ -111,4 +111,28 @@ public interface TTrendsMapper * @return 排名 */ public Integer getIndustryRankByDate(java.util.Map params); + + /** + * 获取指定行业在指定日期范围内的趋势数据 + * + * @param params 参数map,包含momentumType、industryName、startDate、endDate + * @return 趋势数据列表 + */ + public List getTrendsByIndustryAndDateRange(java.util.Map params); + + /** + * 获取指定日期往前10个交易日的所有日期 + * + * @param params 参数map,包含momentumType、currentDate + * @return 交易日列表 + */ + public List getPreviousTradeDates(java.util.Map params); + + /** + * 获取指定日期和动量类型的所有趋势数据 + * + * @param tTrends 趋势对象,包含tradeDate和momentumType + * @return 趋势数据列表 + */ + public List getTrendsByDateAndType(TTrends tTrends); } \ No newline at end of file diff --git a/newstock-system/src/main/java/com/ruoyi/newstocksystem/service/impl/TTrendsServiceImpl.java b/newstock-system/src/main/java/com/ruoyi/newstocksystem/service/impl/TTrendsServiceImpl.java index 12e41cf..cafbd15 100644 --- a/newstock-system/src/main/java/com/ruoyi/newstocksystem/service/impl/TTrendsServiceImpl.java +++ b/newstock-system/src/main/java/com/ruoyi/newstocksystem/service/impl/TTrendsServiceImpl.java @@ -133,37 +133,52 @@ public class TTrendsServiceImpl implements TTrendsService @Override public List listTrendsSection(TTrends tTrends) { - // 1. 获取最近10个交易日 - List recentDays = tTrendsMapper.getRecentTradeDates(tTrends.getMomentumType()); - if (recentDays == null || recentDays.isEmpty()) { + // 1. 获取当前传入参数的所有趋势排名数据list + List currentDayTrends = tTrendsMapper.getTrendsByDateAndType(tTrends); + if (currentDayTrends == null || currentDayTrends.isEmpty()) { return new ArrayList<>(); } - // 2. 获取所有行业名称 - List industryNames = tTrendsMapper.getAllIndustryNames(tTrends.getMomentumType()); - if (industryNames == null || industryNames.isEmpty()) { + // 2. 获取当前日期往前10个交易日的所有日期 + Map dateParams = new HashMap<>(); + dateParams.put("momentumType", tTrends.getMomentumType()); + dateParams.put("currentDate", tTrends.getTradeDate()); + List previousDays = tTrendsMapper.getPreviousTradeDates(dateParams); + if (previousDays == null || previousDays.isEmpty()) { return new ArrayList<>(); } // 3. 准备返回结果列表 List> resultList = new ArrayList<>(); - // 4. 遍历每个行业,获取其在每个交易日的排名 - for (String industryName : industryNames) { + // 4. 遍历当前日期的每个行业,获取其在这10个交易日的排名 + for (TTrends currentTrend : currentDayTrends) { + String industryName = currentTrend.getIndustryName(); Map industryData = new HashMap<>(); industryData.put("industryName", industryName); - // 遍历每个交易日,获取排名 - for (int i = 0; i < recentDays.size(); i++) { - Date tradeDate = recentDays.get(i); - Map params = new HashMap<>(); - params.put("momentumType", tTrends.getMomentumType()); - params.put("industryName", industryName); - params.put("tradeDate", tradeDate); - - Integer rank = tTrendsMapper.getIndustryRankByDate(params); - // 如果没有排名数据,设置为0 - industryData.put("day_" + (i + 1), rank != null ? rank : 0); + // 5. 获取该行业在这10个交易日的所有趋势数据 + Map trendParams = new HashMap<>(); + trendParams.put("momentumType", tTrends.getMomentumType()); + trendParams.put("industryName", industryName); + trendParams.put("startDate", previousDays.get(previousDays.size() - 1)); // 最早的日期 + trendParams.put("endDate", previousDays.get(0)); // 最近的日期 + + List industryTrends = tTrendsMapper.getTrendsByIndustryAndDateRange(trendParams); + + // 6. 将行业趋势数据转换为日期到排名的映射 + Map dateRankMap = new HashMap<>(); + if (industryTrends != null && !industryTrends.isEmpty()) { + for (TTrends trend : industryTrends) { + dateRankMap.put(trend.getTradeDate(), trend.getRank()); + } + } + + // 7. 遍历10个交易日,填充排名数据,缺少的数据用-1表示 + for (int i = 0; i < previousDays.size(); i++) { + Date tradeDate = previousDays.get(i); + Integer rank = dateRankMap.get(tradeDate); + industryData.put("day_" + (i + 1), rank != null ? rank : -1); } resultList.add(industryData); diff --git a/newstock-system/src/main/resources/mapper/newstocksystem/TTrendsMapper.xml b/newstock-system/src/main/resources/mapper/newstocksystem/TTrendsMapper.xml index 9289fd9..f9c829d 100644 --- a/newstock-system/src/main/resources/mapper/newstocksystem/TTrendsMapper.xml +++ b/newstock-system/src/main/resources/mapper/newstocksystem/TTrendsMapper.xml @@ -160,4 +160,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND industry_name = #{industryName} AND trade_date = #{tradeDate} + + + + + + + + + \ No newline at end of file