home il y a 2 ans
Parent
commit
45ed5056f1

+ 55 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/listener/EasyExcelConsumerListener.java

@@ -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;
+    }
+}