fangzhen 4 сар өмнө
parent
commit
0256885708

+ 7 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@@ -133,12 +133,17 @@ public class CommonController {
     @PostMapping("/upload")
     public AjaxResult uploadFile(MultipartFile file) throws Exception {
         try {
+            String fileType = FileUtils.getFileType(file);
+            if ("image".equalsIgnoreCase(fileType)) {
+//                file = FileUtils.convertToJpg(file);
+                OssUtils.test1(file);
+            }
             // 上传文件路径
             String fileName = OssUtils.uploadMultipartFile(file);
             System.out.println(fileName);
             String fileNameResult = fileName.replace("https://cysd.oss-cn-shanghai.aliyuncs.com", fileUrl);
             String thumbnailPath = "";
-            String fileType = FileUtils.getFileType(file);
+
             if ("video".equalsIgnoreCase(fileType)) {
                 String tempThumbnailFile = System.getProperty("java.io.tmpdir") + File.separator + "thumbnail.jpg";
 
@@ -159,7 +164,7 @@ public class CommonController {
                 String nickName = SecurityUtils.getLoginUser().getUser().getNickName();
                 // 下载源文件到本地临时目录
                 String tempSourceFile = System.getProperty("java.io.tmpdir") + File.separator + "source_" + FileUtils.getName(fileName);
-                OssUtils.downloadFile(fileName.replace("https://cysd.oss-cn-shanghai.aliyuncs.com/",""), tempSourceFile);
+                OssUtils.downloadFile(fileName.replace("https://cysd.oss-cn-shanghai.aliyuncs.com/", ""), tempSourceFile);
 
                 // 本地临时水印文件路径
                 String tempWatermarkFile = System.getProperty("java.io.tmpdir") + File.separator + "watermark_" + FileUtils.getName(fileName);

+ 6 - 0
ruoyi-common/pom.xml

@@ -159,6 +159,12 @@
             <version>1.4</version>
         </dependency>
 
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>0.4.14</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 43 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java

@@ -4,6 +4,7 @@ import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import net.coobird.thumbnailator.Thumbnails;
 import org.apache.commons.fileupload.disk.DiskFileItem;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
@@ -17,6 +18,9 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -347,9 +351,29 @@ public class FileUtils {
         return new CommonsMultipartFile(fileItem);
     }
 
+    // 将HEIC格式图片转换为JPG并返回MultipartFile
+    public static MultipartFile convertToJpg(MultipartFile file) throws Exception {
+        // 指定文件保存路径(例如:上传目录下的转换后文件名)
+        String fileName = "converted_" + System.currentTimeMillis() + ".jpg";
+        Path filePath = Paths.get("F:\\", fileName);
+
+        // 使用thumbnailator进行图片转换
+        InputStream inputStream = file.getInputStream();
+        try {
+            Thumbnails.of(inputStream)
+                    .outputFormat("jpg")
+                    .toFile(filePath.toFile()); // 转换为JPG并保存到指定路径
+        } finally {
+            // 确保流在处理完后关闭
+            inputStream.close();
+        }
+        // 将临时文件转换为MultipartFile
+        return convertFileToMultipartFile(filePath.toFile());
+    }
 
     /**
      * 清理临时文件
+     *
      * @param fileName 文件名称
      */
     public static void cleanTempDir(String fileName) {
@@ -373,4 +397,23 @@ public class FileUtils {
             }
         }
     }
+
+    // 清理临时文件的方法
+    public static void deleteTempFile(File tempFile) {
+        if (tempFile.exists()) {
+            boolean deleted = tempFile.delete();
+            if (!deleted) {
+                System.err.println("Failed to delete temporary file: " + tempFile.getAbsolutePath());
+            }
+        }
+    }
+
+    public static void deleteTempFile(Path tempFilePath) {
+        try {
+            Files.delete(tempFilePath);
+        } catch (IOException e) {
+            System.err.println("Failed to delete temporary file: " + tempFilePath);
+            e.printStackTrace();
+        }
+    }
 }

+ 27 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/OssUtils.java

@@ -2,6 +2,7 @@ package com.ruoyi.common.utils.file;
 
 import com.aliyun.oss.OSS;
 import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.OSSException;
 import com.aliyun.oss.model.GetObjectRequest;
 import com.aliyun.oss.model.PutObjectRequest;
 import lombok.extern.log4j.Log4j2;
@@ -53,6 +54,32 @@ public class OssUtils {
         return uploadMultipartFile(bucketName, getOssFilePath(multipartFile.getOriginalFilename()), multipartFile);
     }
 
+    public static void test1(MultipartFile multipartFile){
+        try {
+            String filePath = multipartFile.getOriginalFilename();
+            String fileSuf = filePath.substring(filePath.indexOf(".") + 1);
+            String objectName =  UUID.randomUUID().toString() + "." + fileSuf;
+            // 将原图转换为PNG格式。
+            String image = "image/format,png";
+            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
+            request.setProcess(image);
+            // 将处理后的图片命名为dest.png并保存到本地。
+            // 如果未指定本地路径只填写了文件名称(例如dest.png),则文件默认保存到示例程序所属项目对应本地路径中。
+            ossClient.getObject(request, new File("D:\\dest.png"));
+        } catch (OSSException oe) {
+            System.out.println("Caught an OSSException, which means your request made it to OSS, "
+                    + "but was rejected with an error response for some reason.");
+            System.out.println("Error Message:" + oe.getErrorMessage());
+            System.out.println("Error Code:" + oe.getErrorCode());
+            System.out.println("Request ID:" + oe.getRequestId());
+            System.out.println("Host ID:" + oe.getHostId());
+        }  finally {
+            if (ossClient != null) {
+                ossClient.shutdown();
+            }
+        }
+    }
+
     /**
      * 上传 multipartFile 类型文件
      *

+ 30 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/webSocket/WebSocketServer.java

@@ -2,8 +2,11 @@ package com.ruoyi.framework.webSocket;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.generator.domain.Community.CommunityReturnRecord;
+import com.ruoyi.generator.service.ICommunityReturnRecordService;
 import com.ruoyi.system.domain.CommunityChatMsg;
 import com.ruoyi.system.service.ICommunityChatMsgService;
 import io.netty.util.HashedWheelTimer;
@@ -69,11 +72,18 @@ public class WebSocketServer {
 
     public static ICommunityChatMsgService chatMsgService;
 
+    public static ICommunityReturnRecordService returnRecordService;
+
     @Autowired
     public void setChatMsgService(ICommunityChatMsgService chatMsgService) {
         WebSocketServer.chatMsgService = chatMsgService;
     }
 
+    @Autowired
+    public void setReturnRecordService(ICommunityReturnRecordService returnRecordService) {
+        WebSocketServer.returnRecordService = returnRecordService;
+    }
+
     /**
      * 连接建立成功调用的方法
      */
@@ -253,6 +263,26 @@ public class WebSocketServer {
             if (type.equals(MessageType.ANONYMOUS.getType())) {
                 chatMsg.setSenderAnonName(jsonObject.getString("senderAnonName"));
                 chatMsg.setReceiverAnonName(jsonObject.getString("receiverAnonName"));
+
+                //获取返图创建人用户id和返图接收人用户id
+                String returnCreateUserId = jsonObject.getString("returnCreateUserId");
+                String returnReceiveUserId = jsonObject.getString("returnReceiveUserId");
+                if (returnCreateUserId != null && returnReceiveUserId != null) {
+                    //不为null时,则进行判断返图列表是否存在记录
+                    CommunityReturnRecord returnRecord = returnRecordService.getOne(new QueryWrapper<CommunityReturnRecord>()
+                            .eq("return_create_user_id", returnCreateUserId)
+                            .eq("return_receive_user_id", returnReceiveUserId)
+                            .eq("is_delete", false)
+                            .eq("status", false));
+                    if (returnRecord == null) {
+                        CommunityReturnRecord communityReturnRecord = new CommunityReturnRecord();
+                        communityReturnRecord.setReturnCreateUserId(Long.parseLong(returnCreateUserId));
+                        communityReturnRecord.setReturnReceiveUserId(Long.parseLong(returnReceiveUserId));
+                        communityReturnRecord.setCreateTime(DateUtils.parseDate(DateUtils.getTime()));
+                        communityReturnRecord.setCreateBy(Long.parseLong(returnCreateUserId));
+                        returnRecordService.save(communityReturnRecord);
+                    }
+                }
             }
             chatMsg.setCreateBy(senderId);
             chatMsg.setSenderIsRead(true);

+ 7 - 19
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/Community/CommunityReturnRecord.java

@@ -29,31 +29,19 @@ public class CommunityReturnRecord implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     /**
-    * 返图用户id
+    * 创建返图用户id
     */
-    @ApiModelProperty("返图用户id")
-    private Long returnId;
+    @ApiModelProperty("创建返图用户id")
+    private Long returnCreateUserId;
 
     /**
-     * 返图用户id
+     * 接受返图用户id
      */
-    @ApiModelProperty("返图用户备注")
-    private String returnRemark;
+    @ApiModelProperty("接受返图用户id")
+    private Long returnReceiveUserId;
 
     /**
-     * 扫码者用户id
-     */
-    @ApiModelProperty("扫码者用户id")
-    private Long receiverId;
-
-    /**
-     * 返图用户id
-     */
-    @ApiModelProperty("扫码者用户备注")
-    private String receiverRemark;
-
-    /**
-     * 创建人
+     * 状态
      */
     @ApiModelProperty("状态")
     private boolean status;