package com.simuwang.manage.service.competition; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateUtil; import com.simuwang.base.common.conts.DateConst; import com.simuwang.base.mapper.RcCompetitionResultMapper; import com.simuwang.base.pojo.dos.RcCompetitionResultDO; import com.simuwang.base.pojo.dto.competition.CompetitionBaseResultDTO; import com.simuwang.base.pojo.dto.competition.XnzqCompetitionResultDTO; 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 XnzqCompetitionResultServiceService extends AbstractCompetitionResultService { private static final String FIRST_GROUP = "轻量组"; private static final String SECOND_GROUP = "重量组"; private static final List STRATEGY_LIST = ListUtil.toList(1, 2, 3, 4, 5, 6); private final RcCompetitionResultMapper rcCompetitionResultMapper; private final FundStrategyService fundStrategyService; public XnzqCompetitionResultServiceService(RcCompetitionResultMapper rcCompetitionResultMapper, FundStrategyService fundStrategyService) { this.rcCompetitionResultMapper = rcCompetitionResultMapper; this.fundStrategyService = fundStrategyService; } @Override public boolean isSupport(Integer competitionId) { return competitionId != null && competitionId == 51; } @Override protected List getCompetitionResult(Integer competitionId, String period) { List competitionResultDTOList = CollUtil.newArrayList(); List resultDOList = rcCompetitionResultMapper.queryCompetitionResult(competitionId, period); if (CollUtil.isEmpty(resultDOList)) { return competitionResultDTOList; } // 策略名称 Map strategyNameMap = fundStrategyService.getStrategyName(competitionId); competitionResultDTOList = resultDOList.stream().map(e -> convertToResultDTO(e, strategyNameMap.get(e.getStrategy()))).toList(); // 策略分组和排名降序输出 return competitionResultDTOList.stream() .sorted(Comparator.comparing(XnzqCompetitionResultDTO::getStrategyName).reversed().thenComparing(XnzqCompetitionResultDTO::getRank)) .collect(Collectors.toList()); } private XnzqCompetitionResultDTO convertToResultDTO(RcCompetitionResultDO resultDO, String strategyName) { XnzqCompetitionResultDTO resultDTO = BeanUtil.copyProperties(resultDO, XnzqCompetitionResultDTO.class); resultDTO.setStrategyName(strategyName); resultDTO.setRegisterNumber(resultDO.getFundRegisterNumber()); resultDTO.setStartPriceDate(DateUtil.format(resultDO.getPrePriceDate(), DateConst.YYYY_MM_DD)); resultDTO.setStartCumulativeNavWithdrawal(resultDO.getPreCumulativeNavWithdrawal()); resultDTO.setEndPriceDate(DateUtil.format(resultDO.getPriceDate(), DateConst.YYYY_MM_DD)); resultDTO.setEndCumulativeNavWithdrawal(resultDO.getCumulativeNavWithdrawal()); resultDTO.setMaxdown(resultDO.getMaxdrawdown()); resultDTO.setSharpeRatio(resultDO.getSharperatio()); resultDTO.setCalmarRatio(resultDO.getCalmarratio()); resultDTO.setProductScale(resultDO.getProductScale()); resultDTO.setSortinoRatio(resultDO.getSortinoratio()); resultDTO.setAssetGroupName(getAssetGroupName(resultDO.getCompanyScale(), resultDO.getStrategy())); if (resultDO.getRank() == null) { resultDTO.setRank(999999); } return resultDTO; } private String getAssetGroupName(Integer companyAssetSize, Integer strategyId) { // 1:0-5亿 2:5-10亿 3:10-20亿 4:20-50亿 5:50-100亿 6:100亿以上 if (STRATEGY_LIST.contains(strategyId)) { return companyAssetSize != null && companyAssetSize >= 4 ? FIRST_GROUP : SECOND_GROUP; } else { return companyAssetSize != null && companyAssetSize >= 3 ? FIRST_GROUP : SECOND_GROUP; } } }