Ver Fonte

feat:托管机构增加数据重刷功能

chenjianhua há 2 semanas atrás
pai
commit
1d29037698

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

@@ -42,4 +42,6 @@ public interface EmailParseInfoMapper {
     Long countEmailTotal(@Param("emailType")Integer emailType);
 
     void updateReviewStatus(@Param("idList")List<Integer> idList, @Param("reviewStatus")Integer reviewStatus,@Param("userId") Integer userId);
+
+    List<EmailParseInfoDO> queryByEmail(@Param("senderEmail") String email);
 }

+ 18 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/EmailVO.java

@@ -0,0 +1,18 @@
+package com.simuwang.base.pojo.vo;
+
+import lombok.Data;
+
+/**
+ * FileName: ComyanyEmailIdVO
+ * Author:   chenjianhua
+ * Date:     2024/9/12 17:20
+ * Description: ${DESCRIPTION}
+ */
+@Data
+public class EmailVO {
+
+    /**
+     * 邮件地址
+     */
+    private String email;
+}

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

@@ -306,5 +306,11 @@
             and email_type = #{emailType}
         </if>
     </select>
+    <select id="queryByEmail"  resultMap="BaseResultMap">
+        select id, email, email_date, parse_date, email_title, email_type, sender_email,parse_status
+        from email_parse_info
+        where isvalid = 1
+          and sender_email = #{senderEmail}
+    </select>
 
 </mapper>

+ 2 - 0
service-daq/src/main/java/com/simuwang/daq/service/EmailParseApiService.java

@@ -1,6 +1,7 @@
 package com.simuwang.daq.service;
 
 import com.simuwang.base.pojo.dto.MailboxInfoDTO;
+import com.simuwang.base.pojo.vo.EmailVO;
 
 import java.util.Date;
 import java.util.List;
@@ -36,4 +37,5 @@ public interface EmailParseApiService {
      */
     void reparseFile(List<Integer> fileIdList);
 
+    void batchReparse(EmailVO emailVO);
 }

+ 41 - 0
service-daq/src/main/java/com/simuwang/daq/service/EmailParseApiServiceImpl.java

@@ -20,6 +20,7 @@ import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
 import com.simuwang.base.pojo.dto.EmailFundNavDTO;
 import com.simuwang.base.pojo.dto.EmailInfoDTO;
 import com.simuwang.base.pojo.dto.MailboxInfoDTO;
+import com.simuwang.base.pojo.vo.EmailVO;
 import com.simuwang.shiro.utils.UserUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -211,6 +212,46 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
         });
     }
 
+    @Override
+    public void batchReparse(EmailVO emailVO) {
+        // 查询邮件信息
+        List<EmailParseInfoDO> emailParseInfoDOList = emailParseInfoMapper.queryByEmail(emailVO.getEmail());
+        for (EmailParseInfoDO emailParseInfoDO : emailParseInfoDOList) {
+            Integer emailId = emailParseInfoDO.getId();
+            List<EmailFileInfoDO> emailFileInfoDOList = emailFileInfoMapper.queryByEmailId(emailId);
+            if (CollUtil.isEmpty(emailFileInfoDOList)) {
+                log.info("该邮件不存在附件 -> 邮件id:{}", emailId);
+                return;
+            }
+            // 邮件字段识别映射表
+            Map<String, List<String>> emailFieldMap = emailParseService.getEmailFieldMapping();
+            // 邮件类型配置
+            Map<Integer, List<String>> emailTypeMap = emailParseService.getEmailType();
+
+            // 解析流程
+            List<EmailContentInfoDTO> emailContentInfoDTOList = buildEmailContentInfoDTO(emailId, emailParseInfoDO, emailFileInfoDOList, emailTypeMap);
+
+            List<EmailFundNavDTO> emailFundNavDTOList = CollUtil.newArrayList();
+            Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap = MapUtil.newHashMap();
+
+            //获取全部的托管邮箱信息
+            List<String> hostedEmailList = hostedEmailInfoMapper.getAllHostedEmail();
+            asyncExecutor.execute(() -> {
+                for (EmailContentInfoDTO emailContentInfoDTO : emailContentInfoDTOList) {
+                    try {
+                        List<EmailFundNavDTO> fundNavDTOList = emailParseService.parseEmail(emailContentInfoDTO, emailFieldMap);
+                        fileNameNavMap.put(emailContentInfoDTO, fundNavDTOList);
+                        emailFundNavDTOList.addAll(fundNavDTOList);
+                    } catch (Exception e) {
+                        log.error("重新解析邮件失败,邮件id:{},堆栈信息:{}", emailId, ExceptionUtil.stacktraceToString(e));
+                    }
+                }
+                // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
+                emailParseService.saveRelatedTable(emailParseInfoDO.getEmail(), emailContentInfoDTOList, fileNameNavMap,hostedEmailList);
+            });
+        }
+    }
+
     private EmailContentInfoDTO buildEmailContentInfoDTO(EmailInfoDTO emailInfoDTO) {
         String emailDate = DateUtil.format(emailInfoDTO.getEmailDate(), DateConst.YYYY_MM_DD_HH_MM_SS);
         String parseDate = DateUtil.format(new Date(), DateConst.YYYY_MM_DD_HH_MM_SS);

+ 7 - 0
service-manage/src/main/java/com/simuwang/manage/api/email/ParseEmailController.java

@@ -140,6 +140,13 @@ public class ParseEmailController{
         return ResultVo.ok(true);
     }
 
+    @SystemLog(value = "根据邮件ID重新解析")
+    @PostMapping("/batch-reparse")
+    public ResultVo batchReparse(@RequestBody EmailVO emailVO){
+        emailParseApiService.batchReparse(emailVO);
+        return ResultVo.ok(true);
+    }
+
     @SystemLog(value = "根据邮件ID修改处理状态")
     @PostMapping("/review-status")
     public ResultVo reviewStatus(@RequestBody ReviewStatusVO reviewStatusVO){