|
@@ -0,0 +1,55 @@
|
|
|
+package com.fjhx.listener;
|
|
|
+
|
|
|
+import com.alibaba.excel.context.AnalysisContext;
|
|
|
+import com.alibaba.excel.event.AnalysisEventListener;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.function.Consumer;
|
|
|
+
|
|
|
+public class EasyExcelConsumerListener<T> extends AnalysisEventListener<T> {
|
|
|
+ private final int pageSize;
|
|
|
+ private final List<T> list;
|
|
|
+ private final Consumer<List<T>> consumer;
|
|
|
+ private final Runnable runnable;
|
|
|
+ private int radeLine = 0;
|
|
|
+ private int approximateTotalRowNumber = 0;
|
|
|
+
|
|
|
+ public EasyExcelConsumerListener(int pageSize, Consumer<List<T>> consumer, Runnable runnable) {
|
|
|
+ this.pageSize = pageSize;
|
|
|
+ this.consumer = consumer;
|
|
|
+ this.runnable = runnable;
|
|
|
+ list = new ArrayList<>(pageSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void invoke(T data, AnalysisContext context) {
|
|
|
+ list.add(data);
|
|
|
+ if (list.size() >= pageSize) {
|
|
|
+ approximateTotalRowNumber = context.readSheetHolder().getApproximateTotalRowNumber();
|
|
|
+ radeLine += list.size();
|
|
|
+ consumer.accept(list);
|
|
|
+ list.clear();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void doAfterAllAnalysed(AnalysisContext context) {
|
|
|
+ if (list.size() > 0) {
|
|
|
+ consumer.accept(list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onException(Exception exception, AnalysisContext context) {
|
|
|
+ runnable.run();
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getRadeLine() {
|
|
|
+ return radeLine;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getApproximateTotalRowNumber() {
|
|
|
+ return approximateTotalRowNumber;
|
|
|
+ }
|
|
|
+}
|