|
@@ -1,5 +1,6 @@
|
|
package com.simuwang.daq.service;
|
|
package com.simuwang.daq.service;
|
|
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.exceptions.ExceptionUtil;
|
|
import cn.hutool.core.exceptions.ExceptionUtil;
|
|
@@ -26,6 +27,7 @@ import jakarta.mail.search.ReceivedDateTerm;
|
|
import jakarta.mail.search.SearchTerm;
|
|
import jakarta.mail.search.SearchTerm;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.io.File;
|
|
import java.io.File;
|
|
@@ -43,32 +45,40 @@ public class EmailParseService {
|
|
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(EmailParseService.class);
|
|
private static final Logger log = LoggerFactory.getLogger(EmailParseService.class);
|
|
|
|
|
|
|
|
+ @Value("${email.file.path}")
|
|
|
|
+ private String path;
|
|
|
|
+
|
|
private final EmailTypeRuleMapper emailTypeRuleMapper;
|
|
private final EmailTypeRuleMapper emailTypeRuleMapper;
|
|
private final EmailRuleConfig emailRuleConfig;
|
|
private final EmailRuleConfig emailRuleConfig;
|
|
private final EmailFieldMappingMapper emailFieldMapper;
|
|
private final EmailFieldMappingMapper emailFieldMapper;
|
|
private final EmailParserFactory emailParserFactory;
|
|
private final EmailParserFactory emailParserFactory;
|
|
private final EmailParseInfoMapper emailParseInfoMapper;
|
|
private final EmailParseInfoMapper emailParseInfoMapper;
|
|
- private final FundInfomationMapper fundInfomationMapper;
|
|
|
|
|
|
+ private final FundInfoMapper fundInfoMapper;
|
|
private final EmailFileInfoMapper emailFileInfoMapper;
|
|
private final EmailFileInfoMapper emailFileInfoMapper;
|
|
private final EmailFundNavMapper emailFundNavMapper;
|
|
private final EmailFundNavMapper emailFundNavMapper;
|
|
private final EmailFundAssetMapper emailFundAssetMapper;
|
|
private final EmailFundAssetMapper emailFundAssetMapper;
|
|
private final FundAliasMapper fundAliasMapper;
|
|
private final FundAliasMapper fundAliasMapper;
|
|
|
|
+ private final AssetMapper assetMapper;
|
|
|
|
+ private final NavMapper navMapper;
|
|
|
|
|
|
public EmailParseService(EmailTypeRuleMapper emailTypeRuleMapper, EmailRuleConfig emailRuleConfig,
|
|
public EmailParseService(EmailTypeRuleMapper emailTypeRuleMapper, EmailRuleConfig emailRuleConfig,
|
|
EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory,
|
|
EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory,
|
|
- EmailParseInfoMapper emailParseInfoMapper, FundInfomationMapper fundInfomationMapper,
|
|
|
|
|
|
+ EmailParseInfoMapper emailParseInfoMapper, FundInfoMapper fundInfoMapper,
|
|
EmailFileInfoMapper emailFileInfoMapper, EmailFundNavMapper emailFundNavMapper,
|
|
EmailFileInfoMapper emailFileInfoMapper, EmailFundNavMapper emailFundNavMapper,
|
|
- EmailFundAssetMapper emailFundAssetMapper, FundAliasMapper fundAliasMapper) {
|
|
|
|
|
|
+ EmailFundAssetMapper emailFundAssetMapper, FundAliasMapper fundAliasMapper,
|
|
|
|
+ AssetMapper assetMapper, NavMapper navMapper) {
|
|
this.emailTypeRuleMapper = emailTypeRuleMapper;
|
|
this.emailTypeRuleMapper = emailTypeRuleMapper;
|
|
this.emailRuleConfig = emailRuleConfig;
|
|
this.emailRuleConfig = emailRuleConfig;
|
|
this.emailFieldMapper = emailFieldMapper;
|
|
this.emailFieldMapper = emailFieldMapper;
|
|
this.emailParserFactory = emailParserFactory;
|
|
this.emailParserFactory = emailParserFactory;
|
|
this.emailParseInfoMapper = emailParseInfoMapper;
|
|
this.emailParseInfoMapper = emailParseInfoMapper;
|
|
- this.fundInfomationMapper = fundInfomationMapper;
|
|
|
|
|
|
+ this.fundInfoMapper = fundInfoMapper;
|
|
this.emailFileInfoMapper = emailFileInfoMapper;
|
|
this.emailFileInfoMapper = emailFileInfoMapper;
|
|
this.emailFundNavMapper = emailFundNavMapper;
|
|
this.emailFundNavMapper = emailFundNavMapper;
|
|
this.emailFundAssetMapper = emailFundAssetMapper;
|
|
this.emailFundAssetMapper = emailFundAssetMapper;
|
|
this.fundAliasMapper = fundAliasMapper;
|
|
this.fundAliasMapper = fundAliasMapper;
|
|
|
|
+ this.assetMapper = assetMapper;
|
|
|
|
+ this.navMapper = navMapper;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -140,7 +150,7 @@ public class EmailParseService {
|
|
}
|
|
}
|
|
for (EmailFundNavDTO fundNavDTO : fundNavDTOList) {
|
|
for (EmailFundNavDTO fundNavDTO : fundNavDTOList) {
|
|
// 设置净值数据的解析状态
|
|
// 设置净值数据的解析状态
|
|
- setNavParseStatus(fundNavDTO, emailTitle, emailDate);
|
|
|
|
|
|
+ setNavParseStatus(fundNavDTO, emailTitle);
|
|
}
|
|
}
|
|
// 保存净值表和规模表
|
|
// 保存净值表和规模表
|
|
saveNavAndAssetNet(fileId, fundNavDTOList, parseDate);
|
|
saveNavAndAssetNet(fileId, fundNavDTOList, parseDate);
|
|
@@ -158,15 +168,61 @@ public class EmailParseService {
|
|
}
|
|
}
|
|
// 净值数据
|
|
// 净值数据
|
|
List<EmailFundNavDO> emailFundNavDOList = fundNavDTOList.stream()
|
|
List<EmailFundNavDO> emailFundNavDOList = fundNavDTOList.stream()
|
|
- .map(e -> buildEmailFundNavDo(fileId, e, parseDate)).flatMap(List::stream).collect(Collectors.toList());
|
|
|
|
|
|
+ .map(e -> buildEmailFundNavDo(fileId, e, parseDate)).filter(CollUtil::isNotEmpty).flatMap(List::stream).collect(Collectors.toList());
|
|
if (CollUtil.isNotEmpty(emailFundNavDOList)) {
|
|
if (CollUtil.isNotEmpty(emailFundNavDOList)) {
|
|
emailFundNavMapper.batchInsert(emailFundNavDOList);
|
|
emailFundNavMapper.batchInsert(emailFundNavDOList);
|
|
|
|
+ List<NavDO> navDOList = emailFundNavDOList.stream().filter(e -> StrUtil.isNotBlank(e.getFundId()))
|
|
|
|
+ .map(e -> BeanUtil.copyProperties(e, NavDO.class)).collect(Collectors.toList());
|
|
|
|
+ saveNavDo(navDOList);
|
|
}
|
|
}
|
|
// 保存规模数据
|
|
// 保存规模数据
|
|
List<EmailFundAssetDO> emailFundAssetDOList = fundNavDTOList.stream()
|
|
List<EmailFundAssetDO> emailFundAssetDOList = fundNavDTOList.stream()
|
|
- .map(e -> buildEmailFundAssetDo(fileId, e, parseDate)).flatMap(List::stream).collect(Collectors.toList());
|
|
|
|
|
|
+ .map(e -> buildEmailFundAssetDo(fileId, e, parseDate)).filter(CollUtil::isNotEmpty).flatMap(List::stream).collect(Collectors.toList());
|
|
if (CollUtil.isNotEmpty(emailFundAssetDOList)) {
|
|
if (CollUtil.isNotEmpty(emailFundAssetDOList)) {
|
|
emailFundAssetMapper.batchInsert(emailFundAssetDOList);
|
|
emailFundAssetMapper.batchInsert(emailFundAssetDOList);
|
|
|
|
+ List<AssetDO> assetDOList = emailFundAssetDOList.stream().filter(e -> StrUtil.isNotBlank(e.getFundId()))
|
|
|
|
+ .map(e -> BeanUtil.copyProperties(e, AssetDO.class)).collect(Collectors.toList());
|
|
|
|
+ saveAssetDo(assetDOList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void saveNavDo(List<NavDO> navDOList) {
|
|
|
|
+ if (CollUtil.isEmpty(navDOList)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ Map<String, List<NavDO>> fundIdNavMap = navDOList.stream().collect(Collectors.groupingBy(NavDO::getFundId));
|
|
|
|
+ for (Map.Entry<String, List<NavDO>> entry : fundIdNavMap.entrySet()) {
|
|
|
|
+ List<NavDO> navDOS = entry.getValue();
|
|
|
|
+ List<String> priceDateList = navDOS.stream().map(NavDO::getPriceDate).map(e -> DateUtil.format(e, DateConst.YYYY_MM_DD)).collect(Collectors.toList());
|
|
|
|
+ List<String> dateList = navMapper.queryFundNavByDate(entry.getKey(), priceDateList);
|
|
|
|
+ List<NavDO> updateNavDoList = navDOS.stream().filter(e -> dateList.contains(DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD))).collect(Collectors.toList());
|
|
|
|
+ List<NavDO> insertNavDoList = navDOS.stream().filter(e -> !dateList.contains(DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD))).collect(Collectors.toList());
|
|
|
|
+ if(CollUtil.isNotEmpty(insertNavDoList)){
|
|
|
|
+ navMapper.batchInsert(insertNavDoList);
|
|
|
|
+ }
|
|
|
|
+ if(CollUtil.isNotEmpty(updateNavDoList)){
|
|
|
|
+ navMapper.batchUpdate(updateNavDoList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void saveAssetDo(List<AssetDO> assetDOList) {
|
|
|
|
+ if (CollUtil.isEmpty(assetDOList)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ Map<String, List<AssetDO>> fundIdNavMap = assetDOList.stream().collect(Collectors.groupingBy(AssetDO::getFundId));
|
|
|
|
+ for (Map.Entry<String, List<AssetDO>> entry : fundIdNavMap.entrySet()) {
|
|
|
|
+ List<AssetDO> assetDOS = entry.getValue();
|
|
|
|
+ List<String> priceDateList = assetDOS.stream().map(AssetDO::getPriceDate).map(e -> DateUtil.format(e, DateConst.YYYY_MM_DD)).collect(Collectors.toList());
|
|
|
|
+ List<String> dateList = assetMapper.queryFundNavByDate(entry.getKey(), priceDateList);
|
|
|
|
+ List<AssetDO> updateAssetDoList = assetDOS.stream().filter(e -> dateList.contains(DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD))).collect(Collectors.toList());
|
|
|
|
+ List<AssetDO> insertAssetDoList = assetDOS.stream().filter(e -> !dateList.contains(DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD))).collect(Collectors.toList());
|
|
|
|
+ if(CollUtil.isNotEmpty(insertAssetDoList)){
|
|
|
|
+ assetMapper.batchInsert(insertAssetDoList);
|
|
|
|
+ }
|
|
|
|
+ if(CollUtil.isNotEmpty(updateAssetDoList)){
|
|
|
|
+ assetMapper.batchUpdate(updateAssetDoList);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -218,6 +274,9 @@ public class EmailParseService {
|
|
Date priceDate = DateUtil.parse(fundNavDTO.getPriceDate(), DateConst.YYYY_MM_DD);
|
|
Date priceDate = DateUtil.parse(fundNavDTO.getPriceDate(), DateConst.YYYY_MM_DD);
|
|
BigDecimal nav = StrUtil.isNotBlank(fundNavDTO.getNav()) ? new BigDecimal(fundNavDTO.getNav()) : null;
|
|
BigDecimal nav = StrUtil.isNotBlank(fundNavDTO.getNav()) ? new BigDecimal(fundNavDTO.getNav()) : null;
|
|
BigDecimal cumulativeNavWithdrawal = StrUtil.isNotBlank(fundNavDTO.getCumulativeNavWithdrawal()) ? new BigDecimal(fundNavDTO.getCumulativeNavWithdrawal()) : null;
|
|
BigDecimal cumulativeNavWithdrawal = StrUtil.isNotBlank(fundNavDTO.getCumulativeNavWithdrawal()) ? new BigDecimal(fundNavDTO.getCumulativeNavWithdrawal()) : null;
|
|
|
|
+ if (nav == null && cumulativeNavWithdrawal == null) {
|
|
|
|
+ return CollUtil.newArrayList();
|
|
|
|
+ }
|
|
Integer isStored = fundNavDTO.getParseStatus() != null && !fundNavDTO.getParseStatus().equals(NavParseStatusConst.NAV_DEFICIENCY)
|
|
Integer isStored = fundNavDTO.getParseStatus() != null && !fundNavDTO.getParseStatus().equals(NavParseStatusConst.NAV_DEFICIENCY)
|
|
&& !fundNavDTO.getParseStatus().equals(NavParseStatusConst.NOT_MATCH) ? 1 : 0;
|
|
&& !fundNavDTO.getParseStatus().equals(NavParseStatusConst.NOT_MATCH) ? 1 : 0;
|
|
if (CollUtil.isNotEmpty(fundNavDTO.getFundIdList())) {
|
|
if (CollUtil.isNotEmpty(fundNavDTO.getFundIdList())) {
|
|
@@ -261,7 +320,8 @@ public class EmailParseService {
|
|
|
|
|
|
private Integer saveEmailFileInfo(Integer emailId, String fileName, String filePath, Date parseDate) {
|
|
private Integer saveEmailFileInfo(Integer emailId, String fileName, String filePath, Date parseDate) {
|
|
EmailFileInfoDO emailFileInfoDO = buildEmailFileInfoDO(emailId, fileName, filePath, parseDate);
|
|
EmailFileInfoDO emailFileInfoDO = buildEmailFileInfoDO(emailId, fileName, filePath, parseDate);
|
|
- return emailFileInfoMapper.insert(emailFileInfoDO);
|
|
|
|
|
|
+ emailFileInfoMapper.insert(emailFileInfoDO);
|
|
|
|
+ return emailFileInfoDO.getId();
|
|
}
|
|
}
|
|
|
|
|
|
private EmailFileInfoDO buildEmailFileInfoDO(Integer emailId, String fileName, String filePath, Date parseDate) {
|
|
private EmailFileInfoDO buildEmailFileInfoDO(Integer emailId, String fileName, String filePath, Date parseDate) {
|
|
@@ -277,11 +337,10 @@ public class EmailParseService {
|
|
return emailFileInfoDO;
|
|
return emailFileInfoDO;
|
|
}
|
|
}
|
|
|
|
|
|
- private void setNavParseStatus(EmailFundNavDTO fundNavDTO, String emailTitle, String emailDate) {
|
|
|
|
- Integer navParseStatus = getDataParseStatus(fundNavDTO);
|
|
|
|
- fundNavDTO.setParseStatus(navParseStatus);
|
|
|
|
- if (navParseStatus.equals(NavParseStatusConst.NAV_DEFICIENCY)) {
|
|
|
|
- log.info("判断数据的解析状态 -> 邮件主题:{},邮件日期:{},数据解析状态:{}", emailTitle, emailDate, fundNavDTO.getParseStatus());
|
|
|
|
|
|
+ private void setNavParseStatus(EmailFundNavDTO fundNavDTO, String emailTitle) {
|
|
|
|
+ // 1.单位净值或累计净值缺失
|
|
|
|
+ if (StrUtil.isBlank(fundNavDTO.getNav()) || StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal())) {
|
|
|
|
+ fundNavDTO.setParseStatus(NavParseStatusConst.NAV_DEFICIENCY);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
// 2.匹配基金
|
|
// 2.匹配基金
|
|
@@ -289,13 +348,27 @@ public class EmailParseService {
|
|
if (CollUtil.isEmpty(fundIdList)) {
|
|
if (CollUtil.isEmpty(fundIdList)) {
|
|
fundNavDTO.setParseStatus(NavParseStatusConst.NOT_MATCH);
|
|
fundNavDTO.setParseStatus(NavParseStatusConst.NOT_MATCH);
|
|
}
|
|
}
|
|
- log.info("判断数据的解析状态 -> 邮件主题:{},邮件日期:{},数据解析状态:{}", emailTitle, emailDate, fundNavDTO.getParseStatus());
|
|
|
|
fundNavDTO.setFundIdList(fundIdList);
|
|
fundNavDTO.setFundIdList(fundIdList);
|
|
|
|
+ // 考虑单独规模文件时 -> 无单位净值和累计净值
|
|
|
|
+ // 3.单位净值或累计净值不大于0
|
|
|
|
+ if (!emailTitle.contains("规模")) {
|
|
|
|
+ if (StrUtil.isBlank(fundNavDTO.getNav()) || StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal())
|
|
|
|
+ || (fundNavDTO.getNav().compareTo("0") <= 0 || fundNavDTO.getCumulativeNavWithdrawal().compareTo("0") <= 0)) {
|
|
|
|
+ fundNavDTO.setParseStatus(NavParseStatusConst.NAV_NEGATIVE);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 4.资产净值不大于0
|
|
|
|
+ if (StrUtil.isNotBlank(fundNavDTO.getAssetNet()) && fundNavDTO.getAssetNet().compareTo("0") <= 0) {
|
|
|
|
+ fundNavDTO.setParseStatus(NavParseStatusConst.ASSET_NET_NEGATIVE);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ fundNavDTO.setParseStatus(NavParseStatusConst.SUCCESS);
|
|
}
|
|
}
|
|
|
|
|
|
private List<String> matchFund(String fundName, String registerNumber) {
|
|
private List<String> matchFund(String fundName, String registerNumber) {
|
|
// 1.基金名称 + 备案编码 一起进行匹配
|
|
// 1.基金名称 + 备案编码 一起进行匹配
|
|
- List<String> fundIdList = fundInfomationMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
|
|
|
|
|
|
+ List<String> fundIdList = fundInfoMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
|
|
if (CollUtil.isNotEmpty(fundIdList)) {
|
|
if (CollUtil.isNotEmpty(fundIdList)) {
|
|
return fundIdList;
|
|
return fundIdList;
|
|
}
|
|
}
|
|
@@ -305,7 +378,7 @@ public class EmailParseService {
|
|
}
|
|
}
|
|
// 2.基金名称匹配
|
|
// 2.基金名称匹配
|
|
if (StrUtil.isNotBlank(fundName)) {
|
|
if (StrUtil.isNotBlank(fundName)) {
|
|
- List<String> fundIds = fundInfomationMapper.queryFundByName(fundName);
|
|
|
|
|
|
+ List<String> fundIds = fundInfoMapper.queryFundByName(fundName);
|
|
if (CollUtil.isNotEmpty(fundIds)) {
|
|
if (CollUtil.isNotEmpty(fundIds)) {
|
|
return fundIdList;
|
|
return fundIdList;
|
|
}
|
|
}
|
|
@@ -316,7 +389,7 @@ public class EmailParseService {
|
|
}
|
|
}
|
|
// 3.备案编码匹配
|
|
// 3.备案编码匹配
|
|
if (StrUtil.isNotBlank(fundName)) {
|
|
if (StrUtil.isNotBlank(fundName)) {
|
|
- List<String> fundIds = fundInfomationMapper.queryFundByRegisterNumber(registerNumber);
|
|
|
|
|
|
+ List<String> fundIds = fundInfoMapper.queryFundByRegisterNumber(registerNumber);
|
|
if (CollUtil.isNotEmpty(fundIds)) {
|
|
if (CollUtil.isNotEmpty(fundIds)) {
|
|
return fundIds;
|
|
return fundIds;
|
|
}
|
|
}
|
|
@@ -332,7 +405,8 @@ public class EmailParseService {
|
|
if (emailParseInfoDO == null) {
|
|
if (emailParseInfoDO == null) {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
- return emailParseInfoMapper.insert(emailParseInfoDO);
|
|
|
|
|
|
+ emailParseInfoMapper.insert(emailParseInfoDO);
|
|
|
|
+ return emailParseInfoDO.getId();
|
|
}
|
|
}
|
|
|
|
|
|
private EmailParseInfoDO buildEmailParseInfo(String emailAddress, String emailDate, String emailTitle, Integer emailType, Integer parseStatus, Date parseDate) {
|
|
private EmailParseInfoDO buildEmailParseInfo(String emailAddress, String emailDate, String emailTitle, Integer emailType, Integer parseStatus, Date parseDate) {
|
|
@@ -351,22 +425,6 @@ public class EmailParseService {
|
|
return emailParseInfoDO;
|
|
return emailParseInfoDO;
|
|
}
|
|
}
|
|
|
|
|
|
- private Integer getDataParseStatus(EmailFundNavDTO fundNavDTO) {
|
|
|
|
- // 1.单位净值或累计净值缺失
|
|
|
|
- if (StrUtil.isBlank(fundNavDTO.getNav()) || StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal())) {
|
|
|
|
- return NavParseStatusConst.NAV_DEFICIENCY;
|
|
|
|
- }
|
|
|
|
- // 3.单位净值或累计净值不大于0
|
|
|
|
- if (fundNavDTO.getNav().compareTo("0") <= 0 || fundNavDTO.getCumulativeNavWithdrawal().compareTo("0") <= 0) {
|
|
|
|
- return NavParseStatusConst.NAV_NEGATIVE;
|
|
|
|
- }
|
|
|
|
- // 4.资产净值不大于0
|
|
|
|
- if (StrUtil.isNotBlank(fundNavDTO.getAssetNet()) && fundNavDTO.getAssetNet().compareTo("0") <= 0) {
|
|
|
|
- return NavParseStatusConst.ASSET_NET_NEGATIVE;
|
|
|
|
- }
|
|
|
|
- return NavParseStatusConst.SUCCESS;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public Map<String, List<String>> getEmailFieldMapping() {
|
|
public Map<String, List<String>> getEmailFieldMapping() {
|
|
List<EmailFieldMappingDO> emailFieldMappingDOList = emailFieldMapper.getEmailFieldMapping();
|
|
List<EmailFieldMappingDO> emailFieldMappingDOList = emailFieldMapper.getEmailFieldMapping();
|
|
return emailFieldMappingDOList.stream()
|
|
return emailFieldMappingDOList.stream()
|
|
@@ -406,7 +464,6 @@ public class EmailParseService {
|
|
// 获取邮件日期大于等于startDate的邮件(搜索条件只支持按天)
|
|
// 获取邮件日期大于等于startDate的邮件(搜索条件只支持按天)
|
|
SearchTerm startDateTerm = new ReceivedDateTerm(ComparisonTerm.GE, startDate);
|
|
SearchTerm startDateTerm = new ReceivedDateTerm(ComparisonTerm.GE, startDate);
|
|
Message[] messages = folder.search(startDateTerm);
|
|
Message[] messages = folder.search(startDateTerm);
|
|
- String path = "/data/file/nav";
|
|
|
|
Map<String, List<EmailContentInfoDTO>> emailMessageMap = MapUtil.newHashMap();
|
|
Map<String, List<EmailContentInfoDTO>> emailMessageMap = MapUtil.newHashMap();
|
|
for (Message message : messages) {
|
|
for (Message message : messages) {
|
|
List<EmailContentInfoDTO> emailContentInfoDTOList = CollUtil.newArrayList();
|
|
List<EmailContentInfoDTO> emailContentInfoDTOList = CollUtil.newArrayList();
|
|
@@ -437,8 +494,8 @@ public class EmailParseService {
|
|
emailContentInfoDTO.setEmailContent(content.toString());
|
|
emailContentInfoDTO.setEmailContent(content.toString());
|
|
emailContentInfoDTO.setEmailDate(emailDateStr);
|
|
emailContentInfoDTO.setEmailDate(emailDateStr);
|
|
String fileName = message.getSubject() + DateUtil.format(emailDate, DateConst.YYYYMMDDHHMMSS24);
|
|
String fileName = message.getSubject() + DateUtil.format(emailDate, DateConst.YYYYMMDDHHMMSS24);
|
|
- String filePath = path + mailboxInfoDTO.getAccount() + "/" + fileName + ".html";
|
|
|
|
- File savefile = new File(path + filePath);
|
|
|
|
|
|
+ String filePath = path + mailboxInfoDTO.getAccount() + "/" + DateUtil.format(emailDate, DateConst.YYYY_MM_DD) + "/" + fileName + ".html";
|
|
|
|
+ File savefile = new File(filePath);
|
|
savefile.setReadable(true);
|
|
savefile.setReadable(true);
|
|
if (!savefile.exists()) {
|
|
if (!savefile.exists()) {
|
|
if (!savefile.getParentFile().exists()) {
|
|
if (!savefile.getParentFile().exists()) {
|