|
@@ -1,13 +1,11 @@
|
|
|
package com.simuwang.daq.components.report.parser.excel;
|
|
|
|
|
|
+import cn.hutool.core.exceptions.ExceptionUtil;
|
|
|
import com.alibaba.excel.EasyExcel;
|
|
|
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
|
|
|
import com.simuwang.base.common.exception.ReportParseException;
|
|
|
import com.simuwang.base.mapper.EmailFieldMappingMapper;
|
|
|
-import com.simuwang.base.pojo.dto.report.CustomExcelTable;
|
|
|
-import com.simuwang.base.pojo.dto.report.ReportData;
|
|
|
-import com.simuwang.base.pojo.dto.report.ReportParserParams;
|
|
|
-import com.simuwang.base.pojo.dto.report.SimpleTable;
|
|
|
+import com.simuwang.base.pojo.dto.report.*;
|
|
|
import com.simuwang.daq.components.CustomExcelMultiSheetListener;
|
|
|
import com.simuwang.daq.components.report.parser.AbstractReportParser;
|
|
|
|
|
@@ -21,17 +19,38 @@ public abstract class AbstractExcelReportParser<T extends ReportData> extends Ab
|
|
|
|
|
|
@Override
|
|
|
public T parse(ReportParserParams params) throws IOException, ReportParseException {
|
|
|
+ String filename = params.getFilename();
|
|
|
this.init();
|
|
|
// 配置excel解析
|
|
|
CustomExcelMultiSheetListener excelListener = new CustomExcelMultiSheetListener();
|
|
|
- ExcelReaderBuilder readerBuilder = EasyExcel.read(params.getFilepath());
|
|
|
- readerBuilder.sheet();
|
|
|
- readerBuilder.customObject(this.customExcelTables());
|
|
|
- readerBuilder.registerReadListener(excelListener);
|
|
|
- readerBuilder.doReadAll();
|
|
|
- // 解析出表格
|
|
|
- List<SimpleTable> tables = excelListener.getTables();
|
|
|
- return this.excelParse(tables, params);
|
|
|
+ try {
|
|
|
+ ExcelReaderBuilder readerBuilder = EasyExcel.read(params.getFilepath());
|
|
|
+ readerBuilder.sheet();
|
|
|
+ readerBuilder.customObject(this.customExcelTables());
|
|
|
+ readerBuilder.registerReadListener(excelListener);
|
|
|
+ readerBuilder.doReadAll();
|
|
|
+ } catch (Exception e) {
|
|
|
+ this.logger.warn("报告解析错误:{}", ExceptionUtil.stacktraceToString(e));
|
|
|
+ throw new ReportParseException(ReportParseStatus.NOT_A_FIXED_FORMAT, filename);
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ // 从excel中提取的表格信息
|
|
|
+ List<SimpleTable> tables = excelListener.getTables();
|
|
|
+ // 报告基本信息
|
|
|
+ ReportBaseInfoDTO reportInfo = this.buildReportInfo(params);
|
|
|
+ // 解析报告中主体基金的基本信息
|
|
|
+ ReportFundInfoDTO reportFundInfo = this.buildFundInfo(params, tables);
|
|
|
+ // 解析其他表格信息并且设置结果字段
|
|
|
+ T reportData = this.parseExtInfoAndSetData(reportInfo, reportFundInfo, tables);
|
|
|
+ // 数据清洗后返回
|
|
|
+ this.cleaningReportData(reportData);
|
|
|
+ return reportData;
|
|
|
+ } catch (ReportParseException e) {
|
|
|
+ throw e;
|
|
|
+ } catch (Exception e) {
|
|
|
+ this.logger.warn("报告解析错误:{}", ExceptionUtil.stacktraceToString(e));
|
|
|
+ throw new ReportParseException(ReportParseStatus.NOT_A_FIXED_FORMAT, filename);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -41,5 +60,13 @@ public abstract class AbstractExcelReportParser<T extends ReportData> extends Ab
|
|
|
|
|
|
protected abstract List<CustomExcelTable> customExcelTables();
|
|
|
|
|
|
- protected abstract T excelParse(List<SimpleTable> tables, ReportParserParams params);
|
|
|
+ protected abstract T parseExtInfoAndSetData(ReportBaseInfoDTO reportInfo, ReportFundInfoDTO reportFundInfo, List<SimpleTable> tables);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析基金基本信息表格
|
|
|
+ *
|
|
|
+ * @param tables 表格
|
|
|
+ * @return /
|
|
|
+ */
|
|
|
+ protected abstract ReportFundInfoDTO buildFundInfo(ReportParserParams params, List<SimpleTable> tables);
|
|
|
}
|