|
@@ -22,11 +22,13 @@ import com.simuwang.base.pojo.dos.*;
|
|
import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
import com.simuwang.base.pojo.dto.EmailFundNavDTO;
|
|
import com.simuwang.base.pojo.dto.EmailFundNavDTO;
|
|
import com.simuwang.base.pojo.dto.MailboxInfoDTO;
|
|
import com.simuwang.base.pojo.dto.MailboxInfoDTO;
|
|
|
|
+import com.simuwang.base.pojo.dto.query.DataboardQuery;
|
|
import com.simuwang.base.pojo.dto.report.ParseResult;
|
|
import com.simuwang.base.pojo.dto.report.ParseResult;
|
|
import com.simuwang.base.pojo.dto.report.ReportData;
|
|
import com.simuwang.base.pojo.dto.report.ReportData;
|
|
import com.simuwang.base.pojo.dto.report.ReportParseStatus;
|
|
import com.simuwang.base.pojo.dto.report.ReportParseStatus;
|
|
import com.simuwang.base.pojo.dto.report.ReportParserParams;
|
|
import com.simuwang.base.pojo.dto.report.ReportParserParams;
|
|
import com.simuwang.base.pojo.valuation.CmValuationTableAttribute;
|
|
import com.simuwang.base.pojo.valuation.CmValuationTableAttribute;
|
|
|
|
+import com.simuwang.base.pojo.vo.*;
|
|
import com.simuwang.daq.components.report.parser.ReportParser;
|
|
import com.simuwang.daq.components.report.parser.ReportParser;
|
|
import com.simuwang.daq.components.report.parser.ReportParserFactory;
|
|
import com.simuwang.daq.components.report.parser.ReportParserFactory;
|
|
import com.simuwang.daq.components.report.writer.ReportWriter;
|
|
import com.simuwang.daq.components.report.writer.ReportWriter;
|
|
@@ -76,6 +78,10 @@ public class EmailParseService {
|
|
private final ValuationTableMapper valuationTableMapper;
|
|
private final ValuationTableMapper valuationTableMapper;
|
|
private final ValuationTableAttributeMapper valuationTableAttributeMapper;
|
|
private final ValuationTableAttributeMapper valuationTableAttributeMapper;
|
|
private final FundPositionDetailMapper fundPositionDetailMapper;
|
|
private final FundPositionDetailMapper fundPositionDetailMapper;
|
|
|
|
+ private final DistributionMapper distributionMapper;
|
|
|
|
+ private final CompanyInformationMapper companyInformationMapper;
|
|
|
|
+ @Autowired
|
|
|
|
+ private FundInfoMapper fundInfoMapper;
|
|
|
|
|
|
@Value("${email.file.path}")
|
|
@Value("${email.file.path}")
|
|
private String path;
|
|
private String path;
|
|
@@ -96,7 +102,7 @@ public class EmailParseService {
|
|
AssetMapper assetMapper, NavMapper navMapper, FundService fundService,
|
|
AssetMapper assetMapper, NavMapper navMapper, FundService fundService,
|
|
FundAliasMapper fundAliasMapper,
|
|
FundAliasMapper fundAliasMapper,
|
|
ValuationTableMapper valuationTableMapper, ValuationTableAttributeMapper valuationTableAttributeMapper,
|
|
ValuationTableMapper valuationTableMapper, ValuationTableAttributeMapper valuationTableAttributeMapper,
|
|
- FundPositionDetailMapper fundPositionDetailMapper) {
|
|
|
|
|
|
+ FundPositionDetailMapper fundPositionDetailMapper, DistributionMapper distributionMapper, CompanyInformationMapper companyInformationMapper) {
|
|
this.emailTypeRuleMapper = emailTypeRuleMapper;
|
|
this.emailTypeRuleMapper = emailTypeRuleMapper;
|
|
this.emailRuleConfig = emailRuleConfig;
|
|
this.emailRuleConfig = emailRuleConfig;
|
|
this.emailFieldMapper = emailFieldMapper;
|
|
this.emailFieldMapper = emailFieldMapper;
|
|
@@ -113,6 +119,8 @@ public class EmailParseService {
|
|
this.valuationTableMapper = valuationTableMapper;
|
|
this.valuationTableMapper = valuationTableMapper;
|
|
this.valuationTableAttributeMapper = valuationTableAttributeMapper;
|
|
this.valuationTableAttributeMapper = valuationTableAttributeMapper;
|
|
this.fundPositionDetailMapper = fundPositionDetailMapper;
|
|
this.fundPositionDetailMapper = fundPositionDetailMapper;
|
|
|
|
+ this.distributionMapper = distributionMapper;
|
|
|
|
+ this.companyInformationMapper = companyInformationMapper;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -892,7 +900,99 @@ public class EmailParseService {
|
|
}
|
|
}
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
+ public EmailParseCountBoardVO searchEmailCount(DataboardQuery databoardQuery) {
|
|
|
|
+ List<Map<String, Object>> dataList = emailParseInfoMapper.searchEmailDataBoard(databoardQuery);
|
|
|
|
+ EmailParseCountBoardVO result = new EmailParseCountBoardVO();
|
|
|
|
+ Integer total = 0;
|
|
|
|
+ for(Map<String, Object> data : dataList){
|
|
|
|
+ if(1 == ((Integer)data.get("parse_status")).intValue()){
|
|
|
|
+ result.setSuccess(((Long)data.get("total")).intValue());
|
|
|
|
+ }else{
|
|
|
|
+ result.setFail(((Long)data.get("total")).intValue());
|
|
|
|
+ }
|
|
|
|
+ total+=((Long)data.get("total")).intValue();
|
|
|
|
+ }
|
|
|
|
+ result.setTotal(total);
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public EmailParseTypeBoardVO searchEmailTypeCount(DataboardQuery databoardQuery) {
|
|
|
|
+ //邮件类型,1-净值,2-估值表,3-定期报告
|
|
|
|
+ List<Map<String, Object>> dataList = emailParseInfoMapper.searchEmailTypeCount(databoardQuery);
|
|
|
|
+ EmailParseTypeBoardVO result = new EmailParseTypeBoardVO();
|
|
|
|
+ Integer total = 0;
|
|
|
|
+ for(Map<String, Object> data : dataList){
|
|
|
|
+ Integer emailType = (Integer) data.get("email_type");
|
|
|
|
+ Long totalType = (Long)data.get("total");
|
|
|
|
+ if(1 == emailType){
|
|
|
|
+ result.setNav(totalType.intValue());
|
|
|
|
+ }else if(2 == emailType){
|
|
|
|
+ result.setValuation(totalType.intValue());
|
|
|
|
+ }else{
|
|
|
|
+ result.setReport(totalType.intValue());
|
|
|
|
+ }
|
|
|
|
+ total+=totalType.intValue();
|
|
|
|
+ }
|
|
|
|
+ result.setTotal(total);
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ public EmailParseFailAnalysisVO parseFailAnalysis(DataboardQuery databoardQuery) {
|
|
|
|
+ EmailParseFailAnalysisVO emailParseFailAnalysisVO = new EmailParseFailAnalysisVO();
|
|
|
|
+ if(databoardQuery.getEmailType() == null || databoardQuery.getEmailType().equals(1)){
|
|
|
|
+ NavFailAnalysisVO navFailAnalysisVO = new NavFailAnalysisVO();
|
|
|
|
+ Long pdfNoData = emailParseInfoMapper.countpdfNoData(databoardQuery,"无法从PDF文件中获取到数据");
|
|
|
|
+ navFailAnalysisVO.setPdfNoData(pdfNoData);
|
|
|
|
+ Long priceDateMiss = emailParseInfoMapper.countpdfNoData(databoardQuery,"缺少净值日期");
|
|
|
|
+ navFailAnalysisVO.setPriceDateMiss(priceDateMiss);
|
|
|
|
+ Long navMiss = emailParseInfoMapper.countpdfNoData(databoardQuery,"单位净值和累计净值和资产净值均缺失");
|
|
|
|
+ navFailAnalysisVO.setNavMiss(navMiss);
|
|
|
|
+ Long fundNameNumberMiss = emailParseInfoMapper.countpdfNoData(databoardQuery,"单位净值和累计净值和资产净值均缺失");
|
|
|
|
+ navFailAnalysisVO.setFundNameNumberMiss(fundNameNumberMiss);
|
|
|
|
+ emailParseFailAnalysisVO.setNavFailAnalysisVO(navFailAnalysisVO);
|
|
|
|
+ }else if(databoardQuery.getEmailType().equals(2)){
|
|
|
|
+ ValuationFailAnalysisVO valuationFailAnalysisVO = new ValuationFailAnalysisVO();
|
|
|
|
+ Long fileTypeError = emailParseInfoMapper.countpdfNoData(databoardQuery,"文件格式错误");
|
|
|
|
+ valuationFailAnalysisVO.setFileTypeError(fileTypeError);
|
|
|
|
+ Long columnMiss = emailParseInfoMapper.countpdfNoData(databoardQuery,"无市值列或无数量列");
|
|
|
|
+ valuationFailAnalysisVO.setColumnMiss(columnMiss);
|
|
|
|
+ Long numbericMiss = emailParseInfoMapper.countpdfNoData(databoardQuery,"非数值数据");
|
|
|
|
+ valuationFailAnalysisVO.setNumbericMiss(numbericMiss);
|
|
|
|
+ Long noData = emailParseInfoMapper.countpdfNoData(databoardQuery,"无数据");
|
|
|
|
+ valuationFailAnalysisVO.setNoData(noData);
|
|
|
|
+ Long templateError = emailParseInfoMapper.countpdfNoData(databoardQuery,"模板不支持");
|
|
|
|
+ valuationFailAnalysisVO.setTemplateError(templateError);
|
|
|
|
+ emailParseFailAnalysisVO.setValuationFailAnalysisVO(valuationFailAnalysisVO);
|
|
|
|
+ }else if(databoardQuery.getEmailType().equals(3)){
|
|
|
|
+ ReportFailAnalysisVO reportFailAnalysisVO = new ReportFailAnalysisVO();
|
|
|
|
+ Long scannedFile = emailParseInfoMapper.countpdfNoData(databoardQuery,"报告为扫描件");
|
|
|
|
+ reportFailAnalysisVO.setScannedFile(scannedFile);
|
|
|
|
+ Long errorAmacFileType = emailParseInfoMapper.countpdfNoData(databoardQuery,"报告不是基协统一格式");
|
|
|
|
+ reportFailAnalysisVO.setErrorAmacFileType(errorAmacFileType);
|
|
|
|
+ Long watermarkFileError = emailParseInfoMapper.countpdfNoData(databoardQuery,"报告水印干扰导致部分没有解析");
|
|
|
|
+ reportFailAnalysisVO.setWatermarkFileError(watermarkFileError);
|
|
|
|
+ Long noReport = emailParseInfoMapper.countpdfNoData(databoardQuery,"报告不是定期报告");
|
|
|
|
+ reportFailAnalysisVO.setNoReport(noReport);
|
|
|
|
+ emailParseFailAnalysisVO.setReportFailAnalysisVO(reportFailAnalysisVO);
|
|
|
|
+ }
|
|
|
|
+ return emailParseFailAnalysisVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public EmailParseDataViewVO dataOverview(DataboardQuery databoardQuery) {
|
|
|
|
+ EmailParseDataViewVO dataViewVO = new EmailParseDataViewVO();
|
|
|
|
+ dataViewVO.setEmailNum(emailParseInfoMapper.countEmailTotal(null));
|
|
|
|
+ dataViewVO.setNavEmailNum(emailParseInfoMapper.countEmailTotal(1));
|
|
|
|
+ dataViewVO.setValuationEmailNum(emailParseInfoMapper.countEmailTotal(2));
|
|
|
|
+ dataViewVO.setReportEmailNum(emailParseInfoMapper.countEmailTotal(3));
|
|
|
|
+ dataViewVO.setParseNavNum(emailFundNavMapper.countEmailNavTotal());
|
|
|
|
+ dataViewVO.setParseAssetNum(emailFundAssetMapper.countEmailAssetTotal());
|
|
|
|
+ dataViewVO.setNavNum(navMapper.countNavTotal());
|
|
|
|
+ dataViewVO.setAssetNum(assetMapper.countAssetTotal());
|
|
|
|
+ dataViewVO.setDistribute(distributionMapper.countDistributionTotal());
|
|
|
|
+ dataViewVO.setFundNum(fundInfoMapper.countFundTotal());
|
|
|
|
+ dataViewVO.setCompanyNum(companyInformationMapper.countCompanyTotal());
|
|
|
|
+ return dataViewVO;
|
|
|
|
+ }
|
|
private Message[] getEmailMessage(Folder folder, String protocol, Date startDate) {
|
|
private Message[] getEmailMessage(Folder folder, String protocol, Date startDate) {
|
|
try {
|
|
try {
|
|
if (protocol.contains("imap")) {
|
|
if (protocol.contains("imap")) {
|