소스 검색

邮寄导出

licailing 3 년 전
부모
커밋
226ed800a8

+ 45 - 0
src/main/java/com/izouma/nineth/annotations/EnumFormat.java

@@ -0,0 +1,45 @@
+package com.izouma.nineth.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * <pre>
+ * '@EnumFormat 注解 :
+ *  作用 : 用于自定义excel单元格中的内容,转换成对应的枚举值
+ *  属性 :
+ *      value : 要转换的枚举类型
+ *      fromExcel : 指定excel中用户输入的枚举值,可以与toJavaEnum中指定的枚举值一一对应
+ *                  例如 : excel 单元格中输入
+ *                         '待支付' -> OrderStatusEnum.UNPAY
+ *                         '已支付' -> OrderStatusEnum.PAYED
+ *      toJavaEnum : 如上所述
+ *  注意 : toJavaEnum 与 fromExcel 必须搭配使用
+ * </pre>
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EnumFormat {
+    /**
+     * 要转换的枚举类型
+     *
+     * @return enum class
+     */
+    Class value();
+
+    /**
+     * 要转换枚举的全部变量名数组集
+     *
+     * @return String[]
+     */
+    String[] toJavaEnum() default {};
+
+    /**
+     * 枚举导出excel时所展示的内容
+     *
+     * @return String[]
+     */
+    String[] fromExcel() default {};
+}

+ 75 - 0
src/main/java/com/izouma/nineth/converter/EnumExcelConverter.java

@@ -0,0 +1,75 @@
+package com.izouma.nineth.converter;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.izouma.nineth.annotations.EnumFormat;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.EnumUtils;
+import org.springframework.util.Assert;
+
+import java.util.Objects;
+
+/**
+ * @author WuKun
+ * @since 2019/10/10
+ */
+public class EnumExcelConverter implements Converter<Enum> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return Enum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public Enum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+        String cellDataStr = cellData.getStringValue();
+
+        EnumFormat annotation = contentProperty.getField().getAnnotation(EnumFormat.class);
+        Class enumClazz = annotation.value();
+        String[] fromExcel = annotation.fromExcel();
+        String[] toJavaEnum = annotation.toJavaEnum();
+
+        Enum anEnum = null;
+        if (ArrayUtils.isNotEmpty(fromExcel) && ArrayUtils.isNotEmpty(toJavaEnum)) {
+            Assert.isTrue(fromExcel.length == toJavaEnum.length, "fromExcel 与 toJavaEnum 的长度必须相同");
+            for (int i = 0; i < fromExcel.length; i++) {
+                if (Objects.equals(fromExcel[i], cellDataStr)) {
+                    anEnum = EnumUtils.getEnum(enumClazz, toJavaEnum[i]);
+                }
+            }
+        } else {
+            anEnum = EnumUtils.getEnum(enumClazz, cellDataStr);
+        }
+
+        Assert.notNull(anEnum, "枚举值不合法");
+        return anEnum;
+    }
+
+    @Override
+    public CellData convertToExcelData(Enum value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+
+        String enumName = value.name();
+
+        EnumFormat annotation = contentProperty.getField().getAnnotation(EnumFormat.class);
+        String[] fromExcel = annotation.fromExcel();
+        String[] toJavaEnum = annotation.toJavaEnum();
+
+        if (ArrayUtils.isNotEmpty(fromExcel) && ArrayUtils.isNotEmpty(toJavaEnum)) {
+            Assert.isTrue(fromExcel.length == toJavaEnum.length, "fromExcel 与 toJavaEnum 的长度必须相同");
+            for (int i = 0; i < toJavaEnum.length; i++) {
+                if (Objects.equals(toJavaEnum[i], enumName)) {
+                    return new CellData(fromExcel[i]);
+                }
+            }
+        }
+        return new CellData(enumName);
+    }
+}

+ 19 - 0
src/main/java/com/izouma/nineth/domain/AssetPost.java

@@ -1,5 +1,9 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.annotations.EnumFormat;
+import com.izouma.nineth.converter.EnumExcelConverter;
 import com.izouma.nineth.converter.FileObjectConverter;
 import com.izouma.nineth.converter.FileObjectListConverter;
 import com.izouma.nineth.enums.PostStatus;
@@ -20,40 +24,55 @@ import java.util.List;
 @NoArgsConstructor
 @ApiModel("资产邮寄")
 public class AssetPost extends BaseEntity {
+    @ExcelProperty("用户ID")
     private Long userId;
 
+    @ExcelIgnore
     private Long assetId;
 
+    @ExcelProperty("名称")
     @ApiModelProperty("名称")
     private String name;
 
+    @ExcelProperty("编号")
     @ApiModelProperty("编号")
     private Integer number;
 
+    @ExcelIgnore
     @ApiModelProperty("图片")
     @Convert(converter = FileObjectListConverter.class)
     @Column(columnDefinition = "TEXT")
     private List<FileObject> pic;
 
+    @ExcelIgnore
     @Column(columnDefinition = "TEXT")
     @Convert(converter = FileObjectConverter.class)
     private FileObject model3d;
 
+    @ExcelProperty("收货人")
     @ApiModelProperty("收货人")
     private String contactName;
 
+    @ExcelProperty("收货电话")
     @ApiModelProperty("收货电话")
     private String contactPhone;
 
+    @ExcelProperty("收货地址")
     @ApiModelProperty("收货地址")
     private String address;
 
+    @ExcelProperty("快递公司")
     @ApiModelProperty("快递")
     private String courier;
 
+    @ExcelProperty("快递单号")
     @ApiModelProperty("快递单号")
     private String courierId;
 
+    @EnumFormat(value = PostStatus.class,
+            fromExcel = {"待发货", "待收货", "已完成", "已取消"},
+            toJavaEnum = {"DELIVERY", "RECEIVE", "FINISH", "CANCELLED"})
+    @ExcelProperty(value = "状态", converter = EnumExcelConverter.class)
     @Enumerated(EnumType.STRING)
     private PostStatus status;
 }

+ 7 - 0
src/main/java/com/izouma/nineth/domain/BaseEntity.java

@@ -1,5 +1,7 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
@@ -24,22 +26,27 @@ public abstract class BaseEntity {
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;
 
+    @ExcelIgnore
     @JsonIgnore
     @CreatedBy
     private String createdBy;
 
+    @ExcelProperty("创建时间")
     @JsonIgnore
     @CreatedDate
     private LocalDateTime createdAt;
 
+    @ExcelIgnore
     @JsonIgnore
     @LastModifiedBy
     private String modifiedBy;
 
+    @ExcelIgnore
     @JsonIgnore
     @LastModifiedDate
     private LocalDateTime modifiedAt;
 
+    @ExcelIgnore
     private boolean del;
 
     public Long getId() {

+ 1 - 1
src/main/vue/src/views/AssetPostEdit.vue

@@ -26,7 +26,7 @@
                         <el-input v-model="formData.contactPhone"></el-input>
                     </el-form-item>
                     <el-form-item prop="address" label="收货地址">
-                        <el-input v-model="formData.address"></el-input>
+                        <el-input v-model="formData.address" type="textarea"></el-input>
                     </el-form-item>
                     <el-form-item prop="courier" label="快递">
                         <el-input v-model="formData.courier"></el-input>

+ 7 - 8
src/main/vue/src/views/AssetPostList.vue

@@ -1,7 +1,7 @@
 <template>
     <div class="list-view">
         <page-title>
-            <el-button
+            <!-- <el-button
                 @click="addRow"
                 type="primary"
                 icon="el-icon-plus"
@@ -9,7 +9,7 @@
                 class="filter-item"
             >
                 新增
-            </el-button>
+            </el-button> -->
             <el-button
                 @click="download"
                 icon="el-icon-upload2"
@@ -230,9 +230,9 @@ export default {
         finish(row) {
             this.$alert('确定此订单已完成?', '提示', { type: 'primary' })
                 .then(() => {
-                    return this.$http.post('/assetPost/updateStatus/', {
+                    return this.$http.post('/assetPost/updateStatus', {
                         id: row.id,
-                        status: finish
+                        status: 'FINISH'
                     });
                 })
                 .then(() => {
@@ -261,10 +261,9 @@ export default {
                     this.getData();
                 })
                 .catch(() => {
-                    this.$message({
-                        type: 'info',
-                        message: '取消输入'
-                    });
+                    if (e !== 'cancel') {
+                        console.log(e.error);
+                    }
                 });
         }
     }