Browse Source

fix:优化

wangzaijun 10 months ago
parent
commit
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 com.smppw.analysis.domain.mapper.core.FundInformationMapper;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
+/**
+ * @author wangzaijun
+ * @date 2024/8/28 16:48
+ * @description 基本信息
+ * @deprecated 标记过时
+ */
+@Deprecated
 @Component
 @Component
 public class FundInformationDao {
 public class FundInformationDao {
 //    private final FundFrequencyMapper fundFrequencyMapper;
 //    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;
 package com.smppw.analysis.domain.manager.performance;
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.text.CharSequenceUtil;
 import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.Params;
 import com.smppw.analysis.domain.dto.performance.Params;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.Frequency;
+import com.smppw.constants.SecType;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.function.BinaryOperator;
 import java.util.function.BinaryOperator;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -30,6 +33,32 @@ public abstract class AbstractPerformance<P extends Params, R> implements Perfor
         this.baseIndicatorServiceV2 = baseIndicatorServiceV2;
         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的流操作计算最大最小值
      * 利用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 公共请求参数
      * @param params 公共请求参数
      * @return /
      * @return /
      */
      */
+    @Override
     protected List<String> getSecIdsByParams(P params) {
     protected List<String> getSecIdsByParams(P params) {
         List<String> tempList = ListUtil.list(true);
         List<String> tempList = ListUtil.list(true);
         tempList.addAll(params.getRefIds());
         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.TimeRange;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.rollrange.RollingSpliter;
 import com.smppw.common.rollrange.RollingSpliter;
-import com.smppw.constants.SecType;
 import com.smppw.core.IndicatorService;
 import com.smppw.core.IndicatorService;
 import com.smppw.utils.CalcUtils;
 import com.smppw.utils.CalcUtils;
 import com.smppw.utils.NavUtil;
 import com.smppw.utils.NavUtil;
@@ -92,7 +91,7 @@ public class CorrelationHandler extends AbstractSingleSecPerformance<Correlation
             resultList.add(result);
             resultList.add(result);
         });
         });
         List<Map<String, Object>> dataset2 = getDataset(params, refIds, indexIds, corRetList, endDate1, resultList);
         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();
         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();
         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.DateIntervalType;
 import com.smppw.common.pojo.enums.Indicator;
 import com.smppw.common.pojo.enums.Indicator;
 import com.smppw.constants.Consts;
 import com.smppw.constants.Consts;
-import com.smppw.constants.SecType;
 import com.smppw.core.rate.calc.PerformanceConsistency;
 import com.smppw.core.rate.calc.PerformanceConsistency;
 import org.springframework.stereotype.Component;
 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();
         Map<String, Object> dataset = MapUtil.builder(valuesMap).putAll(indexValuesMap).build();
         return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", productNameMapping).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.Indicator;
 import com.smppw.common.pojo.enums.TimeRange;
 import com.smppw.common.pojo.enums.TimeRange;
 import com.smppw.constants.Consts;
 import com.smppw.constants.Consts;
-import com.smppw.constants.SecType;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.util.List;
 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, 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) {
         if (excess) {
             for (String indexId : indexIds) {
             for (String indexId : indexIds) {
                 productNameMapping.remove(indexId);
                 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.Indicator;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.constants.Consts;
 import com.smppw.constants.Consts;
-import com.smppw.constants.SecType;
 import com.smppw.utils.DataUtil;
 import com.smppw.utils.DataUtil;
 import com.smppw.utils.RangeUtils;
 import com.smppw.utils.RangeUtils;
 import com.smppw.utils.StrategyHandleUtils;
 import com.smppw.utils.StrategyHandleUtils;
@@ -142,7 +141,7 @@ public class RevenueHandler extends AbstractSingleSecPerformance<RevenueParams,
         } else if (DISTRIBUTION.equals(params.getRevenuType())) {
         } else if (DISTRIBUTION.equals(params.getRevenuType())) {
             dataset = this.loadDistributionData(refIds, indexIds, secRangIndicatorMap, Double.parseDouble(params.getSpace()), ifExcessReturn);
             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();
         Map<String, Object> extInfos = MapUtil.<String, Object>builder("endDate", params.getEndDate()).put("startDate", params.getStartDate()).build();
         if (STATISTICS.equals(params.getRevenuType())) {
         if (STATISTICS.equals(params.getRevenuType())) {
             // table
             // 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.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.constants.Consts;
 import com.smppw.constants.Consts;
-import com.smppw.constants.SecType;
 import com.smppw.utils.StrategyHandleUtils;
 import com.smppw.utils.StrategyHandleUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
@@ -144,7 +143,7 @@ public class RollingHandler extends AbstractSingleSecPerformance<RollingParams,
             handleIndexData(indicator, rollingFrequency, indexIds, timeRangeFlag, indexValuesMap, dtos);
             handleIndexData(indicator, rollingFrequency, indexIds, timeRangeFlag, indexValuesMap, dtos);
         }
         }
         Map<String, Object> dataset = MapUtil.<String, Object>builder().putAll(valuesMap).putAll(indexValuesMap).build();
         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) {
         if (excess) {
             for (String indexId : indexIds) {
             for (String indexId : indexIds) {
                 productNameMapping.remove(indexId);
                 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.TrendType;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.pojo.enums.strategy.IStrategy;
 import com.smppw.common.pojo.enums.strategy.IStrategy;
-import com.smppw.constants.SecType;
 import com.smppw.utils.StrategyHandleUtils;
 import com.smppw.utils.StrategyHandleUtils;
 import org.springframework.stereotype.Component;
 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));
                 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, 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();
         Map<String, Object> extInfos = MapUtil.<String, Object>builder().put("endDate", params.getEndDate()).put("startDate", params.getStartDate()).build();
         for (String refId : refIds) {
         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;
 package com.smppw.analysis.domain.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dao.info.InfoFactory;
@@ -47,7 +48,7 @@ public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
                 null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
                 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);
         return IndicatorService.getInstance().calcMultipleSecMultipleTimeRangeIndicator(req, allNavMap, secFreqMap);
     }
     }
 
 
@@ -60,7 +61,7 @@ public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
                 null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
                 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,
         return IndicatorService.getInstance().getMultipleSecTrend(mainSecIdList, secBenchmarkIdMap, indexIdList, dateIntervalDto, fixedIncome,
                 initValue, frequency, trendTypeV2List, secFreqMap, allNavMap);
                 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,
     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,
                                                                              String startDate, String endDate, boolean ifExcessReturn, String benchmarkId, RaiseType raiseType, IStrategy strategy,
                                                                              Visibility visible, NavType navType, Map<String, List<DateValue>> allNavMap) {
                                                                              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,
         return IndicatorService.getInstance().getMultiSecRetListNew(mainSecIdList, indexIds, frequency, rollingFrequency, startDate, endDate, ifExcessReturn,
                 benchmarkId, raiseType, strategy, visible, navType, allNavMap, secFreqMap);
                 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;
+    }
 }
 }