Browse Source

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

mozuwen 7 months ago
parent
commit
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> queryFundByName(@Param("fundName") String fundName);
 
 
     List<FundAliasDO> queryFundByRegisterNumber(@Param("registerNumber") String registerNumber);
     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"/>
         <result column="updatetime" property="updateTime"/>
     </resultMap>
     </resultMap>
 
 
-
     <select id="queryFundByNameAndRegisterNumber" resultMap="BaseResultMap">
     <select id="queryFundByNameAndRegisterNumber" resultMap="BaseResultMap">
         select target_fund_id, target_fund_name, target_register_number
         select target_fund_id, target_fund_name, target_register_number
         from PPW_EMAIL.fund_alias
         from PPW_EMAIL.fund_alias
@@ -38,4 +37,9 @@
           and source_register_number = #{registerNumber}
           and source_register_number = #{registerNumber}
     </select>
     </select>
 
 
+    <insert id="insert">
+        insert into PPW_EMAIL.fund_alias(source_fund_name, source_register_number)
+        values (#{fundName}, #{registerNumber})
+    </insert>
+
 </mapper>
 </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 AssetMapper assetMapper;
     private final NavMapper navMapper;
     private final NavMapper navMapper;
     private final FundService fundService;
     private final FundService fundService;
+    private final FundAliasMapper fundAliasMapper;
 
 
     public EmailParseService(EmailTypeRuleMapper emailTypeRuleMapper, EmailRuleConfig emailRuleConfig,
     public EmailParseService(EmailTypeRuleMapper emailTypeRuleMapper, EmailRuleConfig emailRuleConfig,
                              EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory,
                              EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory,
                              EmailParseInfoMapper emailParseInfoMapper, EmailFileInfoMapper emailFileInfoMapper,
                              EmailParseInfoMapper emailParseInfoMapper, EmailFileInfoMapper emailFileInfoMapper,
                              EmailFundNavMapper emailFundNavMapper, EmailFundAssetMapper emailFundAssetMapper,
                              EmailFundNavMapper emailFundNavMapper, EmailFundAssetMapper emailFundAssetMapper,
-                             AssetMapper assetMapper, NavMapper navMapper, FundService fundService) {
+                             AssetMapper assetMapper, NavMapper navMapper, FundService fundService,
+                             FundAliasMapper fundAliasMapper) {
         this.emailTypeRuleMapper = emailTypeRuleMapper;
         this.emailTypeRuleMapper = emailTypeRuleMapper;
         this.emailRuleConfig = emailRuleConfig;
         this.emailRuleConfig = emailRuleConfig;
         this.emailFieldMapper = emailFieldMapper;
         this.emailFieldMapper = emailFieldMapper;
@@ -76,6 +78,7 @@ public class EmailParseService {
         this.assetMapper = assetMapper;
         this.assetMapper = assetMapper;
         this.navMapper = navMapper;
         this.navMapper = navMapper;
         this.fundService = fundService;
         this.fundService = fundService;
+        this.fundAliasMapper = fundAliasMapper;
     }
     }
 
 
     /**
     /**
@@ -359,7 +362,8 @@ public class EmailParseService {
         if (CollUtil.isEmpty(fundNavDTO.getFundIdList())) {
         if (CollUtil.isEmpty(fundNavDTO.getFundIdList())) {
             List<String> fundIdList = fundService.getFundIdByNamesAndCode(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
             List<String> fundIdList = fundService.getFundIdByNamesAndCode(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
             if (CollUtil.isEmpty(fundIdList)) {
             if (CollUtil.isEmpty(fundIdList)) {
-                // todo 写到别名表fund_alias
+                // 判断是否写入别名管理表fund_alias
+                saveFundAlias(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
                 fundNavDTO.setParseStatus(NavParseStatusConst.NOT_MATCH);
                 fundNavDTO.setParseStatus(NavParseStatusConst.NOT_MATCH);
                 return;
                 return;
             }
             }
@@ -382,6 +386,15 @@ public class EmailParseService {
         fundNavDTO.setParseStatus(NavParseStatusConst.SUCCESS);
         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) {
     private Integer saveEmailParseInfo(EmailParseInfoDO emailParseInfoDO) {
         if (emailParseInfoDO == null) {
         if (emailParseInfoDO == null) {
             return 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 org.springframework.stereotype.Service;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 @Service
 @Service
@@ -49,7 +50,7 @@ public class FundService {
         }
         }
         List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
         List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
         if (CollUtil.isNotEmpty(fundAliasDOList)) {
         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.基金名称匹配
         // 2.基金名称匹配
         if (StrUtil.isNotBlank(fundName)) {
         if (StrUtil.isNotBlank(fundName)) {
@@ -59,7 +60,7 @@ public class FundService {
             }
             }
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByName(fundName);
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByName(fundName);
             if (CollUtil.isNotEmpty(fundAliasList)) {
             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.备案编码匹配
         // 3.备案编码匹配
@@ -70,13 +71,16 @@ public class FundService {
             }
             }
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByRegisterNumber(registerNumber);
             List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByRegisterNumber(registerNumber);
             if (CollUtil.isNotEmpty(fundAliasList)) {
             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();
         return CollUtil.newArrayList();
     }
     }
 
 
     public FundInfoDO convertToFundInfoDO(FundAliasDO fundAliasDO) {
     public FundInfoDO convertToFundInfoDO(FundAliasDO fundAliasDO) {
+        if (fundAliasDO == null || StrUtil.isBlank(fundAliasDO.getTargetFundId())) {
+            return null;
+        }
         FundInfoDO fundInfoDO = new FundInfoDO();
         FundInfoDO fundInfoDO = new FundInfoDO();
         fundInfoDO.setFundId(fundAliasDO.getTargetFundId());
         fundInfoDO.setFundId(fundAliasDO.getTargetFundId());
         fundInfoDO.setFundName(fundAliasDO.getTargetFundName());
         fundInfoDO.setFundName(fundAliasDO.getTargetFundName());