|
@@ -6,14 +6,14 @@ import cn.hutool.core.exceptions.ExceptionUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.simuwang.base.common.conts.DateConst;
|
|
|
+import com.simuwang.base.common.conts.EmailParseStatusConst;
|
|
|
+import com.simuwang.base.common.conts.NavParseStatusConst;
|
|
|
import com.simuwang.base.common.conts.EmailTypeConst;
|
|
|
import com.simuwang.base.common.util.EmailUtil;
|
|
|
import com.simuwang.base.common.util.FileUtil;
|
|
|
import com.simuwang.base.config.EmailRuleConfig;
|
|
|
-import com.simuwang.base.mapper.EmailFieldMappingMapper;
|
|
|
-import com.simuwang.base.mapper.EmailTypeRuleMapper;
|
|
|
-import com.simuwang.base.pojo.dos.EmailFieldMappingDO;
|
|
|
-import com.simuwang.base.pojo.dos.EmailTypeRuleDO;
|
|
|
+import com.simuwang.base.mapper.*;
|
|
|
+import com.simuwang.base.pojo.dos.*;
|
|
|
import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
|
import com.simuwang.base.pojo.dto.EmailFundNavDTO;
|
|
|
import com.simuwang.base.pojo.dto.MailboxInfoDTO;
|
|
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.io.File;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -46,13 +47,28 @@ public class EmailParseService {
|
|
|
private final EmailRuleConfig emailRuleConfig;
|
|
|
private final EmailFieldMappingMapper emailFieldMapper;
|
|
|
private final EmailParserFactory emailParserFactory;
|
|
|
+ private final EmailParseInfoMapper emailParseInfoMapper;
|
|
|
+ private final FundInfomationMapper fundInfomationMapper;
|
|
|
+ private final EmailFileInfoMapper emailFileInfoMapper;
|
|
|
+ private final EmailFundNavMapper emailFundNavMapper;
|
|
|
+ private final EmailFundAssetMapper emailFundAssetMapper;
|
|
|
+ private final FundAliasMapper fundAliasMapper;
|
|
|
|
|
|
public EmailParseService(EmailTypeRuleMapper emailTypeRuleMapper, EmailRuleConfig emailRuleConfig,
|
|
|
- EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory) {
|
|
|
+ EmailFieldMappingMapper emailFieldMapper, EmailParserFactory emailParserFactory,
|
|
|
+ EmailParseInfoMapper emailParseInfoMapper, FundInfomationMapper fundInfomationMapper,
|
|
|
+ EmailFileInfoMapper emailFileInfoMapper, EmailFundNavMapper emailFundNavMapper,
|
|
|
+ EmailFundAssetMapper emailFundAssetMapper, FundAliasMapper fundAliasMapper) {
|
|
|
this.emailTypeRuleMapper = emailTypeRuleMapper;
|
|
|
this.emailRuleConfig = emailRuleConfig;
|
|
|
this.emailFieldMapper = emailFieldMapper;
|
|
|
this.emailParserFactory = emailParserFactory;
|
|
|
+ this.emailParseInfoMapper = emailParseInfoMapper;
|
|
|
+ this.fundInfomationMapper = fundInfomationMapper;
|
|
|
+ this.emailFileInfoMapper = emailFileInfoMapper;
|
|
|
+ this.emailFundNavMapper = emailFundNavMapper;
|
|
|
+ this.emailFundAssetMapper = emailFundAssetMapper;
|
|
|
+ this.fundAliasMapper = fundAliasMapper;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -78,22 +94,22 @@ public class EmailParseService {
|
|
|
List<EmailContentInfoDTO> emailContentInfoDTOList = emailEntry.getValue();
|
|
|
if (CollUtil.isEmpty(emailContentInfoDTOList)) {
|
|
|
log.warn("未采集到正文或附件");
|
|
|
+ continue;
|
|
|
}
|
|
|
+ log.info("开始解析邮件数据 -> 邮件主题:{},邮件日期:{}", emailContentInfoDTOList.get(0).getEmailTitle(), emailContentInfoDTOList.get(0).getEmailDate());
|
|
|
List<EmailFundNavDTO> emailFundNavDTOList = CollUtil.newArrayList();
|
|
|
+ Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap = MapUtil.newHashMap();
|
|
|
for (EmailContentInfoDTO emailContentInfoDTO : emailContentInfoDTOList) {
|
|
|
try {
|
|
|
List<EmailFundNavDTO> fundNavDTOList = parseEmail(emailContentInfoDTO, emailFieldMap);
|
|
|
+ fileNameNavMap.put(emailContentInfoDTO, fundNavDTOList);
|
|
|
emailFundNavDTOList.addAll(fundNavDTOList);
|
|
|
} catch (Exception e) {
|
|
|
log.error("堆栈信息:{}", ExceptionUtil.stacktraceToString(e));
|
|
|
}
|
|
|
}
|
|
|
- if (CollUtil.isEmpty(emailFundNavDTOList)) {
|
|
|
- log.warn("未解析到净值 -> 邮件主题:{},邮件日期:{}", emailContentInfoDTOList.get(0).getEmailTitle(), emailContentInfoDTOList.get(0).getEmailDate());
|
|
|
- continue;
|
|
|
- }
|
|
|
- // todo 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
|
|
|
-
|
|
|
+ // 保存相关信息 -> 邮件信息表,邮件文件表,邮件净值表,邮件规模表,基金净值表
|
|
|
+ saveRelatedTable(mailboxInfoDTO.getAccount(), emailContentInfoDTOList, fileNameNavMap);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -103,6 +119,254 @@ public class EmailParseService {
|
|
|
return emailParser.parse(emailContentInfoDTO, emailFieldMap);
|
|
|
}
|
|
|
|
|
|
+ private void saveRelatedTable(String emailAddress, List<EmailContentInfoDTO> emailContentInfoDTOList, Map<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavMap) {
|
|
|
+ String emailTitle = CollUtil.isNotEmpty(emailContentInfoDTOList) ? emailContentInfoDTOList.get(0).getEmailTitle() : null;
|
|
|
+ String emailDate = CollUtil.isNotEmpty(emailContentInfoDTOList) ? emailContentInfoDTOList.get(0).getEmailDate() : null;
|
|
|
+ Integer emailType = CollUtil.isNotEmpty(emailContentInfoDTOList) ? emailContentInfoDTOList.get(0).getEmailType() : null;
|
|
|
+
|
|
|
+ Date parseDate = new Date();
|
|
|
+ int emailParseStatus = EmailParseStatusConst.SUCCESS;
|
|
|
+ EmailParseInfoDO emailParseInfoDO = buildEmailParseInfo(emailAddress, emailDate, emailTitle, emailType, emailParseStatus, parseDate);
|
|
|
+ Integer emailId = saveEmailParseInfo(emailParseInfoDO);
|
|
|
+
|
|
|
+ for (Map.Entry<EmailContentInfoDTO, List<EmailFundNavDTO>> fileNameNavEntry : fileNameNavMap.entrySet()) {
|
|
|
+ // 保存邮件文件表
|
|
|
+ EmailContentInfoDTO emailContentInfoDTO = fileNameNavEntry.getKey();
|
|
|
+ Integer fileId = saveEmailFileInfo(emailId, emailContentInfoDTO.getFileName(), emailContentInfoDTO.getFilePath(), parseDate);
|
|
|
+
|
|
|
+ List<EmailFundNavDTO> fundNavDTOList = fileNameNavEntry.getValue();
|
|
|
+ if (CollUtil.isEmpty(fundNavDTOList)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (EmailFundNavDTO fundNavDTO : fundNavDTOList) {
|
|
|
+ // 设置净值数据的解析状态
|
|
|
+ setNavParseStatus(fundNavDTO, emailTitle, emailDate);
|
|
|
+ }
|
|
|
+ // 保存净值表和规模表
|
|
|
+ saveNavAndAssetNet(fileId, fundNavDTOList, parseDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新邮件解析结果 -> 存在一条成功解析的净值数据就认为解析成功
|
|
|
+ long successNavCount = fileNameNavMap.values().stream().flatMap(List::stream).filter(e -> e.getParseStatus().equals(NavParseStatusConst.SUCCESS)).count();
|
|
|
+ emailParseStatus = successNavCount >= 1 ? EmailParseStatusConst.SUCCESS : EmailParseStatusConst.FAIL;
|
|
|
+ emailParseInfoMapper.updateParseStatus(emailId, emailParseStatus);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveNavAndAssetNet(Integer fileId, List<EmailFundNavDTO> fundNavDTOList, Date parseDate) {
|
|
|
+ if (CollUtil.isEmpty(fundNavDTOList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 净值数据
|
|
|
+ List<EmailFundNavDO> emailFundNavDOList = fundNavDTOList.stream()
|
|
|
+ .map(e -> buildEmailFundNavDo(fileId, e, parseDate)).flatMap(List::stream).collect(Collectors.toList());
|
|
|
+ if (CollUtil.isNotEmpty(emailFundNavDOList)) {
|
|
|
+ emailFundNavMapper.batchInsert(emailFundNavDOList);
|
|
|
+ }
|
|
|
+ // 保存规模数据
|
|
|
+ List<EmailFundAssetDO> emailFundAssetDOList = fundNavDTOList.stream()
|
|
|
+ .map(e -> buildEmailFundAssetDo(fileId, e, parseDate)).flatMap(List::stream).collect(Collectors.toList());
|
|
|
+ if (CollUtil.isNotEmpty(emailFundAssetDOList)) {
|
|
|
+ emailFundAssetMapper.batchInsert(emailFundAssetDOList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<EmailFundAssetDO> buildEmailFundAssetDo(Integer fileId, EmailFundNavDTO fundNavDTO, Date parseDate) {
|
|
|
+ List<EmailFundAssetDO> fundAssetDOList = CollUtil.newArrayList();
|
|
|
+ BigDecimal assetNet = StrUtil.isNotBlank(fundNavDTO.getAssetNet()) ? new BigDecimal(fundNavDTO.getAssetNet()) : null;
|
|
|
+ BigDecimal assetShare = StrUtil.isNotBlank(fundNavDTO.getAssetShare()) ? new BigDecimal(fundNavDTO.getAssetShare()) : null;
|
|
|
+ if (assetNet == null) {
|
|
|
+ return fundAssetDOList;
|
|
|
+ }
|
|
|
+ Date priceDate = DateUtil.parse(fundNavDTO.getPriceDate(), DateConst.YYYY_MM_DD);
|
|
|
+ if (CollUtil.isNotEmpty(fundNavDTO.getFundIdList())) {
|
|
|
+ for (String fundId : fundNavDTO.getFundIdList()) {
|
|
|
+ EmailFundAssetDO emailFundAssetDO = new EmailFundAssetDO();
|
|
|
+ emailFundAssetDO.setFileId(fileId);
|
|
|
+ emailFundAssetDO.setPriceDate(priceDate);
|
|
|
+ emailFundAssetDO.setFundId(fundId);
|
|
|
+ emailFundAssetDO.setFundName(fundNavDTO.getFundName());
|
|
|
+ emailFundAssetDO.setRegisterNumber(fundNavDTO.getRegisterNumber());
|
|
|
+ emailFundAssetDO.setAssetNet(assetNet);
|
|
|
+ emailFundAssetDO.setAssetShare(assetShare);
|
|
|
+ emailFundAssetDO.setIsvalid(1);
|
|
|
+ emailFundAssetDO.setCreatorId(0);
|
|
|
+ emailFundAssetDO.setCreateTime(parseDate);
|
|
|
+ emailFundAssetDO.setUpdaterId(0);
|
|
|
+ emailFundAssetDO.setUpdateTime(parseDate);
|
|
|
+ fundAssetDOList.add(emailFundAssetDO);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ EmailFundAssetDO emailFundAssetDO = new EmailFundAssetDO();
|
|
|
+ emailFundAssetDO.setFileId(fileId);
|
|
|
+ emailFundAssetDO.setPriceDate(priceDate);
|
|
|
+ emailFundAssetDO.setFundName(fundNavDTO.getFundName());
|
|
|
+ emailFundAssetDO.setRegisterNumber(fundNavDTO.getRegisterNumber());
|
|
|
+ emailFundAssetDO.setAssetNet(assetNet);
|
|
|
+ emailFundAssetDO.setAssetShare(assetShare);
|
|
|
+ emailFundAssetDO.setIsvalid(1);
|
|
|
+ emailFundAssetDO.setCreatorId(0);
|
|
|
+ emailFundAssetDO.setCreateTime(parseDate);
|
|
|
+ emailFundAssetDO.setUpdaterId(0);
|
|
|
+ emailFundAssetDO.setUpdateTime(parseDate);
|
|
|
+ fundAssetDOList.add(emailFundAssetDO);
|
|
|
+ }
|
|
|
+ return fundAssetDOList;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<EmailFundNavDO> buildEmailFundNavDo(Integer fileId, EmailFundNavDTO fundNavDTO, Date parseDate) {
|
|
|
+ List<EmailFundNavDO> fundNavDOList = CollUtil.newArrayList();
|
|
|
+ Date priceDate = DateUtil.parse(fundNavDTO.getPriceDate(), DateConst.YYYY_MM_DD);
|
|
|
+ BigDecimal nav = StrUtil.isNotBlank(fundNavDTO.getNav()) ? new BigDecimal(fundNavDTO.getNav()) : null;
|
|
|
+ BigDecimal cumulativeNavWithdrawal = StrUtil.isNotBlank(fundNavDTO.getCumulativeNavWithdrawal()) ? new BigDecimal(fundNavDTO.getCumulativeNavWithdrawal()) : null;
|
|
|
+ Integer isStored = fundNavDTO.getParseStatus() != null && !fundNavDTO.getParseStatus().equals(NavParseStatusConst.NAV_DEFICIENCY)
|
|
|
+ && !fundNavDTO.getParseStatus().equals(NavParseStatusConst.NOT_MATCH) ? 1 : 0;
|
|
|
+ if (CollUtil.isNotEmpty(fundNavDTO.getFundIdList())) {
|
|
|
+ for (String fundId : fundNavDTO.getFundIdList()) {
|
|
|
+ EmailFundNavDO emailFundNavDO = new EmailFundNavDO();
|
|
|
+ emailFundNavDO.setFileId(fileId);
|
|
|
+ emailFundNavDO.setIsStored(isStored);
|
|
|
+ emailFundNavDO.setPriceDate(priceDate);
|
|
|
+ emailFundNavDO.setNav(nav);
|
|
|
+ emailFundNavDO.setFundId(fundId);
|
|
|
+ emailFundNavDO.setCumulativeNavWithdrawal(cumulativeNavWithdrawal);
|
|
|
+ emailFundNavDO.setFundName(fundNavDTO.getFundName());
|
|
|
+ emailFundNavDO.setRegisterNumber(fundNavDTO.getRegisterNumber());
|
|
|
+ emailFundNavDO.setExceptionStatus(fundNavDTO.getParseStatus());
|
|
|
+ emailFundNavDO.setIsvalid(1);
|
|
|
+ emailFundNavDO.setCreatorId(0);
|
|
|
+ emailFundNavDO.setCreateTime(parseDate);
|
|
|
+ emailFundNavDO.setUpdaterId(0);
|
|
|
+ emailFundNavDO.setUpdateTime(parseDate);
|
|
|
+ fundNavDOList.add(emailFundNavDO);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ EmailFundNavDO emailFundNavDO = new EmailFundNavDO();
|
|
|
+ emailFundNavDO.setFileId(fileId);
|
|
|
+ emailFundNavDO.setPriceDate(priceDate);
|
|
|
+ emailFundNavDO.setNav(nav);
|
|
|
+ emailFundNavDO.setCumulativeNavWithdrawal(cumulativeNavWithdrawal);
|
|
|
+ emailFundNavDO.setFundName(fundNavDTO.getFundName());
|
|
|
+ emailFundNavDO.setRegisterNumber(fundNavDTO.getRegisterNumber());
|
|
|
+ emailFundNavDO.setExceptionStatus(fundNavDTO.getParseStatus());
|
|
|
+ emailFundNavDO.setIsStored(isStored);
|
|
|
+ emailFundNavDO.setIsvalid(1);
|
|
|
+ emailFundNavDO.setCreatorId(0);
|
|
|
+ emailFundNavDO.setCreateTime(parseDate);
|
|
|
+ emailFundNavDO.setUpdaterId(0);
|
|
|
+ emailFundNavDO.setUpdateTime(parseDate);
|
|
|
+ fundNavDOList.add(emailFundNavDO);
|
|
|
+ }
|
|
|
+ return fundNavDOList;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Integer saveEmailFileInfo(Integer emailId, String fileName, String filePath, Date parseDate) {
|
|
|
+ EmailFileInfoDO emailFileInfoDO = buildEmailFileInfoDO(emailId, fileName, filePath, parseDate);
|
|
|
+ return emailFileInfoMapper.insert(emailFileInfoDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ private EmailFileInfoDO buildEmailFileInfoDO(Integer emailId, String fileName, String filePath, Date parseDate) {
|
|
|
+ EmailFileInfoDO emailFileInfoDO = new EmailFileInfoDO();
|
|
|
+ emailFileInfoDO.setEmailId(emailId);
|
|
|
+ emailFileInfoDO.setFileName(fileName);
|
|
|
+ emailFileInfoDO.setFilePath(filePath);
|
|
|
+ emailFileInfoDO.setIsvalid(1);
|
|
|
+ emailFileInfoDO.setCreatorId(0);
|
|
|
+ emailFileInfoDO.setCreateTime(parseDate);
|
|
|
+ emailFileInfoDO.setUpdaterId(0);
|
|
|
+ emailFileInfoDO.setUpdateTime(parseDate);
|
|
|
+ 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());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 2.匹配基金
|
|
|
+ List<String> fundIdList = matchFund(fundNavDTO.getFundName(), fundNavDTO.getRegisterNumber());
|
|
|
+ if (CollUtil.isEmpty(fundIdList)) {
|
|
|
+ fundNavDTO.setParseStatus(NavParseStatusConst.NOT_MATCH);
|
|
|
+ }
|
|
|
+ log.info("判断数据的解析状态 -> 邮件主题:{},邮件日期:{},数据解析状态:{}", emailTitle, emailDate, fundNavDTO.getParseStatus());
|
|
|
+ fundNavDTO.setFundIdList(fundIdList);
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String> matchFund(String fundName, String registerNumber) {
|
|
|
+ // 1.基金名称 + 备案编码 一起进行匹配
|
|
|
+ List<String> fundIdList = fundInfomationMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
|
|
|
+ if (CollUtil.isNotEmpty(fundIdList)) {
|
|
|
+ return fundIdList;
|
|
|
+ }
|
|
|
+ fundIdList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
|
|
|
+ if (CollUtil.isNotEmpty(fundIdList)) {
|
|
|
+ return fundIdList;
|
|
|
+ }
|
|
|
+ // 2.基金名称匹配
|
|
|
+ if (StrUtil.isNotBlank(fundName)) {
|
|
|
+ List<String> fundIds = fundInfomationMapper.queryFundByName(fundName);
|
|
|
+ if (CollUtil.isNotEmpty(fundIds)) {
|
|
|
+ return fundIdList;
|
|
|
+ }
|
|
|
+ fundIds = fundAliasMapper.queryFundByName(fundName);
|
|
|
+ if (CollUtil.isNotEmpty(fundIds)) {
|
|
|
+ return fundIds;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 3.备案编码匹配
|
|
|
+ if (StrUtil.isNotBlank(fundName)) {
|
|
|
+ List<String> fundIds = fundInfomationMapper.queryFundByRegisterNumber(registerNumber);
|
|
|
+ if (CollUtil.isNotEmpty(fundIds)) {
|
|
|
+ return fundIds;
|
|
|
+ }
|
|
|
+ fundIds = fundAliasMapper.queryFundByRegisterNumber(registerNumber);
|
|
|
+ if (CollUtil.isNotEmpty(fundIds)) {
|
|
|
+ return fundIds;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return CollUtil.newArrayList();
|
|
|
+ }
|
|
|
+
|
|
|
+ private Integer saveEmailParseInfo(EmailParseInfoDO emailParseInfoDO) {
|
|
|
+ if (emailParseInfoDO == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return emailParseInfoMapper.insert(emailParseInfoDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ private EmailParseInfoDO buildEmailParseInfo(String emailAddress, String emailDate, String emailTitle, Integer emailType, Integer parseStatus, Date parseDate) {
|
|
|
+ EmailParseInfoDO emailParseInfoDO = new EmailParseInfoDO();
|
|
|
+ emailParseInfoDO.setEmail(emailAddress);
|
|
|
+ emailParseInfoDO.setEmailDate(DateUtil.parse(emailDate, DateConst.YYYY_MM_DD_HH_MM_SS));
|
|
|
+ emailParseInfoDO.setParseDate(parseDate);
|
|
|
+ emailParseInfoDO.setEmailTitle(emailTitle);
|
|
|
+ emailParseInfoDO.setEmailType(emailType);
|
|
|
+ emailParseInfoDO.setParseStatus(parseStatus);
|
|
|
+ emailParseInfoDO.setIsvalid(1);
|
|
|
+ emailParseInfoDO.setCreatorId(0);
|
|
|
+ emailParseInfoDO.setCreateTime(parseDate);
|
|
|
+ emailParseInfoDO.setUpdaterId(0);
|
|
|
+ emailParseInfoDO.setUpdateTime(parseDate);
|
|
|
+ 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() {
|
|
|
List<EmailFieldMappingDO> emailFieldMappingDOList = emailFieldMapper.getEmailFieldMapping();
|
|
|
return emailFieldMappingDOList.stream()
|
|
@@ -142,7 +406,7 @@ public class EmailParseService {
|
|
|
// 获取邮件日期大于等于startDate的邮件(搜索条件只支持按天)
|
|
|
SearchTerm startDateTerm = new ReceivedDateTerm(ComparisonTerm.GE, startDate);
|
|
|
Message[] messages = folder.search(startDateTerm);
|
|
|
- String path = "/data/file/";
|
|
|
+ String path = "/data/file";
|
|
|
Map<String, List<EmailContentInfoDTO>> emailMessageMap = MapUtil.newHashMap();
|
|
|
for (Message message : messages) {
|
|
|
List<EmailContentInfoDTO> emailContentInfoDTOList = CollUtil.newArrayList();
|
|
@@ -181,9 +445,9 @@ public class EmailParseService {
|
|
|
savefile.getParentFile().mkdirs();
|
|
|
savefile.getParentFile().setExecutable(true);
|
|
|
}
|
|
|
- FileUtil.writeFile(filePath, content.toString());
|
|
|
- emailContentInfoDTO.setFilePath(filePath);
|
|
|
}
|
|
|
+ FileUtil.writeFile(filePath, content.toString());
|
|
|
+ emailContentInfoDTO.setFilePath(filePath);
|
|
|
emailContentInfoDTOList.add(emailContentInfoDTO);
|
|
|
}
|
|
|
if (CollUtil.isNotEmpty(emailContentInfoDTOList)) {
|