Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
travel-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
cloud
travel-cloud
Commits
f52e62b1
提交
f52e62b1
authored
5月 26, 2025
作者:
hzh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
邮件发送功能实现
上级
711bf8c2
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
65 行增加
和
1 行删除
+65
-1
FileUtils.java
...in/java/org/dromara/common/core/utils/file/FileUtils.java
+46
-0
SysDeptOssBo.java
.../main/java/org/dromara/system/domain/bo/SysDeptOssBo.java
+0
-1
FileApproveServiceImpl.java
...dromara/workflow/service/impl/FileApproveServiceImpl.java
+19
-0
没有找到文件。
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/file/FileUtils.java
浏览文件 @
f52e62b1
...
...
@@ -2,12 +2,16 @@ package org.dromara.common.core.utils.file;
import
cn.hutool.core.io.FileUtil
;
import
cn.hutool.core.util.IdUtil
;
import
cn.hutool.core.util.URLUtil
;
import
cn.hutool.http.HttpUtil
;
import
jakarta.servlet.http.HttpServletResponse
;
import
lombok.AccessLevel
;
import
lombok.NoArgsConstructor
;
import
lombok.SneakyThrows
;
import
org.dromara.common.core.utils.StringUtils
;
import
java.io.File
;
import
java.net.URL
;
import
java.net.URLEncoder
;
import
java.nio.charset.StandardCharsets
;
...
...
@@ -88,4 +92,46 @@ public class FileUtils extends FileUtil {
FileUtil
.
writeUtf8String
(
data
,
file
);
return
file
;
}
/**
* 将 URL 转换为 File 对象(自动处理本地/网络 URL)
*
* @param urlStr URL 字符串(支持 file:/// 或 http(s):// 协议)
* @return 本地 File 对象(网络 URL 会先下载到临时目录)
* @throws Exception 转换失败时抛出异常
*/
public
static
File
convert
(
String
urlStr
,
String
fileName
)
throws
Exception
{
URL
url
=
URLUtil
.
url
(
urlStr
);
// 1. 处理本地文件 URL(file 协议)
if
(
"file"
.
equals
(
url
.
getProtocol
()))
{
return
new
File
(
url
.
getPath
());
}
// 2. 处理网络 URL(http/https 等),需先下载到本地
else
{
return
downloadToLocal
(
urlStr
,
fileName
);
}
}
/**
* 下载网络 URL 到本地临时目录
*/
private
static
File
downloadToLocal
(
String
urlStr
,
String
fileName
)
{
try
{
// 从 URL 中提取文件名
if
(
StringUtils
.
isEmpty
(
fileName
))
{
fileName
=
urlStr
.
substring
(
urlStr
.
lastIndexOf
(
"/"
)
+
1
);
}
// 生成临时文件路径(使用系统临时目录)
String
tempDir
=
System
.
getProperty
(
"java.io.tmpdir"
);
String
localPath
=
tempDir
+
File
.
separator
+
fileName
;
// 使用 Hutool 下载文件(支持超时和重试)
HttpUtil
.
downloadFile
(
urlStr
,
localPath
);
return
new
File
(
localPath
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"URL 下载失败:"
+
urlStr
,
e
);
}
}
}
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDeptOssBo.java
浏览文件 @
f52e62b1
...
...
@@ -69,7 +69,6 @@ public class SysDeptOssBo extends BaseEntity {
/**
* 是否公开
*/
@NotNull
(
message
=
"是否公开不能为空"
,
groups
=
{
AddGroup
.
class
,
EditGroup
.
class
})
private
Boolean
open
;
/**
...
...
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FileApproveServiceImpl.java
浏览文件 @
f52e62b1
...
...
@@ -9,8 +9,11 @@ import org.dromara.common.core.enums.BusinessStatusEnum;
import
org.dromara.common.core.utils.MapstructUtils
;
import
org.dromara.common.core.utils.StreamUtils
;
import
org.dromara.common.core.utils.StringUtils
;
import
org.dromara.common.core.utils.file.FileUtils
;
import
org.dromara.common.mail.utils.MailUtils
;
import
org.dromara.common.mybatis.core.mapper.BaseMapperPlus
;
import
org.dromara.common.mybatis.service.AbstractBaseService
;
import
org.dromara.resource.api.RemoteFileService
;
import
org.dromara.workflow.api.domain.RemoteWorkflowService
;
import
org.dromara.workflow.api.domain.event.ProcessEvent
;
import
org.dromara.workflow.api.domain.event.ProcessTaskEvent
;
...
...
@@ -20,6 +23,7 @@ import org.dromara.workflow.domain.vo.FileApproveVo;
import
org.dromara.workflow.mapper.FileApproveMapper
;
import
org.dromara.workflow.service.IFileApproveService
;
import
org.dromara.workflow.utils.QueryUtils
;
import
org.dromara.workflow.utils.WorkflowUtils
;
import
org.springframework.context.event.EventListener
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -43,6 +47,8 @@ public class FileApproveServiceImpl extends AbstractBaseService<FileApproveVo, F
private
final
FileApproveMapper
baseMapper
;
@DubboReference
private
final
RemoteWorkflowService
workflowService
;
@DubboReference
private
final
RemoteFileService
remoteFileService
;
@Override
public
BaseMapperPlus
<
FileApprove
,
FileApproveVo
>
mapper
()
{
...
...
@@ -107,6 +113,19 @@ public class FileApproveServiceImpl extends AbstractBaseService<FileApproveVo, F
fa
.
setStatus
(
BusinessStatusEnum
.
WAITING
.
getStatus
());
}
baseMapper
.
updateById
(
fa
);
//审批完成
if
(
StringUtils
.
equals
(
processEvent
.
getStatus
(),
BusinessStatusEnum
.
FINISH
.
getStatus
()))
{
try
{
//发送邮件
Map
<
String
,
Object
>
entity
=
(
Map
<
String
,
Object
>)
WorkflowUtils
.
getHistoricVariableByBusinessKey
(
processEvent
.
getBusinessKey
(),
"entity"
);
String
url
=
entity
.
get
(
"fileUrl"
).
toString
();
String
fileName
=
entity
.
get
(
"fileName"
).
toString
();
MailUtils
.
send
(
fa
.
getEmail
(),
"部门文件下载"
,
""
,
false
,
FileUtils
.
convert
(
url
,
fileName
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
info
(
"邮件发送失败,邮箱{}"
,
fa
.
getEmail
());
}
}
}
/**
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论