瀏覽代碼

feat:公募基金公告的实现

mozuwen 1 年之前
父節點
當前提交
6a9ace6a66

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

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

@@ -3,11 +3,16 @@ 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.CmManualFundNoticeInfoDO;
 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.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;
@@ -179,4 +184,28 @@ 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<CmManualFundNoticeInfoDO> dataList = baseInfoService.queryFundAnnounce(fundId, typeList, title);
+        List<ManualFundNoticeInfoVO> resultList = ListUtil.list(true);
+        // key value互换
+        Map<String, String> reverse = MapUtil.reverse(typeMapper);
+        for (CmManualFundNoticeInfoDO 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;
+    }
 }

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

@@ -3,6 +3,7 @@ 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.ManualFundNoticeInfoVO;
 import com.smppw.common.pojo.ResultVo;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -43,4 +44,16 @@ 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));
+    }
+
 }

+ 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.CmManualFundNoticeInfoDO;
+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<CmManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title) {
+        return fundAnnounceMapper.queryFundAnnounce(fundId, typeList, title);
+    }
+}

+ 45 - 0
src/main/java/com/smppw/analysis/domain/dataobject/CmManualFundNoticeInfoDO.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 CmManualFundNoticeInfoDO {
+
+    /**
+     * 信息发布日期
+     */
+    private Date date;
+
+    /**
+     * 公告类型:1-发行上市, 2-定期报告, 3-业绩快报, 4-其他公告
+     */
+    private String type;
+
+    /**
+     * 公告标题
+     */
+    private String title;
+
+    /**
+     * 公共来源
+     */
+    private String media;
+
+    /**
+     * 附件名称
+     */
+    private String attName;
+
+    /**
+     * 附件地址
+     */
+    private String attUri;
+
+}

+ 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/mapper/MfFundAnnounceMapper.java

@@ -0,0 +1,27 @@
+package com.smppw.analysis.domain.mapper;
+
+import com.smppw.analysis.domain.dataobject.CmManualFundNoticeInfoDO;
+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<CmManualFundNoticeInfoDO> queryFundAnnounce(@Param("fundId") String fundId, @Param("typeList") List<String> typeList, @Param("title") String title);
+
+}

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

@@ -1,5 +1,6 @@
 package com.smppw.analysis.domain.service;
 
+import com.smppw.analysis.domain.dataobject.CmManualFundNoticeInfoDO;
 import com.smppw.analysis.domain.dataobject.FundSimilarDo;
 import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
 import com.smppw.analysis.domain.dto.info.FundSimilarParams;
@@ -32,4 +33,15 @@ 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<CmManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title);
+
 }

+ 11 - 1
src/main/java/com/smppw/analysis/domain/service/impl/BaseInfoServiceImpl.java

@@ -5,9 +5,11 @@ 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.dataobject.FundSimilarDo;
 import com.smppw.analysis.domain.dataobject.MonetaryFundProfitDO;
 import com.smppw.analysis.domain.dto.info.FundSimilarParams;
@@ -59,13 +61,16 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
     private final RongzhiIndexNavDao rongzhiIndexNavDao;
     private final FundInformationDao fundInformationDao;
     private ApplicationContext applicationContext;
+    private final FundAnnounceDao fundAnnounceDao;
 
     public BaseInfoServiceImpl(AnalysisProperty property, CacheFactory factory,
-                               IndexesProfileDao indexesProfileDao, RongzhiIndexNavDao rongzhiIndexNavDao, FundInformationDao fundInformationDao) {
+                               IndexesProfileDao indexesProfileDao, RongzhiIndexNavDao rongzhiIndexNavDao,
+                               FundInformationDao fundInformationDao, FundAnnounceDao fundAnnounceDao) {
         this.cacheGateway = factory.getCacheGateway(property.getCacheType());
         this.indexesProfileDao = indexesProfileDao;
         this.rongzhiIndexNavDao = rongzhiIndexNavDao;
         this.fundInformationDao = fundInformationDao;
+        this.fundAnnounceDao = fundAnnounceDao;
     }
 
     @Override
@@ -251,6 +256,11 @@ public class BaseInfoServiceImpl implements BaseInfoService, ApplicationContextA
         return dataList;
     }
 
+    @Override
+    public List<CmManualFundNoticeInfoDO> queryFundAnnounce(String fundId, List<String> typeList, String title) {
+        return fundAnnounceDao.queryFundAnnounce(fundId, typeList, title);
+    }
+
     /**
      * 把指定类型的标的的名称映射查询出来
      *

+ 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.CmManualFundNoticeInfoDO">
+        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>