package com.simuwang.manage.service.impl; import com.simuwang.base.common.enums.ParseStatus; import com.simuwang.base.common.support.MybatisPage; import com.simuwang.base.common.util.DateUtils; import com.simuwang.base.common.util.StringUtil; import com.simuwang.base.mapper.*; import com.simuwang.base.pojo.dos.EmailFileInfoDO; import com.simuwang.base.pojo.dos.EmailParseDetailDO; import com.simuwang.base.pojo.dos.EmailParseInfoDO; import com.simuwang.base.pojo.dos.EmailTypeRuleDO; import com.simuwang.base.pojo.dto.query.EmailFileQuery; import com.simuwang.base.pojo.dto.query.EmailParseQuery; import com.simuwang.base.pojo.vo.EmailFileInfoVO; import com.simuwang.base.pojo.vo.EmailParseDetailVO; import com.simuwang.base.pojo.vo.EmailParseInfoVO; import com.simuwang.base.pojo.vo.EmailTypeRuleVO; import com.simuwang.manage.service.ParseEmailService; import com.smppw.common.pojo.enums.TimeRange; import com.smppw.utils.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** * FileName: ParseEmailServiceImpl * Author: chenjianhua * Date: 2024/9/10 11:26 * Description: ${DESCRIPTION} */ @Service public class ParseEmailServiceImpl implements ParseEmailService { @Autowired private EmailTypeRuleMapper emailTypeRuleMapper; @Autowired private EmailParseInfoMapper emailParseInfoMapper; @Autowired private EmailFileInfoMapper emailFileInfoMapper; @Autowired private EmailFundNavMapper emailFundNavMapper; @Autowired private EmailFundAssetMapper emailFundAssetMapper; @Override public void saveEmailType(EmailTypeRuleVO emailTypeRuleVO) { EmailTypeRuleDO ruleDO = new EmailTypeRuleDO(); ruleDO.setId(emailTypeRuleVO.getId()); ruleDO.setNav(emailTypeRuleVO.getNav()); ruleDO.setReport(emailTypeRuleVO.getReport()); ruleDO.setValuation(emailTypeRuleVO.getValuation()); ruleDO.setUpdateTime(new Date()); if(ruleDO.getId() == null){ ruleDO.setCreateTime(new Date()); emailTypeRuleMapper.saveEmailType(ruleDO); }else{ emailTypeRuleMapper.updateEmailType(ruleDO); } } @Override public EmailTypeRuleVO searchEmailType() { EmailTypeRuleVO emailTypeRuleVO = new EmailTypeRuleVO(); EmailTypeRuleDO emailTypeRuleDO = emailTypeRuleMapper.searchEmailType(); if(emailTypeRuleDO == null){ return emailTypeRuleVO; } emailTypeRuleVO.setId(emailTypeRuleDO.getId()); emailTypeRuleVO.setNav(emailTypeRuleDO.getNav()); emailTypeRuleVO.setValuation(emailTypeRuleDO.getValuation()); emailTypeRuleVO.setReport(emailTypeRuleDO.getReport()); return emailTypeRuleVO; } @Override public MybatisPage searchEmailList(EmailParseQuery emailParseQuery){ if(emailParseQuery.getTimeRange().equals(TimeRange.FromSetup)){ emailParseQuery.setEndDate(DateUtil.getTodayDate()); } if(!emailParseQuery.getTimeRange().equals(TimeRange.Custom) && !emailParseQuery.getTimeRange().equals(TimeRange.FromSetup)){ emailParseQuery.setEndDate(DateUtils.getAroundToday(1)); emailParseQuery.setStartDate( DateUtil.RangeTime(emailParseQuery.getTimeRange().getFloatDateSymbel(),DateUtil.getTodayDate())); }else{ //自定义时间,把结束时间延后一天,确保时间判断能查到结束日期当天的数据 emailParseQuery.setEndDate(DateUtil.getAroundDate(DateUtils.parse(emailParseQuery.getEndDate(),DateUtils.YYYY_MM_DD),1)); } List emailParseInfoDOList = emailParseInfoMapper.searchEmailList(emailParseQuery); List emailParseInfoVOList = emailParseInfoDOList.stream() .map(EmailParseInfoDO::toVO).collect(Collectors.toList()); for(EmailParseInfoVO vo : emailParseInfoVOList){ List emailFileInfoList = emailFileInfoMapper.getEmailFileByEmailId(vo.getId()); List emailFileInfoVOList = emailFileInfoList.stream().map(EmailFileInfoDO::toVO).collect(Collectors.toList()); vo.setEmailFileInfoList(emailFileInfoVOList); } long total = emailParseInfoMapper.countEmailList(emailParseQuery); return MybatisPage.of(total,emailParseInfoVOList); } @Override public Map searchEmailCount(TimeRange timeRange,String startDate,String endDate) { if(timeRange.equals(TimeRange.FromSetup)){ endDate= DateUtil.getTodayDate(); } if(!timeRange.equals(TimeRange.Custom) && !timeRange.equals(TimeRange.FromSetup)){ endDate = DateUtils.getAroundToday(1); startDate = DateUtil.RangeTime(timeRange.getFloatDateSymbel(),DateUtil.getTodayDate()); }else{ //自定义时间,把结束时间延后一天,确保时间判断能查到结束日期当天的数据 endDate = DateUtil.getAroundDate(DateUtils.parse(endDate,DateUtils.YYYY_MM_DD),1); } Map result = new HashMap<>(); Integer parseTotal = emailParseInfoMapper.searchEmailCount(startDate,endDate,null); result.put("parseTotal",parseTotal); Integer parseSuccess = emailParseInfoMapper.searchEmailCount(startDate,endDate, ParseStatus.Success.getCode()); result.put("parseSuccess",parseSuccess); Integer parseFail = emailParseInfoMapper.searchEmailCount(startDate,endDate, ParseStatus.Fail.getCode()); result.put("parseFail",parseFail); return result; } private String getParseDate(TimeRange timeRange, String date) { String preDate =DateUtil.RangeTime(timeRange.getFloatDateSymbel(),date); return preDate; } @Override public EmailFileInfoVO getEmailFileById(Integer fileId) { EmailFileInfoDO emailFileInfoDO = emailFileInfoMapper.getEmailFileById(fileId); EmailFileInfoVO fileInfoVO = new EmailFileInfoVO(); if(emailFileInfoDO != null){ fileInfoVO.setId(emailFileInfoDO.getId()); fileInfoVO.setEmailId(emailFileInfoDO.getEmailId()); fileInfoVO.setFilePath(emailFileInfoDO.getFilePath()); fileInfoVO.setFileName(emailFileInfoDO.getFileName()); } return fileInfoVO; } @Override public MybatisPage searchEmailDetailById(EmailFileQuery emailFileQuery) { //根据邮件ID获取附件信息 Integer fileId = emailFileQuery.getFileId(); List priceDateList = emailFileInfoMapper.getAllPriceDateByFileId(fileId); List dataList = new ArrayList<>(); for(String priceDate : priceDateList){ List navList = emailFundNavMapper.selectFundNavByFielId(fileId,priceDate); List assetList = emailFundAssetMapper.selectFundAssetByFielId(fileId,priceDate); //整合 if(navList.size() > 0){ //先处理净值 for(EmailParseDetailDO navDO : navList){ for(EmailParseDetailDO assetDO : assetList){ if(navDO.getFundId() != null && navDO.getFundId().equals(assetDO.getFundId())){ navDO.setAssetExceptionStatus(assetDO.getAssetExceptionStatus()); navDO.setAssetIsStored(assetDO.getAssetIsStored()); navDO.setAssetNet(assetDO.getAssetNet()); navDO.setAssetShare(assetDO.getAssetShare()); }else if(navDO.getRegisterNumber() != null && navDO.getRegisterNumber().equals(assetDO.getRegisterNumber())){ navDO.setAssetExceptionStatus(assetDO.getAssetExceptionStatus()); navDO.setAssetIsStored(assetDO.getAssetIsStored()); navDO.setAssetNet(assetDO.getAssetNet()); navDO.setAssetShare(assetDO.getAssetShare()); }else if(navDO.getFundName() != null && navDO.getFundName().equals(assetDO.getFundName())){ navDO.setAssetExceptionStatus(assetDO.getAssetExceptionStatus()); navDO.setAssetIsStored(assetDO.getAssetIsStored()); navDO.setAssetNet(assetDO.getAssetNet()); navDO.setAssetShare(assetDO.getAssetShare()); } } dataList.add(navDO); } } //处理规模 for(EmailParseDetailDO assetDO : assetList){ int idx=0; for(EmailParseDetailDO dataDO : dataList){ if((dataDO.getFundId() != null && dataDO.getFundId().equals(assetDO.getFundId())) || (dataDO.getRegisterNumber() != null && dataDO.getRegisterNumber().equals(assetDO.getRegisterNumber())) || (dataDO.getFundName() != null && dataDO.getFundName().equals(assetDO.getFundName()))){ idx++; } } //没有找到说明只有规模没有净值 if(idx == 0){ dataList.add(assetDO); } } } long total = dataList.size(); List resultDO = null; long current = emailFileQuery.getCurrent(); long pageSize = emailFileQuery.getPageSize(); long offset = emailFileQuery.getOffset(); if(pageSize >= dataList.size()){ resultDO = dataList.subList(Integer.parseInt(offset+""),dataList.size()); }else{ if(current*pageSize > dataList.size()){ resultDO = dataList.subList(Integer.parseInt(offset+""),dataList.size()); }else{ resultDO = dataList.subList(Integer.parseInt(offset+""),Integer.parseInt(current*pageSize+"")); } } List result = resultDO.stream().filter(e -> StringUtil.isNotNull(e)).map(EmailParseDetailDO::toVO).collect(Collectors.toList()); return MybatisPage.of(total,result); } }