XnzqCompetitionResultServiceService.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package com.simuwang.manage.service.competition;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.collection.ListUtil;
  5. import cn.hutool.core.date.DateUtil;
  6. import com.simuwang.base.common.conts.DateConst;
  7. import com.simuwang.base.mapper.RcCompetitionResultMapper;
  8. import com.simuwang.base.pojo.dos.RcCompetitionResultDO;
  9. import com.simuwang.base.pojo.dto.competition.CompetitionBaseResultDTO;
  10. import com.simuwang.base.pojo.dto.competition.XnzqCompetitionResultDTO;
  11. import org.springframework.stereotype.Service;
  12. import java.util.Comparator;
  13. import java.util.List;
  14. import java.util.Map;
  15. import java.util.stream.Collectors;
  16. @Service
  17. public class XnzqCompetitionResultServiceService extends AbstractCompetitionResultService {
  18. private static final String FIRST_GROUP = "轻量组";
  19. private static final String SECOND_GROUP = "重量组";
  20. private static final List<Integer> STRATEGY_LIST = ListUtil.toList(1, 2, 3, 4, 5, 6);
  21. private final RcCompetitionResultMapper rcCompetitionResultMapper;
  22. private final FundStrategyService fundStrategyService;
  23. public XnzqCompetitionResultServiceService(RcCompetitionResultMapper rcCompetitionResultMapper, FundStrategyService fundStrategyService) {
  24. this.rcCompetitionResultMapper = rcCompetitionResultMapper;
  25. this.fundStrategyService = fundStrategyService;
  26. }
  27. @Override
  28. public boolean isSupport(Integer competitionId) {
  29. return competitionId != null && competitionId == 51;
  30. }
  31. @Override
  32. protected List<? extends CompetitionBaseResultDTO> getCompetitionResult(Integer competitionId, String period) {
  33. List<XnzqCompetitionResultDTO> competitionResultDTOList = CollUtil.newArrayList();
  34. List<RcCompetitionResultDO> resultDOList = rcCompetitionResultMapper.queryCompetitionResult(competitionId, period);
  35. if (CollUtil.isEmpty(resultDOList)) {
  36. return competitionResultDTOList;
  37. }
  38. // 策略名称
  39. Map<Integer, String> strategyNameMap = fundStrategyService.getStrategyName(competitionId);
  40. competitionResultDTOList = resultDOList.stream().map(e -> convertToResultDTO(e, strategyNameMap.get(e.getStrategy()))).toList();
  41. // 策略分组和排名降序输出
  42. return competitionResultDTOList.stream()
  43. .sorted(Comparator.comparing(XnzqCompetitionResultDTO::getStrategyName).reversed().thenComparing(XnzqCompetitionResultDTO::getRank))
  44. .collect(Collectors.toList());
  45. }
  46. private XnzqCompetitionResultDTO convertToResultDTO(RcCompetitionResultDO resultDO, String strategyName) {
  47. XnzqCompetitionResultDTO resultDTO = BeanUtil.copyProperties(resultDO, XnzqCompetitionResultDTO.class);
  48. resultDTO.setStrategyName(strategyName);
  49. resultDTO.setRegisterNumber(resultDO.getFundRegisterNumber());
  50. resultDTO.setStartPriceDate(DateUtil.format(resultDO.getPrePriceDate(), DateConst.YYYY_MM_DD));
  51. resultDTO.setStartCumulativeNavWithdrawal(resultDO.getPreCumulativeNavWithdrawal());
  52. resultDTO.setEndPriceDate(DateUtil.format(resultDO.getPriceDate(), DateConst.YYYY_MM_DD));
  53. resultDTO.setEndCumulativeNavWithdrawal(resultDO.getCumulativeNavWithdrawal());
  54. resultDTO.setMaxdown(resultDO.getMaxdrawdown());
  55. resultDTO.setSharpeRatio(resultDO.getSharperatio());
  56. resultDTO.setCalmarRatio(resultDO.getCalmarratio());
  57. resultDTO.setProductScale(resultDO.getProductScale());
  58. resultDTO.setSortinoRatio(resultDO.getSortinoratio());
  59. resultDTO.setAssetGroupName(getAssetGroupName(resultDO.getCompanyScale(), resultDO.getStrategy()));
  60. if (resultDO.getRank() == null) {
  61. resultDTO.setRank(999999);
  62. }
  63. return resultDTO;
  64. }
  65. private String getAssetGroupName(Integer companyAssetSize, Integer strategyId) {
  66. // 1:0-5亿 2:5-10亿 3:10-20亿 4:20-50亿 5:50-100亿 6:100亿以上
  67. if (STRATEGY_LIST.contains(strategyId)) {
  68. return companyAssetSize != null && companyAssetSize >= 4 ? FIRST_GROUP : SECOND_GROUP;
  69. } else {
  70. return companyAssetSize != null && companyAssetSize >= 3 ? FIRST_GROUP : SECOND_GROUP;
  71. }
  72. }
  73. }