Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dcs-doc-expand
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
INET-TWO
server
dcs-doc-expand
Commits
177f4914
Commit
177f4914
authored
Nov 18, 2024
by
wangqiang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
生成卷内目录物理文档和备考表物理文件
parent
7581b47e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
156 additions
and
18 deletions
+156
-18
ExtFilesServiceImpl.java
...t/dcs/document/core/service/impl/ExtFilesServiceImpl.java
+156
-18
No files found.
inet-doc-expand-core/src/main/java/com/inet/dcs/document/core/service/impl/ExtFilesServiceImpl.java
View file @
177f4914
...
...
@@ -3,12 +3,15 @@ package com.inet.dcs.document.core.service.impl;
import
cn.hutool.core.lang.Assert
;
import
com.inet.dcs.document.common.vo.ExtFilesDocLinkVO
;
import
com.inet.dcs.document.common.vo.ExtFilesVO
;
import
com.inet.dcs.document.common.vo.ExtTransferDocLinkVO
;
import
com.inet.dcs.document.common.vo.archivesOtherVO.ExtFilesUpdateVO
;
import
com.inet.dcs.document.core.constants.Constants
;
import
com.inet.dcs.document.core.repository.ExtFilesRepository
;
import
com.inet.dcs.document.core.service.ExtDocService
;
import
com.inet.dcs.document.core.service.ExtFilesDocLinkService
;
import
com.inet.dcs.document.core.service.ExtFilesService
;
import
com.inet.dcs.document.core.service.ExtTransferDocLinkService
;
import
com.inet.dcs.document.core.util.DateUtils
;
import
com.inet.dcs.document.core.util.SearchUtil
;
import
com.inet.dcs.document.core.util.WordUtils
;
import
com.inet.dcs.document.entity.po.ExtFiles
;
...
...
@@ -38,6 +41,7 @@ import com.yonde.dex.user.feign.DxUserInfoFeign;
import
com.yonde.dex.vo.info.DxApplicationVO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.StringUtils
;
...
...
@@ -92,6 +96,8 @@ public class ExtFilesServiceImpl<V extends ExtFilesVO> implements ExtFilesServic
@Autowired
private
DxOrganizationFeign
organizationService
;
@Autowired
private
ExtTransferDocLinkService
extTransferDocLinkService
;
@Override
public
void
beforeSave
(
Collection
<
V
>
target
)
{
...
...
@@ -320,6 +326,23 @@ public class ExtFilesServiceImpl<V extends ExtFilesVO> implements ExtFilesServic
return
pdfFile2
.
getAbsolutePath
();
}
public
String
fillWordAndConvertPdf
(
String
modelName
,
Map
<
String
,
Object
>
dataMap
,
String
pdfFileName
)
{
String
targetPath
=
System
.
getProperty
(
"user.dir"
)
+
"/TEMP/"
;
File
wordFile
=
new
File
(
targetPath
+
modelName
);
File
pdfFile2
=
new
File
(
"TEMP/"
+
pdfFileName
+
"_"
+
UUID
.
randomUUID
()
+
".pdf"
);
try
{
InputStream
tempStream2
=
Files
.
newInputStream
(
wordFile
.
toPath
());
OutputStream
outputStream
=
Files
.
newOutputStream
(
pdfFile2
.
toPath
());
byte
[]
bytes2
=
WordUtils
.
fillWord
(
dataMap
,
tempStream2
);
ByteArrayInputStream
byteArrayInputStream
=
new
ByteArrayInputStream
(
bytes2
);
WordUtils
.
wordToPDF
(
byteArrayInputStream
,
outputStream
);
byteArrayInputStream
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
pdfFile2
.
getAbsolutePath
();
}
//递归根据项目群查询项目子项
...
...
@@ -340,7 +363,7 @@ public class ExtFilesServiceImpl<V extends ExtFilesVO> implements ExtFilesServic
*/
@Override
public
void
generateJNDirectory
(
Long
id
)
{
MultipartFile
[]
multipartFiles
=
new
MultipartFile
[
2
];
//查询项目群下所有案卷
SearchQueryCondition
searchProgram
=
SearchUtil
.
buildQuery
(
"dxContextId"
,
SearchItem
.
Operator
.
EQ
,
id
);
List
<
V
>
content
=
this
.
findRecursion
(
searchProgram
).
getContent
();
...
...
@@ -353,24 +376,113 @@ public class ExtFilesServiceImpl<V extends ExtFilesVO> implements ExtFilesServic
.
setPropName
(
"target"
).
setPropName
(
"source"
).
build
();
List
<
ExtFilesDocLinkVO
>
extFilesDocLinkVOList
=
extFilesDocLinkService
.
findRecursion
(
searchQueryCondition
).
getContent
();
ExtFilesVO
extFilesVO
=
extFilesDocLinkVOList
.
get
(
0
).
getTarget
();
//获取案卷下所有的档案数据 -- 填充模板数据
Map
<
String
,
Object
>
wordFillData
=
getJNDirectoryFillData
(
extFilesDocLinkVOList
,
extFilesVO
);
//文档转pdf
String
string
=
convertPdf
(
"卷内目录模板.docx"
,
wordFillData
);
//上传文件
MultipartFile
multipartFile
=
DxObjFileUtils
.
createFile
(
string
);
//1.获取案卷下所有的档案(doc模型)数据并填充到模板中
Map
<
String
,
Object
>
wordFillDataForJN
=
getJNDirectoryFillData
(
extFilesDocLinkVOList
,
extFilesVO
);
//填充卷内文档目录数据并转pdf
String
JNDirectoryPdfPath
=
fillWordAndConvertPdf
(
"卷内目录模板.docx"
,
wordFillDataForJN
,
getJNMLFileName
(
extFilesVO
));
//2.获取备考表需要填充的数据并填充数据到模板中
Map
<
String
,
Object
>
wordFillDataForBK
=
getJNBKTableFillData
(
extFilesDocLinkVOList
,
extFilesVO
);
String
BKPdfPath
=
fillWordAndConvertPdf
(
"卷内备考表模板.docx"
,
wordFillDataForBK
,
getBKFileName
(
extFilesVO
));
//3.上传卷内文档目录文件
MultipartFile
multipartFileForJN
=
DxObjFileUtils
.
createFile
(
JNDirectoryPdfPath
);
multipartFiles
[
0
]=
multipartFileForJN
;
//4.上传备考文件
MultipartFile
multipartFileForBK
=
DxObjFileUtils
.
createFile
(
BKPdfPath
);
multipartFiles
[
1
]=
multipartFileForBK
;
DxApplicationVO
modelApp
=
dxAppModelDefLinkFeignService
.
findAppByModelName
(
"ExtFiles"
);
Assert
.
notNull
(
modelApp
.
getBucketId
(),
String
.
format
(
"当前应用%s未绑定桶!"
,
modelApp
.
getName
()));
RepoFileVO
fileVo
=
fileManagerFeignService
.
uploadFile
(
multipartFile
,
Long
.
parseLong
(
modelApp
.
getBucketId
()));
//将生成的文件挂载到案卷上
DxObjFileUtils
.
replaceFile
(
extFilesVO
,
fileVo
,
FileTypeEnum
.
MASTER_FILE
);
List
<
RepoFileVO
>
fileVos
=
fileManagerFeignService
.
uploadFiles
(
multipartFiles
,
Long
.
parseLong
(
modelApp
.
getBucketId
()));
for
(
RepoFileVO
repoFileVO:
fileVos
){
if
(
repoFileVO
.
getRepoFileName
().
contains
(
"卷内目录"
)){
//卷内
//5.将生成的卷内目录pdf文件挂载到案卷上
DxObjFileUtils
.
replaceFile
(
extFilesVO
,
repoFileVO
,
FileTypeEnum
.
MASTER_FILE
);
}
else
{
//备考
//6.将生成的备考表pdf文件挂载到案卷上
DxObjFileUtils
.
replaceFile
(
extFilesVO
,
repoFileVO
,
FileTypeEnum
.
ATTACH_FILE
);
}
}
extFilesVO
.
setOperator
(
OperatorType
.
MODIFY
);
this
.
saveRecursion
((
V
)
extFilesVO
);
}
}
/**
* 获取卷内备考表填充的数据
* @param extFilesDocLinkVOList
* @param extFilesVO
* @return
*/
public
Map
<
String
,
Object
>
getJNBKTableFillData
(
List
<
ExtFilesDocLinkVO
>
extFilesDocLinkVOList
,
ExtFilesVO
extFilesVO
){
Map
<
String
,
Object
>
resultDatas
=
new
HashMap
<>();
//档号
resultDatas
.
put
(
"DH"
,
extFilesVO
.
getVolumeNumber
());
//互见号
resultDatas
.
put
(
"HJH"
,
extFilesVO
.
getMutualNumber
()==
null
?
""
:
extFilesVO
.
getMutualNumber
());
//文件共几件 =案卷下所有文档的个数
resultDatas
.
put
(
"fileNumber"
,
extFilesDocLinkVOList
==
null
?
0
:
extFilesDocLinkVOList
.
size
());
//文件共几页 =案卷下所有文档中的附件个数相加
Integer
totalPage
=
getJNBKTableTotalPage
(
extFilesDocLinkVOList
);
resultDatas
.
put
(
"filePage"
,
getJNBKTableTotalPage
(
extFilesDocLinkVOList
));
//文字材料页 = 文件类型除图册、图纸之外的文件的总页数(见业务需求书)
Integer
totalTextPage
=
getJNBKTableTotalTextPage
(
extFilesDocLinkVOList
);
resultDatas
.
put
(
"textPage"
,
getJNBKTableTotalTextPage
(
extFilesDocLinkVOList
));
//图纸几张 = 文件总页数 - 文字材料页)
resultDatas
.
put
(
"imagePiece"
,
totalPage
-
totalTextPage
);
//立卷人 = 创建人
DxUserInfoVO
userVO
=
(
DxUserInfoVO
)
userService
.
get
(
extFilesVO
.
getCreatorId
());
resultDatas
.
put
(
"filer"
,
userVO
.
getName
());
//立卷时间 = 创建时间
resultDatas
.
put
(
"filerYear"
,
extFilesVO
.
getCreateTime
().
getYear
());
resultDatas
.
put
(
"filerMonth"
,
extFilesVO
.
getCreateTime
().
getMonthValue
());
resultDatas
.
put
(
"filerDay"
,
extFilesVO
.
getCreateTime
().
getDayOfMonth
());
//检查人 =暂时不取(见业务需求书)
//检查时间=暂时不取(见业务需求书)
return
resultDatas
;
}
/**
* 计算文件类型除图册、图纸之外的文件的总页数(见业务需求书)
* @param extFilesDocLinkVOList
* @return
*/
public
Integer
getJNBKTableTotalTextPage
(
List
<
ExtFilesDocLinkVO
>
extFilesDocLinkVOList
){
//DesignAtlas(设计图册)、InstallAtlas(安装图册)、DesignDrawings(设计图纸) 排除这三种类型的
// 定义一个数组
String
[]
array
=
{
"DesignAtlas"
,
"InstallAtlas"
,
"DesignDrawings"
};
List
<
String
>
subTypeNameList
=
Arrays
.
asList
(
array
)
;
//获取所有文档对象集合
List
<
DxDocumentVO
>
documentVOList
=
extFilesDocLinkVOList
.
stream
().
map
(
linkVO
->
linkVO
.
getSource
()).
collect
(
Collectors
.
toList
());
//除DesignAtlas(设计图册)、InstallAtlas(安装图册)、DesignDrawings(设计图纸) 的文档对象
List
<
DxDocumentVO
>
docList
=
new
ArrayList
<>();
for
(
DxDocumentVO
documentVO:
documentVOList
){
if
(!
subTypeNameList
.
contains
(
documentVO
.
getSubSystem
())){
docList
.
add
(
documentVO
);
}
}
return
docList
.
stream
().
mapToInt
(
doc
->
doc
.
getAttachPages
()
==
null
?
0
:
Integer
.
parseInt
(
doc
.
getAttachPages
())).
sum
();
}
/**
* 计算案卷中挂载的文档中附件个数总和
* @param extFilesDocLinkVOList
* @return
*/
public
Integer
getJNBKTableTotalPage
(
List
<
ExtFilesDocLinkVO
>
extFilesDocLinkVOList
){
List
<
DxDocumentVO
>
documentVoList
=
extFilesDocLinkVOList
.
stream
().
map
(
linkVO
->
linkVO
.
getSource
()).
collect
(
Collectors
.
toList
());
return
documentVoList
.
stream
().
mapToInt
(
doc
->
doc
.
getAttachPages
()
==
null
?
0
:
Integer
.
parseInt
(
doc
.
getAttachPages
())).
sum
();
}
/**
* 获取卷内目录需要填充的数据
* @param extFilesDocLinkVOList
* @param extFilesVO
* @return
*/
public
Map
<
String
,
Object
>
getJNDirectoryFillData
(
List
<
ExtFilesDocLinkVO
>
extFilesDocLinkVOList
,
ExtFilesVO
extFilesVO
){
List
<
Map
<
String
,
Object
>>
extFilesMap
=
new
ArrayList
<>();
Map
<
String
,
Object
>
resultDatas
=
new
HashMap
<>();
...
...
@@ -382,30 +494,35 @@ public class ExtFilesServiceImpl<V extends ExtFilesVO> implements ExtFilesServic
Map
<
String
,
Object
>
datas
=
new
HashMap
<>();
//档号
datas
.
put
(
"DH"
,
extFilesVO
.
getVolumeNumber
());
//datas.put("DH",extFilesVO.getVolumeNumber() == null?"":
extFilesVO.getVolumeNumber());
//序号
datas
.
put
(
"serialNumber"
,
serialNumber
);
//文件编号
datas
.
put
(
"fileNumber"
,
source
.
getNumber
()==
null
?
""
:
source
.
getNumber
());
//责任责 ---文件创建部门
DxUserInfoVO
userVO
=
(
DxUserInfoVO
)
userService
.
get
(
source
.
getCreatorId
());
//通过orgId获取组织名称
DxOrganizationVO
organizationVO
=
(
DxOrganizationVO
)
organizationService
.
get
(
userVO
.
getDxOrganizationId
());
datas
.
put
(
"author"
,
organizationVO
.
getName
());
datas
.
put
(
"author"
,
organizationVO
.
getName
()
==
null
?
""
:
organizationVO
.
getName
()
);
//文件题目 -- 文件名称
datas
.
put
(
"fileName"
,
source
.
getName
());
datas
.
put
(
"fileName"
,
source
.
getName
()
==
null
?
""
:
source
.
getName
()
);
//日期 -- 文件发布日期,有流程的文件取流程结束时间,无流程的文件取文件创建时间
datas
.
put
(
"date"
,
source
.
getCreateTime
());
datas
.
put
(
"date"
,
source
.
getCreateTime
()
==
null
?
""
:
DateUtils
.
converLocalDateToString
(
source
.
getCreateTime
())
);
//页数 --文件页数
datas
.
put
(
"pageNumber"
,
extFilesDocLinkVO
.
getSource
().
getAttachPages
());
datas
.
put
(
"pageNumber"
,
extFilesDocLinkVO
.
getSource
().
getAttachPages
()
==
null
?
""
:
extFilesDocLinkVO
.
getSource
().
getAttachPages
()
);
//密级 --文件密级
datas
.
put
(
"secret"
,
searchDictDataValueByDictCode
(
Constants
.
SECRET_CODE
,
extFilesDocLinkVO
.
getSource
().
getSecretCode
()));
//备注 -- 文件本身的备注
datas
.
put
(
"note"
,
source
.
getNote
());
datas
.
put
(
"note"
,
source
.
getNote
()
==
null
?
""
:
source
.
getNote
()
);
//档号 -- 文件档号 --在移交单文档关联中
datas
.
put
(
"fileDH"
,
""
);
String
fileDH
=
getFileDH
(
source
);
datas
.
put
(
"fileDH"
,
fileDH
==
null
?
""
:
fileDH
);
extFilesMap
.
add
(
datas
);
serialNumber
++;
}
resultDatas
.
put
(
"data"
,
extFilesMap
);
//档号
resultDatas
.
put
(
"DH"
,
extFilesVO
.
getVolumeNumber
()
==
null
?
""
:
extFilesVO
.
getVolumeNumber
());
return
resultDatas
;
}
...
...
@@ -436,6 +553,27 @@ public class ExtFilesServiceImpl<V extends ExtFilesVO> implements ExtFilesServic
log
.
error
(
"所查字典Key为空!字典code为:"
+
dictCode
);
return
""
;
}
public
String
getFileDH
(
DxDocumentVO
source
){
List
content
=
extTransferDocLinkService
.
findRecursion
(
SearchUtil
.
buildQuery
(
"sourceId"
,
SearchItem
.
Operator
.
EQ
,
source
.
getId
())).
getContent
();
if
(
ObjectUtils
.
isNotEmpty
(
content
)){
ExtTransferDocLinkVO
extTransferDocLinkVO
=
(
ExtTransferDocLinkVO
)
content
.
get
(
0
);
return
extTransferDocLinkVO
.
getArchiveNumber
();
}
return
""
;
}
public
String
getJNMLFileName
(
ExtFilesVO
extFilesVO
){
String
secretCode
=
searchDictDataValueByDictCode
(
Constants
.
SECRET_CODE
,
extFilesVO
.
getSecretCode
());
return
extFilesVO
.
getVolumeNumber
()+
"_卷内目录("
+
secretCode
+
")"
;
}
public
String
getBKFileName
(
ExtFilesVO
extFilesVO
){
String
secretCode
=
searchDictDataValueByDictCode
(
Constants
.
SECRET_CODE
,
extFilesVO
.
getSecretCode
());
return
extFilesVO
.
getVolumeNumber
()+
"_备考表("
+
secretCode
+
")"
;
}
}
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