Browse Source

修改
excel工具类

hgw 3 years ago
parent
commit
e32fbf1474

+ 13 - 6
toolset/utils/src/main/java/com/yonge/toolset/utils/easyexcel/ExcelDataReader.java

@@ -9,10 +9,7 @@ import org.slf4j.LoggerFactory;
 import javax.validation.ConstraintViolation;
 import javax.validation.Validation;
 import javax.validation.Validator;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
@@ -38,6 +35,8 @@ public class ExcelDataReader<T> extends AnalysisEventListener<T> {
     private final AtomicInteger rows = new AtomicInteger(0);
     //异步执行的集合
     private final List<CompletableFuture<ExcelDataReaderProperty<T>>> futureList = new ArrayList<>();
+    //所有异常的集合 key excel文件
+    private final List<Map<Integer, String>> totalErrorList = new ArrayList<>();
     //校验
     private final Validator vf;
 
@@ -59,6 +58,10 @@ public class ExcelDataReader<T> extends AnalysisEventListener<T> {
         return rows.get();
     }
 
+    public List<Map<Integer, String>> getTotalErrorList() {
+        return totalErrorList;
+    }
+
     @Override
     public void invoke(T data, AnalysisContext context) {
         //支持多sheet数据导入,每次换sheet后要清除上一个sheet的数据
@@ -70,7 +73,7 @@ public class ExcelDataReader<T> extends AnalysisEventListener<T> {
         if (rows.get() > maxRows) {
             throw new RuntimeException("导入的数据超过最大行数限制!" + rows.get());
         }
-        CompletableFuture<ExcelDataReaderProperty<T>> future = CompletableFuture.supplyAsync(() -> executed(data));
+        CompletableFuture<ExcelDataReaderProperty<T>> future = CompletableFuture.supplyAsync(() -> executed(data, context));
         futureList.add(future);
         rows.incrementAndGet();
     }
@@ -86,7 +89,7 @@ public class ExcelDataReader<T> extends AnalysisEventListener<T> {
         log.info("ExcelDataReader >> fileName {} >> dataList size {}", fileName, dataList.size());
     }
 
-    private ExcelDataReaderProperty<T> executed(T data) {
+    private ExcelDataReaderProperty<T> executed(T data, AnalysisContext context) {
         ExcelDataReaderProperty<T> property = new ExcelDataReaderProperty<>();
         property.setClazz(data);
         //执行注解校验
@@ -96,6 +99,10 @@ public class ExcelDataReader<T> extends AnalysisEventListener<T> {
                     .map(ConstraintViolation::getMessage)
                     .collect(Collectors.joining());
             property.setErrorMessage(collect);
+            Integer rowIndex = context.readRowHolder().getRowIndex();
+            Map<Integer, String> errorMap = new HashMap<>();
+            errorMap.put(rowIndex, collect);
+            totalErrorList.add(errorMap);
         }
         return property;
     }