|
@@ -174,6 +174,10 @@ public class EmailParseService {
|
|
|
public List<EmailFundNavDTO> parseEmail(EmailContentInfoDTO emailContentInfoDTO, Map<String, List<String>> emailFieldMap) {
|
|
|
Integer emailType = emailContentInfoDTO.getEmailType();
|
|
|
AbstractEmailParser emailParser = emailParserFactory.getInstance(emailType);
|
|
|
+ //目前分红合同,基金合同,变更公告不做解析
|
|
|
+ if(emailParser == null){
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
List<EmailFundNavDTO> emailFundNavDTOList = emailParser.parse(emailContentInfoDTO, emailFieldMap);
|
|
|
//因为有些邮件是净值邮件,但标题是估值表的标题,会导致无法解析到数据,这里做个补丁如果估值表类型的邮件解析不到数据,就再使用净值解析逻辑处理一次
|
|
|
if(EmailTypeConst.VALUATION_EMAIL_TYPE.equals(emailType)){
|
|
@@ -204,7 +208,9 @@ public class EmailParseService {
|
|
|
// 保存邮件文件表
|
|
|
EmailContentInfoDTO emailContentInfoDTO = fileNameNavEntry.getKey();
|
|
|
String fileName = emailContentInfoDTO.getFileName();
|
|
|
- if (Objects.equals(EmailTypeConst.REPORT_EMAIL_TYPE, emailType) && fileName.endsWith(".html")) {
|
|
|
+ //针对HTML,只解析净值规模和估值表类型的邮件,其余类型不解析
|
|
|
+ if (!Objects.equals(EmailTypeConst.NAV_EMAIL_TYPE, emailType)
|
|
|
+ && !Objects.equals(EmailTypeConst.VALUATION_EMAIL_TYPE, emailType) && fileName.endsWith(".html")) {
|
|
|
continue;
|
|
|
}
|
|
|
Integer fileId = saveEmailFileInfo(emailId, emailContentInfoDTO.getFileId(), fileName, emailContentInfoDTO.getFilePath(), parseDate);
|
|
@@ -221,10 +227,14 @@ public class EmailParseService {
|
|
|
// 过滤出解析成功的数据
|
|
|
fundNavDTOList = fundNavDTOList.stream().filter(e -> e != null && StrUtil.isBlank(e.getFailReason())).toList();
|
|
|
}
|
|
|
- if (CollUtil.isEmpty(fundNavDTOList) && !Objects.equals(EmailTypeConst.REPORT_EMAIL_TYPE, emailType)) {
|
|
|
+ if (CollUtil.isEmpty(fundNavDTOList) && (!Objects.equals(EmailTypeConst.MONTH_REPORT_EMAIL_TYPE, emailType)
|
|
|
+ ||!Objects.equals(EmailTypeConst.YEAR_REPORT_EMAIL_TYPE, emailType)
|
|
|
+ ||!Objects.equals(EmailTypeConst.QUARTER_REPORT_EMAIL_TYPE, emailType))) {
|
|
|
continue;
|
|
|
}
|
|
|
- if (Objects.equals(EmailTypeConst.REPORT_EMAIL_TYPE, emailType)) {
|
|
|
+ if (Objects.equals(EmailTypeConst.MONTH_REPORT_EMAIL_TYPE, emailType)
|
|
|
+ ||Objects.equals(EmailTypeConst.YEAR_REPORT_EMAIL_TYPE, emailType)
|
|
|
+ ||Objects.equals(EmailTypeConst.QUARTER_REPORT_EMAIL_TYPE, emailType)) {
|
|
|
// 解析结果(可以从python获取或者自行解析)并保存报告
|
|
|
ParseResult<ReportData> parseResult = this.parseReportAndHandleResult(fileId, emailContentInfoDTO);
|
|
|
dataList.add(parseResult);
|
|
@@ -255,7 +265,9 @@ public class EmailParseService {
|
|
|
}
|
|
|
}
|
|
|
// 报告邮件有一条失败就表示整个邮件解析失败
|
|
|
- if (Objects.equals(EmailTypeConst.REPORT_EMAIL_TYPE, emailType) && CollUtil.isNotEmpty(dataList)) {
|
|
|
+ if ((Objects.equals(EmailTypeConst.MONTH_REPORT_EMAIL_TYPE, emailType)
|
|
|
+ || Objects.equals(EmailTypeConst.QUARTER_REPORT_EMAIL_TYPE, emailType)
|
|
|
+ || Objects.equals(EmailTypeConst.YEAR_REPORT_EMAIL_TYPE, emailType)) && CollUtil.isNotEmpty(dataList)) {
|
|
|
long sucNum = dataList.stream().filter(e -> Objects.equals(1, e.getStatus())).count();
|
|
|
if (sucNum > 0) {
|
|
|
emailParseStatus = EmailParseStatusConst.SUCCESS;
|
|
@@ -454,7 +466,10 @@ public class EmailParseService {
|
|
|
ParseResult<ReportData> result = new ParseResult<>();
|
|
|
String fileName = emailContentInfoDTO.getFileName();
|
|
|
Integer emailType = emailContentInfoDTO.getEmailType();
|
|
|
- if (!Objects.equals(EmailTypeConst.REPORT_EMAIL_TYPE, emailType) || StrUtil.isBlank(fileName)) {
|
|
|
+ if (!Objects.equals(EmailTypeConst.MONTH_REPORT_EMAIL_TYPE, emailType)
|
|
|
+ ||!Objects.equals(EmailTypeConst.YEAR_REPORT_EMAIL_TYPE, emailType)
|
|
|
+ ||!Objects.equals(EmailTypeConst.QUARTER_REPORT_EMAIL_TYPE, emailType)
|
|
|
+ || StrUtil.isBlank(fileName)) {
|
|
|
result.setStatus(ReportParseStatus.NOT_A_REPORT.getCode());
|
|
|
result.setMsg(ReportParseStatus.NOT_A_REPORT.getMsg());
|
|
|
return result;
|
|
@@ -935,7 +950,12 @@ public class EmailParseService {
|
|
|
String valuation = emailTypeRuleDO != null && StrUtil.isNotBlank(emailTypeRuleDO.getValuation()) ? emailTypeRuleDO.getValuation() : emailRuleConfig.getValuation();
|
|
|
String report = emailTypeRuleDO != null && StrUtil.isNotBlank(emailTypeRuleDO.getReport()) ? emailTypeRuleDO.getReport() : emailRuleConfig.getReport();
|
|
|
emailTypeMap.put(EmailTypeConst.VALUATION_EMAIL_TYPE, Arrays.stream(valuation.split(",")).toList());
|
|
|
- emailTypeMap.put(EmailTypeConst.REPORT_EMAIL_TYPE, Arrays.stream(report.split(",")).toList());
|
|
|
+ emailTypeMap.put(EmailTypeConst.MONTH_REPORT_EMAIL_TYPE, Arrays.stream(report.split(",")).toList());
|
|
|
+ emailTypeMap.put(EmailTypeConst.QUARTER_REPORT_EMAIL_TYPE, Arrays.stream(report.split(",")).toList());
|
|
|
+ emailTypeMap.put(EmailTypeConst.YEAR_REPORT_EMAIL_TYPE, Arrays.stream(report.split(",")).toList());
|
|
|
+ emailTypeMap.put(EmailTypeConst.CONTRACT_EMAIL_TYPE, Arrays.stream(report.split(",")).toList());
|
|
|
+ emailTypeMap.put(EmailTypeConst.DISTRIBUTION_EMAIL_TYPE, Arrays.stream(report.split(",")).toList());
|
|
|
+ emailTypeMap.put(EmailTypeConst.CHANGE_EMAIL_TYPE, Arrays.stream(report.split(",")).toList());
|
|
|
emailTypeMap.put(EmailTypeConst.NAV_EMAIL_TYPE, Arrays.stream(nav.split(",")).toList());
|
|
|
return emailTypeMap;
|
|
|
}
|
|
@@ -1019,8 +1039,8 @@ public class EmailParseService {
|
|
|
emailContentInfoDTOList.add(emailContentInfoDTO);
|
|
|
}
|
|
|
if (CollUtil.isNotEmpty(emailContentInfoDTOList)) {
|
|
|
- // 估值表或定期报告邮件不展示正文html文件
|
|
|
- if (emailType.equals(EmailTypeConst.VALUATION_EMAIL_TYPE) || emailType.equals(EmailTypeConst.REPORT_EMAIL_TYPE)) {
|
|
|
+ //除了净值规模,其余邮件类型不展示正文html文件
|
|
|
+ if (!emailType.equals(EmailTypeConst.NAV_EMAIL_TYPE)) {
|
|
|
emailContentInfoDTOList = emailContentInfoDTOList.stream().filter(e -> !ExcelUtil.isHTML(e.getFilePath())).toList();
|
|
|
}
|
|
|
emailContentInfoDTOList.forEach(e -> {
|