فهرست منبع

feat:邮件解析-已匹配上的基金也要写到别名表

mozuwen 7 ماه پیش
والد
کامیت
5bf25c96ff

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

@@ -24,7 +24,7 @@ public interface FundAliasMapper {
 
     void saveFundAlias(FundAliasDO fundAliasDO);
 
-    void insert(@Param("fundName") String fundName, @Param("registerNumber") String registerNumber);
-
     void batchDelete(@Param("idList") List<Integer> idList,@Param("updaterId")Integer userId);
+
+    void batchInsert(@Param("itemDoList") List<FundAliasDO> fundAliasDOS);
 }

+ 9 - 1
service-base/src/main/resources/mapper/FundAliasMapper.xml

@@ -95,5 +95,13 @@
         values (#{fundName}, #{registerNumber})
     </insert>
 
-
+    <insert id="batchInsert">
+        insert into PPW_EMAIL.fund_alias(source_fund_name, source_register_number,target_fund_id,
+                                         isvalid,creatorid,createtime,updatetime,updaterid)
+        values
+        <foreach collection="itemDoList" item="itemDo" index="index" separator=",">
+            (#{itemDo.sourceFundName},#{itemDo.sourceRegisterNumber},#{itemDo.targetFundId},
+            #{itemDo.isvalid}, #{itemDo.creatorId}, #{itemDo.createTime}, #{itemDo.updaterId}, #{itemDo.updateTime})
+        </foreach>
+    </insert>
 </mapper>

+ 35 - 10
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -2,6 +2,7 @@ package com.simuwang.daq.service;
 
 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.exceptions.ExceptionUtil;
 import cn.hutool.core.map.MapUtil;
@@ -361,17 +362,22 @@ public class EmailParseService {
             fundNavDTO.setParseStatus(NavParseStatusConst.NAV_DEFICIENCY);
             return;
         }
+
         // 2.匹配基金(考虑到解析估值表时已经匹配上基金的情况)
-        if (CollUtil.isEmpty(fundNavDTO.getFundIdList())) {
-            List<String> fundIdList = fundService.getFundIdByNamesAndCode(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
+        List<String> fundIdList = fundNavDTO.getFundIdList();
+        if (CollUtil.isEmpty(fundIdList)) {
+            fundIdList = fundService.getFundIdByNamesAndCode(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
             if (CollUtil.isEmpty(fundIdList)) {
-                // 判断是否写入别名管理表fund_alias
-                saveFundAlias(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
                 fundNavDTO.setParseStatus(NavParseStatusConst.NOT_MATCH);
-                return;
             }
-            fundNavDTO.setFundIdList(fundIdList);
         }
+        fundNavDTO.setFundIdList(fundIdList);
+        // 写入别名管理表fund_alias
+        saveFundAlias(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber(), fundIdList);
+        if (CollUtil.isEmpty(fundIdList)) {
+            return;
+        }
+
         // 考虑单独规模文件时 -> 无单位净值和累计净值
         // 3.单位净值或累计净值不大于0
         if (!emailTitle.contains("规模")) {
@@ -381,6 +387,7 @@ public class EmailParseService {
                 return;
             }
         }
+
         // 4.资产净值不大于0
         if (StrUtil.isNotBlank(fundNavDTO.getAssetNet()) && fundNavDTO.getAssetNet().compareTo("0") <= 0) {
             fundNavDTO.setParseStatus(NavParseStatusConst.ASSET_NET_NEGATIVE);
@@ -389,7 +396,7 @@ public class EmailParseService {
         fundNavDTO.setParseStatus(NavParseStatusConst.SUCCESS);
     }
 
-    private void saveFundAlias(String fundName, String registerNumber) {
+    private void saveFundAlias(String fundName, String registerNumber, List<String> fundIdList) {
         // 未识别到基金名称和备案编码的数据不写入别名管理
         if (StrUtil.isBlank(fundName) && StrUtil.isBlank(registerNumber)) {
             return;
@@ -404,11 +411,29 @@ public class EmailParseService {
         if (StrUtil.isNotBlank(fundName) && StrUtil.isBlank(registerNumber)) {
             fundAliasDOList = fundAliasMapper.queryFundByName(fundName);
         }
+
         if (CollUtil.isNotEmpty(fundAliasDOList)) {
-            return;
+            List<String> collect = fundAliasDOList.stream().map(FundAliasDO::getTargetFundId).distinct().toList();
+            fundIdList = fundIdList.stream().filter(e -> !collect.contains(e)).toList();
         }
-        log.info("写入别名表 -> 基金名称:{},备案编码:{}", fundName, registerNumber);
-        fundAliasMapper.insert(fundName, registerNumber);
+
+        log.info("写入别名表 -> 基金名称:{},备案编码:{},基金id:{}", fundName, registerNumber, fundIdList);
+        List<FundAliasDO> fundAliasDOS = CollUtil.isNotEmpty(fundIdList) ? ListUtil.toList(buildFundAliasDO(fundName, registerNumber, null))
+                : fundIdList.stream().map(e -> buildFundAliasDO(fundName, registerNumber, e)).toList();
+        fundAliasMapper.batchInsert(fundAliasDOS);
+    }
+
+    public FundAliasDO buildFundAliasDO(String fundName, String registerNumber, String fundId) {
+        FundAliasDO fundAliasDO = new FundAliasDO();
+        fundAliasDO.setTargetFundId(fundId);
+        fundAliasDO.setSourceFundName(fundName);
+        fundAliasDO.setSourceRegisterNumber(registerNumber);
+        fundAliasDO.setIsvalid(1);
+        fundAliasDO.setCreatorId(0);
+        fundAliasDO.setCreateTime(new Date());
+        fundAliasDO.setUpdateTime(new Date());
+        fundAliasDO.setUpdaterId(0);
+        return fundAliasDO;
     }
 
     private Integer saveEmailParseInfo(EmailParseInfoDO emailParseInfoDO) {