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