123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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<Integer> 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<? extends CompetitionBaseResultDTO> getCompetitionResult(Integer competitionId, String period) {
- List<XnzqCompetitionResultDTO> competitionResultDTOList = CollUtil.newArrayList();
- List<RcCompetitionResultDO> resultDOList = rcCompetitionResultMapper.queryCompetitionResult(competitionId, period);
- if (CollUtil.isEmpty(resultDOList)) {
- return competitionResultDTOList;
- }
- // 策略名称
- Map<Integer, String> 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;
- }
- }
- }
|