Parcourir la source

优化上传进度返回值

tsurumure il y a 7 mois
Parent
commit
27917b017b

+ 19 - 1
src/main/java/com/backendsys/modules/sdk/tencentcloud/cos/entity/Progress.java

@@ -1,9 +1,27 @@
 package com.backendsys.modules.sdk.tencentcloud.cos.entity;
 
+import cn.hutool.json.JSONUtil;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import lombok.Data;
 
 @Data
 public class Progress {
+
     private String state;
-    private ProgressData data;
+//    @JsonInclude(JsonInclude.Include.NON_NULL)
+//    private ProgressData data;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private String filename;
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private Long current;
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private Long total;
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private Double percent;
+
+    public String toJsonStr() {
+        return JSONUtil.toJsonStr(this);
+    }
+
 }

+ 15 - 13
src/main/java/com/backendsys/modules/sdk/tencentcloud/cos/service/impl/TencentCosServiceImpl.java

@@ -10,6 +10,8 @@ import com.backendsys.modules.sdk.tencentcloud.cos.entity.Progress;
 import com.backendsys.modules.sdk.tencentcloud.cos.entity.ProgressData;
 import com.backendsys.modules.sdk.tencentcloud.cos.service.TencentCosService;
 import com.backendsys.modules.sdk.tencentcloud.cos.utils.TencentCosUtil;
+import com.backendsys.modules.sse.entity.SseResponse;
+import com.backendsys.modules.sse.entity.SseResponseEnum;
 import com.backendsys.modules.sse.utils.SseUtil;
 import com.backendsys.modules.upload.entity.SysUploadResult;
 import com.qcloud.cos.COSClient;
@@ -79,11 +81,12 @@ public class TencentCosServiceImpl implements TencentCosService {
     // [腾讯云COS][高级接口] 获取进度函数
     private void showTransferProgress(String filename, Transfer transfer) {
 
-        Progress progress = new Progress();
-        progress.setState("Init");
-
         String emitterKey = APPLICATION_NAME + "-userid-" + Convert.toStr(SecurityUtil.getUserId());
-        sseUtil.send(emitterKey, progress);
+
+        // [SSE] 进度回传
+        Progress progress = new Progress();
+        progress.setState("init");
+        sseUtil.send(emitterKey, (new SseResponse(SseResponseEnum.UPLOAD, progress)).toJsonStr());
 
         // 查询上传是否已经完成
         while (transfer.isDone() == false) {
@@ -97,15 +100,14 @@ public class TencentCosServiceImpl implements TencentCosService {
             String state = Convert.toStr(transfer.getState());
             System.out.printf("Upload progress: [%d / %d] = %.02f%% (%s)\n", current, total, percent, state);
 
-            ProgressData progressData = new ProgressData();
-            progressData.setFilename(filename);
-            progressData.setCurrent(current);
-            progressData.setTotal(total);
-            progressData.setPercent(percent);
-
-            progress.setState(state);
-            progress.setData(progressData);
-            sseUtil.send(emitterKey, progress);
+            // [SSE] 进度回传
+            progress.setFilename(filename);
+            progress.setCurrent(current);
+            progress.setTotal(total);
+            progress.setPercent(percent);
+            progress.setState(state.toLowerCase());
+            String dataStr = (new SseResponse(SseResponseEnum.UPLOAD, progress)).toJsonStr();
+            sseUtil.send(emitterKey, dataStr);
 
             // state: (完成 Completed, 失败 Failed)
             // System.out.println(transfer.getState());

+ 6 - 3
src/main/java/com/backendsys/modules/sse/entity/SseResponse.java

@@ -8,16 +8,19 @@ public class SseResponse {
 
     private String type;
     private String message;
+    private Object data;
 
-    // 无参构造函数(可选)
     public SseResponse() {
     }
-
-    // 接受SeeResponseEnum的构造函数
     public SseResponse(SseResponseEnum responseEnum) {
         this.type = responseEnum.getType();
         this.message = responseEnum.getMessage();
     }
+    public SseResponse(SseResponseEnum responseEnum, Object data) {
+        this.type = responseEnum.getType();
+        this.message = responseEnum.getMessage();
+        this.data = data;
+    }
 
     public SseResponse(String message) {
         this.type = SseResponseEnum.NOTICE.getType();

+ 2 - 1
src/main/java/com/backendsys/modules/sse/entity/SseResponseEnum.java

@@ -3,7 +3,8 @@ package com.backendsys.modules.sse.entity;
 public enum SseResponseEnum {
 
     CONNECT("connect", "建立连接"),
-    NOTICE("notice", "通知");
+    NOTICE("notice", "通知"),
+    UPLOAD("upload", "上传");
 
     private String type;
     private String message;

+ 1 - 1
src/main/java/com/backendsys/modules/upload/service/impl/SysUploadServiceImpl.java

@@ -126,7 +126,7 @@ public class SysUploadServiceImpl implements SysUploadService {
                     throw new CustException("存在 " + sysUploadEntityList.size() + " 个相同Md5 (" + md5 + ") 的文件,请先排重后再上传");
                 }
 
-                SysUpload sysUploadEntity = (sysUploadEntityList != null) ? sysUploadEntityList.get(0) : null;
+                SysUpload sysUploadEntity = (sysUploadEntityList != null && sysUploadEntityList.size() > 0) ? sysUploadEntityList.get(0) : null;
                 if (sysUploadEntity == null) {
                     // [方法] 上传事件
                     sysUploadEntity = uploadEvent(multipartFile, category_id, target);