zhouhao 6 gadi atpakaļ
vecāks
revīzija
87e6f83452

+ 3 - 3
hsweb-boost/hsweb-boost-excel/src/main/java/org/hswebframework/web/excel/DefaultExcelImporter.java

@@ -47,7 +47,7 @@ public class DefaultExcelImporter implements ExcelImporter {
             HeaderMapping mapping = new HeaderMapping();
             mapping.header = header;
             mapping.field = field.getName();
-            mapping.index = excel == null || excel.sheetIndex() == -1 ? index.getAndAdd(1) : excel.sheetIndex();
+            mapping.index = excel == null || excel.exportOrder() == -1 ? index.getAndAdd(1) : excel.exportOrder();
             mapping.converter = createConvert(field.getType());
             if (null != excel) {
                 mapping.enableImport = excel.enableImport();
@@ -191,7 +191,7 @@ public class DefaultExcelImporter implements ExcelImporter {
 
     @Override
     @SneakyThrows
-    public <T> Result<T> doImport(InputStream inputStream, Class<T> type, Function<T, Error> validator, Class... group) {
+    public <T> Result<T> doImport(InputStream inputStream, Class<T> type, Function<T, Error> afterParsed, Class... group) {
         AtomicInteger counter = new AtomicInteger(0);
         AtomicInteger errorCounter = new AtomicInteger(0);
         List<T> data = new ArrayList<>();
@@ -245,7 +245,7 @@ public class DefaultExcelImporter implements ExcelImporter {
 
             data.add(instance);
 
-            Error error = validator.apply(instance);
+            Error error = afterParsed.apply(instance);
             if (null != error) {
                 errorCounter.getAndAdd(1);
                 error.setRowIndex(counter.get());

+ 30 - 2
hsweb-boost/hsweb-boost-excel/src/main/java/org/hswebframework/web/excel/Excel.java

@@ -1,5 +1,7 @@
 package org.hswebframework.web.excel;
 
+import io.swagger.annotations.ApiModelProperty;
+
 import java.lang.annotation.*;
 
 /**
@@ -11,22 +13,48 @@ import java.lang.annotation.*;
 @Documented
 public @interface Excel {
 
+    /**
+     * @return EXCEL表头
+     * @see ApiModelProperty#value()
+     */
     String value() default "";
 
+    /**
+     * @return 读取指定的工作薄,-1为默认
+     */
     int sheetIndex() default -1;
 
+    /**
+     * @return 是否取消EXCEL导入导出功能
+     */
     boolean ignore() default false;
 
+    /**
+     * @return 是否开启导入, 开启后的字段才能进行导入
+     */
     boolean enableImport() default true;
 
+    /**
+     * @return 是否开启导出, 开启后的字段才能进行导出
+     */
     boolean enableExport() default true;
 
+    /**
+     * @return 导出时, 表头的顺序
+     */
     int exportOrder() default -1;
 
+    /**
+     * @return 导出分组, 可通过分组导入导出不同的字段信息
+     */
     Class[] group() default Void.class;
 
+    /**
+     * 自定义单元格转换器, 用于对数据字典等字段进行自定义转换
+     *
+     * @return 实例必须注入到spring容器中
+     * @see org.springframework.context.ApplicationContext#getBean(Class)
+     */
     Class<ExcelCellConverter> converter() default ExcelCellConverter.class;
 
-    Class<ExcelImporter> importer() default ExcelImporter.class;
-
 }

+ 15 - 1
hsweb-boost/hsweb-boost-excel/src/main/java/org/hswebframework/web/excel/ExcelImporter.java

@@ -3,6 +3,7 @@ package org.hswebframework.web.excel;
 import lombok.Builder;
 import lombok.Getter;
 import lombok.Setter;
+import org.hswebframework.web.bean.FastBeanCopier;
 
 import java.io.InputStream;
 import java.util.List;
@@ -16,7 +17,20 @@ public interface ExcelImporter {
 
     ExcelImporter instance = new DefaultExcelImporter();
 
-    <T> Result<T> doImport(InputStream inputStream, Class<T> type, Function<T, Error> validator, Class... group);
+    /**
+     * 解析excel为指定的class对象,并返回解析结果.类上的属性需要注解{@link Excel}或者{@link io.swagger.annotations.ApiModelProperty}.
+     *
+     * @param inputStream excel文件流,支持xls和xlsx
+     * @param type        要解析为的类型
+     * @param afterParsed 每解析完一个对象都会调用此接口,用于自定义操作,如: 数据校验
+     * @param group       导入的分组 {@link Excel#group()},如果不指定则为 {@link Void#getClass()}
+     * @param <T>         泛型
+     * @return 导入结果, 包含了成功, 失败信息
+     * @see Excel
+     * @see FastBeanCopier#getBeanFactory()
+     * @see ExcelImporter#instance 默认的实现
+     */
+    <T> Result<T> doImport(InputStream inputStream, Class<T> type, Function<T, Error> afterParsed, Class... group);
 
     @Builder
     @Getter

+ 5 - 0
hsweb-boost/hsweb-boost-excel/src/test/java/org/hswebframework/web/excel/DefaultExcelImporterTest.java

@@ -6,6 +6,7 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import org.hswebframework.web.commons.bean.Bean;
+import org.hswebframework.web.commons.entity.DataStatusEnum;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -26,6 +27,7 @@ public class DefaultExcelImporterTest {
         Assert.assertEquals(result.success, 1);
         System.out.println(JSON.toJSONString(result.getData(), SerializerFeature.PrettyFormat));
         TestBean bean = result.getData().get(0);
+        Assert.assertNotNull(bean.status);
         Assert.assertNotNull(bean.nest);
         Assert.assertNotNull(bean.nest.nest);
 
@@ -44,6 +46,9 @@ public class DefaultExcelImporterTest {
         @Excel("年龄")
         private int age;
 
+        @Excel("状态")
+        private DataStatusEnum status;
+
         @Excel("嵌套-")
         private TestBean nest;
     }

BIN
hsweb-boost/hsweb-boost-excel/src/test/resources/test.xls