From 0005d49a697ce934c6fc2a61ecb75d881b9a76f2 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 23 四月 2026 11:48:31 +0800
Subject: [PATCH] feat(production): 完善生产订单管理功能

---
 src/main/java/com/ruoyi/basic/utils/FileUtil.java |   56 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 49 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/utils/FileUtil.java b/src/main/java/com/ruoyi/basic/utils/FileUtil.java
index 606228c..1e629cf 100644
--- a/src/main/java/com/ruoyi/basic/utils/FileUtil.java
+++ b/src/main/java/com/ruoyi/basic/utils/FileUtil.java
@@ -7,18 +7,21 @@
 import com.ruoyi.basic.dto.StorageAttachmentDTO;
 import com.ruoyi.basic.dto.StorageBlobVO;
 import com.ruoyi.basic.mapper.StorageAttachmentMapper;
-import com.ruoyi.basic.mapper.StorageBlobMapper;
 import com.ruoyi.basic.pojo.StorageAttachment;
 import com.ruoyi.common.config.FileProperties;
 import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
+import io.jsonwebtoken.security.Keys;
 import lombok.RequiredArgsConstructor;
+import net.coobird.thumbnailator.Thumbnails;
 import org.springframework.beans.BeanUtils;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 
+import javax.crypto.SecretKey;
+import java.io.File;
 import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -30,7 +33,6 @@
 public class FileUtil {
     private final FileProperties properties;
     private final StorageAttachmentMapper storageAttachmentMapper;
-    private final StorageBlobMapper storageBlobMapper;
     private final StringRedisTemplate stringRedisTemplate;
 
     private static final String TOKEN_USAGE_KEY_PREFIX = "file:token:usage:";
@@ -431,13 +433,15 @@
         }
         Date issuedAt = new Date(now);
         Date expiration = new Date(now + expiredMillis);
+        SecretKey key = Keys.hmacShaKeyFor(properties.getJwtSecret().getBytes(StandardCharsets.UTF_8));
+
         String token = Jwts.builder()
-                .setSubject(storageBlob.getUidFilename())
-                .setIssuedAt(issuedAt)
-                .setExpiration(expiration)
+                .subject(storageBlob.getUidFilename())
+                .issuedAt(issuedAt)       // 鏂扮増寤鸿鐩存帴璋冪敤 .issuedAt()
+                .expiration(expiration)   // 鏂扮増寤鸿鐩存帴璋冪敤 .expiration()
                 .claim("path", storageBlob.getPath())
                 .claim("resourceKey", storageBlob.getResourceKey())
-                .signWith(SignatureAlgorithm.HS256, properties.getJwtSecret())
+                .signWith(key)            // 閲嶇偣锛氫紶鍏ヤ笂闈㈢敓鎴愮殑 key 瀵硅薄锛岃�屼笉鏄� String
                 .compact();
         cacheTokenUsage(token, expiredMillis);
         String domain = StringUtils.trimTrailingCharacter(properties.getDomain(), '/');
@@ -491,4 +495,42 @@
         return properties.getUseLimit() == null || properties.getUseLimit() <= 0 ? 10 : properties.getUseLimit();
     }
 
+    /**
+     * 鍘嬬缉鏂囦欢
+     *
+     * @param file 鏂囦欢
+     * @return 鍘嬬缉鍚庣殑鏂囦欢
+     */
+    public File compressFile(File file) {
+        if (properties.getCompress() && isImage(file.getName()) && (file.length() > properties.getNeedCompressSize().toBytes())) {
+            try {
+                // 鍒涘缓涓�涓复鏃舵枃浠跺瓨鏀惧帇缂╁悗鐨勫浘鐗囷紝閬垮厤鐮村潖鍘熷浘
+                File compressedFile = new File(file.getParent(), "thumb_" + file.getName());
+
+                // 1. 濡傛灉宸茬粡瀛樺湪鍘嬬缉杩囩殑鏂囦欢锛岀洿鎺ヨ繑鍥烇紝涓嶅啀娑堣�� CPU 鍘嬬缉
+                if (compressedFile.exists()) {
+                    return compressedFile;
+                }
+
+                // 浣跨敤 Thumbnailator 杩涜鍘嬬缉
+                Thumbnails.of(file)
+                        .scale(1.0f)                // 淇濇寔鍘熷昂瀵�
+                        .outputQuality(properties.getCompressQuality())        // 鏍稿績锛氳缃敾璐� (0.0~1.0)
+                        .toFile(compressedFile);
+
+                return compressedFile;
+            } catch (Exception e) {
+                // 濡傛灉鍘嬬缉澶辫触锛岄檷绾у鐞嗭細杩斿洖鍘熷浘
+                return file;
+            }
+        }
+        return file;
+    }
+    // 绠�鍗曠殑鍚庣紑鍒ゆ柇
+    private boolean isImage(String fileName) {
+        String ext = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
+        return "jpg".equals(ext) || "jpeg".equals(ext) || "png".equals(ext);
+    }
+
+
 }

--
Gitblit v1.9.3