Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
Y
yifu-mvp
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fangxinjiang
yifu-mvp
Commits
9a7278aa
Commit
9a7278aa
authored
Jan 13, 2026
by
huyuchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
huych-电子档案批量导入第五次提交
parent
1f1bd8e7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
83 additions
and
22 deletions
+83
-22
TElectronicArchiveDetailServiceImpl.java
...tch/service/impl/TElectronicArchiveDetailServiceImpl.java
+57
-22
OSSUtil.java
...com/yifu/cloud/plus/v1/yifu/common/core/util/OSSUtil.java
+26
-0
No files found.
yifu-batch/yifu-batch-biz/src/main/java/com/yifu/cloud/plus/v1/batch/service/impl/TElectronicArchiveDetailServiceImpl.java
View file @
9a7278aa
...
...
@@ -240,38 +240,61 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
}
}
// 2. 校验文件总大小是否超过500MB
long
totalSize
=
calculateTotalFileSize
(
downloadMap
);
long
maxSize
=
500
*
1024
*
1024L
;
// 500MB
if
(
totalSize
>
maxSize
)
{
log
.
warn
(
"批量下载文件总大小超过限制,总大小:{}MB,限制:500MB"
,
totalSize
/
1024
/
1024
);
response
.
setContentType
(
"application/json;charset=UTF-8"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
String
errorMsg
=
String
.
format
(
"{\"code\":1,\"msg\":\"下载文件总大小超过限制,当前总大小:%.2fMB,最大允许:500MB\"}"
,
totalSize
/
1024.0
/
1024.0
);
response
.
getWriter
().
write
(
errorMsg
);
return
;
}
// 3. 设置响应头
String
fileName
=
"电子档案批量下载_"
+
LocalDateTime
.
now
().
format
(
DateTimeFormatter
.
ofPattern
(
"yyyyMMddHHmmss"
))
+
".zip"
;
response
.
setContentType
(
"application/zip"
);
// 2. 校验文件总大小是否超过500MB
long
totalSize
=
calculateTotalFileSize
(
downloadMap
);
long
maxSize
=
500
*
1024
*
1024L
;
// 500MB
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"TElectronicArchiveDetailServiceImpl.java:244\",\"message\":\"开始批量下载\",\"data\":{\"totalSizeMB\":"
+(
totalSize
/
1024
/
1024
)+
",\"fileCount\":"
+
downloadMap
.
size
()+
"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H2\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
e
){}
// #endregion
if
(
totalSize
>
maxSize
)
{
log
.
warn
(
"批量下载文件总大小超过限制,总大小:{}MB,限制:500MB"
,
totalSize
/
1024
/
1024
);
response
.
setContentType
(
"application/json;charset=UTF-8"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
response
.
setHeader
(
CommonConstants
.
CONTENT_DISPOSITION
,
"attachment; filename="
+
URLEncoder
.
encode
(
fileName
,
"UTF-8"
));
// 4. 创建ZIP输出流
try
(
ZipOutputStream
zipOut
=
new
ZipOutputStream
(
response
.
getOutputStream
()))
{
String
errorMsg
=
String
.
format
(
"{\"code\":1,\"msg\":\"下载文件总大小超过限制,当前总大小:%.2fMB,最大允许:500MB\"}"
,
totalSize
/
1024.0
/
1024.0
);
response
.
getWriter
().
write
(
errorMsg
);
return
;
}
// 3. 设置响应头
String
fileName
=
"电子档案批量下载_"
+
LocalDateTime
.
now
().
format
(
DateTimeFormatter
.
ofPattern
(
"yyyyMMddHHmmss"
))
+
".zip"
;
response
.
setContentType
(
"application/zip"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
response
.
setHeader
(
CommonConstants
.
CONTENT_DISPOSITION
,
"attachment; filename="
+
URLEncoder
.
encode
(
fileName
,
"UTF-8"
));
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"TElectronicArchiveDetailServiceImpl.java:263\",\"message\":\"响应头已设置\",\"data\":{\"fileName\":\""
+
fileName
+
"\"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H2\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
e
){}
// #endregion
// 4. 创建ZIP输出流
try
(
ZipOutputStream
zipOut
=
new
ZipOutputStream
(
response
.
getOutputStream
()))
{
// 5. 下载并打包档案文件
// #region agent log
long
totalBytesWritten
=
0
;
int
folderIndex
=
0
;
// #endregion
for
(
Map
.
Entry
<
String
,
ArchiveDownloadInfo
>
entry
:
downloadMap
.
entrySet
())
{
String
folderName
=
entry
.
getKey
();
ArchiveDownloadInfo
downloadInfo
=
entry
.
getValue
();
// #region agent log
folderIndex
++;
long
beforeWrite
=
totalBytesWritten
;
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"TElectronicArchiveDetailServiceImpl.java:280\",\"message\":\"开始处理文件夹\",\"data\":{\"folderIndex\":"
+
folderIndex
+
",\"folderName\":\""
+
folderName
.
replace
(
"\""
,
"\\\""
).
replace
(
"\\"
,
"/"
)+
"\",\"totalBytesWritten\":"
+
totalBytesWritten
+
"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H4\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
try
{
downloadArchiveFiles
(
zipOut
,
folderName
,
downloadInfo
);
// #region agent log
try
{
zipOut
.
flush
();
response
.
getOutputStream
().
flush
();}
catch
(
Exception
ex
){}
totalBytesWritten
+=
(
downloadInfo
.
getMaterialTypeAttaMap
().
values
().
stream
().
mapToLong
(
list
->
list
.
stream
().
mapToLong
(
atta
->
atta
.
getAttaSize
()!=
null
?
atta
.
getAttaSize
():
0
).
sum
()).
sum
());
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"TElectronicArchiveDetailServiceImpl.java:285\",\"message\":\"文件夹处理完成\",\"data\":{\"folderIndex\":"
+
folderIndex
+
",\"folderName\":\""
+
folderName
.
replace
(
"\""
,
"\\\""
).
replace
(
"\\"
,
"/"
)+
"\",\"totalBytesWritten\":"
+
totalBytesWritten
+
",\"bytesInFolder\":"
+(
totalBytesWritten
-
beforeWrite
)+
"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H3,H4\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
// 更新反馈状态为成功
// 使用materialTypeAttaMap的所有key来匹配,确保所有资料类型的反馈都被更新
Set
<
String
>
materialTypes
=
downloadInfo
.
getMaterialTypeAttaMap
().
keySet
();
...
...
@@ -301,13 +324,25 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
}
// 6. 生成并添加反馈Excel表
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"TElectronicArchiveDetailServiceImpl.java:311\",\"message\":\"开始添加反馈Excel\",\"data\":{\"totalBytesWritten\":"
+
totalBytesWritten
+
"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H4\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
addFeedbackExcel
(
zipOut
,
feedbackList
);
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"TElectronicArchiveDetailServiceImpl.java:313\",\"message\":\"开始finish zip\",\"data\":{\"totalBytesWritten\":"
+
totalBytesWritten
+
"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H4\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
zipOut
.
finish
();
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"TElectronicArchiveDetailServiceImpl.java:315\",\"message\":\"zip finish完成\",\"data\":{\"totalBytesWritten\":"
+
totalBytesWritten
+
"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H4\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
}
}
catch
(
Exception
e
)
{
log
.
error
(
"批量下载电子档案失败"
,
e
);
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"TElectronicArchiveDetailServiceImpl.java:319\",\"message\":\"批量下载异常\",\"data\":{\"error\":\""
+
e
.
getMessage
().
replace
(
"\""
,
"\\\""
).
replace
(
"\\"
,
"/"
).
substring
(
0
,
Math
.
min
(
100
,
e
.
getMessage
().
length
()))+
"\",\"exceptionClass\":\""
+
e
.
getClass
().
getName
()+
"\"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H2,H3,H4,H5\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
}
}
...
...
yifu-common/yifu-common-core/src/main/java/com/yifu/cloud/plus/v1/yifu/common/core/util/OSSUtil.java
View file @
9a7278aa
...
...
@@ -241,7 +241,17 @@ public class OSSUtil {
log
.
error
(
"oss客户端获取错误,无此客户端"
,
clientIndex
);
}
else
{
OSSObject
ossObject
=
null
;
// #region agent log
int
fileIndex
=
0
;
long
totalBytesRead
=
0
;
// #endregion
for
(
OSSObjectBean
key:
srcList
){
// #region agent log
fileIndex
++;
long
fileBytesRead
=
0
;
String
fileName
=
key
.
getName
()!=
null
?
key
.
getName
().
replace
(
"\""
,
"\\\""
).
replace
(
"\\"
,
"/"
):
"null"
;
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"OSSUtil.java:246\",\"message\":\"开始读取OSS文件\",\"data\":{\"fileIndex\":"
+
fileIndex
+
",\"fileName\":\""
+
fileName
+
"\",\"key\":\""
+
key
.
getKey
().
replace
(
"\""
,
"\\\""
).
replace
(
"\\"
,
"/"
)+
"\"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H5\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
ossObject
=
client
.
getObject
(
bucketName
,
key
.
getKey
());
if
(
null
!=
ossObject
){
...
...
@@ -254,20 +264,36 @@ public class OSSUtil {
int
len
;
while
((
len
=
inputStream
.
read
(
buf
))
!=
-
1
){
zip
.
write
(
buf
,
0
,
len
);
// #region agent log
fileBytesRead
+=
len
;
totalBytesRead
+=
len
;
// #endregion
}
}
// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
IoUtil
.
close
(
inputStream
);
zip
.
closeEntry
();
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"OSSUtil.java:262\",\"message\":\"OSS文件读取完成\",\"data\":{\"fileIndex\":"
+
fileIndex
+
",\"fileName\":\""
+
fileName
+
"\",\"fileBytesRead\":"
+
fileBytesRead
+
",\"totalBytesRead\":"
+
totalBytesRead
+
"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H5\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
}
}
// 关闭OSSClient。
}
catch
(
OSSException
oe
)
{
ossexceptionlog
(
oe
);
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"OSSUtil.java:266\",\"message\":\"OSS异常\",\"data\":{\"error\":\""
+
oe
.
getMessage
().
replace
(
"\""
,
"\\\""
).
replace
(
"\\"
,
"/"
).
substring
(
0
,
Math
.
min
(
100
,
oe
.
getMessage
().
length
()))+
"\",\"errorCode\":\""
+
oe
.
getErrorCode
()+
"\"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H5\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
}
catch
(
ClientException
ce
)
{
clientExceptionLog
(
ce
);
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"OSSUtil.java:268\",\"message\":\"OSS Client异常\",\"data\":{\"error\":\""
+
ce
.
getMessage
().
replace
(
"\""
,
"\\\""
).
replace
(
"\\"
,
"/"
).
substring
(
0
,
Math
.
min
(
100
,
ce
.
getMessage
().
length
()))+
"\",\"errorCode\":\""
+
ce
.
getErrorCode
()+
"\"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H5\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
// #region agent log
try
{
java
.
nio
.
file
.
Files
.
write
(
java
.
nio
.
file
.
Paths
.
get
(
"e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"
),(
"{\"location\":\"OSSUtil.java:270\",\"message\":\"IO异常\",\"data\":{\"error\":\""
+
e
.
getMessage
().
replace
(
"\""
,
"\\\""
).
replace
(
"\\"
,
"/"
).
substring
(
0
,
Math
.
min
(
100
,
e
.
getMessage
().
length
()))+
"\",\"exceptionClass\":\""
+
e
.
getClass
().
getName
()+
"\"},\"timestamp\":"
+
System
.
currentTimeMillis
()+
",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H3,H4,H5\"}\n"
).
getBytes
(
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
),
java
.
nio
.
file
.
StandardOpenOption
.
CREATE
,
java
.
nio
.
file
.
StandardOpenOption
.
APPEND
);}
catch
(
Exception
ex
){}
// #endregion
}
finally
{
IoUtil
.
close
(
inputStream
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment