Pārlūkot izejas kodu

加入文件下载,预览,模版下载

wangliang 1 gadu atpakaļ
vecāks
revīzija
578b785743

+ 11 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/TaskListResult.java

@@ -51,6 +51,17 @@ public class TaskListResult implements Serializable {
     @ApiModelProperty(value = "是否有报告文件")
     Boolean hasReportFile;
 
+    @ApiModelProperty(value = "下载文件类型")
+    private String downloadType;
+
+    public String getDownloadType() {
+        return downloadType;
+    }
+
+    public void setDownloadType(String downloadType) {
+        this.downloadType = downloadType;
+    }
+
     public Long getId() {
         return id;
     }

+ 32 - 4
sop-business/src/main/java/com/qmth/sop/business/util/ImportExportUtil.java

@@ -7,16 +7,17 @@ import com.qmth.sop.business.entity.TBTask;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.UploadFileEnum;
 import com.qmth.sop.common.util.FileStoreUtil;
+import com.qmth.sop.common.util.ServletUtil;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
 import java.util.Objects;
 import java.util.StringJoiner;
 
@@ -29,6 +30,7 @@ import java.util.StringJoiner;
  */
 @Component
 public class ImportExportUtil {
+    private final static Logger log = LoggerFactory.getLogger(ImportExportUtil.class);
 
     @Resource
     FileStoreUtil fileStoreUtil;
@@ -86,4 +88,30 @@ public class ImportExportUtil {
         UploadFileEnum uploadType = Enum.valueOf(UploadFileEnum.class, (String) jsonObject.get(SystemConstant.UPLOAD_TYPE));
         return fileStoreUtil.ossDownloadIs(path, uploadType.getFssType());
     }
+
+    /**
+     * 输出文件
+     *
+     * @param inputStream
+     * @param fileName
+     */
+    public void outputFile(InputStream inputStream, String fileName) throws IOException {
+        try {
+            HttpServletResponse response = ServletUtil.getResponse();
+            BufferedInputStream br = new BufferedInputStream(inputStream);
+            String fName = SystemConstant.urlEncode(fileName);
+
+            response.reset();
+            response.setContentType("application/x-msdownload");
+            response.setHeader("Content-Disposition", "attachment; filename=" + fName);
+            IOUtils.copy(br, response.getOutputStream());
+            br.close();
+        } catch (IOException e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        } finally {
+            if (Objects.nonNull(inputStream)) {
+                inputStream.close();
+            }
+        }
+    }
 }

+ 1 - 0
sop-common/src/main/java/com/qmth/sop/common/contant/SystemConstant.java

@@ -78,6 +78,7 @@ public class SystemConstant {
     public static final int PAGE_SIZE_MIN = 10;
     public static final int PAGE_SIZE_MAX = 500;
     public static final int PAGE_NUMBER_MIN = 1;
+    public static final String STATIC = "static";
 
     /**
      * 系统配置

+ 44 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/DownloadFileEnum.java

@@ -0,0 +1,44 @@
+package com.qmth.sop.common.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 下载文件enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/4/6
+ */
+public enum DownloadFileEnum {
+
+    IMPORT_FILE("导入文件"),
+
+    REPORT_FILE("任务报告文件"),
+
+    EXPORT_FILE("导出文件");
+
+    private String title;
+
+    private DownloadFileEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param value
+     * @return
+     */
+    public static String convertToName(String value) {
+        for (DownloadFileEnum e : DownloadFileEnum.values()) {
+            if (Objects.equals(value.trim(), e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 5 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/ExceptionResultEnum.java

@@ -35,7 +35,11 @@ public enum ExceptionResultEnum {
      */
     ATTACHMENT_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, 5000001, "上传文件失败"),
 
-    ATTACHMENT_NO_DATA(HttpStatus.INTERNAL_SERVER_ERROR, 5000002, "没有附件数据"),
+    TASK_NO_DATA(HttpStatus.INTERNAL_SERVER_ERROR, 5000002, "任务不存在"),
+
+    PATH_NO_DATA(HttpStatus.INTERNAL_SERVER_ERROR, 5000003, "文件地址不存在"),
+
+    ATTACHMENT_NO_DATA(HttpStatus.INTERNAL_SERVER_ERROR, 5000004, "没有附件数据"),
 
     USER_NO_DATA(HttpStatus.INTERNAL_SERVER_ERROR, 5000009, "用户或密码不正确"),
 

+ 29 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/ImportTemplateEnum.java

@@ -0,0 +1,29 @@
+package com.qmth.sop.common.enums;
+
+/**
+ * @Description: 模板下载类型
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2023/8/1
+ */
+public enum ImportTemplateEnum {
+
+    TEMPLATE_USE_ARCHIVES("user_archives.xlsx", "人员档案导入模板.xlsx");
+
+    ImportTemplateEnum(String templateName, String fileName) {
+        this.templateName = templateName;
+        this.fileName = fileName;
+    }
+
+    private final String templateName;
+    private final String fileName;
+
+    public String getTemplateName() {
+        return templateName;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+}

+ 55 - 14
sop-server/src/main/java/com/qmth/sop/server/api/SysController.java

@@ -12,13 +12,13 @@ import com.qmth.sop.business.cache.CommonCacheService;
 import com.qmth.sop.business.entity.BasicAttachment;
 import com.qmth.sop.business.entity.SysConfig;
 import com.qmth.sop.business.entity.SysUser;
+import com.qmth.sop.business.entity.TBTask;
 import com.qmth.sop.business.service.BasicAttachmentService;
 import com.qmth.sop.business.service.SysUserService;
+import com.qmth.sop.business.service.TBTaskService;
+import com.qmth.sop.business.util.ImportExportUtil;
 import com.qmth.sop.common.contant.SystemConstant;
-import com.qmth.sop.common.enums.AppSourceEnum;
-import com.qmth.sop.common.enums.ExceptionResultEnum;
-import com.qmth.sop.common.enums.LoginTypeEnum;
-import com.qmth.sop.common.enums.UploadFileEnum;
+import com.qmth.sop.common.enums.*;
 import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
 import com.qmth.sop.common.util.ServletUtil;
@@ -33,12 +33,16 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -64,6 +68,12 @@ public class SysController {
     @Resource
     BasicAttachmentService basicAttachmentService;
 
+    @Resource
+    ImportExportUtil importExportUtil;
+
+    @Resource
+    TBTaskService tbTaskService;
+
     @ApiOperation(value = "登录")
     @RequestMapping(value = "/login", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
@@ -145,14 +155,45 @@ public class SysController {
     @ApiOperation(value = "下载导入模板")
     @RequestMapping(value = "/download_import_template", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
-    public void downloadImportTemplate(@RequestParam(value = "type") String type, HttpServletResponse response) {
-//        List<String> templateEnums = Stream.of(ImportTemplateEnum.values()).map(m -> m.name()).collect(Collectors.toList());
-//        if (!templateEnums.contains(type)) {
-//            throw ExceptionResultEnum.ERROR.exception("不支持的模板类型");
-//        }
-//        ImportTemplateEnum importTemplateEnum = ImportTemplateEnum.valueOf(type);
-//        InputStream inputStream = this.getClass().getResourceAsStream(File.separator + "temps" + File.separator + importTemplateEnum.getTemplateName());
-//        // 导出
-//        FileUtil.outputFile(response, inputStream, importTemplateEnum.getFileName());
+    public void downloadImportTemplate(@ApiParam(value = "模版类型", required = true) @RequestParam ImportTemplateEnum type) throws IOException {
+        List<ImportTemplateEnum> templateEnums = Stream.of(ImportTemplateEnum.values()).map(m -> m).collect(Collectors.toList());
+        if (!templateEnums.contains(type)) {
+            throw ExceptionResultEnum.ERROR.exception("不支持的模板类型");
+        }
+        InputStream inputStream = this.getClass().getResourceAsStream(File.separator + SystemConstant.STATIC + File.separator + type.getTemplateName());
+        // 导出
+        importExportUtil.outputFile(inputStream, type.getFileName());
+    }
+
+    @ApiOperation(value = "文件下载接口")
+    @RequestMapping(value = "/file/download", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    public Result fileDownload(@ApiParam(value = "任务id", required = true) @RequestParam Long taskId,
+                               @ApiParam(value = "下载文件类型", required = true) @RequestParam DownloadFileEnum type) throws Exception {
+        TBTask tbTask = tbTaskService.getById(taskId);
+        Optional.ofNullable(tbTask).orElseThrow(() -> ExceptionResultEnum.TASK_NO_DATA.exception());
+        String path = null;
+        switch (type) {
+            case IMPORT_FILE:
+                path = tbTask.getImportFilePath();
+                break;
+            case REPORT_FILE:
+                path = tbTask.getReportFilePath();
+                break;
+            case EXPORT_FILE:
+                path = tbTask.getResultFilePath();
+                break;
+            default:
+                break;
+        }
+        Optional.ofNullable(path).orElseThrow(() -> ExceptionResultEnum.PATH_NO_DATA.exception());
+        return ResultUtil.ok(new EditResult(basicAttachmentService.filePreview(path)));
+    }
+
+    @ApiOperation(value = "文件预览接口")
+    @RequestMapping(value = "/file/preview", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    public Result filePreview(@ApiParam(value = "附件id", required = true) @RequestParam Long id) throws Exception {
+        return ResultUtil.ok(new EditResult(basicAttachmentService.filePreview(id)));
     }
 }

+ 14 - 1
sop-server/src/main/java/com/qmth/sop/server/api/TBTaskController.java

@@ -1,16 +1,19 @@
 package com.qmth.sop.server.api;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.sop.business.bean.result.TaskListResult;
 import com.qmth.sop.business.service.TBTaskService;
 import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.DownloadFileEnum;
 import com.qmth.sop.common.enums.TaskResultEnum;
 import com.qmth.sop.common.enums.TaskStatusEnum;
 import com.qmth.sop.common.enums.TaskTypeEnum;
 import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
 import io.swagger.annotations.*;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -20,6 +23,8 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * <p>
@@ -46,6 +51,14 @@ public class TBTaskController {
                             @ApiParam(value = "任务数据结果", required = false) @RequestParam(required = false) TaskResultEnum result,
                             @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                             @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(tbTaskService.query(new Page<>(pageNumber, pageSize), status, type, result));
+        IPage<TaskListResult> taskListResultIPage = tbTaskService.query(new Page<>(pageNumber, pageSize), status, type, result);
+        if (Objects.nonNull(taskListResultIPage) && !CollectionUtils.isEmpty(taskListResultIPage.getRecords())) {
+            List<TaskListResult> taskListResultList = taskListResultIPage.getRecords();
+            for (TaskListResult taskListResult : taskListResultList) {
+                // 下载类型
+                taskListResult.setDownloadType(taskListResult.getHasImportFile() ? DownloadFileEnum.IMPORT_FILE.name() : DownloadFileEnum.EXPORT_FILE.name());
+            }
+        }
+        return ResultUtil.ok(taskListResultIPage);
     }
 }