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
1a88eefc
Commit
1a88eefc
authored
Dec 23, 2025
by
huyuchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
huych-电子档案批量导入第三次提交
parent
a787f0c5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
67 additions
and
37 deletions
+67
-37
TTaskArchiveRelation.java
...yifu/cloud/plus/v1/batch/entity/TTaskArchiveRelation.java
+2
-3
TElectronicArchiveTaskController.java
...v1/batch/controller/TElectronicArchiveTaskController.java
+2
-2
ElectronicArchiveImportServiceImpl.java
...atch/service/impl/ElectronicArchiveImportServiceImpl.java
+35
-28
TElectronicArchiveDetailServiceImpl.java
...tch/service/impl/TElectronicArchiveDetailServiceImpl.java
+4
-3
TElectronicArchiveTaskServiceImpl.java
...batch/service/impl/TElectronicArchiveTaskServiceImpl.java
+24
-1
No files found.
yifu-batch/yifu-batch-api/src/main/java/com/yifu/cloud/plus/v1/batch/entity/TTaskArchiveRelation.java
View file @
1a88eefc
...
...
@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute
;
import
com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
...
...
@@ -18,9 +17,9 @@ import lombok.EqualsAndHashCode;
*/
@Data
@TableName
(
"t_task_archive_relation"
)
@EqualsAndHashCode
(
callSuper
=
true
)
@EqualsAndHashCode
()
@Schema
(
description
=
"电子档案上传任务和档案明细关系表"
)
public
class
TTaskArchiveRelation
extends
BaseEntity
{
public
class
TTaskArchiveRelation
{
/**
* 主键
...
...
yifu-batch/yifu-batch-biz/src/main/java/com/yifu/cloud/plus/v1/batch/controller/TElectronicArchiveTaskController.java
View file @
1a88eefc
...
...
@@ -77,7 +77,7 @@ public class TElectronicArchiveTaskController {
*/
@Operation
(
summary
=
"导入Excel模板文件"
,
description
=
"第一步:导入Excel模板文件,包含身份证、姓名、项目编码、项目名称"
)
@PostMapping
(
"/importExcel"
)
public
R
<?>
importExcel
(
@
Parameter
(
description
=
"Excel文件"
)
@RequestParam
(
"file"
)
MultipartFile
file
)
{
public
R
<?>
importExcel
(
@
RequestBody
MultipartFile
file
)
{
if
(
file
==
null
||
file
.
isEmpty
())
{
return
R
.
failed
(
"文件不能为空"
);
}
...
...
@@ -104,7 +104,7 @@ public class TElectronicArchiveTaskController {
@Operation
(
summary
=
"导入ZIP文件"
,
description
=
"第二步:导入ZIP文件,包含员工档案资料"
)
@PostMapping
(
"/importZip"
)
public
R
<?>
importZip
(
@Parameter
(
description
=
"ZIP文件"
)
@Request
Param
(
"file"
)
MultipartFile
file
,
@Parameter
(
description
=
"ZIP文件"
)
@Request
Body
MultipartFile
file
,
@Parameter
(
description
=
"任务ID"
)
@RequestParam
(
"taskId"
)
String
taskId
)
{
if
(
file
==
null
||
file
.
isEmpty
())
{
...
...
yifu-batch/yifu-batch-biz/src/main/java/com/yifu/cloud/plus/v1/batch/service/impl/ElectronicArchiveImportServiceImpl.java
View file @
1a88eefc
...
...
@@ -153,7 +153,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 建立任务和档案详情的关联关系
createTaskArchiveRelations
(
task
.
getId
(),
successList
);
return
R
.
ok
(
"导入成功,任务编号:"
+
task
Code
);
return
R
.
ok
(
"导入成功,任务编号:"
+
task
.
getId
()
);
}
catch
(
Exception
e
)
{
log
.
error
(
"导入Excel文件失败"
,
e
);
...
...
@@ -356,7 +356,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
File
tempZipFile
=
null
;
try
{
// 1. 校验ZIP大小
if
(
file
.
getSize
()
>
ArchiveConstants
.
ZIP_MAX_SIZE
)
{
long
fileSize
=
file
.
getSize
();
if
(
fileSize
>
ArchiveConstants
.
ZIP_MAX_SIZE
)
{
return
R
.
failed
(
"ZIP文件大小不能超过500M"
);
}
...
...
@@ -378,7 +379,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
taskService
.
updateById
(
task
);
// 将ZIP文件保存到临时目录
String
tempDirPath
=
System
.
getProperty
(
"java.io.tmpdir"
)
+
File
.
separator
+
"zip_upload_"
+
taskId
;
String
tempDirPath
=
System
.
getProperty
(
"java.io.tmpdir"
)
+
"zip_load/"
+
System
.
currentTimeMillis
()
+
"/"
;
File
tempDir
=
new
File
(
tempDirPath
);
if
(!
tempDir
.
exists
()
&&
!
tempDir
.
mkdirs
())
{
throw
new
IOException
(
"Failed to create directory: "
+
tempDirPath
);
...
...
@@ -390,7 +391,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 保存ZIP附件信息(记录临时文件路径)
TAttaInfo
zipAtta
=
new
TAttaInfo
();
zipAtta
.
setAttaName
(
file
.
getOriginalFilename
());
zipAtta
.
setAttaSize
(
file
.
getSize
()
);
zipAtta
.
setAttaSize
(
file
Size
);
zipAtta
.
setRelationType
(
ArchiveConstants
.
ATTA_RELATION_TYPE_ZIP
);
zipAtta
.
setDomainId
(
taskId
);
zipAtta
.
setStatus
(
ArchiveConstants
.
ATTA_STATUS_DISABLED
);
...
...
@@ -478,41 +479,47 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
d
->
d
));
// 创建临时目录用于解压ZIP文件
String
tempDirPath
=
System
.
getProperty
(
"java.io.tmpdir"
)
+
File
.
separator
+
"archive_"
+
taskId
+
"_"
+
System
.
currentTimeMillis
();
tempDir
=
new
File
(
tempDirPath
);
if
(!
tempDir
.
mkdirs
())
{
// 创建临时目录用于解压ZIP文件
String
tempDirPath
=
System
.
getProperty
(
"java.io.tmpdir"
)
+
File
.
separator
+
"archive_file"
+
File
.
separator
+
System
.
currentTimeMillis
()
+
File
.
separator
;
tempDir
=
new
File
(
tempDirPath
);
if
(!
tempDir
.
exists
()
&&
!
tempDir
.
mkdirs
())
{
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"创建临时目录失败"
);
}
// 解压ZIP文件
try
{
// 验证ZIP文件是否可读
if
(!
zipSourceFile
.
canRead
())
{
log
.
error
(
"ZIP文件不可读,路径:{}"
,
zipSourceFile
.
getAbsolutePath
());
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"
创建临时目录失败
"
);
return
R
.
failed
(
"
ZIP文件不可读
"
);
}
//
解压ZIP文件
// 使用指定字符集解压(支持中文文件名)
//
Windows系统通常使用GBK编码,Linux使用UTF-8
try
{
ZipUtil
.
unzip
(
zipSourceFile
,
tempDir
);
}
catch
(
Exception
e
)
{
log
.
error
(
"解压ZIP文件失败,任务ID:{}"
,
taskId
,
e
);
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"解压ZIP文件失败:"
+
e
.
getMessage
());
ZipUtil
.
unzip
(
zipSourceFile
,
tempDir
,
java
.
nio
.
charset
.
Charset
.
forName
(
"GBK"
));
}
catch
(
Exception
e1
)
{
// 如果GBK失败,尝试UTF-8
ZipUtil
.
unzip
(
zipSourceFile
,
tempDir
,
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"解压ZIP文件失败,任务ID:{},ZIP路径:{},临时目录:{}"
,
taskId
,
zipSourceFile
.
getAbsolutePath
(),
tempDirPath
,
e
);
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"解压ZIP文件失败:"
+
e
.
getMessage
()
+
",请检查ZIP文件是否完整且格式正确"
);
}
// 获取ZIP包的根目录(第一级目录)
// 获取ZIP包的根目录(第一级目录
,身份证+姓名目录
)
File
[]
zipRootDirs
=
tempDir
.
listFiles
(
File:
:
isDirectory
);
if
(
zipRootDirs
==
null
||
zipRootDirs
.
length
==
0
)
{
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"ZIP文件格式不正确"
);
}
File
zipRootDir
=
zipRootDirs
[
0
];
// 第一级目录
// 处理第二级目录(身份证+姓名目录)
File
[]
personDirs
=
zipRootDir
.
listFiles
(
File:
:
isDirectory
);
if
(
personDirs
==
null
||
personDirs
.
length
==
0
)
{
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"ZIP文件格式不正确"
);
}
// 遍历每个人员目录,递归处理所有附件
for
(
File
personDir
:
person
Dirs
)
{
for
(
File
personDir
:
zipRoot
Dirs
)
{
processPersonDirectory
(
personDir
,
detailMap
,
feedbackList
,
taskId
);
}
...
...
@@ -757,7 +764,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
detail
.
getId
()
);
if
(
uploadResult
==
null
||
!
R
.
isSuccess
(
uploadResult
))
{
if
(!
R
.
isSuccess
(
uploadResult
))
{
ArchiveFeedbackVO
feedback
=
createFeedbackVO
(
detail
,
materialType
,
ArchiveConstants
.
PROCESS_RESULT_FAILED
,
"文件上传失败:"
+
fileName
+
",原因:"
+
(
uploadResult
!=
null
?
uploadResult
.
getMsg
()
:
"未知错误"
));
...
...
yifu-batch/yifu-batch-biz/src/main/java/com/yifu/cloud/plus/v1/batch/service/impl/TElectronicArchiveDetailServiceImpl.java
View file @
1a88eefc
...
...
@@ -1001,11 +1001,12 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
public
void
initSearchVo
(
TElectronicArchiveDetailSearchVo
searchVo
)
{
YifuUser
user
=
SecurityUtils
.
getUser
();
long
roleId
=
1
839501715787390978
L
;
long
roleId
=
1
569585030423158786
L
;
boolean
isSsc
=
this
.
haveRole
(
user
,
roleId
);
if
(
isSsc
||
CommonConstants
.
ZERO_STRING
.
equals
(
user
.
getSystemFlag
()))
{
long
seeRoleId
=
2003347621962379266L
;
boolean
isSeeSsc
=
this
.
haveRole
(
user
,
seeRoleId
);
if
(
isSeeSsc
||
isSsc
||
CommonConstants
.
ZERO_STRING
.
equals
(
user
.
getSystemFlag
()))
{
searchVo
.
setAuthSql
(
null
);
return
;
}
}
...
...
yifu-batch/yifu-batch-biz/src/main/java/com/yifu/cloud/plus/v1/batch/service/impl/TElectronicArchiveTaskServiceImpl.java
View file @
1a88eefc
...
...
@@ -11,9 +11,12 @@ import com.yifu.cloud.plus.v1.batch.mapper.TElectronicArchiveTaskMapper;
import
com.yifu.cloud.plus.v1.batch.service.TElectronicArchiveTaskService
;
import
com.yifu.cloud.plus.v1.batch.service.TTaskArchiveRelationService
;
import
com.yifu.cloud.plus.v1.batch.vo.TElectronicArchiveTaskSearchVo
;
import
com.yifu.cloud.plus.v1.yifu.common.core.constant.ClientNameConstants
;
import
com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.Common
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.R
;
import
com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser
;
import
com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.log4j.Log4j2
;
import
org.springframework.stereotype.Service
;
...
...
@@ -42,7 +45,9 @@ public class TElectronicArchiveTaskServiceImpl extends ServiceImpl<TElectronicAr
*/
@Override
public
IPage
<
TElectronicArchiveTask
>
getTElectronicArchiveTaskPage
(
Page
<
TElectronicArchiveTask
>
page
,
TElectronicArchiveTaskSearchVo
tElectronicArchiveTask
){
return
baseMapper
.
getTElectronicArchiveTaskPage
(
page
,
tElectronicArchiveTask
);
//权限赋值
initSearchVo
(
tElectronicArchiveTask
);
return
baseMapper
.
getTElectronicArchiveTaskPage
(
page
,
tElectronicArchiveTask
);
}
@Override
...
...
@@ -68,4 +73,22 @@ public class TElectronicArchiveTaskServiceImpl extends ServiceImpl<TElectronicAr
return
R
.
ok
();
}
public
void
initSearchVo
(
TElectronicArchiveTaskSearchVo
searchVo
)
{
YifuUser
user
=
SecurityUtils
.
getUser
();
long
roleId
=
1569585030423158786L
;
boolean
isSsc
=
this
.
haveRole
(
user
,
roleId
);
if
(
isSsc
||
CommonConstants
.
ZERO_STRING
.
equals
(
user
.
getSystemFlag
()))
{
searchVo
.
setCreateBy
(
null
);
}
}
public
boolean
haveRole
(
YifuUser
user
,
long
roleId
)
{
List
<
Long
>
roleList
=
user
.
getClientRoleMap
().
get
(
ClientNameConstants
.
CLIENT_MVP
);
for
(
Long
role
:
roleList
)
{
if
(
role
==
roleId
)
{
return
true
;
}
}
return
false
;
}
}
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