|
@@ -16,13 +16,18 @@
|
|
*/
|
|
*/
|
|
package com.fjhx.item.util.excel.listener;
|
|
package com.fjhx.item.util.excel.listener;
|
|
|
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
|
+import com.alibaba.excel.annotation.ExcelProperty;
|
|
import com.alibaba.excel.context.AnalysisContext;
|
|
import com.alibaba.excel.context.AnalysisContext;
|
|
import com.alibaba.excel.event.AnalysisEventListener;
|
|
import com.alibaba.excel.event.AnalysisEventListener;
|
|
import lombok.EqualsAndHashCode;
|
|
import lombok.EqualsAndHashCode;
|
|
import lombok.Getter;
|
|
import lombok.Getter;
|
|
|
|
|
|
|
|
+import java.lang.reflect.Field;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
+import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Excel监听器
|
|
* Excel监听器
|
|
@@ -33,19 +38,48 @@ import java.util.List;
|
|
@EqualsAndHashCode(callSuper = true)
|
|
@EqualsAndHashCode(callSuper = true)
|
|
public class DataListener<T> extends AnalysisEventListener<T> {
|
|
public class DataListener<T> extends AnalysisEventListener<T> {
|
|
|
|
|
|
- /**
|
|
|
|
- * 缓存的数据列表
|
|
|
|
- */
|
|
|
|
- private final List<T> dataList = new ArrayList<>();
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 缓存的数据列表
|
|
|
|
+ */
|
|
|
|
+ private final List<T> dataList = new ArrayList<>();
|
|
|
|
|
|
- @Override
|
|
|
|
- public void invoke(T data, AnalysisContext analysisContext) {
|
|
|
|
- dataList.add(data);
|
|
|
|
- }
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public void invoke(T data, AnalysisContext analysisContext) {
|
|
|
|
+ if (isLineNullValue(data)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ dataList.add(data);
|
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
|
- public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 判断整行单元格数据是否均为空
|
|
|
|
+ */
|
|
|
|
+ private boolean isLineNullValue(T data) {
|
|
|
|
+ if (data instanceof String) {
|
|
|
|
+ return ObjectUtil.isNull(data);
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ List<Field> fields = Arrays.stream(data.getClass().getDeclaredFields())
|
|
|
|
+ .filter(f -> f.isAnnotationPresent(ExcelProperty.class))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ List<Boolean> lineNullList = new ArrayList<>(fields.size());
|
|
|
|
+ for (Field field : fields) {
|
|
|
|
+ field.setAccessible(true);
|
|
|
|
+ Object value = field.get(data);
|
|
|
|
+ if (ObjectUtil.isNull(value)) {
|
|
|
|
+ lineNullList.add(Boolean.TRUE);
|
|
|
|
+ } else {
|
|
|
|
+ lineNullList.add(Boolean.FALSE);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return lineNullList.stream().allMatch(Boolean.TRUE::equals);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|