Jelajahi Sumber

流程附件列表

陈长荣 3 bulan lalu
induk
melakukan
74a3449c17

+ 10 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/file/service/FileInfoService.java

@@ -2,6 +2,7 @@ package com.github.jfcloud.gene.file.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.jfcloud.gene.file.entity.FileInfo;
+import com.github.jfcloud.gene.file.vo.FileDetail;
 import com.github.jfcloud.gene.file.vo.FileVo;
 
 import java.io.InputStream;
@@ -11,6 +12,7 @@ public interface FileInfoService extends IService<FileInfo> {
 
     /**
      * 根据关联id查询文件信息
+     *
      * @param relateId
      * @return
      */
@@ -24,4 +26,12 @@ public interface FileInfoService extends IService<FileInfo> {
      * @return
      */
     FileVo uploadFileWithFileName(InputStream fileInputStream, String fileName);
+
+    /**
+     * 获取文件大小
+     *
+     * @param url 下载链接
+     * @return
+     */
+    FileDetail getFileSize(String url);
 }

+ 28 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/file/service/impl/FileInfoServiceImpl.java

@@ -1,7 +1,11 @@
 package com.github.jfcloud.gene.file.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.io.unit.DataSizeUtil;
 import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ReflectUtil;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.model.S3ObjectSummary;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.jfcloud.common.file.core.FileProperties;
@@ -10,6 +14,7 @@ import com.github.jfcloud.gene.common.constant.WhetherEnum;
 import com.github.jfcloud.gene.file.entity.FileInfo;
 import com.github.jfcloud.gene.file.mapper.FileInfoMapper;
 import com.github.jfcloud.gene.file.service.FileInfoService;
+import com.github.jfcloud.gene.file.vo.FileDetail;
 import com.github.jfcloud.gene.file.vo.FileVo;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -54,4 +59,27 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
         }
         return vo;
     }
+
+    @Override
+    public FileDetail getFileSize(String url) {
+        String uri = url.replace("/admin/sys-file/", "");
+        String bucketName = uri.substring(0, uri.indexOf("/"));
+        String filename = uri.substring(uri.indexOf("/") + 1);
+
+        FileDetail fileDetail = new FileDetail()
+                .setBucketName(bucketName)
+                .setFilename(filename);
+
+        //查询文件大小
+        AmazonS3 amazonS3 = (AmazonS3) ReflectUtil.getFieldValue(fileTemplate, "amazonS3");
+        List<S3ObjectSummary> apks = amazonS3.listObjects(bucketName, filename).getObjectSummaries();
+        if (!apks.isEmpty()) {
+            long contentLength = apks.get(0).getSize();
+
+            return fileDetail
+                    .setLength(contentLength)
+                    .setFileSize(DataSizeUtil.format(contentLength));
+        }
+        return fileDetail;
+    }
 }

+ 29 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/file/vo/FileDetail.java

@@ -0,0 +1,29 @@
+package com.github.jfcloud.gene.file.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 附件详情
+ */
+@Accessors(chain = true)
+@Data
+@Schema(description = "附件详情")
+public class FileDetail {
+
+    @Schema(description = "存储桶名称")
+    private String bucketName;
+
+    @Schema(description = "文件名称")
+    private String filename;
+
+    @Schema(description = "文件链接")
+    private String url;
+
+    @Schema(description = "文件大小")
+    private Long length;
+
+    @Schema(description = "文件大小描述")
+    private String fileSize;
+}

+ 18 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/flow/controller/FlowController.java

@@ -1,6 +1,7 @@
 package com.github.jfcloud.gene.flow.controller;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,10 +10,12 @@ import com.github.jfcloud.common.core.util.R;
 import com.github.jfcloud.gene.cache.UserIdNameCache;
 import com.github.jfcloud.gene.common.constant.WhetherEnum;
 import com.github.jfcloud.gene.constants.GeneStatusEnum;
+import com.github.jfcloud.gene.file.vo.FileDetail;
 import com.github.jfcloud.gene.flow.dto.FlowAuditDto;
 import com.github.jfcloud.gene.flow.dto.FlowDetailDto;
 import com.github.jfcloud.gene.flow.dto.FlowPageDto;
 import com.github.jfcloud.gene.flow.entity.FlowAudit;
+import com.github.jfcloud.gene.flow.entity.FlowInfo;
 import com.github.jfcloud.gene.flow.service.FlowAuditService;
 import com.github.jfcloud.gene.flow.service.FlowInfoService;
 import com.github.jfcloud.gene.flow.vo.FlowAuditVo;
@@ -148,4 +151,19 @@ public class FlowController {
         flowInfoService.geneWord(id);
         return R.ok();
     }
+
+    @Operation(summary = "查询流程附件")
+    @GetMapping("/file")
+    public R<List<FileDetail>> getProjectFile(@RequestParam(required = false) Long id, @RequestParam(required = false) Long kyId) {
+        Assert.isTrue(id != null || kyId != null, "参数错误");
+        FlowInfo flowInfo = flowInfoService.getOne(new LambdaQueryWrapper<>(FlowInfo.class)
+                .select(FlowInfo::getId)
+                .eq(id != null, FlowInfo::getId, id)
+                .eq(kyId != null, FlowInfo::getKyId, kyId)
+                .eq(FlowInfo::getDeleted, WhetherEnum.NO.getCode()));
+        if (flowInfo == null) {
+            return R.failed("找不到对应的流程");
+        }
+        return R.ok(flowInfoService.getFile(flowInfo.getId()));
+    }
 }

+ 11 - 0
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/flow/service/FlowInfoService.java

@@ -2,6 +2,7 @@ package com.github.jfcloud.gene.flow.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.jfcloud.gene.file.vo.FileDetail;
 import com.github.jfcloud.gene.flow.dto.FlowDetailDto;
 import com.github.jfcloud.gene.flow.dto.FlowPageDto;
 import com.github.jfcloud.gene.flow.entity.FlowInfo;
@@ -10,6 +11,8 @@ import com.github.jfcloud.gene.flow.vo.FlowDetailVo;
 import com.github.jfcloud.gene.flow.vo.FlowPageVo;
 import com.github.jfcloud.gene.flow.vo.SynProjectVo;
 
+import java.util.List;
+
 public interface FlowInfoService extends IService<FlowInfo> {
 
     /**
@@ -79,4 +82,12 @@ public interface FlowInfoService extends IService<FlowInfo> {
      * @param id
      */
     void copyFlow(Long id);
+
+    /**
+     * 查询项目附件
+     *
+     * @param id
+     * @return
+     */
+    List<FileDetail> getFile(Long id);
 }

+ 15 - 4
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/flow/service/impl/FlowInfoServiceImpl.java

@@ -24,6 +24,7 @@ import com.github.jfcloud.gene.common.util.UserUtil;
 import com.github.jfcloud.gene.constants.GeneStatusEnum;
 import com.github.jfcloud.gene.constants.GeneTargetEnum;
 import com.github.jfcloud.gene.file.service.FileInfoService;
+import com.github.jfcloud.gene.file.vo.FileDetail;
 import com.github.jfcloud.gene.file.vo.FileVo;
 import com.github.jfcloud.gene.flow.dto.FlowDetailDto;
 import com.github.jfcloud.gene.flow.dto.FlowPageDto;
@@ -64,10 +65,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -477,4 +475,17 @@ public class FlowInfoServiceImpl extends ServiceImpl<FlowInfoMapper, FlowInfo> i
         vo.setProjectName(vo.getProjectName() + "(1)");
         saveFlow(vo);
     }
+
+    @Override
+    public List<FileDetail> getFile(Long id) {
+        FileVo latestFile = fileVersionService.getLatestFile(id);
+        if (StrUtil.isBlank(latestFile.getUrl())) {
+            return Collections.emptyList();
+        }
+
+        FileDetail fileDetail = fileInfoService.getFileSize(latestFile.getUrl())
+                .setUrl(latestFile.getUrl())
+                .setFilename(latestFile.getName());
+        return Collections.singletonList(fileDetail);
+    }
 }