Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
I
inet-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
inet-doc-expand
Commits
735950a0
Commit
735950a0
authored
Aug 02, 2024
by
xuzhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat[doc]代码迁移
parent
f46a9062
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
481 additions
and
676 deletions
+481
-676
DxDocumentVO.java
...n/java/com/yonde/dcs/document/common/vo/DxDocumentVO.java
+25
-72
ExtObsoleteDocLinkVO.java
...om/yonde/dcs/document/common/vo/ExtObsoleteDocLinkVO.java
+0
-24
ObsoleteDocLinkVO.java
...a/com/yonde/dcs/document/common/vo/ObsoleteDocLinkVO.java
+0
-99
ExtObsoleteDocLinkController.java
...ocument/core/controller/ExtObsoleteDocLinkController.java
+0
-8
ExtObsoleteDocLinkControllerShadow.java
...controller/shadow/ExtObsoleteDocLinkControllerShadow.java
+1
-8
TechnicalFileUtils.java
...m/yonde/dcs/document/core/factory/TechnicalFileUtils.java
+426
-421
ObsoleteDocLinkRepositoryShadow.java
...ocument/core/service/ObsoleteDocLinkRepositoryShadow.java
+2
-2
ExtAutoTaskServiceImpl.java
...cs/document/core/service/impl/ExtAutoTaskServiceImpl.java
+0
-2
ExtDocServiceImpl.java
...nde/dcs/document/core/service/impl/ExtDocServiceImpl.java
+9
-8
ExtObsoleteDocLinkServiceImpl.java
...ment/core/service/impl/ExtObsoleteDocLinkServiceImpl.java
+4
-9
ExtObsoleteDocLinkServiceShadow.java
.../core/service/shadow/ExtObsoleteDocLinkServiceShadow.java
+1
-1
ExtDocUtil.java
...ain/java/com/yonde/dcs/document/core/util/ExtDocUtil.java
+5
-4
WorkFlowUtil.java
...n/java/com/yonde/dcs/document/core/util/WorkFlowUtil.java
+5
-11
ExtObsoleteDocLink.java
.../com/yonde/dcs/document/entity/po/ExtObsoleteDocLink.java
+1
-1
ExtObsoleteDocLinkServiceFeign.java
...de/dcs/document/feign/ExtObsoleteDocLinkServiceFeign.java
+1
-2
ExtObsoleteDocLinkServiceFeignShadow.java
...nt/feign/shadow/ExtObsoleteDocLinkServiceFeignShadow.java
+1
-4
No files found.
dcs-doc-common/src/main/java/com/yonde/dcs/document/common/vo/DxDocumentVO.java
View file @
735950a0
package
com
.
yonde
.
dcs
.
document
.
common
.
vo
;
import
javax.validation.constraints.NotBlank
;
import
java.util.Date
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
cn.hutool.core.convert.Convert
;
import
com.yonde.dex.basedata.entity.annotation.XmlElementProperty
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
com.fasterxml.jackson.annotation.JsonUnwrapped
;
import
lombok.ToString
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
;
import
java.math.BigInteger
;
import
org.springframework.data.annotation.Transient
;
import
lombok.experimental.Delegate
;
import
javax.xml.bind.annotation.*
;
import
javax.xml.bind.annotation.XmlAttribute
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
import
com.fasterxml.jackson.annotation.JsonTypeInfo
;
import
com.yonde.dex.basedata.entity.xmladapters.LocalDateTimeXmlAdapter
;
import
lombok.Data
;
import
com.yonde.dex.basedata.entity.annotation.*
;
import
lombok.AllArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
com.yonde.dex.basedata.entity.vo.IdOnlyVO
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.lang.TypeReference
;
import
com.yonde.dex.basedata.entity.data.VersionRelationType
;
import
com.yonde.dcs.document.common.vo.ExtAtlasDrawingLinkVO
;
import
com.fasterxml.jackson.annotation.JsonUnwrapped
;
import
com.yonde.dcs.document.expand.entity.DxDocumentVOExpand
;
import
com.yonde.dcs.document.expand.plugin.DxDocumentVOPluginExpand
;
import
com.yonde.dex.secretcode.plugin.common.entity.DxSecretVOHolder
;
import
com.yonde.dex.version.plugin.common.entity.DxIterationVOEmbeddable
;
import
com.yonde.dcs.document.common.vo.ExtObjectDocLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtRefJobContractDocVO
;
import
com.yonde.dex.lcycle.plugin.common.entity.DxLifecycleManageBaseVOEmbeddable
;
import
com.yonde.dex.basedata.data.expands.DxExpandVO
;
import
com.yonde.dex.basedata.entity.annotation.DexEmbedded
;
import
com.yonde.dex.basedata.entity.annotation.ReferenceProperty
;
import
com.yonde.dex.basedata.entity.annotation.RelationProperty
;
import
com.yonde.dex.basedata.entity.annotation.VersionProperty
;
import
com.yonde.dex.basedata.entity.data.VersionRelationType
;
import
com.yonde.dex.basedata.entity.vo.DxIdVOEmbeddable
;
import
com.yonde.dex.basedata.entity.vo.IdOnlyVO
;
import
com.yonde.dex.basedata.entity.vo.IdVO
;
import
com.yonde.d
cs.document.common.vo.ExtRelatedDcrLinkVO
;
import
com.yonde.d
cs.document.common.vo.ExtReviewChangeLinkVO
;
import
com.yonde.d
cs.document.common.vo.ExtRelatedNcrLinkVO
;
import
com.yonde.d
ex.container.folder.plugin.common.entity.DxObjFolderVOEmbeddable
;
import
com.yonde.d
ex.container.folder.plugin.common.entity.DxObjFolderVOHolder
;
import
com.yonde.d
ex.context.plugin.common.entity.DxContextVOEmbeddable
;
import
com.yonde.dex.context.plugin.common.entity.DxContextVOHolder
;
import
com.yonde.dcs.document.common.vo.ExtRefContractDocVO
;
import
com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOEmbeddable
;
import
com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOHolder
;
import
com.yonde.dex.lcycle.plugin.common.entity.DxLifecycleManageBaseVOEmbeddable
;
import
com.yonde.dex.lcycle.plugin.common.entity.DxLifecycleManageBaseVOHolder
;
import
com.yonde.dcs.document.common.vo.ExtDenDescriptLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtRefDesignInputLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtComDocLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtInterfaceInfoLinkVO
;
import
com.yonde.dex.sandbox.plugin.common.entity.DxSandboxVOEmbeddable
;
import
com.yonde.dex.secretcode.plugin.common.entity.DxSecretVOEmbeddable
;
import
com.yonde.dex.container.folder.plugin.common.entity.DxObjFolderVOHolder
;
import
com.yonde.dcs.document.common.vo.ExtReviewDocComLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtObsoleteDocLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtTechStandardLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtSendFormLinkVO
;
import
com.yonde.dex.container.folder.plugin.common.entity.DxObjFolderVOEmbeddable
;
import
com.yonde.dex.basedata.entity.users.DxUserVO
;
import
com.yonde.dcs.document.common.vo.ExtReviewDocLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtRefOutsideDocVO
;
import
com.yonde.dex.sandbox.plugin.common.entity.DxSandboxVOHolder
;
import
com.yonde.dcs.document.common.vo.ExtApplyDocVO
;
import
com.yonde.dcs.document.common.vo.ExtChangeReasonLinkVO
;
import
com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOEmbeddable
;
import
com.yonde.dex.version.plugin.common.entity.DxIterationVOHolder
;
import
com.yonde.dcs.document.expand.entity.DxDocumentVOExpand
;
import
com.yonde.dcs.document.common.vo.ExtDxDocumentFolderVO
;
import
com.yonde.dcs.document.common.vo.ExtRelatedDrawingLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtInterfaceDocLinkVO
;
import
com.yonde.dex.basedata.entity.vo.DxIdVOEmbeddable
;
import
com.yonde.dcs.document.common.vo.ExtReplyDocVO
;
import
com.yonde.dcs.document.common.vo.ExtDocumentReferentLinkVO
;
import
com.yonde.dex.context.plugin.common.entity.DxContextVOEmbeddable
;
import
com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOHolder
;
import
com.yonde.dcs.document.common.vo.ExtReplenishLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtInterfaceReplaceLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtCheckedFileLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtAuditRecordCardLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtRelatedInterfaceLinkVO
;
import
com.yonde.dex.secretcode.plugin.common.entity.DxSecretVOEmbeddable
;
import
com.yonde.dex.secretcode.plugin.common.entity.DxSecretVOHolder
;
import
com.yonde.dex.user.common.vo.DxOrganizationVO
;
import
com.yonde.dcs.document.common.vo.ExtRelatedDenLinkVO
;
import
com.yonde.dex.basedata.data.expands.DxExpandVO
;
import
com.yonde.dex.version.plugin.common.entity.DxIterationVOEmbeddable
;
import
com.yonde.dex.version.plugin.common.entity.DxIterationVOHolder
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.ToString
;
import
java.util.List
;
/**
* @description: DxDocument-VO
...
...
dcs-doc-common/src/main/java/com/yonde/dcs/document/common/vo/ExtObsoleteDocLinkVO.java
View file @
735950a0
package
com
.
yonde
.
dcs
.
document
.
common
.
vo
;
import
javax.validation.constraints.NotBlank
;
import
java.util.Date
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
cn.hutool.core.convert.Convert
;
import
com.yonde.dex.basedata.entity.annotation.XmlElementProperty
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
com.fasterxml.jackson.annotation.JsonUnwrapped
;
import
lombok.ToString
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
;
import
java.math.BigInteger
;
import
org.springframework.data.annotation.Transient
;
import
lombok.experimental.Delegate
;
import
javax.xml.bind.annotation.*
;
import
javax.xml.bind.annotation.XmlAttribute
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
import
com.fasterxml.jackson.annotation.JsonTypeInfo
;
import
com.yonde.dex.basedata.entity.xmladapters.LocalDateTimeXmlAdapter
;
import
lombok.Data
;
import
com.yonde.dex.basedata.entity.annotation.*
;
import
lombok.AllArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
com.yonde.dex.basedata.entity.vo.IdOnlyVO
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.lang.TypeReference
;
import
com.yonde.dex.basedata.entity.data.VersionRelationType
;
import
com.yonde.dex.logicdelete.plugin.common.entity.DxLogicDeleteVOHolder
;
import
com.yonde.dex.basedata.entity.vo.DxIdVOEmbeddable
;
...
...
@@ -36,8 +14,6 @@ import com.yonde.dex.logicdelete.plugin.common.entity.DxLogicDeleteVOEmbeddable;
import
com.yonde.dex.basedata.entity.vo.IdVO
;
import
com.yonde.dex.linkdata.plugin.common.DxLinkDataVOHolder
;
import
com.yonde.dex.linkdata.plugin.common.DxLinkDataVOEmbeddable
;
import
com.yonde.dcs.document.common.vo.DxDocumentVO
;
import
com.yonde.dex.basedata.entity.users.DxUserVO
;
/**
* @description: ExtObsoleteDocLink-VO
...
...
dcs-doc-common/src/main/java/com/yonde/dcs/document/common/vo/ObsoleteDocLinkVO.java
deleted
100644 → 0
View file @
f46a9062
package
com
.
yonde
.
dcs
.
document
.
common
.
vo
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.fasterxml.jackson.annotation.JsonTypeInfo
;
import
com.yonde.dex.basedata.entity.annotation.DexEmbedded
;
import
com.yonde.dex.basedata.entity.annotation.ModelConfigProperty
;
import
com.yonde.dex.basedata.entity.annotation.ReferenceProperty
;
import
com.yonde.dex.basedata.entity.annotation.VersionProperty
;
import
com.yonde.dex.basedata.entity.data.VersionRelationType
;
import
com.yonde.dex.basedata.entity.vo.DxIdVOEmbeddable
;
import
com.yonde.dex.basedata.entity.vo.IdOnlyVO
;
import
com.yonde.dex.basedata.entity.vo.IdVO
;
import
com.yonde.dex.linkdata.plugin.common.DxLinkDataVOEmbeddable
;
import
com.yonde.dex.logicdelete.plugin.common.entity.DxLogicDeleteVOEmbeddable
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.ToString
;
import
java.util.Map
;
/**
* @author xfchai
* @description: 过时文件通知单实体VO
* @version: 0
* @date: 2021-09-27 10:48:22
**/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ToString
(
callSuper
=
true
)
@JsonTypeInfo
(
use
=
JsonTypeInfo
.
Id
.
CLASS
,
property
=
"dxClassname"
,
defaultImpl
=
ObsoleteDocLinkVO
.
class
)
@ModelConfigProperty
(
syncES
=
true
)
public
class
ObsoleteDocLinkVO
extends
IdOnlyVO
implements
IdVO
{
/**
* dao扩展对象
*/
@DexEmbedded
()
@JsonIgnore
private
DxIdVOEmbeddable
dxIdEmbeddable
;
/**
* 扩展VO属性
*/
@DexEmbedded
()
@JsonIgnore
private
DxLogicDeleteVOEmbeddable
dxLogicDeleteEmbeddable
;
/**
* 扩展VO属性
*/
@DexEmbedded
()
@JsonIgnore
private
DxLinkDataVOEmbeddable
<
DxDocumentVO
,
DxDocumentVO
>
dxLinkDataEmbeddable
;
/**
* 文档
*/
@ReferenceProperty
(
baseProperty
=
"sourceId"
)
@VersionProperty
(
curVersion
=
VersionRelationType
.
NONE
,
refVersion
=
VersionRelationType
.
VERSION
)
private
DxDocumentVO
source
;
/**
* 文档
*/
@ReferenceProperty
(
baseProperty
=
"targetId"
)
@VersionProperty
(
curVersion
=
VersionRelationType
.
NONE
,
refVersion
=
VersionRelationType
.
VERSION
)
private
DxDocumentVO
target
;
/**
* source对应的属性
*/
private
Long
sourceId
;
/**
* sourceId对应的类型
*/
private
String
sourceIdType
;
/**
* target对应的属性
*/
private
Long
targetId
;
/**
* targetId对应的类型
*/
private
String
targetIdType
;
private
Map
<
String
,
Object
>
dynamicAttrs
;
/**
* 关联描述
*/
private
String
linkDescript
;
}
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/controller/ExtObsoleteDocLinkController.java
View file @
735950a0
package
com
.
yonde
.
dcs
.
document
.
core
.
controller
;
import
org.springframework.stereotype.Controller
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.validation.annotation.Validated
;
import
java.util.List
;
import
com.yonde.dcs.document.common.vo.ExtObsoleteDocLinkVO
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
io.swagger.annotations.Api
;
import
org.springframework.web.bind.annotation.*
;
import
com.yonde.dcs.document.core.service.ExtObsoleteDocLinkService
;
import
com.yonde.dex.basedata.entity.api.ApiResult
;
import
com.yonde.dcs.document.core.controller.shadow.ExtObsoleteDocLinkControllerShadow
;
import
javax.annotation.Resource
;
import
com.yonde.dex.basedata.auth.annos.BasePermission
;
import
org.springframework.stereotype.Controller
;
/**
* @description: ExtObsoleteDocLink-Controller
...
...
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/controller/shadow/ExtObsoleteDocLinkControllerShadow.java
View file @
735950a0
package
com
.
yonde
.
dcs
.
document
.
core
.
controller
.
shadow
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.validation.annotation.Validated
;
import
java.util.List
;
import
com.yonde.dcs.document.common.vo.ExtObsoleteDocLinkVO
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
io.swagger.annotations.Api
;
import
org.springframework.web.bind.annotation.*
;
import
com.yonde.dcs.document.core.service.ExtObsoleteDocLinkService
;
import
com.yonde.dcs.document.core.service.impl.ExtObsoleteDocLinkServiceImpl
;
import
com.yonde.dex.basedata.entity.api.ApiResult
;
import
javax.annotation.Resource
;
import
com.yonde.dex.linkdata.plugin.core.controller.DxLinkDataController
;
import
com.yonde.dex.basedata.auth.annos.BasePermission
;
...
...
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/factory/TechnicalFileUtils.java
View file @
735950a0
package
com
.
yonde
.
dcs
.
document
.
core
.
factory
;
import
cn.hutool.core.io.FileUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.yonde.dcs.document.common.vo.DxDocumentVO
;
import
com.yonde.dcs.document.common.vo.ExtAtlasDrawingLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtAuditRecordCardLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtAuditRecordCardVO
;
import
com.yonde.dcs.document.core.constants.Constants
;
import
com.yonde.dcs.document.core.constants.DictConstants
;
import
com.yonde.dcs.document.core.constants.SignConstants
;
import
com.yonde.dcs.document.core.service.DxDocumentService
;
import
com.yonde.dcs.document.core.service.ExtAuditRecordCardLinkService
;
import
com.yonde.dcs.document.core.service.ExtDocService
;
import
com.yonde.dcs.document.core.util.DateUtils
;
import
com.yonde.dcs.document.core.util.ExtDocUtil
;
import
com.yonde.dcs.document.core.util.WorkFlowUtil
;
import
com.yonde.dcs.document.core.word.ImportWordService
;
...
...
@@ -16,10 +19,15 @@ import com.yonde.dex.basedata.data.search.SearchItem;
import
com.yonde.dex.basedata.data.search.SearchItems
;
import
com.yonde.dex.basedata.data.search.SearchQueryCondition
;
import
com.yonde.dex.basedata.entity.data.DxPageImpl
;
import
com.yonde.dex.dfs.vo.ObjFileLinkVO
;
import
com.yonde.dex.dict.feign.DictDataFeignService
;
import
com.yonde.dex.dict.service.vo.DictDataVO
;
import
com.yonde.dex.user.common.vo.DxOrganizationVO
;
import
com.yonde.dex.user.common.vo.DxUserInfoVO
;
import
com.yonde.dex.user.feign.DxOrganizationFeign
;
import
com.yonde.dex.user.feign.DxUserInfoFeign
;
import
com.yonde.dex.wfc.common.enums.TaskStateEnum
;
import
com.yonde.dex.wfc.common.vo.DxWfProcessInfoVO
;
import
com.yonde.dex.wfc.common.vo.DxWfProcessTaskVO
;
import
com.yonde.dex.wfc.common.vo.DxWfProcessVarVO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
...
...
@@ -28,11 +36,7 @@ import org.springframework.util.CollectionUtils;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.StringUtils
;
import
java.io.FileInputStream
;
import
java.io.InputStream
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @program: inet-pdm-service
...
...
@@ -48,14 +52,14 @@ public class TechnicalFileUtils {
@Autowired
private
ExtDocService
extDocService
;
@Autowired
@Qualifier
(
"documentServiceImpl"
)
private
DocumentService
documentService
;
@Autowired
private
IInstanceService
instanceService
;
@Qualifier
(
"d
xD
ocumentServiceImpl"
)
private
D
xD
ocumentService
documentService
;
//
@Autowired
//
private IInstanceService instanceService;
@Autowired
private
ImportWordService
importWordService
;
@Autowired
private
IOrganizationService
organizationService
;
private
DxOrganizationFeign
organizationService
;
@Autowired
private
DxUserInfoFeign
userService
;
@Autowired
...
...
@@ -133,39 +137,39 @@ public class TechnicalFileUtils {
// jsonObject.put("phaseState", ObjectUtils.isEmpty(doc.getPhaseState()) ? "" : doc.getPhaseState());
jsonObject
.
put
(
"state"
,
extDocService
.
searchDictDataByDictCode
(
Constants
.
OBJ_STATUS
,
doc
.
getState
()));
WfProcessInstVO
wfProcessInstVO
=
workFlowUtil
.
getWfProcessInst
(
doc
);
List
<
WfProcessVarVO
>
wfProcessVarVOList
=
new
ArrayList
<>();
Map
<
String
,
Object
>
wfMap
=
new
HashMap
<>();
if
(!
ObjectUtils
.
isEmpty
(
wfProcessInstVO
))
{
wfMap
=
this
.
instanceService
.
getAllProcessVariables
(
wfProcessInstVO
.
getId
());
}
List
<
String
>
wfProcessVarSInterface
=
(
List
<
String
>)
wfMap
.
get
(
"interfaceReviewUser"
);
//取接口会签值
log
.
info
(
"获取interfaceReviewUser的值为:{}"
,
wfProcessVarSInterface
);
//定义接口会签信息集合
List
<
AuditPojo
>
auditPojoList
=
new
ArrayList
<>();
List
<
AuditRecordCardVO
>
interfaceHQList
=
this
.
interAndSpecialData
(
doc
,
jsonObject
,
INTERFACE_SIGN_NAME
);
if
(!
CollectionUtils
.
isEmpty
(
interfaceHQList
))
{
for
(
int
i
=
0
;
i
<
interfaceHQList
.
size
();
i
++)
{
AuditRecordCardVO
auditRecordCardVO
=
interfaceHQList
.
get
(
i
);
AuditPojo
auditPojo
=
new
AuditPojo
();
//序号
auditPojo
.
setSnumber
(
String
.
valueOf
(
i
+
1
));
//接口信息描述
auditPojo
.
setInfoDescribe
(
auditRecordCardVO
.
getIssueDescription
());
OrganizationVO
userIdAndOrgId
=
getUserIdAndOrgId
(
wfProcessVarSInterface
);
//接口设计项(组)
auditPojo
.
setInterDesign
(
userIdAndOrgId
.
getOrg
Name
());
UserVO
userVO
=
userService
.
get
(
auditRecordCardVO
.
getCreatorId
());
//签字
auditPojo
.
setSignName
(
userVO
.
getUserAccount
()
+
".png"
);
//日期
auditPojo
.
setSignDate
(
DateUtils
.
converLocalDateToString
(
auditRecordCardVO
.
getModifyTime
()));
auditPojoList
.
add
(
auditPojo
);
}
}
jsonObject
.
put
(
"interHQList"
,
auditPojoList
);
//todo
//
WfProcessInstVO wfProcessInstVO = workFlowUtil.getWfProcessInst(doc);
// List<Dx
WfProcessVarVO> wfProcessVarVOList = new ArrayList<>();
//
Map<String, Object> wfMap = new HashMap<>();
//
if (!ObjectUtils.isEmpty(wfProcessInstVO)) {
//
wfMap = this.instanceService.getAllProcessVariables(wfProcessInstVO.getId());
//
}
//
List<String> wfProcessVarSInterface = (List<String>) wfMap.get("interfaceReviewUser");
//
//取接口会签值
//
log.info("获取interfaceReviewUser的值为:{}", wfProcessVarSInterface);
//
//定义接口会签信息集合
//
List<AuditPojo> auditPojoList = new ArrayList<>();
// List<Ext
AuditRecordCardVO> interfaceHQList = this.interAndSpecialData(doc, jsonObject, INTERFACE_SIGN_NAME);
//
if (!CollectionUtils.isEmpty(interfaceHQList)) {
//
for (int i = 0; i < interfaceHQList.size(); i++) {
// Ext
AuditRecordCardVO auditRecordCardVO = interfaceHQList.get(i);
//
AuditPojo auditPojo = new AuditPojo();
//
//序号
//
auditPojo.setSnumber(String.valueOf(i + 1));
//
//接口信息描述
//
auditPojo.setInfoDescribe(auditRecordCardVO.getIssueDescription());
// Dx
OrganizationVO userIdAndOrgId = getUserIdAndOrgId(wfProcessVarSInterface);
//
//接口设计项(组)
// auditPojo.setInterDesign(userIdAndOrgId.get
Name());
// DxUserInfoVO userVO = (DxUserInfoVO)
userService.get(auditRecordCardVO.getCreatorId());
//
//签字
//
auditPojo.setSignName(userVO.getUserAccount() + ".png");
//
//日期
//
auditPojo.setSignDate(DateUtils.converLocalDateToString(auditRecordCardVO.getModifyTime()));
//
auditPojoList.add(auditPojo);
//
}
//
}
//
jsonObject.put("interHQList", auditPojoList);
return
jsonObject
;
}
...
...
@@ -192,40 +196,40 @@ public class TechnicalFileUtils {
jsonObject
.
put
(
"state"
,
extDocService
.
searchDictDataByDictCode
(
Constants
.
OBJ_STATUS
,
doc
.
getState
()));
// //阶段状态
// jsonObject.put("phaseState", ObjectUtils.isEmpty(doc.getPhaseState()) ? "" : doc.getPhaseState());
//获取人员
WfProcessInstVO
wfProcessInstVO
=
workFlowUtil
.
getWfProcessInst
(
doc
);
List
<
WfProcessVarVO
>
wfProcessVarVOList
=
new
ArrayList
<>();
Map
<
String
,
Object
>
wfMap
=
new
HashMap
<>();
if
(!
ObjectUtils
.
isEmpty
(
wfProcessInstVO
))
{
wfMap
=
this
.
instanceService
.
getAllProcessVariables
(
wfProcessInstVO
.
getId
());
}
//取专项审查值
List
<
String
>
wfProcessVarSAudit
=
(
List
<
String
>)
wfMap
.
get
(
"auditUser"
);
log
.
info
(
"获取auditUser的值为:{}"
,
wfProcessVarSAudit
);
//定义专项审查信息集合
List
<
AuditPojo
>
auditPojoList
=
new
ArrayList
<>();
List
<
AuditRecordCardVO
>
auditSignList
=
this
.
interAndSpecialData
(
doc
,
jsonObject
,
AUDIT_SIGN_NAME
);
if
(!
CollectionUtils
.
isEmpty
(
auditSignList
))
{
for
(
int
i
=
0
;
i
<
auditSignList
.
size
();
i
++)
{
AuditRecordCardVO
auditRecordCardVO
=
auditSignList
.
get
(
i
);
AuditPojo
auditPojo
=
new
AuditPojo
();
//序号
auditPojo
.
setSnumber
(
String
.
valueOf
(
i
+
1
));
//接口信息描述
auditPojo
.
setInfoDescribe
(
auditRecordCardVO
.
getIssueDescription
());
OrganizationVO
userIdAndOrgId
=
getUserIdAndOrgId
(
wfProcessVarSAudit
);
//接口设计项(组)
auditPojo
.
setInterDesign
(
userIdAndOrgId
.
getOrgName
());
//签字(图片路径)
UserVO
userVO
=
userService
.
get
(
auditRecordCardVO
.
getCreatorId
());
//签字
auditPojo
.
setSignName
(
userVO
.
getUserAccount
()
+
".png"
);
//日期
auditPojo
.
setSignDate
(
DateUtils
.
converLocalDateToString
(
auditRecordCardVO
.
getModifyTime
()));
auditPojoList
.
add
(
auditPojo
);
}
}
jsonObject
.
put
(
"auditInfoList"
,
auditPojoList
);
//
todo
获取人员
//
WfProcessInstVO wfProcessInstVO = workFlowUtil.getWfProcessInst(doc);
//
List<WfProcessVarVO> wfProcessVarVOList = new ArrayList<>();
//
Map<String, Object> wfMap = new HashMap<>();
//
if (!ObjectUtils.isEmpty(wfProcessInstVO)) {
//
wfMap = this.instanceService.getAllProcessVariables(wfProcessInstVO.getId());
//
}
//
//取专项审查值
//
List<String> wfProcessVarSAudit = (List<String>) wfMap.get("auditUser");
//
log.info("获取auditUser的值为:{}", wfProcessVarSAudit);
//
//定义专项审查信息集合
//
List<AuditPojo> auditPojoList = new ArrayList<>();
//
List<AuditRecordCardVO> auditSignList = this.interAndSpecialData(doc, jsonObject, AUDIT_SIGN_NAME);
//
if (!CollectionUtils.isEmpty(auditSignList)) {
//
for (int i = 0; i < auditSignList.size(); i++) {
//
AuditRecordCardVO auditRecordCardVO = auditSignList.get(i);
//
AuditPojo auditPojo = new AuditPojo();
//
//序号
//
auditPojo.setSnumber(String.valueOf(i + 1));
//
//接口信息描述
//
auditPojo.setInfoDescribe(auditRecordCardVO.getIssueDescription());
//
OrganizationVO userIdAndOrgId = getUserIdAndOrgId(wfProcessVarSAudit);
//
//接口设计项(组)
//
auditPojo.setInterDesign(userIdAndOrgId.getOrgName());
//
//签字(图片路径)
//
UserVO userVO = userService.get(auditRecordCardVO.getCreatorId());
//
//签字
//
auditPojo.setSignName(userVO.getUserAccount() + ".png");
//
//日期
//
auditPojo.setSignDate(DateUtils.converLocalDateToString(auditRecordCardVO.getModifyTime()));
//
auditPojoList.add(auditPojo);
//
}
//
}
//
jsonObject.put("auditInfoList", auditPojoList);
return
jsonObject
;
}
...
...
@@ -244,8 +248,8 @@ public class TechnicalFileUtils {
String
fileNumber
=
Objects
.
isNull
(
dynamicAttrs
.
get
(
"fileNumber"
))
?
""
:
(
String
)
dynamicAttrs
.
get
(
"fileNumber"
);
JSONObject
jsonObject
=
new
JSONObject
();
//项目代号
jsonObject
.
put
(
"projectCode"
,
(
ObjectUtils
.
isEmpty
(
doc
.
getProjectCode
())
?
""
:
doc
.
getProjectCode
()));
//
todo
项目代号
//
jsonObject.put("projectCode", (ObjectUtils.isEmpty(doc.getProjectCode()) ? "" : doc.getProjectCode()));
//设计阶段
jsonObject
.
put
(
"designPhase"
,
extDocService
.
searchDictDataByDictCode
(
Constants
.
DESIGN_STAGE
,
designPhase
));
//专业名称
...
...
@@ -268,7 +272,7 @@ public class TechnicalFileUtils {
history
.
put
(
"state"
,
StringUtils
.
isEmpty
(
item
.
getPhaseState
())
?
""
:
item
.
getPhaseState
());
history
.
put
(
"revisionDescript"
,
extDocService
.
searchDictDataByDictCode
(
Constants
.
REVISION_NOTE
,
revisionDescript
));
Map
<
String
,
List
<
WfProcessTaskVO
>>
wfHistoryMap
=
workFlowUtil
.
getWfInfo
(
item
);
Map
<
String
,
List
<
Dx
WfProcessTaskVO
>>
wfHistoryMap
=
workFlowUtil
.
getWfInfo
(
item
);
if
(!
ObjectUtils
.
isEmpty
(
wfHistoryMap
))
{
//编制
history
.
put
(
"creator"
,
workFlowUtil
.
getHandlerUser
(
wfHistoryMap
,
SignConstants
.
SIGN_KEY_PREPARED
));
...
...
@@ -301,7 +305,7 @@ public class TechnicalFileUtils {
JSONObject
jsonObject
=
new
JSONObject
();
//获取相关图纸
List
<
AtlasDrawingLinkVO
>
drawingLinks
=
extDocService
.
recursionAtlasDoc
(
doc
.
getVersionId
());
List
<
Ext
AtlasDrawingLinkVO
>
drawingLinks
=
extDocService
.
recursionAtlasDoc
(
doc
.
getVersionId
());
jsonObject
.
put
(
"drawingNo"
,
drawingLinks
.
size
());
List
<
JSONObject
>
drawingsJson
=
new
ArrayList
<>();
...
...
@@ -327,7 +331,7 @@ public class TechnicalFileUtils {
* @param
* @return
*/
public
JSONObject
settingData
(
DxDocumentVO
doc
,
WfProcessInfoVO
wfProcessInfoVO
)
{
public
JSONObject
settingData
(
DxDocumentVO
doc
,
Dx
WfProcessInfoVO
wfProcessInfoVO
)
{
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"name"
,
doc
.
getName
());
jsonObject
.
put
(
"number"
,
doc
.
getNumber
());
...
...
@@ -335,67 +339,67 @@ public class TechnicalFileUtils {
jsonObject
.
put
(
"version"
,
doc
.
getDisplayVersion
());
//填充校核、审核、审定内容的多选框
this
.
settingContentData
(
jsonObject
,
doc
);
//填充设计者名字
List
<
WfTaskDefinitionVO
>
activities
=
wfProcessInfoVO
.
getActivityInfo
();
//获取参与者
if
(!
CollectionUtils
.
isEmpty
(
activities
))
{
//打印总体室备注
for
(
WfTaskDefinitionVO
wf
:
activities
)
{
if
(
SignConstants
.
ZTSSignTaskList
.
contains
(
wf
.
getTaskName
()))
{
List
<
WfProcessTaskVO
>
taskList
=
wf
.
getTaskList
();
for
(
WfProcessTaskVO
wfPro
:
taskList
)
{
//总体室且为通过时,把编制人填写备注的属性,写入word文档
if
(
SignConstants
.
WfRoutingList
.
contains
(
wfPro
.
getResult
()))
{
jsonObject
.
put
(
"decription"
,
ObjectUtils
.
isEmpty
(
wfPro
.
getComments
())
?
""
:
wfPro
.
getComments
().
get
(
0
));
}
}
}
}
//设计者
jsonObject
.
put
(
"bz_name"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_PREPARED
));
//校核
jsonObject
.
put
(
"jh_name"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_CHECKER
));
jsonObject
.
put
(
"jh_date"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_CHECKER
));
//审核
jsonObject
.
put
(
"sh_name"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_SH
));
jsonObject
.
put
(
"sh_date"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_SH
));
//总体室
jsonObject
.
put
(
"zts_name"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_ZTSJKSC
));
jsonObject
.
put
(
"zts_date"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_ZTSJKSC
));
//审定
jsonObject
.
put
(
"sd_name"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_SD
));
jsonObject
.
put
(
"sd_date"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_SD
));
}
List
<
AuditRecordCardLinkVO
>
auditRecordRecursionList
=
this
.
findAuditRecordRecursion
(
doc
.
getVersionId
());
//校核List
List
<
AuditRecordCardVO
>
checkList
=
new
ArrayList
();
List
<
AuditRecordCardVO
>
auditList
=
new
ArrayList
();
List
<
AuditRecordCardVO
>
approvalList
=
new
ArrayList
();
if
(!
CollectionUtils
.
isEmpty
(
auditRecordRecursionList
))
{
for
(
AuditRecordCardLinkVO
auditRecordCardLinkVO
:
auditRecordRecursionList
)
{
AuditRecordCardVO
target
=
auditRecordCardLinkVO
.
getTarget
();
if
(!
ObjectUtils
.
isEmpty
(
target
))
{
String
taskName
=
target
.
getTaskName
();
switch
(
taskName
)
{
case
"校核"
:
checkList
.
add
(
target
);
break
;
case
"审核"
:
auditList
.
add
(
target
);
break
;
case
"审定"
:
approvalList
.
add
(
target
);
break
;
}
}
}
}
//校核
jsonObject
.
put
(
"checkList"
,
checkList
);
//审核
jsonObject
.
put
(
"auditList"
,
auditList
);
//审定
jsonObject
.
put
(
"approvalList"
,
approvalList
);
//
todo
填充设计者名字
//
List<WfTaskDefinitionVO> activities = wfProcessInfoVO.getActivityInfo();
//
//获取参与者
//
if (!CollectionUtils.isEmpty(activities)) {
//
//打印总体室备注
//
for (WfTaskDefinitionVO wf : activities) {
//
if (SignConstants.ZTSSignTaskList.contains(wf.getTaskName())) {
//
List<WfProcessTaskVO> taskList = wf.getTaskList();
//
for (WfProcessTaskVO wfPro : taskList) {
//
//总体室且为通过时,把编制人填写备注的属性,写入word文档
//
if (SignConstants.WfRoutingList.contains(wfPro.getResult())) {
//
jsonObject.put("decription", ObjectUtils.isEmpty(wfPro.getComments()) ? "" : wfPro.getComments().get(0));
//
}
//
}
//
}
//
}
//
//设计者
//
jsonObject.put("bz_name", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_PREPARED));
//
//校核
//
jsonObject.put("jh_name", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_CHECKER));
//
jsonObject.put("jh_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_CHECKER));
//
//审核
//
jsonObject.put("sh_name", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_SH));
//
jsonObject.put("sh_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_SH));
//
//总体室
//
jsonObject.put("zts_name", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_ZTSJKSC));
//
jsonObject.put("zts_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_ZTSJKSC));
//
//审定
//
jsonObject.put("sd_name", extDocService.getSignImage(activities, SignConstants.SIGN_SD));
//
jsonObject.put("sd_date", extDocService.getEndDate(activities, SignConstants.SIGN_SD));
//
}
//
List<AuditRecordCardLinkVO> auditRecordRecursionList = this.findAuditRecordRecursion(doc.getVersionId());
//
//校核List
//
List<AuditRecordCardVO> checkList = new ArrayList();
//
List<AuditRecordCardVO> auditList = new ArrayList();
//
List<AuditRecordCardVO> approvalList = new ArrayList();
//
if (!CollectionUtils.isEmpty(auditRecordRecursionList)) {
//
for (AuditRecordCardLinkVO auditRecordCardLinkVO : auditRecordRecursionList) {
//
AuditRecordCardVO target = auditRecordCardLinkVO.getTarget();
//
if (!ObjectUtils.isEmpty(target)) {
//
String taskName = target.getTaskName();
//
switch (taskName) {
//
case "校核":
//
checkList.add(target);
//
break;
//
case "审核":
//
auditList.add(target);
//
break;
//
case "审定":
//
approvalList.add(target);
//
break;
//
}
//
}
//
}
//
}
//
//校核
//
jsonObject.put("checkList", checkList);
//
//审核
//
jsonObject.put("auditList", auditList);
//
//审定
//
jsonObject.put("approvalList", approvalList);
return
jsonObject
;
}
...
...
@@ -406,21 +410,21 @@ public class TechnicalFileUtils {
* @param doc
*/
private
void
settingContentData
(
JSONObject
jsonObject
,
DxDocumentVO
doc
)
{
//校核内容
String
checkContent
=
doc
.
getCheckContent
();
this
.
handleContentData
(
DictConstants
.
CheckContent
,
checkContent
,
jsonObject
);
//(校核)标准化审查内容
String
checkStandardReview
=
doc
.
getCheckStandardReview
();
this
.
handleContentData
(
DictConstants
.
CheckStandardReview
,
checkStandardReview
,
jsonObject
);
//审核内容
String
reviewContent
=
doc
.
getReviewContent
();
this
.
handleContentData
(
DictConstants
.
ReviewContent
,
reviewContent
,
jsonObject
);
//(审核)标准化审查内容
String
reviewContentStandard
=
doc
.
getReviewContentStandard
();
this
.
handleContentData
(
DictConstants
.
ReviewContentStandardReview
,
reviewContentStandard
,
jsonObject
);
// 审定内容
String
verifyContent
=
doc
.
getVerifyContent
();
this
.
handleContentData
(
DictConstants
.
verifierContent
,
verifyContent
,
jsonObject
);
//
todo
校核内容
//
String checkContent = doc.getCheckContent();
//
this.handleContentData(DictConstants.CheckContent, checkContent, jsonObject);
//
//(校核)标准化审查内容
//
String checkStandardReview = doc.getCheckStandardReview();
//
this.handleContentData(DictConstants.CheckStandardReview, checkStandardReview, jsonObject);
//
//审核内容
//
String reviewContent = doc.getReviewContent();
//
this.handleContentData(DictConstants.ReviewContent, reviewContent, jsonObject);
//
//(审核)标准化审查内容
//
String reviewContentStandard = doc.getReviewContentStandard();
//
this.handleContentData(DictConstants.ReviewContentStandardReview, reviewContentStandard, jsonObject);
//
// 审定内容
//
String verifyContent = doc.getVerifyContent();
//
this.handleContentData(DictConstants.verifierContent, verifyContent, jsonObject);
}
/**
...
...
@@ -431,24 +435,25 @@ public class TechnicalFileUtils {
* @param jsonObject
*/
private
void
handleContentData
(
String
dictKey
,
String
difContent
,
JSONObject
jsonObject
)
{
List
<
DictDataVO
>
dictDataVOList
=
dictDataService
.
getDictDatasByDictCode
(
dictKey
);
if
(!
StringUtils
.
isEmpty
(
difContent
))
{
String
[]
checkContentSplit
=
difContent
.
split
(
","
);
List
<
String
>
collect
=
Arrays
.
stream
(
checkContentSplit
).
collect
(
Collectors
.
toList
());
dictDataVOList
.
forEach
(
item
->
{
if
(
collect
.
contains
(
item
.
getDictKey
()))
{
//对号
jsonObject
.
put
(
item
.
getDictKey
(),
"\u0052"
);
}
else
{
jsonObject
.
put
(
item
.
getDictKey
(),
"\u00A3"
);
//方框
}
});
}
else
{
dictDataVOList
.
forEach
(
item
->
{
//方框
jsonObject
.
put
(
item
.
getDictKey
(),
"\u00A3"
);
//方框
});
}
// todo
// List<DictDataVO> dictDataVOList = dictDataService.getDictDatasByDictCode(dictKey);
// if (!StringUtils.isEmpty(difContent)) {
// String[] checkContentSplit = difContent.split(",");
// List<String> collect = Arrays.stream(checkContentSplit).collect(Collectors.toList());
// dictDataVOList.forEach(item -> {
// if (collect.contains(item.getDictKey())) {
// //对号
// jsonObject.put(item.getDictKey(), "\u0052");
// } else {
// jsonObject.put(item.getDictKey(), "\u00A3");//方框
// }
// });
// } else {
// dictDataVOList.forEach(item -> {
// //方框
// jsonObject.put(item.getDictKey(), "\u00A3");//方框
// });
// }
}
/**
...
...
@@ -457,48 +462,48 @@ public class TechnicalFileUtils {
* @param documentVO
* @return
*/
public
JSONObject
interfaceHQSetting
(
DxDocumentVO
documentVO
,
WfProcessInfoVO
wfProcessInfoVO
)
{
public
JSONObject
interfaceHQSetting
(
DxDocumentVO
documentVO
,
Dx
WfProcessInfoVO
wfProcessInfoVO
)
{
String
outWordFilePath
=
Constants
.
MERGER_FILE_ABSOLUTE_PATH
+
documentVO
.
getSubTypeName
()
+
"\\"
+
documentVO
.
getNumber
()
+
"\\"
+
Constants
.
MERGER_SOURCE
+
"\\"
;
JSONObject
jsonObject
=
new
JSONObject
();
List
<
AuditRecordCardVO
>
interfaceHQList
=
this
.
interAndSpecialData
(
documentVO
,
jsonObject
,
INTERFACE_SIGN_NAME
);
List
<
Ext
AuditRecordCardVO
>
interfaceHQList
=
this
.
interAndSpecialData
(
documentVO
,
jsonObject
,
INTERFACE_SIGN_NAME
);
//定义接口会签或者专项审查集合
List
<
WfProcessVarVO
>
wfProcessVarVOList
=
new
ArrayList
<>();
//获取人员
WfProcessInstVO
wfProcessInstVO
=
workFlowUtil
.
getWfProcessInst
(
documentVO
);
Map
<
String
,
Object
>
wfMap
=
new
HashMap
<>();
if
(!
ObjectUtils
.
isEmpty
(
wfProcessInstVO
))
{
wfMap
=
this
.
instanceService
.
getAllProcessVariables
(
wfProcessInstVO
.
getId
());
}
List
<
WfTaskDefinitionVO
>
activities
=
wfProcessInfoVO
.
getActivityInfo
();
if
(!
CollectionUtils
.
isEmpty
(
activities
))
{
//写入签名数据
jsonObject
.
put
(
"sh_photo"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_JKHQ
));
jsonObject
.
put
(
"sh_date"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_JKHQ
));
//设计者
jsonObject
.
put
(
"bz_name"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_PREPARED
));
}
if
(!
CollectionUtils
.
isEmpty
(
wfMap
))
{
List
<
String
>
wfProcessVarsInterface
=
(
List
<
String
>)
wfMap
.
get
(
"interfaceReviewUser"
);
//取接口会签值
// WfProcessVarVO wfProcessVarVOInterface = wfProcessVarVOList.stream().filter(item -> "interfaceReviewUser".equals(item.getKey())).findFirst().orElse(null);
log
.
info
(
"获取interfaceReviewUser的值为:{}"
,
wfProcessVarsInterface
);
this
.
getUserIdAndOrgId
(
wfProcessVarsInterface
,
jsonObject
);
}
if
(!
CollectionUtils
.
isEmpty
(
interfaceHQList
))
{
//根据集合数据生成多份文件
for
(
int
i
=
0
;
i
<
interfaceHQList
.
size
();
i
++)
{
AuditRecordCardVO
auditRecordCardVO
=
interfaceHQList
.
get
(
i
);
//接口信息描述
jsonObject
.
put
(
"issueDescription"
,
auditRecordCardVO
.
getIssueDescription
());
jsonObject
.
put
(
"revisions"
,
auditRecordCardVO
.
getRevisions
());
jsonObject
.
put
(
"replyRevision"
,
auditRecordCardVO
.
getReplyRevision
());
jsonObject
.
put
(
"issueVerify"
,
auditRecordCardVO
.
getIssueVerify
());
jsonObject
.
put
(
"replyRevision"
,
auditRecordCardVO
.
getReplyRevision
());
importWordService
.
getWordAllTable
(
jsonObject
,
Constants
.
TEMPLATE_PATH
+
"TechnicalFile/QHInterfaceTemplate.docx"
,
outWordFilePath
+
"/"
+
"QHInterfaceHQ"
+
i
+
".docx"
);
}
}
else
{
log
.
error
(
"接口会签interfaceHQList集合值为空!"
);
}
List
<
Dx
WfProcessVarVO
>
wfProcessVarVOList
=
new
ArrayList
<>();
//
todo
获取人员
//
WfProcessInstVO wfProcessInstVO = workFlowUtil.getWfProcessInst(documentVO);
//
Map<String, Object> wfMap = new HashMap<>();
//
if (!ObjectUtils.isEmpty(wfProcessInstVO)) {
//
wfMap = this.instanceService.getAllProcessVariables(wfProcessInstVO.getId());
//
}
//
List<WfTaskDefinitionVO> activities = wfProcessInfoVO.getActivityInfo();
//
if (!CollectionUtils.isEmpty(activities)) {
//
//写入签名数据
//
jsonObject.put("sh_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_JKHQ));
//
jsonObject.put("sh_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_JKHQ));
//
//设计者
//
jsonObject.put("bz_name", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_PREPARED));
//
}
//
if (!CollectionUtils.isEmpty(wfMap)) {
//
List<String> wfProcessVarsInterface = (List<String>) wfMap.get("interfaceReviewUser");
//
//取接口会签值
//
//
WfProcessVarVO wfProcessVarVOInterface = wfProcessVarVOList.stream().filter(item -> "interfaceReviewUser".equals(item.getKey())).findFirst().orElse(null);
//
log.info("获取interfaceReviewUser的值为:{}", wfProcessVarsInterface);
//
this.getUserIdAndOrgId(wfProcessVarsInterface, jsonObject);
//
}
//
if (!CollectionUtils.isEmpty(interfaceHQList)) {
//
//根据集合数据生成多份文件
//
for (int i = 0; i < interfaceHQList.size(); i++) {
//
AuditRecordCardVO auditRecordCardVO = interfaceHQList.get(i);
//
//接口信息描述
//
jsonObject.put("issueDescription", auditRecordCardVO.getIssueDescription());
//
jsonObject.put("revisions", auditRecordCardVO.getRevisions());
//
jsonObject.put("replyRevision", auditRecordCardVO.getReplyRevision());
//
jsonObject.put("issueVerify", auditRecordCardVO.getIssueVerify());
//
jsonObject.put("replyRevision", auditRecordCardVO.getReplyRevision());
//
importWordService.getWordAllTable(jsonObject, Constants.TEMPLATE_PATH + "TechnicalFile/QHInterfaceTemplate.docx", outWordFilePath + "/" + "QHInterfaceHQ" + i + ".docx");
//
}
//
} else {
//
log.error("接口会签interfaceHQList集合值为空!");
//
}
return
jsonObject
;
}
...
...
@@ -508,46 +513,46 @@ public class TechnicalFileUtils {
* @param documentVO
* @return
*/
public
JSONObject
specialSCSetting
(
DxDocumentVO
documentVO
,
WfProcessInfoVO
wfProcessInfoVO
)
{
public
JSONObject
specialSCSetting
(
DxDocumentVO
documentVO
,
Dx
WfProcessInfoVO
wfProcessInfoVO
)
{
String
outWordFilePath
=
Constants
.
MERGER_FILE_ABSOLUTE_PATH
+
documentVO
.
getSubTypeName
()
+
"\\"
+
documentVO
.
getNumber
()
+
"\\"
+
Constants
.
MERGER_SOURCE
+
"\\"
;
JSONObject
jsonObject
=
new
JSONObject
();
List
<
AuditRecordCardVO
>
auditRecordRecursionList
=
this
.
interAndSpecialData
(
documentVO
,
jsonObject
,
AUDIT_SIGN_NAME
);
List
<
Ext
AuditRecordCardVO
>
auditRecordRecursionList
=
this
.
interAndSpecialData
(
documentVO
,
jsonObject
,
AUDIT_SIGN_NAME
);
//定义接口会签或者专项审查集合
//获取人员
WfProcessInstVO
wfProcessInstVO
=
workFlowUtil
.
getWfProcessInst
(
documentVO
);
Map
<
String
,
Object
>
wfMap
=
new
HashMap
<>();
if
(!
ObjectUtils
.
isEmpty
(
wfProcessInstVO
))
{
wfMap
=
this
.
instanceService
.
getAllProcessVariables
(
wfProcessInstVO
.
getId
());
}
List
<
WfTaskDefinitionVO
>
activities
=
wfProcessInfoVO
.
getActivityInfo
();
if
(!
CollectionUtils
.
isEmpty
(
activities
))
{
//专项审查签字
jsonObject
.
put
(
"sc_photo"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_ZXSC
));
jsonObject
.
put
(
"sc_date"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_ZXSC
));
//设计者
jsonObject
.
put
(
"bz_name"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_PREPARED
));
jsonObject
.
put
(
"bz_date"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_PREPARED
));
}
if
(!
CollectionUtils
.
isEmpty
(
wfMap
))
{
List
<
String
>
wfProcessVarsAudit
=
(
List
<
String
>)
wfMap
.
get
(
"auditUser"
);
log
.
info
(
"获取auditUser的值为:{}"
,
wfProcessVarsAudit
);
this
.
getUserIdAndOrgId
(
wfProcessVarsAudit
,
jsonObject
);
}
if
(!
CollectionUtils
.
isEmpty
(
auditRecordRecursionList
))
{
//根据集合数据生成多份文件
for
(
int
i
=
0
;
i
<
auditRecordRecursionList
.
size
();
i
++)
{
AuditRecordCardVO
auditRecordCardVO
=
auditRecordRecursionList
.
get
(
i
);
//接口信息描述
jsonObject
.
put
(
"issueDescription"
,
auditRecordCardVO
.
getIssueDescription
());
jsonObject
.
put
(
"revisions"
,
auditRecordCardVO
.
getRevisions
());
jsonObject
.
put
(
"replyRevision"
,
auditRecordCardVO
.
getReplyRevision
());
jsonObject
.
put
(
"issueVerify"
,
auditRecordCardVO
.
getIssueVerify
());
jsonObject
.
put
(
"replyRevision"
,
auditRecordCardVO
.
getReplyRevision
());
importWordService
.
getWordAllTable
(
jsonObject
,
Constants
.
TEMPLATE_PATH
+
"TechnicalFile/QHAuditTemplate.docx"
,
outWordFilePath
+
"/"
+
"QHAuditHQ"
+
i
+
".docx"
);
}
}
else
{
log
.
error
(
"专项审查auditRecordRecursionList集合值为空!"
);
}
//
todo
获取人员
//
WfProcessInstVO wfProcessInstVO = workFlowUtil.getWfProcessInst(documentVO);
//
Map<String, Object> wfMap = new HashMap<>();
//
if (!ObjectUtils.isEmpty(wfProcessInstVO)) {
//
wfMap = this.instanceService.getAllProcessVariables(wfProcessInstVO.getId());
//
}
//
List<WfTaskDefinitionVO> activities = wfProcessInfoVO.getActivityInfo();
//
if (!CollectionUtils.isEmpty(activities)) {
//
//专项审查签字
//
jsonObject.put("sc_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_ZXSC));
//
jsonObject.put("sc_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_ZXSC));
//
//设计者
//
jsonObject.put("bz_name", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_PREPARED));
//
jsonObject.put("bz_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_PREPARED));
//
}
//
if (!CollectionUtils.isEmpty(wfMap)) {
//
List<String> wfProcessVarsAudit = (List<String>) wfMap.get("auditUser");
//
log.info("获取auditUser的值为:{}", wfProcessVarsAudit);
//
this.getUserIdAndOrgId(wfProcessVarsAudit, jsonObject);
//
}
//
if (!CollectionUtils.isEmpty(auditRecordRecursionList)) {
//
//根据集合数据生成多份文件
//
for (int i = 0; i < auditRecordRecursionList.size(); i++) {
// Ext
AuditRecordCardVO auditRecordCardVO = auditRecordRecursionList.get(i);
//
//接口信息描述
//
jsonObject.put("issueDescription", auditRecordCardVO.getIssueDescription());
//
jsonObject.put("revisions", auditRecordCardVO.getRevisions());
//
jsonObject.put("replyRevision", auditRecordCardVO.getReplyRevision());
//
jsonObject.put("issueVerify", auditRecordCardVO.getIssueVerify());
//
jsonObject.put("replyRevision", auditRecordCardVO.getReplyRevision());
//
importWordService.getWordAllTable(jsonObject, Constants.TEMPLATE_PATH + "TechnicalFile/QHAuditTemplate.docx", outWordFilePath + "/" + "QHAuditHQ" + i + ".docx");
//
}
//
} else {
//
log.error("专项审查auditRecordRecursionList集合值为空!");
//
}
return
jsonObject
;
}
...
...
@@ -558,13 +563,13 @@ public class TechnicalFileUtils {
* @param jsonObject
* @return
*/
private
List
<
AuditRecordCardVO
>
interAndSpecialData
(
DxDocumentVO
documentVO
,
JSONObject
jsonObject
,
String
signName
)
{
private
List
<
Ext
AuditRecordCardVO
>
interAndSpecialData
(
DxDocumentVO
documentVO
,
JSONObject
jsonObject
,
String
signName
)
{
jsonObject
.
put
(
"name"
,
documentVO
.
getName
());
jsonObject
.
put
(
"number"
,
documentVO
.
getNumber
());
jsonObject
.
put
(
"state"
,
extDocService
.
searchDictDataByDictCode
(
Constants
.
OBJ_STATUS
,
documentVO
.
getState
()));
jsonObject
.
put
(
"version"
,
documentVO
.
getDisplayVersion
());
//获取过滤后的AuditRecordCardVO集合
List
<
AuditRecordCardVO
>
recordCardVOList
=
this
.
obtainRecordCardVOList
(
documentVO
,
signName
);
List
<
Ext
AuditRecordCardVO
>
recordCardVOList
=
this
.
obtainRecordCardVOList
(
documentVO
,
signName
);
return
recordCardVOList
;
}
...
...
@@ -575,13 +580,13 @@ public class TechnicalFileUtils {
* @param signName
* @return
*/
private
List
<
AuditRecordCardVO
>
obtainRecordCardVOList
(
DxDocumentVO
documentVO
,
String
signName
)
{
List
<
AuditRecordCardLinkVO
>
auditRecordRecursionList
=
this
.
findAuditRecordRecursion
(
documentVO
.
getVersionId
());
private
List
<
Ext
AuditRecordCardVO
>
obtainRecordCardVOList
(
DxDocumentVO
documentVO
,
String
signName
)
{
List
<
Ext
AuditRecordCardLinkVO
>
auditRecordRecursionList
=
this
.
findAuditRecordRecursion
(
documentVO
.
getVersionId
());
//定义集合数据
List
<
AuditRecordCardVO
>
recordCardVOList
=
new
ArrayList
<>();
List
<
Ext
AuditRecordCardVO
>
recordCardVOList
=
new
ArrayList
<>();
if
(!
CollectionUtils
.
isEmpty
(
auditRecordRecursionList
))
{
for
(
AuditRecordCardLinkVO
auditRecordCardLinkVO
:
auditRecordRecursionList
)
{
AuditRecordCardVO
target
=
auditRecordCardLinkVO
.
getTarget
();
for
(
Ext
AuditRecordCardLinkVO
auditRecordCardLinkVO
:
auditRecordRecursionList
)
{
Ext
AuditRecordCardVO
target
=
auditRecordCardLinkVO
.
getTarget
();
if
(!
ObjectUtils
.
isEmpty
(
target
))
{
String
taskName
=
target
.
getTaskName
();
if
(
signName
.
equals
(
taskName
))
{
...
...
@@ -596,7 +601,7 @@ public class TechnicalFileUtils {
/**
* 查询校审卡内容
*/
private
List
<
AuditRecordCardLinkVO
>
findAuditRecordRecursion
(
Long
sourceId
)
{
private
List
<
Ext
AuditRecordCardLinkVO
>
findAuditRecordRecursion
(
Long
sourceId
)
{
SearchQueryCondition
condition
=
SearchQueryCondition
.
builder
()
.
openProp
(
SearchQueryCondition
.
builder
().
name
(
"target"
).
build
())
.
searchItems
(
SearchItems
.
builder
()
...
...
@@ -621,12 +626,12 @@ public class TechnicalFileUtils {
String
orgId
=
split
[
0
];
String
userId
=
split
[
1
];
//通过orgId获取组织名称
OrganizationVO
organizationVO
=
organizationService
.
get
(
Long
.
parseLong
(
orgId
));
UserVO
userVO
=
userService
.
get
(
Long
.
parseLong
(
userId
));
DxOrganizationVO
organizationVO
=
(
DxOrganizationVO
)
organizationService
.
get
(
Long
.
parseLong
(
orgId
));
DxUserInfoVO
userVO
=
(
DxUserInfoVO
)
userService
.
get
(
Long
.
parseLong
(
userId
));
if
(!
ObjectUtils
.
isEmpty
(
organizationVO
))
{
//接口设计项
jsonObject
.
put
(
"interSJX"
,
organizationVO
.
getOrgName
());
jsonObject
.
put
(
"specialSJX"
,
organizationVO
.
getOrgName
());
//
todo
接口设计项
//
jsonObject.put("interSJX", organizationVO.getOrgName());
//
jsonObject.put("specialSJX", organizationVO.getOrgName());
}
}
else
{
log
.
error
(
"获取获取组织名称填充数据方法的错误,值为:{}"
,
value
);
...
...
@@ -638,25 +643,25 @@ public class TechnicalFileUtils {
*
* @param value
*/
private
OrganizationVO
getUserIdAndOrgId
(
List
<
String
>
value
)
{
private
Dx
OrganizationVO
getUserIdAndOrgId
(
List
<
String
>
value
)
{
if
(!
CollectionUtils
.
isEmpty
(
value
))
{
String
userAndOrgId
=
value
.
get
(
0
);
String
[]
split
=
userAndOrgId
.
split
(
"-"
);
String
orgId
=
split
[
0
];
//通过orgId获取组织名称
OrganizationVO
organizationVO
=
organizationService
.
get
(
Long
.
parseLong
(
orgId
));
DxOrganizationVO
organizationVO
=
(
DxOrganizationVO
)
organizationService
.
get
(
Long
.
parseLong
(
orgId
));
return
organizationVO
;
}
else
{
return
new
OrganizationVO
();
return
new
Dx
OrganizationVO
();
}
}
/**
* 图纸填充数据
*/
public
void
settingAtlasDrawingData
(
DxDocumentVO
documentVO
,
WfProcessInfoVO
wfProcessInfoVO
)
{
public
void
settingAtlasDrawingData
(
DxDocumentVO
documentVO
,
Dx
WfProcessInfoVO
wfProcessInfoVO
)
{
//生成图册下图纸的pdf
List
<
AtlasDrawingLinkVO
>
drawingLinks
=
extDocService
.
recursionAtlasDoc
(
documentVO
.
getVersionId
());
List
<
Ext
AtlasDrawingLinkVO
>
drawingLinks
=
extDocService
.
recursionAtlasDoc
(
documentVO
.
getVersionId
());
if
(!
CollectionUtils
.
isEmpty
(
drawingLinks
))
{
//展开target属性
drawingLinks
.
stream
().
forEach
(
item
->
{
...
...
@@ -673,115 +678,115 @@ public class TechnicalFileUtils {
* @param target 图纸的documentVO
* @param wfProcessInfoVO
*/
public
void
operateDrawingDoc
(
DxDocumentVO
documentVO
,
DxDocumentVO
target
,
WfProcessInfoVO
wfProcessInfoVO
)
{
public
void
operateDrawingDoc
(
DxDocumentVO
documentVO
,
DxDocumentVO
target
,
Dx
WfProcessInfoVO
wfProcessInfoVO
)
{
String
subTypeName
=
target
.
getSubTypeName
();
Map
<
String
,
Object
>
dynamicAttrs
=
target
.
getDynamicAttrs
();
//图幅
String
pictureFrame
=
(
String
)
dynamicAttrs
.
get
(
"pictureFrame"
);
List
<
ObjFileLinkVO
>
objFileLinks
=
target
.
getObjFileLinks
();
//获取主内容数据流
PapersVO
fileVO
=
extDocUtil
.
obtainPrimaryFile
(
objFileLinks
);
InputStream
inputStream
=
extDocUtil
.
obtainPrimaryFileInputStream
(
fileVO
);
if
(
ObjectUtils
.
isEmpty
(
inputStream
))
{
//无主内容
return
;
}
//获取外部资源配置
Properties
prop
=
ResourceHelper
.
getResource
();
//上传文件路径
String
uploadFilePath
=
prop
.
getProperty
(
"UploadFilePath"
);
//保存临时文件
String
filePath
=
FileUtils
.
saveToLocal
(
inputStream
,
uploadFilePath
+
fileVO
.
getOriginalFileName
());
log
.
info
(
"结束下载主内容======》"
+
fileVO
.
getId
());
//获取接口会签签审节点
WfProcessInstVO
wfProcessInstVO
=
null
;
if
(
ObjectUtils
.
isEmpty
(
documentVO
))
{
//如果是原理图和布置图,自动任务生成第三个签名pdf
wfProcessInstVO
=
workFlowUtil
.
getWfProcessInst
(
target
);
}
else
{
//跟图册随签
wfProcessInstVO
=
workFlowUtil
.
getWfProcessInst
(
documentVO
);
}
Map
<
String
,
Object
>
wfMap
=
new
HashMap
<>();
if
(!
ObjectUtils
.
isEmpty
(
wfProcessInstVO
))
{
wfMap
=
this
.
instanceService
.
getAllProcessVariables
(
wfProcessInstVO
.
getId
());
}
List
<
String
>
wfProcessVarsInterface
=
null
;
if
(!
CollectionUtils
.
isEmpty
(
wfMap
))
{
//取接口会签值
wfProcessVarsInterface
=
(
List
<
String
>)
wfMap
.
get
(
"interfaceReviewUser"
);
log
.
info
(
"获取图纸的interfaceReviewUser的值为:{}"
,
wfProcessVarsInterface
);
}
if
(
Constants
.
PRINCIPLE_DRAWINGS
.
equals
(
subTypeName
)
||
Constants
.
LAYOUT_DRAWINGS
.
equals
(
subTypeName
)
||
Constants
.
PART_DRAWINGS
.
equals
(
subTypeName
))
{
Map
<
String
,
String
>
map
=
new
HashMap
();
//原理布置图、零件图
List
<
WfTaskDefinitionVO
>
activities
=
wfProcessInfoVO
.
getActivityInfo
();
if
(!
CollectionUtils
.
isEmpty
(
activities
))
{
//写入签名数据
map
.
put
(
"SJPHOTO"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_PREPARED
));
map
.
put
(
"SJDATE"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_PREPARED
));
//校核
map
.
put
(
"JHPHOTO"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_CHECKER
));
map
.
put
(
"JHDATE"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_CHECKER
));
//审核
map
.
put
(
"SHPHOTO"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_SH
));
map
.
put
(
"SHDATE"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_SH
));
//审定
map
.
put
(
"SDPHOTO"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_SD
));
map
.
put
(
"SDDATE"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_SD
));
//批准
map
.
put
(
"PZPHOTO"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_APPROVED
));
map
.
put
(
"PZDATE"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_APPROVED
));
//标准化(审核)
map
.
put
(
"BZHPHOTO"
,
extDocService
.
getSignImage
(
activities
,
SignConstants
.
SIGN_KEY_SH
));
map
.
put
(
"BZHDATE"
,
extDocService
.
getEndDate
(
activities
,
SignConstants
.
SIGN_KEY_SH
));
//获取接口会签人的信息
List
<
AuditPojo
>
auditPojoList
=
new
ArrayList
<>();
if
(!
CollectionUtils
.
isEmpty
(
wfProcessVarsInterface
))
{
List
<
String
>
userAndOrgId
=
wfProcessVarsInterface
;
//组织id和userId
for
(
int
i
=
0
;
i
<
userAndOrgId
.
size
();
i
++)
{
String
item
=
userAndOrgId
.
get
(
i
);
String
[]
split
=
item
.
split
(
"-"
);
String
splitOrgId
=
null
;
String
splituserId
=
null
;
if
(
split
.
length
==
1
)
{
auditPojoList
.
add
(
null
);
}
else
{
splitOrgId
=
split
[
0
];
splituserId
=
split
[
1
];
//接口设计项(组)
OrganizationVO
organizationVO
=
organizationService
.
get
(
Long
.
parseLong
(
splitOrgId
));
UserVO
userVO
=
userService
.
get
(
Long
.
parseLong
(
splituserId
));
AuditPojo
auditPojo
=
new
AuditPojo
();
String
orgName
=
organizationVO
.
getOrgName
();
String
auditRecordCard
=
userVO
.
getUserAccount
();
//签审日期
String
auditDate
=
this
.
getMultiEndDate
(
activities
,
SignConstants
.
SIGN_KEY_JKHQ
,
userVO
.
getId
(),
i
);
auditPojo
.
setInterDesign
(
orgName
);
auditPojo
.
setSignDate
(
auditDate
);
auditPojo
.
setSignName
(
auditRecordCard
);
auditPojoList
.
add
(
auditPojo
);
}
}
}
this
.
extractedInterHQData
(
map
,
auditPojoList
);
}
String
generateFilePath
=
Constants
.
MERGER_FILE_ABSOLUTE_PATH
+
target
.
getNumber
()
+
"\\"
;
try
{
FileUtil
.
mkdir
(
generateFilePath
);
//得到主内容
SignUtil
.
sign
(
filePath
,
generateFilePath
+
"generateReplace.pdf"
,
map
,
pictureFrame
);
//挂载到附件上
extDocService
.
operateAttachFile
(
target
,
new
FileInputStream
(
generateFilePath
+
"generateReplace.pdf"
),
""
);
}
catch
(
Exception
e
)
{
log
.
error
(
"生成图纸失败!"
+
e
.
getMessage
());
}
finally
{
//删除生成后的临时文件(删除的是number目录和目录下的文件)
FileUtils
.
deleteDirectory
(
generateFilePath
);
}
}
//
todo
获取主内容数据流
//
PapersVO fileVO = extDocUtil.obtainPrimaryFile(objFileLinks);
//
InputStream inputStream = extDocUtil.obtainPrimaryFileInputStream(fileVO);
//
if (ObjectUtils.isEmpty(inputStream)) {
//
//无主内容
//
return;
//
}
//
//获取外部资源配置
//
Properties prop = ResourceHelper.getResource();
//
//上传文件路径
//
String uploadFilePath = prop.getProperty("UploadFilePath");
//
//保存临时文件
//
String filePath = FileUtils.saveToLocal(inputStream, uploadFilePath + fileVO.getOriginalFileName());
//
log.info("结束下载主内容======》" + fileVO.getId());
//
//获取接口会签签审节点
//
WfProcessInstVO wfProcessInstVO = null;
//
if (ObjectUtils.isEmpty(documentVO)) {
//
//如果是原理图和布置图,自动任务生成第三个签名pdf
//
wfProcessInstVO = workFlowUtil.getWfProcessInst(target);
//
} else {
//
//跟图册随签
//
wfProcessInstVO = workFlowUtil.getWfProcessInst(documentVO);
//
}
//
Map<String, Object> wfMap = new HashMap<>();
//
if (!ObjectUtils.isEmpty(wfProcessInstVO)) {
//
wfMap = this.instanceService.getAllProcessVariables(wfProcessInstVO.getId());
//
}
//
List<String> wfProcessVarsInterface = null;
//
if (!CollectionUtils.isEmpty(wfMap)) {
//
//取接口会签值
//
wfProcessVarsInterface = (List<String>) wfMap.get("interfaceReviewUser");
//
log.info("获取图纸的interfaceReviewUser的值为:{}", wfProcessVarsInterface);
//
}
//
if (Constants.PRINCIPLE_DRAWINGS.equals(subTypeName) || Constants.LAYOUT_DRAWINGS.equals(subTypeName) || Constants.PART_DRAWINGS.equals(subTypeName)) {
//
Map<String, String> map = new HashMap();
//
//原理布置图、零件图
//
List<WfTaskDefinitionVO> activities = wfProcessInfoVO.getActivityInfo();
//
if (!CollectionUtils.isEmpty(activities)) {
//
//写入签名数据
//
map.put("SJPHOTO", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_PREPARED));
//
map.put("SJDATE", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_PREPARED));
//
//校核
//
map.put("JHPHOTO", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_CHECKER));
//
map.put("JHDATE", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_CHECKER));
//
//审核
//
map.put("SHPHOTO", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_SH));
//
map.put("SHDATE", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_SH));
//
//审定
//
map.put("SDPHOTO", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_SD));
//
map.put("SDDATE", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_SD));
//
//批准
//
map.put("PZPHOTO", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_APPROVED));
//
map.put("PZDATE", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_APPROVED));
//
//标准化(审核)
//
map.put("BZHPHOTO", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_SH));
//
map.put("BZHDATE", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_SH));
//
//获取接口会签人的信息
//
List<AuditPojo> auditPojoList = new ArrayList<>();
//
if (!CollectionUtils.isEmpty(wfProcessVarsInterface)) {
//
List<String> userAndOrgId = wfProcessVarsInterface;
//
//组织id和userId
//
for (int i = 0; i < userAndOrgId.size(); i++) {
//
String item = userAndOrgId.get(i);
//
String[] split = item.split("-");
//
String splitOrgId = null;
//
String splituserId = null;
//
if (split.length == 1) {
//
auditPojoList.add(null);
//
} else {
//
splitOrgId = split[0];
//
splituserId = split[1];
//
//接口设计项(组)
//
OrganizationVO organizationVO = organizationService.get(Long.parseLong(splitOrgId));
//
UserVO userVO = userService.get(Long.parseLong(splituserId));
//
AuditPojo auditPojo = new AuditPojo();
//
String orgName = organizationVO.getOrgName();
//
String auditRecordCard = userVO.getUserAccount();
//
//签审日期
//
String auditDate = this.getMultiEndDate(activities, SignConstants.SIGN_KEY_JKHQ, userVO.getId(), i);
//
auditPojo.setInterDesign(orgName);
//
auditPojo.setSignDate(auditDate);
//
auditPojo.setSignName(auditRecordCard);
//
auditPojoList.add(auditPojo);
//
}
//
//
}
//
}
//
this.extractedInterHQData(map, auditPojoList);
//
}
//
String generateFilePath = Constants.MERGER_FILE_ABSOLUTE_PATH + target.getNumber() + "\\";
//
try {
//
FileUtil.mkdir(generateFilePath);
//
//得到主内容
//
SignUtil.sign(filePath, generateFilePath + "generateReplace.pdf", map, pictureFrame);
//
//挂载到附件上
//
extDocService.operateAttachFile(target, new FileInputStream(generateFilePath + "generateReplace.pdf"), "");
//
} catch (Exception e) {
//
log.error("生成图纸失败!" + e.getMessage());
//
} finally {
//
//删除生成后的临时文件(删除的是number目录和目录下的文件)
//
FileUtils.deleteDirectory(generateFilePath);
//
}
//
}
}
/**
...
...
@@ -836,48 +841,48 @@ public class TechnicalFileUtils {
}
return
new
AuditPojo
();
}
/**
* 会签多人签名(获取某个环节结束时间)
*
* @param activities
* @param activityName
* @return
*/
private
String
getMultiEndDate
(
List
<
WfTaskDefinitionVO
>
activities
,
String
activityName
,
Long
userId
,
int
number
)
{
List
<
String
>
list
=
new
ArrayList
<>();
for
(
WfTaskDefinitionVO
wf
:
activities
)
{
if
(
wf
.
getTaskName
().
equals
(
activityName
))
{
list
=
getMultiActivityEndDate
(
wf
,
userId
);
}
}
if
(!
CollectionUtils
.
isEmpty
(
list
)
&&
list
.
size
()
>=
number
+
1
)
{
return
list
.
get
(
number
);
}
return
" "
;
}
/**
* 获取环节所有执行者,以,隔开
*
* @param activity
* @return
*/
private
List
<
String
>
getMultiActivityEndDate
(
WfTaskDefinitionVO
activity
,
Long
userId
)
{
List
<
String
>
list
=
new
ArrayList
<>();
List
<
WfProcessTaskVO
>
taskList
=
activity
.
getTaskList
();
SimpleDateFormat
dateFm
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
if
(!
CollectionUtils
.
isEmpty
(
taskList
))
{
for
(
WfProcessTaskVO
wf
:
taskList
)
{
String
assignee
=
wf
.
getAssignee
();
if
(
Long
.
parseLong
(
assignee
)
==
userId
&&
wf
.
getState
().
equals
(
TaskStateEnum
.
COMPLETE
.
name
())
&&
(
SignConstants
.
WfResultList
.
contains
(
wf
.
getResult
())))
{
Date
endDate
=
wf
.
getEndTime
();
list
.
add
(
dateFm
.
format
(
endDate
).
replace
(
"-"
,
"."
));
}
}
return
list
;
}
return
null
;
}
//todo
//
/**
//
* 会签多人签名(获取某个环节结束时间)
//
*
//
* @param activities
//
* @param activityName
//
* @return
//
*/
//
private String getMultiEndDate(List<WfTaskDefinitionVO> activities, String activityName, Long userId,
//
int number) {
//
List<String> list = new ArrayList<>();
//
for (WfTaskDefinitionVO wf : activities) {
//
if (wf.getTaskName().equals(activityName)) {
//
list = getMultiActivityEndDate(wf, userId);
//
}
//
}
//
if (!CollectionUtils.isEmpty(list) && list.size() >= number + 1) {
//
return list.get(number);
//
}
//
return " ";
//
}
//todo
//
/**
//
* 获取环节所有执行者,以,隔开
//
*
//
* @param activity
//
* @return
//
*/
//
private List<String> getMultiActivityEndDate(WfTaskDefinitionVO activity, Long userId) {
//
List<String> list = new ArrayList<>();
//
List<WfProcessTaskVO> taskList = activity.getTaskList();
//
SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd");
//
if (!CollectionUtils.isEmpty(taskList)) {
//
for (WfProcessTaskVO wf : taskList) {
//
String assignee = wf.getAssignee();
//
if (Long.parseLong(assignee) == userId && wf.getState().equals(TaskStateEnum.COMPLETE.name()) && (SignConstants.WfResultList.contains(wf.getResult()))) {
//
Date endDate = wf.getEndTime();
//
list.add(dateFm.format(endDate).replace("-", "."));
//
}
//
}
//
return list;
//
}
//
return null;
//
}
}
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/service/ObsoleteDocLinkRepositoryShadow.java
View file @
735950a0
package
com
.
yonde
.
dcs
.
document
.
core
.
repository
.
shadow
;
import
com.yonde.dcs.document.entity.po.ObsoleteDocLink
;
import
com.yonde.dcs.document.entity.po.
Ext
ObsoleteDocLink
;
import
com.yonde.dex.dao.business.repository.BaseRepository
;
import
org.springframework.data.repository.NoRepositoryBean
;
...
...
@@ -11,7 +11,7 @@ import org.springframework.data.repository.NoRepositoryBean;
* @date: 2024-7-15 15:32:39
**/
@NoRepositoryBean
public
interface
ObsoleteDocLinkRepositoryShadow
<
P
extends
ObsoleteDocLink
>
extends
BaseRepository
<
P
>
{
public
interface
ObsoleteDocLinkRepositoryShadow
<
P
extends
Ext
ObsoleteDocLink
>
extends
BaseRepository
<
P
>
{
String
BEAN_NAME
=
"obsoleteDocLinkRepository"
;
}
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/service/impl/ExtAutoTaskServiceImpl.java
View file @
735950a0
...
...
@@ -40,7 +40,6 @@ import com.yonde.dex.user.feign.DxUserInfoFeign;
import
com.yonde.dex.user.feign.SwitchUserService
;
import
com.yonde.dex.wfc.common.vo.DxWfParticipantInfoVO
;
import
com.yonde.dex.wfc.common.vo.DxWfProcessTaskVO
;
import
com.yonde.dex.wfc.common.vo.DxWfProcessVO
;
import
com.yonde.dex.wfc.common.vo.DxWfTaskContext
;
import
com.yonde.dex.wfc.feign.api.WfcProcessFeign
;
import
com.yonde.dex.wfc.feign.api.WfcTaskFeign
;
...
...
@@ -63,7 +62,6 @@ import java.io.FileInputStream;
import
java.io.InputStream
;
import
java.lang.reflect.Method
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @program: inet-pdm-service
...
...
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/service/impl/ExtDocServiceImpl.java
View file @
735950a0
...
...
@@ -4,11 +4,16 @@ import cn.hutool.core.collection.CollectionUtil;
import
cn.hutool.core.io.FileUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ZipUtil
;
import
cn.hutool.extra.spring.SpringUtil
;
import
com.yonde.dcs.document.common.vo.*
;
import
com.yonde.dcs.document.common.vo.DxDocumentVO
;
import
com.yonde.dcs.document.common.vo.ExtAtlasDrawingLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtObsoleteDocLinkVO
;
import
com.yonde.dcs.document.common.vo.ExtReviseVersionVO
;
import
com.yonde.dcs.document.core.constants.Constants
;
import
com.yonde.dcs.document.core.service.*
;
import
com.yonde.dcs.document.core.service.DxDocumentService
;
import
com.yonde.dcs.document.core.service.ExtAtlasDrawingLinkService
;
import
com.yonde.dcs.document.core.service.ExtDocService
;
import
com.yonde.dcs.document.core.service.ExtObsoleteDocLinkService
;
import
com.yonde.dcs.document.core.util.CommonUtil
;
import
com.yonde.dcs.document.core.util.ExtDocUtil
;
import
com.yonde.dcs.document.core.util.FileUtils
;
...
...
@@ -26,7 +31,6 @@ import com.yonde.dex.basedata.entity.data.DxPageImpl;
import
com.yonde.dex.basedata.entity.data.OperatorType
;
import
com.yonde.dex.basedata.entity.vo.IdVO
;
import
com.yonde.dex.basedata.exception.DxBusinessException
;
import
com.yonde.dex.basedata.utils.obj.DxEntityUtils
;
import
com.yonde.dex.dao.service.util.DxPageUtils
;
import
com.yonde.dex.dfs.feign.FileManagerFeignService
;
...
...
@@ -37,12 +41,9 @@ import com.yonde.dex.dfs.vo.RepoFileVO;
import
com.yonde.dex.dfs.vo.view.FileDownLoadInfoVO
;
import
com.yonde.dex.dict.feign.DictDataFeignService
;
import
com.yonde.dex.dict.service.vo.DictDataVO
;
import
com.yonde.dex.user.feign.DxUserInfoFeign
;
import
com.yonde.dex.user.feign.SwitchUserService
;
import
com.yonde.dex.version.plugin.core.service.VersionService
;
import
com.yonde.dex.version.plugin.entities.DxVersion
;
import
com.yonde.dex.wfc.common.vo.DxWfProcessInfoVO
;
import
com.yonde.dex.wfc.feign.api.WfcProcessFeign
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -259,7 +260,7 @@ public class ExtDocServiceImpl implements ExtDocService {
//设置为已发布状态
docNotifySave
.
setState
(
Constants
.
PBULISHED
);
DxDocumentVO
notifyDocumentVO
=
(
DxDocumentVO
)
documentService
.
changeStatus
(
docNotifySave
);
ObsoleteDocLinkVO
linkVO
=
new
ObsoleteDocLinkVO
();
ExtObsoleteDocLinkVO
linkVO
=
new
Ext
ObsoleteDocLinkVO
();
linkVO
.
setSource
(
documentVO
);
linkVO
.
setTarget
(
notifyDocumentVO
);
//过时文件通知单关联当前文档最新版本
...
...
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/service/impl/ExtObsoleteDocLinkServiceImpl.java
View file @
735950a0
package
com
.
yonde
.
dcs
.
document
.
core
.
service
.
impl
;
import
org.springframework.stereotype.Service
;
import
io.swagger.annotations.ApiOperation
;
import
java.util.List
;
import
com.yonde.dcs.document.common.vo.ExtObsoleteDocLinkVO
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.*
;
import
com.yonde.dcs.document.core.service.ExtObsoleteDocLinkService
;
import
com.yonde.dcs.document.core.repository.ExtObsoleteDocLinkRepository
;
import
com.yonde.dcs.document.core.service.ExtObsoleteDocLinkService
;
import
com.yonde.dcs.document.entity.po.ExtObsoleteDocLink
;
import
javax.annotation.Resource
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @description: ExtObsoleteDocLink-ServiceImpl
...
...
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/service/shadow/ExtObsoleteDocLinkServiceShadow.java
View file @
735950a0
...
...
@@ -2,8 +2,8 @@ package com.yonde.dcs.document.core.service.shadow;
import
com.yonde.dcs.document.common.vo.ExtObsoleteDocLinkVO
;
import
com.yonde.dcs.document.feign.ExtObsoleteDocLinkServiceFeign
;
import
com.yonde.dex.linkdata.plugin.core.service.DxLinkDataService
;
import
com.yonde.dex.dao.service.BaseIdEntityService
;
import
com.yonde.dex.linkdata.plugin.core.service.DxLinkDataService
;
import
com.yonde.dex.logicdelete.plugin.core.service.LogicDeleteService
;
/**
* @description: ExtObsoleteDocLink-service
...
...
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/util/ExtDocUtil.java
View file @
735950a0
...
...
@@ -4,7 +4,6 @@ package com.yonde.dcs.document.core.util;
import
cn.hutool.core.bean.BeanUtil
;
import
com.yonde.dcs.document.common.vo.DxDocumentVO
;
import
com.yonde.dcs.document.common.vo.ExtObsoleteDocLinkVO
;
import
com.yonde.dcs.document.common.vo.ObsoleteDocLinkVO
;
import
com.yonde.dcs.document.core.constants.Constants
;
import
com.yonde.dcs.document.core.service.DxDocumentService
;
import
com.yonde.dcs.document.core.service.ExtObsoleteDocLinkService
;
...
...
@@ -24,8 +23,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestAttributes
;
import
java.io.InputStream
;
import
java.util.*
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -159,7 +160,7 @@ public class ExtDocUtil {
*
* @param sourceId
*/
public
List
<
ObsoleteDocLinkVO
>
recursionObsoleteDocLinkBySourceId
(
Long
sourceId
)
{
public
List
<
Ext
ObsoleteDocLinkVO
>
recursionObsoleteDocLinkBySourceId
(
Long
sourceId
)
{
SearchQueryCondition
condition
=
SearchQueryCondition
.
builder
()
.
openProp
(
SearchQueryCondition
.
builder
().
name
(
"target"
)
.
openProp
(
SearchQueryCondition
.
builder
().
name
(
"objFileLinks"
).
openProp
(
SearchQueryCondition
.
builder
().
name
(
"target"
).
build
()).
build
()).
build
())
...
...
dcs-doc-core/src/main/java/com/yonde/dcs/document/core/util/WorkFlowUtil.java
View file @
735950a0
...
...
@@ -2,22 +2,16 @@ package com.yonde.dcs.document.core.util;
import
com.yonde.dcs.document.common.vo.DxDocumentVO
;
import
com.yonde.dcs.document.core.constants.SignConstants
;
import
com.yonde.dex.user.common.vo.DxUserInfoVO
;
import
com.yonde.dex.user.feign.DxUserInfoFeign
;
import
com.yonde.dex.wfc.common.enums.TaskStateEnum
;
import
com.yonde.dex.wfc.common.vo.DxWfProcessSearchVO
;
import
com.yonde.dex.wfc.common.vo.DxWfProcessTaskVO
;
import
com.yonde.dex.wfc.feign.api.WfcProcessFeign
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.ObjectUtils
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.List
;
import
java.util.Map
;
/**
* @program: inet-pdm-service
...
...
@@ -75,7 +69,7 @@ public class WorkFlowUtil {
* @param doc
*/
// TODO: 2024/8/1 getProcessInstList方法不存在
//
public Map<String, List<DxWfProcessTaskVO>> getWfInfo(DxDocumentVO doc) {
public
Map
<
String
,
List
<
DxWfProcessTaskVO
>>
getWfInfo
(
DxDocumentVO
doc
)
{
// WfProcessInstVO wfProcessInstVO = getWfProcessInst(doc);
// if (!ObjectUtils.isEmpty(wfProcessInstVO)) {
// WfProcessInfoVO wfProcessInfo = this.instanceService.getProcessInstSimpleDetailById(wfProcessInstVO.getId());
...
...
@@ -88,8 +82,8 @@ public class WorkFlowUtil {
//
// return wfHistoryMap;
// }
//
return null;
//
}
return
null
;
}
/**
* 根据任务名称获取处理人
...
...
dcs-doc-entity/src/main/java/com/yonde/dcs/document/entity/po/ObsoleteDocLink.java
→
dcs-doc-entity/src/main/java/com/yonde/dcs/document/entity/po/
Ext
ObsoleteDocLink.java
View file @
735950a0
...
...
@@ -27,7 +27,7 @@ import javax.persistence.Table;
@NoArgsConstructor
@Data
@Table
(
name
=
"OBSOLETE_DOC_LINK"
)
public
class
ObsoleteDocLink
extends
IdOnlyEntity
implements
IdEntity
,
DxLogicDeleteHolder
,
DxLinkDataHolder
{
public
class
Ext
ObsoleteDocLink
extends
IdOnlyEntity
implements
IdEntity
,
DxLogicDeleteHolder
,
DxLinkDataHolder
{
/**
* dao扩展对象
...
...
dcs-doc-feign/src/main/java/com/yonde/dcs/document/feign/ExtObsoleteDocLinkServiceFeign.java
View file @
735950a0
package
com
.
yonde
.
dcs
.
document
.
feign
;
import
com.yonde.dcs.document.common.vo.ExtObsoleteDocLinkVO
;
import
com.yonde.dcs.document.feign.shadow.ExtObsoleteDocLinkServiceFeignShadow
;
import
io.swagger.annotations.Api
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.*
;
import
com.yonde.dcs.document.feign.shadow.ExtObsoleteDocLinkServiceFeignShadow
;
/**
* @description: ExtObsoleteDocLink-Feign
...
...
dcs-doc-feign/src/main/java/com/yonde/dcs/document/feign/shadow/ExtObsoleteDocLinkServiceFeignShadow.java
View file @
735950a0
package
com
.
yonde
.
dcs
.
document
.
feign
.
shadow
;
import
com.yonde.dcs.document.common.vo.ExtObsoleteDocLinkVO
;
import
io.swagger.annotations.Api
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.*
;
import
com.yonde.dex.dao.service.remotes.BaseFeign
;
import
com.yonde.dex.logicdelete.plugin.feign.LogicDeleteFeign
;
import
com.yonde.dex.linkdata.plugin.feign.DxLinkDataFeign
;
import
com.yonde.dex.logicdelete.plugin.feign.LogicDeleteFeign
;
/**
* @description: ExtObsoleteDocLink-Feign
...
...
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