Browse Source

实现异步导入文件, 并且记录日志

wanggaokun 1 year ago
parent
commit
22d79fee7f
18 changed files with 198 additions and 146 deletions
  1. 3 0
      eco-common/common-core/src/main/java/org/eco/common/core/core/domain/UploadRes.java
  2. 1 1
      eco-common/common-excel/src/main/java/org/eco/common/excel/core/DefaultExcelResult.java
  3. 1 0
      eco-common/common-excel/src/main/java/org/eco/common/excel/entity/ExcelResultRes.java
  4. 7 7
      eco-common/common-excel/src/main/java/org/eco/common/excel/service/IExcelService.java
  5. 29 26
      eco-common/common-excel/src/main/java/org/eco/common/excel/service/impl/ExcelService.java
  6. 24 0
      eco-common/common-excel/src/main/java/org/eco/common/excel/utils/ExcelUtil.java
  7. 0 35
      eco-modules/system/src/main/java/org/eco/system/controller/system/ImportExportController.java
  8. 15 5
      eco-modules/system/src/main/java/org/eco/system/controller/system/SysUserController.java
  9. 10 0
      eco-modules/system/src/main/java/org/eco/system/domain/ImportExport.java
  10. 10 0
      eco-modules/system/src/main/java/org/eco/system/domain/bo/ImportExportBo.java
  11. 0 50
      eco-modules/system/src/main/java/org/eco/system/domain/vo/ImportExportImportVo.java
  12. 10 0
      eco-modules/system/src/main/java/org/eco/system/domain/vo/ImportExportVo.java
  13. 1 1
      eco-modules/system/src/main/java/org/eco/system/listener/SysUserImportListener.java
  14. 10 0
      eco-modules/system/src/main/java/org/eco/system/service/IImportExportService.java
  15. 21 1
      eco-modules/system/src/main/java/org/eco/system/service/ISysUserService.java
  16. 21 6
      eco-modules/system/src/main/java/org/eco/system/service/impl/ImportExportServiceImpl.java
  17. 2 2
      eco-modules/system/src/main/java/org/eco/system/service/impl/SysOssServiceImpl.java
  18. 33 12
      eco-modules/system/src/main/java/org/eco/system/service/impl/SysUserServiceImpl.java

+ 3 - 0
eco-common/common-core/src/main/java/org/eco/common/core/core/domain/UploadRes.java

@@ -13,4 +13,7 @@ import lombok.Data;
 public class UploadRes {
     private String url;
     private String name;
+    private Long ossId;
+
+
 }

+ 1 - 1
eco-common/common-excel/src/main/java/org/eco/common/excel/core/DefaultExcelResult.java

@@ -63,7 +63,7 @@ public class DefaultExcelResult<T> implements ExcelResult<T> {
             return ExcelResultRes.builder().logInfo("读取失败,未解析到数据").status("0").build();
         } else {
             if (errorCount == 0) {
-                return ExcelResultRes.builder().logInfo(StrUtil.format("恭喜您,全部读取成功!共{}条", successCount)).status("2").build();
+                return ExcelResultRes.builder().logInfo(StrUtil.format("恭喜您,全部读取成功!共{}条", successCount)).status("1").build();
             } else {
                 return ExcelResultRes.builder().build();
             }

+ 1 - 0
eco-common/common-excel/src/main/java/org/eco/common/excel/entity/ExcelResultRes.java

@@ -15,4 +15,5 @@ public class ExcelResultRes {
     private String logInfo;
     private String url;
     private String name;
+    private Long ossId;
 }

+ 7 - 7
eco-common/common-excel/src/main/java/org/eco/common/excel/service/IExcelService.java

@@ -1,10 +1,9 @@
 package org.eco.common.excel.service;
 
-import jakarta.servlet.http.HttpServletResponse;
 import org.eco.common.excel.core.ExcelListener;
 import org.eco.common.excel.entity.ExcelResultRes;
-import org.springframework.web.multipart.MultipartFile;
 
+import java.io.InputStream;
 import java.util.List;
 
 /**
@@ -17,11 +16,12 @@ public interface IExcelService {
     /**
      * 使用自定义监听器 异步导入 自定义返回
      *
-     * @param file     输入流文件
-     * @param clazz    对象类型
-     * @param listener 自定义监听器
+     * @param inputStream 输入流文件
+     * @param name        文件名
+     * @param clazz       对象类型
+     * @param listener    自定义监听器
      */
-    <T> ExcelResultRes importExcel(MultipartFile file, Class<T> clazz, ExcelListener<T> listener);
+    <T> ExcelResultRes importExcel(InputStream inputStream, String name, Class<T> clazz, ExcelListener<T> listener);
 
 
     /**
@@ -31,5 +31,5 @@ public interface IExcelService {
      * @param sheetName 工作表的名称
      * @param clazz     实体类
      */
-    <T> ExcelResultRes exportExcel(List<T> list, String sheetName, Class<T> clazz, HttpServletResponse response);
+    <T> ExcelResultRes exportExcel(List<T> list, String sheetName, Class<T> clazz);
 }

+ 29 - 26
eco-common/common-excel/src/main/java/org/eco/common/excel/service/impl/ExcelService.java

@@ -1,8 +1,8 @@
 package org.eco.common.excel.service.impl;
 
+import cn.hutool.core.io.IoUtil;
 import com.alibaba.excel.EasyExcel;
 import jakarta.annotation.Resource;
-import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.eco.common.core.core.domain.UploadRes;
 import org.eco.common.core.service.OssService;
@@ -11,9 +11,9 @@ import org.eco.common.excel.entity.ExcelResultRes;
 import org.eco.common.excel.service.IExcelService;
 import org.eco.common.excel.utils.ExcelUtil;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.util.List;
 
@@ -30,31 +30,34 @@ public class ExcelService implements IExcelService {
     private OssService ossService;
 
     @Override
-    public <T> ExcelResultRes importExcel(MultipartFile file, Class<T> clazz, ExcelListener<T> listener) {
-        log.info("ExcelResultRes00000000000000000000000000000000");
-        InputStream inputStream;
-        try {
-            inputStream = file.getInputStream();
-            String originalFilename = file.getOriginalFilename();
-            byte[] bytes = file.getBytes();
-            UploadRes uploadRes = ossService.upload(bytes, originalFilename);
-            EasyExcel.read(inputStream, clazz, listener).sheet().doReadSync();
-            log.info("错误信息:{}", listener.getExcelResult().getAnalysis().getLogInfo());
-            log.info("状态:{}", listener.getExcelResult().getAnalysis().getStatus());
-            ExcelResultRes res = listener.getExcelResult().getAnalysis();
-            res.setName(uploadRes.getName());
-            res.setUrl(uploadRes.getUrl());
-            return res;
-        } catch (IOException e) {
-            log.error("异步导入失败:{}", e.getMessage());
-        }
-        log.info("ExcelResultRes11111111111111111111111111111111");
-        return null;
+    public <T> ExcelResultRes importExcel(InputStream inputStream, String name, Class<T> clazz, ExcelListener<T> listener) {
+        log.info("开始异步导入");
+        byte[] bytes = IoUtil.readBytes(inputStream);
+        InputStream copyInputStream = new ByteArrayInputStream(bytes);
+        EasyExcel.read(copyInputStream, clazz, listener).sheet().doReadSync();
+        UploadRes uploadRes = ossService.upload(bytes, name);
+        ExcelResultRes res = listener.getExcelResult().getAnalysis();
+        res.setName(uploadRes.getName());
+        res.setUrl(uploadRes.getUrl());
+        res.setOssId(uploadRes.getOssId());
+        log.info("错误信息:{}", res.getLogInfo());
+        log.info("状态:{}", res.getStatus());
+        log.info("异步导入结束");
+        return res;
     }
 
     @Override
-    public <T> ExcelResultRes exportExcel(List<T> list, String sheetName, Class<T> clazz, HttpServletResponse response) {
-        ExcelUtil.exportExcel(list, sheetName, clazz, response);
-        return null;
+    public <T> ExcelResultRes exportExcel(List<T> list, String sheetName, Class<T> clazz) {
+        log.info("开始异步导出");
+        try {
+            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+            byte[] bytes = ExcelUtil.exportExcel(list, sheetName, clazz, false, byteArrayOutputStream, null);
+            UploadRes uploadRes = ossService.upload(bytes, ExcelUtil.encodingFilename(sheetName));
+            log.info("异步导出结束");
+            return ExcelResultRes.builder().name(uploadRes.getName()).url(uploadRes.getUrl()).status("1").ossId(uploadRes.getOssId()).logInfo("导出成功").build();
+        } catch (Exception e) {
+            log.error("异步导出失败:{}", e.getMessage());
+            return ExcelResultRes.builder().status("0").logInfo("导出失败").build();
+        }
     }
 }

+ 24 - 0
eco-common/common-excel/src/main/java/org/eco/common/excel/utils/ExcelUtil.java

@@ -24,6 +24,7 @@ import org.eco.common.excel.core.ExcelDownHandler;
 import org.eco.common.excel.core.ExcelListener;
 import org.eco.common.excel.core.ExcelResult;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -206,6 +207,29 @@ public class ExcelUtil {
         builder.doWrite(list);
     }
 
+    public static <T> byte[] exportExcel(List<T> list, String sheetName, Class<T> clazz, boolean merge,
+                                         ByteArrayOutputStream os, List<DropDownOptions> options) {
+        excelWriterSheetBuilder(list, sheetName, clazz, merge, os, options);
+        return os.toByteArray();
+    }
+
+    private static <T> void excelWriterSheetBuilder(List<T> list, String sheetName, Class<T> clazz, boolean merge, ByteArrayOutputStream os, List<DropDownOptions> options) {
+        ExcelWriterSheetBuilder builder = EasyExcel.write(os, clazz)
+            .autoCloseStream(false)
+            // 自动适配
+            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+            // 大数值自动转换 防止失真
+            .registerConverter(new ExcelBigNumberConvert())
+            .sheet(sheetName);
+        if (merge) {
+            // 合并处理器
+            builder.registerWriteHandler(new CellMergeStrategy(list, true));
+        }
+        // 添加下拉框操作
+        builder.registerWriteHandler(new ExcelDownHandler(options));
+        builder.doWrite(list);
+    }
+
     /**
      * 单表多数据模板导出 模板格式为 {.属性}
      *

+ 0 - 35
eco-modules/system/src/main/java/org/eco/system/controller/system/ImportExportController.java

@@ -2,14 +2,9 @@ package org.eco.system.controller.system;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import jakarta.annotation.Resource;
-import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import org.eco.common.core.core.domain.CommonResult;
 import org.eco.common.core.core.page.PageResult;
-import org.eco.common.excel.utils.ExcelUtil;
-import org.eco.common.log.annotation.Log;
-import org.eco.common.log.enums.BusinessType;
-import org.eco.common.web.annotation.RepeatSubmit;
 import org.eco.common.web.core.BaseController;
 import org.eco.system.domain.bo.ImportExportBo;
 import org.eco.system.domain.vo.ImportExportVo;
@@ -17,13 +12,9 @@ import org.eco.system.service.IImportExportService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
-
 /**
  * 导入导出日志Controller
  *
@@ -47,17 +38,6 @@ public class ImportExportController extends BaseController {
         return CommonResult.success(importExportService.selectPage(importExportBo));
     }
 
-    /**
-     * 导出导入导出日志列表
-     */
-    @SaCheckPermission("system:importExport:export")
-    @Log(title = "导入导出日志" , businessType = BusinessType.EXPORT)
-    @PostMapping("/export")
-    public void export(HttpServletResponse response, ImportExportBo importExportBo) {
-        List<ImportExportVo> list = importExportService.selectList(importExportBo);
-        ExcelUtil.exportExcel(list, "导入导出日志" , ImportExportVo.class, response);
-    }
-
     /**
      * 获取导入导出日志详细信息
      */
@@ -66,19 +46,4 @@ public class ImportExportController extends BaseController {
     public CommonResult<ImportExportVo> getInfo(@PathVariable Long id) {
         return CommonResult.success(importExportService.selectById(id));
     }
-
-    /**
-     * 新增导入导出日志
-     */
-    @SaCheckPermission("system:importExport:add")
-    @Log(title = "导入导出日志" , businessType = BusinessType.INSERT)
-    @RepeatSubmit()
-    @PostMapping
-    public CommonResult<Void> add(@Validated @RequestBody ImportExportBo importExportBo) {
-        boolean inserted = importExportService.insert(importExportBo);
-        if (!inserted) {
-            return CommonResult.fail("新增导入导出日志记录失败!");
-        }
-        return CommonResult.success();
-    }
 }

+ 15 - 5
eco-modules/system/src/main/java/org/eco/system/controller/system/SysUserController.java

@@ -20,7 +20,6 @@ import org.eco.common.core.utils.StreamUtils;
 import org.eco.common.core.utils.StringUtils;
 import org.eco.common.encrypt.annotation.ApiEncrypt;
 import org.eco.common.excel.core.ExcelResult;
-import org.eco.common.excel.service.IExcelService;
 import org.eco.common.excel.utils.ExcelUtil;
 import org.eco.common.log.annotation.Log;
 import org.eco.common.log.enums.BusinessType;
@@ -93,7 +92,21 @@ public class SysUserController extends BaseController {
     @Log(title = "用户管理", businessType = BusinessType.EXPORT)
     @SaCheckPermission("system:user:export")
     @PostMapping("/export")
-    public void export(HttpServletResponse response, SysUserBo userBo) {
+    public CommonResult<Void> asyncExport(SysUserBo userBo) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        List<SysUserVo> list = userService.selectUserList(userBo);
+        List<SysUserExportVo> listVo = MapstructUtils.convert(list, SysUserExportVo.class);
+        userService.asyncExport(listVo, "用户数据", loginUser);
+        return CommonResult.success();
+    }
+
+    /**
+     * 导出用户列表
+     */
+    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
+    @SaCheckPermission("system:user:export")
+    @PostMapping("/syncExport")
+    public void syncExport(HttpServletResponse response, SysUserBo userBo) {
         List<SysUserVo> list = userService.selectUserList(userBo);
         List<SysUserExportVo> listVo = MapstructUtils.convert(list, SysUserExportVo.class);
         ExcelUtil.exportExcel(listVo, "用户数据", SysUserExportVo.class, response);
@@ -109,11 +122,8 @@ public class SysUserController extends BaseController {
     @SaCheckPermission("system:user:import")
     @PostMapping("/importData")
     public CommonResult<Void> asyncImportData(MultipartFile file, boolean updateSupport) {
-        log.info("00000000000000000000000000");
         LoginUser loginUser = LoginHelper.getLoginUser();
-//        excelService.importExcel(file, SysUserImportVo.class, new SysUserImportListener(updateSupport, loginUser));
         userService.asyncImportData(file, updateSupport, loginUser);
-        log.info("11111111111111111111111111111111");
         return CommonResult.success();
     }
 

+ 10 - 0
eco-modules/system/src/main/java/org/eco/system/domain/ImportExport.java

@@ -27,6 +27,11 @@ public class ImportExport extends BaseEntity {
     @Id
     private Long id;
 
+    /**
+     * 类型(0导入 1导出)
+     */
+    private String type;
+
     /**
      * 文件名称
      */
@@ -37,6 +42,11 @@ public class ImportExport extends BaseEntity {
      */
     private String url;
 
+    /**
+     * 状态
+     */
+    private Long ossId;
+
     /**
      * 日志信息
      */

+ 10 - 0
eco-modules/system/src/main/java/org/eco/system/domain/bo/ImportExportBo.java

@@ -21,6 +21,11 @@ public class ImportExportBo extends BaseEntity {
      */
     private Long id;
 
+    /**
+     * 类型(0导入 1导出)
+     */
+    private String type;
+
     /**
      * 文件名称
      */
@@ -41,5 +46,10 @@ public class ImportExportBo extends BaseEntity {
      */
     private String url;
 
+    /**
+     * 状态
+     */
+    private Long ossId;
+
 
 }

+ 0 - 50
eco-modules/system/src/main/java/org/eco/system/domain/vo/ImportExportImportVo.java

@@ -1,50 +0,0 @@
-package org.eco.system.domain.vo;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * 导入导出日志导入视图对象 sys_import_export_t
- *
- * @author wgk
- * @date 2024-06-24
- */
-
-@Data
-@NoArgsConstructor
-public class ImportExportImportVo implements Serializable {
-
-    @Serial
-    private static final long serialVersionUID = 1L;
-
-
-    /**
-     * 唯一编码
-     */
-    @ExcelProperty(value = "唯一编码")
-    private Long id;
-
-    /**
-     * 文件名称
-     */
-    @ExcelProperty(value = "文件名称")
-    private String name;
-
-    /**
-     * 日志信息
-     */
-    @ExcelProperty(value = "日志信息")
-    private String logInfo;
-
-    /**
-     * 状态
-     */
-    @ExcelProperty(value = "状态")
-    private Integer status;
-
-
-}

+ 10 - 0
eco-modules/system/src/main/java/org/eco/system/domain/vo/ImportExportVo.java

@@ -32,6 +32,16 @@ public class ImportExportVo extends BaseEntity implements Serializable {
     @ExcelProperty(value = "唯一编码")
     private Long id;
 
+    /**
+     * 类型(0导入 1导出)
+     */
+    private String type;
+
+    /**
+     * 状态
+     */
+    private Long ossId;
+
     /**
      * 文件名称
      */

+ 1 - 1
eco-modules/system/src/main/java/org/eco/system/listener/SysUserImportListener.java

@@ -142,7 +142,7 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
                     return ExcelResultRes.builder().logInfo(failureMsg.toString()).status("0").build();
                 } else if (failureNum > 0 && successNum > 0) {
                     failureMsg.insert(0, "很抱歉,部分导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
-                    return ExcelResultRes.builder().logInfo(failureMsg.toString()).status("99").build();
+                    return ExcelResultRes.builder().logInfo(failureMsg.toString()).status("2").build();
                 } else {
                     successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
                     return ExcelResultRes.builder().logInfo(successMsg.toString()).status("1").build();

+ 10 - 0
eco-modules/system/src/main/java/org/eco/system/service/IImportExportService.java

@@ -1,6 +1,7 @@
 package org.eco.system.service;
 
 import org.eco.common.core.core.page.PageResult;
+import org.eco.common.excel.entity.ExcelResultRes;
 import org.eco.common.orm.core.service.IBaseService;
 import org.eco.system.domain.ImportExport;
 import org.eco.system.domain.bo.ImportExportBo;
@@ -47,4 +48,13 @@ public interface IImportExportService extends IBaseService<ImportExport> {
      */
     boolean insert(ImportExportBo importExportBo);
 
+    /**
+     * 新增导入导出日志
+     *
+     * @param resultRes 导入导出日志
+     * @param type      导入导出类型
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    boolean saveInfo(ExcelResultRes resultRes, String type);
+
 }

+ 21 - 1
eco-modules/system/src/main/java/org/eco/system/service/ISysUserService.java

@@ -5,7 +5,9 @@ import org.eco.common.core.core.page.PageResult;
 import org.eco.common.orm.core.service.IBaseService;
 import org.eco.system.domain.SysUser;
 import org.eco.system.domain.bo.SysUserBo;
+import org.eco.system.domain.vo.SysUserExportVo;
 import org.eco.system.domain.vo.SysUserVo;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -228,10 +230,28 @@ public interface ISysUserService extends IBaseService<SysUser> {
     /**
      * 通过部门id查询当前部门所有用户
      *
-     * @param deptId
+     * @param deptId 部门ID
      * @return 用户vo列表
      */
     List<SysUserVo> selectUserListByDept(Long deptId);
 
+    /**
+     * 异步导入
+     *
+     * @param file          导入的文件
+     * @param updateSupport 是否覆盖
+     * @param user          用户上下文信息
+     */
+    @Async
     void asyncImportData(MultipartFile file, boolean updateSupport, LoginUser user);
+
+    /**
+     * asyncExport 异步导出
+     *
+     * @param listVo    数据列表
+     * @param sheetName 文件名称
+     * @param user      上下文
+     */
+    @Async
+    void asyncExport(List<SysUserExportVo> listVo, String sheetName, LoginUser user);
 }

+ 21 - 6
eco-modules/system/src/main/java/org/eco/system/service/impl/ImportExportServiceImpl.java

@@ -4,6 +4,7 @@ import com.mybatisflex.core.paginate.Page;
 import com.mybatisflex.core.query.QueryWrapper;
 import org.eco.common.core.core.page.PageResult;
 import org.eco.common.core.utils.MapstructUtils;
+import org.eco.common.excel.entity.ExcelResultRes;
 import org.eco.common.orm.core.page.PageQuery;
 import org.eco.common.orm.core.service.impl.BaseServiceImpl;
 import org.eco.system.domain.ImportExport;
@@ -12,6 +13,7 @@ import org.eco.system.domain.vo.ImportExportVo;
 import org.eco.system.mapper.ImportExportMapper;
 import org.eco.system.service.IImportExportService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -33,12 +35,11 @@ public class ImportExportServiceImpl extends BaseServiceImpl<ImportExportMapper,
 
     private QueryWrapper buildQueryWrapper(ImportExportBo importExportBo) {
         QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
-        queryWrapper.and(IMPORT_EXPORT.NAME.like
-            (importExportBo.getName()));
-        queryWrapper.and(IMPORT_EXPORT.LOG_INFO.eq
-            (importExportBo.getLogInfo()));
-        queryWrapper.and(IMPORT_EXPORT.STATUS.eq
-            (importExportBo.getStatus()));
+        queryWrapper.and(IMPORT_EXPORT.NAME.like(importExportBo.getName()));
+        queryWrapper.and(IMPORT_EXPORT.LOG_INFO.eq(importExportBo.getLogInfo()));
+        queryWrapper.and(IMPORT_EXPORT.STATUS.eq(importExportBo.getStatus()));
+        queryWrapper.and(IMPORT_EXPORT.TYPE.eq(importExportBo.getType()));
+        queryWrapper.orderBy(IMPORT_EXPORT.UPDATE_TIME.desc());
         return queryWrapper;
     }
 
@@ -91,4 +92,18 @@ public class ImportExportServiceImpl extends BaseServiceImpl<ImportExportMapper,
         return this.save(importExport);//使用全局配置的雪花算法主键生成器生成ID值
     }
 
+    @Override
+    @Transactional
+    public boolean saveInfo(ExcelResultRes resultRes, String type) {
+        ImportExportBo importExportBo = new ImportExportBo();
+        importExportBo.setOssId(resultRes.getOssId());
+        importExportBo.setUrl(resultRes.getUrl());
+        importExportBo.setType(type); // 导入
+        importExportBo.setStatus(resultRes.getStatus());
+        importExportBo.setName(resultRes.getName());
+        importExportBo.setLogInfo(resultRes.getLogInfo());
+        ImportExport importExport = MapstructUtils.convert(importExportBo, ImportExport.class);
+        return this.save(importExport);//使用全局配置的雪花算法主键生成器生成ID值
+    }
+
 }

+ 2 - 2
eco-modules/system/src/main/java/org/eco/system/service/impl/SysOssServiceImpl.java

@@ -166,8 +166,8 @@ public class SysOssServiceImpl extends BaseServiceImpl<SysOssMapper, SysOss> imp
         String suffix = StringUtils.substring(name, name.lastIndexOf("."), name.length());
         OssClient storage = OssFactory.instance();
         UploadResult uploadResult = storage.uploadSuffix(file, suffix);
-        buildResultEntity(name, suffix, storage.getConfigKey(), uploadResult);
-        return UploadRes.builder().name(name).url(uploadResult.getUrl()).build();
+        SysOssVo ossVo = buildResultEntity(name, suffix, storage.getConfigKey(), uploadResult);
+        return UploadRes.builder().name(name).url(uploadResult.getUrl()).ossId(ossVo.getOssId()).build();
     }
 
     @Override

+ 33 - 12
eco-modules/system/src/main/java/org/eco/system/service/impl/SysUserServiceImpl.java

@@ -6,7 +6,6 @@ import com.mybatisflex.core.query.QueryMethods;
 import com.mybatisflex.core.query.QueryWrapper;
 import com.mybatisflex.core.update.UpdateChain;
 import jakarta.annotation.Resource;
-import jakarta.validation.Validator;
 import lombok.extern.slf4j.Slf4j;
 import org.eco.common.core.constant.CacheNames;
 import org.eco.common.core.constant.UserConstants;
@@ -17,6 +16,7 @@ import org.eco.common.core.service.UserService;
 import org.eco.common.core.utils.MapstructUtils;
 import org.eco.common.core.utils.SpringUtils;
 import org.eco.common.core.utils.StringUtils;
+import org.eco.common.core.utils.bean.BeanUtils;
 import org.eco.common.excel.entity.ExcelResultRes;
 import org.eco.common.excel.service.IExcelService;
 import org.eco.common.orm.core.page.PageQuery;
@@ -29,6 +29,7 @@ import org.eco.system.domain.bo.ImportExportBo;
 import org.eco.system.domain.bo.SysUserBo;
 import org.eco.system.domain.vo.SysPostVo;
 import org.eco.system.domain.vo.SysRoleVo;
+import org.eco.system.domain.vo.SysUserExportVo;
 import org.eco.system.domain.vo.SysUserImportVo;
 import org.eco.system.domain.vo.SysUserVo;
 import org.eco.system.listener.SysUserImportListener;
@@ -41,12 +42,12 @@ import org.eco.system.service.ISysUserPostService;
 import org.eco.system.service.ISysUserRoleService;
 import org.eco.system.service.ISysUserService;
 import org.springframework.cache.annotation.Cacheable;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -659,16 +660,36 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser>
     }
 
     @Override
-    @Async
     public void asyncImportData(MultipartFile file, boolean updateSupport, LoginUser loginUser) {
-        log.info("asyncImportData000000000000000000000000000000000000000");
-        ExcelResultRes result = excelService.importExcel(file, SysUserImportVo.class, new SysUserImportListener(updateSupport, loginUser));
-        ImportExportBo importExportBo = new ImportExportBo();
-        importExportBo.setUrl(result.getUrl());
-        importExportBo.setStatus(result.getStatus());
-        importExportBo.setName(result.getName());
-        importExportBo.setLogInfo(result.getLogInfo());
-        importExportService.insert(importExportBo);
-        log.info("asyncImportData1111111111111111111111111111111111111111");
+        ExcelResultRes result;
+        try {
+            String name = file.getOriginalFilename();
+            result = excelService.importExcel(file.getInputStream(), name, SysUserImportVo.class, new SysUserImportListener(updateSupport, loginUser));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ImportExportBo bo = new ImportExportBo();
+        BeanUtils.copyProperties(result, bo);
+        bo.setUpdateBy(loginUser.getUserId());
+        bo.setCreateBy(loginUser.getUserId());
+        bo.setType("0");
+        boolean flag = importExportService.insert(bo);
+        if (flag) {
+            log.info("异步导入日志写入成功");
+        }
+    }
+
+    @Override
+    public void asyncExport(List<SysUserExportVo> listVo, String sheetName, LoginUser loginUser) {
+        ExcelResultRes result = excelService.exportExcel(listVo, sheetName, SysUserExportVo.class);
+        ImportExportBo bo = new ImportExportBo();
+        BeanUtils.copyProperties(result, bo);
+        bo.setUpdateBy(loginUser.getUserId());
+        bo.setCreateBy(loginUser.getUserId());
+        bo.setType("1");
+        boolean flag = importExportService.insert(bo);
+        if (flag) {
+            log.info("异步导出日志写入成功");
+        }
     }
 }