1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package com.simuwang.manage.service.competition;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.map.MapUtil;
- import com.simuwang.base.config.CompetitionConfig;
- import com.simuwang.base.mapper.RzFzzq2ResultMapper;
- import com.simuwang.base.pojo.dto.competition.CompetitionBaseResultDTO;
- import com.simuwang.base.pojo.dto.competition.FzzqCompetitionResultDTO;
- import org.springframework.stereotype.Service;
- import java.util.Comparator;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- @Service
- public class FzzqCompetitionResultServiceService extends AbstractCompetitionResultService {
- private static final Map<Integer, String> STRATEGY_ID_NAME_MAP = MapUtil.newHashMap();
- static {
- STRATEGY_ID_NAME_MAP.put(1, "主观多头策略");
- STRATEGY_ID_NAME_MAP.put(2, "量化多头策略");
- STRATEGY_ID_NAME_MAP.put(3, "相对价值策略");
- STRATEGY_ID_NAME_MAP.put(4, "CTA策略");
- STRATEGY_ID_NAME_MAP.put(5, "复合策略");
- }
- private final CompetitionConfig competitionConfig;
- private final RzFzzq2ResultMapper fzzq2ResultMapper;
- public FzzqCompetitionResultServiceService(CompetitionConfig competitionConfig, RzFzzq2ResultMapper fzzq2ResultMapper) {
- this.competitionConfig = competitionConfig;
- this.fzzq2ResultMapper = fzzq2ResultMapper;
- }
- @Override
- public boolean isSupport(Integer competitionId) {
- return competitionId != null && competitionId == 48;
- }
- @Override
- protected List<? extends CompetitionBaseResultDTO> getCompetitionResult() {
- Integer competitionId = competitionConfig.getId();
- List<FzzqCompetitionResultDTO> competitionResultDTOList = fzzq2ResultMapper.getResult();
- if (CollUtil.isEmpty(competitionResultDTOList)) {
- return CollUtil.newArrayList();
- }
- // 策略名称和排名
- Map<Integer, List<FzzqCompetitionResultDTO>> strategyResultDTOList = competitionResultDTOList.stream().collect(Collectors.groupingBy(FzzqCompetitionResultDTO::getStrategy));
- for (Map.Entry<Integer, List<FzzqCompetitionResultDTO>> resultEntry : strategyResultDTOList.entrySet()) {
- Integer strategy = resultEntry.getKey();
- String strategyName = STRATEGY_ID_NAME_MAP.get(strategy);
- List<FzzqCompetitionResultDTO> resultDTOList = resultEntry.getValue();
- // 按照分数降序排序
- resultDTOList.sort(Comparator.comparing(FzzqCompetitionResultDTO::getScore, Comparator.nullsFirst(Comparator.naturalOrder())).reversed());
- // 计算排名并设置
- int rank = 1;
- for (int i = 0; i < resultDTOList.size(); i++) {
- FzzqCompetitionResultDTO dto = resultDTOList.get(i);
- dto.setStrategyName(strategyName);
- if (dto.getScore() != null) {
- dto.setRank(rank);
- rank = i + 1;
- } else {
- // 没有分数的基金排名为:999999
- dto.setRank(999999);
- }
- }
- }
- // 策略分组和排名降序输出
- return competitionResultDTOList.stream()
- .sorted(Comparator.comparing(FzzqCompetitionResultDTO::getStrategyName).reversed().thenComparing(FzzqCompetitionResultDTO::getRank))
- .collect(Collectors.toList());
- }
- }
|