Procházet zdrojové kódy

fix:邮件解析-修复写入别名管理逻辑错误的问题

mozuwen před 7 měsíci
rodič
revize
e01659f4c0

+ 1 - 1
service-base/src/main/java/com/simuwang/base/common/util/StringUtil.java

@@ -41,7 +41,7 @@ public class StringUtil {
         if (StrUtil.isBlank(dateString)) {
             return false;
         }
-        dateString = dateString.replaceAll("年", "-").replaceAll("月", "-");
+        dateString = dateString.replaceAll("年", "-").replaceAll("月", "-").replaceAll("日", "-");
         for (String format : DATE_FORMATS) {
             SimpleDateFormat sdf = new SimpleDateFormat(format);
             // 设置严格模式

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

@@ -12,10 +12,16 @@ public interface FundAliasMapper {
 
     List<FundAliasDO> queryFundByNameAndRegisterNumber(@Param("fundName") String fundName, @Param("registerNumber") String registerNumber);
 
+    List<FundAliasDO> queryFundIdByNameAndRegisterNumber(@Param("fundName") String fundName, @Param("registerNumber") String registerNumber);
+
     List<FundAliasDO> queryFundByName(@Param("fundName") String fundName);
 
+    List<FundAliasDO> queryFundIdByName(@Param("fundName") String fundName);
+
     List<FundAliasDO> queryFundByRegisterNumber(@Param("registerNumber") String registerNumber);
 
+    List<FundAliasDO> queryFundIdByRegisterNumber(@Param("registerNumber") String registerNumber);
+
     List<FundAliasDO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery);
 
     long countFundAlias(FundAliasPageQuery fundAliasPageQuery);
@@ -27,4 +33,5 @@ public interface FundAliasMapper {
     void batchDelete(@Param("idList") List<Integer> idList,@Param("updaterId")Integer userId);
 
     void batchInsert(@Param("itemDoList") List<FundAliasDO> fundAliasDOS);
+
 }

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

@@ -30,35 +30,57 @@
                info.fund_name as target_fund_name,
                info.register_number as target_register_number
         from PPW_EMAIL.fund_alias alias
-                 left join PPW_EMAIL.pvn_fund_info info
+                 join PPW_EMAIL.pvn_fund_info info
                            on alias.target_fund_id = info.fund_id and info.isvalid=1
         where alias.isvalid = 1
           and alias.source_fund_name = #{fundName}
           and alias.source_register_number = #{registerNumber}
     </select>
 
+    <select id="queryFundIdByNameAndRegisterNumber" resultMap="BaseResultMap">
+        select *
+        from PPW_EMAIL.fund_alias
+        where isvalid = 1
+          and source_fund_name = #{fundName}
+          and source_register_number = #{registerNumber}
+    </select>
+
     <select id="queryFundByName" resultMap="BaseResultMap">
         select alias.target_fund_id,
                info.fund_name as target_fund_name,
                info.register_number as target_register_number
         from PPW_EMAIL.fund_alias alias
-                 left join PPW_EMAIL.pvn_fund_info info
+                join PPW_EMAIL.pvn_fund_info info
                            on alias.target_fund_id = info.fund_id and info.isvalid=1
         where alias.isvalid = 1
           and alias.source_fund_name = #{fundName}
     </select>
 
+    <select id="queryFundIdByName" resultMap="BaseResultMap">
+        select *
+        from PPW_EMAIL.fund_alias
+        where isvalid = 1
+          and source_fund_name = #{fundName}
+    </select>
+
     <select id="queryFundByRegisterNumber" resultMap="BaseResultMap">
         select alias.target_fund_id,
                info.fund_name as target_fund_name,
                info.register_number as target_register_number
         from PPW_EMAIL.fund_alias alias
-                 left join PPW_EMAIL.pvn_fund_info info
+                 join PPW_EMAIL.pvn_fund_info info
                            on alias.target_fund_id = info.fund_id and info.isvalid=1
         where alias.isvalid = 1
           and alias.source_register_number = #{registerNumber}
     </select>
 
+    <select id="queryFundIdByRegisterNumber" resultMap="BaseResultMap">
+        select *
+        from PPW_EMAIL.fund_alias
+        where isvalid = 1
+          and source_register_number = #{registerNumber}
+    </select>
+
     <select id="searchFundAlias" resultMap="BaseResultMap"
             parameterType="com.simuwang.base.pojo.dto.query.FundAliasPageQuery">
         select alias.id,
@@ -131,11 +153,12 @@
 
     <insert id="batchInsert">
         insert into PPW_EMAIL.fund_alias(source_fund_name, source_register_number,target_fund_id,
-                                         isvalid,creatorid,createtime,updatetime,updaterid)
+                                         isvalid,creatorid,createtime,updaterid,updatetime)
         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>

+ 12 - 5
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -403,24 +403,31 @@ public class EmailParseService {
         }
         List<FundAliasDO> fundAliasDOList = CollUtil.newArrayList();
         if (StrUtil.isNotBlank(fundName) && StrUtil.isNotBlank(registerNumber)) {
-            fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
+            fundAliasDOList = fundAliasMapper.queryFundIdByNameAndRegisterNumber(fundName, registerNumber);
         }
         if (StrUtil.isBlank(fundName) && StrUtil.isNotBlank(registerNumber)) {
-            fundAliasDOList = fundAliasMapper.queryFundByRegisterNumber(registerNumber);
+            fundAliasDOList = fundAliasMapper.queryFundIdByRegisterNumber(registerNumber);
         }
         if (StrUtil.isNotBlank(fundName) && StrUtil.isBlank(registerNumber)) {
-            fundAliasDOList = fundAliasMapper.queryFundByName(fundName);
+            fundAliasDOList = fundAliasMapper.queryFundIdByName(fundName);
+        }
+
+        // 说明未匹配基金已经写入别名表
+        if(CollUtil.isEmpty(fundIdList) && CollUtil.isNotEmpty(fundAliasDOList)){
+            return;
         }
 
         if (CollUtil.isNotEmpty(fundAliasDOList)) {
-            List<String> collect = fundAliasDOList.stream().map(FundAliasDO::getTargetFundId).distinct().toList();
+            List<String> collect = fundAliasDOList.stream().filter(Objects::nonNull).map(FundAliasDO::getTargetFundId).filter(Objects::nonNull).distinct().toList();
             fundIdList = fundIdList.stream().filter(e -> !collect.contains(e)).toList();
         }
 
         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);
+        if(CollUtil.isNotEmpty(fundAliasDOS)){
+            fundAliasMapper.batchInsert(fundAliasDOS);
+        }
     }
 
     public FundAliasDO buildFundAliasDO(String fundName, String registerNumber, String fundId) {