瀏覽代碼

feat:通用服务重构-支持自建基金

wangzaijun 10 月之前
父節點
當前提交
a734270b17
共有 58 個文件被更改,包括 957 次插入975 次删除
  1. 1 1
      src/main/java/com/smppw/analysis/application/dto/info/HeadIndicatorReq.java
  2. 1 1
      src/main/java/com/smppw/analysis/application/service/info/FundInfoService.java
  3. 52 58
      src/main/java/com/smppw/analysis/application/service/info/GlobalService.java
  4. 5 5
      src/main/java/com/smppw/analysis/application/service/performance/FundPerformanceService.java
  5. 5 5
      src/main/java/com/smppw/analysis/client/FundPerformanceApi.java
  6. 49 107
      src/main/java/com/smppw/analysis/domain/dao/FundInformationDao.java
  7. 18 0
      src/main/java/com/smppw/analysis/domain/dao/info/AbstractInfoDao.java
  8. 6 2
      src/main/java/com/smppw/analysis/domain/dao/info/FundInfoDao.java
  9. 3 2
      src/main/java/com/smppw/analysis/domain/dao/info/InfoConstants.java
  10. 52 1
      src/main/java/com/smppw/analysis/domain/dao/info/InfoDao.java
  11. 11 2
      src/main/java/com/smppw/analysis/domain/dao/info/InfoFactory.java
  12. 21 0
      src/main/java/com/smppw/analysis/domain/dao/info/PrivateFundInfoDao.java
  13. 23 0
      src/main/java/com/smppw/analysis/domain/dataobject/info/BaseInfoDO.java
  14. 17 3
      src/main/java/com/smppw/analysis/domain/dataobject/info/FundInfoDO.java
  15. 67 0
      src/main/java/com/smppw/analysis/domain/dataobject/info/PrivateFundInfoDO.java
  16. 0 20
      src/main/java/com/smppw/analysis/domain/dataobject/nav/CmNavDo.java
  17. 4 2
      src/main/java/com/smppw/analysis/domain/dto/info/FundBaseInfoVO.java
  18. 3 0
      src/main/java/com/smppw/analysis/domain/dto/info/HeadInfoVO.java
  19. 15 0
      src/main/java/com/smppw/analysis/domain/dto/info/PrivateFundHeadInfoVO.java
  20. 4 2
      src/main/java/com/smppw/analysis/domain/dto/info/PrivatelyFundBaseInfoVO.java
  21. 0 32
      src/main/java/com/smppw/analysis/domain/dto/info/PubliclyCurrencyFundHeadInfoVO.java
  22. 4 2
      src/main/java/com/smppw/analysis/domain/dto/info/PubliclyFundBaseInfoVO.java
  23. 0 171
      src/main/java/com/smppw/analysis/domain/manager/info/AbstractFundHeadInfo.java
  24. 145 2
      src/main/java/com/smppw/analysis/domain/manager/info/AbstractHeadInfo.java
  25. 3 1
      src/main/java/com/smppw/analysis/domain/manager/info/HeadInfoConstants.java
  26. 0 1
      src/main/java/com/smppw/analysis/domain/manager/info/HeadInfoFactory.java
  27. 65 0
      src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivateHeadInfo.java
  28. 0 39
      src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivatelyFundHeadInfo.java
  29. 40 0
      src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivatelyHeadInfo.java
  30. 0 65
      src/main/java/com/smppw/analysis/domain/manager/info/handler/PubliclyFundHeadInfo.java
  31. 58 0
      src/main/java/com/smppw/analysis/domain/manager/info/handler/PubliclyHeadInfo.java
  32. 4 4
      src/main/java/com/smppw/analysis/domain/manager/performance/AbstractPerformance.java
  33. 3 3
      src/main/java/com/smppw/analysis/domain/manager/performance/AbstractSingleSecPerformance.java
  34. 1 1
      src/main/java/com/smppw/analysis/domain/manager/performance/PerformanceConstants.java
  35. 5 4
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/CorrelationHandler.java
  36. 0 42
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/ImfTrendHandler.java
  37. 6 5
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/IndicatorHandler.java
  38. 5 4
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/IntervalHandler.java
  39. 3 4
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/MulSecMulIndicatorHandler.java
  40. 5 4
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/RevenueHandler.java
  41. 5 4
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/RollingHandler.java
  42. 5 4
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/TrendHandler.java
  43. 3 3
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/WinHandler.java
  44. 0 11
      src/main/java/com/smppw/analysis/domain/mapper/core/MonetaryFundProfitMapper.java
  45. 11 0
      src/main/java/com/smppw/analysis/domain/mapper/master/CmFundInformationMapper.java
  46. 30 52
      src/main/java/com/smppw/analysis/domain/service/BaseInfoService.java
  47. 8 7
      src/main/java/com/smppw/analysis/domain/service/impl/BaseIndicatorServiceV2Impl.java
  48. 93 197
      src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java
  49. 2 5
      src/main/java/com/smppw/analysis/domain/service/impl/NavServiceImpl.java
  50. 21 4
      src/main/java/com/smppw/analysis/infrastructure/components/ApiSignInterceptor.java
  51. 12 0
      src/main/java/com/smppw/analysis/infrastructure/config/AnalysisProperty.java
  52. 1 1
      src/main/java/com/smppw/analysis/infrastructure/gatewayimpl/RedisCacheGateway.java
  53. 33 43
      src/main/resources/application.yaml
  54. 2 2
      src/main/resources/mapping/core/DepositNavMapper.xml
  55. 8 8
      src/main/resources/mapping/core/IndexesTradeDateMapper.xml
  56. 0 31
      src/main/resources/mapping/core/MonetaryFundProfitMapper.xml
  57. 16 0
      src/main/resources/mapping/master/CmFundInformationMapper.xml
  58. 3 8
      src/main/resources/mapping/master/CmNavMapper.xml

+ 1 - 1
src/main/java/com/smppw/analysis/application/dto/info/HeadIndicatorReq.java

@@ -65,7 +65,7 @@ public class HeadIndicatorReq extends BaseReq<IndicatorParams> {
         IndicatorParams params = new IndicatorParams();
         params.setSecIds(CollectionUtil.newArrayList());
         params.setRefIds(CollectionUtil.newArrayList(this.getSecId()));
-        params.setBenchmarkId(Consts.BENCHMARK);
+//        params.setBenchmarkId(Consts.BENCHMARK);
         params.setNavType(this.getNavType());
         params.setRaiseType(this.getRaiseType());
         params.setStrategy(this.getStrategy());

+ 1 - 1
src/main/java/com/smppw/analysis/application/service/info/FundInfoService.java

@@ -146,7 +146,7 @@ public class FundInfoService {
         }
         publiclyFundBaseInfoVO = BeanUtil.copyProperties(fundInfo, PubliclyFundBaseInfoVO.class);
         publiclyFundBaseInfoVO.setBaseCurrency(fundInfo.getBaseCurrency() != null ? BASE_CURRENCY_MAP.get(Integer.valueOf(fundInfo.getBaseCurrency())) : null);
-        publiclyFundBaseInfoVO.setFundStatus(fundInfo.getFundStatusId() != null ? FUND_STATUS_MAP.get(Integer.valueOf(fundInfo.getFundStatusId())) : null);
+        publiclyFundBaseInfoVO.setFundStatus(fundInfo.getFundStatusId() != null ? FUND_STATUS_MAP.get(fundInfo.getFundStatusId()) : null);
 //        //获取基金的基金经理
 //        List<FundManagerInfoDo> fundManagerInfoList = this.baseInfoService.listFundManagerByFundId(fundId);
 //        if (CollUtil.isNotEmpty(fundManagerInfoList)) {

+ 52 - 58
src/main/java/com/smppw/analysis/application/service/info/GlobalService.java

@@ -3,62 +3,56 @@ package com.smppw.analysis.application.service.info;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.application.dto.info.*;
 import com.smppw.analysis.domain.dto.info.HeadInfoParams;
 import com.smppw.analysis.domain.dto.info.HeadInfoVO;
-import com.smppw.analysis.domain.dto.info.PrivatelyFundHeadInfoVO;
-import com.smppw.analysis.domain.dto.info.PubliclyFundHeadInfoVO;
 import com.smppw.analysis.domain.dto.performance.IndicatorParams;
 import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
 import com.smppw.analysis.domain.manager.info.HeadInfoFactory;
 import com.smppw.analysis.domain.manager.performance.Performance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceFactory;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.domain.service.NavService;
 import com.smppw.analysis.infrastructure.exception.APIException;
-import com.smppw.common.pojo.enums.strategy.IStrategy;
 import com.smppw.common.pojo.ValueLabelVO;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcTimeRangeDto;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.constants.SecType;
 import com.smppw.core.IndicatorService;
-import com.smppw.utils.StrategyHandleUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
 public class GlobalService {
     private final NavService navService;
-    private final BaseInfoService baseInfoService;
     private final HeadInfoFactory headInfoFactory;
     private final PerformanceFactory performanceFactory;
 
     public GlobalService(NavService navService,
-                         BaseInfoService baseInfoService,
                          HeadInfoFactory headInfoFactory,
                          PerformanceFactory performanceFactory) {
         this.navService = navService;
-        this.baseInfoService = baseInfoService;
         this.headInfoFactory = headInfoFactory;
         this.performanceFactory = performanceFactory;
     }
 
     public HeadInfoVO headInfo(HeadInfoReq req) {
-        String secType = this.baseInfoService.getSecType(req.getSecId());
-        String type = HeadInfoConstants.SEC_TYPE_HEAD_MAP.get(secType);
+        String secType = SecType.getSecType(req.getSecId(), null);
+        String headInfoBean = HeadInfoConstants.SEC_TYPE_HEAD_MAP.get(secType);
         HeadInfoParams params = req.convert();
         params.setSecType(secType);
-        return this.headInfoFactory.getInstance(type).get(params);
+        return this.headInfoFactory.getInstance(headInfoBean).get(params);
     }
 
     public CommonInfoVO commonInfo(CommonInfoReq params) {
-        String secType = this.baseInfoService.getSecType(params.getSecId());
+        String secType = SecType.getSecType(params.getSecId(), null);
         CommonInfoVO res = new CommonInfoVO();
         String secId = params.getSecId();
         List<Frequency> result = CollectionUtil.newArrayList();
@@ -68,7 +62,7 @@ public class GlobalService {
             throw new APIException("");
         }
         String raiseType = fundHeadInfo.getRaiseType();
-        result.add(this.baseInfoService.getNavFrequency(secId));
+        result.add(fundHeadInfo.getFrequency());
         // 将频率转换一道 取最小频率
         List<Frequency> frequencies = this.toFrequencyList(result);
         if (Objects.equals("2", raiseType)) {
@@ -81,10 +75,10 @@ public class GlobalService {
                 .filter(p -> !NavType.All.equals(p) && !NavType.UnitAndCumulativeNav.equals(p))
                 .map(p -> new ValueLabelVO(p.name(), p.getDesc())).collect(Collectors.toList());
         res.setNavType(navType);
-        handleTimeRange(res, secId);
+        handleTimeRange(res, secId, fundHeadInfo.getFrequency());
         // 获取常用指数
-        List<ValueLabelVO> benchmarkList = baseInfoService.getCommonIndexList();
-        handleBenchmark(res, secType, benchmarkList, fundHeadInfo);
+//        List<ValueLabelVO> benchmarkList = baseInfoService.getCommonIndexList();
+//        handleBenchmark(res, secType, benchmarkList, fundHeadInfo);
         return res;
     }
 
@@ -123,13 +117,13 @@ public class GlobalService {
         return res;
     }
 
-    private void handleTimeRange(CommonInfoVO vo, String secId) {
+    private void handleTimeRange(CommonInfoVO vo, String secId, Frequency frequency) {
         List<String> refIds = ListUtil.toLinkedList(secId);
         String endDate = null;
         String startDate = null;
-        Frequency navFrequency = this.baseInfoService.getNavFrequency(secId);
+//        Frequency navFrequency = this.baseInfoService.getNavFrequency(secId);
         Map<String, List<DateValue>> allNavMap = this.navService.getSecIdDateValueNavListMapByDb(refIds, null, null, Visibility.Both, NavType.CumulativeNav);
-        List<IndicatorCalcTimeRangeDto> secTimeRanges = IndicatorService.getInstance().getSecTimeRange(secId, navFrequency, allNavMap);
+        List<IndicatorCalcTimeRangeDto> secTimeRanges = IndicatorService.getInstance().getSecTimeRange(secId, frequency, allNavMap);
         Map<String, String> timeRangeMap = MapUtil.newHashMap();
         for (IndicatorCalcTimeRangeDto timeRange : secTimeRanges) {
             if (StringUtils.isEmpty(endDate)) {
@@ -145,41 +139,41 @@ public class GlobalService {
         vo.setStartDate(startDate);
     }
 
-    private void handleBenchmark(CommonInfoVO res, String fundType, List<ValueLabelVO> benchmarkList, HeadInfoVO headInfoVO) {
-        String benchmarkId = null;
-        ValueLabelVO valueLabelVO;
-        // 基金有对应策略的指数
-        if (fundType.equals(SecType.PRIVATELY_OFFERED_FUND) || fundType.equals(SecType.PRIVATE_FUND)) {
-            PrivatelyFundHeadInfoVO fundHeadInfo = (PrivatelyFundHeadInfoVO) headInfoVO;
-            benchmarkId = fundHeadInfo.getPrimaryBenchmarkId();
-            valueLabelVO = new ValueLabelVO(benchmarkId, fundHeadInfo.getPrimaryBenchmarkName());
-        } else if (fundType.equals(SecType.PUBLICLY_OFFERED_FUNDS)) {
-            // 公募需要特殊处理
-            PubliclyFundHeadInfoVO fundHeadInfo = (PubliclyFundHeadInfoVO) headInfoVO;
-            Integer subStrategyId = fundHeadInfo.getSubstrategyId();
-            IStrategy iStrategy = StrategyHandleUtils.getStrategyById(subStrategyId);
-            benchmarkId = iStrategy.getBenchmark();
-            if (StrUtil.isBlank(benchmarkId)) {
-                benchmarkId = fundHeadInfo.getPrimaryBenchmarkId();
-                valueLabelVO = new ValueLabelVO(benchmarkId, fundHeadInfo.getPrimaryBenchmarkName());
-            } else {
-                Map<String, String> querySecName = this.baseInfoService.querySecName(ListUtil.of(benchmarkId));
-                String indexName = querySecName.get(benchmarkId);
-                valueLabelVO = new ValueLabelVO(benchmarkId, indexName);
-            }
-        } else {
-            valueLabelVO = new ValueLabelVO();
-        }
-        if (CollectionUtil.isNotEmpty(benchmarkList)) {
-            // 如果常用指数里面没有基准,则把基准放在常用指数的第一位
-            Optional<ValueLabelVO> contains = benchmarkList.stream().filter(p -> p.getValue().equals(valueLabelVO.getValue())).findFirst();
-            if (contains.isEmpty()) {
-                benchmarkList.add(0, valueLabelVO);
-            }
-        } else {
-            benchmarkList.add(valueLabelVO);
-        }
-        res.setBenchmarkId(benchmarkId);
-        res.setUsefulBenchmark(benchmarkList);
-    }
+//    private void handleBenchmark(CommonInfoVO res, String fundType, List<ValueLabelVO> benchmarkList, HeadInfoVO headInfoVO) {
+//        String benchmarkId = null;
+//        ValueLabelVO valueLabelVO;
+//        // 基金有对应策略的指数
+//        if (fundType.equals(SecType.PRIVATELY_OFFERED_FUND) || fundType.equals(SecType.PRIVATE_FUND)) {
+//            PrivatelyFundHeadInfoVO fundHeadInfo = (PrivatelyFundHeadInfoVO) headInfoVO;
+//            benchmarkId = fundHeadInfo.getPrimaryBenchmarkId();
+//            valueLabelVO = new ValueLabelVO(benchmarkId, fundHeadInfo.getPrimaryBenchmarkName());
+//        } else if (fundType.equals(SecType.PUBLICLY_OFFERED_FUNDS)) {
+//            // 公募需要特殊处理
+//            PubliclyFundHeadInfoVO fundHeadInfo = (PubliclyFundHeadInfoVO) headInfoVO;
+//            Integer subStrategyId = fundHeadInfo.getSubstrategyId();
+//            IStrategy iStrategy = StrategyHandleUtils.getStrategyById(subStrategyId);
+//            benchmarkId = iStrategy.getBenchmark();
+//            if (StrUtil.isBlank(benchmarkId)) {
+//                benchmarkId = fundHeadInfo.getPrimaryBenchmarkId();
+//                valueLabelVO = new ValueLabelVO(benchmarkId, fundHeadInfo.getPrimaryBenchmarkName());
+//            } else {
+//                Map<String, String> querySecName = this.baseInfoService.querySecName(ListUtil.of(benchmarkId));
+//                String indexName = querySecName.get(benchmarkId);
+//                valueLabelVO = new ValueLabelVO(benchmarkId, indexName);
+//            }
+//        } else {
+//            valueLabelVO = new ValueLabelVO();
+//        }
+//        if (CollectionUtil.isNotEmpty(benchmarkList)) {
+//            // 如果常用指数里面没有基准,则把基准放在常用指数的第一位
+//            Optional<ValueLabelVO> contains = benchmarkList.stream().filter(p -> p.getValue().equals(valueLabelVO.getValue())).findFirst();
+//            if (contains.isEmpty()) {
+//                benchmarkList.add(0, valueLabelVO);
+//            }
+//        } else {
+//            benchmarkList.add(valueLabelVO);
+//        }
+//        res.setBenchmarkId(benchmarkId);
+//        res.setUsefulBenchmark(benchmarkList);
+//    }
 }

+ 5 - 5
src/main/java/com/smppw/analysis/application/service/performance/FundPerformanceService.java

@@ -54,11 +54,11 @@ public class FundPerformanceService {
         return instance.execute(params);
     }
 
-    public Map<String, Object> imfTrend(ImfTrendReq req) {
-        TrendParams params = req.convert();
-        Performance<TrendParams, Map<String, Object>> instance = this.factory.getInstance(IMF);
-        return instance.execute(params);
-    }
+//    public Map<String, Object> imfTrend(ImfTrendReq req) {
+//        TrendParams params = req.convert();
+//        Performance<TrendParams, Map<String, Object>> instance = this.factory.getInstance(IMF);
+//        return instance.execute(params);
+//    }
 
     public Map<String, Object> interval(IntervalReq req) {
         IntervalParams params = req.convert();

+ 5 - 5
src/main/java/com/smppw/analysis/client/FundPerformanceApi.java

@@ -36,11 +36,11 @@ public class FundPerformanceApi {
         return ResultVo.ok(data);
     }
 
-    @PostMapping("imf-trend")
-    public ResultVo<Map<String, Object>> imfTrend(@RequestBody ImfTrendReq req) {
-        Map<String, Object> data = this.service.imfTrend(req);
-        return ResultVo.ok(data);
-    }
+//    @PostMapping("imf-trend")
+//    public ResultVo<Map<String, Object>> imfTrend(@RequestBody ImfTrendReq req) {
+//        Map<String, Object> data = this.service.imfTrend(req);
+//        return ResultVo.ok(data);
+//    }
 
     @PostMapping("dynamic-down")
     public ResultVo<Map<String, Object>> dynamicDown(@RequestBody DrawdownTrendReq req) {

+ 49 - 107
src/main/java/com/smppw/analysis/domain/dao/FundInformationDao.java

@@ -1,133 +1,75 @@
 package com.smppw.analysis.domain.dao;
 
-import cn.hutool.core.collection.ListUtil;
-import com.smppw.analysis.domain.dataobject.*;
-import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
-import com.smppw.analysis.domain.mapper.core.*;
-import com.smppw.common.pojo.enums.Frequency;
+import com.smppw.analysis.domain.dataobject.PrivatelyFundBaseInfoDo;
+import com.smppw.analysis.domain.dataobject.PubliclyFundBaseInfoDo;
+import com.smppw.analysis.domain.mapper.core.FundInformationMapper;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 @Component
 public class FundInformationDao {
-//    private final FundAssetSizeMapper fundAssetSizeMapper;
-    private final FundFrequencyMapper fundFrequencyMapper;
+//    private final FundFrequencyMapper fundFrequencyMapper;
     private final FundInformationMapper fundInformationMapper;
-    private final MonetaryFundProfitMapper monetaryFundProfitMapper;
-//    private final CompanyFundScaleRangeHistoryMapper companyFundScaleRangeHistoryMapper;
+//    private final MonetaryFundProfitMapper monetaryFundProfitMapper;
 
-    public FundInformationDao(FundFrequencyMapper fundFrequencyMapper,
-                              FundInformationMapper fundInformationMapper,
-                              MonetaryFundProfitMapper monetaryFundProfitMapper) {
-//        this.fundAssetSizeMapper = fundAssetSizeMapper;
-        this.fundFrequencyMapper = fundFrequencyMapper;
+    public FundInformationDao(FundInformationMapper fundInformationMapper) {
+//        this.fundFrequencyMapper = fundFrequencyMapper;
         this.fundInformationMapper = fundInformationMapper;
-        this.monetaryFundProfitMapper = monetaryFundProfitMapper;
-//        this.companyFundScaleRangeHistoryMapper = companyFundScaleRangeHistoryMapper;
-    }
-
-    /**
-     * 获取多个基金的基本信息
-     *
-     * @param fundIds /
-     * @return /
-     */
-    public List<FundInfoDO> listFundInfo(List<String> fundIds) {
-        return this.fundInformationMapper.queryFundInfoList(fundIds);
-    }
-
-    public FundInfoDO getFundInfoById(String fundId) {
-        List<FundInfoDO> dataList = this.fundInformationMapper.queryFundInfoList(ListUtil.toList(fundId));
-        return dataList.stream().filter(e -> fundId.equals(e.getFundId())).findFirst().orElse(null);
-    }
-
-    public String getNavFrequencyByFundId(String secId) {
-        return this.fundFrequencyMapper.getNavFrequencyByFundId(secId);
+//        this.monetaryFundProfitMapper = monetaryFundProfitMapper;
     }
 
-    public Map<String, Frequency> getNavFrequency(List<String> secIdList) {
-        Map<String, Frequency> secFrequencyMap = new HashMap<>();
-        List<FundFrequencyDo> fundFrequencyDos = fundFrequencyMapper.getNavFrequencyByFundIdList(secIdList);
-        for (FundFrequencyDo fundFrequencyDo : fundFrequencyDos) {
-            String frequencyStr = fundFrequencyDo.getNavFrequency();
-            Frequency frequency = Frequency.Monthly;
-            if ("天".equals(frequencyStr)) {
-                frequency = Frequency.Daily;
-            } else if ("周".equals(frequencyStr)) {
-                frequency = Frequency.Weekly;
-            }
-            secFrequencyMap.put(fundFrequencyDo.getFundId(), frequency);
-        }
-        return secFrequencyMap;
-    }
-
-    public Map<String, String> getMarketFundIdNameMap(List<String> fundIdList) {
-        List<FundInformationDo> fundInformationDos = fundInformationMapper.listFundInfo(fundIdList);
-        Map<String, String> fundIdNameMap = new HashMap<>();
-        for (FundInformationDo fundInformationDo : fundInformationDos) {
-            fundIdNameMap.put(fundInformationDo.getFundId(), fundInformationDo.getFundShortName());
-        }
-        return fundIdNameMap;
-    }
-
-    public List<MonetaryFundProfitDO> queryMonetaryFund(String fundId) {
-        return this.monetaryFundProfitMapper.queryByFundId(fundId);
-    }
-
-//    public List<Map<String, Object>> getFundRank(String rankDate, String fundId, List<String> indexIds, Indicator indicator) {
-//        Map<String, Object> params = MapUtil.newHashMap(8);
-//        params.put("fundId", fundId);
-//        params.put("rankDate", rankDate);
-//        params.put("indexIds", String.join("_", indexIds));
-//        params.put("indicator", indicator.getId());
-//        return this.fundInformationMapper.getFundRankByCall(params);
+//    /**
+//     * 获取多个基金的基本信息
+//     *
+//     * @param fundIds /
+//     * @return /
+//     */
+//    public List<FundInfoDO> listFundInfo(List<String> fundIds) {
+//        return this.fundInformationMapper.queryFundInfoList(fundIds);
 //    }
 //
-//    public List<FundSimilarDo> getSameCompanyFundIds(Map<String, Object> params) {
-//        return this.fundInformationMapper.getSameCompanyFundIds(params);
+//    public FundInfoDO getFundInfoById(String fundId) {
+//        List<FundInfoDO> dataList = this.fundInformationMapper.queryFundInfoList(ListUtil.toList(fundId));
+//        return dataList.stream().filter(e -> fundId.equals(e.getFundId())).findFirst().orElse(null);
 //    }
-//
-//    public List<FundSimilarDo> getSameStrategyFundIds(Map<String, Object> params) {
-//        return this.fundInformationMapper.getSameStrategyFundIds(params);
-//    }
-//
-//    public FundFeeDo getFundFee(String fundId) {
-//        return this.fundInformationMapper.getFundFee(fundId);
-//    }
-//
-//    public List<ManualFundManagerChangeDo> listFundManagerChangeHistory(String fundId) {
-//        return this.fundInformationMapper.listFundManagerChangeHistory(fundId);
+
+//    public String getNavFrequencyByFundId(String secId) {
+//        return this.fundFrequencyMapper.getNavFrequencyByFundId(secId);
 //    }
-//
-//    public List<MfManagerFundNumDo> listMfManagerFundNumByManagerId(List<String> managerIdList) {
-//        return this.fundInformationMapper.listMfManagerFundNumByManagerId(managerIdList);
+
+//    public Map<String, Frequency> getNavFrequency(List<String> secIdList) {
+//        Map<String, Frequency> secFrequencyMap = new HashMap<>();
+//        List<FundFrequencyDo> fundFrequencyDos = fundFrequencyMapper.getNavFrequencyByFundIdList(secIdList);
+//        for (FundFrequencyDo fundFrequencyDo : fundFrequencyDos) {
+//            String frequencyStr = fundFrequencyDo.getNavFrequency();
+//            Frequency frequency = Frequency.Monthly;
+//            if ("天".equals(frequencyStr)) {
+//                frequency = Frequency.Daily;
+//            } else if ("周".equals(frequencyStr)) {
+//                frequency = Frequency.Weekly;
+//            }
+//            secFrequencyMap.put(fundFrequencyDo.getFundId(), frequency);
+//        }
+//        return secFrequencyMap;
 //    }
 
-//    public String getFundLastAssetSize(String fundId) {
-//        BigDecimal assetSize = this.fundAssetSizeMapper.getFundLastAssetSize(fundId);
-//        return assetSize == null ? null : assetSize.toPlainString();
+//    public Map<String, String> getMarketFundIdNameMap(List<String> fundIdList) {
+//        List<FundInformationDo> fundInformationDos = fundInformationMapper.listFundInfo(fundIdList);
+//        Map<String, String> fundIdNameMap = new HashMap<>();
+//        for (FundInformationDo fundInformationDo : fundInformationDos) {
+//            fundIdNameMap.put(fundInformationDo.getFundId(), fundInformationDo.getFundShortName());
+//        }
+//        return fundIdNameMap;
 //    }
-//
-//    public ValueLabelVO getLastCompanyScale(String companyId) {
-//        return this.companyFundScaleRangeHistoryMapper.getLastCompanyScale(companyId);
+
+//    public List<MonetaryFundProfitDO> queryMonetaryFund(String fundId) {
+//        return this.monetaryFundProfitMapper.queryByFundId(fundId);
 //    }
 
-    public PrivatelyFundBaseInfoDo listPrivatelyFundInfo(String fundId){
+    public PrivatelyFundBaseInfoDo listPrivatelyFundInfo(String fundId) {
         return this.fundInformationMapper.listPrivatelyFundInfo(fundId);
     }
 
-//    public List<FundManagerInfoDo> listFundManagerByFundId(String fundId){
-//        return this.fundInformationMapper.listFundManagerByFundId(fundId);
-//    }
-
-    public PubliclyFundBaseInfoDo listPubliclyFundInfo(String fundId){
+    public PubliclyFundBaseInfoDo listPubliclyFundInfo(String fundId) {
         return this.fundInformationMapper.listPublicFundInfo(fundId);
     }
-
-//    public List<ManualFundPurchaseRedeemDO> getMFundPurchaseRedeemList(String fundId) {
-//      return  this.fundInformationMapper.listMFundPurchaseRedeemList(fundId);
-//    }
 }

+ 18 - 0
src/main/java/com/smppw/analysis/domain/dao/info/AbstractInfoDao.java

@@ -1,6 +1,24 @@
 package com.smppw.analysis.domain.dao.info;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.ListUtil;
 import com.smppw.analysis.domain.dataobject.info.BaseInfoDO;
 
+import java.util.List;
+
 public abstract class AbstractInfoDao<R extends BaseInfoDO> implements InfoDao<R> {
+    @Override
+    public List<R> listMultiInfo(List<String> secIds) {
+        List<R> resultList = ListUtil.list(false);
+        if (CollUtil.isEmpty(secIds)) {
+            return ListUtil.empty();
+        }
+        List<List<String>> partition = ListUtil.partition(secIds, 200);
+        for (List<String> fundIds : partition) {
+            resultList.addAll(this.listMultiFundInfo(fundIds));
+        }
+        return resultList;
+    }
+
+    protected abstract List<R> listMultiFundInfo(List<String> subFundIds);
 }

+ 6 - 2
src/main/java/com/smppw/analysis/domain/dao/info/FundInfoDao.java

@@ -6,10 +6,14 @@ import org.springframework.stereotype.Component;
 
 import java.util.List;
 
+/**
+ * 市场基金的基本信息获取
+ * todo
+ */
 @Component(InfoConstants.FUND_INFO)
-public class FundInfoDao extends AbstractInfoDao<FundInfoDO>{
+public class FundInfoDao extends AbstractInfoDao<FundInfoDO> {
     @Override
-    public List<FundInfoDO> list(List<String> secIds) {
+    protected List<FundInfoDO> listMultiFundInfo(List<String> subFundIds) {
         return ListUtil.empty();
     }
 }

+ 3 - 2
src/main/java/com/smppw/analysis/domain/dao/info/InfoConstants.java

@@ -2,8 +2,9 @@ package com.smppw.analysis.domain.dao.info;
 
 public final class InfoConstants {
     public static final String FUND_INFO = "fundInfo";
-    public static final String COMPANY_INFO = "companyInfo";
-    public static final String MANAGER_INFO = "managerInfo";
+    public static final String PRIVATE_FUND_INFO = "privateFundInfo";
+//    public static final String COMPANY_INFO = "companyInfo";
+//    public static final String MANAGER_INFO = "managerInfo";
     private InfoConstants() {
     }
 }

+ 52 - 1
src/main/java/com/smppw/analysis/domain/dao/info/InfoDao.java

@@ -1,8 +1,12 @@
 package com.smppw.analysis.domain.dao.info;
 
+import cn.hutool.core.collection.ListUtil;
 import com.smppw.analysis.domain.dataobject.info.BaseInfoDO;
+import com.smppw.common.pojo.enums.Frequency;
 
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author wangzaijun
@@ -11,10 +15,57 @@ import java.util.List;
  */
 public interface InfoDao<R extends BaseInfoDO> {
     /**
+     * 获取单个标的的基本信息
+     *
+     * @param secId 标的id
+     * @return /
+     */
+    default R getInfo(String secId) {
+        List<R> infos = this.listMultiInfo(ListUtil.toList(secId));
+        Map<String, R> secInfoMap = infos.stream().collect(Collectors.toMap(BaseInfoDO::getRefId, e -> e));
+        return secInfoMap.get(secId);
+    }
+
+    /**
+     * 获取多个标的的id与名称对应关系
+     *
+     * @param secIds 标的id集合
+     * @return /
+     */
+    default Map<String, String> getSecNameMap(List<String> secIds) {
+        List<R> infos = this.listMultiInfo(secIds);
+        return infos.stream().filter(e -> e.getRefName() != null)
+                .collect(Collectors.toMap(BaseInfoDO::getRefId, BaseInfoDO::getRefName));
+    }
+
+    /**
+     * 获取多个标的的id与净值频率对应关系
+     *
+     * @param secIds 标的id集合
+     * @return /
+     */
+    default Map<String, Frequency> getSecFreqMap(List<String> secIds) {
+        List<R> infos = this.listMultiInfo(secIds);
+        return infos.stream().filter(e -> e.getFrequency() != null)
+                .collect(Collectors.toMap(BaseInfoDO::getRefId, BaseInfoDO::getFrequency));
+    }
+
+    /**
+     * 获取多各标的id与基本信息的对应关系
+     *
+     * @param secIds 标的id集合
+     * @return /
+     */
+    default Map<String, R> getSecInfoMap(List<String> secIds) {
+        List<R> infos = this.listMultiInfo(secIds);
+        return infos.stream().collect(Collectors.toMap(BaseInfoDO::getRefId, e -> e));
+    }
+
+    /**
      * 获取多个同类型标的的基本信息
      *
      * @param secIds 标的id集合
      * @return /
      */
-    List<R> list(List<String> secIds);
+    List<R> listMultiInfo(List<String> secIds);
 }

+ 11 - 2
src/main/java/com/smppw/analysis/domain/dao/info/InfoFactory.java

@@ -3,6 +3,7 @@ package com.smppw.analysis.domain.dao.info;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import com.smppw.analysis.domain.dataobject.info.BaseInfoDO;
+import com.smppw.constants.SecType;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -12,12 +13,20 @@ public class InfoFactory {
     private static final InfoDao<? extends BaseInfoDO> DEFAULT = (InfoDao<BaseInfoDO>) secIds -> ListUtil.empty();
     private static final Map<String, InfoDao<? extends BaseInfoDO>> INFO_DAP_MAP = MapUtil.newHashMap(8);
 
+    private static final Map<String, String> SEC_INFO_KEY_MAP = MapUtil.newHashMap(8);
+
+    static {
+        SEC_INFO_KEY_MAP.put(SecType.PRIVATE_FUND, InfoConstants.PRIVATE_FUND_INFO);
+        SEC_INFO_KEY_MAP.put(SecType.PUBLICLY_OFFERED_FUNDS, InfoConstants.FUND_INFO);
+        SEC_INFO_KEY_MAP.put(SecType.PRIVATELY_OFFERED_FUND, InfoConstants.FUND_INFO);
+    }
+
     public InfoFactory(Map<String, InfoDao<? extends BaseInfoDO>> component) {
         INFO_DAP_MAP.putAll(component);
     }
 
     @SuppressWarnings("unchecked")
-    public <R extends BaseInfoDO> InfoDao<R> getInstance(String key) {
-        return (InfoDao<R>) INFO_DAP_MAP.getOrDefault(key, DEFAULT);
+    public <R extends BaseInfoDO> InfoDao<R> getInstance(String secType) {
+        return (InfoDao<R>) INFO_DAP_MAP.getOrDefault(SEC_INFO_KEY_MAP.get(secType), DEFAULT);
     }
 }

+ 21 - 0
src/main/java/com/smppw/analysis/domain/dao/info/PrivateFundInfoDao.java

@@ -0,0 +1,21 @@
+package com.smppw.analysis.domain.dao.info;
+
+import com.smppw.analysis.domain.dataobject.info.PrivateFundInfoDO;
+import com.smppw.analysis.domain.mapper.master.CmFundInformationMapper;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component(InfoConstants.PRIVATE_FUND_INFO)
+public class PrivateFundInfoDao extends AbstractInfoDao<PrivateFundInfoDO> {
+    private final CmFundInformationMapper mapper;
+
+    public PrivateFundInfoDao(CmFundInformationMapper mapper) {
+        this.mapper = mapper;
+    }
+
+    @Override
+    protected List<PrivateFundInfoDO> listMultiFundInfo(List<String> subFundIds) {
+        return this.mapper.listMultiFundInfo(subFundIds);
+    }
+}

+ 23 - 0
src/main/java/com/smppw/analysis/domain/dataobject/info/BaseInfoDO.java

@@ -1,5 +1,7 @@
 package com.smppw.analysis.domain.dataobject.info;
 
+import com.smppw.common.pojo.enums.Frequency;
+
 /**
  * @author wangzaijun
  * @date 2023/8/11 14:52
@@ -19,4 +21,25 @@ public abstract class BaseInfoDO {
      * @return /
      */
     public abstract String getRefName();
+
+    /**
+     * 备案编码
+     *
+     * @return /
+     */
+    public abstract String getRegisterNumber();
+
+    /**
+     * 成立日期
+     *
+     * @return /
+     */
+    public abstract String getInceptionDate();
+
+    /**
+     * 净值频率
+     *
+     * @return 基金净值频率
+     */
+    public abstract Frequency getFrequency();
 }

+ 17 - 3
src/main/java/com/smppw/analysis/domain/dataobject/info/FundInfoDO.java

@@ -1,10 +1,9 @@
 package com.smppw.analysis.domain.dataobject.info;
 
+import com.smppw.common.pojo.enums.Frequency;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.Date;
-
 @Setter
 @Getter
 public class FundInfoDO extends BaseInfoDO {
@@ -36,7 +35,7 @@ public class FundInfoDO extends BaseInfoDO {
     /**
      * 基金成立日
      */
-    private Date inceptionDate;
+    private String inceptionDate;
     /**
      * 基金对应基准id
      */
@@ -84,4 +83,19 @@ public class FundInfoDO extends BaseInfoDO {
     public String getRefName() {
         return fundName;
     }
+
+    @Override
+    public String getRegisterNumber() {
+        return this.registerNumber;
+    }
+
+    @Override
+    public String getInceptionDate() {
+        return this.inceptionDate;
+    }
+
+    @Override
+    public Frequency getFrequency() {
+        return null;
+    }
 }

+ 67 - 0
src/main/java/com/smppw/analysis/domain/dataobject/info/PrivateFundInfoDO.java

@@ -0,0 +1,67 @@
+package com.smppw.analysis.domain.dataobject.info;
+
+import com.smppw.common.pojo.enums.Frequency;
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class PrivateFundInfoDO extends BaseInfoDO {
+    /**
+     * 基金id
+     */
+    private String fundId;
+    /**
+     * 基金全称
+     */
+    private String fundName;
+    /**
+     * 基金简称
+     */
+    private String fundShortName;
+    /**
+     * 备案编码
+     */
+    private String registerNumber;
+    /**
+     * 基金成立日
+     */
+    private String inceptionDate;
+
+    /**
+     * 净值频率
+     */
+    private String navFrequency;
+
+    @Override
+    public String getRefId() {
+        return fundId;
+    }
+
+    @Override
+    public String getRefName() {
+        return fundName;
+    }
+
+    @Override
+    public String getRegisterNumber() {
+        return this.registerNumber;
+    }
+
+    @Override
+    public String getInceptionDate() {
+        return this.inceptionDate;
+    }
+
+    @Override
+    public Frequency getFrequency() {
+        if ("日".equals(this.navFrequency) || "天".equals(this.navFrequency)) {
+            return Frequency.Daily;
+        } else if ("周".equals(this.navFrequency)) {
+            return Frequency.Weekly;
+        } else if ("月".equals(this.navFrequency)) {
+            return Frequency.Monthly;
+        }
+        return Frequency.Daily;
+    }
+}

+ 0 - 20
src/main/java/com/smppw/analysis/domain/dataobject/nav/CmNavDo.java

@@ -41,16 +41,6 @@ public class CmNavDo extends BaseNavDO {
     private BigDecimal cumulativeNavWithdrawal;
 
     /**
-     * 净值创新高或新低标志;1-创历史新高;2-创历史新低;3-既没有创历史新高也没有创历史新低;-1-其他
-     */
-    private Integer isHighOrLow;
-
-    /**
-     * 距离历史新高的距离,(历史最高累计净值-最新累计净值)*100%/最新累计净值
-     */
-    private BigDecimal toHighNavRatio;
-
-    /**
      * 创建者Id,默认第一次创建者名称,创建后不变更
      */
     private Integer creatorId;
@@ -75,16 +65,6 @@ public class CmNavDo extends BaseNavDO {
      */
     private Integer isValid;
 
-    /**
-     * 是否排排网数据
-     */
-    private Byte isPpwData;
-
-    /**
-     * 虚拟净值
-     */
-    private BigDecimal virtualNav;
-
     @Override
     public String getRefId() {
         return this.fundId;

+ 4 - 2
src/main/java/com/smppw/analysis/domain/dto/info/FundBaseInfoVO.java

@@ -1,13 +1,15 @@
 package com.smppw.analysis.domain.dto.info;
 
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 /**
  * @author mozuwen
  * @date 2023/8/14 17:00
  * @description 基金基本信息
  */
-@Data
+@Setter
+@Getter
 public class FundBaseInfoVO {
 
     /**

+ 3 - 0
src/main/java/com/smppw/analysis/domain/dto/info/HeadInfoVO.java

@@ -1,5 +1,6 @@
 package com.smppw.analysis.domain.dto.info;
 
+import com.smppw.common.pojo.enums.Frequency;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -71,4 +72,6 @@ public class HeadInfoVO {
      * 最新净值日期
      */
     private String priceDate;
+
+    private Frequency frequency;
 }

+ 15 - 0
src/main/java/com/smppw/analysis/domain/dto/info/PrivateFundHeadInfoVO.java

@@ -0,0 +1,15 @@
+package com.smppw.analysis.domain.dto.info;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangzaijun
+ * @date 2023/8/7 16:41
+ * @description 自建基金基本信息-头部
+ */
+@Setter
+@Getter
+public class PrivateFundHeadInfoVO extends FundHeadInfoVO {
+
+}

+ 4 - 2
src/main/java/com/smppw/analysis/domain/dto/info/PrivatelyFundBaseInfoVO.java

@@ -1,13 +1,15 @@
 package com.smppw.analysis.domain.dto.info;
 
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 /**
  * @author mozuwen
  * @date 2023/8/14 17:00
  * @description 私募基金基本信息
  */
-@Data
+@Setter
+@Getter
 public class PrivatelyFundBaseInfoVO extends FundBaseInfoVO {
 
     /**

+ 0 - 32
src/main/java/com/smppw/analysis/domain/dto/info/PubliclyCurrencyFundHeadInfoVO.java

@@ -1,32 +0,0 @@
-package com.smppw.analysis.domain.dto.info;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.math.BigDecimal;
-
-/**
- * @author wangzaijun
- * @date 2023/8/7 16:41
- * @description 货币型公募基金 头部
- */
-@Setter
-@Getter
-public class PubliclyCurrencyFundHeadInfoVO extends PubliclyFundHeadInfoVO {
-    /**
-     * 是否货币型公募基金
-     */
-    private Integer isCurrency = 0;
-    /**
-     * 7日年化收益
-     */
-    private BigDecimal profitSevenDayAnnual;
-    /**
-     * 百份、万份、百万份收益
-     */
-    private BigDecimal retPerUnit;
-    /**
-     * 单位- 1:百份  2:万份  3:百万份
-     */
-    private String publicWorthUnit;
-}

+ 4 - 2
src/main/java/com/smppw/analysis/domain/dto/info/PubliclyFundBaseInfoVO.java

@@ -2,7 +2,8 @@ package com.smppw.analysis.domain.dto.info;
 
 import com.smppw.common.pojo.ValueLabelVO;
 import com.smppw.common.pojo.dto.NewDateValue;
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.util.List;
 
@@ -11,7 +12,8 @@ import java.util.List;
  * @date 2023/8/18 11:00
  * @description 公募基金基本信息
  */
-@Data
+@Setter
+@Getter
 public class PubliclyFundBaseInfoVO {
 
     /**

+ 0 - 171
src/main/java/com/smppw/analysis/domain/manager/info/AbstractFundHeadInfo.java

@@ -1,171 +0,0 @@
-package com.smppw.analysis.domain.manager.info;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.ListUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.StrUtil;
-import com.smppw.analysis.domain.dao.FundInformationDao;
-import com.smppw.analysis.domain.dao.nav.NavDao;
-import com.smppw.analysis.domain.dao.nav.NavFactory;
-import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
-import com.smppw.analysis.domain.dto.info.FundHeadInfoVO;
-import com.smppw.analysis.domain.dto.info.HeadInfoParams;
-import com.smppw.analysis.domain.service.BaseInfoService;
-import com.smppw.analysis.infrastructure.exception.APIException;
-import com.smppw.common.pojo.ValueLabelVO;
-import com.smppw.common.pojo.dto.NavDto;
-import com.smppw.common.pojo.enums.RaiseType;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-public abstract class AbstractFundHeadInfo<R extends FundHeadInfoVO> extends AbstractHeadInfo<R> {
-    protected final FundInformationDao fundInformationDao;
-    protected final BaseInfoService baseInfoService;
-
-    public AbstractFundHeadInfo(NavFactory navFactory, FundInformationDao fundInformationDao, BaseInfoService baseInfoService) {
-        super(navFactory);
-        this.fundInformationDao = fundInformationDao;
-        this.baseInfoService = baseInfoService;
-    }
-
-    @Override
-    public R get(HeadInfoParams params) {
-        FundHeadInfoVO headInfo = new FundHeadInfoVO();
-        String fundId = params.getSecId();
-        FundInfoDO fundInfo = this.fundInformationDao.getFundInfoById(fundId);
-        if (fundInfo == null) {
-            throw new APIException("基金不存在");
-        }
-        if (fundInfo.getRaiseType() == null) {
-            throw new APIException("基金的募集类型不能为空");
-        }
-        Map<String, String> secNameMap = this.getSecNameMap(fundInfo);
-        headInfo.setRefId(fundId);
-        headInfo.setDetailId(fundId);
-        headInfo.setTrustId(fundInfo.getTrustId());
-        headInfo.setPrimaryBenchmarkId(fundInfo.getPrimaryBenchmarkId());
-        this.handleBaseInfo(headInfo, fundInfo, secNameMap);
-        this.handleManager(headInfo, secNameMap, fundInfo.getManagerIds());
-        this.handleLastNav(headInfo, params.getSecType());
-        R result = this.handleExtInfo(fundInfo, headInfo, secNameMap);
-        this.handleStrategySummaryName(result);
-        return result;
-    }
-
-    public abstract R handleExtInfo(FundInfoDO fundInfo, FundHeadInfoVO headInfo, Map<String, String> secNameMap);
-
-    /**
-     * 获取所有标的的名称映射
-     *
-     * @param fundInfo /
-     * @return /
-     */
-    protected Map<String, String> getSecNameMap(FundInfoDO fundInfo) {
-        List<String> secIds = ListUtil.list(false);
-        secIds.add(fundInfo.getTrustId());
-        secIds.add(fundInfo.getPrimaryBenchmarkId());
-        if (fundInfo.getStrategy() != null) {
-            secIds.add(fundInfo.getStrategy() + "");
-        }
-        if (fundInfo.getSubstrategy() != null) {
-            secIds.add(fundInfo.getSubstrategy() + "");
-        }
-        if (fundInfo.getFirstStrategy() != null) {
-            secIds.add(fundInfo.getFirstStrategy() + "");
-        }
-        if (fundInfo.getSecondStrategy() != null) {
-            secIds.add(fundInfo.getSecondStrategy() + "");
-        }
-        if (fundInfo.getThirdStrategy() != null) {
-            secIds.add(fundInfo.getThirdStrategy() + "");
-        }
-        if (StrUtil.isNotBlank(fundInfo.getManagerIds())) {
-            List<String> tempList = StrUtil.split(fundInfo.getManagerIds(), ",");
-            if (CollUtil.isNotEmpty(tempList)) {
-                secIds.addAll(tempList);
-            }
-        }
-        return this.baseInfoService.querySecName(secIds);
-    }
-
-    /**
-     * 最新的净值数据
-     *
-     * @param headInfo 基本信息
-     * @param secType  标的类型
-     */
-    private void handleLastNav(FundHeadInfoVO headInfo, String secType) {
-        String fundId = headInfo.getRefId();
-        NavDao instance = this.navFactory.getInstance(secType);
-        Map<String, NavDto> navMap = instance.getLastNav(ListUtil.of(fundId));
-        NavDto navDto = navMap.getOrDefault(fundId, new NavDto());
-        headInfo.setPriceDate(navDto.getPriceDate());
-        headInfo.setOriginalNav(StrUtil.toStringOrNull(navDto.getOriginalNav()));
-        headInfo.setCumulativeNav(StrUtil.toStringOrNull(navDto.getCumulativeNav()));
-        headInfo.setCumulativeNavWithdrawal(StrUtil.toStringOrNull(navDto.getCumulativeNavWithdrawal()));
-    }
-
-    /**
-     * 基金经理id和名称
-     *
-     * @param headInfo   /
-     * @param secNameMap /
-     * @param managerIds /
-     */
-    private void handleManager(FundHeadInfoVO headInfo, Map<String, String> secNameMap, String managerIds) {
-        if (StrUtil.isBlank(managerIds)) {
-            return;
-        }
-        List<ValueLabelVO> managers = ListUtil.list(true);
-        List<String> managerList = StrUtil.split(managerIds, ",");
-        for (String managerId : managerList) {
-            managers.add(new ValueLabelVO(managerId, secNameMap.get(managerId)));
-        }
-        headInfo.setManagers(managers);
-    }
-
-    /**
-     * 基本信息填充
-     *
-     * @param headInfo   /
-     * @param fundInfo   /
-     * @param secNameMap /
-     */
-    private void handleBaseInfo(FundHeadInfoVO headInfo, FundInfoDO fundInfo, Map<String, String> secNameMap) {
-        String trustId = headInfo.getTrustId();
-        headInfo.setRefShortName(fundInfo.getFundShortName());
-        headInfo.setRefName(fundInfo.getFundName());
-        headInfo.setRegisterNumber(fundInfo.getRegisterNumber());
-        headInfo.setAmacUrl(fundInfo.getAmacUrl());
-        headInfo.setRaiseType(fundInfo.getRaiseType() == 1 ? "私募" : "公募");
-        RaiseType raiseType = RaiseType.getRaiseType(fundInfo.getRaiseType());
-        headInfo.setRaiseTypeValue(raiseType.name());
-        headInfo.setInceptionDate(DateUtil.formatDate(fundInfo.getInceptionDate()));
-        headInfo.setTrustName(secNameMap.get(trustId));
-        headInfo.setFundStatus(fundInfo.getFundStatus() == null ? null : fundInfo.getFundStatus().toString());
-//        headInfo.setCompanyAssetSize(this.fundInformationDao.getLastCompanyScale(trustId)); // 公司规模
-//        headInfo.setFundScale(this.fundInformationDao.getFundLastAssetSize(headInfo.getRefId())); // 基金规模
-        headInfo.setPrimaryBenchmarkName(secNameMap.get(headInfo.getPrimaryBenchmarkId()));
-    }
-
-    /**
-     * 策略名称拼接处理
-     *
-     * @param info /
-     */
-    private void handleStrategySummaryName(R info) {
-        Integer thirdStrategyId = info.getThirdStrategyId();
-        if (thirdStrategyId == null || Objects.equals(-1, thirdStrategyId)) {
-            info.setThirdStrategyId(null);
-            if (StrUtil.isBlank(info.getSubstrategy())) {
-                info.setStrategySummaryName(info.getStrategy());
-            } else {
-                info.setStrategySummaryName(info.getStrategy() + "/" + info.getSubstrategy());
-            }
-        } else {
-            info.setStrategySummaryName(info.getSubstrategy() + "/" + info.getThirdStrategy());
-        }
-    }
-}

+ 145 - 2
src/main/java/com/smppw/analysis/domain/manager/info/AbstractHeadInfo.java

@@ -1,20 +1,163 @@
 package com.smppw.analysis.domain.manager.info;
 
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dao.nav.NavFactory;
+import com.smppw.analysis.domain.dataobject.info.BaseInfoDO;
+import com.smppw.analysis.domain.dto.info.HeadInfoParams;
 import com.smppw.analysis.domain.dto.info.HeadInfoVO;
+import com.smppw.analysis.infrastructure.exception.APIException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Map;
+
 /**
  * @author wangzaijun
  * @date 2023/8/11 13:49
  * @description 所有标的头部信息获取(获取净值已经抽象、获取基本信息可以抽象)
  */
-public abstract class AbstractHeadInfo<R extends HeadInfoVO> implements HeadInfo<R> {
+public abstract class AbstractHeadInfo<R extends HeadInfoVO, DO extends BaseInfoDO> implements HeadInfo<R> {
     protected final Logger logger = LoggerFactory.getLogger(this.getClass());
     protected final NavFactory navFactory;
+    protected final InfoFactory infoFactory;
 
-    public AbstractHeadInfo(NavFactory navFactory) {
+    public AbstractHeadInfo(NavFactory navFactory, InfoFactory infoFactory) {
         this.navFactory = navFactory;
+        this.infoFactory = infoFactory;
+    }
+
+    @Override
+    public R get(HeadInfoParams params) {
+        String fundId = params.getSecId();
+        DO infoDO = this.loadInfoDO(fundId);
+        if (infoDO == null) {
+            throw new APIException("基金不存在");
+        }
+        Map<String, String> secNameMap = this.getOtherSecNameMap(infoDO);
+        R result = this.handleBaseInfo(infoDO, secNameMap);
+        this.handleLastNav(result, params.getSecType());
+        this.handleStrategySummaryName(result);
+        return result;
     }
+
+    protected abstract DO loadInfoDO(String secId);
+
+    protected abstract R handleBaseInfo(DO infoDO, Map<String, String> secNameMap);
+
+    /**
+     * 获取出当前基金外所有标的的名称映射
+     *
+     * @param infoDO /
+     * @return /
+     */
+    protected abstract Map<String, String> getOtherSecNameMap(DO infoDO);
+//    {
+//        List<String> secIds = ListUtil.list(false);
+////        secIds.add(fundInfo.getTrustId());
+//        secIds.add(infoDO.getPrimaryBenchmarkId());
+//        if (infoDO.getStrategy() != null) {
+//            secIds.add(infoDO.getStrategy() + "");
+//        }
+//        if (infoDO.getSubstrategy() != null) {
+//            secIds.add(infoDO.getSubstrategy() + "");
+//        }
+//        if (infoDO.getFirstStrategy() != null) {
+//            secIds.add(infoDO.getFirstStrategy() + "");
+//        }
+//        if (infoDO.getSecondStrategy() != null) {
+//            secIds.add(infoDO.getSecondStrategy() + "");
+//        }
+//        if (infoDO.getThirdStrategy() != null) {
+//            secIds.add(infoDO.getThirdStrategy() + "");
+//        }
+////        if (StrUtil.isNotBlank(fundInfo.getManagerIds())) {
+////            List<String> tempList = StrUtil.split(fundInfo.getManagerIds(), ",");
+////            if (CollUtil.isNotEmpty(tempList)) {
+////                secIds.addAll(tempList);
+////            }
+////        }
+//        return this.baseInfoService.querySecName(secIds);
+//    }
+
+    /**
+     * 最新的净值数据
+     *
+     * @param headInfo 基本信息
+     * @param secType  标的类型
+     */
+    protected abstract void handleLastNav(R headInfo, String secType);
+//    {
+//        String fundId = headInfo.getRefId();
+//        NavDao instance = this.navFactory.getInstance(secType);
+//        Map<String, NavDto> navMap = instance.getLastNav(ListUtil.of(fundId));
+//        NavDto navDto = navMap.getOrDefault(fundId, new NavDto());
+//        headInfo.setPriceDate(navDto.getPriceDate());
+//        headInfo.setOriginalNav(StrUtil.toStringOrNull(navDto.getOriginalNav()));
+//        headInfo.setCumulativeNav(StrUtil.toStringOrNull(navDto.getCumulativeNav()));
+//        headInfo.setCumulativeNavWithdrawal(StrUtil.toStringOrNull(navDto.getCumulativeNavWithdrawal()));
+//    }
+
+//    /**
+//     * 基金经理id和名称
+//     *
+//     * @param headInfo   /
+//     * @param secNameMap /
+//     * @param managerIds /
+//     */
+//    private void handleManager(FundHeadInfoVO headInfo, Map<String, String> secNameMap, String managerIds) {
+//        if (StrUtil.isBlank(managerIds)) {
+//            return;
+//        }
+//        List<ValueLabelVO> managers = ListUtil.listMultiInfo(true);
+//        List<String> managerList = StrUtil.split(managerIds, ",");
+//        for (String managerId : managerList) {
+//            managers.add(new ValueLabelVO(managerId, secNameMap.get(managerId)));
+//        }
+//        headInfo.setManagers(managers);
+//    }
+
+//    /**
+//     * 基本信息填充
+//     *
+//     * @param headInfo   /
+//     * @param infoDO     /
+//     * @param secNameMap /
+//     */
+//    protected abstract void handleBaseInfo(R headInfo, DO infoDO, Map<String, String> secNameMap);
+//    {
+////        String trustId = headInfo.getTrustId();
+//        headInfo.setRefShortName(infoDO.getFundShortName());
+//        headInfo.setRefName(infoDO.getFundName());
+//        headInfo.setRegisterNumber(infoDO.getRegisterNumber());
+//        headInfo.setAmacUrl(infoDO.getAmacUrl());
+//        headInfo.setRaiseType(infoDO.getRaiseType() == 1 ? "私募" : "公募");
+//        RaiseType raiseType = RaiseType.getRaiseType(infoDO.getRaiseType());
+//        headInfo.setRaiseTypeValue(raiseType.name());
+//        headInfo.setInceptionDate(infoDO.getInceptionDate());
+////        headInfo.setTrustName(secNameMap.get(trustId));
+//        headInfo.setFundStatus(infoDO.getFundStatus() == null ? null : infoDO.getFundStatus().toString());
+////        headInfo.setCompanyAssetSize(this.fundInformationDao.getLastCompanyScale(trustId)); // 公司规模
+////        headInfo.setFundScale(this.fundInformationDao.getFundLastAssetSize(headInfo.getRefId())); // 基金规模
+//        headInfo.setPrimaryBenchmarkName(secNameMap.get(headInfo.getPrimaryBenchmarkId()));
+//    }
+
+    /**
+     * 策略名称拼接处理
+     *
+     * @param info /
+     */
+    protected abstract void handleStrategySummaryName(R info);
+//    {
+//        Integer thirdStrategyId = info.getThirdStrategyId();
+//        if (thirdStrategyId == null || Objects.equals(-1, thirdStrategyId)) {
+//            info.setThirdStrategyId(null);
+//            if (StrUtil.isBlank(info.getSubstrategy())) {
+//                info.setStrategySummaryName(info.getStrategy());
+//            } else {
+//                info.setStrategySummaryName(info.getStrategy() + "/" + info.getSubstrategy());
+//            }
+//        } else {
+//            info.setStrategySummaryName(info.getSubstrategy() + "/" + info.getThirdStrategy());
+//        }
+//    }
 }

+ 3 - 1
src/main/java/com/smppw/analysis/domain/manager/info/HeadInfoConstants.java

@@ -11,11 +11,13 @@ import java.util.Map;
  * @description head-info接口业务处理类 bean常量
  */
 public final class HeadInfoConstants {
+    public static final String PRIVATE_FUND = "privateFundHeadInfo";
     public static final String PRIVATELY_FUND = "privatelyFundHeadInfo";
     public static final String PUBLICLY_FUND = "publiclyFundHeadInfo";
-    public static final Map<String, String> SEC_TYPE_HEAD_MAP = MapUtil.newHashMap(16);
+    public static final Map<String, String> SEC_TYPE_HEAD_MAP = MapUtil.newHashMap(8);
 
     static {
+        SEC_TYPE_HEAD_MAP.put(SecType.PRIVATE_FUND, PRIVATE_FUND);
         SEC_TYPE_HEAD_MAP.put(SecType.PRIVATELY_OFFERED_FUND, PRIVATELY_FUND);
         SEC_TYPE_HEAD_MAP.put(SecType.PUBLICLY_OFFERED_FUNDS, PUBLICLY_FUND);
     }

+ 0 - 1
src/main/java/com/smppw/analysis/domain/manager/info/HeadInfoFactory.java

@@ -9,7 +9,6 @@ import java.util.Map;
 @Component
 public class HeadInfoFactory {
     private final static HeadInfo<HeadInfoVO> DEFAULT = p -> null;
-
     private static final Map<String, HeadInfo<?>> HEAD_INFO_MAP = MapUtil.newConcurrentHashMap(8);
 
     public HeadInfoFactory(Map<String, HeadInfo<?>> component) {

+ 65 - 0
src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivateHeadInfo.java

@@ -0,0 +1,65 @@
+package com.smppw.analysis.domain.manager.info.handler;
+
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
+import com.smppw.analysis.domain.dao.nav.NavDao;
+import com.smppw.analysis.domain.dao.nav.NavFactory;
+import com.smppw.analysis.domain.dataobject.info.PrivateFundInfoDO;
+import com.smppw.analysis.domain.dto.info.PrivateFundHeadInfoVO;
+import com.smppw.analysis.domain.manager.info.AbstractHeadInfo;
+import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
+import com.smppw.common.pojo.dto.NavDto;
+import com.smppw.constants.SecType;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component(HeadInfoConstants.PRIVATE_FUND)
+public class PrivateHeadInfo extends AbstractHeadInfo<PrivateFundHeadInfoVO, PrivateFundInfoDO> {
+    public PrivateHeadInfo(NavFactory navFactory, InfoFactory infoFactory) {
+        super(navFactory, infoFactory);
+    }
+
+    @Override
+    protected PrivateFundInfoDO loadInfoDO(String secId) {
+        String secType = SecType.getSecType(secId, null);
+        return this.infoFactory.<PrivateFundInfoDO>getInstance(secType).getInfo(secId);
+    }
+
+    @Override
+    protected PrivateFundHeadInfoVO handleBaseInfo(PrivateFundInfoDO infoDO, Map<String, String> secNameMap) {
+        PrivateFundHeadInfoVO infoVo = new PrivateFundHeadInfoVO();
+        infoVo.setRefId(infoDO.getRefId());
+        infoVo.setDetailId(infoDO.getRefId());
+        infoVo.setRefName(infoDO.getRefName());
+        infoVo.setRefShortName(infoDO.getFundShortName());
+        infoVo.setInceptionDate(infoDO.getInceptionDate());
+        infoVo.setRegisterNumber(infoDO.getRegisterNumber());
+        infoVo.setFrequency(infoDO.getFrequency());
+        return infoVo;
+    }
+
+    @Override
+    protected Map<String, String> getOtherSecNameMap(PrivateFundInfoDO infoDO) {
+        return MapUtil.empty();
+    }
+
+    @Override
+    protected void handleLastNav(PrivateFundHeadInfoVO headInfo, String secType) {
+        String fundId = headInfo.getRefId();
+        NavDao instance = this.navFactory.getInstance(secType);
+        Map<String, NavDto> navMap = instance.getLastNav(ListUtil.of(fundId));
+        NavDto navDto = navMap.getOrDefault(fundId, new NavDto());
+        headInfo.setPriceDate(navDto.getPriceDate());
+        headInfo.setOriginalNav(StrUtil.toStringOrNull(navDto.getOriginalNav()));
+        headInfo.setCumulativeNav(StrUtil.toStringOrNull(navDto.getCumulativeNav()));
+        headInfo.setCumulativeNavWithdrawal(StrUtil.toStringOrNull(navDto.getCumulativeNavWithdrawal()));
+    }
+
+    @Override
+    protected void handleStrategySummaryName(PrivateFundHeadInfoVO info) {
+
+    }
+}

+ 0 - 39
src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivatelyFundHeadInfo.java

@@ -1,39 +0,0 @@
-package com.smppw.analysis.domain.manager.info.handler;
-
-import cn.hutool.core.bean.BeanUtil;
-import com.smppw.analysis.domain.dao.FundInformationDao;
-import com.smppw.analysis.domain.dao.nav.NavFactory;
-import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
-import com.smppw.analysis.domain.dto.info.FundHeadInfoVO;
-import com.smppw.analysis.domain.dto.info.PrivatelyFundHeadInfoVO;
-import com.smppw.analysis.domain.manager.info.AbstractFundHeadInfo;
-import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
-import com.smppw.analysis.domain.service.BaseInfoService;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-@Component(HeadInfoConstants.PRIVATELY_FUND)
-public class PrivatelyFundHeadInfo extends AbstractFundHeadInfo<PrivatelyFundHeadInfoVO> {
-    public PrivatelyFundHeadInfo(NavFactory navFactory, FundInformationDao fundInformationDao, BaseInfoService baseInfoService) {
-        super(navFactory, fundInformationDao, baseInfoService);
-    }
-
-    @Override
-    public PrivatelyFundHeadInfoVO handleExtInfo(FundInfoDO fundInfo, FundHeadInfoVO headInfo, Map<String, String> secNameMap) {
-        PrivatelyFundHeadInfoVO result = BeanUtil.copyProperties(headInfo, PrivatelyFundHeadInfoVO.class, "strategy", "substrategy", "thirdStrategy");
-        if (fundInfo.getFirstStrategy() != null) {
-            result.setStrategy(secNameMap.get(fundInfo.getFirstStrategy().toString()));
-            result.setStrategyId(fundInfo.getFirstStrategy());
-        }
-        if (fundInfo.getSecondStrategy() != null) {
-            result.setSubstrategy(secNameMap.get(fundInfo.getSecondStrategy().toString()));
-            result.setSubstrategyId(fundInfo.getSecondStrategy());
-        }
-        if (fundInfo.getThirdStrategy() != null) {
-            result.setThirdStrategy(secNameMap.get(fundInfo.getThirdStrategy().toString()));
-            result.setThirdStrategyId(fundInfo.getThirdStrategy());
-        }
-        return result;
-    }
-}

+ 40 - 0
src/main/java/com/smppw/analysis/domain/manager/info/handler/PrivatelyHeadInfo.java

@@ -0,0 +1,40 @@
+//package com.smppw.analysis.domain.manager.info.handler;
+//
+//import cn.hutool.core.bean.BeanUtil;
+//import com.smppw.analysis.domain.dao.info.InfoFactory;
+//import com.smppw.analysis.domain.dao.nav.NavFactory;
+//import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
+//import com.smppw.analysis.domain.dto.info.FundHeadInfoVO;
+//import com.smppw.analysis.domain.dto.info.PrivatelyFundHeadInfoVO;
+//import com.smppw.analysis.domain.manager.info.AbstractHeadInfo;
+//import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
+//import com.smppw.analysis.domain.service.BaseInfoService;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.Map;
+//
+//@Component(HeadInfoConstants.PRIVATELY_FUND)
+//public class PrivatelyHeadInfo extends AbstractHeadInfo<PrivatelyFundHeadInfoVO> {
+//    public PrivatelyHeadInfo(NavFactory navFactory, InfoFactory infoFactory, BaseInfoService baseInfoService) {
+//        super(navFactory, infoFactory, baseInfoService);
+//    }
+//
+//    @Override
+//    public PrivatelyFundHeadInfoVO handleExtInfo(FundInfoDO fundInfo, FundHeadInfoVO headInfo, Map<String, String> secNameMap) {
+//        PrivatelyFundHeadInfoVO result = BeanUtil.copyProperties(headInfo, PrivatelyFundHeadInfoVO.class,
+//                "strategy", "substrategy", "thirdStrategy");
+//        if (fundInfo.getFirstStrategy() != null) {
+//            result.setStrategy(secNameMap.get(fundInfo.getFirstStrategy().toString()));
+//            result.setStrategyId(fundInfo.getFirstStrategy());
+//        }
+//        if (fundInfo.getSecondStrategy() != null) {
+//            result.setSubstrategy(secNameMap.get(fundInfo.getSecondStrategy().toString()));
+//            result.setSubstrategyId(fundInfo.getSecondStrategy());
+//        }
+//        if (fundInfo.getThirdStrategy() != null) {
+//            result.setThirdStrategy(secNameMap.get(fundInfo.getThirdStrategy().toString()));
+//            result.setThirdStrategyId(fundInfo.getThirdStrategy());
+//        }
+//        return result;
+//    }
+//}

+ 0 - 65
src/main/java/com/smppw/analysis/domain/manager/info/handler/PubliclyFundHeadInfo.java

@@ -1,65 +0,0 @@
-package com.smppw.analysis.domain.manager.info.handler;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import com.smppw.analysis.domain.dao.FundInformationDao;
-import com.smppw.analysis.domain.dao.nav.NavFactory;
-import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
-import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
-import com.smppw.analysis.domain.dto.info.FundHeadInfoVO;
-import com.smppw.analysis.domain.dto.info.PubliclyCurrencyFundHeadInfoVO;
-import com.smppw.analysis.domain.dto.info.PubliclyFundHeadInfoVO;
-import com.smppw.analysis.domain.manager.info.AbstractFundHeadInfo;
-import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
-import com.smppw.analysis.domain.service.BaseInfoService;
-import com.smppw.common.pojo.enums.strategy.Strategy;
-import com.smppw.utils.BigDecimalUtils;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-@Component(HeadInfoConstants.PUBLICLY_FUND)
-public class PubliclyFundHeadInfo extends AbstractFundHeadInfo<PubliclyFundHeadInfoVO> {
-    public PubliclyFundHeadInfo(NavFactory navFactory, FundInformationDao fundInformationDao, BaseInfoService baseInfoService) {
-        super(navFactory, fundInformationDao, baseInfoService);
-    }
-
-    @Override
-    public PubliclyFundHeadInfoVO handleExtInfo(FundInfoDO fundInfo, FundHeadInfoVO headInfo, Map<String, String> secNameMap) {
-        if (Objects.equals(Strategy.Cash.getStrategyId(), fundInfo.getStrategy())) {
-            PubliclyCurrencyFundHeadInfoVO result = BeanUtil.copyProperties(headInfo, PubliclyCurrencyFundHeadInfoVO.class);
-            result.setIsCurrency(1);
-            List<MonetaryFundProfitDO> tempList = this.fundInformationDao.queryMonetaryFund(fundInfo.getRefId());
-            if (CollectionUtil.isNotEmpty(tempList)) {
-                MonetaryFundProfitDO monetaryFundProfitDO = tempList.get(tempList.size() - 1);
-                result.setProfitSevenDayAnnual(monetaryFundProfitDO.getProfitServenDayAnnual());
-                if ("万份".equals(result.getPublicWorthUnit())) {
-                    result.setRetPerUnit(monetaryFundProfitDO.getProfitPerMillion());
-                } else if ("百万份".equals(result.getPublicWorthUnit())) {
-                    result.setRetPerUnit(BigDecimalUtils.multiply(monetaryFundProfitDO.getProfitPerMillion(), BigDecimalUtils.toBigDecimal("100")));
-                } else if ("百份".equals(result.getPublicWorthUnit())) {
-                    result.setRetPerUnit(BigDecimalUtils.divide(monetaryFundProfitDO.getProfitPerMillion(), BigDecimalUtils.toBigDecimal("100")));
-                }
-                result.setRetPerUnit(monetaryFundProfitDO.getProfitPerMillion());
-            }
-            this.handleStrategy(fundInfo, result, secNameMap);
-            return result;
-        }
-        PubliclyFundHeadInfoVO result = BeanUtil.copyProperties(headInfo, PubliclyFundHeadInfoVO.class);
-        this.handleStrategy(fundInfo, result, secNameMap);
-        return result;
-    }
-
-    private void handleStrategy(FundInfoDO fundInfo, PubliclyFundHeadInfoVO result, Map<String, String> secNameMap) {
-        if (fundInfo.getStrategy() != null) {
-            result.setStrategy(secNameMap.get(fundInfo.getStrategy().toString()));
-            result.setStrategyId(fundInfo.getStrategy());
-        }
-        if (fundInfo.getSubstrategy() != null) {
-            result.setSubstrategy(secNameMap.get(fundInfo.getSubstrategy().toString()));
-            result.setSubstrategyId(fundInfo.getSubstrategy());
-        }
-    }
-}

+ 58 - 0
src/main/java/com/smppw/analysis/domain/manager/info/handler/PubliclyHeadInfo.java

@@ -0,0 +1,58 @@
+//package com.smppw.analysis.domain.manager.info.handler;
+//
+//import cn.hutool.core.bean.BeanUtil;
+//import com.smppw.analysis.domain.dao.info.InfoFactory;
+//import com.smppw.analysis.domain.dao.nav.NavFactory;
+//import com.smppw.analysis.domain.dataobject.info.FundInfoDO;
+//import com.smppw.analysis.domain.dto.info.FundHeadInfoVO;
+//import com.smppw.analysis.domain.dto.info.PubliclyFundHeadInfoVO;
+//import com.smppw.analysis.domain.manager.info.AbstractHeadInfo;
+//import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
+//import com.smppw.analysis.domain.service.BaseInfoService;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.Map;
+//
+//@Component(HeadInfoConstants.PUBLICLY_FUND)
+//public class PubliclyHeadInfo extends AbstractHeadInfo<PubliclyFundHeadInfoVO> {
+//    public PubliclyHeadInfo(NavFactory navFactory, InfoFactory infoFactory, BaseInfoService baseInfoService) {
+//        super(navFactory, infoFactory, baseInfoService);
+//    }
+//
+//    @Override
+//    public PubliclyFundHeadInfoVO handleExtInfo(FundInfoDO fundInfo, FundHeadInfoVO headInfo, Map<String, String> secNameMap) {
+////        if (Objects.equals(Strategy.Cash.getStrategyId(), fundInfo.getStrategy())) {
+////            PubliclyCurrencyFundHeadInfoVO result = BeanUtil.copyProperties(headInfo, PubliclyCurrencyFundHeadInfoVO.class);
+////            result.setIsCurrency(1);
+//////            List<MonetaryFundProfitDO> tempList = this.fundInformationDao.queryMonetaryFund(fundInfo.getRefId());
+//////            if (CollectionUtil.isNotEmpty(tempList)) {
+//////                MonetaryFundProfitDO monetaryFundProfitDO = tempList.get(tempList.size() - 1);
+//////                result.setProfitSevenDayAnnual(monetaryFundProfitDO.getProfitServenDayAnnual());
+//////                if ("万份".equals(result.getPublicWorthUnit())) {
+//////                    result.setRetPerUnit(monetaryFundProfitDO.getProfitPerMillion());
+//////                } else if ("百万份".equals(result.getPublicWorthUnit())) {
+//////                    result.setRetPerUnit(BigDecimalUtils.multiply(monetaryFundProfitDO.getProfitPerMillion(), BigDecimalUtils.toBigDecimal("100")));
+//////                } else if ("百份".equals(result.getPublicWorthUnit())) {
+//////                    result.setRetPerUnit(BigDecimalUtils.divide(monetaryFundProfitDO.getProfitPerMillion(), BigDecimalUtils.toBigDecimal("100")));
+//////                }
+//////                result.setRetPerUnit(monetaryFundProfitDO.getProfitPerMillion());
+//////            }
+////            this.handleStrategy(fundInfo, result, secNameMap);
+////            return result;
+////        }
+//        PubliclyFundHeadInfoVO result = BeanUtil.copyProperties(headInfo, PubliclyFundHeadInfoVO.class);
+//        this.handleStrategy(fundInfo, result, secNameMap);
+//        return result;
+//    }
+//
+//    private void handleStrategy(FundInfoDO fundInfo, PubliclyFundHeadInfoVO result, Map<String, String> secNameMap) {
+//        if (fundInfo.getStrategy() != null) {
+//            result.setStrategy(secNameMap.get(fundInfo.getStrategy().toString()));
+//            result.setStrategyId(fundInfo.getStrategy());
+//        }
+//        if (fundInfo.getSubstrategy() != null) {
+//            result.setSubstrategy(secNameMap.get(fundInfo.getSubstrategy().toString()));
+//            result.setSubstrategyId(fundInfo.getSubstrategy());
+//        }
+//    }
+//}

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

@@ -2,9 +2,9 @@ package com.smppw.analysis.domain.manager.performance;
 
 import cn.hutool.core.collection.CollUtil;
 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.domain.service.BaseInfoService;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.enums.Frequency;
 import org.slf4j.Logger;
@@ -22,11 +22,11 @@ import java.util.stream.Collectors;
  */
 public abstract class AbstractPerformance<P extends Params, R> implements Performance<P, R> {
     protected final Logger logger = LoggerFactory.getLogger(this.getClass());
-    protected final BaseInfoService baseInfoService;
+    protected final InfoFactory infoFactory;
     protected final BaseIndicatorServiceV2 baseIndicatorServiceV2;
 
-    public AbstractPerformance(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        this.baseInfoService = baseInfoService;
+    public AbstractPerformance(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        this.infoFactory = infoFactory;
         this.baseIndicatorServiceV2 = baseIndicatorServiceV2;
     }
 

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

@@ -5,9 +5,9 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.BaseParams;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
 import com.smppw.common.pojo.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.enums.DateIntervalType;
@@ -24,8 +24,8 @@ import java.util.Map;
  * @description 抽象的单标的的业绩表现
  */
 public abstract class AbstractSingleSecPerformance<P extends BaseParams, R> extends AbstractPerformance<P, R> {
-    public AbstractSingleSecPerformance(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        super(baseInfoService, baseIndicatorServiceV2);
+    public AbstractSingleSecPerformance(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        super(infoFactory, baseIndicatorServiceV2);
     }
 
     @Override

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

@@ -11,7 +11,7 @@ public final class PerformanceConstants {
     public static final String CORRELATION = "cor";
     public static final String WIN = "win";
     public static final String REVENUE = "revenue";
-    public static final String IMF = "imf";
+//    public static final String IMF = "imf";
     public static final String INTERVAL = "interval";
     public static final String ROLLING = "rolling";
 //    public static final String RANK = "rank";

+ 5 - 4
src/main/java/com/smppw/analysis/domain/manager/performance/handler/CorrelationHandler.java

@@ -5,11 +5,11 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.CorrelationParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.domain.service.NavService;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.dto.DateRange;
@@ -20,6 +20,7 @@ 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;
@@ -32,8 +33,8 @@ import java.util.*;
 public class CorrelationHandler extends AbstractSingleSecPerformance<CorrelationParams, Map<String, Object>> {
     private final NavService navService;
 
-    public CorrelationHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2, NavService navService) {
-        super(baseInfoService, baseIndicatorServiceV2);
+    public CorrelationHandler(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2, NavService navService) {
+        super(infoFactory, baseIndicatorServiceV2);
         this.navService = navService;
     }
 
@@ -91,7 +92,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.baseInfoService.querySecName(secIds);
+        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
         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();
     }

+ 0 - 42
src/main/java/com/smppw/analysis/domain/manager/performance/handler/ImfTrendHandler.java

@@ -1,42 +0,0 @@
-package com.smppw.analysis.domain.manager.performance.handler;
-
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.map.MapUtil;
-import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
-import com.smppw.analysis.domain.dto.performance.TrendParams;
-import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
-import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-@Component(PerformanceConstants.IMF)
-public class ImfTrendHandler extends TrendHandler {
-    public ImfTrendHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        super(baseInfoService, baseIndicatorServiceV2);
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    protected Map<String, Object> bizSecHandle(TrendParams params) {
-        String fundId = params.getRefIds().get(0);
-        Map<String, Object> result = super.bizSecHandle(params);
-        Map<String, List<Map<String, Object>>> dataset = MapUtil.get(result, "dataset", Map.class);
-        List<MonetaryFundProfitDO> doList = this.baseInfoService.queryMonetaryFund(fundId);
-        dataset.forEach((k, v) -> {
-            if (fundId.equals(k)) {
-                for (Map<String, Object> map : v) {
-                    String date = MapUtil.getStr(map, "date");
-                    MonetaryFundProfitDO aDo = doList.stream().filter(e -> date.equals(DateUtil.formatDate(e.getPriceDate()))).findFirst().orElse(null);
-                    map.put("profit", Optional.ofNullable(aDo).map(MonetaryFundProfitDO::getProfitPerMillion).orElse(null));
-                    map.put("serven", Optional.ofNullable(aDo).map(MonetaryFundProfitDO::getProfitServenDayAnnual).orElse(null));
-                }
-            }
-        });
-        result.put("dataset", dataset);
-        return result;
-    }
-}

+ 6 - 5
src/main/java/com/smppw/analysis/domain/manager/performance/handler/IndicatorHandler.java

@@ -4,11 +4,11 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.IndicatorParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcSecDataDto;
@@ -16,6 +16,7 @@ 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;
 
@@ -26,8 +27,8 @@ import java.util.Optional;
 
 @Component(PerformanceConstants.INDICATOR)
 public class IndicatorHandler extends AbstractSingleSecPerformance<IndicatorParams, Map<String, Object>> {
-    public IndicatorHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        super(baseInfoService, baseIndicatorServiceV2);
+    public IndicatorHandler(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        super(infoFactory, baseIndicatorServiceV2);
     }
 
     @Override
@@ -83,7 +84,7 @@ public class IndicatorHandler extends AbstractSingleSecPerformance<IndicatorPara
             }
         }
         // 返回结果对象构建
-        Map<String, String> productNameMapping = this.baseInfoService.querySecName(secIds);
+        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
         Map<String, Object> dataset = MapUtil.builder(valuesMap).putAll(indexValuesMap).build();
         return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", productNameMapping).build();
     }
@@ -104,7 +105,7 @@ public class IndicatorHandler extends AbstractSingleSecPerformance<IndicatorPara
             }
         }
         if (StrUtil.isEmpty(consistency)) {
-            indicatorValues.put(Indicator.PerformanceConsistency.name(), PerformanceConsistency.convert2Word(null));
+            indicatorValues.put(Indicator.PerformanceConsistency.name(), null);
         } else {
             indicatorValues.put(Indicator.PerformanceConsistency.name(), PerformanceConsistency.convert2Word(Double.parseDouble(consistency)));
         }

+ 5 - 4
src/main/java/com/smppw/analysis/domain/manager/performance/handler/IntervalHandler.java

@@ -4,11 +4,11 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 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.IntervalParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcReqPropertyDto;
@@ -18,6 +18,7 @@ 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;
@@ -26,8 +27,8 @@ import java.util.Optional;
 
 @Component(PerformanceConstants.INTERVAL)
 public class IntervalHandler extends AbstractSingleSecPerformance<IntervalParams, Map<String, Object>> {
-    public IntervalHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        super(baseInfoService, baseIndicatorServiceV2);
+    public IntervalHandler(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        super(infoFactory, baseIndicatorServiceV2);
     }
 
     @Override
@@ -105,7 +106,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.baseInfoService.querySecName(secIds);
+        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
         if (excess) {
             for (String indexId : indexIds) {
                 productNameMapping.remove(indexId);

+ 3 - 4
src/main/java/com/smppw/analysis/domain/manager/performance/handler/MulSecMulIndicatorHandler.java

@@ -1,11 +1,11 @@
 package com.smppw.analysis.domain.manager.performance.handler;
 
 import cn.hutool.core.collection.ListUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.MulSecMulIndicatorParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
 import com.smppw.common.pojo.enums.DateIntervalType;
@@ -23,9 +23,8 @@ import java.util.Map;
  */
 @Component(PerformanceConstants.MUL_SEC_MUL_INDICATOR)
 public class MulSecMulIndicatorHandler extends AbstractSingleSecPerformance<MulSecMulIndicatorParams, Map<String, List<IndicatorCalcPropertyDto>>> {
-
-    public MulSecMulIndicatorHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        super(baseInfoService, baseIndicatorServiceV2);
+    public MulSecMulIndicatorHandler(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        super(infoFactory, baseIndicatorServiceV2);
     }
 
     @Override

+ 5 - 4
src/main/java/com/smppw/analysis/domain/manager/performance/handler/RevenueHandler.java

@@ -6,13 +6,13 @@ import cn.hutool.core.lang.Pair;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.HistoryRetTableSingleResp;
 import com.smppw.analysis.domain.dto.performance.RevenueParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.HistoryRetTableUtil;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.dto.calc.*;
 import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
@@ -22,6 +22,7 @@ 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;
@@ -37,8 +38,8 @@ public class RevenueHandler extends AbstractSingleSecPerformance<RevenueParams,
     private static final String DISTRIBUTION = "2";
     private static final List<String> TYPE_LIST = ListUtil.of(STATISTICS, DISTRIBUTION);
 
-    public RevenueHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        super(baseInfoService, baseIndicatorServiceV2);
+    public RevenueHandler(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        super(infoFactory, baseIndicatorServiceV2);
     }
 
     @Override
@@ -141,7 +142,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.baseInfoService.querySecName(secIds);
+        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
         Map<String, Object> extInfos = MapUtil.<String, Object>builder("endDate", params.getEndDate()).put("startDate", params.getStartDate()).build();
         if (STATISTICS.equals(params.getRevenuType())) {
             // table

+ 5 - 4
src/main/java/com/smppw/analysis/domain/manager/performance/handler/RollingHandler.java

@@ -4,13 +4,13 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.HistoryRetTableSingleResp;
 import com.smppw.analysis.domain.dto.performance.RollingParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.HistoryRetTableUtil;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
@@ -20,6 +20,7 @@ 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;
 
@@ -30,8 +31,8 @@ import java.util.Optional;
 
 @Component(PerformanceConstants.ROLLING)
 public class RollingHandler extends AbstractSingleSecPerformance<RollingParams, Map<String, Object>> {
-    public RollingHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        super(baseInfoService, baseIndicatorServiceV2);
+    public RollingHandler(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        super(infoFactory, baseIndicatorServiceV2);
     }
 
     @Override
@@ -143,7 +144,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.baseInfoService.querySecName(secIds);
+        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
         if (excess) {
             for (String indexId : indexIds) {
                 productNameMapping.remove(indexId);

+ 5 - 4
src/main/java/com/smppw/analysis/domain/manager/performance/handler/TrendHandler.java

@@ -4,11 +4,11 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.TrendParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcSecDataDto;
@@ -17,6 +17,7 @@ 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;
 
@@ -26,8 +27,8 @@ import java.util.Optional;
 
 @Component(PerformanceConstants.TREND)
 public class TrendHandler extends AbstractSingleSecPerformance<TrendParams, Map<String, Object>> {
-    public TrendHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        super(baseInfoService, baseIndicatorServiceV2);
+    public TrendHandler(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        super(infoFactory, baseIndicatorServiceV2);
     }
 
     @Override
@@ -71,7 +72,7 @@ public class TrendHandler extends AbstractSingleSecPerformance<TrendParams, Map<
                 indexDataListMap.put(indexId, this.buildDateValue(tempDateList, tempIndexTrendTypeListMap.get(indexId), indexTrendTypes));
             }
         }
-        Map<String, String> productNameMapping = this.baseInfoService.querySecName(secIds);
+        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
         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) {

+ 3 - 3
src/main/java/com/smppw/analysis/domain/manager/performance/handler/WinHandler.java

@@ -2,12 +2,12 @@ package com.smppw.analysis.domain.manager.performance.handler;
 
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.WinParams;
 import com.smppw.analysis.domain.dto.performance.WinVO;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.infrastructure.consts.WinRateBmk;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.dto.CompoundRet;
@@ -29,8 +29,8 @@ import java.util.stream.Collectors;
 
 @Component(PerformanceConstants.WIN)
 public class WinHandler extends AbstractSingleSecPerformance<WinParams, WinVO> {
-    public WinHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
-        super(baseInfoService, baseIndicatorServiceV2);
+    public WinHandler(InfoFactory infoFactory, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        super(infoFactory, baseIndicatorServiceV2);
     }
 
     @Override

+ 0 - 11
src/main/java/com/smppw/analysis/domain/mapper/core/MonetaryFundProfitMapper.java

@@ -1,11 +0,0 @@
-package com.smppw.analysis.domain.mapper.core;
-
-import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-@Repository
-public interface MonetaryFundProfitMapper {
-    List<MonetaryFundProfitDO> queryByFundId(String fundId);
-}

+ 11 - 0
src/main/java/com/smppw/analysis/domain/mapper/master/CmFundInformationMapper.java

@@ -0,0 +1,11 @@
+package com.smppw.analysis.domain.mapper.master;
+
+import com.smppw.analysis.domain.dataobject.info.PrivateFundInfoDO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface CmFundInformationMapper {
+    List<PrivateFundInfoDO> listMultiFundInfo(List<String> fundIds);
+}

+ 30 - 52
src/main/java/com/smppw/analysis/domain/service/BaseInfoService.java

@@ -1,13 +1,7 @@
 package com.smppw.analysis.domain.service;
 
-import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
 import com.smppw.analysis.domain.dataobject.PrivatelyFundBaseInfoDo;
 import com.smppw.analysis.domain.dataobject.PubliclyFundBaseInfoDo;
-import com.smppw.common.pojo.ValueLabelVO;
-import com.smppw.common.pojo.enums.Frequency;
-
-import java.util.List;
-import java.util.Map;
 
 /**
  * @author wangzaijun
@@ -15,52 +9,36 @@ import java.util.Map;
  * @description 基础信息服务
  */
 public interface BaseInfoService {
-    /**
-     * 常用指数
-     *
-     * @return /
-     */
-    List<ValueLabelVO> getCommonIndexList();
-
-    /**
-     * 获取标的类型
-     *
-     * @param secId /
-     * @return /
-     */
-    String getSecType(String secId);
-
-    /**
-     * 获取类型与标的的对应关系
-     *
-     * @param secIdList 标的集合
-     * @return /
-     */
-    Map<String, List<String>> getTypeSecMap(List<String> secIdList);
-
-    /**
-     * 获取标的id和名称映射关系
-     *
-     * @param allSecIdList 标的id集合
-     * @return /
-     */
-    Map<String, String> querySecName(List<String> allSecIdList);
-
-    /**
-     * 湖区标的净值频率
-     *
-     * @param secId 标的id
-     * @return /
-     */
-    Frequency getNavFrequency(String secId);
-
-    /**
-     * 获取货币基金业绩列表
-     *
-     * @param fundId 基金id
-     * @return /
-     */
-    List<MonetaryFundProfitDO> queryMonetaryFund(String fundId);
+//    /**
+//     * 常用指数
+//     *
+//     * @return /
+//     */
+//    List<ValueLabelVO> getCommonIndexList();
+
+//    /**
+//     * 获取标的id和名称映射关系
+//     *
+//     * @param allSecIdList 标的id集合
+//     * @return /
+//     */
+//    Map<String, String> querySecName(List<String> allSecIdList);
+
+//    /**
+//     * 湖区标的净值频率
+//     *
+//     * @param secId 标的id
+//     * @return /
+//     */
+//    Frequency getNavFrequency(String secId);
+
+//    /**
+//     * 获取货币基金业绩列表
+//     *
+//     * @param fundId 基金id
+//     * @return /
+//     */
+//    List<MonetaryFundProfitDO> queryMonetaryFund(String fundId);
 
     /**
      * 获取私募基金的基本信息

+ 8 - 7
src/main/java/com/smppw/analysis/domain/service/impl/BaseIndicatorServiceV2Impl.java

@@ -2,7 +2,7 @@ package com.smppw.analysis.domain.service.impl;
 
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
-import com.smppw.analysis.domain.dao.FundInformationDao;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 import com.smppw.analysis.domain.service.NavService;
 import com.smppw.common.pojo.dto.DateValue;
@@ -11,6 +11,7 @@ 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.common.pojo.enums.strategy.IStrategy;
+import com.smppw.constants.SecType;
 import com.smppw.core.IndicatorService;
 import org.springframework.stereotype.Service;
 
@@ -22,11 +23,11 @@ import java.util.stream.Collectors;
 @Service
 public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
     private final NavService navService;
-    private final FundInformationDao fundInformationDao;
+    private final InfoFactory infoFactory;
 
-    public BaseIndicatorServiceV2Impl(NavService navService, FundInformationDao fundInformationDao) {
+    public BaseIndicatorServiceV2Impl(NavService navService, InfoFactory infoFactory) {
         this.navService = navService;
-        this.fundInformationDao = fundInformationDao;
+        this.infoFactory = infoFactory;
     }
 
     @Override
@@ -46,7 +47,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.fundInformationDao.getNavFrequency(mainSecIdList);
+        Map<String, Frequency> secFreqMap = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecFreqMap(mainSecIdList);
         return IndicatorService.getInstance().calcMultipleSecMultipleTimeRangeIndicator(req, allNavMap, secFreqMap);
     }
 
@@ -59,7 +60,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.fundInformationDao.getNavFrequency(mainSecIdList);
+        Map<String, Frequency> secFreqMap = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecFreqMap(mainSecIdList);
         return IndicatorService.getInstance().getMultipleSecTrend(mainSecIdList, secBenchmarkIdMap, indexIdList, dateIntervalDto, fixedIncome,
                 initValue, frequency, trendTypeV2List, secFreqMap, allNavMap);
     }
@@ -68,7 +69,7 @@ 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.fundInformationDao.getNavFrequency(mainSecIdList);
+        Map<String, Frequency> secFreqMap = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecFreqMap(mainSecIdList);
         return IndicatorService.getInstance().getMultiSecRetListNew(mainSecIdList, indexIds, frequency, rollingFrequency, startDate, endDate, ifExcessReturn,
                 benchmarkId, raiseType, strategy, visible, navType, allNavMap, secFreqMap);
     }

+ 93 - 197
src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java

@@ -3,223 +3,119 @@ package com.smppw.analysis.domain.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.domain.dao.FundInformationDao;
-import com.smppw.analysis.domain.dao.IndexesProfileDao;
-import com.smppw.analysis.domain.dao.nav.RongzhiIndexNavDao;
-import com.smppw.analysis.domain.dataobject.CommonIndexDO;
-import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
 import com.smppw.analysis.domain.dataobject.PrivatelyFundBaseInfoDo;
 import com.smppw.analysis.domain.dataobject.PubliclyFundBaseInfoDo;
-import com.smppw.analysis.domain.event.SaveCacheEvent;
-import com.smppw.analysis.domain.gateway.CacheFactory;
-import com.smppw.analysis.domain.gateway.CacheGateway;
-import com.smppw.analysis.domain.mapper.core.CommonIndexMapper;
 import com.smppw.analysis.domain.service.BaseInfoService;
-import com.smppw.analysis.infrastructure.config.AnalysisProperty;
-import com.smppw.analysis.infrastructure.consts.RedisConst;
-import com.smppw.common.cache.CaffeineLocalCache;
-import com.smppw.common.pojo.ValueLabelVO;
-import com.smppw.common.pojo.enums.Frequency;
-import com.smppw.common.pojo.enums.strategy.IStrategy;
-import com.smppw.constants.SecType;
 import com.smppw.utils.StrategyHandleUtils;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.lang.NonNull;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
-import java.util.stream.Collectors;
 
 @Service
-public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextAware {
-    public static final String HF = "HF";
-    public static final String MF = "MF";
-    public static final String CF = "CF";
-    public static final String FA = "FA";
-    public static final String CI = "CI";
-    public static final String CO = "CO";
-    public static final String PL = "PL";
-    public static final String PO = "PO";
-    public static final String IN = "IN";
-    public static final String AP = "AP";
-    private static final Map<String, Boolean> INDEX_EXIST = MapUtil.newConcurrentHashMap();
-    private final CacheGateway<Object> cacheGateway;
-    private final IndexesProfileDao indexesProfileDao;
-    private final RongzhiIndexNavDao rongzhiIndexNavDao;
+public class BaseInfoServiceImpl implements BaseInfoService {
+//    private final CacheGateway<Object> cacheGateway;
+//    private final IndexesProfileDao indexesProfileDao;
     private final FundInformationDao fundInformationDao;
-    private final CommonIndexMapper commonIndexMapper;
-    private ApplicationContext applicationContext;
+//    private final CommonIndexMapper commonIndexMapper;
+//    private ApplicationContext applicationContext;
 
-    public BaseInfoServiceImpl(AnalysisProperty property, CacheFactory cacheFactory, IndexesProfileDao indexesProfileDao,
-                               RongzhiIndexNavDao rongzhiIndexNavDao, FundInformationDao fundInformationDao, CommonIndexMapper commonIndexMapper) {
-        this.cacheGateway = cacheFactory.getCacheGateway(property.getCacheType());
-        this.indexesProfileDao = indexesProfileDao;
-        this.rongzhiIndexNavDao = rongzhiIndexNavDao;
+    public BaseInfoServiceImpl(FundInformationDao fundInformationDao) {
+//        this.cacheGateway = cacheFactory.getCacheGateway(property.getCacheType());
+//        this.indexesProfileDao = indexesProfileDao;
         this.fundInformationDao = fundInformationDao;
-        this.commonIndexMapper = commonIndexMapper;
+//        this.commonIndexMapper = commonIndexMapper;
     }
+//
+//    @Override
+//    public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
+//        this.applicationContext = applicationContext;
+//    }
 
-    @Override
-    public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
-        this.applicationContext = applicationContext;
-    }
+//    @Override
+//    public List<ValueLabelVO> getCommonIndexList() {
+//        List<CommonIndexDO> dataList = this.commonIndexMapper.selectList();
+//        return dataList.stream().map(e -> new ValueLabelVO(e.getIndexId(), e.getIndexName())).collect(Collectors.toList());
+//    }
 
-    @Override
-    public List<ValueLabelVO> getCommonIndexList() {
-        List<CommonIndexDO> dataList = this.commonIndexMapper.selectList();
-        return dataList.stream().map(e -> new ValueLabelVO(e.getIndexId(), e.getIndexName())).collect(Collectors.toList());
-    }
-
-    @Override
-    public String getSecType(String secId) {
-        if (secId == null) {
-            return null;
-        }
-        if (secId.startsWith(HF)) {
-            return SecType.PRIVATELY_OFFERED_FUND;
-        } else if (secId.startsWith(MF)) {
-            return SecType.PUBLICLY_OFFERED_FUNDS;
-        } else if (secId.startsWith(CF)) {
-            return SecType.PRIVATE_FUND;
-        } else if (secId.startsWith(FA)) {
-            return SecType.FACTOR;
-        } else if (secId.startsWith(CI)) {
-            return SecType.UDF_INDEX;
-        } else if (secId.startsWith(CO)) {
-            return SecType.COMPANY;
-        } else if (secId.startsWith(PL)) {
-            return SecType.MANAGER;
-        } else if (secId.startsWith(PO)) {
-            return SecType.COMBINATION;
-        } else if (StrUtil.isNumeric(secId)) {
-            IStrategy strategy = StrategyHandleUtils.getStrategy(secId);
-            if (strategy != null) {
-                return SecType.STRATEGY;
-            }
-        } else if (secId.startsWith(IN)) {
-            List<String> thirdIndexes = CaffeineLocalCache.getThirdIndexes();
-            if (thirdIndexes != null && thirdIndexes.contains(secId)) {
-                return SecType.THIRD_INDEX_FUND;
-            }
-            List<String> riskOfFreeIdList = CaffeineLocalCache.getRiskOfFreeId();
-            if (riskOfFreeIdList != null && riskOfFreeIdList.contains(secId)) {
-                return SecType.RISK_OF_FREE;
-            }
-            Boolean isExist = INDEX_EXIST.getOrDefault(secId, false);
-            if (!isExist) {
-                isExist = rongzhiIndexNavDao.isExist(secId);
-                INDEX_EXIST.put(secId, isExist);
-                return SecType.INDEX_FUND;
-            } else {
-                return SecType.RONGZHI_INDEX;
-            }
-        } else if (secId.startsWith(AP)) {
-            return SecType.ADVISORY_POOL_CURVE;
-        }
-        return null;
-    }
+//    @Override
+//    public Frequency getNavFrequency(String secId) {
+//        Frequency frequency;
+//        String fundType = SecType.getSecType(secId, null);
+//        if (SecType.MANAGER.equals(fundType) || SecType.COMPANY.equals(fundType)) {
+//            frequency = Frequency.Monthly;
+//        } else if (SecType.PRIVATELY_OFFERED_FUND.equals(fundType) ||
+//                SecType.PUBLICLY_OFFERED_FUNDS.equals(fundType) ||
+//                SecType.INDEX_FUND.equals(fundType) ||
+//                SecType.RONGZHI_INDEX.equals(fundType)) {
+//            String freq = this.fundInformationDao.getNavFrequencyByFundId(secId);
+//            if ("天".equals(freq)) {
+//                frequency = Frequency.Daily;
+//            } else if ("周".equals(freq)) {
+//                frequency = Frequency.Weekly;
+//            } else {
+//                frequency = Frequency.Monthly;
+//            }
+//        } else {
+//            frequency = Frequency.Daily;
+//        }
+//        return frequency;
+//    }
 
-    @Override
-    public Map<String, List<String>> getTypeSecMap(List<String> secIdList) {
-        Map<String, List<String>> secIdTypeMap = new HashMap<>(10);
-        for (String secId : secIdList) {
-            String secIdType = getSecType(secId);
-            if (secIdTypeMap.containsKey(secIdType)) {
-                List<String> list = secIdTypeMap.get(secIdType);
-                list.add(secId);
-            } else {
-                List<String> list = new ArrayList<>();
-                list.add(secId);
-                secIdTypeMap.put(secIdType, list);
-            }
-        }
-        return secIdTypeMap;
-    }
+//    @Override
+//    public Map<String, String> querySecName(List<String> allSecIdList) {
+//        if (CollUtil.isEmpty(allSecIdList)) {
+//            return MapUtil.empty();
+//        }
+//        int size = allSecIdList.size();
+//        String key = RedisConst.SEC_NAME;
+//        Map<String, Object> hget = this.cacheGateway.hget(key);
+//        if (MapUtil.isEmpty(hget)) {
+//            hget = MapUtil.empty();
+//        }
+//        Map<Boolean, List<String>> redisSecMap = allSecIdList.stream().collect(Collectors.groupingBy(hget::containsKey));
+//        List<String> redisSecIds = redisSecMap.getOrDefault(Boolean.TRUE, ListUtil.empty());
+//        List<String> noRedisSecIds = redisSecMap.getOrDefault(Boolean.FALSE, ListUtil.empty());
+//        Map<String, Object> secNameMap = MapUtil.newHashMap(size, false);
+//        if (CollUtil.isNotEmpty(noRedisSecIds)) {
+//            Map<String, List<String>> typeSecMap = SecType.getTypeSecMap(noRedisSecIds, null);
+//            // 市场基金
+//            List<String> marketFundIds = ListUtil.of(SecType.PRIVATELY_OFFERED_FUND, SecType.PUBLICLY_OFFERED_FUNDS);
+//            this.loadNameMap(secNameMap, typeSecMap, marketFundIds, this.fundInformationDao::getMarketFundIdNameMap);
+//            // 市场指数
+//            List<String> marketIndexIds = ListUtil.of(SecType.INDEX_FUND, SecType.RONGZHI_INDEX, SecType.THIRD_INDEX_FUND);
+//            this.loadNameMap(secNameMap, typeSecMap, marketIndexIds, this.indexesProfileDao::getFundIdNameMap);
+////            // 基金经理
+////            List<String> managerIds = ListUtil.of(SecType.MANAGER);
+////            this.loadNameMap(secNameMap, typeSecMap, managerIds, this.personnelInformationDao::getFundIdNameMap);
+////            // 基金管理人
+////            List<String> companyIds = ListUtil.of(SecType.COMPANY);
+////            this.loadNameMap(secNameMap, typeSecMap, companyIds, this.companyInformationDao::getFundIdNameMap);
+//            // 策略
+//            List<String> strategyIds = ListUtil.of(SecType.STRATEGY);
+//            this.loadNameMap(secNameMap, typeSecMap, strategyIds, this::getStrategyIdNameMap);
+//            // 推送事件,存缓存
+//            SaveCacheEvent<Map<String, Object>> event = new SaveCacheEvent<>(key, secNameMap, t -> {
+//                this.cacheGateway.hset(key, t);
+//                return this.cacheGateway.expire(key, 1, TimeUnit.DAYS);
+//            });
+//            this.applicationContext.publishEvent(event);
+//        }
+//        // 解决乱序问题
+//        Map<String, String> result = MapUtil.newHashMap(size, true);
+//        for (String secId : allSecIdList) {
+//            String name = redisSecIds.contains(secId) ? MapUtil.getStr(hget, secId) : MapUtil.getStr(secNameMap, secId);
+//            result.put(secId, name);
+//        }
+//        return result;
+//    }
 
-    @Override
-    public Frequency getNavFrequency(String secId) {
-        Frequency frequency;
-        String fundType = this.getSecType(secId);
-        if (SecType.MANAGER.equals(fundType) || SecType.COMPANY.equals(fundType)) {
-            frequency = Frequency.Monthly;
-        } else if (SecType.PRIVATELY_OFFERED_FUND.equals(fundType) ||
-                SecType.PUBLICLY_OFFERED_FUNDS.equals(fundType) ||
-                SecType.INDEX_FUND.equals(fundType) ||
-                SecType.RONGZHI_INDEX.equals(fundType)) {
-            String freq = this.fundInformationDao.getNavFrequencyByFundId(secId);
-            if ("天".equals(freq)) {
-                frequency = Frequency.Daily;
-            } else if ("周".equals(freq)) {
-                frequency = Frequency.Weekly;
-            } else {
-                frequency = Frequency.Monthly;
-            }
-        } else {
-            frequency = Frequency.Daily;
-        }
-        return frequency;
-    }
-
-    @Override
-    public Map<String, String> querySecName(List<String> allSecIdList) {
-        if (CollUtil.isEmpty(allSecIdList)) {
-            return MapUtil.empty();
-        }
-        int size = allSecIdList.size();
-        String key = RedisConst.SEC_NAME;
-        Map<String, Object> hget = this.cacheGateway.hget(key);
-        if (MapUtil.isEmpty(hget)) {
-            hget = MapUtil.empty();
-        }
-        Map<Boolean, List<String>> redisSecMap = allSecIdList.stream().collect(Collectors.groupingBy(hget::containsKey));
-        List<String> redisSecIds = redisSecMap.getOrDefault(Boolean.TRUE, ListUtil.empty());
-        List<String> noRedisSecIds = redisSecMap.getOrDefault(Boolean.FALSE, ListUtil.empty());
-        Map<String, Object> secNameMap = MapUtil.newHashMap(size, false);
-        if (CollUtil.isNotEmpty(noRedisSecIds)) {
-            Map<String, List<String>> typeSecMap = this.getTypeSecMap(noRedisSecIds);
-            // 市场基金
-            List<String> marketFundIds = ListUtil.of(SecType.PRIVATELY_OFFERED_FUND, SecType.PUBLICLY_OFFERED_FUNDS);
-            this.loadNameMap(secNameMap, typeSecMap, marketFundIds, this.fundInformationDao::getMarketFundIdNameMap);
-            // 市场指数
-            List<String> marketIndexIds = ListUtil.of(SecType.INDEX_FUND, SecType.RONGZHI_INDEX, SecType.THIRD_INDEX_FUND);
-            this.loadNameMap(secNameMap, typeSecMap, marketIndexIds, this.indexesProfileDao::getFundIdNameMap);
-//            // 基金经理
-//            List<String> managerIds = ListUtil.of(SecType.MANAGER);
-//            this.loadNameMap(secNameMap, typeSecMap, managerIds, this.personnelInformationDao::getFundIdNameMap);
-//            // 基金管理人
-//            List<String> companyIds = ListUtil.of(SecType.COMPANY);
-//            this.loadNameMap(secNameMap, typeSecMap, companyIds, this.companyInformationDao::getFundIdNameMap);
-            // 策略
-            List<String> strategyIds = ListUtil.of(SecType.STRATEGY);
-            this.loadNameMap(secNameMap, typeSecMap, strategyIds, this::getStrategyIdNameMap);
-            // 推送事件,存缓存
-            SaveCacheEvent<Map<String, Object>> event = new SaveCacheEvent<>(key, secNameMap, t -> {
-                this.cacheGateway.hset(key, t);
-                return this.cacheGateway.expire(key, 1, TimeUnit.DAYS);
-            });
-            this.applicationContext.publishEvent(event);
-        }
-        // 解决乱序问题
-        Map<String, String> result = MapUtil.newHashMap(size, true);
-        for (String secId : allSecIdList) {
-            String name = redisSecIds.contains(secId) ? MapUtil.getStr(hget, secId) : MapUtil.getStr(secNameMap, secId);
-            result.put(secId, name);
-        }
-        return result;
-    }
-
-    @Override
-    public List<MonetaryFundProfitDO> queryMonetaryFund(String fundId) {
-        return this.fundInformationDao.queryMonetaryFund(fundId);
-    }
+//    @Override
+//    public List<MonetaryFundProfitDO> queryMonetaryFund(String fundId) {
+//        return this.fundInformationDao.queryMonetaryFund(fundId);
+//    }
 
     @Override
     public PrivatelyFundBaseInfoDo listPrivatelyFundInfo(String fundId) {

+ 2 - 5
src/main/java/com/smppw/analysis/domain/service/impl/NavServiceImpl.java

@@ -2,7 +2,6 @@ package com.smppw.analysis.domain.service.impl;
 
 import com.smppw.analysis.domain.dao.nav.NavConstants;
 import com.smppw.analysis.domain.dao.nav.NavFactory;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.domain.service.NavService;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.dto.NavDto;
@@ -22,11 +21,9 @@ import java.util.Map;
 @Slf4j
 public class NavServiceImpl implements NavService {
     private final NavFactory navFactory;
-    private final BaseInfoService baseInfoService;
 
-    public NavServiceImpl(NavFactory navFactory, BaseInfoService baseInfoService) {
+    public NavServiceImpl(NavFactory navFactory) {
         this.navFactory = navFactory;
-        this.baseInfoService = baseInfoService;
     }
 
     @Override
@@ -48,7 +45,7 @@ public class NavServiceImpl implements NavService {
         Map<String, List<DateValue>> allNavMap = new HashMap<>();
 
         //对secId进行分类
-        Map<String, List<String>> secIdTypeMap = baseInfoService.getTypeSecMap(allSecIdList);
+        Map<String, List<String>> secIdTypeMap = SecType.getTypeSecMap(allSecIdList, null);
 
         //1.市场私募净值
         List<String> marketPrivateFundIdList = secIdTypeMap.get(SecType.PRIVATELY_OFFERED_FUND);

+ 21 - 4
src/main/java/com/smppw/analysis/infrastructure/components/ApiSignInterceptor.java

@@ -1,5 +1,6 @@
 package com.smppw.analysis.infrastructure.components;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
@@ -12,10 +13,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.MediaType;
 import org.springframework.lang.NonNull;
+import org.springframework.util.AntPathMatcher;
 import org.springframework.web.servlet.HandlerInterceptor;
 
 import java.nio.charset.Charset;
 import java.time.Duration;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -24,7 +27,9 @@ import java.util.Map;
  * @description api验证签名拦截器
  */
 public class ApiSignInterceptor implements HandlerInterceptor {
-    private static final long MAX_TIMEOUT = 50000L;
+    private static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
+
+    private static final long MAX_TIMEOUT_SECOND = 24 * 60 * 60L;
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
     private final AnalysisProperty property;
 
@@ -34,8 +39,9 @@ public class ApiSignInterceptor implements HandlerInterceptor {
 
     @Override
     public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) throws Exception {
+        String requestURI = request.getRequestURI();
         if (logger.isInfoEnabled()) {
-            logger.info(StrUtil.format("{} 接口正在被 {} 请求!", request.getRequestURI(), request.getRemoteAddr()));
+            logger.info(StrUtil.format("{} 接口正在被 {} 请求!", requestURI, request.getRemoteAddr()));
         }
         if (!this.property.getEnableSign()) {
             if (logger.isDebugEnabled()) {
@@ -43,6 +49,17 @@ public class ApiSignInterceptor implements HandlerInterceptor {
             }
             return HandlerInterceptor.super.preHandle(request, response, handler);
         }
+        List<String> whitelist = this.property.getWhitelist();
+        if (CollUtil.isNotEmpty(whitelist)) {
+            for (String path : whitelist) {
+                if (PATH_MATCHER.match(path, requestURI)) {
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("接口配置了白名单,不需要签名验证!");
+                    }
+                    return HandlerInterceptor.super.preHandle(request, response, handler);
+                }
+            }
+        }
         String sign = request.getHeader("sign");
         if (StrUtil.isBlank(sign)) {
             this.writeFailJson(response, "sign 参数为空");
@@ -88,8 +105,8 @@ public class ApiSignInterceptor implements HandlerInterceptor {
     private boolean checkTimestamp(HttpServletRequest request, HttpServletResponse response, String timestamp, Duration timeout) throws Exception {
         long millis = System.currentTimeMillis();
         long time = Long.parseLong(timestamp);
-        long seconds = Math.min(timeout.getSeconds(), MAX_TIMEOUT);
-        if (millis - time > seconds * 1000) {
+        long seconds = Math.min(timeout.getSeconds(), MAX_TIMEOUT_SECOND);
+        if (millis - time > seconds * 1000L) {
             logger.error(StrUtil.format("接口有重放攻击,调用方:{}-{}"), request.getRemoteUser(), request.getRemoteAddr());
             this.writeFailJson(response, "请求失败!");
             return false;

+ 12 - 0
src/main/java/com/smppw/analysis/infrastructure/config/AnalysisProperty.java

@@ -29,6 +29,10 @@ public class AnalysisProperty {
      * appKey 不能随意更改,要和RankDao的实现类一致
      */
     private List<AppSign> appSigns;
+    /**
+     * 签名验证白名单
+     */
+    private List<String> whitelist;
 
     public String getCacheType() {
         return cacheType;
@@ -54,6 +58,14 @@ public class AnalysisProperty {
         this.appSigns = appSigns;
     }
 
+    public List<String> getWhitelist() {
+        return whitelist;
+    }
+
+    public void setWhitelist(List<String> whitelist) {
+        this.whitelist = whitelist;
+    }
+
     @Setter
     @Getter
     public static class AppSign {

+ 1 - 1
src/main/java/com/smppw/analysis/infrastructure/gatewayimpl/RedisCacheGateway.java

@@ -560,7 +560,7 @@ public class RedisCacheGateway implements CacheGateway<Object> {
             return 0L;
         }
     }
-    // ===============================list=================================
+    // ===============================listMultiInfo=================================
 
     /**
      * 获取list缓存的内容

+ 33 - 43
src/main/resources/application.yaml

@@ -17,33 +17,9 @@ server:
 spring:
   application:
     name: smppw-analysis
-  profiles:
-    active: tob
   datasource:
-    core:
-      jdbc-url: jdbc:mysql://47.112.140.222:3306/rz_hfdb_core?allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull
-      username: rz_cm_master
-      password: TbLuENLK
-      driver-class-name: com.mysql.cj.jdbc.Driver
-      hikari:
-        pool-name: hfdb_core
-        # 连接池最大连接数,默认是10
-        maximum-pool-size: 10
-        # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
-        auto-commit: true
-        # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
-        max-lifetime: 900000
-        # 数据库连接超时时间,设置为300秒超时
-        connection-timeout: 300000
-        # keepalive time
-        keepalive-time: 60000
-  master:
-    jdbc-url: jdbc:mysql://47.112.140.222:3306/rz_combination_master?allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull
-    username: rz_cm_master
-    password: TbLuENLK
-    driver-class-name: com.mysql.cj.jdbc.Driver
     hikari:
-      pool-name: master
+      pool-name: hfdb_core
       # 连接池最大连接数,默认是10
       maximum-pool-size: 10
       # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
@@ -54,32 +30,46 @@ spring:
       connection-timeout: 300000
       # keepalive time
       keepalive-time: 60000
-  data:
-    redis:
-      host: 192.168.1.28
-      port: 6379
-      password: twznW28grxzk
-      timeout: 30000
-      database: 2
-      jedis:
-        pool:
-          max-idle: 6    #最大空闲数
-          max-active: 10 #最大连接数
-          min-idle: 2    #最小空闲数
+    core:
+      jdbc-url: jdbc:mysql://120.78.215.178:3306/empower_managers?allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull
+      username: empower_managers_user
+      password: MR3WOzQ64G0TKp7
+      driver-class-name: com.mysql.cj.jdbc.Driver
+    master:
+      jdbc-url: jdbc:mysql://120.78.215.178:3306/empower_managers?allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull
+      username: empower_managers_user
+      password: MR3WOzQ64G0TKp7
+      driver-class-name: com.mysql.cj.jdbc.Driver
+#  data:
+#    redis:
+#      host: 192.168.1.28
+#      port: 6379
+#      password: twznW28grxzk
+#      timeout: 30000
+#      database: 2
+#      jedis:
+#        pool:
+#          max-idle: 6    #最大空闲数
+#          max-active: 10 #最大连接数
+#          min-idle: 2    #最小空闲数
 
 smppw:
   data:
     analysis:
-      cache-type: redis # 缓存类型,支持redis和memory;如果是redis必须配置redis
+      # 缓存类型,支持redis和memory;如果是redis必须配置redis
+      cache-type: memory
       enable-sign: true
+      # 签名拦截的白名单
+      whitelist:
+        - /v1/sign
+        - /error
+      # 签名配置
       app-signs:
         - app-key: ppw-toc
-          app-secret: abcdef
-          enabled: false
-          timeout: 360000 # 6分钟
-        - app-key: ppw-tob
-          app-secret: abcdef
+          app-secret: 1234567890abcdef
           enabled: true
+          # 本次签名有效时间60分钟
+          timeout: 3600000
 
 # 打印一下sql日志
 logging:

+ 2 - 2
src/main/resources/mapping/core/DepositNavMapper.xml

@@ -19,13 +19,13 @@
     id, fund_id, price_date, nav, creatorid, createtime, updaterid, updatetime, isvalid
   </sql>
   <select id="listRiskOfFreeId" resultType="java.lang.String">
-    select distinct fund_id from deposit_nav where isvalid = 1
+    select distinct fund_id from rz_deposit_nav where isvalid = 1
   </select>
 
   <select id="listNav" resultMap="BaseResultMap">
     select
     <include refid="Base_Column_List"/>
-    from deposit_nav where isvalid = 1
+    from rz_deposit_nav where isvalid = 1
     <if test="startDate != null and startDate != ''">
       AND price_date &gt;= #{startDate}
     </if>

+ 8 - 8
src/main/resources/mapping/core/IndexesTradeDateMapper.xml

@@ -34,20 +34,20 @@
 
     <select id="queryLatestTradeDate" resultType="string" parameterType="string">
         select max(trade_date)
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isvalid = 1 and trade_date &lt;= #{tradeDate} and isholiday = 0
     </select>
 
     <select id="listNatureDays" resultMap="BaseResultMap">
         select <include refid="Base_Column_List" />
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isvalid = 1
         order by trade_date asc
     </select>
 
     <select id="listHolidays" resultType="java.lang.String">
         SELECT t.trade_date
-        FROM indexes_trade_date t
+        FROM rz_indexes_trade_date t
         WHERE t.isholiday = 1
           AND t.isvalid = 1
         GROUP BY t.trade_date
@@ -55,7 +55,7 @@
     </select>
     <select id="listIntervalHolidays" resultType="java.lang.String">
         select trade_date
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isholiday = 1
           and isvalid = 1
           and trade_date between #{startDate} and #{endDate}
@@ -63,7 +63,7 @@
     </select>
     <select id="listTradeDates" resultType="java.lang.String">
         select trade_date
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isholiday = 0
           and isvalid = 1
           and trade_date between #{startDate} and #{endDate}
@@ -71,7 +71,7 @@
     </select>
     <select id="countTradeDateDistance" resultType="java.lang.Integer">
         select count(*)
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isholiday = 0
           and isvalid = 1
           and trade_date &gt; #{startDate} and trade_date &lt; #{endDate}
@@ -79,14 +79,14 @@
 
     <select id="listNatureDaysByCondition" resultMap="BaseResultMap">
         select <include refid="Base_Column_List" />
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isvalid = 1 and isholiday = 0
             and trade_date &lt;= #{endDate} and trade_date &gt;= #{startDate}
         order by trade_date
     </select>
     <select id="listTradeDatesByFrequency" resultType="java.lang.String">
         select trade_date
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isholiday = 0
           and isvalid = 1
           and trade_date between #{startDate} and #{endDate}

+ 0 - 31
src/main/resources/mapping/core/MonetaryFundProfitMapper.xml

@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smppw.analysis.domain.mapper.core.MonetaryFundProfitMapper">
-    <resultMap id="BaseResultMap" type="com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO">
-        <!--@mbg.generated-->
-        <!--@Table monetary_fund_profit-->
-        <id column="id" jdbcType="INTEGER" property="id" />
-        <result column="fund_id" jdbcType="VARCHAR" property="fundId" />
-        <result column="price_date" jdbcType="DATE" property="priceDate" />
-        <result column="profit_per_million" jdbcType="DECIMAL" property="profitPerMillion" />
-        <result column="profit_serven_day_annual" jdbcType="DECIMAL" property="profitServenDayAnnual" />
-        <result column="involved_days" jdbcType="INTEGER" property="involvedDays" />
-        <result column="isvalid" jdbcType="TINYINT" property="isvalid" />
-        <result column="creatorid" jdbcType="INTEGER" property="creatorid" />
-        <result column="createtime" jdbcType="TIMESTAMP" property="createtime" />
-        <result column="updaterid" jdbcType="INTEGER" property="updaterid" />
-        <result column="updatetime" jdbcType="TIMESTAMP" property="updatetime" />
-    </resultMap>
-    <sql id="Base_Column_List">
-        <!--@mbg.generated-->
-        id, fund_id, price_date, profit_per_million, profit_serven_day_annual, involved_days,
-        isvalid, creatorid, createtime, updaterid, updatetime
-    </sql>
-
-    <select id="queryByFundId" resultMap="BaseResultMap">
-        select
-        <include refid="Base_Column_List"/>
-        from rz_hfdb_core.monetary_fund_profit
-        where fund_id = #{fundId} and isvalid = 1 order by price_date
-    </select>
-</mapper>

+ 16 - 0
src/main/resources/mapping/master/CmFundInformationMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.smppw.analysis.domain.mapper.master.CmFundInformationMapper">
+    <select id="listMultiFundInfo" resultType="com.smppw.analysis.domain.dataobject.info.PrivateFundInfoDO">
+        select t.fund_id as fundId,
+               t.fund_name as fundName,
+               t.fund_short_name as fundShortName,
+               t.register_number as registerNumber,
+               t.inception_date as inceptionDate
+        from rz_fund_information t where t.isvalid=1
+        and t.fund_id in
+        <foreach collection="fundIds" item="fundId" open="(" close=")" separator=",">
+            #{fundId}
+        </foreach>
+    </select>
+</mapper>

+ 3 - 8
src/main/resources/mapping/master/CmNavMapper.xml

@@ -10,28 +10,23 @@
         <result column="nav" property="nav"/>
         <result column="cumulative_nav" property="cumulativeNav"/>
         <result column="cumulative_nav_withdrawal" property="cumulativeNavWithdrawal"/>
-        <result column="ishigh_or_low" property="isHighOrLow"/>
-        <result column="tohigh_nav_ratio" property="toHighNavRatio"/>
         <result column="creatorid" property="creatorId"/>
         <result column="createtime" property="createTime"/>
         <result column="updaterid" property="updaterId"/>
         <result column="updatetime" property="updateTime"/>
         <result column="isvalid" property="isValid"/>
-        <result column="is_ppw_data" property="isPpwData"/>
-        <result column="virtual_nav" property="virtualNav"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
-        id, fund_id, price_date, nav, cumulative_nav, cumulative_nav_withdrawal, ishigh_or_low,
-        tohigh_nav_ratio, creatorid, createtime, updaterid, updatetime, isvalid, is_ppw_data,
-        virtual_nav
+        id, fund_id, price_date, nav, cumulative_nav, cumulative_nav_withdrawal,
+        creatorid, createtime, updaterid, updatetime, isvalid
     </sql>
 
     <select id="listNav" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List"/>
-        from cm_nav where isvalid = 1
+        from rz_fund_nav where isvalid = 1
         <if test="startDate != null and startDate != ''">
             AND price_date &gt;= #{startDate}
         </if>