dsx 2 tahun lalu
induk
melakukan
3c66e8bb0c

+ 1 - 0
4dkankan-common-utils/src/main/java/com/fdkankan/common/constant/ErrorCode.java

@@ -86,6 +86,7 @@ public enum ErrorCode {
     FAILURE_CODE_4002(4002, "文件不存在:%s"),
     FAILURE_CODE_4003(4003, "图片大小不能超过:%s"),
     FAILURE_CODE_4004(4004, "此接口仅支持看看和看见相机场景"),
+    FAILURE_CODE_4005(4005, "已超出容量,不允许重新上传"),
 
 
     FAILURE_CODE_5001(5001, "modeldata.json为空"),

+ 15 - 1
4dkankan-common-utils/src/main/java/com/fdkankan/common/constant/SceneStatus.java

@@ -5,7 +5,9 @@ public enum SceneStatus {
     wait(0, "未建好"),
     SUCCESS(1, "已建好"),
     FAILD(-1, "出错"),
-    NO_DISPLAY(-2, "不要在官网上显示");
+    NO_DISPLAY(-2, "不要在官网上显示"),
+    EXCEED_SPACE(-3, "超出容量,未计算")
+    ;
 
     private Integer code;
     private String message;
@@ -23,4 +25,16 @@ public enum SceneStatus {
         return message;
     }
 
+    public static SceneStatus get(Integer code){
+        SceneStatus[] values = SceneStatus.values();
+        Integer enumValue = null;
+        for(SceneStatus eachValue : values){
+            enumValue = eachValue.code();
+            if(enumValue.equals(code)){
+                return eachValue;
+            }
+        }
+        return null;
+    }
+
 }

+ 40 - 0
4dkankan-common-utils/src/main/java/com/fdkankan/common/constant/SpaceType.java

@@ -0,0 +1,40 @@
+package com.fdkankan.common.constant;
+
+/**
+ * 容量统计方式
+ */
+public enum SpaceType {
+
+    GB("GB", "按容量"),
+    SP("SP", "按个数"),
+    ;
+
+    private String code;
+    private String message;
+
+    private SpaceType(String code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public String code() {
+        return code;
+    }
+
+    public String message() {
+        return message;
+    }
+
+    public static SpaceType get(String code){
+        SpaceType[] values = SpaceType.values();
+        String enumValue = null;
+        for(SpaceType eachValue : values){
+            enumValue = eachValue.code();
+            if(enumValue.equals(code)){
+                return eachValue;
+            }
+        }
+        return null;
+    }
+
+}

+ 11 - 2
4dkankan-common-utils/src/main/java/com/fdkankan/common/util/StrExtUtil.java

@@ -1,5 +1,8 @@
 package com.fdkankan.common.util;
 
+import cn.hutool.captcha.CaptchaUtil;
+import cn.hutool.captcha.LineCaptcha;
+import cn.hutool.captcha.generator.RandomGenerator;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ReUtil;
 import cn.hutool.core.util.StrUtil;
@@ -67,8 +70,14 @@ public class StrExtUtil extends StrUtil {
 //
 //        System.out.println("123".equals(test));;
 
-        List<String> fileNames = FileUtils.list(new File("C:\\Users\\dsx\\Desktop\\90d95cdb5_202211141023024060"));
-        System.out.println(JSON.toJSONString(fileNames));
+//        List<String> fileNames = FileUtils.list(new File("C:\\Users\\dsx\\Desktop\\90d95cdb5_202211141023024060"));
+//        System.out.println(JSON.toJSONString(fileNames));
+
+        RandomGenerator randomGenerator = new RandomGenerator("0123456789asdfghjklASDFGHJKL", 10);
+        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(300, 100);
+        lineCaptcha.setGenerator(randomGenerator);
+        lineCaptcha.write("D:\\test2\\1.png");
+        System.out.println(lineCaptcha.getCode());
 
 
     }

+ 55 - 0
4dkankan-utils-fyun-oss/src/main/java/com/fdkankan/fyun/oss/OssFileService.java

@@ -1,5 +1,6 @@
 package com.fdkankan.fyun.oss;
 
+import cn.hutool.core.collection.CollUtil;
 import com.aliyun.oss.HttpMethod;
 import com.aliyun.oss.OSS;
 import com.aliyun.oss.model.*;
@@ -321,4 +322,58 @@ public class OssFileService extends AbstractFYunFileService {
         return totalSubFileNum;
     }
 
+    @Override
+    public void restoreFolder(String bucket, String folderName, Integer priority) {
+
+        List<String> objectList = this.listRemoteFiles(bucket, folderName);
+        if(CollUtil.isEmpty(objectList)){
+            return;
+        }
+        objectList.parallelStream().forEach(objectName -> {
+            this.restoreFile(bucket, objectName, priority);
+        });
+    }
+
+    @Override
+    public void restoreFile(String bucket, String objectName, Integer priority){
+        ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucket, objectName);
+
+        // 校验Object是否为归档类型Object。
+        StorageClass storageClass = objectMetadata.getObjectStorageClass();
+        if (storageClass == StorageClass.ColdArchive) {
+            // 设置解冻冷归档Object的优先级。
+            // RestoreTier.RESTORE_TIER_EXPEDITED 表示1小时内完成解冻。
+            // RestoreTier.RESTORE_TIER_STANDARD 表示2~5小时内完成解冻。
+            // RestoreTier.RESTORE_TIER_BULK 表示5~12小时内完成解冻。
+            RestoreTier restoreTier = null;
+            switch (priority){
+                case 1 :
+                    restoreTier = RestoreTier.RESTORE_TIER_EXPEDITED;
+                    break;
+                case 2 :
+                    restoreTier = RestoreTier.RESTORE_TIER_STANDARD;
+                    break;
+                default:
+                    restoreTier = RestoreTier.RESTORE_TIER_BULK;
+            }
+            RestoreJobParameters jobParameters = new RestoreJobParameters(restoreTier);
+            // 配置解冻参数,以设置5小时内解冻完成,解冻状态保持2天为例。
+            // 第一个参数表示保持解冻状态的天数,默认是1天,此参数适用于解冻Archive(归档)与ColdArchive(冷归档)类型Object。
+            // 第二个参数jobParameters表示解冻优先级,只适用于解冻ColdArchive类型Object。
+            RestoreConfiguration configuration = new RestoreConfiguration(1, jobParameters);
+            //开始解冻
+            ossClient.restoreObject(bucket, objectName, configuration);
+            // 等待解冻完成。
+            do {
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                objectMetadata = ossClient.getObjectMetadata(bucket, objectName);
+            } while (!objectMetadata.isRestoreCompleted());
+        }
+    }
+
+
 }

+ 3 - 0
4dkankan-utils-fyun-parent/src/main/java/com/fdkankan/fyun/config/FYunFileConfig.java

@@ -15,6 +15,9 @@ public class FYunFileConfig {
     @Value("${fyun.bucket}")
     private String bucket;
 
+    @Value("${fyun.freeze-bucket:4dkk-bak}")
+    private String freezeBucket;
+
     @Value("${fyun.endPoint}")
     private String endPoint;
 

+ 1 - 0
4dkankan-utils-fyun-parent/src/main/java/com/fdkankan/fyun/face/AbstractFYunFileService.java

@@ -141,4 +141,5 @@ public abstract class AbstractFYunFileService implements FYunFileServiceInterfac
     public long getSubFileNums(String url) {
         return getSubFileNums(fYunFileConfig.getBucket(), url);
     }
+
 }

+ 4 - 0
4dkankan-utils-fyun-parent/src/main/java/com/fdkankan/fyun/face/FYunFileServiceInterface.java

@@ -328,4 +328,8 @@ public interface FYunFileServiceInterface {
     public long getSubFileNums(String url);
 
     public long getSubFileNums(String bucket,String url);
+
+    public void restoreFolder(String bucket, String folderName, Integer priority);
+
+    public void restoreFile(String bucket, String objectName, Integer priority);
 }

+ 10 - 0
4dkankan-utils-fyun-s3/src/main/java/com/fdkankan/fyun/s3/S3FileService.java

@@ -331,4 +331,14 @@ public class S3FileService extends AbstractFYunFileService {
         }
         return totalFileNums;
     }
+
+    @Override
+    public void restoreFolder(String bucket, String folderName, Integer priority) {
+
+    }
+
+    @Override
+    public void restoreFile(String bucket, String objectName, Integer priority){
+
+    }
 }

+ 6 - 1
4dkankan-utils-redis/src/main/java/com/fdkankan/redis/constant/RedisKey.java

@@ -120,6 +120,11 @@ public class RedisKey {
     public static final String SCENE_LINKPAN_STYLES = "scene:LinkPanStyles:num:%s";
 
     /**
+     * 场景指示牌数据列表
+     */
+    public static final String SCENE_BILLBOARDS = "scene:billboards:num:%s";
+
+    /**
      * 场景下载任务列表
      */
     public static final String SCENE_DOWNLOADS_TASK_V4 = "scene:downloads:task:v4";
@@ -203,7 +208,7 @@ public class RedisKey {
     public static final String SINGLE_MODELING_SERVER_BUSY = "singleModelingServerBusy";
 
     /**
-     * 场景oss原始资源目录上传
+     * 打点系统应用id缓存
      */
     public static final String TRACK_APPID = "track:appid";
 

+ 9 - 0
4dkankan-utils-redis/src/main/java/com/fdkankan/redis/constant/RedisLockKey.java

@@ -90,6 +90,11 @@ public class RedisLockKey {
     public static String LOCK_LINKPAN_STYLES_SYNC = "lock:linkpan:styles:sync:num:%s";
 
     /**
+     * 场景指示牌数据恢复锁
+     */
+    public static String LOCK_BILLBOARDS_SYNC = "lock:billboards:sync:num:%s";
+
+    /**
      * 热点数据写文件锁
      */
     public static String LOCK_HOT_JSON = "lock:hot:json:num:%s";
@@ -163,6 +168,10 @@ public class RedisLockKey {
 
     public static final String LOCK_CLEAN_SCENE_ORIG_V4 = "lock:clean:scene:orig:v4";
 
+    public static final String LOCK_CLEAN_SCENE_DELETED_ORIG_V3 = "lock:clean:scene:deleted:orig:v3";
+
+    public static final String LOCK_CLEAN_SCENE_DELETED_ORIG_V4 = "lock:clean:scene:deleted:orig:v4";
+
     public static void main(String[] args) {
         FileUtil.copyContent(new File("F:\\test\\test"), new File("F:\\test\\test2"), true);
     }