ソースを参照

feat: 别名管理功能开发,包含查询和编辑

chenjianhua 7 ヶ月 前
コミット
23f431cf76

+ 2 - 0
service-base/src/main/java/com/simuwang/base/mapper/CompanyInformationMapper.java

@@ -15,4 +15,6 @@ import java.util.Map;
 @Mapper
 public interface CompanyInformationMapper {
     public List<Map<String, String>> searchCompanyInfoByKeyword(@Param("keyword") String keyword);
+
+    String getCompanyNameByFundId(@Param("fundId") String fundId);
 }

+ 2 - 0
service-base/src/main/java/com/simuwang/base/mapper/EmailFundAssetMapper.java

@@ -16,5 +16,7 @@ public interface EmailFundAssetMapper {
 
     long countAssetDetail(ParseDetailPageQuery parseDetailPageQuery);
 
+    Integer countNoStoreAsset(String sourceFundName);
+
     void deleteByFileId(@Param("fileId") Integer fileId);
 }

+ 3 - 0
service-base/src/main/java/com/simuwang/base/mapper/EmailFundNavMapper.java

@@ -2,6 +2,7 @@ package com.simuwang.base.mapper;
 
 import com.simuwang.base.pojo.dos.EmailFundNavDO;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
+import com.simuwang.base.pojo.vo.EmailFundNavVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -16,5 +17,7 @@ public interface EmailFundNavMapper {
 
     long countNavDetail(ParseDetailPageQuery parseDetailPageQuery);
 
+    Integer countNoStoreNav(@Param("fundName") String sourceFundName);
+
     void deleteByFileId(@Param("fileId") Integer fileId);
 }

+ 8 - 0
service-base/src/main/java/com/simuwang/base/mapper/FundAliasMapper.java

@@ -15,5 +15,13 @@ public interface FundAliasMapper {
 
     List<FundAliasDO> queryFundByRegisterNumber(@Param("registerNumber") String registerNumber);
 
+    List<FundAliasDO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery);
+
+    long countFundAlias(FundAliasPageQuery fundAliasPageQuery);
+
+    FundAliasDO searchFundAliasById(@Param("id") Integer id);
+
+    void saveFundAlias(FundAliasDO fundAliasDO);
+
     void insert(@Param("fundName") String fundName, @Param("registerNumber") String registerNumber);
 }

+ 1 - 1
service-base/src/main/java/com/simuwang/base/pojo/dos/EmailFundAssetDO.java

@@ -64,7 +64,7 @@ public class EmailFundAssetDO {
     @TableField(value = "is_stored")
     private Integer isStored;
     /**
-     * 异常情况:1-无异常,2-资产净值<=0
+     * 异常情况:1-无异常,2-资产净值<=0,3-未匹配基金
      */
     @TableField(value = "exception_status")
     private Integer exceptionStatus;

+ 12 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/FundAliasDO.java

@@ -3,6 +3,7 @@ package com.simuwang.base.pojo.dos;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.simuwang.base.pojo.vo.FundAliasVO;
 import lombok.Data;
 
 import java.util.Date;
@@ -65,4 +66,15 @@ public class FundAliasDO {
      */
     @TableField(value = "updatetime")
     private Date updateTime;
+
+    public FundAliasVO toVo() {
+        FundAliasVO fundAliasVO = new FundAliasVO();
+        fundAliasVO.setId(this.id);
+        fundAliasVO.setSourceFundName(this.sourceFundName);
+        fundAliasVO.setSourceRegisterNumber(this.sourceRegisterNumber);
+        fundAliasVO.setTargetFundId(this.targetFundId);
+        fundAliasVO.setTargetFundName(this.targetFundName);
+        fundAliasVO.setTargetRegisterNumber(this.targetRegisterNumber);
+        return fundAliasVO;
+    }
 }

+ 34 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/query/FundAliasPageQuery.java

@@ -0,0 +1,34 @@
+package com.simuwang.base.pojo.dto.query;
+
+
+import com.simuwang.base.common.support.query.PageQuery;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:38
+ * @description 角色用户关联的分页接口请求参数
+ */
+public class FundAliasPageQuery extends PageQuery {
+    /**
+     * 基金名称
+     */
+    private String fundName;
+
+    private String fundAliasName;
+
+    public String getFundName() {
+        return fundName;
+    }
+
+    public void setFundName(String fundName) {
+        this.fundName = fundName;
+    }
+
+    public String getFundAliasName() {
+        return fundAliasName;
+    }
+
+    public void setFundAliasName(String fundAliasName) {
+        this.fundAliasName = fundAliasName;
+    }
+}

+ 50 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/FundAliasVO.java

@@ -0,0 +1,50 @@
+package com.simuwang.base.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FundAliasVO {
+    /**
+     * 主键Id
+     */
+    private Integer id;
+    /**
+     * 邮件解析基金名称
+     */
+    private String sourceFundName;
+    /**
+     * 邮件解析基金的备案编码
+     */
+    private String sourceRegisterNumber;
+    /**
+     * 匹配的源数据基金名称
+     */
+    private String targetFundName;
+    /**
+     * 匹配的源基金ID
+     */
+    private String targetFundId;
+    /**
+     * 匹配的源备案编码
+     */
+    private String targetRegisterNumber;
+
+    /**
+     * 未匹配净值数量
+     */
+    private Integer navTotal;
+    /**
+     * 未匹配规模数量
+     */
+    private Integer assetTotal;
+
+    /**
+     * 管理人
+     */
+    private String companyName;
+}

+ 6 - 0
service-base/src/main/resources/mapper/CompanyInformationMapper.xml

@@ -49,5 +49,11 @@
             and (c.company_name like concat('%',#{keyword},'%') or c.company_short_name like concat('%',#{keyword},'%') or c.register_number like concat('%',#{keyword},'%'))
         </if>
     </select>
+    <select id="getCompanyNameByFundId" resultType="java.lang.String" parameterType="java.lang.String">
+        select distinct company_name from PPW_EMAIL.pvn_company_info c join PPW_EMAIL.pvn_fund_info f
+        on f.trust_id = c.company_id
+        where c.isvalid=1 and f.isvalid=1
+        and f.fund_id=#{fundId}
+    </select>
 
 </mapper>

+ 6 - 0
service-base/src/main/resources/mapper/EmailFundAssetMapper.xml

@@ -86,6 +86,12 @@
         </if>
         )a
     </select>
+    <select id="countNoStoreAsset" resultType="java.lang.Integer" parameterType="java.lang.String">
+        select count(distinct price_date)
+        from PPW_EMAIL.email_fund_asset
+        where isvalid =1 and exception_status=3
+          and fund_name=#{fundName}
+    </select>
 
     <delete id="deleteByFileId">
         update PPW_EMAIL.email_fund_asset

+ 6 - 0
service-base/src/main/resources/mapper/EmailFundNavMapper.xml

@@ -107,6 +107,12 @@
             </if>
         ) a
     </select>
+    <select id="countNoStoreNav" resultType="java.lang.Integer" parameterType="java.lang.String">
+        select count(distinct price_date)
+        from PPW_EMAIL.email_fund_nav nav
+        where isvalid =1 and exception_status=3
+            and fund_name=#{fundName}
+    </select>
 
 
 </mapper>

+ 4 - 0
service-base/src/main/resources/mapper/FundAliasMapper.xml

@@ -14,6 +14,10 @@
         <result column="updaterid" property="updaterId"/>
         <result column="updatetime" property="updateTime"/>
     </resultMap>
+    <update id="saveFundAlias" parameterType="com.simuwang.base.pojo.dos.FundAliasDO">
+        update PPW_EMAIL.fund_alias set target_fund_id=#{targetFundId},target_fund_name=#{targetFundName},target_register_numer=#{targetRegisterNumber},updatetime=#{updateTime}
+        where isvalid =1 and id=#{id}
+    </update>
 
     <select id="queryFundByNameAndRegisterNumber" resultMap="BaseResultMap">
         select target_fund_id, target_fund_name, target_register_number

service-base/src/main/resources/mapper/ValuationMarketCodeMapper.xml → service-base/src/main/resources/mapper/FundAliasService.xml


+ 5 - 8
service-manage/src/main/java/com/simuwang/manage/api/email/ParseEmailController.java

@@ -4,10 +4,7 @@ import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.EncodeUtil;
 import com.simuwang.base.pojo.dto.query.EmailFileQuery;
 import com.simuwang.base.pojo.dto.query.EmailParseQuery;
-import com.simuwang.base.pojo.vo.EmailFileInfoVO;
-import com.simuwang.base.pojo.vo.EmailParseDetailVO;
-import com.simuwang.base.pojo.vo.EmailParseInfoVO;
-import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
+import com.simuwang.base.pojo.vo.*;
 import com.simuwang.daq.service.EmailParseApiService;
 import com.simuwang.manage.service.ParseEmailService;
 import com.smppw.common.pojo.ResultVo;
@@ -124,12 +121,12 @@ public class ParseEmailController{
 
     /**
      * 根据邮件ID重新解析
-     * @param id
+     * @param idVo
      * @return
      */
-    @GetMapping("/reparse/{id}")
-    public ResultVo reparse(@PathVariable("id")Integer id){
-        emailParseApiService.reparseEmail(id);
+    @GetMapping("/reparse")
+    public ResultVo reparse(IdVO idVo){
+        emailParseApiService.reparseEmail(idVo.getId());
         return ResultVo.ok(true);
     }
 }

+ 42 - 2
service-manage/src/main/java/com/simuwang/manage/api/fund/FunAliasController.java

@@ -1,7 +1,13 @@
 package com.simuwang.manage.api.fund;
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.pojo.dto.query.FundAliasPageQuery;
+import com.simuwang.base.pojo.vo.FundAliasVO;
+import com.simuwang.base.pojo.vo.IdVO;
+import com.simuwang.manage.service.FundAliasService;
+import com.smppw.common.pojo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 基金别名管理
@@ -13,6 +19,40 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/v1/alias")
 public class FunAliasController {
 
+    @Autowired
+    private FundAliasService fundAliasService;
 
+    /**
+     * 查询基金别名列表
+     * @param fundAliasPageQuery
+     * @return
+     */
+    @GetMapping("/fund-alias-list")
+    public MybatisPage<FundAliasVO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery){
+        MybatisPage<FundAliasVO> result = fundAliasService.searchFundAlias(fundAliasPageQuery);
+        return result;
+    }
+
+    /**
+     * 根据ID查询基金别名
+     * @param idVO
+     * @return
+     */
+    @GetMapping("/search-fund-alias")
+    public ResultVo<FundAliasVO> searchFundAlias(IdVO idVO){
+        FundAliasVO result = fundAliasService.searchFundAliasById(idVO.getId());
+        return ResultVo.ok(result);
+    }
+
+    /**
+     * 根据ID查询基金别名
+     * @param fundAliasVO
+     * @return
+     */
+    @PostMapping("/save-fund-alias")
+    public ResultVo saveFundAlias(@RequestBody FundAliasVO fundAliasVO){
+        fundAliasService.saveFundAlias(fundAliasVO);
+        return ResultVo.ok(true);
+    }
 
 }

+ 19 - 0
service-manage/src/main/java/com/simuwang/manage/service/FundAliasService.java

@@ -0,0 +1,19 @@
+package com.simuwang.manage.service;
+
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.pojo.dto.query.FundAliasPageQuery;
+import com.simuwang.base.pojo.vo.FundAliasVO;
+
+/**
+ * FileName: FunAliasService
+ * Author:   chenjianhua
+ * Date:     2024/9/14 16:18
+ * Description: ${DESCRIPTION}
+ */
+public interface FundAliasService {
+    MybatisPage<FundAliasVO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery);
+
+    FundAliasVO searchFundAliasById(Integer id);
+
+    void saveFundAlias(FundAliasVO fundAliasVO);
+}

+ 79 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/FundAliasServiceImpl.java

@@ -0,0 +1,79 @@
+package com.simuwang.manage.service.impl;
+
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.mapper.CompanyInformationMapper;
+import com.simuwang.base.mapper.EmailFundAssetMapper;
+import com.simuwang.base.mapper.EmailFundNavMapper;
+import com.simuwang.base.mapper.FundAliasMapper;
+import com.simuwang.base.pojo.dos.CompanyEmailSendHistoryDO;
+import com.simuwang.base.pojo.dos.FundAliasDO;
+import com.simuwang.base.pojo.dto.query.FundAliasPageQuery;
+import com.simuwang.base.pojo.vo.FundAliasVO;
+import com.simuwang.manage.service.FundAliasService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * FileName: FunAliasServiceImpl
+ * Author:   chenjianhua
+ * Date:     2024/9/14 16:18
+ * Description: ${DESCRIPTION}
+ */
+@Service
+public class FundAliasServiceImpl implements FundAliasService {
+    @Autowired
+    private FundAliasMapper fundAliasMapper;
+
+    @Autowired
+    private EmailFundNavMapper emailFundNavMapper;
+
+    @Autowired
+    private EmailFundAssetMapper emailFundAssetMapper;
+
+    @Autowired
+    private CompanyInformationMapper companyInformationMapper;
+
+    @Override
+    public MybatisPage<FundAliasVO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery) {
+        List<FundAliasDO> fundAliasDOList = fundAliasMapper.searchFundAlias(fundAliasPageQuery);
+        List<FundAliasVO> fundAliasVOList =  fundAliasDOList.stream().map(FundAliasDO::toVo).collect(Collectors.toList());
+        for(FundAliasVO vo : fundAliasVOList){
+            //异常净值数量
+            Integer navTotal = emailFundNavMapper.countNoStoreNav(vo.getSourceFundName());
+            vo.setNavTotal(navTotal);
+            //异常净值数量
+            Integer assetTotal = emailFundAssetMapper.countNoStoreAsset(vo.getSourceFundName());
+            vo.setAssetTotal(assetTotal);
+            //管理人
+            if(vo.getTargetFundId() !=null){
+                vo.setCompanyName(companyInformationMapper.getCompanyNameByFundId(vo.getTargetFundId()));
+            }
+        }
+        long total = fundAliasMapper.countFundAlias(fundAliasPageQuery);
+        return MybatisPage.of(total,fundAliasVOList);
+    }
+
+    @Override
+    public FundAliasVO searchFundAliasById(Integer id) {
+        FundAliasDO fundAliasDO = fundAliasMapper.searchFundAliasById(id);
+        return fundAliasDO.toVo();
+    }
+
+    @Override
+    public void saveFundAlias(FundAliasVO fundAliasVO) {
+        FundAliasDO fundAliasDO = new FundAliasDO();
+        fundAliasDO.setSourceFundName(fundAliasVO.getSourceFundName());
+        fundAliasDO.setTargetFundId(fundAliasVO.getTargetFundId());
+        fundAliasDO.setSourceRegisterNumber(fundAliasVO.getSourceRegisterNumber());
+        fundAliasDO.setTargetFundName(fundAliasVO.getTargetFundName());
+        fundAliasDO.setTargetRegisterNumber(fundAliasVO.getTargetRegisterNumber());
+        fundAliasDO.setId(fundAliasVO.getId());
+        fundAliasDO.setIsvalid(1);
+        fundAliasDO.setUpdateTime(new Date());
+        fundAliasMapper.saveFundAlias(fundAliasDO);
+    }
+}