|
@@ -1,16 +1,28 @@
|
|
package com.simuwang.daq.service;
|
|
package com.simuwang.daq.service;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
|
+import cn.hutool.core.exceptions.ExceptionUtil;
|
|
|
|
+import cn.hutool.core.map.MapUtil;
|
|
|
|
+import com.simuwang.base.common.conts.DateConst;
|
|
|
|
+import com.simuwang.base.common.util.EmailUtil;
|
|
import com.simuwang.base.mapper.EmailFileInfoMapper;
|
|
import com.simuwang.base.mapper.EmailFileInfoMapper;
|
|
import com.simuwang.base.mapper.EmailParseInfoMapper;
|
|
import com.simuwang.base.mapper.EmailParseInfoMapper;
|
|
|
|
+import com.simuwang.base.pojo.dos.EmailFileInfoDO;
|
|
import com.simuwang.base.pojo.dos.EmailParseInfoDO;
|
|
import com.simuwang.base.pojo.dos.EmailParseInfoDO;
|
|
|
|
+import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
|
|
+import com.simuwang.base.pojo.dto.EmailFundNavDTO;
|
|
import com.simuwang.base.pojo.dto.MailboxInfoDTO;
|
|
import com.simuwang.base.pojo.dto.MailboxInfoDTO;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
+import java.io.BufferedReader;
|
|
|
|
+import java.io.FileReader;
|
|
|
|
+import java.io.IOException;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @author mozuwen
|
|
* @author mozuwen
|
|
@@ -46,11 +58,68 @@ public class EmailParseApiServiceImpl implements EmailParseApiService {
|
|
log.info("邮件不存在 ->邮件id:{}", emailId);
|
|
log.info("邮件不存在 ->邮件id:{}", emailId);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- List<EmailParseInfoDO> emailParseInfoDOList = emailFileInfoMapper.queryByEmailId(emailId);
|
|
|
|
- if (CollUtil.isNotEmpty(emailParseInfoDOList)) {
|
|
|
|
|
|
+ List<EmailFileInfoDO> emailFileInfoDOList = emailFileInfoMapper.queryByEmailId(emailId);
|
|
|
|
+ if (CollUtil.isNotEmpty(emailFileInfoDOList)) {
|
|
log.info("该邮件不存在附件 -> 邮件id:{}", emailId);
|
|
log.info("该邮件不存在附件 -> 邮件id:{}", emailId);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- // todo 走解析流程
|
|
|
|
|
|
+ // 邮件字段识别映射表
|
|
|
|
+ Map<String, List<String>> emailFieldMap = emailParseService.getEmailFieldMapping();
|
|
|
|
+ // 邮件类型配置
|
|
|
|
+ Map<Integer, List<String>> emailTypeMap = emailParseService.getEmailType();
|
|
|
|
+
|
|
|
|
+ // 解析流程
|
|
|
|
+ List<EmailContentInfoDTO> emailContentInfoDTOList = buildEmailContentInfoDTO(emailParseInfoDO, emailFileInfoDOList, emailTypeMap);
|
|
|
|
+
|
|
|
|
+ List<EmailFundNavDTO> emailFundNavDTOList = CollUtil.newArrayList();
|
|
|
|
+ Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap = MapUtil.newHashMap();
|
|
|
|
+ for (EmailContentInfoDTO emailContentInfoDTO : emailContentInfoDTOList) {
|
|
|
|
+ try {
|
|
|
|
+ List<EmailFundNavDTO> fundNavDTOList = emailParseService.parseEmail(emailContentInfoDTO, emailFieldMap);
|
|
|
|
+ fileNameNavMap.put(emailContentInfoDTO, fundNavDTOList);
|
|
|
|
+ emailFundNavDTOList.addAll(fundNavDTOList);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("堆栈信息:{}", ExceptionUtil.stacktraceToString(e));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
|
|
|
|
+ emailParseService.saveRelatedTable(emailParseInfoDO.getEmail(), emailContentInfoDTOList, fileNameNavMap);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<EmailContentInfoDTO> buildEmailContentInfoDTO(EmailParseInfoDO emailParseInfoDO, List<EmailFileInfoDO> emailParseInfoDOList, Map<Integer, List<String>> emailTypeMap) {
|
|
|
|
+ List<EmailContentInfoDTO> emailContentInfoDTOList = CollUtil.newArrayList();
|
|
|
|
+ String emailDate = DateUtil.format(emailParseInfoDO.getEmailDate(), DateConst.YYYY_MM_DD_HH_MM_SS);
|
|
|
|
+ String parseDate = DateUtil.format(new Date(), DateConst.YYYY_MM_DD_HH_MM_SS);
|
|
|
|
+ for (EmailFileInfoDO fileInfoDO : emailParseInfoDOList) {
|
|
|
|
+ EmailContentInfoDTO contentInfoDTO = new EmailContentInfoDTO();
|
|
|
|
+ contentInfoDTO.setEmailAddress(emailParseInfoDO.getEmail());
|
|
|
|
+ contentInfoDTO.setEmailDate(emailDate);
|
|
|
|
+ contentInfoDTO.setEmailTitle(emailParseInfoDO.getEmailTitle());
|
|
|
|
+ contentInfoDTO.setParseDate(parseDate);
|
|
|
|
+ contentInfoDTO.setFileName(fileInfoDO.getFileName());
|
|
|
|
+ contentInfoDTO.setFilePath(fileInfoDO.getFilePath());
|
|
|
|
+ Integer emailType = EmailUtil.getEmailTypeBySubject(emailParseInfoDO.getEmailTitle(), emailTypeMap);
|
|
|
|
+ contentInfoDTO.setEmailType(emailType);
|
|
|
|
+ String emailContent = getEmailContent(fileInfoDO.getFilePath());
|
|
|
|
+ contentInfoDTO.setEmailContent(emailContent);
|
|
|
|
+ emailContentInfoDTOList.add(contentInfoDTO);
|
|
|
|
+ }
|
|
|
|
+ return emailContentInfoDTOList;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ public static String getEmailContent(String filePath) {
|
|
|
|
+ StringBuilder content = new StringBuilder();
|
|
|
|
+ try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
|
|
|
|
+ String line;
|
|
|
|
+ while ((line = reader.readLine()) != null) {
|
|
|
|
+ // 追加每一行到StringBuilder中
|
|
|
|
+ content.append(line).append("\n");
|
|
|
|
+ }
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ System.err.println("Error reading the file: " + e.getMessage());
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ return content.toString();
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|