FzzqCompetitionResultServiceService.java 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.simuwang.manage.service.competition;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.map.MapUtil;
  4. import com.simuwang.base.config.CompetitionConfig;
  5. import com.simuwang.base.mapper.RzFzzq2ResultMapper;
  6. import com.simuwang.base.pojo.dto.competition.CompetitionBaseResultDTO;
  7. import com.simuwang.base.pojo.dto.competition.FzzqCompetitionResultDTO;
  8. import org.springframework.stereotype.Service;
  9. import java.util.Comparator;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.stream.Collectors;
  13. @Service
  14. public class FzzqCompetitionResultServiceService extends AbstractCompetitionResultService {
  15. private static final Map<Integer, String> STRATEGY_ID_NAME_MAP = MapUtil.newHashMap();
  16. static {
  17. STRATEGY_ID_NAME_MAP.put(1, "主观多头策略");
  18. STRATEGY_ID_NAME_MAP.put(2, "量化多头策略");
  19. STRATEGY_ID_NAME_MAP.put(3, "相对价值策略");
  20. STRATEGY_ID_NAME_MAP.put(4, "CTA策略");
  21. STRATEGY_ID_NAME_MAP.put(5, "复合策略");
  22. }
  23. private final CompetitionConfig competitionConfig;
  24. private final RzFzzq2ResultMapper fzzq2ResultMapper;
  25. public FzzqCompetitionResultServiceService(CompetitionConfig competitionConfig, RzFzzq2ResultMapper fzzq2ResultMapper) {
  26. this.competitionConfig = competitionConfig;
  27. this.fzzq2ResultMapper = fzzq2ResultMapper;
  28. }
  29. @Override
  30. public boolean isSupport(Integer competitionId) {
  31. return competitionId != null && competitionId == 48;
  32. }
  33. @Override
  34. protected List<? extends CompetitionBaseResultDTO> getCompetitionResult() {
  35. Integer competitionId = competitionConfig.getId();
  36. List<FzzqCompetitionResultDTO> competitionResultDTOList = fzzq2ResultMapper.getResult();
  37. if (CollUtil.isEmpty(competitionResultDTOList)) {
  38. return CollUtil.newArrayList();
  39. }
  40. // 策略名称和排名
  41. Map<Integer, List<FzzqCompetitionResultDTO>> strategyResultDTOList = competitionResultDTOList.stream().collect(Collectors.groupingBy(FzzqCompetitionResultDTO::getStrategy));
  42. for (Map.Entry<Integer, List<FzzqCompetitionResultDTO>> resultEntry : strategyResultDTOList.entrySet()) {
  43. Integer strategy = resultEntry.getKey();
  44. String strategyName = STRATEGY_ID_NAME_MAP.get(strategy);
  45. List<FzzqCompetitionResultDTO> resultDTOList = resultEntry.getValue();
  46. // 按照分数降序排序
  47. resultDTOList.sort(Comparator.comparing(FzzqCompetitionResultDTO::getScore, Comparator.nullsFirst(Comparator.naturalOrder())).reversed());
  48. // 计算排名并设置
  49. int rank = 1;
  50. for (int i = 0; i < resultDTOList.size(); i++) {
  51. FzzqCompetitionResultDTO dto = resultDTOList.get(i);
  52. dto.setStrategyName(strategyName);
  53. if (dto.getScore() != null) {
  54. dto.setRank(rank);
  55. rank = i + 1;
  56. } else {
  57. // 没有分数的基金排名为:999999
  58. dto.setRank(999999);
  59. }
  60. }
  61. }
  62. // 策略分组和排名降序输出
  63. return competitionResultDTOList.stream()
  64. .sorted(Comparator.comparing(FzzqCompetitionResultDTO::getStrategyName).reversed().thenComparing(FzzqCompetitionResultDTO::getRank))
  65. .collect(Collectors.toList());
  66. }
  67. }