|
@@ -25,16 +25,22 @@ import java.util.*;
|
|
|
* @Date: 2022/5/14
|
|
|
*/
|
|
|
public abstract class BasicExcelListener<T> extends AnalysisEventListener<T> {
|
|
|
+
|
|
|
private final static Logger log = LoggerFactory.getLogger(BasicExcelListener.class);
|
|
|
|
|
|
/**
|
|
|
* 批处理阈值2000
|
|
|
*/
|
|
|
private static int BATCH_COUNT = 2000;
|
|
|
+
|
|
|
public static final String SUCCESS = "success";
|
|
|
+
|
|
|
public static final String ERROR = "error";
|
|
|
+
|
|
|
private LinkedMultiValueMap<String, T> list;
|
|
|
+
|
|
|
private StringJoiner errorDataSj = new StringJoiner("\n");
|
|
|
+
|
|
|
private Exception exception = null;
|
|
|
|
|
|
public BasicExcelListener() {
|
|
@@ -48,15 +54,16 @@ public abstract class BasicExcelListener<T> extends AnalysisEventListener<T> {
|
|
|
|
|
|
public abstract void handle(LinkedMultiValueMap<String, T> dataList, StringJoiner errorData, Exception exception);
|
|
|
|
|
|
-// public abstract void errorData(List<String> errorDataList);
|
|
|
+ // public abstract void errorData(List<String> errorDataList);
|
|
|
|
|
|
@Override
|
|
|
public void invoke(T o, AnalysisContext analysisContext) {
|
|
|
-// if (validData(o, analysisContext) || (analysisContext.readRowHolder().getRowIndex() == 2001 || analysisContext.readRowHolder().getRowIndex() == 7001)) {
|
|
|
+ // if (validData(o, analysisContext) || (analysisContext.readRowHolder().getRowIndex() == 2001 || analysisContext.readRowHolder().getRowIndex() == 7001)) {
|
|
|
if (validData(o, analysisContext)) {
|
|
|
list.add(ERROR, o);
|
|
|
BasicExcelRow basicExcelRow = (BasicExcelRow) o;
|
|
|
- errorDataSj.add("第" + basicExcelRow.getSheet() + "个sheet第" + (basicExcelRow.getRow() - 1) + "行" + basicExcelRow.getErrorMessage().toString());
|
|
|
+ errorDataSj.add("第" + basicExcelRow.getSheet() + "个sheet第" + (basicExcelRow.getRow() - 1) + "行"
|
|
|
+ + basicExcelRow.getErrorMessage().toString());
|
|
|
} else {
|
|
|
list.add(SUCCESS, o);
|
|
|
}
|
|
@@ -66,10 +73,10 @@ public abstract class BasicExcelListener<T> extends AnalysisEventListener<T> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// @Override
|
|
|
-// public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
|
|
|
-// log.info("表头:{}", JSONObject.toJSONString(headMap));
|
|
|
-// }
|
|
|
+ // @Override
|
|
|
+ // public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
|
|
|
+ // log.info("表头:{}", JSONObject.toJSONString(headMap));
|
|
|
+ // }
|
|
|
|
|
|
@Override
|
|
|
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
|
|
@@ -85,8 +92,8 @@ public abstract class BasicExcelListener<T> extends AnalysisEventListener<T> {
|
|
|
@Override
|
|
|
public void onException(Exception exception, AnalysisContext context) {
|
|
|
log.info("onException is come in!");
|
|
|
-// XlsxReadSheetHolder xlsxReadSheetHolder = (XlsxReadSheetHolder) context.currentReadHolder();
|
|
|
-// errorDataSj.add("第" + (xlsxReadSheetHolder.getSheetNo() + 1) + "个sheet第" + (xlsxReadSheetHolder.getRowIndex() - 1) + "行" + exception.getMessage().toString());
|
|
|
+ // XlsxReadSheetHolder xlsxReadSheetHolder = (XlsxReadSheetHolder) context.currentReadHolder();
|
|
|
+ // errorDataSj.add("第" + (xlsxReadSheetHolder.getSheetNo() + 1) + "个sheet第" + (xlsxReadSheetHolder.getRowIndex() - 1) + "行" + exception.getMessage().toString());
|
|
|
this.exception = exception;
|
|
|
}
|
|
|
|
|
@@ -150,8 +157,11 @@ public abstract class BasicExcelListener<T> extends AnalysisEventListener<T> {
|
|
|
}
|
|
|
} else if (annotation instanceof Length) {
|
|
|
length = (Length) annotation;
|
|
|
- if (Objects.nonNull(object) && (object.toString().length() < length.min() || object.toString().length() > length.max())) {
|
|
|
- errorMessage.add("列名[" + excelProperty.value()[0] + "]:" + length.message());
|
|
|
+ if (Objects.nonNull(object) && (object.toString().length() < length.min()
|
|
|
+ || object.toString().length() > length.max())) {
|
|
|
+ errorMessage.add("列名[" + excelProperty.value()[0] + "]:" + length.message()
|
|
|
+ .replaceAll("\\{max}", String.valueOf(length.max()))
|
|
|
+ .replaceAll("\\{min}", String.valueOf(length.min())));
|
|
|
}
|
|
|
} else if (annotation instanceof Min) {
|
|
|
min = (Min) annotation;
|
|
@@ -165,12 +175,14 @@ public abstract class BasicExcelListener<T> extends AnalysisEventListener<T> {
|
|
|
}
|
|
|
} else if (annotation instanceof DecimalMin) {
|
|
|
decimalMin = (DecimalMin) annotation;
|
|
|
- if (Objects.nonNull(object) && new BigDecimal(object.toString()).compareTo(new BigDecimal(decimalMin.value())) == -1) {
|
|
|
+ if (Objects.nonNull(object)
|
|
|
+ && new BigDecimal(object.toString()).compareTo(new BigDecimal(decimalMin.value())) == -1) {
|
|
|
errorMessage.add("列名[" + excelProperty.value()[0] + "]:" + decimalMin.message());
|
|
|
}
|
|
|
} else if (annotation instanceof DecimalMax) {
|
|
|
decimalMax = (DecimalMax) annotation;
|
|
|
- if (Objects.nonNull(object) && new BigDecimal(object.toString()).compareTo(new BigDecimal(decimalMax.value())) == 1) {
|
|
|
+ if (Objects.nonNull(object)
|
|
|
+ && new BigDecimal(object.toString()).compareTo(new BigDecimal(decimalMax.value())) == 1) {
|
|
|
errorMessage.add("列名[" + excelProperty.value()[0] + "]:" + decimalMax.message());
|
|
|
}
|
|
|
} else if (annotation instanceof NotNull) {
|
|
@@ -190,12 +202,14 @@ public abstract class BasicExcelListener<T> extends AnalysisEventListener<T> {
|
|
|
}
|
|
|
} else if (annotation instanceof Size) {
|
|
|
size = (Size) annotation;
|
|
|
- if (Objects.nonNull(object) && (object.toString().length() < size.min() || object.toString().length() > size.max())) {
|
|
|
+ if (Objects.nonNull(object) && (object.toString().length() < size.min()
|
|
|
+ || object.toString().length() > size.max())) {
|
|
|
errorMessage.add("列名[" + excelProperty.value()[0] + "]:" + size.message());
|
|
|
}
|
|
|
} else if (annotation instanceof Range) {
|
|
|
range = (Range) annotation;
|
|
|
- if (Objects.nonNull(object) && (Long.parseLong(object.toString()) < range.min() || Long.parseLong(object.toString()) > range.max())) {
|
|
|
+ if (Objects.nonNull(object) && (Long.parseLong(object.toString()) < range.min()
|
|
|
+ || Long.parseLong(object.toString()) > range.max())) {
|
|
|
errorMessage.add("列名[" + excelProperty.value()[0] + "]:" + range.message());
|
|
|
}
|
|
|
} else if (annotation instanceof AssertTrue) {
|
|
@@ -218,10 +232,10 @@ public abstract class BasicExcelListener<T> extends AnalysisEventListener<T> {
|
|
|
}
|
|
|
|
|
|
//可重写的方法:
|
|
|
-// void invoke(T data, AnalysisContext context); //处理一行数据
|
|
|
-// void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) //处理表头的一行数据
|
|
|
-// void extra(CellExtra extra, AnalysisContext context); //获取单元格的额外信息
|
|
|
-// void doAfterAllAnalysed(AnalysisContext context) //全部读取结束后的操作
|
|
|
-// boolean hasNext(AnalysisContext context); //是否读取下一行
|
|
|
-// void onException(Exception exception, AnalysisContext context) //发生异常时调用
|
|
|
+ // void invoke(T data, AnalysisContext context); //处理一行数据
|
|
|
+ // void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) //处理表头的一行数据
|
|
|
+ // void extra(CellExtra extra, AnalysisContext context); //获取单元格的额外信息
|
|
|
+ // void doAfterAllAnalysed(AnalysisContext context) //全部读取结束后的操作
|
|
|
+ // boolean hasNext(AnalysisContext context); //是否读取下一行
|
|
|
+ // void onException(Exception exception, AnalysisContext context) //发生异常时调用
|
|
|
}
|