wangzaijun 1 year ago
parent
commit
5c10763c31
19 changed files with 571 additions and 16 deletions
  1. 28 0
      src/main/java/com/smppw/analysis/application/dto/info/ManualFundNoticeReq.java
  2. 45 1
      src/main/java/com/smppw/analysis/application/service/info/FundInfoService.java
  3. 34 11
      src/main/java/com/smppw/analysis/application/service/style/StyleServiceImpl.java
  4. 26 0
      src/main/java/com/smppw/analysis/client/FundApi.java
  5. 26 0
      src/main/java/com/smppw/analysis/domain/dao/FundAnnounceDao.java
  6. 25 0
      src/main/java/com/smppw/analysis/domain/dao/FundArchivesDao.java
  7. 58 0
      src/main/java/com/smppw/analysis/domain/dataobject/FundArchivesInfoDO.java
  8. 45 0
      src/main/java/com/smppw/analysis/domain/dataobject/ManualFundNoticeInfoDO.java
  9. 28 0
      src/main/java/com/smppw/analysis/domain/dto/info/ManualFundInvestInfoVO.java
  10. 44 0
      src/main/java/com/smppw/analysis/domain/dto/info/ManualFundNoticeInfoVO.java
  11. 27 0
      src/main/java/com/smppw/analysis/domain/dto/performance/MulSecMulIndicatorParams.java
  12. 1 0
      src/main/java/com/smppw/analysis/domain/manager/performance/PerformanceConstants.java
  13. 50 0
      src/main/java/com/smppw/analysis/domain/manager/performance/handler/MulSecMulIndicatorHandler.java
  14. 27 0
      src/main/java/com/smppw/analysis/domain/mapper/MfFundAnnounceMapper.java
  15. 22 0
      src/main/java/com/smppw/analysis/domain/mapper/MfFundArchivesMapper.java
  16. 21 0
      src/main/java/com/smppw/analysis/domain/service/BaseInfoService.java
  17. 19 4
      src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java
  18. 26 0
      src/main/resources/mapping/MFFundAnnounceMapper.xml
  19. 19 0
      src/main/resources/mapping/MfFundArchivesMapper.xml

+ 28 - 0
src/main/java/com/smppw/analysis/application/dto/info/ManualFundNoticeReq.java

@@ -0,0 +1,28 @@
+package com.smppw.analysis.application.dto.info;
+
+import lombok.Data;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 09:25
+ * @description 公募基金公告信息请求参数
+ */
+@Data
+public class ManualFundNoticeReq {
+
+    /**
+     * 公募基金id
+     */
+    private String refId;
+
+    /**
+     * 公告类型:1-发行上市, 2-定期报告, 3-业绩快报, 4-其他公告,多个类型以逗号隔开
+     */
+    private String type;
+
+    /**
+     * 标题,模糊查询
+     */
+    private String title;
+
+}

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

@@ -3,11 +3,18 @@ package com.smppw.analysis.application.service.info;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.StrUtil;
 import com.smppw.analysis.application.dto.info.*;
+import com.smppw.analysis.domain.dataobject.FundArchivesInfoDO;
+import com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO;
 import com.smppw.analysis.domain.dataobject.FundSimilarDo;
 import com.smppw.analysis.domain.dto.info.FundSimilarParams;
 import com.smppw.analysis.domain.dto.info.FundSimilarVO;
+import com.smppw.analysis.domain.dto.info.ManualFundInvestInfoVO;
+import com.smppw.analysis.domain.dto.info.ManualFundNoticeInfoVO;
 import com.smppw.analysis.domain.dto.performance.IndicatorParams;
 import com.smppw.analysis.domain.manager.performance.Performance;
 import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
@@ -143,7 +150,8 @@ public class FundInfoService {
         List<FundSimilarVO> resultList = ListUtil.list(true);
         for (FundSimilarDo map : dataList) {
             FundSimilarVO similarVO = BeanUtil.copyProperties(map, FundSimilarVO.class);
-            int i = fundIds.indexOf(map.getFundId()) + 1; // 因为第一个基金是当前基金,所以需要 + 1 来取该基金与当前基金的相关性
+            // 因为第一个基金是当前基金,所以需要 + 1 来取该基金与当前基金的相关性
+            int i = fundIds.indexOf(map.getFundId()) + 1;
             similarVO.setSimilar(corArr[0][i]);
             similarVO.setStrategy(StrategyHandleUtils.getStrategy(map.getStrategy()).getStrategyNameDesc());
             similarVO.setSubStrategy(this.getStrategyName(map.getSubStrategy()));
@@ -179,4 +187,40 @@ public class FundInfoService {
         }
         return map;
     }
+
+    public List<ManualFundNoticeInfoVO> noticeList(ManualFundNoticeReq params) {
+        Map<String, String> typeMapper = MapUtil.builder("1", "10").put("2", "20").put("3", "30").put("4", "50, 70, 90, 91").build();
+        String fundId = params.getRefId();
+        String title = params.getTitle();
+        // type 逗号拆分 转list,直接数据库in查询
+        List<String> typeList = ListUtil.list(false);
+        if (CharSequenceUtil.isNotBlank(params.getType())) {
+            String s = typeMapper.get(params.getType());
+            typeList.addAll(StrUtil.split(s, ","));
+        }
+        //todo 确认基金公告表所在的库
+        List<ManualFundNoticeInfoDO> dataList = this.baseInfoService.queryFundAnnounce(fundId, typeList, title);
+        List<ManualFundNoticeInfoVO> resultList = ListUtil.list(true);
+        // key value互换
+        Map<String, String> reverse = MapUtil.reverse(typeMapper);
+        for (ManualFundNoticeInfoDO temp : dataList) {
+            ManualFundNoticeInfoVO vo = BeanUtil.copyProperties(temp, ManualFundNoticeInfoVO.class);
+            vo.setType(reverse.getOrDefault(vo.getType(), "4"));
+            vo.setDate(DateUtil.formatDate(temp.getDate()));
+            resultList.add(vo);
+        }
+        return resultList;
+    }
+
+    public ManualFundInvestInfoVO investInfo(String refId) {
+        ManualFundInvestInfoVO fundInvestInfoVO = new ManualFundInvestInfoVO();
+        FundArchivesInfoDO fundArchivesInfo = this.baseInfoService.queryFundArchives(refId);
+        if(fundArchivesInfo==null){
+            return fundInvestInfoVO;
+        }
+        fundInvestInfoVO.setInvestmentObjective(fundArchivesInfo.getInvestmentObjective());
+        fundInvestInfoVO.setStrategyDescription(fundArchivesInfo.getStrategyDescription());
+        fundInvestInfoVO.setInvestmentScope(fundArchivesInfo.getInvestmentScope());
+        return fundInvestInfoVO;
+    }
 }

+ 34 - 11
src/main/java/com/smppw/analysis/application/service/style/StyleServiceImpl.java

@@ -1,6 +1,5 @@
 package com.smppw.analysis.application.service.style;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
@@ -9,20 +8,22 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
 import com.smppw.analysis.domain.dataobject.FundStyleStatsDO;
+import com.smppw.analysis.domain.dto.performance.MulSecMulIndicatorParams;
 import com.smppw.analysis.domain.dto.style.*;
 import com.smppw.analysis.domain.dto.style.py.PyReq;
 import com.smppw.analysis.domain.dto.style.py.PyReqBody;
 import com.smppw.analysis.domain.dto.style.py.PyReqParam;
 import com.smppw.analysis.domain.dto.style.py.PyResBody;
+import com.smppw.analysis.domain.manager.performance.Performance;
+import com.smppw.analysis.domain.manager.performance.PerformanceFactory;
 import com.smppw.analysis.domain.service.BaseInfoService;
 import com.smppw.analysis.domain.service.FundStyleService;
 import com.smppw.analysis.infrastructure.config.AnalysisProperty;
 import com.smppw.analysis.infrastructure.consts.*;
 import com.smppw.analysis.infrastructure.exception.APIException;
 import com.smppw.common.pojo.IStrategy;
-import com.smppw.common.pojo.enums.CurveType;
-import com.smppw.common.pojo.enums.Frequency;
-import com.smppw.common.pojo.enums.RaiseType;
+import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
+import com.smppw.common.pojo.enums.*;
 import com.smppw.common.pojo.enums.strategy.Strategy;
 import com.smppw.constants.Consts;
 import com.smppw.utils.StrategyHandleUtils;
@@ -42,6 +43,8 @@ import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
+import static com.smppw.analysis.domain.manager.performance.PerformanceConstants.MUL_SEC_MUL_INDICATOR;
+
 @Service
 public class StyleServiceImpl implements StyleService {
     private static final Logger logger = LoggerFactory.getLogger(StyleServiceImpl.class);
@@ -149,11 +152,14 @@ public class StyleServiceImpl implements StyleService {
     private final String pyBaseUrl;
     private final BaseInfoService baseInfoService;
     private final FundStyleService fundStyleService;
+    private final PerformanceFactory factory;
 
-    public StyleServiceImpl(AnalysisProperty property, BaseInfoService baseInfoService, FundStyleService fundStyleService) {
+    public StyleServiceImpl(AnalysisProperty property, BaseInfoService baseInfoService,
+                            FundStyleService fundStyleService, PerformanceFactory factory) {
         this.pyBaseUrl = property.getPyUrl();
         this.baseInfoService = baseInfoService;
         this.fundStyleService = fundStyleService;
+        this.factory = factory;
     }
 
     /**
@@ -981,7 +987,9 @@ public class StyleServiceImpl implements StyleService {
     @Override
     public Map<String, Object> selectionTiming(SelectionTimingParams params) {
         try {
-            if (!CAL_RANGE_MAPPER.containsKey(params.getWinlen())) throw new APIException("窗口参数非法");
+            if (!CAL_RANGE_MAPPER.containsKey(params.getWinlen())) {
+                throw new APIException("窗口参数非法");
+            }
             Map<String, String> mapper = MapUtil.<String, String>builder(MapUtil.newHashMap(true))
                     .put("alpha", "选股能力").put("beta", "择时能力").build();
             Map<String, String> mapper1 = MapUtil.<String, String>builder(MapUtil.newHashMap(true))
@@ -1042,18 +1050,33 @@ public class StyleServiceImpl implements StyleService {
                     .put("date", "时间").put("upside", "进攻能力").put("downside", "防御能力").put("style", "风格").build();
             Map<String, Object> chart1 = MapUtil.<String, Object>builder().put("dataset", dataset)
                     .put("chartProductNameMapping", mapper).put("tableProductNameMapping", mapper).build();
-
-            List<String> secIdList = ListUtil.list(true);
-            List<String> fundBenchmarkList = ListUtil.toList(params.getSecId(), params.getBenchmarkId());
-            List<String> unionIds = CollUtil.addAllIfNotContains(fundBenchmarkList, secIdList);
+            Performance<MulSecMulIndicatorParams, Map<String, List<IndicatorCalcPropertyDto>>> instance = this.factory.getInstance(MUL_SEC_MUL_INDICATOR);
+            //构造请求参数
+            MulSecMulIndicatorParams req = buildReq(params);
+            Map<String, List<IndicatorCalcPropertyDto>> indicatorMap = instance.execute(req);
             return MapUtil.<String, Object>builder().put("chart1", chart1).build();
-
         } catch (Exception e) {
             logger.error("风格总览计算错误" + e.getMessage());
             return MapUtil.empty();
         }
     }
 
+    private MulSecMulIndicatorParams buildReq(RzStyleParams params) {
+        MulSecMulIndicatorParams req = new MulSecMulIndicatorParams();
+//        req.setIndicatorList(ListUtil.toList(Indicator.UpCaptureRatio,Indicator.UpCaptureReturn,Indicator.DownCaptureRatio,Indicator.DownCaptureReturn));
+        req.setIndicatorList(ListUtil.toList(Indicator.SharpeRatio));
+        req.setEndDate(params.getEndDate());
+        req.setRaiseType(params.getRaiseType());
+        req.setFrequency(Frequency.Weekly);
+        req.setBenchmarkId(params.getBenchmarkId());
+        req.setStrategy("All");
+        req.setRefIds(ListUtil.toList(params.getSecId()));
+        req.setTimeRangeList(ListUtil.toList(TimeRange.Last1Year,TimeRange.Last2Years,TimeRange.Last3Years,TimeRange.FromSetup));
+        req.setNavType(NavType.CumulativeNav);
+        req.setSecIds(ListUtil.toList(params.getSecId()));
+        return req;
+    }
+
     private String handleFundStyle(BigDecimal upside, BigDecimal downside) {
         String style;
         BigDecimal standardLevel = BigDecimal.valueOf(0.5);

+ 26 - 0
src/main/java/com/smppw/analysis/client/FundApi.java

@@ -3,9 +3,12 @@ package com.smppw.analysis.client;
 import com.smppw.analysis.application.dto.info.*;
 import com.smppw.analysis.application.service.info.FundInfoService;
 import com.smppw.analysis.domain.dto.info.FundSimilarVO;
+import com.smppw.analysis.domain.dto.info.ManualFundInvestInfoVO;
+import com.smppw.analysis.domain.dto.info.ManualFundNoticeInfoVO;
 import com.smppw.common.pojo.ResultVo;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
@@ -43,4 +46,27 @@ public class FundApi {
     public ResultVo<List<FundSimilarVO>> similar(FundSimilarReq params) {
         return ResultVo.ok(this.service.getFundSimilarList(params));
     }
+
+    /**
+     * 公募基金公告
+     *
+     * @param params 基金id
+     * @return 基金公告
+     */
+    @GetMapping("notice-info")
+    public ResultVo<List<ManualFundNoticeInfoVO>> noticeInfo(ManualFundNoticeReq params) {
+        return ResultVo.ok(service.noticeList(params));
+    }
+
+    /**
+     * 基金投资类信息说明
+     *
+     * @param refId 基金id
+     * @return 投资类信息说明
+     */
+    @GetMapping("invest-info")
+    public ResultVo<ManualFundInvestInfoVO> investInfo(@RequestParam("refId") String refId) {
+        return ResultVo.ok(service.investInfo(refId));
+    }
+
 }

+ 26 - 0
src/main/java/com/smppw/analysis/domain/dao/FundAnnounceDao.java

@@ -0,0 +1,26 @@
+package com.smppw.analysis.domain.dao;
+
+import com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO;
+import com.smppw.analysis.domain.mapper.MfFundAnnounceMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 9:30
+ * @description 公募基金公告信息Dao
+ */
+@Service
+public class FundAnnounceDao {
+
+    private final MfFundAnnounceMapper fundAnnounceMapper;
+
+    public FundAnnounceDao(MfFundAnnounceMapper fundAnnounceMapper) {
+        this.fundAnnounceMapper = fundAnnounceMapper;
+    }
+
+    public List<ManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title) {
+        return fundAnnounceMapper.queryFundAnnounce(fundId, typeList, title);
+    }
+}

+ 25 - 0
src/main/java/com/smppw/analysis/domain/dao/FundArchivesDao.java

@@ -0,0 +1,25 @@
+package com.smppw.analysis.domain.dao;
+
+import com.smppw.analysis.domain.dataobject.FundArchivesInfoDO;
+import com.smppw.analysis.domain.mapper.MfFundArchivesMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 9:30
+ * @description 公募基金投资类信息说明Mapper
+ */
+@Service
+public class FundArchivesDao {
+
+    private final MfFundArchivesMapper fundArchivesMapper;
+
+    public FundArchivesDao(MfFundArchivesMapper fundArchivesMapper) {
+        this.fundArchivesMapper = fundArchivesMapper;
+    }
+
+    public FundArchivesInfoDO getFundArchives(String fundId) {
+        return fundArchivesMapper.queryFundArchives(fundId);
+    }
+
+}

+ 58 - 0
src/main/java/com/smppw/analysis/domain/dataobject/FundArchivesInfoDO.java

@@ -0,0 +1,58 @@
+package com.smppw.analysis.domain.dataobject;
+
+import lombok.Data;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 9:30
+ * @description 公募基金投资类信息说明
+ */
+@Data
+public class FundArchivesInfoDO {
+
+    /**
+     * 基准名称
+     */
+    private String benchmarkName;
+
+    /**
+     * 交易场所,申购赎回场所,为空则为场外
+     */
+    private String applyingMarket;
+
+    /**
+     * 初始份额,文字+数值+日期展示
+     */
+    private String initialShare;
+
+    /**
+     * 初始份额 日期
+     */
+    private String initialDate;
+
+    /**
+     * 最低申购金额,文字+数值+日期展示
+     */
+    private String lowestApplyAmount;
+
+    /**
+     * 最低赎回份额,文字+数值+日期展示
+     */
+    private String lowestSumRedemption;
+
+    /**
+     * 投资目标
+     */
+    private String investmentObjective;
+
+    /**
+     * 投资策略
+     */
+    private String strategyDescription;
+
+    /**
+     * 投资范围
+     */
+    private String investmentScope;
+
+}

+ 45 - 0
src/main/java/com/smppw/analysis/domain/dataobject/ManualFundNoticeInfoDO.java

@@ -0,0 +1,45 @@
+package com.smppw.analysis.domain.dataobject;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 9:30
+ * @description 公募基金公告信息
+ */
+@Data
+public class ManualFundNoticeInfoDO {
+
+    /**
+     * 信息发布日期
+     */
+    private Date date;
+
+    /**
+     * 公告类型:1-发行上市, 2-定期报告, 3-业绩快报, 4-其他公告
+     */
+    private String type;
+
+    /**
+     * 公告标题
+     */
+    private String title;
+
+    /**
+     * 公共来源
+     */
+    private String media;
+
+    /**
+     * 附件名称
+     */
+    private String attName;
+
+    /**
+     * 附件地址
+     */
+    private String attUri;
+
+}

+ 28 - 0
src/main/java/com/smppw/analysis/domain/dto/info/ManualFundInvestInfoVO.java

@@ -0,0 +1,28 @@
+package com.smppw.analysis.domain.dto.info;
+
+import lombok.Data;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 09:25
+ * @description 投资类信息说明
+ */
+@Data
+public class ManualFundInvestInfoVO {
+
+    /**
+     * 投资目标
+     */
+    private String investmentObjective;
+
+    /**
+     * 投资策略
+     */
+    private String strategyDescription;
+
+    /**
+     * 投资范围
+     */
+    private String investmentScope;
+
+}

+ 44 - 0
src/main/java/com/smppw/analysis/domain/dto/info/ManualFundNoticeInfoVO.java

@@ -0,0 +1,44 @@
+package com.smppw.analysis.domain.dto.info;
+
+
+import lombok.Data;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 09:25
+ * @description 公募基金公共信息
+ */
+@Data
+public class ManualFundNoticeInfoVO {
+
+    /**
+     * 附件,附件图标可下载公告文档
+     */
+    private String attName;
+
+    /**
+     * 地址
+     */
+    private String attUri;
+
+    /**
+     * 时间
+     */
+    private String date;
+
+    /**
+     * 公告来源
+     */
+    private String media;
+
+    /**
+     * 公告标题
+     */
+    private String title;
+
+    /**
+     * 公告类型:1-发行上市, 2-定期报告, 3-业绩快报, 4-其他公告
+     */
+    private String type;
+}
+

+ 27 - 0
src/main/java/com/smppw/analysis/domain/dto/performance/MulSecMulIndicatorParams.java

@@ -0,0 +1,27 @@
+package com.smppw.analysis.domain.dto.performance;
+
+import com.smppw.common.pojo.enums.Indicator;
+import com.smppw.common.pojo.enums.TimeRange;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author 莫祖文
+ * @date 2023/8/9 16:00
+ * @description 多时段多标的多指标的请求参数
+ */
+@Data
+public class MulSecMulIndicatorParams extends BaseParams {
+
+    /**
+     * 多时段
+     */
+    private List<TimeRange> timeRangeList;
+
+    /**
+     * 多指标
+     */
+    private List<Indicator> indicatorList;
+
+}

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

@@ -15,6 +15,7 @@ public final class PerformanceConstants {
     public static final String INTERVAL = "interval";
     public static final String ROLLING = "rolling";
     public static final String RANK = "rank";
+    public static final String MUL_SEC_MUL_INDICATOR = "mulSecMulIndicator";
 
     private PerformanceConstants() {
     }

+ 50 - 0
src/main/java/com/smppw/analysis/domain/manager/performance/handler/MulSecMulIndicatorHandler.java

@@ -0,0 +1,50 @@
+package com.smppw.analysis.domain.manager.performance.handler;
+
+import cn.hutool.core.collection.ListUtil;
+import com.smppw.analysis.domain.dto.performance.MulSecMulIndicatorParams;
+import com.smppw.analysis.domain.manager.performance.AbstractSingleSecPerformance;
+import com.smppw.analysis.domain.manager.performance.PerformanceConstants;
+import com.smppw.analysis.domain.service.BaseIndicatorServiceV2;
+import com.smppw.analysis.domain.service.BaseInfoService;
+import com.smppw.common.pojo.dto.calc.IndicatorCalcPropertyDto;
+import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
+import com.smppw.common.pojo.enums.DateIntervalType;
+import com.smppw.common.pojo.enums.Indicator;
+import com.smppw.constants.Consts;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 16:00
+ * @description 多标的多指标的的实现
+ */
+@Component(PerformanceConstants.MUL_SEC_MUL_INDICATOR)
+public class MulSecMulIndicatorHandler extends AbstractSingleSecPerformance<MulSecMulIndicatorParams, Map<String, List<IndicatorCalcPropertyDto>>> {
+
+    public MulSecMulIndicatorHandler(BaseInfoService baseInfoService, BaseIndicatorServiceV2 baseIndicatorServiceV2) {
+        super(baseInfoService, baseIndicatorServiceV2);
+    }
+
+    @Override
+    protected CalcMultipleSecMultipleTimeRangeIndicatorReq buildCalcReq(MulSecMulIndicatorParams params, DateIntervalType dateIntervalType) {
+        CalcMultipleSecMultipleTimeRangeIndicatorReq req = super.buildCalcReq(params, dateIntervalType);
+        req.setRiskOfFreeId(Consts.RISK_OF_FREE);
+        List<Indicator> indicatorList = params.getIndicatorList();
+        req.setIndicatorList(indicatorList);
+        req.setGeoExtraindicatorList(ListUtil.toList());
+        req.setRiskOfFreeId(Consts.RISK_OF_FREE);
+        req.setIndexIdList(ListUtil.toList(params.getBenchmarkId()));
+        return req;
+    }
+
+    @Override
+    protected Map<String, List<IndicatorCalcPropertyDto>> bizSecHandle(MulSecMulIndicatorParams params) {
+        CalcMultipleSecMultipleTimeRangeIndicatorReq req = this.buildCalcReq(params, DateIntervalType.DefaultInterval);
+        Map<String, List<IndicatorCalcPropertyDto>> indicatorMap = this.baseIndicatorServiceV2.calcMultipleSecMultipleTimeRangeIndicator(req);
+        return indicatorMap;
+    }
+
+}

+ 27 - 0
src/main/java/com/smppw/analysis/domain/mapper/MfFundAnnounceMapper.java

@@ -0,0 +1,27 @@
+package com.smppw.analysis.domain.mapper;
+
+import com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 9:30
+ * @description 公募基金公告信息Mapper
+ */
+@Repository
+public interface MfFundAnnounceMapper {
+
+    /**
+     * 获取公募基金的公告信息
+     *
+     * @param fundId   公募基金id
+     * @param typeList 信息类别list
+     * @param title    信息标题
+     * @return 公告信息
+     */
+    List<ManualFundNoticeInfoDO> queryFundAnnounce(@Param("fundId") String fundId, @Param("typeList") List<String> typeList, @Param("title") String title);
+
+}

+ 22 - 0
src/main/java/com/smppw/analysis/domain/mapper/MfFundArchivesMapper.java

@@ -0,0 +1,22 @@
+package com.smppw.analysis.domain.mapper;
+
+import com.smppw.analysis.domain.dataobject.FundArchivesInfoDO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author mozuwen
+ * @date 2023/8/9 9:30
+ * @description 公募基金投资类信息说明Mapper
+ */
+@Repository
+public interface MfFundArchivesMapper {
+
+    /**
+     * 获取公募基金投资类信息说明
+     *
+     * @param fundId 基金id
+     * @return 公募基金投资类信息说明
+     */
+    FundArchivesInfoDO queryFundArchives(String fundId);
+
+}

+ 21 - 0
src/main/java/com/smppw/analysis/domain/service/BaseInfoService.java

@@ -1,5 +1,7 @@
 package com.smppw.analysis.domain.service;
 
+import com.smppw.analysis.domain.dataobject.FundArchivesInfoDO;
+import com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO;
 import com.smppw.analysis.domain.dataobject.FundSimilarDo;
 import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
 import com.smppw.analysis.domain.dto.info.FundSimilarParams;
@@ -34,4 +36,23 @@ public interface BaseInfoService {
     List<Map<String, Object>> getFundRank(String rankDate, String fundId, List<String> indexIds, Indicator indicator);
 
     List<FundSimilarDo> getFundSimilarList(FundSimilarParams params);
+
+    /**
+     * 获取公募基金的公告信息
+     *
+     * @param fundId   公募基金id
+     * @param typeList 信息类别list
+     * @param title    信息标题
+     * @return 公告信息
+     */
+    List<ManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title);
+
+    /**
+     * 获取公募基金投资类信息说明
+     *
+     * @param fundId 基金id
+     * @return 公募基金投资类信息说明
+     */
+    FundArchivesInfoDO queryFundArchives(String fundId);
+
 }

+ 19 - 4
src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java

@@ -5,12 +5,12 @@ import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
-import com.smppw.analysis.domain.dao.FundInformationDao;
-import com.smppw.analysis.domain.dao.IndexesProfileDao;
-import com.smppw.analysis.domain.dao.RongzhiIndexNavDao;
+import com.smppw.analysis.domain.dao.*;
 import com.smppw.analysis.domain.dao.rank.RankDao;
 import com.smppw.analysis.domain.dao.rank.RankFactory;
+import com.smppw.analysis.domain.dataobject.FundArchivesInfoDO;
 import com.smppw.analysis.domain.dataobject.FundSimilarDo;
+import com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO;
 import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
 import com.smppw.analysis.domain.dto.info.FundSimilarParams;
 import com.smppw.analysis.domain.event.SaveCacheEvent;
@@ -61,15 +61,20 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
     private final IndexesProfileDao indexesProfileDao;
     private final RongzhiIndexNavDao rongzhiIndexNavDao;
     private final FundInformationDao fundInformationDao;
+    private final FundAnnounceDao fundAnnounceDao;
+    private final FundArchivesDao fundArchivesDao;
     private ApplicationContext applicationContext;
 
     public BaseInfoServiceImpl(AnalysisProperty property, CacheFactory factory, RankFactory rankFactory,
-                               IndexesProfileDao indexesProfileDao, RongzhiIndexNavDao rongzhiIndexNavDao, FundInformationDao fundInformationDao) {
+                               IndexesProfileDao indexesProfileDao, RongzhiIndexNavDao rongzhiIndexNavDao,
+                               FundInformationDao fundInformationDao, FundAnnounceDao fundAnnounceDao, FundArchivesDao fundArchivesDao) {
         this.rankDao = rankFactory.getInstance(property.getDataSource());
         this.cacheGateway = factory.getCacheGateway(property.getCacheType());
         this.indexesProfileDao = indexesProfileDao;
         this.rongzhiIndexNavDao = rongzhiIndexNavDao;
         this.fundInformationDao = fundInformationDao;
+        this.fundAnnounceDao = fundAnnounceDao;
+        this.fundArchivesDao = fundArchivesDao;
     }
 
     @Override
@@ -259,6 +264,16 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
         return dataList;
     }
 
+    @Override
+    public List<ManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title) {
+        return fundAnnounceDao.queryFundAnnounce(fundId, typeList, title);
+    }
+
+    @Override
+    public FundArchivesInfoDO queryFundArchives(String fundId) {
+        return fundArchivesDao.getFundArchives(fundId);
+    }
+
     /**
      * 把指定类型的标的的名称映射查询出来
      *

+ 26 - 0
src/main/resources/mapping/MFFundAnnounceMapper.xml

@@ -0,0 +1,26 @@
+<?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.MfFundAnnounceMapper">
+
+    <select id="queryFundAnnounce" resultType="com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO">
+        select info_publ_date as `date`,
+        info_type as `type`,
+        info_title as title,
+        media,
+        file_name as attName,
+        file_path as attUri
+        from rz_mf_info.public_fund_announce
+        where fund_id = #{fundId} and isvalid = 1
+        <if test="typeList != null and !typeList.isEmpty()">
+            and info_type in
+            <foreach collection="typeList" item="type" index="index" open="(" separator="," close=")">
+                #{type}
+            </foreach>
+        </if>
+        <if test="title != null and title != ''">
+            info_title like concat('%', #{title}, '%')
+        </if>
+        order by info_publ_date desc
+    </select>
+
+</mapper>

+ 19 - 0
src/main/resources/mapping/MfFundArchivesMapper.xml

@@ -0,0 +1,19 @@
+<?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.MfFundArchivesMapper">
+
+    <select id="queryFundArchives" resultType="com.smppw.analysis.domain.dataobject.FundArchivesInfoDO">
+        select invest_target          as investmentObjective,
+               invest_orientation     as strategyDescription,
+               invest_field           as investmentScope,
+               performance_bench_mark as benchmarkName,
+               initial_size           as initialShare,
+               start_date             as initialDate,
+               float_type             as applyingMarket,
+               lowest_sum_sub_ll      as lowestApplyAmount,
+               lowest_sum_redemption  as lowestSumRedemption
+        from rz_mf_info.mf_fund_archives
+        where fund_id = #{fundId}
+    </select>
+
+</mapper>