浏览代码

feat:邮件解析-未匹配基金数据写入别名管理表

mozuwen 7 月之前
父节点
当前提交
c6f51712e4

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

@@ -14,4 +14,6 @@ public interface FundAliasMapper {
     List<FundAliasDO> queryFundByName(@Param("fundName") String fundName);
 
     List<FundAliasDO> queryFundByRegisterNumber(@Param("registerNumber") String registerNumber);
+
+    void insert(@Param("fundName") String fundName, @Param("registerNumber") String registerNumber);
 }

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

@@ -15,7 +15,6 @@
         <result column="updatetime" property="updateTime"/>
     </resultMap>
 
-
     <select id="queryFundByNameAndRegisterNumber" resultMap="BaseResultMap">
         select target_fund_id, target_fund_name, target_register_number
         from PPW_EMAIL.fund_alias
@@ -38,4 +37,9 @@
           and source_register_number = #{registerNumber}
     </select>
 
+    <insert id="insert">
+        insert into PPW_EMAIL.fund_alias(source_fund_name, source_register_number)
+        values (#{fundName}, #{registerNumber})
+    </insert>
+
 </mapper>

+ 15 - 2
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -59,12 +59,14 @@ public class EmailParseService {
     private final AssetMapper assetMapper;
     private final NavMapper navMapper;
     private final FundService fundService;
+    private final FundAliasMapper fundAliasMapper;
 
     public EmailParseService(EmailTypeRuleMapper emailTypeRuleMapper, EmailRuleConfig emailRuleConfig,
                              EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory,
                              EmailParseInfoMapper emailParseInfoMapper, EmailFileInfoMapper emailFileInfoMapper,
                              EmailFundNavMapper emailFundNavMapper, EmailFundAssetMapper emailFundAssetMapper,
-                             AssetMapper assetMapper, NavMapper navMapper, FundService fundService) {
+                             AssetMapper assetMapper, NavMapper navMapper, FundService fundService,
+                             FundAliasMapper fundAliasMapper) {
         this.emailTypeRuleMapper = emailTypeRuleMapper;
         this.emailRuleConfig = emailRuleConfig;
         this.emailFieldMapper = emailFieldMapper;
@@ -76,6 +78,7 @@ public class EmailParseService {
         this.assetMapper = assetMapper;
         this.navMapper = navMapper;
         this.fundService = fundService;
+        this.fundAliasMapper = fundAliasMapper;
     }
 
     /**
@@ -359,7 +362,8 @@ public class EmailParseService {
         if (CollUtil.isEmpty(fundNavDTO.getFundIdList())) {
             List<String> fundIdList = fundService.getFundIdByNamesAndCode(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
             if (CollUtil.isEmpty(fundIdList)) {
-                // todo 写到别名表fund_alias
+                // 判断是否写入别名管理表fund_alias
+                saveFundAlias(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
                 fundNavDTO.setParseStatus(NavParseStatusConst.NOT_MATCH);
                 return;
             }
@@ -382,6 +386,15 @@ public class EmailParseService {
         fundNavDTO.setParseStatus(NavParseStatusConst.SUCCESS);
     }
 
+    private void saveFundAlias(String fundName, String registerNumber) {
+        List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
+        if (CollUtil.isNotEmpty(fundAliasDOList)) {
+            return;
+        }
+        log.info("写入别名表 -> 基金名称:{},备案编码:{}", fundName, registerNumber);
+        fundAliasMapper.insert(fundName, registerNumber);
+    }
+
     private Integer saveEmailParseInfo(EmailParseInfoDO emailParseInfoDO) {
         if (emailParseInfoDO == null) {
             return null;

+ 7 - 3
service-daq/src/main/java/com/simuwang/daq/service/FundService.java

@@ -9,6 +9,7 @@ import com.simuwang.base.pojo.dos.FundInfoDO;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
@@ -49,7 +50,7 @@ public class FundService {
         }
         List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
         if (CollUtil.isNotEmpty(fundAliasDOList)) {
-            return fundAliasDOList.stream().map(this::convertToFundInfoDO).collect(Collectors.toList());
+            return fundAliasDOList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
         }
         // 2.基金名称匹配
         if (StrUtil.isNotBlank(fundName)) {
@@ -59,7 +60,7 @@ public class FundService {
             }
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByName(fundName);
             if (CollUtil.isNotEmpty(fundAliasList)) {
-                return fundAliasList.stream().map(this::convertToFundInfoDO).collect(Collectors.toList());
+                return fundAliasList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
             }
         }
         // 3.备案编码匹配
@@ -70,13 +71,16 @@ public class FundService {
             }
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByRegisterNumber(registerNumber);
             if (CollUtil.isNotEmpty(fundAliasList)) {
-                return fundAliasList.stream().map(this::convertToFundInfoDO).collect(Collectors.toList());
+                return fundAliasList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
             }
         }
         return CollUtil.newArrayList();
     }
 
     public FundInfoDO convertToFundInfoDO(FundAliasDO fundAliasDO) {
+        if (fundAliasDO == null || StrUtil.isBlank(fundAliasDO.getTargetFundId())) {
+            return null;
+        }
         FundInfoDO fundInfoDO = new FundInfoDO();
         fundInfoDO.setFundId(fundAliasDO.getTargetFundId());
         fundInfoDO.setFundName(fundAliasDO.getTargetFundName());