From 007e470ab70d5d4fa503db8b9fc296f531941c5a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 28 四月 2026 10:18:54 +0800
Subject: [PATCH] feat(ai): 添加审批待办助手功能
---
src/main/java/com/ruoyi/basic/utils/FileUtil.java | 75 ++++++++++++++++++++++++++++++++-----
1 files changed, 64 insertions(+), 11 deletions(-)
diff --git a/src/main/java/com/ruoyi/basic/utils/FileUtil.java b/src/main/java/com/ruoyi/basic/utils/FileUtil.java
index 6f1d5cf..0e3d10d 100644
--- a/src/main/java/com/ruoyi/basic/utils/FileUtil.java
+++ b/src/main/java/com/ruoyi/basic/utils/FileUtil.java
@@ -369,6 +369,24 @@
}
/**
+ * 閫氳繃鏂囦欢鐢ㄩ�斻�佸叧鑱旇褰曠被鍨嬨�佸叧鑱旇褰昳d鑾峰彇鏂囦欢鍏宠仈淇℃伅 attachment
+ *
+ * @param recordType 鍏宠仈璁板綍绫诲瀷
+ * @param recordId 鍏宠仈璁板綍id
+ */
+ public List<StorageAttachment> getStorageAttachmentsByRecordTypeAndRecordId(RecordTypeEnum recordType, Long recordId) {
+ if (recordId == null || recordId <= 0) {
+ throw new RuntimeException("鍏宠仈璁板綍id涓嶈兘涓虹┖");
+ }
+ if (recordType == null) {
+ throw new RuntimeException("鍏宠仈璁板綍绫诲瀷涓嶈兘涓虹┖");
+ }
+ return storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>()
+ .eq(StorageAttachment::getRecordType, recordType.getType())
+ .eq(StorageAttachment::getRecordId, recordId));
+ }
+
+ /**
* 閫氳繃鏂囦欢鐢ㄩ�斻�佸叧鑱旇褰曠被鍨嬨�佸叧鑱旇褰昳d鑾峰彇鏂囦欢淇℃伅 blob
*
* @param application 鏂囦欢鐢ㄩ��
@@ -377,6 +395,30 @@
*/
public List<StorageBlobVO> getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum application, RecordTypeEnum recordType, Long recordId) {
List<StorageAttachment> storageAttachments = getStorageAttachmentsByApplicationAndRecordTypeAndRecordId(application, recordType, recordId);
+ if (CollectionUtils.isEmpty(storageAttachments)) {
+ return null;
+ }
+ List<Long> storageBlobIds = storageAttachments.stream().map(StorageAttachment::getStorageBlobId).collect(Collectors.toList());
+ List<StorageBlob> storageBlobs = storageBlobMapper.selectByIds(storageBlobIds);
+ List<StorageBlobVO> storageBlobDTOS = new ArrayList<>();
+ for (StorageBlob storageBlob : storageBlobs) {
+ StorageBlobVO storageBlobVO = new StorageBlobVO();
+ BeanUtils.copyProperties(storageBlob, storageBlobVO);
+ storageBlobVO.setPreviewURL(buildSignedPreviewUrl(storageBlobVO));
+ storageBlobVO.setDownloadURL(buildSignedDownloadUrl(storageBlobVO));
+ storageBlobDTOS.add(storageBlobVO);
+ }
+ return storageBlobDTOS;
+ }
+
+ /**
+ * 閫氳繃鏂囦欢鐢ㄩ�斻�佸叧鑱旇褰曠被鍨嬨�佸叧鑱旇褰昳d鑾峰彇鏂囦欢淇℃伅 blob
+ *
+ * @param recordType 鍏宠仈璁板綍绫诲瀷
+ * @param recordId 鍏宠仈璁板綍id
+ */
+ public List<StorageBlobVO> getStorageBlobVOsByRecordTypeAndRecordId(RecordTypeEnum recordType, Long recordId) {
+ List<StorageAttachment> storageAttachments = getStorageAttachmentsByRecordTypeAndRecordId(recordType, recordId);
if (CollectionUtils.isEmpty(storageAttachments)) {
return null;
}
@@ -691,8 +733,28 @@
if (storageBlob == null || !StringUtils.hasText(storageBlob.getUidFilename())) {
throw new IllegalArgumentException("鏂囦欢淇℃伅涓嶅畬鏁�");
}
+ String domain = StringUtils.trimTrailingCharacter(properties.getDomain(), '/');
+ String prefix = properties.getUrlPrefix().startsWith("/") ? properties.getUrlPrefix() : "/" + properties.getUrlPrefix();
+ String normalizedActionPath = StringUtils.hasText(actionPath) ? actionPath : "/preview/";
+ if (!normalizedActionPath.startsWith("/")) {
+ normalizedActionPath = "/" + normalizedActionPath;
+ }
+ if (!normalizedActionPath.endsWith("/")) {
+ normalizedActionPath = normalizedActionPath + "/";
+ }
+ String baseUrl = domain + prefix + normalizedActionPath + storageBlob.getUidFilename();
+
+ // -1 琛ㄧず姘镐箙鏈夋晥锛屼笉鐢熸垚 token锛屾敼涓� publicKey 缁勫悎鏍¢獙
+ if (expired != null && BigDecimal.valueOf(-1L).compareTo(expired) == 0) {
+ if (!StringUtils.hasText(storageBlob.getResourceKey())) {
+ throw new IllegalArgumentException("鍏紑閾炬帴缂哄皯publicKey");
+ }
+ return baseUrl + "?publicKey=" + storageBlob.getResourceKey();
+ }
+
long now = System.currentTimeMillis();
- long expiredMillis = expired.multiply(new BigDecimal("60000")).longValue();
+ BigDecimal expiredValue = expired == null ? new BigDecimal("120") : expired;
+ long expiredMillis = expiredValue.multiply(new BigDecimal("60000")).longValue();
if (expiredMillis <= 0L) {
expiredMillis = 2L * 60L * 60L * 1000L;
}
@@ -709,16 +771,7 @@
.signWith(key) // 閲嶇偣锛氫紶鍏ヤ笂闈㈢敓鎴愮殑 key 瀵硅薄锛岃�屼笉鏄� String
.compact();
cacheTokenUsage(token, expiredMillis);
- String domain = StringUtils.trimTrailingCharacter(properties.getDomain(), '/');
- String prefix = properties.getUrlPrefix().startsWith("/") ? properties.getUrlPrefix() : "/" + properties.getUrlPrefix();
- String normalizedActionPath = StringUtils.hasText(actionPath) ? actionPath : "/preview/";
- if (!normalizedActionPath.startsWith("/")) {
- normalizedActionPath = "/" + normalizedActionPath;
- }
- if (!normalizedActionPath.endsWith("/")) {
- normalizedActionPath = normalizedActionPath + "/";
- }
- return domain + prefix + normalizedActionPath + storageBlob.getUidFilename() + "?token=" + token;
+ return baseUrl + "?token=" + token;
}
private void cacheTokenUsage(String token, long expiredMillis) {
--
Gitblit v1.9.3