Преглед изворни кода

Merge branch 'master' into dev-yhq

tsurumure пре 11 месеци
родитељ
комит
471b2f7177

+ 1 - 1
src/main/java/com/backendsys/controller/api/TestController.java

@@ -118,7 +118,7 @@ public class TestController {
             List<Map<String, Object>> TemplateInfos = (List<Map<String, Object>>) requestBody.get("TemplateInfos");
             List<Map<String, Object>> MergeInfos = (List<Map<String, Object>>) requestBody.get("MergeInfos");
             String VideoUrl = (String) requestBody.get("VideoUrl");
-            String SwapModelType = (String) requestBody.get("SwapModelType");
+            Integer SwapModelType = (Integer) requestBody.get("SwapModelType");
             /*
             https://guangzhou-1320301544.cos-website.ap-guangzhou.myqcloud.com/test/ai-face/face/fe-1.png
             https://guangzhou-1320301544.cos-website.ap-guangzhou.myqcloud.com/test/ai-face/face/fe-2.jpg

+ 80 - 80
src/main/java/com/backendsys/controller/api/Upload/UploadTencentCOSController.java

@@ -77,86 +77,86 @@ public class UploadTencentCOSController {
     // https://cloud.tencent.com/document/product/436/7749
     // https://github.com/tencentyun/cos-java-sdk-v5/blob/master/src/main/java/com/qcloud/cos/demo/PutObjectDemo.java
 
-//    /**
-//     * 上传文件 (旧)
-//     */
-//    @PreAuthorize("@ss.hasPermi(1.1)")
-//    @PostMapping("/api/tencent/cosUpload")
-//    public Result uploadTencentCOS(@RequestParam("file") MultipartFile file) {
-//
-//        // 检查上传的文件是否为空
-//        if (file.isEmpty()) {
-//            return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "文件不能为空");
-//        }
-//        // 判断文件大小是否超过
-//        if (file.getSize() > maxSize) {
-//            return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "文件不能大于 " + maxSize/1024/1024 + " MB");
-//        }
-//
-//        // 按日期作为文件目录 (腾讯云使用 /,所以不需要配置 File.separator)
-//        String dateDir = new SimpleDateFormat("yyyyMMdd").format(new Date()) + '/';
-//
-//        // 生成后缀名
-//        String originalFileName = file.getOriginalFilename();
-//        String suffix = originalFileName.substring(originalFileName.lastIndexOf("."));
-//
-//        // 生成新的文件名
-//        String newFileName = CommonUtil.generateFilename(suffix);
-//
-//        //
-//        String objectName = dateDir + newFileName;
-//
-//        // -- COS ------------------------------------------------------------------
-//        // 初始化用户身份信息(secretId, secretKey)
-//        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
-//
-//        // 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
-//        Region region1 = new Region(region);
-//        ClientConfig clientConfig = new ClientConfig(region1);
-//        clientConfig.setRegion(region1);
-//
-//        // 生成cos客户端
-//        COSClient cosClient = new COSClient(cred, clientConfig);
-//
-//        try {
-//
-//            // 获取文件内容
-//            InputStream inputStream = file.getInputStream();
-//
-//            // 将文件内容写入临时文件
-//            File tempFile = File.createTempFile("temp", null);
-//            try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
-//                IOUtils.copy(inputStream, outputStream);
-//            }
-//
-//            // 创建 PutObjectRequest 对象。
-//            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, tempFile);
-//
-//            ObjectMetadata objectMetadata = new ObjectMetadata();
-//            putObjectRequest.withMetadata(objectMetadata);
-//
-//            // 创建 PutObject 请求。(异步)
-//            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
-//
-//        } catch (IOException e) {
-//            System.out.println("IOException e:");
-//            System.out.println(e);
-//        } finally {
-//            if (cosClient != null) {
-//                cosClient.shutdown();
-//            }
-//        }
-//
-//        // 返回值 结构
-//        Map<String, Object> map = new LinkedHashMap<>();
-//        map.put("filename", newFileName);
-//        map.put("url", accessibleDomain + "/" + objectName); // File.separator
-//        map.put("type", suffix.replace(".", ""));
-//        map.put("size", file.getSize());
-//
-//        return Result.success(map);
-//
-//    }
+    /**
+     * 上传文件 (旧)
+     */
+    @PreAuthorize("@ss.hasPermi(1.1)")
+    @PostMapping("/api/tencent/cosUpload")
+    public Result uploadTencentCOS(@RequestParam("file") MultipartFile file) {
+
+        // 检查上传的文件是否为空
+        if (file.isEmpty()) {
+            return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "文件不能为空");
+        }
+        // 判断文件大小是否超过
+        if (file.getSize() > maxSize) {
+            return Result.error(ResultEnum.INTERNAL_ERROR.getCode(), "文件不能大于 " + maxSize/1024/1024 + " MB");
+        }
+
+        // 按日期作为文件目录 (腾讯云使用 /,所以不需要配置 File.separator)
+        String dateDir = new SimpleDateFormat("yyyyMMdd").format(new Date()) + '/';
+
+        // 生成后缀名
+        String originalFileName = file.getOriginalFilename();
+        String suffix = originalFileName.substring(originalFileName.lastIndexOf("."));
+
+        // 生成新的文件名
+        String newFileName = CommonUtil.generateFilename(suffix);
+
+        //
+        String objectName = dateDir + newFileName;
+
+        // -- COS ------------------------------------------------------------------
+        // 初始化用户身份信息(secretId, secretKey)
+        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
+
+        // 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
+        Region region1 = new Region(region);
+        ClientConfig clientConfig = new ClientConfig(region1);
+        clientConfig.setRegion(region1);
+
+        // 生成cos客户端
+        COSClient cosClient = new COSClient(cred, clientConfig);
+
+        try {
+
+            // 获取文件内容
+            InputStream inputStream = file.getInputStream();
+
+            // 将文件内容写入临时文件
+            File tempFile = File.createTempFile("temp", null);
+            try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
+                IOUtils.copy(inputStream, outputStream);
+            }
+
+            // 创建 PutObjectRequest 对象。
+            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, tempFile);
+
+            ObjectMetadata objectMetadata = new ObjectMetadata();
+            putObjectRequest.withMetadata(objectMetadata);
+
+            // 创建 PutObject 请求。(异步)
+            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
+
+        } catch (IOException e) {
+            System.out.println("IOException e:");
+            System.out.println(e);
+        } finally {
+            if (cosClient != null) {
+                cosClient.shutdown();
+            }
+        }
+
+        // 返回值 结构
+        Map<String, Object> map = new LinkedHashMap<>();
+        map.put("filename", newFileName);
+        map.put("url", accessibleDomain + "/" + objectName); // File.separator
+        map.put("type", suffix.replace(".", ""));
+        map.put("size", file.getSize());
+
+        return Result.success(map);
+
+    }
 
 
     /**

+ 61 - 23
src/main/java/com/backendsys/service/Ai/Aizn/AiznModelServiceImpl.java

@@ -1,8 +1,10 @@
 package com.backendsys.service.Ai.Aizn;
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.backendsys.aspect.HttpRequestAspect;
+import com.backendsys.config.Redis.RedisCache;
 import com.backendsys.entity.Ai.Aizn.AiznImageStyleDTO;
 import com.backendsys.entity.Ai.Aizn.AiznIntelligentClipTaskDTO;
 import com.backendsys.entity.Ai.Aizn.AiznImageTaskVO;
@@ -18,6 +20,7 @@ import com.backendsys.service.SDKService.SDKTencent.SDKTencentCOSService;
 import com.backendsys.service.System.SysResourceService;
 import com.backendsys.utils.ListUtil;
 import com.backendsys.utils.MapUtil;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fzzixun.openapi.sdk.client.OpenClient;
 import com.fzzixun.openapi.sdk.common.RequestMethod;
 import com.fzzixun.openapi.sdk.request.CommonRequest;
@@ -56,43 +59,78 @@ public class AiznModelServiceImpl implements AiznModelService {
     @Autowired
     private SDKTencentCOSService sdkTencentCOSService;
 
+    @Autowired
+    private RedisCache redisCache;
+
     /**
      * [紫鸟] 获取风格/场景配置数据 (https://open.ziniao.com/manage/apiTest/809)
      */
     @Override
     public Map<String, Object> getImageStyle(AiznImageStyleDTO aiznImageStyleDTO) {
 
+        Integer type = aiznImageStyleDTO.getType();
+
         // -- 业务参数 -------------------------------------------------------------------
         JSONObject object = new JSONObject();
         object.set("showType", aiznImageStyleDTO.getShow_type());       // 展示类型 0.默认
-        object.set("type", aiznImageStyleDTO.getType());                // 类型 1.AI绘图
-
-        // -- 实现方法 -------------------------------------------------------------------
-        OpenClient client = aiznService.getOpenClient();
-        CommonRequest request = new CommonRequest("/linkfox-ai/image/v1/make/style", RequestMethod.POST_JSON);
-        request.setBizContent(object.toString());
+        object.set("type", type);                                       // 类型 1.AI绘图
 
-        // -- 返回结果 -------------------------------------------------------------------
-        CommonResponse response = client.executeAppToken(request, aiznService.getAppToken());
-        JSONObject resp = aiznService.checkResponse(response);
-        if ((Integer) resp.get("code") == 200) {
-
-            // -- 成功 ------------------------------------------------------------------
-            List<Map<String, Object>> respData = (List<Map<String, Object>>) resp.get("data");
+        String redisKey = "getImageStyle-" + type;
+        String redisCacheObject = redisCache.getCacheObject(redisKey);
+        if (StrUtil.isNotEmpty(redisCacheObject)) {
+            // [缓存存在] 读取缓存
             Map<String, Object> result = new LinkedHashMap<>();
-            result.put("type", aiznImageStyleDTO.getType());
-            result.put("total", respData.size());
-
-            // 将返回结果:首字母大写命名 转换为 下划线命名
-            result.put("list", ListUtil.convertToUnderscoreCase(respData));
-            // System.out.println(result);
+            try {
+                System.out.println("[缓存存在] 读取缓存");
+                ObjectMapper mapper = new ObjectMapper();
+                List<Map<String, Object>> respData = mapper.readValue(redisCacheObject, List.class);
+                result.put("type", type);
+                result.put("total", respData.size());
+                result.put("list", ListUtil.convertToUnderscoreCase(respData)); // 将返回结果:首字母大写命名 转换为 下划线命名
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
             return result;
-            // --------------------------------------------------------------------------
 
         } else {
-            System.out.println(resp);
-            Integer code = resp.get("code") != null ? (Integer) resp.get("code") : 6001;
-            throw new CustomException("功能暂不可用,请联系管理员", code, resp);
+
+            // -- 实现方法 -------------------------------------------------------------------
+            OpenClient client = aiznService.getOpenClient();
+            CommonRequest request = new CommonRequest("/linkfox-ai/image/v1/make/style", RequestMethod.POST_JSON);
+            request.setBizContent(object.toString());
+
+            // -- 返回结果 -------------------------------------------------------------------
+            CommonResponse response = client.executeAppToken(request, aiznService.getAppToken());
+            JSONObject resp = aiznService.checkResponse(response);
+            if ((Integer) resp.get("code") == 200) {
+
+                // -- 成功 ------------------------------------------------------------------
+                List<Map<String, Object>> respData = (List<Map<String, Object>>) resp.get("data");
+                Map<String, Object> result = new LinkedHashMap<>();
+                result.put("type", type);
+                result.put("total", respData.size());
+                result.put("list", ListUtil.convertToUnderscoreCase(respData)); // 将返回结果:首字母大写命名 转换为 下划线命名
+
+                // [缓存不存在] 加入缓存
+                try {
+                    System.out.println("[缓存不存在] 加入缓存 (30秒过期)");
+                    ObjectMapper mapper = new ObjectMapper();
+                    String respDataStr = mapper.writeValueAsString(respData);
+                    System.out.println(respDataStr);
+                    redisCache.setCacheObject(redisKey, respDataStr, 30, TimeUnit.SECONDS);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+                return result;
+                // --------------------------------------------------------------------------
+
+            } else {
+                System.out.println(resp);
+                Integer code = resp.get("code") != null ? (Integer) resp.get("code") : 6001;
+                throw new CustomException("功能暂不可用,请联系管理员", code, resp);
+            }
+
         }
     }