From fe092c66a30125a491a9be59c531d32cfdc9dec2 Mon Sep 17 00:00:00 2001 From: wj <1285151836@qq.com> Date: Thu, 27 Apr 2023 15:45:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/glxp/api/constant/StatusEnum.java | 25 +++++++ .../sync/SpsSyncDownloadController.java | 69 +++++++++++++++++-- .../glxp/api/dao/sync/BasicDownloadDao.java | 3 +- .../service/sync/BasicDownloadService.java | 3 +- .../sync/impl/BasicDownloadServiceImpl.java | 3 +- 5 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/glxp/api/constant/StatusEnum.java diff --git a/src/main/java/com/glxp/api/constant/StatusEnum.java b/src/main/java/com/glxp/api/constant/StatusEnum.java new file mode 100644 index 00000000..f0419a24 --- /dev/null +++ b/src/main/java/com/glxp/api/constant/StatusEnum.java @@ -0,0 +1,25 @@ +package com.glxp.api.constant; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum StatusEnum { + + /** + * 失败 + */ + FAILED(1, "失败"), + + /** + * 成功 + */ + SUCCESS(2, "成功"), + ; + @EnumValue + private Integer code; + + private String remark; +} diff --git a/src/main/java/com/glxp/api/controller/sync/SpsSyncDownloadController.java b/src/main/java/com/glxp/api/controller/sync/SpsSyncDownloadController.java index d62a333c..bda287de 100644 --- a/src/main/java/com/glxp/api/controller/sync/SpsSyncDownloadController.java +++ b/src/main/java/com/glxp/api/controller/sync/SpsSyncDownloadController.java @@ -12,10 +12,7 @@ import com.glxp.api.annotation.AuthRuleAnnotation; import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; -import com.glxp.api.constant.BasicExportStatusEnum; -import com.glxp.api.constant.BasicExportTypeEnum; -import com.glxp.api.constant.BasicProcessStatus; -import com.glxp.api.constant.ConstantStatus; +import com.glxp.api.constant.*; import com.glxp.api.dao.auth.*; import com.glxp.api.dao.basic.*; import com.glxp.api.dao.inout.*; @@ -62,8 +59,12 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.*; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.List; @@ -359,7 +360,7 @@ public class SpsSyncDownloadController { .taskId(taskId) .startTime(new Date()) .endTime(new Date()) - .status(1) + .status(StatusEnum.SUCCESS.getCode()) .updateTime(new Date()) .type(upLoadRequest.getExportType().getRemark()) .idDatas(upLoadRequest.getExportType().getKey()) @@ -1142,5 +1143,63 @@ public class SpsSyncDownloadController { return ResultVOUtils.success("上传成功"); } + @GetMapping("/sps/sync/download/info/file") + public void downloadFile(HttpServletResponse response,String id){ + if (StrUtil.isBlank(id)) { + throw new RuntimeException("缺少唯一标识"); + } + BasicDownloadStatusEntity info = basicDownloadService.getById(id); + if (info == null) { + throw new RuntimeException("数据不存在"); + } + if (StrUtil.isBlank(info.getCacheFilePath())) { + throw new RuntimeException("文件未生成"); + } + File file = new File(info.getCacheFilePath()); + if (!file.exists()) { + throw new RuntimeException("文件丢失"); + } + String[] split = info.getCacheFilePath().split("/"); + String enFileName = URLEncoder.encode(split[split.length - 1], StandardCharsets.UTF_8); + // 设值返回文件属性,浏览器会根据属性调用下载文件方法 + response.addHeader("Content-Disposition", "attachment;filename=" + enFileName); + // 前端获取文件名,需要解码 + response.addHeader("downLoadName", enFileName); + // 定义输出流 + ServletOutputStream outputStream = null; + FileInputStream fileInputStream = null; + try { + outputStream = response.getOutputStream(); + // 定义输出类型为二进制流输出 + response.setContentType("application/octet-stream"); + fileInputStream = new FileInputStream(file); + byte[] bytes = new byte[fileInputStream.available()]; + fileInputStream.read(bytes); + // 把流写入response + outputStream.write(bytes); + // flush落盘 + outputStream.flush(); + // 关闭输出流 + outputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + if (fileInputStream != null) { + try { + fileInputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + } diff --git a/src/main/java/com/glxp/api/dao/sync/BasicDownloadDao.java b/src/main/java/com/glxp/api/dao/sync/BasicDownloadDao.java index 2e0184ff..f6f98834 100644 --- a/src/main/java/com/glxp/api/dao/sync/BasicDownloadDao.java +++ b/src/main/java/com/glxp/api/dao/sync/BasicDownloadDao.java @@ -1,5 +1,6 @@ package com.glxp.api.dao.sync; +import com.glxp.api.dao.BaseMapperPlus; import com.glxp.api.entity.sync.BasicDownloadStatusEntity; import com.glxp.api.req.sync.BasicDownloadRequest; import org.apache.ibatis.annotations.Mapper; @@ -8,7 +9,7 @@ import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper -public interface BasicDownloadDao { +public interface BasicDownloadDao extends BaseMapperPlus { List filterDownloadStatus(BasicDownloadRequest basicDownloadRequest); diff --git a/src/main/java/com/glxp/api/service/sync/BasicDownloadService.java b/src/main/java/com/glxp/api/service/sync/BasicDownloadService.java index ea56fd84..fe5b7bcd 100644 --- a/src/main/java/com/glxp/api/service/sync/BasicDownloadService.java +++ b/src/main/java/com/glxp/api/service/sync/BasicDownloadService.java @@ -1,12 +1,13 @@ package com.glxp.api.service.sync; +import com.baomidou.mybatisplus.extension.service.IService; import com.glxp.api.entity.sync.BasicDownloadStatusEntity; import com.glxp.api.req.sync.BasicDownloadRequest; import java.util.List; -public interface BasicDownloadService { +public interface BasicDownloadService extends IService { BasicDownloadStatusEntity findByData(String idDatas, Integer status); diff --git a/src/main/java/com/glxp/api/service/sync/impl/BasicDownloadServiceImpl.java b/src/main/java/com/glxp/api/service/sync/impl/BasicDownloadServiceImpl.java index 5fe827dc..6b8185d4 100644 --- a/src/main/java/com/glxp/api/service/sync/impl/BasicDownloadServiceImpl.java +++ b/src/main/java/com/glxp/api/service/sync/impl/BasicDownloadServiceImpl.java @@ -1,6 +1,7 @@ package com.glxp.api.service.sync.impl; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.glxp.api.dao.sync.BasicDownloadDao; import com.glxp.api.entity.sync.BasicDownloadStatusEntity; @@ -15,7 +16,7 @@ import java.util.List; @Service @Transactional(rollbackFor = Exception.class) -public class BasicDownloadServiceImpl implements BasicDownloadService { +public class BasicDownloadServiceImpl extends ServiceImpl implements BasicDownloadService { @Resource BasicDownloadDao basicDownloadDao;