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
You need to sign in or sign up before continuing.
Commit
1a88eefc
authored
Dec 23, 2025
by
huyuchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
huych-电子档案批量导入第三次提交
parent
a787f0c5
Show 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;
...
@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
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.core.constant.ExcelAttribute
;
import
com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
...
@@ -18,9 +17,9 @@ import lombok.EqualsAndHashCode;
...
@@ -18,9 +17,9 @@ import lombok.EqualsAndHashCode;
*/
*/
@Data
@Data
@TableName
(
"t_task_archive_relation"
)
@TableName
(
"t_task_archive_relation"
)
@EqualsAndHashCode
(
callSuper
=
true
)
@EqualsAndHashCode
()
@Schema
(
description
=
"电子档案上传任务和档案明细关系表"
)
@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 {
...
@@ -77,7 +77,7 @@ public class TElectronicArchiveTaskController {
*/
*/
@Operation
(
summary
=
"导入Excel模板文件"
,
description
=
"第一步:导入Excel模板文件,包含身份证、姓名、项目编码、项目名称"
)
@Operation
(
summary
=
"导入Excel模板文件"
,
description
=
"第一步:导入Excel模板文件,包含身份证、姓名、项目编码、项目名称"
)
@PostMapping
(
"/importExcel"
)
@PostMapping
(
"/importExcel"
)
public
R
<?>
importExcel
(
@
Parameter
(
description
=
"Excel文件"
)
@RequestParam
(
"file"
)
MultipartFile
file
)
{
public
R
<?>
importExcel
(
@
RequestBody
MultipartFile
file
)
{
if
(
file
==
null
||
file
.
isEmpty
())
{
if
(
file
==
null
||
file
.
isEmpty
())
{
return
R
.
failed
(
"文件不能为空"
);
return
R
.
failed
(
"文件不能为空"
);
}
}
...
@@ -104,7 +104,7 @@ public class TElectronicArchiveTaskController {
...
@@ -104,7 +104,7 @@ public class TElectronicArchiveTaskController {
@Operation
(
summary
=
"导入ZIP文件"
,
description
=
"第二步:导入ZIP文件,包含员工档案资料"
)
@Operation
(
summary
=
"导入ZIP文件"
,
description
=
"第二步:导入ZIP文件,包含员工档案资料"
)
@PostMapping
(
"/importZip"
)
@PostMapping
(
"/importZip"
)
public
R
<?>
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
)
{
@Parameter
(
description
=
"任务ID"
)
@RequestParam
(
"taskId"
)
String
taskId
)
{
if
(
file
==
null
||
file
.
isEmpty
())
{
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
...
@@ -153,7 +153,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 建立任务和档案详情的关联关系
// 建立任务和档案详情的关联关系
createTaskArchiveRelations
(
task
.
getId
(),
successList
);
createTaskArchiveRelations
(
task
.
getId
(),
successList
);
return
R
.
ok
(
"导入成功,任务编号:"
+
task
Code
);
return
R
.
ok
(
"导入成功,任务编号:"
+
task
.
getId
()
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"导入Excel文件失败"
,
e
);
log
.
error
(
"导入Excel文件失败"
,
e
);
...
@@ -356,7 +356,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
...
@@ -356,7 +356,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
File
tempZipFile
=
null
;
File
tempZipFile
=
null
;
try
{
try
{
// 1. 校验ZIP大小
// 1. 校验ZIP大小
if
(
file
.
getSize
()
>
ArchiveConstants
.
ZIP_MAX_SIZE
)
{
long
fileSize
=
file
.
getSize
();
if
(
fileSize
>
ArchiveConstants
.
ZIP_MAX_SIZE
)
{
return
R
.
failed
(
"ZIP文件大小不能超过500M"
);
return
R
.
failed
(
"ZIP文件大小不能超过500M"
);
}
}
...
@@ -378,7 +379,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
...
@@ -378,7 +379,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
taskService
.
updateById
(
task
);
taskService
.
updateById
(
task
);
// 将ZIP文件保存到临时目录
// 将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
);
File
tempDir
=
new
File
(
tempDirPath
);
if
(!
tempDir
.
exists
()
&&
!
tempDir
.
mkdirs
())
{
if
(!
tempDir
.
exists
()
&&
!
tempDir
.
mkdirs
())
{
throw
new
IOException
(
"Failed to create directory: "
+
tempDirPath
);
throw
new
IOException
(
"Failed to create directory: "
+
tempDirPath
);
...
@@ -390,7 +391,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
...
@@ -390,7 +391,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 保存ZIP附件信息(记录临时文件路径)
// 保存ZIP附件信息(记录临时文件路径)
TAttaInfo
zipAtta
=
new
TAttaInfo
();
TAttaInfo
zipAtta
=
new
TAttaInfo
();
zipAtta
.
setAttaName
(
file
.
getOriginalFilename
());
zipAtta
.
setAttaName
(
file
.
getOriginalFilename
());
zipAtta
.
setAttaSize
(
file
.
getSize
()
);
zipAtta
.
setAttaSize
(
file
Size
);
zipAtta
.
setRelationType
(
ArchiveConstants
.
ATTA_RELATION_TYPE_ZIP
);
zipAtta
.
setRelationType
(
ArchiveConstants
.
ATTA_RELATION_TYPE_ZIP
);
zipAtta
.
setDomainId
(
taskId
);
zipAtta
.
setDomainId
(
taskId
);
zipAtta
.
setStatus
(
ArchiveConstants
.
ATTA_STATUS_DISABLED
);
zipAtta
.
setStatus
(
ArchiveConstants
.
ATTA_STATUS_DISABLED
);
...
@@ -479,40 +480,46 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
...
@@ -479,40 +480,46 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
));
));
// 创建临时目录用于解压ZIP文件
// 创建临时目录用于解压ZIP文件
String
tempDirPath
=
System
.
getProperty
(
"java.io.tmpdir"
)
+
File
.
separator
+
"archive_"
+
taskId
+
"_"
+
System
.
currentTimeMillis
();
String
tempDirPath
=
System
.
getProperty
(
"java.io.tmpdir"
)
+
File
.
separator
+
"archive_file"
+
File
.
separator
+
System
.
currentTimeMillis
()
+
File
.
separator
;
tempDir
=
new
File
(
tempDirPath
);
tempDir
=
new
File
(
tempDirPath
);
if
(
!
tempDir
.
mkdirs
())
{
if
(!
tempDir
.
exists
()
&&
!
tempDir
.
mkdirs
())
{
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"创建临时目录失败"
);
return
R
.
failed
(
"创建临时目录失败"
);
}
}
// 解压ZIP文件
// 解压ZIP文件
try
{
try
{
ZipUtil
.
unzip
(
zipSourceFile
,
tempDir
);
// 验证ZIP文件是否可读
if
(!
zipSourceFile
.
canRead
())
{
log
.
error
(
"ZIP文件不可读,路径:{}"
,
zipSourceFile
.
getAbsolutePath
());
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"ZIP文件不可读"
);
}
// 使用指定字符集解压(支持中文文件名)
// Windows系统通常使用GBK编码,Linux使用UTF-8
try
{
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
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"解压ZIP文件失败,任务ID:{}"
,
taskId
,
e
);
log
.
error
(
"解压ZIP文件失败,任务ID:{},ZIP路径:{},临时目录:{}"
,
taskId
,
zipSourceFile
.
getAbsolutePath
(),
tempDirPath
,
e
);
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"解压ZIP文件失败:"
+
e
.
getMessage
()
);
return
R
.
failed
(
"解压ZIP文件失败:"
+
e
.
getMessage
()
+
",请检查ZIP文件是否完整且格式正确"
);
}
}
// 获取ZIP包的根目录(第一级目录)
// 获取ZIP包的根目录(第一级目录
,身份证+姓名目录
)
File
[]
zipRootDirs
=
tempDir
.
listFiles
(
File:
:
isDirectory
);
File
[]
zipRootDirs
=
tempDir
.
listFiles
(
File:
:
isDirectory
);
if
(
zipRootDirs
==
null
||
zipRootDirs
.
length
==
0
)
{
if
(
zipRootDirs
==
null
||
zipRootDirs
.
length
==
0
)
{
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
updateTaskStatus
(
task
,
ArchiveConstants
.
TASK_STATUS_NOT_UPLOADED
);
return
R
.
failed
(
"ZIP文件格式不正确"
);
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
);
processPersonDirectory
(
personDir
,
detailMap
,
feedbackList
,
taskId
);
}
}
...
@@ -757,7 +764,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
...
@@ -757,7 +764,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
detail
.
getId
()
detail
.
getId
()
);
);
if
(
uploadResult
==
null
||
!
R
.
isSuccess
(
uploadResult
))
{
if
(!
R
.
isSuccess
(
uploadResult
))
{
ArchiveFeedbackVO
feedback
=
createFeedbackVO
(
detail
,
materialType
,
ArchiveFeedbackVO
feedback
=
createFeedbackVO
(
detail
,
materialType
,
ArchiveConstants
.
PROCESS_RESULT_FAILED
,
ArchiveConstants
.
PROCESS_RESULT_FAILED
,
"文件上传失败:"
+
fileName
+
",原因:"
+
(
uploadResult
!=
null
?
uploadResult
.
getMsg
()
:
"未知错误"
));
"文件上传失败:"
+
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
...
@@ -1001,11 +1001,12 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
public
void
initSearchVo
(
TElectronicArchiveDetailSearchVo
searchVo
)
{
public
void
initSearchVo
(
TElectronicArchiveDetailSearchVo
searchVo
)
{
YifuUser
user
=
SecurityUtils
.
getUser
();
YifuUser
user
=
SecurityUtils
.
getUser
();
long
roleId
=
1
839501715787390978
L
;
long
roleId
=
1
569585030423158786
L
;
boolean
isSsc
=
this
.
haveRole
(
user
,
roleId
);
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
);
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;
...
@@ -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.TElectronicArchiveTaskService
;
import
com.yifu.cloud.plus.v1.batch.service.TTaskArchiveRelationService
;
import
com.yifu.cloud.plus.v1.batch.service.TTaskArchiveRelationService
;
import
com.yifu.cloud.plus.v1.batch.vo.TElectronicArchiveTaskSearchVo
;
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.constant.CommonConstants
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.Common
;
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.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.RequiredArgsConstructor
;
import
lombok.extern.log4j.Log4j2
;
import
lombok.extern.log4j.Log4j2
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -42,6 +45,8 @@ public class TElectronicArchiveTaskServiceImpl extends ServiceImpl<TElectronicAr
...
@@ -42,6 +45,8 @@ public class TElectronicArchiveTaskServiceImpl extends ServiceImpl<TElectronicAr
*/
*/
@Override
@Override
public
IPage
<
TElectronicArchiveTask
>
getTElectronicArchiveTaskPage
(
Page
<
TElectronicArchiveTask
>
page
,
TElectronicArchiveTaskSearchVo
tElectronicArchiveTask
){
public
IPage
<
TElectronicArchiveTask
>
getTElectronicArchiveTaskPage
(
Page
<
TElectronicArchiveTask
>
page
,
TElectronicArchiveTaskSearchVo
tElectronicArchiveTask
){
//权限赋值
initSearchVo
(
tElectronicArchiveTask
);
return
baseMapper
.
getTElectronicArchiveTaskPage
(
page
,
tElectronicArchiveTask
);
return
baseMapper
.
getTElectronicArchiveTaskPage
(
page
,
tElectronicArchiveTask
);
}
}
...
@@ -68,4 +73,22 @@ public class TElectronicArchiveTaskServiceImpl extends ServiceImpl<TElectronicAr
...
@@ -68,4 +73,22 @@ public class TElectronicArchiveTaskServiceImpl extends ServiceImpl<TElectronicAr
return
R
.
ok
();
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