소스 검색

fix:优化

wangzaijun 10 달 전
부모
커밋
c3505dcd2c

+ 7 - 0
src/main/java/com/smppw/analysis/domain/dao/FundInformationDao.java

@@ -5,6 +5,13 @@ import com.smppw.analysis.domain.dataobject.PubliclyFundBaseInfoDo;
 import com.smppw.analysis.domain.mapper.core.FundInformationMapper;
 import org.springframework.stereotype.Component;
 
+/**
+ * @author wangzaijun
+ * @date 2024/8/28 16:48
+ * @description 基本信息
+ * @deprecated 标记过时
+ */
+@Deprecated
 @Component
 public class FundInformationDao {
 //    private final FundFrequencyMapper fundFrequencyMapper;

+ 29 - 0
src/main/java/com/smppw/analysis/domain/manager/performance/AbstractPerformance.java

@@ -1,16 +1,19 @@
 package com.smppw.analysis.domain.manager.performance;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.text.CharSequenceUtil;
 import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.Params;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.enums.Frequency;
+import com.smppw.constants.SecType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.function.BinaryOperator;
 import java.util.stream.Collectors;
@@ -30,6 +33,32 @@ public abstract class AbstractPerformance<P extends Params, R> implements Perfor
         this.baseIndicatorServiceV2 = baseIndicatorServiceV2;
     }
 
+    protected abstract List<String> getSecIdsByParams(P params);
+
+    /**
+     * 获取所有标的的名称
+     *
+     * @param params /
+     * @return /
+     */
+    protected Map<String, String> getSecNameMap(P params) {
+        List<String> secIds = this.getSecIdsByParams(params);
+        if (CollUtil.isEmpty(secIds)) {
+            return MapUtil.empty();
+        }
+        Map<String, List<String>> typeSecMap = SecType.getTypeSecMap(secIds, null);
+        Map<String, String> temp = MapUtil.newHashMap(secIds.size());
+        typeSecMap.forEach((k, v) -> {
+            Map<String, String> secNameMap = this.infoFactory.getInstance(k).getSecNameMap(v);
+            temp.putAll(secNameMap);
+        });
+        Map<String, String> result = MapUtil.newHashMap(secIds.size());
+        for (String secId : secIds) {
+            result.put(secId, temp.get(secId));
+        }
+        return result;
+    }
+
     /**
      * 利用jdk8的流操作计算最大最小值
      *

+ 1 - 0
src/main/java/com/smppw/analysis/domain/manager/performance/AbstractSingleSecPerformance.java

@@ -41,6 +41,7 @@ public abstract class AbstractSingleSecPerformance<P extends BaseParams, R> exte
      * @param params 公共请求参数
      * @return /
      */
+    @Override
     protected List<String> getSecIdsByParams(P params) {
         List<String> tempList = ListUtil.list(true);
         tempList.addAll(params.getRefIds());

+ 1 - 2
src/main/java/com/smppw/analysis/domain/manager/performance/handler/CorrelationHandler.java

@@ -20,7 +20,6 @@ import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.TimeRange;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.rollrange.RollingSpliter;
-import com.smppw.constants.SecType;
 import com.smppw.core.IndicatorService;
 import com.smppw.utils.CalcUtils;
 import com.smppw.utils.NavUtil;
@@ -92,7 +91,7 @@ public class CorrelationHandler extends AbstractSingleSecPerformance<Correlation
             resultList.add(result);
         });
         List<Map<String, Object>> dataset2 = getDataset(params, refIds, indexIds, corRetList, endDate1, resultList);
-        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
+        Map<String, String> productNameMapping = this.getSecNameMap(params);
         Map<String, Object> extInfos = MapUtil.<String, Object>builder().put("table", dataset2).build();
         return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", productNameMapping).putAll(extInfos).build();
     }

+ 1 - 2
src/main/java/com/smppw/analysis/domain/manager/performance/handler/IndicatorHandler.java

@@ -16,7 +16,6 @@ import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndic
 import com.smppw.common.pojo.enums.DateIntervalType;
 import com.smppw.common.pojo.enums.Indicator;
 import com.smppw.constants.Consts;
-import com.smppw.constants.SecType;
 import com.smppw.core.rate.calc.PerformanceConsistency;
 import org.springframework.stereotype.Component;
 
@@ -84,7 +83,7 @@ public class IndicatorHandler extends AbstractSingleSecPerformance<IndicatorPara
             }
         }
         // 返回结果对象构建
-        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
+        Map<String, String> productNameMapping = this.getSecNameMap(params);
         Map<String, Object> dataset = MapUtil.builder(valuesMap).putAll(indexValuesMap).build();
         return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", productNameMapping).build();
     }

+ 1 - 2
src/main/java/com/smppw/analysis/domain/manager/performance/handler/IntervalHandler.java

@@ -18,7 +18,6 @@ import com.smppw.common.pojo.enums.DateIntervalType;
 import com.smppw.common.pojo.enums.Indicator;
 import com.smppw.common.pojo.enums.TimeRange;
 import com.smppw.constants.Consts;
-import com.smppw.constants.SecType;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -106,7 +105,7 @@ public class IntervalHandler extends AbstractSingleSecPerformance<IntervalParams
         }
         Map<String, Object> dataset = MapUtil.<String, Object>builder().putAll(valuesMap).putAll(indexValuesMap).build();
 
-        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
+        Map<String, String> productNameMapping = this.getSecNameMap(params);
         if (excess) {
             for (String indexId : indexIds) {
                 productNameMapping.remove(indexId);

+ 1 - 2
src/main/java/com/smppw/analysis/domain/manager/performance/handler/RevenueHandler.java

@@ -22,7 +22,6 @@ import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.Indicator;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.constants.Consts;
-import com.smppw.constants.SecType;
 import com.smppw.utils.DataUtil;
 import com.smppw.utils.RangeUtils;
 import com.smppw.utils.StrategyHandleUtils;
@@ -142,7 +141,7 @@ public class RevenueHandler extends AbstractSingleSecPerformance<RevenueParams,
         } else if (DISTRIBUTION.equals(params.getRevenuType())) {
             dataset = this.loadDistributionData(refIds, indexIds, secRangIndicatorMap, Double.parseDouble(params.getSpace()), ifExcessReturn);
         }
-        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
+        Map<String, String> productNameMapping = this.getSecNameMap(params);
         Map<String, Object> extInfos = MapUtil.<String, Object>builder("endDate", params.getEndDate()).put("startDate", params.getStartDate()).build();
         if (STATISTICS.equals(params.getRevenuType())) {
             // table

+ 1 - 2
src/main/java/com/smppw/analysis/domain/manager/performance/handler/RollingHandler.java

@@ -20,7 +20,6 @@ import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndic
 import com.smppw.common.pojo.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.constants.Consts;
-import com.smppw.constants.SecType;
 import com.smppw.utils.StrategyHandleUtils;
 import org.springframework.stereotype.Component;
 
@@ -144,7 +143,7 @@ public class RollingHandler extends AbstractSingleSecPerformance<RollingParams,
             handleIndexData(indicator, rollingFrequency, indexIds, timeRangeFlag, indexValuesMap, dtos);
         }
         Map<String, Object> dataset = MapUtil.<String, Object>builder().putAll(valuesMap).putAll(indexValuesMap).build();
-        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
+        Map<String, String> productNameMapping = this.getSecNameMap(params);
         if (excess) {
             for (String indexId : indexIds) {
                 productNameMapping.remove(indexId);

+ 1 - 2
src/main/java/com/smppw/analysis/domain/manager/performance/handler/TrendHandler.java

@@ -17,7 +17,6 @@ import com.smppw.common.pojo.enums.DateIntervalType;
 import com.smppw.common.pojo.enums.TrendType;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.pojo.enums.strategy.IStrategy;
-import com.smppw.constants.SecType;
 import com.smppw.utils.StrategyHandleUtils;
 import org.springframework.stereotype.Component;
 
@@ -72,7 +71,7 @@ public class TrendHandler extends AbstractSingleSecPerformance<TrendParams, Map<
                 indexDataListMap.put(indexId, this.buildDateValue(tempDateList, tempIndexTrendTypeListMap.get(indexId), indexTrendTypes));
             }
         }
-        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
+        Map<String, String> productNameMapping = this.getSecNameMap(params);
         Map<String, List<Map<String, Object>>> dataset = MapUtil.<String, List<Map<String, Object>>>builder().putAll(dataListMap).putAll(indexDataListMap).build();
         Map<String, Object> extInfos = MapUtil.<String, Object>builder().put("endDate", params.getEndDate()).put("startDate", params.getStartDate()).build();
         for (String refId : refIds) {

+ 27 - 3
src/main/java/com/smppw/analysis/domain/service/impl/BaseIndicatorServiceV2Impl.java

@@ -1,5 +1,6 @@
 package com.smppw.analysis.domain.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.domain.dao.info.InfoFactory;
@@ -47,7 +48,7 @@ public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
                 null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
-        Map<String, Frequency> secFreqMap = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecFreqMap(mainSecIdList);
+        Map<String, Frequency> secFreqMap = this.loadMultiSecFreq(mainSecIdList);
         return IndicatorService.getInstance().calcMultipleSecMultipleTimeRangeIndicator(req, allNavMap, secFreqMap);
     }
 
@@ -60,7 +61,7 @@ public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
                 null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
-        Map<String, Frequency> secFreqMap = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecFreqMap(mainSecIdList);
+        Map<String, Frequency> secFreqMap = this.loadMultiSecFreq(mainSecIdList);
         return IndicatorService.getInstance().getMultipleSecTrend(mainSecIdList, secBenchmarkIdMap, indexIdList, dateIntervalDto, fixedIncome,
                 initValue, frequency, trendTypeV2List, secFreqMap, allNavMap);
     }
@@ -69,8 +70,31 @@ public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
     public Map<String, List<IndicatorCalcPropertyDto>> getMultiSecRetListNew(List<String> mainSecIdList, List<String> indexIds, Frequency frequency, Frequency rollingFrequency,
                                                                              String startDate, String endDate, boolean ifExcessReturn, String benchmarkId, RaiseType raiseType, IStrategy strategy,
                                                                              Visibility visible, NavType navType, Map<String, List<DateValue>> allNavMap) {
-        Map<String, Frequency> secFreqMap = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecFreqMap(mainSecIdList);
+        Map<String, Frequency> secFreqMap = this.loadMultiSecFreq(mainSecIdList);
         return IndicatorService.getInstance().getMultiSecRetListNew(mainSecIdList, indexIds, frequency, rollingFrequency, startDate, endDate, ifExcessReturn,
                 benchmarkId, raiseType, strategy, visible, navType, allNavMap, secFreqMap);
     }
+
+    /**
+     * 获取多种类型的标的的净值频率
+     *
+     * @param secIds 多个标的id集合
+     * @return /
+     */
+    private Map<String, Frequency> loadMultiSecFreq(List<String> secIds) {
+        if (CollUtil.isEmpty(secIds)) {
+            return MapUtil.empty();
+        }
+        Map<String, List<String>> typeSecMap = SecType.getTypeSecMap(secIds, null);
+        Map<String, Frequency> temp = MapUtil.newHashMap(secIds.size());
+        typeSecMap.forEach((k, v) -> {
+            Map<String, Frequency> secNameMap = this.infoFactory.getInstance(k).getSecFreqMap(v);
+            temp.putAll(secNameMap);
+        });
+        Map<String, Frequency> result = MapUtil.newHashMap(secIds.size());
+        for (String secId : secIds) {
+            result.put(secId, temp.get(secId));
+        }
+        return result;
+    }
 }