Selaa lähdekoodia

feat: 模板下载和导出

wanggaokun 3 viikkoa sitten
vanhempi
sitoutus
346471e969

+ 6 - 11
eco-common/com-excel/src/main/java/org/eco/vip/excel/utils/ExcelUtils.java

@@ -11,18 +11,12 @@ import cn.idev.excel.FastExcel;
 import cn.idev.excel.FastExcelFactory;
 import cn.idev.excel.write.builder.ExcelWriterSheetBuilder;
 import cn.idev.excel.write.metadata.style.WriteCellStyle;
-import cn.idev.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import jakarta.servlet.ServletOutputStream;
 import jakarta.servlet.http.HttpServletResponse;
 import org.eco.vip.core.utils.FileUtils;
 import org.eco.vip.core.utils.StrUtils;
 import org.eco.vip.excel.convert.ExcelBigNumberConvert;
-import org.eco.vip.excel.core.CellMergeStrategy;
-import org.eco.vip.excel.core.DefaultExcelListener;
-import org.eco.vip.excel.core.DropDownOptions;
-import org.eco.vip.excel.core.ExcelDownHandler;
-import org.eco.vip.excel.core.ExcelListener;
-import org.eco.vip.excel.core.ExcelResult;
+import org.eco.vip.excel.core.*;
 import org.eco.vip.excel.strategy.DefaultCellStyleStrategy;
 import org.eco.vip.excel.strategy.DefaultColumnWidthStyleStrategy;
 
@@ -127,12 +121,13 @@ public class ExcelUtils {
      */
     public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz, boolean merge,
                                        OutputStream os, List<DropDownOptions> options) {
-        ExcelWriterSheetBuilder builder = FastExcel.write(os, clazz)
-                .autoCloseStream(false)
-                // 自动适配
-                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+        ExcelWriterSheetBuilder builder = FastExcelFactory.write(os, clazz).autoCloseStream(false)
+                // 列宽自动适配
+                .registerWriteHandler(new DefaultColumnWidthStyleStrategy())
                 // 大数值自动转换 防止失真
                 .registerConverter(new ExcelBigNumberConvert())
+                // 表格样式
+                .registerWriteHandler(new DefaultCellStyleStrategy(Arrays.asList(0, 1), new WriteCellStyle(), new WriteCellStyle()))
                 .sheet(sheetName);
         if (merge) {
             // 合并处理器

+ 28 - 1
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/controller/config/ConfigController.java

@@ -8,17 +8,24 @@ package org.eco.vip.nexus.core.controller.config;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotEmpty;
 import org.eco.vip.core.pojo.CommonResult;
 import org.eco.vip.core.pojo.PageResult;
+import org.eco.vip.excel.core.ExcelResult;
+import org.eco.vip.excel.utils.ExcelUtils;
+import org.eco.vip.nexus.core.domain.config.excel.ConfigImport;
 import org.eco.vip.nexus.core.domain.config.pojo.ConfigBO;
 import org.eco.vip.nexus.core.domain.config.pojo.ConfigVO;
 import org.eco.vip.nexus.core.service.config.IConfigService;
 import org.eco.vip.security.annotation.PermissionsResource;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 import static org.eco.vip.core.pojo.CommonResult.fail;
@@ -72,7 +79,7 @@ public class ConfigController {
     }
 
     @DeleteMapping("/delete")
-    @SaCheckPermission("system:config:delete")
+    @SaCheckPermission(value = "system:config:delete")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空") List<String> ids) {
         boolean result = configService.delete(ids);
         if (!result) {
@@ -80,4 +87,24 @@ public class ConfigController {
         }
         return success();
     }
+
+    @SaCheckPermission("system:config:import")
+    @PostMapping("/template")
+    public void downTemplate(HttpServletResponse response) {
+        ExcelUtils.exportExcel(new ArrayList<>(), "参数配置模板", ConfigImport.class, response);
+    }
+
+    @SaCheckPermission("system:config:import")
+    @PostMapping("/import")
+    public CommonResult<Valid> importData(MultipartFile file, boolean isCover) throws IOException {
+        ExcelResult<ConfigImport> result = ExcelUtils.importExcel(file.getInputStream(), ConfigImport.class, true);
+        return success(result.getAnalysis());
+    }
+
+    @SaCheckPermission(value = "system:config:export")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ConfigBO configBO) {
+        List<ConfigVO> list = configService.selectList(configBO);
+        ExcelUtils.exportExcel(list, "参数配置", ConfigVO.class, response);
+    }
 }

+ 1 - 1
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/controller/role/RoleController.java

@@ -62,7 +62,7 @@ public class RoleController {
     }
 
     @PostMapping("/add")
-    @SaCheckPermission(value = "system:role:add", type = "新增")
+    @SaCheckPermission("system:role:add")
     public CommonResult<String> add(@RequestBody @Valid RoleBO roleBO) {
         if (roleService.hasRoleByCode(roleBO.getCode())) {
             return fail("角色标识已存在!");

+ 59 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/config/excel/ConfigImport.java

@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.config.excel;
+
+
+import cn.idev.excel.annotation.ExcelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @description ConfigImport
+ *
+ * @author GaoKunW
+ * @date 2025/7/21 21:52
+ */
+@Data
+@NoArgsConstructor
+public class ConfigImport implements Serializable {
+
+    /**
+     * 名称
+     */
+    @ExcelProperty(value = "参数名称")
+    private String name;
+
+    /**
+     * key
+     */
+    @ExcelProperty(value = "参数键")
+    private String configKey;
+
+    /**
+     * 值
+     */
+    @ExcelProperty(value = "参数值")
+    private String configValue;
+
+    /**
+     * 分类
+     */
+    @ExcelProperty(value = "分类")
+    private String category;
+
+    /**
+     * 是否锁定数据1锁定0不锁定
+     */
+    @ExcelProperty(value = "锁定")
+    private String isLock;
+
+    /**
+     * 顺序
+     */
+    @ExcelProperty(value = "顺序")
+    private Integer orderNum;
+}

+ 8 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/config/pojo/ConfigVO.java

@@ -6,6 +6,8 @@
 package org.eco.vip.nexus.core.domain.config.pojo;
 
 
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -21,6 +23,7 @@ import org.eco.vip.orm.domain.BaseEntity;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = Config.class, reverseConvertGenerate = false)
+@ExcelIgnoreUnannotated
 public class ConfigVO extends BaseEntity {
 
     /**
@@ -31,21 +34,25 @@ public class ConfigVO extends BaseEntity {
     /**
      * 名称
      */
+    @ExcelProperty(value = "参数名称")
     private String name;
 
     /**
      * key
      */
+    @ExcelProperty(value = "参数键")
     private String configKey;
 
     /**
      * 值
      */
+    @ExcelProperty(value = "参数值")
     private String configValue;
 
     /**
      * 分类
      */
+    @ExcelProperty(value = "分类")
     private String category;
 
     /**
@@ -56,5 +63,6 @@ public class ConfigVO extends BaseEntity {
     /**
      * 顺序
      */
+    @ExcelProperty(value = "排序")
     private Integer orderNum;
 }