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
f60dee3f
You need to sign in or sign up before continuing.
Commit
f60dee3f
authored
Jan 07, 2026
by
huyuchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
huych-电子档案批量导入第五次提交
parent
3ab15459
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
16 deletions
+26
-16
ElectronicArchiveImportServiceImpl.java
...atch/service/impl/ElectronicArchiveImportServiceImpl.java
+26
-16
No files found.
yifu-batch/yifu-batch-biz/src/main/java/com/yifu/cloud/plus/v1/batch/service/impl/ElectronicArchiveImportServiceImpl.java
View file @
f60dee3f
...
...
@@ -559,15 +559,16 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 获取ZIP包的根目录(第一级目录,身份证+姓名目录)
File
[]
zipRootDirs
=
tempDir
.
listFiles
(
File:
:
isDirectory
);
Map
<
String
,
File
>
zipDirMap
=
new
HashMap
<>();
Map
<
String
,
List
<
File
>
>
zipDirMap
=
new
HashMap
<>();
if
(
zipRootDirs
!=
null
&&
zipRootDirs
.
length
>
0
)
{
// 将ZIP中的目录按照 身份证_姓名 建立映射
// 将ZIP中的目录按照 身份证_姓名 建立映射
,支持同一个人有多个文件夹
for
(
File
personDir
:
zipRootDirs
)
{
String
dirName
=
personDir
.
getName
();
Map
<
String
,
String
>
idNameMap
=
parseIdCardAndName
(
dirName
);
if
(!
idNameMap
.
isEmpty
()
&&
idNameMap
.
containsKey
(
"idCard"
)
&&
idNameMap
.
containsKey
(
"name"
))
{
String
uniqueKey
=
idNameMap
.
get
(
"idCard"
)
+
"_"
+
idNameMap
.
get
(
"name"
);
zipDirMap
.
put
(
uniqueKey
,
personDir
);
// 使用List存储,支持同一个人有多个文件夹
zipDirMap
.
computeIfAbsent
(
uniqueKey
,
k
->
new
ArrayList
<>()).
add
(
personDir
);
}
}
}
...
...
@@ -583,19 +584,22 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
String
uniqueKey
=
detail
.
getEmpIdcard
()
+
"_"
+
detail
.
getEmpName
();
// 检查ZIP中是否存在该人员的目录
File
personDir
=
zipDirMap
.
get
(
uniqueKey
);
List
<
File
>
personDirs
=
zipDirMap
.
get
(
uniqueKey
);
if
(
personDir
==
null
)
{
if
(
personDir
s
==
null
||
personDirs
.
isEmpty
()
)
{
// ZIP中没有该人员的文件夹,记录为跳过
personProcessResultMap
.
put
(
uniqueKey
,
ArchiveConstants
.
PROCESS_RESULT_SKIP
);
personFailReasonMap
.
put
(
uniqueKey
,
"压缩包中未找到对应文件夹,跳过处理"
);
personMaterialTypesMap
.
put
(
uniqueKey
,
new
ArrayList
<>());
}
else
{
// ZIP中存在该人员的文件夹,处理其附件
// ZIP中存在该人员的文件夹,处理其附件
(可能有多个文件夹)
List
<
String
>
materialTypes
=
new
ArrayList
<>();
List
<
String
>
failReasons
=
new
ArrayList
<>();
// 遍历该人员的所有文件夹
for
(
File
personDir
:
personDirs
)
{
processPersonDirectoryWithResult
(
personDir
,
detail
,
materialTypes
,
failReasons
,
taskId
);
}
personMaterialTypesMap
.
put
(
uniqueKey
,
materialTypes
);
...
...
@@ -837,6 +841,9 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 用于记录该人员的所有资料类型
Set
<
String
>
materialTypesSet
=
new
HashSet
<>();
// 收集直接文件(作为存量类型处理)
List
<
File
>
stockFiles
=
new
ArrayList
<>();
// 遍历第三级,按资料类型分组处理所有文件
for
(
File
subFile
:
subFiles
)
{
if
(
subFile
.
isDirectory
())
{
...
...
@@ -866,17 +873,20 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
failReasons
.
add
(
materialType
+
":"
+
result
);
}
}
else
{
// 直接是文件,默认为存量类型,按单个文件处理
List
<
File
>
singleFileList
=
new
ArrayList
<>();
singleFileList
.
add
(
subFile
);
String
result
=
processMaterialTypeFilesWithResult
(
singleFileList
,
detail
,
ArchiveConstants
.
MATERIAL_TYPE_STOCK
,
taskId
);
// 直接是文件,收集起来统一作为存量类型处理
stockFiles
.
add
(
subFile
);
}
}
// 统一处理所有直接文件(存量类型)
if
(!
stockFiles
.
isEmpty
())
{
String
result
=
processMaterialTypeFilesWithResult
(
stockFiles
,
detail
,
ArchiveConstants
.
MATERIAL_TYPE_STOCK
,
taskId
);
if
(
"success"
.
equals
(
result
))
{
materialTypesSet
.
add
(
ArchiveConstants
.
MATERIAL_TYPE_STOCK
);
}
else
{
failReasons
.
add
(
ArchiveConstants
.
MATERIAL_TYPE_STOCK
+
":"
+
result
);
}
}
}
// 更新明细表的资料类型和状态
if
(!
materialTypesSet
.
isEmpty
())
{
...
...
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