瀏覽代碼

解决Excel导入存在空行问题,京东订单导入添加更多数据检查

yzc 1 年之前
父節點
當前提交
59c6a00a3e

+ 45 - 11
hx-item/src/main/java/com/fjhx/item/util/excel/listener/DataListener.java

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

+ 9 - 3
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdOrderServiceImpl.java

@@ -194,12 +194,18 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
     @Override
     @Override
     public void excelImport(MultipartFile file, Long customerId) {
     public void excelImport(MultipartFile file, Long customerId) {
         List<JdOrderExcelImportBo> boList = ExcelUtil.read(file, JdOrderExcelImportBo.class);
         List<JdOrderExcelImportBo> boList = ExcelUtil.read(file, JdOrderExcelImportBo.class);
+        if (ObjectUtil.isEmpty(boList)) {
+            throw new ServiceException("Excel文档为空!!!");
+        }
+        if (boList.stream().filter(item -> ObjectUtil.isEmpty(item.getCode())).count() > 0) {
+            throw new ServiceException("Excel中存在没有采购单号的数据请检查!!!");
+        }
+        if (boList.stream().filter(item -> ObjectUtil.isEmpty(item.getProductCode())).count() > 0) {
+            throw new ServiceException("Excel中存在没有商品编号的数据请检查!!!");
+        }
 
 
         //检查采购单号是否已经在系统中存在,如果存在报错
         //检查采购单号是否已经在系统中存在,如果存在报错
         List<String> codes = boList.stream().map(JdOrderExcelImportBo::getCode).distinct().collect(Collectors.toList());
         List<String> codes = boList.stream().map(JdOrderExcelImportBo::getCode).distinct().collect(Collectors.toList());
-        if (ObjectUtil.isEmpty(codes)) {
-            throw new ServiceException("采购单号不能为空");
-        }
         List<JdOrder> jdOrderList = this.list(q -> q.in(JdOrder::getCode, codes));
         List<JdOrder> jdOrderList = this.list(q -> q.in(JdOrder::getCode, codes));
         if (ObjectUtil.isNotEmpty(jdOrderList)) {
         if (ObjectUtil.isNotEmpty(jdOrderList)) {
             String codeList = jdOrderList.stream().map(JdOrder::getCode).collect(Collectors.joining(","));
             String codeList = jdOrderList.stream().map(JdOrder::getCode).collect(Collectors.joining(","));