|
@@ -12,6 +12,7 @@ import com.simuwang.base.common.conts.*;
|
|
import com.simuwang.base.common.enums.ReportParserFileType;
|
|
import com.simuwang.base.common.enums.ReportParserFileType;
|
|
import com.simuwang.base.common.enums.ReportType;
|
|
import com.simuwang.base.common.enums.ReportType;
|
|
import com.simuwang.base.common.util.EmailUtil;
|
|
import com.simuwang.base.common.util.EmailUtil;
|
|
|
|
+import com.simuwang.base.common.util.ExcelUtil;
|
|
import com.simuwang.base.common.util.FileUtil;
|
|
import com.simuwang.base.common.util.FileUtil;
|
|
import com.simuwang.base.config.DaqProperties;
|
|
import com.simuwang.base.config.DaqProperties;
|
|
import com.simuwang.base.config.EmailRuleConfig;
|
|
import com.simuwang.base.config.EmailRuleConfig;
|
|
@@ -28,6 +29,7 @@ import com.simuwang.daq.components.report.parser.ReportParserFactory;
|
|
import com.simuwang.daq.components.report.writer.ReportWriter;
|
|
import com.simuwang.daq.components.report.writer.ReportWriter;
|
|
import com.simuwang.daq.components.report.writer.ReportWriterFactory;
|
|
import com.simuwang.daq.components.report.writer.ReportWriterFactory;
|
|
import jakarta.mail.*;
|
|
import jakarta.mail.*;
|
|
|
|
+import jakarta.mail.internet.MimeMessage;
|
|
import jakarta.mail.internet.MimeMultipart;
|
|
import jakarta.mail.internet.MimeMultipart;
|
|
import jakarta.mail.search.ComparisonTerm;
|
|
import jakarta.mail.search.ComparisonTerm;
|
|
import jakarta.mail.search.ReceivedDateTerm;
|
|
import jakarta.mail.search.ReceivedDateTerm;
|
|
@@ -130,6 +132,10 @@ public class EmailParseService {
|
|
log.info("采集邮件失败 -> 邮箱配置信息:{},堆栈信息:{}", mailboxInfoDTO, ExceptionUtil.stacktraceToString(e));
|
|
log.info("采集邮件失败 -> 邮箱配置信息:{},堆栈信息:{}", mailboxInfoDTO, ExceptionUtil.stacktraceToString(e));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+ if (MapUtil.isEmpty(emailContentMap)) {
|
|
|
|
+ log.info("未采集到邮件 -> 邮箱配置信息:{},开始时间:{},结束时间:{}", mailboxInfoDTO, DateUtil.format(startDate, DateConst.YYYY_MM_DD_HH_MM_SS), DateUtil.format(endDate, DateConst.YYYY_MM_DD_HH_MM_SS));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
for (Map.Entry<String, List<EmailContentInfoDTO>> emailEntry : emailContentMap.entrySet()) {
|
|
for (Map.Entry<String, List<EmailContentInfoDTO>> emailEntry : emailContentMap.entrySet()) {
|
|
List<EmailContentInfoDTO> emailContentInfoDTOList = emailEntry.getValue();
|
|
List<EmailContentInfoDTO> emailContentInfoDTOList = emailEntry.getValue();
|
|
if (CollUtil.isEmpty(emailContentInfoDTOList)) {
|
|
if (CollUtil.isEmpty(emailContentInfoDTOList)) {
|
|
@@ -217,6 +223,7 @@ public class EmailParseService {
|
|
if (CollUtil.isEmpty(fundNavDTOList)) {
|
|
if (CollUtil.isEmpty(fundNavDTOList)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+ valuationTableMapper.unValid(fileId);
|
|
for (EmailFundNavDTO fundNavDTO : fundNavDTOList) {
|
|
for (EmailFundNavDTO fundNavDTO : fundNavDTOList) {
|
|
ValuationTableDO valuationTableDO = fundNavDTO.getValuationTableDO();
|
|
ValuationTableDO valuationTableDO = fundNavDTO.getValuationTableDO();
|
|
if (valuationTableDO == null) {
|
|
if (valuationTableDO == null) {
|
|
@@ -228,21 +235,24 @@ public class EmailParseService {
|
|
List<FundPositionDetailDO> fundPositionDetailDOList = fundNavDTO.getFundPositionDetailDOList();
|
|
List<FundPositionDetailDO> fundPositionDetailDOList = fundNavDTO.getFundPositionDetailDOList();
|
|
List<CmValuationTableAttribute> valuationTableAttributeList = fundNavDTO.getValuationTableAttributeList();
|
|
List<CmValuationTableAttribute> valuationTableAttributeList = fundNavDTO.getValuationTableAttributeList();
|
|
if (CollUtil.isEmpty(fundIdList)) {
|
|
if (CollUtil.isEmpty(fundIdList)) {
|
|
- int valuationId = valuationTableMapper.insert(valuationTableDO);
|
|
|
|
|
|
+ valuationTableMapper.insert(valuationTableDO);
|
|
|
|
+ int valuationId = valuationTableDO.getId();
|
|
saveValuationTableAttribute(valuationId, valuationTableAttributeList);
|
|
saveValuationTableAttribute(valuationId, valuationTableAttributeList);
|
|
fundPositionDetailDOList.forEach(e -> e.setValuationId(valuationId));
|
|
fundPositionDetailDOList.forEach(e -> e.setValuationId(valuationId));
|
|
- saveFundPositionDetail(fundPositionDetailDOList, null, fundNavDTO.getPriceDate());
|
|
|
|
|
|
+ // 不匹配基金的情况下 -> 不写fund_position_detail
|
|
|
|
+ // saveFundPositionDetail(fundPositionDetailDOList, null, fundNavDTO.getPriceDate());
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
for (String fundId : fundIdList) {
|
|
for (String fundId : fundIdList) {
|
|
valuationTableDO.setFundId(fundId);
|
|
valuationTableDO.setFundId(fundId);
|
|
- int valuationId = valuationTableMapper.insert(valuationTableDO);
|
|
|
|
|
|
+ valuationTableMapper.insert(valuationTableDO);
|
|
|
|
+ int valuationId = valuationTableDO.getId();
|
|
fundPositionDetailDOList.forEach(e -> {
|
|
fundPositionDetailDOList.forEach(e -> {
|
|
e.setFundId(fundId);
|
|
e.setFundId(fundId);
|
|
e.setValuationId(valuationId);
|
|
e.setValuationId(valuationId);
|
|
});
|
|
});
|
|
saveValuationTableAttribute(valuationId, valuationTableAttributeList);
|
|
saveValuationTableAttribute(valuationId, valuationTableAttributeList);
|
|
- saveFundPositionDetail(fundPositionDetailDOList, null, fundNavDTO.getPriceDate());
|
|
|
|
|
|
+ saveFundPositionDetail(fundPositionDetailDOList, fundId, fundNavDTO.getPriceDate());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -545,9 +555,6 @@ 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())) {
|
|
@@ -778,7 +785,8 @@ public class EmailParseService {
|
|
return MapUtil.newHashMap();
|
|
return MapUtil.newHashMap();
|
|
}
|
|
}
|
|
Map<String, List<EmailContentInfoDTO>> emailMessageMap = MapUtil.newHashMap();
|
|
Map<String, List<EmailContentInfoDTO>> emailMessageMap = MapUtil.newHashMap();
|
|
- for (Message message : messages) {
|
|
|
|
|
|
+ for (Message message1 : messages) {
|
|
|
|
+ MimeMessage message = (MimeMessage) message1;
|
|
List<EmailContentInfoDTO> emailContentInfoDTOList = CollUtil.newArrayList();
|
|
List<EmailContentInfoDTO> emailContentInfoDTOList = CollUtil.newArrayList();
|
|
String uuidKey = UUID.randomUUID().toString().replaceAll("-", "");
|
|
String uuidKey = UUID.randomUUID().toString().replaceAll("-", "");
|
|
Integer emailType;
|
|
Integer emailType;
|
|
@@ -824,6 +832,10 @@ public class EmailParseService {
|
|
emailContentInfoDTOList.add(emailContentInfoDTO);
|
|
emailContentInfoDTOList.add(emailContentInfoDTO);
|
|
}
|
|
}
|
|
if (CollUtil.isNotEmpty(emailContentInfoDTOList)) {
|
|
if (CollUtil.isNotEmpty(emailContentInfoDTOList)) {
|
|
|
|
+ // 估值表邮件不展示正文html文件
|
|
|
|
+ if (emailType.equals(EmailTypeConst.VALUATION_EMAIL_TYPE)) {
|
|
|
|
+ emailContentInfoDTOList = emailContentInfoDTOList.stream().filter(e -> !ExcelUtil.isHTML(e.getFilePath())).toList();
|
|
|
|
+ }
|
|
emailContentInfoDTOList.forEach(e -> {
|
|
emailContentInfoDTOList.forEach(e -> {
|
|
e.setEmailType(emailType);
|
|
e.setEmailType(emailType);
|
|
e.setSenderEmail(senderEmail);
|
|
e.setSenderEmail(senderEmail);
|