Преглед на файлове

根据项目获取阿里云上文件大小接口,修改项目统计接口

qianxb преди 2 години
родител
ревизия
b51194e0f9

+ 10 - 0
blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/IOSSClient.java

@@ -22,6 +22,7 @@ import org.springblade.core.tool.api.R;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -38,6 +39,8 @@ public interface IOSSClient {
     String API_PREFIX = "/client";
     String SEND_MESSAGE = API_PREFIX + "/addFileInfo";
 
+    String SEND_MESSAG1E = API_PREFIX + "/getAllFileSizeByFileUrl";
+
 
     /**
      * 通用短信发送
@@ -47,4 +50,11 @@ public interface IOSSClient {
     @PostMapping(value = SEND_MESSAGE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     R<BladeFile> addFileInfo(@RequestPart MultipartFile file);
 
+    /**
+     * // 根据文件路径,获取当前路径下所有文件的大小
+     * @return 文件大小,单位-字节B
+     */
+    @PostMapping(value = SEND_MESSAG1E, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public Long getAllFileSizeByFileUrl(@RequestBody String fileUrl);
+
 }

+ 28 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/ossre/AliossTemplateRe.java

@@ -1,5 +1,6 @@
 package org.springblade.resource.builder.ossre;
 
+import com.aliyun.oss.OSS;
 import com.aliyun.oss.OSSClient;
 import com.aliyun.oss.common.utils.BinaryUtil;
 import com.aliyun.oss.model.*;
@@ -318,6 +319,15 @@ public class AliossTemplateRe implements OssTemplateRe {
         return initResult;
     }
 
+    // 根据文件路径,获取当前路径下所有文件的大小
+    public Long getAllFileSizeByFileUrl(String fileUrl){
+        ListObjectsV2Request request = new ListObjectsV2Request(this.getBucketName()).withDelimiter("/").withPrefix(fileUrl);
+        ListObjectsV2Result result = this.ossClient.listObjectsV2(request);
+        List<String> folders = result.getCommonPrefixes();
+        String folder = folders.get(0);
+        return calculateFolderLength(ossClient, this.getBucketName(), folder);
+    }
+
     //不使用
 //    public BladeFile putFileWithPath(String fileName, String filePath,Long projectId, InputStream stream) {
 //
@@ -373,6 +383,24 @@ public class AliossTemplateRe implements OssTemplateRe {
 //        }
 //    }
 
+    // 获取某个存储空间下指定目录(文件夹)下的文件大小。
+    private static long calculateFolderLength(OSS ossClient, String bucketName, String folder) {
+        long size = 0L;
+        ListObjectsV2Result result = null;
+        do {
+            // MaxKey默认值为100,最大值为1000。
+            ListObjectsV2Request request = new ListObjectsV2Request(bucketName).withPrefix(folder).withMaxKeys(1000);
+            if (result != null) {
+                request.setContinuationToken(result.getNextContinuationToken());
+            }
+            result = ossClient.listObjectsV2(request);
+            List<OSSObjectSummary> sums = result.getObjectSummaries();
+            for (OSSObjectSummary s : sums) {
+                size += s.getSize();
+            }
+        } while (result.isTruncated());
+        return size;
+    }
 
     //判断文件的格式
     public String getcontentType(String filenameExtension) {

+ 3 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/ossre/OssTemplateRe.java

@@ -18,6 +18,9 @@ public interface OssTemplateRe extends OssTemplate {
     // OSS 分片上传 初始化
     InitiateMultipartUploadResult initiateMultipartUpload(InitiateMultipartUploadRequest request);
 
+    // 根据文件路径,获取当前路径下所有文件的大小
+    Long getAllFileSizeByFileUrl(String fileUrl);
+
     //指定路径上传
 //    BladeFile putFileWithPath(String fileName, String filePath,Long projectId, InputStream stream);
 }

+ 5 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/OssClient.java

@@ -48,5 +48,10 @@ public class OssClient implements IOSSClient {
         return R.data(bladeFile);
     }
 
+    @Override
+    public Long getAllFileSizeByFileUrl(String fileUrl) {
+        return ossBuilder.template().getAllFileSizeByFileUrl(fileUrl);
+    }
+
 
 }

+ 9 - 9
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -225,7 +225,7 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         //获取项目所有的维护预算
         Set<Long> set = budgetService.getAllMaintainBudgetId(id);
         //从预算中排除维护预算
-        budgets = budgets.stream().filter(l->!set.contains(l.getId())).collect(Collectors.toList());
+//        budgets = budgets.stream().filter(l->!set.contains(l.getId())).collect(Collectors.toList());
         //获取项目所有维护预算
         Map<Integer, BigDecimal> map = budgetService.getAllMaintainCost6(id);
         Boolean isMaintain = true;
@@ -249,7 +249,7 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
                 vo.setProjectId(id);
                 vo.setCostType(i);
                 vo.setCostTypeValue(costTypeDict.get(i-1).getDictName());
-                List<ProjectCostBudget> costBudgets = budgetMap.get(i-1);
+                List<ProjectCostBudget> costBudgets = budgetMap.get(i);
                 BigDecimal bigDecimal = new BigDecimal(0);
                 if (costBudgets != null && costBudgets.size() > 0){
                     for (ProjectCostBudget budget : costBudgets) {
@@ -257,14 +257,14 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
                     }
                 }
                 //加上每个部门的维护预算
-                if (isMaintain){
-                    BigDecimal decimal = map.get(i);
-                    if (decimal != null){
-                        bigDecimal = bigDecimal.add(decimal);
-                    }
-                }
+//                if (isMaintain){
+//                    BigDecimal decimal = map.get(i);
+//                    if (decimal != null){
+//                        bigDecimal = bigDecimal.add(decimal);
+//                    }
+//                }
                 vo.setBudgetCost(bigDecimal);
-                //设置费用分类实际费用,目前设置人工
+                //设置费用分类实际费用,目前设置人工,维护支出,报销支出
                 BigDecimal practicalCost = new BigDecimal(0);
                 if (practicalList != null && practicalList.size() > 0){
                     for (ProjectCostBudget budget : practicalList) {