Kaynağa Gözat

feat:公募基金投资类信息说明的实现

mozuwen 1 yıl önce
ebeveyn
işleme
40136809dc

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

@@ -16,7 +16,7 @@ public class ManualFundNoticeReq {
     private String refId;
 
     /**
-     * 公告类型:1-发行上市, 2-定期报告, 3-业绩快报, 4-其他公告
+     * 公告类型:1-发行上市, 2-定期报告, 3-业绩快报, 4-其他公告,多个类型以逗号隔开
      */
     private String type;
 

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

@@ -8,10 +8,12 @@ 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.CmManualFundNoticeInfoDO;
+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;
@@ -148,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()));
@@ -196,11 +199,11 @@ public class FundInfoService {
             typeList.addAll(StrUtil.split(s, ","));
         }
         //todo 确认基金公告表所在的库
-        List<CmManualFundNoticeInfoDO> dataList = baseInfoService.queryFundAnnounce(fundId, typeList, title);
+        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 (CmManualFundNoticeInfoDO temp : dataList) {
+        for (ManualFundNoticeInfoDO temp : dataList) {
             ManualFundNoticeInfoVO vo = BeanUtil.copyProperties(temp, ManualFundNoticeInfoVO.class);
             vo.setType(reverse.getOrDefault(vo.getType(), "4"));
             vo.setDate(DateUtil.formatDate(temp.getDate()));
@@ -208,4 +211,16 @@ public class FundInfoService {
         }
         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;
+    }
 }

+ 14 - 1
src/main/java/com/smppw/analysis/client/FundApi.java

@@ -3,10 +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;
@@ -46,7 +48,7 @@ public class FundApi {
     }
 
     /**
-     * 基金公告
+     * 公募基金公告
      *
      * @param params 基金id
      * @return 基金公告
@@ -56,4 +58,15 @@ public class FundApi {
         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));
+    }
+
 }

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

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.dao;
 
-import com.smppw.analysis.domain.dataobject.CmManualFundNoticeInfoDO;
+import com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO;
 import com.smppw.analysis.domain.mapper.MfFundAnnounceMapper;
 import org.springframework.stereotype.Service;
 
@@ -20,7 +20,7 @@ public class FundAnnounceDao {
         this.fundAnnounceMapper = fundAnnounceMapper;
     }
 
-    public List<CmManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title) {
+    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;
+
+}

+ 1 - 1
src/main/java/com/smppw/analysis/domain/dataobject/CmManualFundNoticeInfoDO.java

@@ -10,7 +10,7 @@ import java.util.Date;
  * @description 公募基金公告信息
  */
 @Data
-public class CmManualFundNoticeInfoDO {
+public class ManualFundNoticeInfoDO {
 
     /**
      * 信息发布日期

+ 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;
+
+}

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

@@ -1,6 +1,6 @@
 package com.smppw.analysis.domain.mapper;
 
-import com.smppw.analysis.domain.dataobject.CmManualFundNoticeInfoDO;
+import com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -22,6 +22,6 @@ public interface MfFundAnnounceMapper {
      * @param title    信息标题
      * @return 公告信息
      */
-    List<CmManualFundNoticeInfoDO> queryFundAnnounce(@Param("fundId") String fundId, @Param("typeList") List<String> typeList, @Param("title") String title);
+    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);
+
+}

+ 11 - 2
src/main/java/com/smppw/analysis/domain/service/BaseInfoService.java

@@ -1,6 +1,7 @@
 package com.smppw.analysis.domain.service;
 
-import com.smppw.analysis.domain.dataobject.CmManualFundNoticeInfoDO;
+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;
@@ -42,6 +43,14 @@ public interface BaseInfoService {
      * @param title    信息标题
      * @return 公告信息
      */
-    List<CmManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title);
+    List<ManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title);
+
+    /**
+     * 获取公募基金投资类信息说明
+     *
+     * @param fundId 基金id
+     * @return 公募基金投资类信息说明
+     */
+    FundArchivesInfoDO queryFundArchives(String fundId);
 
 }

+ 12 - 7
src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java

@@ -5,11 +5,9 @@ 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.FundAnnounceDao;
-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.dataobject.CmManualFundNoticeInfoDO;
+import com.smppw.analysis.domain.dao.*;
+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;
@@ -62,15 +60,17 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
     private final FundInformationDao fundInformationDao;
     private ApplicationContext applicationContext;
     private final FundAnnounceDao fundAnnounceDao;
+    private final FundArchivesDao fundArchivesDao;
 
     public BaseInfoServiceImpl(AnalysisProperty property, CacheFactory factory,
                                IndexesProfileDao indexesProfileDao, RongzhiIndexNavDao rongzhiIndexNavDao,
-                               FundInformationDao fundInformationDao, FundAnnounceDao fundAnnounceDao) {
+                               FundInformationDao fundInformationDao, FundAnnounceDao fundAnnounceDao, FundArchivesDao fundArchivesDao) {
         this.cacheGateway = factory.getCacheGateway(property.getCacheType());
         this.indexesProfileDao = indexesProfileDao;
         this.rongzhiIndexNavDao = rongzhiIndexNavDao;
         this.fundInformationDao = fundInformationDao;
         this.fundAnnounceDao = fundAnnounceDao;
+        this.fundArchivesDao = fundArchivesDao;
     }
 
     @Override
@@ -257,10 +257,15 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
     }
 
     @Override
-    public List<CmManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title) {
+    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);
+    }
+
     /**
      * 把指定类型的标的的名称映射查询出来
      *

+ 1 - 1
src/main/resources/mapping/MFFundAnnounceMapper.xml

@@ -2,7 +2,7 @@
 <!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.CmManualFundNoticeInfoDO">
+    <select id="queryFundAnnounce" resultType="com.smppw.analysis.domain.dataobject.ManualFundNoticeInfoDO">
         select info_publ_date as `date`,
         info_type as `type`,
         info_title as title,

+ 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>