Kaynağa Gözat

feat:托管邮箱配置管理开发

chenjianhua 3 hafta önce
ebeveyn
işleme
48deda4d2a

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

@@ -20,4 +20,6 @@ public interface HostedEmailInfoMapper extends BaseMapper<HostedEmailInfoDO> {
     List<HostedEmailInfoDO> searchHostEmailPage(HostedEmailPageQuery hostedEmailPageQuery);
 
     long countHostEmailPage(HostedEmailPageQuery hostedEmailPageQuery);
+
+    List<String> getAllHostedEmail();
 }

+ 1 - 1
service-base/src/main/resources/mapper/daq/EmailParseInfoMapper.xml

@@ -25,7 +25,7 @@
         insert into email_parse_info(email, sender_email, email_date, parse_date, email_title, email_type, parse_status,
                                      isvalid, creatorid, createtime, updaterid, updatetime,review_status)
         values (#{itemDo.email}, #{itemDo.senderEmail}, #{itemDo.emailDate}, #{itemDo.parseDate}, #{itemDo.emailTitle}, #{itemDo.emailType}, #{itemDo.parseStatus},
-                #{itemDo.isvalid}, #{itemDo.creatorId}, #{itemDo.createTime}, #{itemDo.updaterId}, #{itemDo.updateTime},#{item.reviewStatus})
+                #{itemDo.isvalid}, #{itemDo.creatorId}, #{itemDo.createTime}, #{itemDo.updaterId}, #{itemDo.updateTime},#{itemDo.reviewStatus})
     </insert>
 
     <update id="updateParseStatus">

+ 3 - 0
service-base/src/main/resources/mapper/daq/HostedEmailInfoMapper.xml

@@ -82,6 +82,9 @@
             and hei.open_status =#{openStatus}
         </if>
     </select>
+    <select id="getAllHostedEmail" resultType="java.lang.String">
+        select email from hosted_email_info where isvalid=1 group by email
+    </select>
 
 
 </mapper>

+ 13 - 3
service-daq/src/main/java/com/simuwang/daq/service/EmailParseApiServiceImpl.java

@@ -12,6 +12,7 @@ import com.simuwang.base.common.util.EmailUtil;
 import com.simuwang.base.mapper.daq.EmailFileInfoMapper;
 import com.simuwang.base.mapper.daq.EmailParseInfoMapper;
 import com.simuwang.base.mapper.daq.EmailTaskInfoMapper;
+import com.simuwang.base.mapper.daq.HostedEmailInfoMapper;
 import com.simuwang.base.pojo.dos.EmailFileInfoDO;
 import com.simuwang.base.pojo.dos.EmailParseInfoDO;
 import com.simuwang.base.pojo.dos.EmailTaskInfoDO;
@@ -49,14 +50,18 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
     private final EmailFileInfoMapper emailFileInfoMapper;
     private final ThreadPoolTaskExecutor asyncExecutor;
     private final EmailTaskInfoMapper emailTaskInfoMapper;
+    private final HostedEmailInfoMapper hostedEmailInfoMapper;
 
     public EmailParseApiServiceImpl(EmailParseService emailParseService, EmailParseInfoMapper emailParseInfoMapper,
-                                    EmailFileInfoMapper emailFileInfoMapper, @Qualifier("asyncExecutor") ThreadPoolTaskExecutor asyncExecutor, EmailTaskInfoMapper emailTaskInfoMapper) {
+                                    EmailFileInfoMapper emailFileInfoMapper,
+                                    @Qualifier("asyncExecutor") ThreadPoolTaskExecutor asyncExecutor,
+                                    EmailTaskInfoMapper emailTaskInfoMapper,HostedEmailInfoMapper hostedEmailInfoMapper) {
         this.emailParseService = emailParseService;
         this.emailParseInfoMapper = emailParseInfoMapper;
         this.emailFileInfoMapper = emailFileInfoMapper;
         this.asyncExecutor = asyncExecutor;
         this.emailTaskInfoMapper = emailTaskInfoMapper;
+        this.hostedEmailInfoMapper = hostedEmailInfoMapper;
     }
 
     @Override
@@ -150,6 +155,9 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
 
         List<EmailFundNavDTO> emailFundNavDTOList = CollUtil.newArrayList();
         Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap = MapUtil.newHashMap();
+
+        //获取全部的托管邮箱信息
+        List<String> hostedEmailList = hostedEmailInfoMapper.getAllHostedEmail();
         asyncExecutor.execute(() -> {
             for (EmailContentInfoDTO emailContentInfoDTO : emailContentInfoDTOList) {
                 try {
@@ -161,7 +169,7 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
                 }
             }
             // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
-            emailParseService.saveRelatedTable(emailParseInfoDO.getEmail(), emailContentInfoDTOList, fileNameNavMap);
+            emailParseService.saveRelatedTable(emailParseInfoDO.getEmail(), emailContentInfoDTOList, fileNameNavMap,hostedEmailList);
         });
     }
 
@@ -174,6 +182,8 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
         if (CollUtil.isEmpty(emailParseInfoDOList)) {
             return;
         }
+        //获取全部的托管邮箱信息
+        List<String> hostedEmailList = hostedEmailInfoMapper.getAllHostedEmail();
         asyncExecutor.execute(() -> {
             Map<Integer, List<EmailInfoDTO>> emailIdFileMap = emailParseInfoDOList.stream().collect(Collectors.groupingBy(EmailInfoDTO::getId));
             for (Map.Entry<Integer, List<EmailInfoDTO>> entry : emailIdFileMap.entrySet()) {
@@ -195,7 +205,7 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
                     }
                 }
                 // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
-                emailParseService.saveRelatedTable(emailAddress, emailContentInfoDTOList, fileNameNavMap);
+                emailParseService.saveRelatedTable(emailAddress, emailContentInfoDTOList, fileNameNavMap,hostedEmailList);
             }
             log.info("重新解析文件结束... -> 文件id:{}", fileIdList);
         });

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

@@ -95,6 +95,8 @@ public class EmailParseService {
 
     @Autowired
     private ChannelMapper channelMapper;
+    @Autowired
+    private HostedEmailInfoMapper hostedEmailInfoMapper;
 
     public EmailParseService(EmailTypeRuleMapper emailTypeRuleMapper, EmailRuleConfig emailRuleConfig,
                              EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory,
@@ -152,6 +154,8 @@ public class EmailParseService {
             log.info("未采集到邮件 -> 邮箱配置信息:{},开始时间:{},结束时间:{}", mailboxInfoDTO, DateUtil.format(startDate, DateConst.YYYY_MM_DD_HH_MM_SS), DateUtil.format(endDate, DateConst.YYYY_MM_DD_HH_MM_SS));
             return;
         }
+        //获取全部的托管邮箱信息
+        List<String> hostedEmailList = hostedEmailInfoMapper.getAllHostedEmail();
         for (Map.Entry<String, List<EmailContentInfoDTO>> emailEntry : emailContentMap.entrySet()) {
             List<EmailContentInfoDTO> emailContentInfoDTOList = emailEntry.getValue();
             if (CollUtil.isEmpty(emailContentInfoDTOList)) {
@@ -171,7 +175,7 @@ public class EmailParseService {
                 }
             }
             // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
-            saveRelatedTable(mailboxInfoDTO.getAccount(), emailContentInfoDTOList, fileNameNavMap);
+            saveRelatedTable(mailboxInfoDTO.getAccount(), emailContentInfoDTOList, fileNameNavMap,hostedEmailList);
             log.info("结束邮件解析 -> 邮箱信息:{},开始时间:{},结束时间:{}", mailboxInfoDTO, DateUtil.format(startDate, DateConst.YYYY_MM_DD_HH_MM_SS), DateUtil.format(endDate, DateConst.YYYY_MM_DD_HH_MM_SS));
         }
     }
@@ -196,7 +200,7 @@ public class EmailParseService {
         return emailFundNavDTOList;
     }
 
-    public void saveRelatedTable(String emailAddress, List<EmailContentInfoDTO> emailContentInfoDTOList, Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap) {
+    public void saveRelatedTable(String emailAddress, List<EmailContentInfoDTO> emailContentInfoDTOList, Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap,List<String> hostedEmailList) {
         String emailTitle = CollUtil.isNotEmpty(emailContentInfoDTOList) ? emailContentInfoDTOList.get(0).getEmailTitle() : "";
         String emailDate = CollUtil.isNotEmpty(emailContentInfoDTOList) ? emailContentInfoDTOList.get(0).getEmailDate() : null;
         Integer emailType = CollUtil.isNotEmpty(emailContentInfoDTOList) ? emailContentInfoDTOList.get(0).getEmailType() : null;
@@ -266,11 +270,13 @@ public class EmailParseService {
             }catch (Exception e){
                 log.error("保存文件管理信息报错:"+e.getMessage(),e);
             }
-            // 保存净值表和规模表
-            saveNavAndAssetNet(channelId,fileId, fundNavDTOList, parseDate);
-            saveValuationInfo(channelId,fileId, fundNavDTOList);
+            //只入库托管邮箱发来的邮件
+            if(hostedEmailList.contains(senderEmail.trim())){
+                // 保存净值表和规模表
+                saveNavAndAssetNet(channelId,fileId, fundNavDTOList, parseDate);
+                saveValuationInfo(channelId,fileId, fundNavDTOList);
+            }
         }
-
          //更新邮件解析结果 -> 当【净值日期】和【备案编码/基金名称】能正常解读,即识别为【成功】
         long successNavCount = fileNameNavMap.values().stream().flatMap(List::stream).filter(e -> e != null && StrUtil.isBlank(e.getFailReason())).count();
         emailParseStatus = successNavCount >= 1 ? EmailParseStatusConst.SUCCESS : EmailParseStatusConst.FAIL;