fix: 后端数据组织完成;待继续优化或调整前端显示

dev_refactor_0120_qoder
Lxy 4 months ago
parent e2b609bf52
commit 870e7a04a7

@ -111,4 +111,28 @@ public interface TTrendsMapper
* @return * @return
*/ */
public Integer getIndustryRankByDate(java.util.Map<String, Object> params); public Integer getIndustryRankByDate(java.util.Map<String, Object> params);
/**
*
*
* @param params mapmomentumTypeindustryNamestartDateendDate
* @return
*/
public List<TTrends> getTrendsByIndustryAndDateRange(java.util.Map<String, Object> params);
/**
* 10
*
* @param params mapmomentumTypecurrentDate
* @return
*/
public List<Date> getPreviousTradeDates(java.util.Map<String, Object> params);
/**
*
*
* @param tTrends tradeDatemomentumType
* @return
*/
public List<TTrends> getTrendsByDateAndType(TTrends tTrends);
} }

@ -133,37 +133,52 @@ public class TTrendsServiceImpl implements TTrendsService
@Override @Override
public List<?> listTrendsSection(TTrends tTrends) public List<?> listTrendsSection(TTrends tTrends)
{ {
// 1. 获取最近10个交易日 // 1. 获取当前传入参数的所有趋势排名数据list
List<Date> recentDays = tTrendsMapper.getRecentTradeDates(tTrends.getMomentumType()); List<TTrends> currentDayTrends = tTrendsMapper.getTrendsByDateAndType(tTrends);
if (recentDays == null || recentDays.isEmpty()) { if (currentDayTrends == null || currentDayTrends.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
} }
// 2. 获取所有行业名称 // 2. 获取当前日期往前10个交易日的所有日期
List<String> industryNames = tTrendsMapper.getAllIndustryNames(tTrends.getMomentumType()); Map<String, Object> dateParams = new HashMap<>();
if (industryNames == null || industryNames.isEmpty()) { dateParams.put("momentumType", tTrends.getMomentumType());
dateParams.put("currentDate", tTrends.getTradeDate());
List<Date> previousDays = tTrendsMapper.getPreviousTradeDates(dateParams);
if (previousDays == null || previousDays.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
} }
// 3. 准备返回结果列表 // 3. 准备返回结果列表
List<Map<String, Object>> resultList = new ArrayList<>(); List<Map<String, Object>> resultList = new ArrayList<>();
// 4. 遍历每个行业,获取其在每个交易日的排名 // 4. 遍历当前日期的每个行业获取其在这10个交易日的排名
for (String industryName : industryNames) { for (TTrends currentTrend : currentDayTrends) {
String industryName = currentTrend.getIndustryName();
Map<String, Object> industryData = new HashMap<>(); Map<String, Object> industryData = new HashMap<>();
industryData.put("industryName", industryName); industryData.put("industryName", industryName);
// 遍历每个交易日,获取排名 // 5. 获取该行业在这10个交易日的所有趋势数据
for (int i = 0; i < recentDays.size(); i++) { Map<String, Object> trendParams = new HashMap<>();
Date tradeDate = recentDays.get(i); trendParams.put("momentumType", tTrends.getMomentumType());
Map<String, Object> params = new HashMap<>(); trendParams.put("industryName", industryName);
params.put("momentumType", tTrends.getMomentumType()); trendParams.put("startDate", previousDays.get(previousDays.size() - 1)); // 最早的日期
params.put("industryName", industryName); trendParams.put("endDate", previousDays.get(0)); // 最近的日期
params.put("tradeDate", tradeDate);
List<TTrends> industryTrends = tTrendsMapper.getTrendsByIndustryAndDateRange(trendParams);
Integer rank = tTrendsMapper.getIndustryRankByDate(params);
// 如果没有排名数据设置为0 // 6. 将行业趋势数据转换为日期到排名的映射
industryData.put("day_" + (i + 1), rank != null ? rank : 0); Map<Date, Integer> 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); resultList.add(industryData);

@ -160,4 +160,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND industry_name = #{industryName} AND industry_name = #{industryName}
AND trade_date = #{tradeDate} AND trade_date = #{tradeDate}
</select> </select>
<!-- 获取指定行业在指定日期范围内的趋势数据 -->
<select id="getTrendsByIndustryAndDateRange" parameterType="map" resultMap="TTrendsResult">
SELECT *
FROM t_trends
WHERE momentum_type = #{momentumType}
AND industry_name = #{industryName}
AND trade_date BETWEEN #{startDate} AND #{endDate}
ORDER BY trade_date DESC
</select>
<!-- 获取指定日期往前10个交易日的所有日期 -->
<select id="getPreviousTradeDates" parameterType="map" resultType="Date">
SELECT DISTINCT trade_date
FROM t_trends
WHERE momentum_type = #{momentumType}
AND trade_date &lt;= #{currentDate}
ORDER BY trade_date DESC
LIMIT 10
</select>
<!-- 获取指定日期和动量类型的所有趋势数据 -->
<select id="getTrendsByDateAndType" parameterType="TTrends" resultMap="TTrendsResult">
SELECT *
FROM t_trends
WHERE trade_date = #{tradeDate}
AND momentum_type = #{momentumType}
ORDER BY `rank`
</select>
</mapper> </mapper>
Loading…
Cancel
Save