Browse Source

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

wangzaijun 10 months ago
parent
commit
a734270b17
58 changed files with 957 additions and 975 deletions
  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();
         IndicatorParams params = new IndicatorParams();
         params.setSecIds(CollectionUtil.newArrayList());
         params.setSecIds(CollectionUtil.newArrayList());
         params.setRefIds(CollectionUtil.newArrayList(this.getSecId()));
         params.setRefIds(CollectionUtil.newArrayList(this.getSecId()));
-        params.setBenchmarkId(Consts.BENCHMARK);
+//        params.setBenchmarkId(Consts.BENCHMARK);
         params.setNavType(this.getNavType());
         params.setNavType(this.getNavType());
         params.setRaiseType(this.getRaiseType());
         params.setRaiseType(this.getRaiseType());
         params.setStrategy(this.getStrategy());
         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 = BeanUtil.copyProperties(fundInfo, PubliclyFundBaseInfoVO.class);
         publiclyFundBaseInfoVO.setBaseCurrency(fundInfo.getBaseCurrency() != null ? BASE_CURRENCY_MAP.get(Integer.valueOf(fundInfo.getBaseCurrency())) : null);
         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);
 //        List<FundManagerInfoDo> fundManagerInfoList = this.baseInfoService.listFundManagerByFundId(fundId);
 //        if (CollUtil.isNotEmpty(fundManagerInfoList)) {
 //        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.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.application.dto.info.*;
 import com.smppw.analysis.application.dto.info.*;
 import com.smppw.analysis.domain.dto.info.HeadInfoParams;
 import com.smppw.analysis.domain.dto.info.HeadInfoParams;
 import com.smppw.analysis.domain.dto.info.HeadInfoVO;
 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.dto.performance.IndicatorParams;
 import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
 import com.smppw.analysis.domain.manager.info.HeadInfoConstants;
 import com.smppw.analysis.domain.manager.info.HeadInfoFactory;
 import com.smppw.analysis.domain.manager.info.HeadInfoFactory;
 import com.smppw.analysis.domain.manager.performance.Performance;
 import com.smppw.analysis.domain.manager.performance.Performance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceFactory;
 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.domain.service.NavService;
 import com.smppw.analysis.infrastructure.exception.APIException;
 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.ValueLabelVO;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcTimeRangeDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcTimeRangeDto;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.constants.SecType;
 import com.smppw.constants.SecType;
 import com.smppw.core.IndicatorService;
 import com.smppw.core.IndicatorService;
-import com.smppw.utils.StrategyHandleUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 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;
 import java.util.stream.Collectors;
 
 
 @Service
 @Service
 public class GlobalService {
 public class GlobalService {
     private final NavService navService;
     private final NavService navService;
-    private final BaseInfoService baseInfoService;
     private final HeadInfoFactory headInfoFactory;
     private final HeadInfoFactory headInfoFactory;
     private final PerformanceFactory performanceFactory;
     private final PerformanceFactory performanceFactory;
 
 
     public GlobalService(NavService navService,
     public GlobalService(NavService navService,
-                         BaseInfoService baseInfoService,
                          HeadInfoFactory headInfoFactory,
                          HeadInfoFactory headInfoFactory,
                          PerformanceFactory performanceFactory) {
                          PerformanceFactory performanceFactory) {
         this.navService = navService;
         this.navService = navService;
-        this.baseInfoService = baseInfoService;
         this.headInfoFactory = headInfoFactory;
         this.headInfoFactory = headInfoFactory;
         this.performanceFactory = performanceFactory;
         this.performanceFactory = performanceFactory;
     }
     }
 
 
     public HeadInfoVO headInfo(HeadInfoReq req) {
     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();
         HeadInfoParams params = req.convert();
         params.setSecType(secType);
         params.setSecType(secType);
-        return this.headInfoFactory.getInstance(type).get(params);
+        return this.headInfoFactory.getInstance(headInfoBean).get(params);
     }
     }
 
 
     public CommonInfoVO commonInfo(CommonInfoReq params) {
     public CommonInfoVO commonInfo(CommonInfoReq params) {
-        String secType = this.baseInfoService.getSecType(params.getSecId());
+        String secType = SecType.getSecType(params.getSecId(), null);
         CommonInfoVO res = new CommonInfoVO();
         CommonInfoVO res = new CommonInfoVO();
         String secId = params.getSecId();
         String secId = params.getSecId();
         List<Frequency> result = CollectionUtil.newArrayList();
         List<Frequency> result = CollectionUtil.newArrayList();
@@ -68,7 +62,7 @@ public class GlobalService {
             throw new APIException("");
             throw new APIException("");
         }
         }
         String raiseType = fundHeadInfo.getRaiseType();
         String raiseType = fundHeadInfo.getRaiseType();
-        result.add(this.baseInfoService.getNavFrequency(secId));
+        result.add(fundHeadInfo.getFrequency());
         // 将频率转换一道 取最小频率
         // 将频率转换一道 取最小频率
         List<Frequency> frequencies = this.toFrequencyList(result);
         List<Frequency> frequencies = this.toFrequencyList(result);
         if (Objects.equals("2", raiseType)) {
         if (Objects.equals("2", raiseType)) {
@@ -81,10 +75,10 @@ public class GlobalService {
                 .filter(p -> !NavType.All.equals(p) && !NavType.UnitAndCumulativeNav.equals(p))
                 .filter(p -> !NavType.All.equals(p) && !NavType.UnitAndCumulativeNav.equals(p))
                 .map(p -> new ValueLabelVO(p.name(), p.getDesc())).collect(Collectors.toList());
                 .map(p -> new ValueLabelVO(p.name(), p.getDesc())).collect(Collectors.toList());
         res.setNavType(navType);
         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;
         return res;
     }
     }
 
 
@@ -123,13 +117,13 @@ public class GlobalService {
         return res;
         return res;
     }
     }
 
 
-    private void handleTimeRange(CommonInfoVO vo, String secId) {
+    private void handleTimeRange(CommonInfoVO vo, String secId, Frequency frequency) {
         List<String> refIds = ListUtil.toLinkedList(secId);
         List<String> refIds = ListUtil.toLinkedList(secId);
         String endDate = null;
         String endDate = null;
         String startDate = 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);
         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();
         Map<String, String> timeRangeMap = MapUtil.newHashMap();
         for (IndicatorCalcTimeRangeDto timeRange : secTimeRanges) {
         for (IndicatorCalcTimeRangeDto timeRange : secTimeRanges) {
             if (StringUtils.isEmpty(endDate)) {
             if (StringUtils.isEmpty(endDate)) {
@@ -145,41 +139,41 @@ public class GlobalService {
         vo.setStartDate(startDate);
         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);
         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) {
     public Map<String, Object> interval(IntervalReq req) {
         IntervalParams params = req.convert();
         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);
         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")
     @PostMapping("dynamic-down")
     public ResultVo<Map<String, Object>> dynamicDown(@RequestBody DrawdownTrendReq req) {
     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;
 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 org.springframework.stereotype.Component;
 
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 @Component
 @Component
 public class FundInformationDao {
 public class FundInformationDao {
-//    private final FundAssetSizeMapper fundAssetSizeMapper;
-    private final FundFrequencyMapper fundFrequencyMapper;
+//    private final FundFrequencyMapper fundFrequencyMapper;
     private final FundInformationMapper fundInformationMapper;
     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.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);
         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);
         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;
 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 com.smppw.analysis.domain.dataobject.info.BaseInfoDO;
 
 
+import java.util.List;
+
 public abstract class AbstractInfoDao<R extends BaseInfoDO> implements InfoDao<R> {
 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;
 import java.util.List;
 
 
+/**
+ * 市场基金的基本信息获取
+ * todo
+ */
 @Component(InfoConstants.FUND_INFO)
 @Component(InfoConstants.FUND_INFO)
-public class FundInfoDao extends AbstractInfoDao<FundInfoDO>{
+public class FundInfoDao extends AbstractInfoDao<FundInfoDO> {
     @Override
     @Override
-    public List<FundInfoDO> list(List<String> secIds) {
+    protected List<FundInfoDO> listMultiFundInfo(List<String> subFundIds) {
         return ListUtil.empty();
         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 final class InfoConstants {
     public static final String FUND_INFO = "fundInfo";
     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() {
     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;
 package com.smppw.analysis.domain.dao.info;
 
 
+import cn.hutool.core.collection.ListUtil;
 import com.smppw.analysis.domain.dataobject.info.BaseInfoDO;
 import com.smppw.analysis.domain.dataobject.info.BaseInfoDO;
+import com.smppw.common.pojo.enums.Frequency;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * @author wangzaijun
  * @author wangzaijun
@@ -11,10 +15,57 @@ import java.util.List;
  */
  */
 public interface InfoDao<R extends BaseInfoDO> {
 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集合
      * @param secIds 标的id集合
      * @return /
      * @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.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import com.smppw.analysis.domain.dataobject.info.BaseInfoDO;
 import com.smppw.analysis.domain.dataobject.info.BaseInfoDO;
+import com.smppw.constants.SecType;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.util.Map;
 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 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, 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) {
     public InfoFactory(Map<String, InfoDao<? extends BaseInfoDO>> component) {
         INFO_DAP_MAP.putAll(component);
         INFO_DAP_MAP.putAll(component);
     }
     }
 
 
     @SuppressWarnings("unchecked")
     @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;
 package com.smppw.analysis.domain.dataobject.info;
 
 
+import com.smppw.common.pojo.enums.Frequency;
+
 /**
 /**
  * @author wangzaijun
  * @author wangzaijun
  * @date 2023/8/11 14:52
  * @date 2023/8/11 14:52
@@ -19,4 +21,25 @@ public abstract class BaseInfoDO {
      * @return /
      * @return /
      */
      */
     public abstract String getRefName();
     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;
 package com.smppw.analysis.domain.dataobject.info;
 
 
+import com.smppw.common.pojo.enums.Frequency;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
-import java.util.Date;
-
 @Setter
 @Setter
 @Getter
 @Getter
 public class FundInfoDO extends BaseInfoDO {
 public class FundInfoDO extends BaseInfoDO {
@@ -36,7 +35,7 @@ public class FundInfoDO extends BaseInfoDO {
     /**
     /**
      * 基金成立日
      * 基金成立日
      */
      */
-    private Date inceptionDate;
+    private String inceptionDate;
     /**
     /**
      * 基金对应基准id
      * 基金对应基准id
      */
      */
@@ -84,4 +83,19 @@ public class FundInfoDO extends BaseInfoDO {
     public String getRefName() {
     public String getRefName() {
         return fundName;
         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;
     private BigDecimal cumulativeNavWithdrawal;
 
 
     /**
     /**
-     * 净值创新高或新低标志;1-创历史新高;2-创历史新低;3-既没有创历史新高也没有创历史新低;-1-其他
-     */
-    private Integer isHighOrLow;
-
-    /**
-     * 距离历史新高的距离,(历史最高累计净值-最新累计净值)*100%/最新累计净值
-     */
-    private BigDecimal toHighNavRatio;
-
-    /**
      * 创建者Id,默认第一次创建者名称,创建后不变更
      * 创建者Id,默认第一次创建者名称,创建后不变更
      */
      */
     private Integer creatorId;
     private Integer creatorId;
@@ -75,16 +65,6 @@ public class CmNavDo extends BaseNavDO {
      */
      */
     private Integer isValid;
     private Integer isValid;
 
 
-    /**
-     * 是否排排网数据
-     */
-    private Byte isPpwData;
-
-    /**
-     * 虚拟净值
-     */
-    private BigDecimal virtualNav;
-
     @Override
     @Override
     public String getRefId() {
     public String getRefId() {
         return this.fundId;
         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;
 package com.smppw.analysis.domain.dto.info;
 
 
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 
 /**
 /**
  * @author mozuwen
  * @author mozuwen
  * @date 2023/8/14 17:00
  * @date 2023/8/14 17:00
  * @description 基金基本信息
  * @description 基金基本信息
  */
  */
-@Data
+@Setter
+@Getter
 public class FundBaseInfoVO {
 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;
 package com.smppw.analysis.domain.dto.info;
 
 
+import com.smppw.common.pojo.enums.Frequency;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
@@ -71,4 +72,6 @@ public class HeadInfoVO {
      * 最新净值日期
      * 最新净值日期
      */
      */
     private String priceDate;
     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;
 package com.smppw.analysis.domain.dto.info;
 
 
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 
 /**
 /**
  * @author mozuwen
  * @author mozuwen
  * @date 2023/8/14 17:00
  * @date 2023/8/14 17:00
  * @description 私募基金基本信息
  * @description 私募基金基本信息
  */
  */
-@Data
+@Setter
+@Getter
 public class PrivatelyFundBaseInfoVO extends FundBaseInfoVO {
 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.ValueLabelVO;
 import com.smppw.common.pojo.dto.NewDateValue;
 import com.smppw.common.pojo.dto.NewDateValue;
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -11,7 +12,8 @@ import java.util.List;
  * @date 2023/8/18 11:00
  * @date 2023/8/18 11:00
  * @description 公募基金基本信息
  * @description 公募基金基本信息
  */
  */
-@Data
+@Setter
+@Getter
 public class PubliclyFundBaseInfoVO {
 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;
 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.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.domain.dto.info.HeadInfoVO;
+import com.smppw.analysis.infrastructure.exception.APIException;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 
 
+import java.util.Map;
+
 /**
 /**
  * @author wangzaijun
  * @author wangzaijun
  * @date 2023/8/11 13:49
  * @date 2023/8/11 13:49
  * @description 所有标的头部信息获取(获取净值已经抽象、获取基本信息可以抽象)
  * @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 Logger logger = LoggerFactory.getLogger(this.getClass());
     protected final NavFactory navFactory;
     protected final NavFactory navFactory;
+    protected final InfoFactory infoFactory;
 
 
-    public AbstractHeadInfo(NavFactory navFactory) {
+    public AbstractHeadInfo(NavFactory navFactory, InfoFactory infoFactory) {
         this.navFactory = navFactory;
         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常量
  * @description head-info接口业务处理类 bean常量
  */
  */
 public final class HeadInfoConstants {
 public final class HeadInfoConstants {
+    public static final String PRIVATE_FUND = "privateFundHeadInfo";
     public static final String PRIVATELY_FUND = "privatelyFundHeadInfo";
     public static final String PRIVATELY_FUND = "privatelyFundHeadInfo";
     public static final String PUBLICLY_FUND = "publiclyFundHeadInfo";
     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 {
     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.PRIVATELY_OFFERED_FUND, PRIVATELY_FUND);
         SEC_TYPE_HEAD_MAP.put(SecType.PUBLICLY_OFFERED_FUNDS, PUBLICLY_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
 @Component
 public class HeadInfoFactory {
 public class HeadInfoFactory {
     private final static HeadInfo<HeadInfoVO> DEFAULT = p -> null;
     private final static HeadInfo<HeadInfoVO> DEFAULT = p -> null;
-
     private static final Map<String, HeadInfo<?>> HEAD_INFO_MAP = MapUtil.newConcurrentHashMap(8);
     private static final Map<String, HeadInfo<?>> HEAD_INFO_MAP = MapUtil.newConcurrentHashMap(8);
 
 
     public HeadInfoFactory(Map<String, HeadInfo<?>> component) {
     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.collection.CollUtil;
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.text.CharSequenceUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.Params;
 import com.smppw.analysis.domain.dto.performance.Params;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.enums.Frequency;
 import com.smppw.common.pojo.enums.Frequency;
 import org.slf4j.Logger;
 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> {
 public abstract class AbstractPerformance<P extends Params, R> implements Performance<P, R> {
     protected final Logger logger = LoggerFactory.getLogger(this.getClass());
     protected final Logger logger = LoggerFactory.getLogger(this.getClass());
-    protected final BaseInfoService baseInfoService;
+    protected final InfoFactory infoFactory;
     protected final BaseIndicatorServiceV2 baseIndicatorServiceV2;
     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;
         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.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.BaseParams;
 import com.smppw.analysis.domain.dto.performance.BaseParams;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 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.CalcMultipleSecMultipleTimeRangeIndicatorReq;
 import com.smppw.common.pojo.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.enums.DateIntervalType;
 import com.smppw.common.pojo.enums.DateIntervalType;
@@ -24,8 +24,8 @@ import java.util.Map;
  * @description 抽象的单标的的业绩表现
  * @description 抽象的单标的的业绩表现
  */
  */
 public abstract class AbstractSingleSecPerformance<P extends BaseParams, R> extends AbstractPerformance<P, R> {
 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
     @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 CORRELATION = "cor";
     public static final String WIN = "win";
     public static final String WIN = "win";
     public static final String REVENUE = "revenue";
     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 INTERVAL = "interval";
     public static final String ROLLING = "rolling";
     public static final String ROLLING = "rolling";
 //    public static final String RANK = "rank";
 //    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.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.CorrelationParams;
 import com.smppw.analysis.domain.dto.performance.CorrelationParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 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.domain.service.NavService;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.dto.DateRange;
 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.TimeRange;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.rollrange.RollingSpliter;
 import com.smppw.common.rollrange.RollingSpliter;
+import com.smppw.constants.SecType;
 import com.smppw.core.IndicatorService;
 import com.smppw.core.IndicatorService;
 import com.smppw.utils.CalcUtils;
 import com.smppw.utils.CalcUtils;
 import com.smppw.utils.NavUtil;
 import com.smppw.utils.NavUtil;
@@ -32,8 +33,8 @@ import java.util.*;
 public class CorrelationHandler extends AbstractSingleSecPerformance<CorrelationParams, Map<String, Object>> {
 public class CorrelationHandler extends AbstractSingleSecPerformance<CorrelationParams, Map<String, Object>> {
     private final NavService navService;
     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;
         this.navService = navService;
     }
     }
 
 
@@ -91,7 +92,7 @@ public class CorrelationHandler extends AbstractSingleSecPerformance<Correlation
             resultList.add(result);
             resultList.add(result);
         });
         });
         List<Map<String, Object>> dataset2 = getDataset(params, refIds, indexIds, corRetList, endDate1, resultList);
         List<Map<String, Object>> dataset2 = getDataset(params, refIds, indexIds, corRetList, endDate1, resultList);
-        Map<String, String> productNameMapping = this.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();
         Map<String, Object> extInfos = MapUtil.<String, Object>builder().put("table", dataset2).build();
         return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", productNameMapping).putAll(extInfos).build();
         return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", productNameMapping).putAll(extInfos).build();
     }
     }

+ 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.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.IndicatorParams;
 import com.smppw.analysis.domain.dto.performance.IndicatorParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 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.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcSecDataDto;
 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.DateIntervalType;
 import com.smppw.common.pojo.enums.Indicator;
 import com.smppw.common.pojo.enums.Indicator;
 import com.smppw.constants.Consts;
 import com.smppw.constants.Consts;
+import com.smppw.constants.SecType;
 import com.smppw.core.rate.calc.PerformanceConsistency;
 import com.smppw.core.rate.calc.PerformanceConsistency;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
@@ -26,8 +27,8 @@ import java.util.Optional;
 
 
 @Component(PerformanceConstants.INDICATOR)
 @Component(PerformanceConstants.INDICATOR)
 public class IndicatorHandler extends AbstractSingleSecPerformance<IndicatorParams, Map<String, Object>> {
 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
     @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();
         Map<String, Object> dataset = MapUtil.builder(valuesMap).putAll(indexValuesMap).build();
         return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", productNameMapping).build();
         return MapUtil.<String, Object>builder().put("dataset", dataset).put("productNameMapping", productNameMapping).build();
     }
     }
@@ -104,7 +105,7 @@ public class IndicatorHandler extends AbstractSingleSecPerformance<IndicatorPara
             }
             }
         }
         }
         if (StrUtil.isEmpty(consistency)) {
         if (StrUtil.isEmpty(consistency)) {
-            indicatorValues.put(Indicator.PerformanceConsistency.name(), PerformanceConsistency.convert2Word(null));
+            indicatorValues.put(Indicator.PerformanceConsistency.name(), null);
         } else {
         } else {
             indicatorValues.put(Indicator.PerformanceConsistency.name(), PerformanceConsistency.convert2Word(Double.parseDouble(consistency)));
             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.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.text.CharSequenceUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.IntervalParams;
 import com.smppw.analysis.domain.dto.performance.IntervalParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 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.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcReqPropertyDto;
 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.Indicator;
 import com.smppw.common.pojo.enums.TimeRange;
 import com.smppw.common.pojo.enums.TimeRange;
 import com.smppw.constants.Consts;
 import com.smppw.constants.Consts;
+import com.smppw.constants.SecType;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.util.List;
 import java.util.List;
@@ -26,8 +27,8 @@ import java.util.Optional;
 
 
 @Component(PerformanceConstants.INTERVAL)
 @Component(PerformanceConstants.INTERVAL)
 public class IntervalHandler extends AbstractSingleSecPerformance<IntervalParams, Map<String, Object>> {
 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
     @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, 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) {
         if (excess) {
             for (String indexId : indexIds) {
             for (String indexId : indexIds) {
                 productNameMapping.remove(indexId);
                 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;
 package com.smppw.analysis.domain.manager.performance.handler;
 
 
 import cn.hutool.core.collection.ListUtil;
 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.dto.performance.MulSecMulIndicatorParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 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.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
 import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
 import com.smppw.common.pojo.enums.DateIntervalType;
 import com.smppw.common.pojo.enums.DateIntervalType;
@@ -23,9 +23,8 @@ import java.util.Map;
  */
  */
 @Component(PerformanceConstants.MUL_SEC_MUL_INDICATOR)
 @Component(PerformanceConstants.MUL_SEC_MUL_INDICATOR)
 public class MulSecMulIndicatorHandler extends AbstractSingleSecPerformance<MulSecMulIndicatorParams, Map<String, List<IndicatorCalcPropertyDto>>> {
 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
     @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.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.HistoryRetTableSingleResp;
 import com.smppw.analysis.domain.dto.performance.HistoryRetTableSingleResp;
 import com.smppw.analysis.domain.dto.performance.RevenueParams;
 import com.smppw.analysis.domain.dto.performance.RevenueParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.HistoryRetTableUtil;
 import com.smppw.analysis.domain.manager.performance.HistoryRetTableUtil;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.dto.calc.*;
 import com.smppw.common.pojo.dto.calc.*;
 import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
 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.Indicator;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.constants.Consts;
 import com.smppw.constants.Consts;
+import com.smppw.constants.SecType;
 import com.smppw.utils.DataUtil;
 import com.smppw.utils.DataUtil;
 import com.smppw.utils.RangeUtils;
 import com.smppw.utils.RangeUtils;
 import com.smppw.utils.StrategyHandleUtils;
 import com.smppw.utils.StrategyHandleUtils;
@@ -37,8 +38,8 @@ public class RevenueHandler extends AbstractSingleSecPerformance<RevenueParams,
     private static final String DISTRIBUTION = "2";
     private static final String DISTRIBUTION = "2";
     private static final List<String> TYPE_LIST = ListUtil.of(STATISTICS, DISTRIBUTION);
     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
     @Override
@@ -141,7 +142,7 @@ public class RevenueHandler extends AbstractSingleSecPerformance<RevenueParams,
         } else if (DISTRIBUTION.equals(params.getRevenuType())) {
         } else if (DISTRIBUTION.equals(params.getRevenuType())) {
             dataset = this.loadDistributionData(refIds, indexIds, secRangIndicatorMap, Double.parseDouble(params.getSpace()), ifExcessReturn);
             dataset = this.loadDistributionData(refIds, indexIds, secRangIndicatorMap, Double.parseDouble(params.getSpace()), ifExcessReturn);
         }
         }
-        Map<String, String> productNameMapping = this.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();
         Map<String, Object> extInfos = MapUtil.<String, Object>builder("endDate", params.getEndDate()).put("startDate", params.getStartDate()).build();
         if (STATISTICS.equals(params.getRevenuType())) {
         if (STATISTICS.equals(params.getRevenuType())) {
             // table
             // table

+ 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.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.HistoryRetTableSingleResp;
 import com.smppw.analysis.domain.dto.performance.HistoryRetTableSingleResp;
 import com.smppw.analysis.domain.dto.performance.RollingParams;
 import com.smppw.analysis.domain.dto.performance.RollingParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.HistoryRetTableUtil;
 import com.smppw.analysis.domain.manager.performance.HistoryRetTableUtil;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
-import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 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.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.constants.Consts;
 import com.smppw.constants.Consts;
+import com.smppw.constants.SecType;
 import com.smppw.utils.StrategyHandleUtils;
 import com.smppw.utils.StrategyHandleUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
@@ -30,8 +31,8 @@ import java.util.Optional;
 
 
 @Component(PerformanceConstants.ROLLING)
 @Component(PerformanceConstants.ROLLING)
 public class RollingHandler extends AbstractSingleSecPerformance<RollingParams, Map<String, Object>> {
 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
     @Override
@@ -143,7 +144,7 @@ public class RollingHandler extends AbstractSingleSecPerformance<RollingParams,
             handleIndexData(indicator, rollingFrequency, indexIds, timeRangeFlag, indexValuesMap, dtos);
             handleIndexData(indicator, rollingFrequency, indexIds, timeRangeFlag, indexValuesMap, dtos);
         }
         }
         Map<String, Object> dataset = MapUtil.<String, Object>builder().putAll(valuesMap).putAll(indexValuesMap).build();
         Map<String, Object> dataset = MapUtil.<String, Object>builder().putAll(valuesMap).putAll(indexValuesMap).build();
-        Map<String, String> productNameMapping = this.baseInfoService.querySecName(secIds);
+        Map<String, String> productNameMapping = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecNameMap(secIds);
         if (excess) {
         if (excess) {
             for (String indexId : indexIds) {
             for (String indexId : indexIds) {
                 productNameMapping.remove(indexId);
                 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.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.smppw.analysis.domain.dao.info.InfoFactory;
 import com.smppw.analysis.domain.dto.performance.TrendParams;
 import com.smppw.analysis.domain.dto.performance.TrendParams;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 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.IndicatorCalcIndexDataDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
 import com.smppw.common.pojo.dto.calc.IndicatorCalcSecDataDto;
 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.TrendType;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.pojo.enums.Visibility;
 import com.smppw.common.pojo.enums.strategy.IStrategy;
 import com.smppw.common.pojo.enums.strategy.IStrategy;
+import com.smppw.constants.SecType;
 import com.smppw.utils.StrategyHandleUtils;
 import com.smppw.utils.StrategyHandleUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
@@ -26,8 +27,8 @@ import java.util.Optional;
 
 
 @Component(PerformanceConstants.TREND)
 @Component(PerformanceConstants.TREND)
 public class TrendHandler extends AbstractSingleSecPerformance<TrendParams, Map<String, Object>> {
 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
     @Override
@@ -71,7 +72,7 @@ public class TrendHandler extends AbstractSingleSecPerformance<TrendParams, Map<
                 indexDataListMap.put(indexId, this.buildDateValue(tempDateList, tempIndexTrendTypeListMap.get(indexId), indexTrendTypes));
                 indexDataListMap.put(indexId, this.buildDateValue(tempDateList, tempIndexTrendTypeListMap.get(indexId), indexTrendTypes));
             }
             }
         }
         }
-        Map<String, String> productNameMapping = this.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, List<Map<String, Object>>> dataset = MapUtil.<String, List<Map<String, Object>>>builder().putAll(dataListMap).putAll(indexDataListMap).build();
         Map<String, Object> extInfos = MapUtil.<String, Object>builder().put("endDate", params.getEndDate()).put("startDate", params.getStartDate()).build();
         Map<String, Object> extInfos = MapUtil.<String, Object>builder().put("endDate", params.getEndDate()).put("startDate", params.getStartDate()).build();
         for (String refId : refIds) {
         for (String refId : refIds) {

+ 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.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 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.WinParams;
 import com.smppw.analysis.domain.dto.performance.WinVO;
 import com.smppw.analysis.domain.dto.performance.WinVO;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
 import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
 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.consts.WinRateBmk;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.dto.CompoundRet;
 import com.smppw.common.pojo.dto.CompoundRet;
@@ -29,8 +29,8 @@ import java.util.stream.Collectors;
 
 
 @Component(PerformanceConstants.WIN)
 @Component(PerformanceConstants.WIN)
 public class WinHandler extends AbstractSingleSecPerformance<WinParams, WinVO> {
 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
     @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;
 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.PrivatelyFundBaseInfoDo;
 import com.smppw.analysis.domain.dataobject.PubliclyFundBaseInfoDo;
 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
  * @author wangzaijun
@@ -15,52 +9,36 @@ import java.util.Map;
  * @description 基础信息服务
  * @description 基础信息服务
  */
  */
 public interface BaseInfoService {
 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.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 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.BaseIndicatorServiceV2;
 import com.smppw.analysis.domain.service.NavService;
 import com.smppw.analysis.domain.service.NavService;
 import com.smppw.common.pojo.dto.DateValue;
 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.dto.indicator.DateIntervalDto;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.common.pojo.enums.*;
 import com.smppw.common.pojo.enums.strategy.IStrategy;
 import com.smppw.common.pojo.enums.strategy.IStrategy;
+import com.smppw.constants.SecType;
 import com.smppw.core.IndicatorService;
 import com.smppw.core.IndicatorService;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -22,11 +23,11 @@ import java.util.stream.Collectors;
 @Service
 @Service
 public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
 public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
     private final NavService navService;
     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.navService = navService;
-        this.fundInformationDao = fundInformationDao;
+        this.infoFactory = infoFactory;
     }
     }
 
 
     @Override
     @Override
@@ -46,7 +47,7 @@ public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
                 null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
                 null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
-        Map<String, Frequency> secFreqMap = this.fundInformationDao.getNavFrequency(mainSecIdList);
+        Map<String, Frequency> secFreqMap = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecFreqMap(mainSecIdList);
         return IndicatorService.getInstance().calcMultipleSecMultipleTimeRangeIndicator(req, allNavMap, secFreqMap);
         return IndicatorService.getInstance().calcMultipleSecMultipleTimeRangeIndicator(req, allNavMap, secFreqMap);
     }
     }
 
 
@@ -59,7 +60,7 @@ public class BaseIndicatorServiceV2Impl implements BaseIndicatorServiceV2 {
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         CurveType curveType = CurveType.getCurveType(raiseType, strategy);
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
         Map<String, List<DateValue>> allNavMap = navService.getSecIdDateValueNavListMapFromRedisAndDB(mainSecIdList, benchmarkIdList, indexIdList,
                 null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
                 null, null, curveType.getId(), strategy.getStrategyId(), navType, visibility, MapUtil.empty());
-        Map<String, Frequency> secFreqMap = this.fundInformationDao.getNavFrequency(mainSecIdList);
+        Map<String, Frequency> secFreqMap = this.infoFactory.getInstance(SecType.PRIVATE_FUND).getSecFreqMap(mainSecIdList);
         return IndicatorService.getInstance().getMultipleSecTrend(mainSecIdList, secBenchmarkIdMap, indexIdList, dateIntervalDto, fixedIncome,
         return IndicatorService.getInstance().getMultipleSecTrend(mainSecIdList, secBenchmarkIdMap, indexIdList, dateIntervalDto, fixedIncome,
                 initValue, frequency, trendTypeV2List, secFreqMap, allNavMap);
                 initValue, frequency, trendTypeV2List, secFreqMap, allNavMap);
     }
     }
@@ -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,
     public Map<String, List<IndicatorCalcPropertyDto>> getMultiSecRetListNew(List<String> mainSecIdList, List<String> indexIds, Frequency frequency, Frequency rollingFrequency,
                                                                              String startDate, String endDate, boolean ifExcessReturn, String benchmarkId, RaiseType raiseType, IStrategy strategy,
                                                                              String startDate, String endDate, boolean ifExcessReturn, String benchmarkId, RaiseType raiseType, IStrategy strategy,
                                                                              Visibility visible, NavType navType, Map<String, List<DateValue>> allNavMap) {
                                                                              Visibility visible, NavType navType, Map<String, List<DateValue>> allNavMap) {
-        Map<String, Frequency> secFreqMap = this.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,
         return IndicatorService.getInstance().getMultiSecRetListNew(mainSecIdList, indexIds, frequency, rollingFrequency, startDate, endDate, ifExcessReturn,
                 benchmarkId, raiseType, strategy, visible, navType, allNavMap, secFreqMap);
                 benchmarkId, raiseType, strategy, visible, navType, allNavMap, secFreqMap);
     }
     }

+ 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.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 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.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.PrivatelyFundBaseInfoDo;
 import com.smppw.analysis.domain.dataobject.PubliclyFundBaseInfoDo;
 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.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 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 org.springframework.stereotype.Service;
 
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
-import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.function.Function;
-import java.util.stream.Collectors;
 
 
 @Service
 @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 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.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
     @Override
     public PrivatelyFundBaseInfoDo listPrivatelyFundInfo(String fundId) {
     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.NavConstants;
 import com.smppw.analysis.domain.dao.nav.NavFactory;
 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.analysis.domain.service.NavService;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.dto.DateValue;
 import com.smppw.common.pojo.dto.NavDto;
 import com.smppw.common.pojo.dto.NavDto;
@@ -22,11 +21,9 @@ import java.util.Map;
 @Slf4j
 @Slf4j
 public class NavServiceImpl implements NavService {
 public class NavServiceImpl implements NavService {
     private final NavFactory navFactory;
     private final NavFactory navFactory;
-    private final BaseInfoService baseInfoService;
 
 
-    public NavServiceImpl(NavFactory navFactory, BaseInfoService baseInfoService) {
+    public NavServiceImpl(NavFactory navFactory) {
         this.navFactory = navFactory;
         this.navFactory = navFactory;
-        this.baseInfoService = baseInfoService;
     }
     }
 
 
     @Override
     @Override
@@ -48,7 +45,7 @@ public class NavServiceImpl implements NavService {
         Map<String, List<DateValue>> allNavMap = new HashMap<>();
         Map<String, List<DateValue>> allNavMap = new HashMap<>();
 
 
         //对secId进行分类
         //对secId进行分类
-        Map<String, List<String>> secIdTypeMap = baseInfoService.getTypeSecMap(allSecIdList);
+        Map<String, List<String>> secIdTypeMap = SecType.getTypeSecMap(allSecIdList, null);
 
 
         //1.市场私募净值
         //1.市场私募净值
         List<String> marketPrivateFundIdList = secIdTypeMap.get(SecType.PRIVATELY_OFFERED_FUND);
         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;
 package com.smppw.analysis.infrastructure.components;
 
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
@@ -12,10 +13,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.MediaType;
 import org.springframework.http.MediaType;
 import org.springframework.lang.NonNull;
 import org.springframework.lang.NonNull;
+import org.springframework.util.AntPathMatcher;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.HandlerInterceptor;
 
 
 import java.nio.charset.Charset;
 import java.nio.charset.Charset;
 import java.time.Duration;
 import java.time.Duration;
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
@@ -24,7 +27,9 @@ import java.util.Map;
  * @description api验证签名拦截器
  * @description api验证签名拦截器
  */
  */
 public class ApiSignInterceptor implements HandlerInterceptor {
 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 Logger logger = LoggerFactory.getLogger(this.getClass());
     private final AnalysisProperty property;
     private final AnalysisProperty property;
 
 
@@ -34,8 +39,9 @@ public class ApiSignInterceptor implements HandlerInterceptor {
 
 
     @Override
     @Override
     public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) throws Exception {
     public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) throws Exception {
+        String requestURI = request.getRequestURI();
         if (logger.isInfoEnabled()) {
         if (logger.isInfoEnabled()) {
-            logger.info(StrUtil.format("{} 接口正在被 {} 请求!", request.getRequestURI(), request.getRemoteAddr()));
+            logger.info(StrUtil.format("{} 接口正在被 {} 请求!", requestURI, request.getRemoteAddr()));
         }
         }
         if (!this.property.getEnableSign()) {
         if (!this.property.getEnableSign()) {
             if (logger.isDebugEnabled()) {
             if (logger.isDebugEnabled()) {
@@ -43,6 +49,17 @@ public class ApiSignInterceptor implements HandlerInterceptor {
             }
             }
             return HandlerInterceptor.super.preHandle(request, response, handler);
             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");
         String sign = request.getHeader("sign");
         if (StrUtil.isBlank(sign)) {
         if (StrUtil.isBlank(sign)) {
             this.writeFailJson(response, "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 {
     private boolean checkTimestamp(HttpServletRequest request, HttpServletResponse response, String timestamp, Duration timeout) throws Exception {
         long millis = System.currentTimeMillis();
         long millis = System.currentTimeMillis();
         long time = Long.parseLong(timestamp);
         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());
             logger.error(StrUtil.format("接口有重放攻击,调用方:{}-{}"), request.getRemoteUser(), request.getRemoteAddr());
             this.writeFailJson(response, "请求失败!");
             this.writeFailJson(response, "请求失败!");
             return false;
             return false;

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

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

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

@@ -17,33 +17,9 @@ server:
 spring:
 spring:
   application:
   application:
     name: smppw-analysis
     name: smppw-analysis
-  profiles:
-    active: tob
   datasource:
   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:
     hikari:
-      pool-name: master
+      pool-name: hfdb_core
       # 连接池最大连接数,默认是10
       # 连接池最大连接数,默认是10
       maximum-pool-size: 10
       maximum-pool-size: 10
       # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
       # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
@@ -54,32 +30,46 @@ spring:
       connection-timeout: 300000
       connection-timeout: 300000
       # keepalive time
       # keepalive time
       keepalive-time: 60000
       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:
 smppw:
   data:
   data:
     analysis:
     analysis:
-      cache-type: redis # 缓存类型,支持redis和memory;如果是redis必须配置redis
+      # 缓存类型,支持redis和memory;如果是redis必须配置redis
+      cache-type: memory
       enable-sign: true
       enable-sign: true
+      # 签名拦截的白名单
+      whitelist:
+        - /v1/sign
+        - /error
+      # 签名配置
       app-signs:
       app-signs:
         - app-key: ppw-toc
         - app-key: ppw-toc
-          app-secret: abcdef
-          enabled: false
-          timeout: 360000 # 6分钟
-        - app-key: ppw-tob
-          app-secret: abcdef
+          app-secret: 1234567890abcdef
           enabled: true
           enabled: true
+          # 本次签名有效时间60分钟
+          timeout: 3600000
 
 
 # 打印一下sql日志
 # 打印一下sql日志
 logging:
 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
     id, fund_id, price_date, nav, creatorid, createtime, updaterid, updatetime, isvalid
   </sql>
   </sql>
   <select id="listRiskOfFreeId" resultType="java.lang.String">
   <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>
 
 
   <select id="listNav" resultMap="BaseResultMap">
   <select id="listNav" resultMap="BaseResultMap">
     select
     select
     <include refid="Base_Column_List"/>
     <include refid="Base_Column_List"/>
-    from deposit_nav where isvalid = 1
+    from rz_deposit_nav where isvalid = 1
     <if test="startDate != null and startDate != ''">
     <if test="startDate != null and startDate != ''">
       AND price_date &gt;= #{startDate}
       AND price_date &gt;= #{startDate}
     </if>
     </if>

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

@@ -34,20 +34,20 @@
 
 
     <select id="queryLatestTradeDate" resultType="string" parameterType="string">
     <select id="queryLatestTradeDate" resultType="string" parameterType="string">
         select max(trade_date)
         select max(trade_date)
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isvalid = 1 and trade_date &lt;= #{tradeDate} and isholiday = 0
         where isvalid = 1 and trade_date &lt;= #{tradeDate} and isholiday = 0
     </select>
     </select>
 
 
     <select id="listNatureDays" resultMap="BaseResultMap">
     <select id="listNatureDays" resultMap="BaseResultMap">
         select <include refid="Base_Column_List" />
         select <include refid="Base_Column_List" />
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isvalid = 1
         where isvalid = 1
         order by trade_date asc
         order by trade_date asc
     </select>
     </select>
 
 
     <select id="listHolidays" resultType="java.lang.String">
     <select id="listHolidays" resultType="java.lang.String">
         SELECT t.trade_date
         SELECT t.trade_date
-        FROM indexes_trade_date t
+        FROM rz_indexes_trade_date t
         WHERE t.isholiday = 1
         WHERE t.isholiday = 1
           AND t.isvalid = 1
           AND t.isvalid = 1
         GROUP BY t.trade_date
         GROUP BY t.trade_date
@@ -55,7 +55,7 @@
     </select>
     </select>
     <select id="listIntervalHolidays" resultType="java.lang.String">
     <select id="listIntervalHolidays" resultType="java.lang.String">
         select trade_date
         select trade_date
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isholiday = 1
         where isholiday = 1
           and isvalid = 1
           and isvalid = 1
           and trade_date between #{startDate} and #{endDate}
           and trade_date between #{startDate} and #{endDate}
@@ -63,7 +63,7 @@
     </select>
     </select>
     <select id="listTradeDates" resultType="java.lang.String">
     <select id="listTradeDates" resultType="java.lang.String">
         select trade_date
         select trade_date
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isholiday = 0
         where isholiday = 0
           and isvalid = 1
           and isvalid = 1
           and trade_date between #{startDate} and #{endDate}
           and trade_date between #{startDate} and #{endDate}
@@ -71,7 +71,7 @@
     </select>
     </select>
     <select id="countTradeDateDistance" resultType="java.lang.Integer">
     <select id="countTradeDateDistance" resultType="java.lang.Integer">
         select count(*)
         select count(*)
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isholiday = 0
         where isholiday = 0
           and isvalid = 1
           and isvalid = 1
           and trade_date &gt; #{startDate} and trade_date &lt; #{endDate}
           and trade_date &gt; #{startDate} and trade_date &lt; #{endDate}
@@ -79,14 +79,14 @@
 
 
     <select id="listNatureDaysByCondition" resultMap="BaseResultMap">
     <select id="listNatureDaysByCondition" resultMap="BaseResultMap">
         select <include refid="Base_Column_List" />
         select <include refid="Base_Column_List" />
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isvalid = 1 and isholiday = 0
         where isvalid = 1 and isholiday = 0
             and trade_date &lt;= #{endDate} and trade_date &gt;= #{startDate}
             and trade_date &lt;= #{endDate} and trade_date &gt;= #{startDate}
         order by trade_date
         order by trade_date
     </select>
     </select>
     <select id="listTradeDatesByFrequency" resultType="java.lang.String">
     <select id="listTradeDatesByFrequency" resultType="java.lang.String">
         select trade_date
         select trade_date
-        from indexes_trade_date
+        from rz_indexes_trade_date
         where isholiday = 0
         where isholiday = 0
           and isvalid = 1
           and isvalid = 1
           and trade_date between #{startDate} and #{endDate}
           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="nav" property="nav"/>
         <result column="cumulative_nav" property="cumulativeNav"/>
         <result column="cumulative_nav" property="cumulativeNav"/>
         <result column="cumulative_nav_withdrawal" property="cumulativeNavWithdrawal"/>
         <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="creatorid" property="creatorId"/>
         <result column="createtime" property="createTime"/>
         <result column="createtime" property="createTime"/>
         <result column="updaterid" property="updaterId"/>
         <result column="updaterid" property="updaterId"/>
         <result column="updatetime" property="updateTime"/>
         <result column="updatetime" property="updateTime"/>
         <result column="isvalid" property="isValid"/>
         <result column="isvalid" property="isValid"/>
-        <result column="is_ppw_data" property="isPpwData"/>
-        <result column="virtual_nav" property="virtualNav"/>
     </resultMap>
     </resultMap>
 
 
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
         <!--@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>
     </sql>
 
 
     <select id="listNav" resultMap="BaseResultMap">
     <select id="listNav" resultMap="BaseResultMap">
         select
         select
         <include refid="Base_Column_List"/>
         <include refid="Base_Column_List"/>
-        from cm_nav where isvalid = 1
+        from rz_fund_nav where isvalid = 1
         <if test="startDate != null and startDate != ''">
         <if test="startDate != null and startDate != ''">
             AND price_date &gt;= #{startDate}
             AND price_date &gt;= #{startDate}
         </if>
         </if>