Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cloud-fb
Overview
Overview
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
王衍超
cloud-fb
Commits
ef3b44a9
Commit
ef3b44a9
authored
Apr 09, 2021
by
shiwenbo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新inz.workflow工程
parent
022c6231
Show whitespace changes
Inline
Side-by-side
Showing
81 changed files
with
4022 additions
and
151 deletions
+4022
-151
build.gradle
backend/inz.workflow/build.gradle
+2
-1
BeanConfiguration.java
...va/com/beecode/inz/workflow/config/BeanConfiguration.java
+16
-0
ApprovalCopyDao.java
...in/java/com/beecode/inz/workflow/dao/ApprovalCopyDao.java
+10
-0
SubmitApprovalSuggestionDao.java
...beecode/inz/workflow/dao/SubmitApprovalSuggestionDao.java
+10
-0
TranspondApprovalStaffDao.java
...m/beecode/inz/workflow/dao/TranspondApprovalStaffDao.java
+11
-0
TranspondApprovalSuggestionDao.java
...code/inz/workflow/dao/TranspondApprovalSuggestionDao.java
+11
-0
ApprovalCopyEntity.java
...a/com/beecode/inz/workflow/entity/ApprovalCopyEntity.java
+56
-0
ApprovedRecord.java
.../java/com/beecode/inz/workflow/entity/ApprovedRecord.java
+7
-3
InzApprovalTask.java
...java/com/beecode/inz/workflow/entity/InzApprovalTask.java
+8
-0
InzBizProcess.java
...n/java/com/beecode/inz/workflow/entity/InzBizProcess.java
+6
-1
SubmitApprovalSuggestionEntity.java
...e/inz/workflow/entity/SubmitApprovalSuggestionEntity.java
+58
-0
TranspondApprovalStaffEntity.java
...ode/inz/workflow/entity/TranspondApprovalStaffEntity.java
+112
-0
TranspondApprovalSuggestionEntity.java
...nz/workflow/entity/TranspondApprovalSuggestionEntity.java
+101
-0
ApprovalCopyDaoImpl.java
...eecode/inz/workflow/internal/dao/ApprovalCopyDaoImpl.java
+39
-0
CommonDaoImpl.java
.../com/beecode/inz/workflow/internal/dao/CommonDaoImpl.java
+6
-2
InzApprovalTaskDaoImpl.java
...ode/inz/workflow/internal/dao/InzApprovalTaskDaoImpl.java
+1
-0
SubmitApprovalSuggestionDaoImpl.java
...orkflow/internal/dao/SubmitApprovalSuggestionDaoImpl.java
+39
-0
TranspondApprovalStaffDaoImpl.java
.../workflow/internal/dao/TranspondApprovalStaffDaoImpl.java
+38
-0
TranspondApprovalSuggestionDaoImpl.java
...flow/internal/dao/TranspondApprovalSuggestionDaoImpl.java
+40
-0
BizProcessEventListenerImpl.java
...rkflow/internal/listener/BizProcessEventListenerImpl.java
+22
-1
BizTypeWorkflowConfigurationDefinitionMech.java
.../metadata/BizTypeWorkflowConfigurationDefinitionMech.java
+0
-0
FinishedProcess.java
.../beecode/inz/workflow/internal/scene/FinishedProcess.java
+10
-15
ToDoTask.java
...ava/com/beecode/inz/workflow/internal/scene/ToDoTask.java
+5
-0
UnderwayProcess.java
.../beecode/inz/workflow/internal/scene/UnderwayProcess.java
+9
-12
ApprovalCopyServiceImpl.java
...nz/workflow/internal/service/ApprovalCopyServiceImpl.java
+127
-0
ApprovalNodeServiceImpl.java
...nz/workflow/internal/service/ApprovalNodeServiceImpl.java
+820
-0
ApprovalRecordServiceImpl.java
.../workflow/internal/service/ApprovalRecordServiceImpl.java
+258
-21
ApprovalSendCopyServiceImpl.java
...orkflow/internal/service/ApprovalSendCopyServiceImpl.java
+105
-0
ApprovalTranspondServiceImpl.java
...rkflow/internal/service/ApprovalTranspondServiceImpl.java
+219
-0
FlowChartInfoServiceImpl.java
...z/workflow/internal/service/FlowChartInfoServiceImpl.java
+11
-25
InzApprovalTaskServiceImpl.java
...workflow/internal/service/InzApprovalTaskServiceImpl.java
+85
-23
InzBizProcessServiceImpl.java
...z/workflow/internal/service/InzBizProcessServiceImpl.java
+12
-0
InzWorkflowDefinitionServiceImpl.java
...ow/internal/service/InzWorkflowDefinitionServiceImpl.java
+9
-8
InzWorkflowServiceImpl.java
...inz/workflow/internal/service/InzWorkflowServiceImpl.java
+166
-9
SubmitApprovalSuggestionServiceImpl.java
...internal/service/SubmitApprovalSuggestionServiceImpl.java
+42
-0
CommonWorkflowBillProcessEventListener.java
...flow/listener/CommonWorkflowBillProcessEventListener.java
+50
-0
InzBizProcessEvent.java
...com/beecode/inz/workflow/listener/InzBizProcessEvent.java
+7
-0
InzBizProcessEventListener.java
...ode/inz/workflow/listener/InzBizProcessEventListener.java
+9
-4
RTWorkFlowEvent.java
...va/com/beecode/inz/workflow/listener/RTWorkFlowEvent.java
+30
-0
TaskEventListenerImpl.java
.../beecode/inz/workflow/listener/TaskEventListenerImpl.java
+4
-3
CommomParticipantStrategy.java
...e/inz/workflow/participant/CommomParticipantStrategy.java
+31
-0
SubmitOrgPathAppointRoleParticipantStrategy.java
...ticipant/SubmitOrgPathAppointRoleParticipantStrategy.java
+83
-0
SubmiterSubsidiaryRoleParticipantStrategy.java
...articipant/SubmiterSubsidiaryRoleParticipantStrategy.java
+103
-0
ApprovalNodesObj.java
.../java/com/beecode/inz/workflow/pojo/ApprovalNodesObj.java
+57
-0
InzApprovalTaskObj.java
...ava/com/beecode/inz/workflow/pojo/InzApprovalTaskObj.java
+12
-0
WorkflowRecordsObj.java
...ava/com/beecode/inz/workflow/pojo/WorkflowRecordsObj.java
+54
-0
InzApprovalTaskQueryDataProcessor.java
...inz/workflow/query/InzApprovalTaskQueryDataProcessor.java
+13
-0
InzWorkflowDefinitionQueryDataProcessor.java
...rkflow/query/InzWorkflowDefinitionQueryDataProcessor.java
+8
-1
ApprovalCopyService.java
...com/beecode/inz/workflow/service/ApprovalCopyService.java
+15
-0
ApprovalNodeService.java
...com/beecode/inz/workflow/service/ApprovalNodeService.java
+13
-0
ApprovalRecordService.java
...m/beecode/inz/workflow/service/ApprovalRecordService.java
+2
-0
ApprovalSendCopyService.java
...beecode/inz/workflow/service/ApprovalSendCopyService.java
+7
-0
ApprovalTranspondService.java
...eecode/inz/workflow/service/ApprovalTranspondService.java
+11
-0
InzApprovalTaskService.java
.../beecode/inz/workflow/service/InzApprovalTaskService.java
+5
-4
InzBizProcessService.java
...om/beecode/inz/workflow/service/InzBizProcessService.java
+2
-0
InzWorkflowService.java
.../com/beecode/inz/workflow/service/InzWorkflowService.java
+45
-0
SubmitApprovalSuggestionService.java
...inz/workflow/service/SubmitApprovalSuggestionService.java
+11
-0
WorkflowBillService.java
...com/beecode/inz/workflow/service/WorkflowBillService.java
+51
-0
AbstractWorkflowBillService.java
...workflow/service/support/AbstractWorkflowBillService.java
+102
-0
WorkflowGenerator.java
...java/com/beecode/inz/workflow/util/WorkflowGenerator.java
+371
-4
ApprovalCopyController.java
.../com/beecode/inz/workflow/web/ApprovalCopyController.java
+75
-0
ApprovalNodeController.java
.../com/beecode/inz/workflow/web/ApprovalNodeController.java
+44
-0
ApprovalRecordController.java
...om/beecode/inz/workflow/web/ApprovalRecordController.java
+8
-0
ApprovalTranspondController.java
...beecode/inz/workflow/web/ApprovalTranspondController.java
+93
-0
InzApprovalTaskController.java
...m/beecode/inz/workflow/web/InzApprovalTaskController.java
+27
-14
InzWorkflowController.java
...a/com/beecode/inz/workflow/web/InzWorkflowController.java
+71
-0
SubmitApprovalSuggestionController.java
.../inz/workflow/web/SubmitApprovalSuggestionController.java
+47
-0
InzApprovalTask.mk
...del/com/beecode/inz/workflow/datamodel/InzApprovalTask.mk
+3
-0
InzBizProcess.mk
...model/com/beecode/inz/workflow/datamodel/InzBizProcess.mk
+4
-0
InzWorkflowDefinition.mk
...m/beecode/inz/workflow/datamodel/InzWorkflowDefinition.mk
+4
-0
spring.factories
...inz.workflow/src/main/resources/META-INF/spring.factories
+0
-0
InzApprovalTask.jmx
...es/com/beecode/inz/workflow/datamodel/InzApprovalTask.jmx
+14
-0
InzBizProcess.jmx
...rces/com/beecode/inz/workflow/datamodel/InzBizProcess.jmx
+14
-0
InzWorkflowDefinition.jmx
.../beecode/inz/workflow/datamodel/InzWorkflowDefinition.jmx
+14
-0
SubmiterSubsidiaryRoleParticipant.jmx
...orkflow/participant/SubmiterSubsidiaryRoleParticipant.jmx
+26
-0
InzApprovalTask.hbm.xml
...orkflow/src/main/resources/config/InzApprovalTask.hbm.xml
+4
-0
InzBizProcess.hbm.xml
....workflow/src/main/resources/config/InzBizProcess.hbm.xml
+3
-0
InzWorkflowDefinition.hbm.xml
...w/src/main/resources/config/InzWorkflowDefinition.hbm.xml
+4
-0
EmbeddedContainerCustomizer.java
...com/beecode/inz/workflow/EmbeddedContainerCustomizer.java
+0
-0
WebConfiguration.java
.../test/java/com/beecode/inz/workflow/WebConfiguration.java
+0
-0
WebProperties.java
...src/test/java/com/beecode/inz/workflow/WebProperties.java
+0
-0
No files found.
backend/inz.workflow/build.gradle
View file @
ef3b44a9
...
...
@@ -14,8 +14,9 @@ dependencies {
compile
lib
.
json
compile
lib
.
bcp_type_support_json
compile
lib
.
bcp_participant
compile
lib
.
hibernate_common_annotations
compile
"com.beecode:bap2.staff:${aminoVersion}"
compile
"com.beecode:bap2.bill:${aminoVersion}"
compile
"com.beecode:bap2.bill.workflow:${aminoVersion}"
compile
"com.beecode:bap2.userprofile:${bap2Version}"
compile
"com.beecode:bap2.workflow:${aminoVersion}"
compile
"com.beecode:bap2.system:${aminoVersion}"
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/config/BeanConfiguration.java
View file @
ef3b44a9
...
...
@@ -16,11 +16,14 @@ import com.beecode.inz.workflow.internal.scene.ProcessedTask;
import
com.beecode.inz.workflow.internal.scene.ToDoTask
;
import
com.beecode.inz.workflow.internal.scene.UnderwayProcess
;
import
com.beecode.inz.workflow.internal.scene.workflowdefinition.DiscardScene
;
import
com.beecode.inz.workflow.listener.CommonWorkflowBillProcessEventListener
;
import
com.beecode.inz.workflow.listener.TaskEventListenerImpl
;
import
com.beecode.inz.workflow.participant.CommomParticipantStrategy
;
import
com.beecode.inz.workflow.participant.DepartmentPicByLevelParticipantStrategy
;
import
com.beecode.inz.workflow.participant.FollowerMemberPicParticipantStrategy
;
import
com.beecode.inz.workflow.participant.SubmitDeptPathAppointRoleParticipantStrategy
;
import
com.beecode.inz.workflow.participant.SubmitOrgPathAppointRoleParticipantStrategy
;
import
com.beecode.inz.workflow.participant.SubmiterSubsidiaryRoleParticipantStrategy
;
import
com.beecode.inz.workflow.query.InzApprovalTaskQueryDataProcessor
;
import
com.beecode.inz.workflow.query.InzBizProcessQueryDataProcessor
;
import
com.beecode.inz.workflow.query.InzWorkflowDefinitionQueryDataProcessor
;
...
...
@@ -113,6 +116,14 @@ public class BeanConfiguration {
public
SubmitDeptPathAppointRoleParticipantStrategy
createSubmitDeptPathAppointRoleParticipantStrategy
(){
return
new
SubmitDeptPathAppointRoleParticipantStrategy
();
}
@Bean
(
"com.beecode.inz.workflow.participant.SubmiterSubsidiaryRoleParticipantStrategy"
)
public
SubmiterSubsidiaryRoleParticipantStrategy
createSubmiterSubsidiaryRoleParticipantStrategy
(){
return
new
SubmiterSubsidiaryRoleParticipantStrategy
();
}
@Bean
(
"com.beecode.inz.workflow.participant.SubmitOrgPathAppointRoleParticipantStrategy"
)
public
SubmitOrgPathAppointRoleParticipantStrategy
createSubmitOrgPathAppointRoleParticipantStrategy
(){
return
new
SubmitOrgPathAppointRoleParticipantStrategy
();
}
@Bean
(
"com.beecode.inz.workflow.participant.FollowerMemberPicParticipantStrategy"
)
public
FollowerMemberPicParticipantStrategy
createFollowerMemberPic
(){
...
...
@@ -124,4 +135,9 @@ public class BeanConfiguration {
return
new
DiscardScene
();
}
@Bean
(
"com.beecode.inz.workflow.listener.CommonWorkflowBillProcessEventListener"
)
public
CommonWorkflowBillProcessEventListener
commonWorkflowBillProcessEventListener
()
{
return
new
CommonWorkflowBillProcessEventListener
();
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/dao/ApprovalCopyDao.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
dao
;
import
java.util.UUID
;
import
com.beecode.inz.workflow.entity.ApprovalCopyEntity
;
public
interface
ApprovalCopyDao
{
void
addApprovalCopy
(
ApprovalCopyEntity
approvalCopyEntity
);
ApprovalCopyEntity
getApprovalCopyByprocessInstanceId
(
UUID
processInstanceId
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/dao/SubmitApprovalSuggestionDao.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
dao
;
import
java.util.UUID
;
import
com.beecode.inz.workflow.entity.SubmitApprovalSuggestionEntity
;
public
interface
SubmitApprovalSuggestionDao
{
void
addSubmitApprovalSuggestionEntity
(
SubmitApprovalSuggestionEntity
submitApprovalSuggestionEntity
);
SubmitApprovalSuggestionEntity
getSubmitApprovalSuggestionByprocessInstanceId
(
UUID
processInstanceId
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/dao/TranspondApprovalStaffDao.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
dao
;
import
java.util.List
;
import
java.util.UUID
;
import
com.beecode.inz.workflow.entity.TranspondApprovalStaffEntity
;
public
interface
TranspondApprovalStaffDao
{
void
addTranspondApprovalStaffEntity
(
TranspondApprovalStaffEntity
transpondApprovalStaffEntity
);
List
<
TranspondApprovalStaffEntity
>
getTranspondApprovalStaffByprocessInstanceId
(
UUID
processInstanceId
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/dao/TranspondApprovalSuggestionDao.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
dao
;
import
java.util.List
;
import
java.util.UUID
;
import
com.beecode.inz.workflow.entity.TranspondApprovalSuggestionEntity
;
public
interface
TranspondApprovalSuggestionDao
{
void
addTranspondApprovalSuggestionEntity
(
TranspondApprovalSuggestionEntity
transpondApprovalSuggestionEntity
);
List
<
TranspondApprovalSuggestionEntity
>
getTranspondApprovalSuggestionByprocessInstanceId
(
UUID
processInstanceId
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/entity/ApprovalCopyEntity.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
entity
;
import
java.util.UUID
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
org.hibernate.annotations.GenericGenerator
;
@Entity
@Table
(
name
=
"kids_approval_copy"
)
public
class
ApprovalCopyEntity
{
@Id
@GenericGenerator
(
name
=
"system-uuid"
,
strategy
=
"uuid2"
)
@GeneratedValue
(
generator
=
"system-uuid"
)
@Column
(
name
=
"id"
,
nullable
=
false
,
length
=
16
)
private
UUID
id
;
@Column
(
name
=
"process_instance_id"
,
nullable
=
false
,
length
=
16
)
private
UUID
processInstanceId
;
@Column
(
name
=
"staff_json"
,
nullable
=
false
,
length
=
1024
)
private
String
staffJson
;
public
UUID
getId
()
{
return
id
;
}
public
void
setId
(
UUID
id
)
{
this
.
id
=
id
;
}
public
UUID
getProcessInstanceId
()
{
return
processInstanceId
;
}
public
void
setProcessInstanceId
(
UUID
processInstanceId
)
{
this
.
processInstanceId
=
processInstanceId
;
}
public
String
getStaffJson
()
{
return
staffJson
;
}
public
void
setStaffJson
(
String
staffJson
)
{
this
.
staffJson
=
staffJson
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/entity/ApprovedRecord.java
View file @
ef3b44a9
...
...
@@ -11,6 +11,7 @@ public class ApprovedRecord extends ApprovalRecord{
private
UserAssignment
approvalUser
;
private
Date
finishTime
;
private
String
suggestions
;
private
String
attribute1
;
public
String
getApprovalAction
()
{
return
approvalAction
;
...
...
@@ -36,7 +37,10 @@ public class ApprovedRecord extends ApprovalRecord{
public
void
setFinishTime
(
Date
finishTime
)
{
this
.
finishTime
=
finishTime
;
}
public
String
getAttribute1
()
{
return
attribute1
;
}
public
void
setAttribute1
(
String
attribute1
)
{
this
.
attribute1
=
attribute1
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/entity/InzApprovalTask.java
View file @
ef3b44a9
...
...
@@ -6,9 +6,12 @@ import com.beecode.bcp.type.KObject;
public
class
InzApprovalTask
extends
CommonTask
{
public
static
final
String
ATTR_BIZOBJECTNAME
=
"bizObjectName"
;
public
static
final
String
ATTR_ATTRIBUTE1
=
"attribute1"
;
private
String
bizObjectName
;
private
String
attribute1
;
private
InzBizProcess
bizProcess
;
private
boolean
canApprove
=
false
;
...
...
@@ -28,6 +31,7 @@ public class InzApprovalTask extends CommonTask {
super
(
kObject
);
this
.
bizProcess
=
new
InzBizProcess
(
kObject
.
get
(
ATTR_BIZPROCESS
));
this
.
bizObjectName
=
kObject
.
getString
(
ATTR_BIZOBJECTNAME
);
this
.
attribute1
=
kObject
.
getString
(
ATTR_ATTRIBUTE1
);
if
(
null
!=
kObject
.
get
(
PARENT
)
&&
!
kObject
.
get
(
PARENT
).
isNull
())
{
this
.
parent
=
new
InzApprovalTask
(
kObject
.
get
(
PARENT
));
}
...
...
@@ -41,6 +45,10 @@ public class InzApprovalTask extends CommonTask {
return
bizObjectName
;
}
public
String
getAttribute1
()
{
return
attribute1
;
}
public
InzBizProcess
getBizProcess
()
{
return
bizProcess
;
}
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/entity/InzBizProcess.java
View file @
ef3b44a9
...
...
@@ -20,12 +20,15 @@ public class InzBizProcess extends BizProcess{
TriggerAction
action
=
config
.
getTriggerCondition
().
findTriggerActionByName
(
kObject
.
getString
(
ATTR_TRIGGERACTION
));
this
.
bizObjectName
=
this
.
toKObject
().
getString
(
ATTR_BIZOBJECTNAME
);
this
.
bizAffiliationName
=
this
.
toKObject
().
getString
(
ATTR_BIZAFFILIATIONNAME
);
this
.
triggerActionTitle
=
action
.
getTitle
();
}
public
static
final
String
ATTR_BIZOBJECTNAME
=
"bizObjectName"
;
public
static
final
String
ATTR_BIZAFFILIATIONNAME
=
"bizAffiliationName"
;
public
static
final
String
ATTR_TRIGGERACTION
=
"triggerAction"
;
private
String
bizTypeTitle
;
private
String
bizObjectName
;
private
String
bizAffiliationName
;
private
String
triggerActionTitle
;
public
void
setKClass
(
KClass
kClass
){
...
...
@@ -43,6 +46,8 @@ public class InzBizProcess extends BizProcess{
public
String
getTriggerActionTitle
()
{
return
triggerActionTitle
;
}
public
String
getBizAffiliationName
()
{
return
bizAffiliationName
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/entity/SubmitApprovalSuggestionEntity.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
entity
;
import
java.util.UUID
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
org.hibernate.annotations.GenericGenerator
;
@Entity
@Table
(
name
=
"kids_submit_approval_suggestion"
)
public
class
SubmitApprovalSuggestionEntity
{
@Id
@GenericGenerator
(
name
=
"system-uuid"
,
strategy
=
"uuid2"
)
@GeneratedValue
(
generator
=
"system-uuid"
)
@Column
(
name
=
"id"
,
nullable
=
false
,
length
=
16
)
private
UUID
id
;
@Column
(
name
=
"process_instance_id"
,
nullable
=
false
,
length
=
16
)
private
UUID
processInstanceId
;
@Column
(
name
=
"suggestion"
,
nullable
=
false
,
length
=
500
)
private
String
suggestion
;
public
UUID
getId
()
{
return
id
;
}
public
void
setId
(
UUID
id
)
{
this
.
id
=
id
;
}
public
UUID
getProcessInstanceId
()
{
return
processInstanceId
;
}
public
void
setProcessInstanceId
(
UUID
processInstanceId
)
{
this
.
processInstanceId
=
processInstanceId
;
}
public
String
getSuggestion
()
{
return
suggestion
;
}
public
void
setSuggestion
(
String
suggestion
)
{
this
.
suggestion
=
suggestion
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/entity/TranspondApprovalStaffEntity.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
entity
;
import
java.util.Date
;
import
java.util.UUID
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.EnumType
;
import
javax.persistence.Enumerated
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
org.hibernate.annotations.GenericGenerator
;
@Entity
@Table
(
name
=
"kids_transpond_approval_staff"
)
public
class
TranspondApprovalStaffEntity
{
public
enum
operationType
{
copy
,
transpond
;
};
@Id
@GenericGenerator
(
name
=
"system-uuid"
,
strategy
=
"uuid2"
)
@GeneratedValue
(
generator
=
"system-uuid"
)
@Column
(
name
=
"id"
,
nullable
=
false
,
length
=
16
)
private
UUID
id
;
@Column
(
name
=
"process_instance_id"
,
nullable
=
false
,
length
=
16
)
private
UUID
processInstanceId
;
@Column
(
name
=
"staff_json"
,
nullable
=
false
,
length
=
500
)
private
String
staffJson
;
@Column
(
name
=
"submit_id"
,
nullable
=
false
,
length
=
16
)
private
UUID
submitId
;
@Column
(
name
=
"finish_time"
,
nullable
=
false
)
private
Date
finishTime
;
@Column
(
name
=
"operation"
,
nullable
=
false
,
length
=
20
)
@Enumerated
(
EnumType
.
STRING
)
private
operationType
operation
;
@Column
(
name
=
"suggestion"
,
length
=
500
)
private
String
suggestion
;
public
UUID
getId
()
{
return
id
;
}
public
void
setId
(
UUID
id
)
{
this
.
id
=
id
;
}
public
UUID
getProcessInstanceId
()
{
return
processInstanceId
;
}
public
void
setProcessInstanceId
(
UUID
processInstanceId
)
{
this
.
processInstanceId
=
processInstanceId
;
}
public
String
getStaffJson
()
{
return
staffJson
;
}
public
void
setStaffJson
(
String
staffJson
)
{
this
.
staffJson
=
staffJson
;
}
public
UUID
getSubmitId
()
{
return
submitId
;
}
public
void
setSubmitId
(
UUID
submitId
)
{
this
.
submitId
=
submitId
;
}
public
Date
getFinishTime
()
{
return
finishTime
;
}
public
void
setFinishTime
(
Date
finishTime
)
{
this
.
finishTime
=
finishTime
;
}
public
operationType
getOperation
()
{
return
operation
;
}
public
void
setOperation
(
operationType
operation
)
{
this
.
operation
=
operation
;
}
public
String
getSuggestion
()
{
return
suggestion
;
}
public
void
setSuggestion
(
String
suggestion
)
{
this
.
suggestion
=
suggestion
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/entity/TranspondApprovalSuggestionEntity.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
entity
;
import
java.util.Date
;
import
java.util.UUID
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.EnumType
;
import
javax.persistence.Enumerated
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
org.hibernate.annotations.GenericGenerator
;
@Entity
@Table
(
name
=
"kids_transpond_approval_suggestion"
)
public
class
TranspondApprovalSuggestionEntity
{
public
enum
operationType
{
copy
,
transpond
,
receive
;
};
@Id
@GenericGenerator
(
name
=
"system-uuid"
,
strategy
=
"uuid2"
)
@GeneratedValue
(
generator
=
"system-uuid"
)
@Column
(
name
=
"id"
,
nullable
=
false
,
length
=
16
)
private
UUID
id
;
@Column
(
name
=
"process_instance_id"
,
nullable
=
false
,
length
=
16
)
private
UUID
processInstanceId
;
@Column
(
name
=
"suggestion"
,
length
=
500
)
private
String
suggestion
;
@Column
(
name
=
"submit_id"
,
nullable
=
false
,
length
=
16
)
private
UUID
submitId
;
@Column
(
name
=
"finish_time"
,
nullable
=
false
)
private
Date
finishTime
;
@Column
(
name
=
"operation"
,
nullable
=
false
,
length
=
20
)
@Enumerated
(
EnumType
.
STRING
)
private
operationType
operation
;
public
UUID
getId
()
{
return
id
;
}
public
void
setId
(
UUID
id
)
{
this
.
id
=
id
;
}
public
UUID
getProcessInstanceId
()
{
return
processInstanceId
;
}
public
void
setProcessInstanceId
(
UUID
processInstanceId
)
{
this
.
processInstanceId
=
processInstanceId
;
}
public
String
getSuggestion
()
{
return
suggestion
;
}
public
void
setSuggestion
(
String
suggestion
)
{
this
.
suggestion
=
suggestion
;
}
public
UUID
getSubmitId
()
{
return
submitId
;
}
public
void
setSubmitId
(
UUID
submitId
)
{
this
.
submitId
=
submitId
;
}
public
Date
getFinishTime
()
{
return
finishTime
;
}
public
void
setFinishTime
(
Date
finishTime
)
{
this
.
finishTime
=
finishTime
;
}
public
operationType
getOperation
()
{
return
operation
;
}
public
void
setOperation
(
operationType
operation
)
{
this
.
operation
=
operation
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/dao/ApprovalCopyDaoImpl.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
dao
;
import
java.util.List
;
import
java.util.UUID
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.orm.hibernate5.HibernateOperations
;
import
org.springframework.stereotype.Repository
;
import
com.beecode.inz.workflow.dao.ApprovalCopyDao
;
import
com.beecode.inz.workflow.entity.ApprovalCopyEntity
;
@Repository
public
class
ApprovalCopyDaoImpl
implements
ApprovalCopyDao
{
@Autowired
private
HibernateOperations
template
;
@Override
public
void
addApprovalCopy
(
ApprovalCopyEntity
approvalCopyEntity
)
{
template
.
save
(
approvalCopyEntity
);
}
@Override
public
ApprovalCopyEntity
getApprovalCopyByprocessInstanceId
(
UUID
processInstanceId
)
{
return
template
.
execute
(
session
->{
String
hql
=
" from ApprovalCopyEntity ac where ac.processInstanceId = :processInstanceId"
;
List
<
ApprovalCopyEntity
>
result
=
session
.
createQuery
(
hql
,
ApprovalCopyEntity
.
class
)
.
setParameter
(
"processInstanceId"
,
processInstanceId
).
getResultList
();
if
(
null
==
result
||
result
.
size
()
==
0
){
return
null
;
}
return
result
.
get
(
0
);
});
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/dao/CommonDaoImpl.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
dao
;
import
java.util.List
;
import
java.util.UUID
;
import
org.hibernate.HibernateException
;
...
...
@@ -32,8 +33,11 @@ public class CommonDaoImpl implements CommonDao{
public
KObject
doInHibernate
(
Session
session
)
throws
HibernateException
{
Query
<
KObject
>
queyr
=
session
.
createQuery
(
" from "
+
kClass
+
" where id=:id"
,
KObject
.
class
);
queyr
.
setParameter
(
"id"
,
id
);
KObject
obj
=
queyr
.
getSingleResult
();
return
obj
;
List
<
KObject
>
objs
=
queyr
.
getResultList
();
if
(
objs
.
size
()<=
0
){
return
null
;
}
return
objs
.
get
(
0
);
}
});
}
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/dao/InzApprovalTaskDaoImpl.java
View file @
ef3b44a9
...
...
@@ -162,6 +162,7 @@ public class InzApprovalTaskDaoImpl implements InzApprovalTaskDao{
}
@Override
public
List
<
InzApprovalTask
>
getApprovalTasksByPend
(
UUID
actorId
)
{
return
template
.
execute
(
new
HibernateCallback
<
List
<
InzApprovalTask
>>()
{
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/dao/SubmitApprovalSuggestionDaoImpl.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
dao
;
import
java.util.List
;
import
java.util.UUID
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.orm.hibernate5.HibernateOperations
;
import
org.springframework.stereotype.Repository
;
import
com.beecode.inz.workflow.dao.SubmitApprovalSuggestionDao
;
import
com.beecode.inz.workflow.entity.SubmitApprovalSuggestionEntity
;
@Repository
public
class
SubmitApprovalSuggestionDaoImpl
implements
SubmitApprovalSuggestionDao
{
@Autowired
private
HibernateOperations
template
;
@Override
public
void
addSubmitApprovalSuggestionEntity
(
SubmitApprovalSuggestionEntity
submitApprovalSuggestionEntity
)
{
template
.
save
(
submitApprovalSuggestionEntity
);
}
@Override
public
SubmitApprovalSuggestionEntity
getSubmitApprovalSuggestionByprocessInstanceId
(
UUID
processInstanceId
)
{
return
template
.
execute
(
session
->{
String
hql
=
" from SubmitApprovalSuggestionEntity ac where ac.processInstanceId = :processInstanceId"
;
List
<
SubmitApprovalSuggestionEntity
>
result
=
session
.
createQuery
(
hql
,
SubmitApprovalSuggestionEntity
.
class
)
.
setParameter
(
"processInstanceId"
,
processInstanceId
).
getResultList
();
if
(
null
==
result
||
result
.
size
()
==
0
){
return
null
;
}
return
result
.
get
(
0
);
});
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/dao/TranspondApprovalStaffDaoImpl.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
dao
;
import
java.util.List
;
import
java.util.UUID
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.orm.hibernate5.HibernateOperations
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.beecode.inz.workflow.dao.TranspondApprovalStaffDao
;
import
com.beecode.inz.workflow.entity.TranspondApprovalStaffEntity
;
@Repository
public
class
TranspondApprovalStaffDaoImpl
implements
TranspondApprovalStaffDao
{
@Autowired
private
HibernateOperations
template
;
@Override
@Transactional
public
void
addTranspondApprovalStaffEntity
(
TranspondApprovalStaffEntity
transpondApprovalStaffEntity
)
{
template
.
save
(
transpondApprovalStaffEntity
);
}
@Override
public
List
<
TranspondApprovalStaffEntity
>
getTranspondApprovalStaffByprocessInstanceId
(
UUID
processInstanceId
)
{
return
template
.
execute
(
session
->{
String
hql
=
" from TranspondApprovalStaffEntity ac where ac.processInstanceId = :processInstanceId"
;
List
<
TranspondApprovalStaffEntity
>
result
=
session
.
createQuery
(
hql
,
TranspondApprovalStaffEntity
.
class
)
.
setParameter
(
"processInstanceId"
,
processInstanceId
).
getResultList
();
return
result
;
});
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/dao/TranspondApprovalSuggestionDaoImpl.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
dao
;
import
java.util.List
;
import
java.util.UUID
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.orm.hibernate5.HibernateOperations
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.beecode.inz.workflow.dao.TranspondApprovalSuggestionDao
;
import
com.beecode.inz.workflow.entity.TranspondApprovalSuggestionEntity
;
@Repository
public
class
TranspondApprovalSuggestionDaoImpl
implements
TranspondApprovalSuggestionDao
{
@Autowired
private
HibernateOperations
template
;
@Override
@Transactional
public
void
addTranspondApprovalSuggestionEntity
(
TranspondApprovalSuggestionEntity
transpondApprovalSuggestionEntity
)
{
template
.
save
(
transpondApprovalSuggestionEntity
);
}
@Override
public
List
<
TranspondApprovalSuggestionEntity
>
getTranspondApprovalSuggestionByprocessInstanceId
(
UUID
processInstanceId
)
{
return
template
.
execute
(
session
->{
String
hql
=
" from TranspondApprovalSuggestionEntity ac where ac.processInstanceId = :processInstanceId"
;
List
<
TranspondApprovalSuggestionEntity
>
result
=
session
.
createQuery
(
hql
,
TranspondApprovalSuggestionEntity
.
class
)
.
setParameter
(
"processInstanceId"
,
processInstanceId
).
getResultList
();
return
result
;
});
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/listener/BizProcessEventListenerImpl.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
listener
;
import
java.time.Instant
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.Assert
;
import
com.beecode.amino.core.Amino
;
import
com.beecode.bap.bill.BillConstants.BillStates
;
import
com.beecode.bap.bill.BillConstants.MasterAttributes
;
import
com.beecode.bap.bill.WorkflowBillConstants.FlowAttributes
;
import
com.beecode.bap.workflow.core.BizProcessState
;
import
com.beecode.bap.workflow.listener.BizProcessEvent
;
import
com.beecode.bap.workflow.listener.BizProcessEventListener
;
import
com.beecode.bcp.type.KClass
;
...
...
@@ -52,10 +58,25 @@ public class BizProcessEventListenerImpl implements BizProcessEventListener{
String
bizTypeName
=
process
.
getBizTypeName
();
WorkflowConfigurationDefinition
config
=
bizTypeWorkflowConfigurationService
.
getBizTypeWorkflowConfigurationByBizTypeName
(
bizTypeName
);
Assert
.
notNull
(
config
,
"param 'config' must not be null"
);
process
.
setKClass
(
Amino
.
getApplicationMetadataContext
().
getBean
(
config
.
getBizTypeInfo
().
getkClassName
(),
KClass
.
class
));
KClass
clz
=
Amino
.
getApplicationMetadataContext
().
getBean
(
config
.
getBizTypeInfo
().
getkClassName
(),
KClass
.
class
);
process
.
setKClass
(
clz
);
KObject
bizDataObj
=
commonDao
.
load
(
config
.
getBizTypeInfo
().
getkClassName
(),
process
.
getBizDataId
());
if
(
clz
.
hasAttribute
(
InzWorkflowBiztrait
.
ATTR_APPROVESTATE
))
{
bizDataObj
.
set
(
InzWorkflowBiztrait
.
ATTR_APPROVESTATE
,
process
.
getWorkflowState
());
commonDao
.
update
(
bizDataObj
);
}
if
(
clz
.
hasAttribute
(
FlowAttributes
.
ATTR_FLOW_STAE
))
{
bizDataObj
.
set
(
FlowAttributes
.
ATTR_FLOW_STAE
,
process
.
getWorkflowState
());
if
(
process
.
getWorkflowState
()
==
BizProcessState
.
DONE_WITH_AGREE
.
getValue
())
{
bizDataObj
.
set
(
MasterAttributes
.
ATTR_BILL_STATE
,
BillStates
.
SUCCESS
);
}
else
if
(
process
.
getWorkflowState
()
==
BizProcessState
.
DONE_WITH_REJECT
.
getValue
())
{
bizDataObj
.
set
(
MasterAttributes
.
ATTR_BILL_STATE
,
BillStates
.
REJECTED
);
}
commonDao
.
update
(
bizDataObj
);
}
if
(
clz
.
hasAttribute
(
FlowAttributes
.
ATTR_FLOW_FINISH_TIME
))
{
bizDataObj
.
set
(
FlowAttributes
.
ATTR_FLOW_FINISH_TIME
,
Instant
.
now
());
}
process
.
setBizDataObject
(
bizDataObj
);
if
(
null
==
config
.
getProcessConfiguration
()){
return
;
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/metadata/BizTypeWorkflowConfigurationDefinitionMech.java
View file @
ef3b44a9
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/scene/FinishedProcess.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
scene
;
import
javax.persistence.criteria.CriteriaBuilder
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.beecode.bap.staff.BapContext
;
import
com.beecode.bap.workflow.core.BizProcessState
;
import
com.beecode.inz.query.scene.SceneExecuteContext
;
import
com.beecode.inz.query.scene.SceneExecutor
;
...
...
@@ -12,19 +7,19 @@ import com.beecode.inz.workflow.entity.InzBizProcess;
public
class
FinishedProcess
implements
SceneExecutor
{
@Autowired
private
BapContext
bapContext
;
//
@Autowired
//
private BapContext bapContext;
@Override
public
void
execute
(
SceneExecuteContext
context
)
{
CriteriaBuilder
builder
=
context
.
getCriteriaBuilder
();
// 为查询添加新条件
try
{
context
.
getCriteriaQuery
().
and
(
builder
.
equal
(
context
.
getRoot
().
get
(
InzBizProcess
.
ATTR_SUBMITTER
).
get
(
"id"
),
bapContext
.
getCurrentStaff
().
getUuid
(
"id"
)));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
new
RuntimeException
(
e
);
}
//
CriteriaBuilder builder = context.getCriteriaBuilder();
//
// 为查询添加新条件
//
try {
//
context.getCriteriaQuery().and(builder.equal(context.getRoot().get(InzBizProcess.ATTR_SUBMITTER).get("id"), bapContext.getCurrentStaff().getUuid("id")));
//
} catch (Exception e) {
//
e.printStackTrace();
//
throw new RuntimeException(e);
//
}
context
.
getCriteriaQuery
().
and
(
context
.
getRoot
().
get
(
InzBizProcess
.
ATTR_WORKFLOWSTATE
).
in
(
BizProcessState
.
DONE_WITH_AGREE
.
getValue
(),
BizProcessState
.
DONE_WITH_REJECT
.
getValue
()));
}
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/scene/ToDoTask.java
View file @
ef3b44a9
...
...
@@ -47,8 +47,10 @@ public class ToDoTask implements SceneExecutor{
Predicate
p1
=
context
.
getCriteriaBuilder
().
equal
(
context
.
getRoot
().
get
(
"id"
),
subRoot
.
get
(
"task"
).
get
(
"id"
));
UUID
staffId
=
null
;
UUID
userId
=
null
;
try
{
staffId
=
bapContext
.
getCurrentStaff
().
getUuid
(
"id"
);
userId
=
bapContext
.
getCurrentUser
().
getId
();
}
catch
(
AttributeNotFoundException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
...
...
@@ -62,6 +64,9 @@ public class ToDoTask implements SceneExecutor{
if
(
null
==
staffId
){
throw
new
RuntimeException
(
"获取当前登录职员失败"
);
}
if
(
null
==
userId
){
throw
new
RuntimeException
(
"获取当前登录用户失败"
);
}
Predicate
p2
=
context
.
getCriteriaBuilder
().
equal
(
subRoot
.
get
(
User
.
ACTOR_ID
),
staffId
);
subQuery
.
where
(
context
.
getCriteriaBuilder
().
and
(
p1
,
p2
));
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/scene/UnderwayProcess.java
View file @
ef3b44a9
...
...
@@ -2,9 +2,6 @@ package com.beecode.inz.workflow.internal.scene;
import
javax.persistence.criteria.CriteriaBuilder
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.beecode.bap.staff.BapContext
;
import
com.beecode.bap.workflow.core.BizProcessState
;
import
com.beecode.inz.query.scene.SceneExecuteContext
;
import
com.beecode.inz.query.scene.SceneExecutor
;
...
...
@@ -12,19 +9,19 @@ import com.beecode.inz.workflow.entity.InzBizProcess;
public
class
UnderwayProcess
implements
SceneExecutor
{
@Autowired
private
BapContext
bapContext
;
//
@Autowired
//
private BapContext bapContext;
@Override
public
void
execute
(
SceneExecuteContext
context
)
{
CriteriaBuilder
builder
=
context
.
getCriteriaBuilder
();
// 为查询添加新条件
try
{
context
.
getCriteriaQuery
().
and
(
builder
.
equal
(
context
.
getRoot
().
get
(
InzBizProcess
.
ATTR_SUBMITTER
).
get
(
"id"
),
bapContext
.
getCurrentStaff
().
getUuid
(
"id"
)));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
new
RuntimeException
(
e
);
}
//
// 为查询添加新条件
//
try {
//
context.getCriteriaQuery().and(builder.equal(context.getRoot().get(InzBizProcess.ATTR_SUBMITTER).get("id"), bapContext.getCurrentStaff().getUuid("id")));
//
} catch (Exception e) {
//
e.printStackTrace();
//
throw new RuntimeException(e);
//
}
context
.
getCriteriaQuery
().
and
(
builder
.
equal
(
context
.
getRoot
().
get
(
InzBizProcess
.
ATTR_WORKFLOWSTATE
),
BizProcessState
.
IN_PROCESS
.
getValue
()));
}
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/ApprovalCopyServiceImpl.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
service
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.UUID
;
import
org.json.JSONArray
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.beecode.bap.staff.BapContext
;
import
com.beecode.bap.staff.service.StaffService
;
import
com.beecode.bcp.task.oa.dao.OaMessageDao
;
import
com.beecode.bcp.task.oa.entity.OaMessageEntity
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.inz.workflow.dao.ApprovalCopyDao
;
import
com.beecode.inz.workflow.dao.TranspondApprovalSuggestionDao
;
import
com.beecode.inz.workflow.entity.ApprovalCopyEntity
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.entity.TranspondApprovalSuggestionEntity
;
import
com.beecode.inz.workflow.service.ApprovalCopyService
;
import
com.beecode.inz.workflow.service.InzBizProcessService
;
@Service
public
class
ApprovalCopyServiceImpl
implements
ApprovalCopyService
{
@Autowired
private
StaffService
staffService
;
@Autowired
private
OaMessageDao
oaMessageDao
;
@Autowired
private
BapContext
bapContext
;
@Autowired
private
InzBizProcessService
inzBizProcessService
;
@Autowired
private
ApprovalCopyDao
approvalCopyDao
;
@Autowired
private
TranspondApprovalSuggestionDao
transpondApprovalSuggestionDao
;
@Override
@Transactional
public
void
approvalCopy
(
UUID
bizProcessId
,
String
actors
)
{
InzBizProcess
inzBizProcess
=
inzBizProcessService
.
getBizProcessById
(
bizProcessId
);
ApprovalCopyEntity
approvalCopyEntity
=
new
ApprovalCopyEntity
();
approvalCopyEntity
.
setProcessInstanceId
(
inzBizProcess
.
getProcessInstance
().
getId
());
approvalCopyEntity
.
setStaffJson
(
actors
);
approvalCopyDao
.
addApprovalCopy
(
approvalCopyEntity
);
}
@Override
@Transactional
public
void
completedApprovalCopy
(
UUID
processInstanceId
,
String
suggestion
)
{
UUID
actorId
=
null
;
try
{
actorId
=
bapContext
.
getCurrentStaff
().
getUuid
(
"id"
);
}
catch
(
Exception
e1
)
{
// TODO Auto-generated catch block
e1
.
printStackTrace
();
}
TranspondApprovalSuggestionEntity
transpondApprovalSuggestionEntity
=
new
TranspondApprovalSuggestionEntity
();
transpondApprovalSuggestionEntity
.
setFinishTime
(
new
Date
());
transpondApprovalSuggestionEntity
.
setOperation
(
TranspondApprovalSuggestionEntity
.
operationType
.
receive
);
transpondApprovalSuggestionEntity
.
setSubmitId
(
actorId
);
if
(
suggestion
!=
null
){
transpondApprovalSuggestionEntity
.
setSuggestion
(
suggestion
);
}
transpondApprovalSuggestionEntity
.
setProcessInstanceId
(
processInstanceId
);
transpondApprovalSuggestionDao
.
addTranspondApprovalSuggestionEntity
(
transpondApprovalSuggestionEntity
);
KObject
staff
=
staffService
.
getById
(
actorId
);
String
flowId
=
processInstanceId
.
toString
();
String
userId
=
staff
.
get
(
"user"
).
getString
(
"username"
);
OaMessageEntity
oaMessageEntity
=
oaMessageDao
.
getOaMessageByFlowMessAndByFlowIdAndUserId
(
1
,
flowId
,
userId
);
if
(
oaMessageEntity
!=
null
){
OaMessageEntity
oaMessageEntity1
=
new
OaMessageEntity
();
BeanUtils
.
copyProperties
(
oaMessageEntity
,
oaMessageEntity1
);
oaMessageEntity1
.
setPtpUrl
(
oaMessageEntity
.
getPtpUrl
()+
"&show=false"
);
oaMessageEntity1
.
setMessageId
(
null
);
oaMessageEntity1
.
setFlowMess
(
2
);
oaMessageEntity1
.
setStatus
(
0
);
oaMessageEntity1
.
setOperateTime
(
new
Date
());
// oaMessageEntity.setFlowMess(2);
// oaMessageEntity.setOperateTime(new Date());
// oaMessageDao.updateOaMessage(oaMessageEntity);
oaMessageDao
.
addOaMessage
(
oaMessageEntity1
);
}
}
@Override
public
ApprovalCopyEntity
getApprovalCopyByprocessInstanceId
(
UUID
processInstanceId
)
{
return
approvalCopyDao
.
getApprovalCopyByprocessInstanceId
(
processInstanceId
);
}
@Override
@Transactional
public
void
addApprovalCopy
(
ApprovalCopyEntity
approvalCopyEntity
)
{
approvalCopyDao
.
addApprovalCopy
(
approvalCopyEntity
);
}
@Override
public
List
<
KObject
>
getApprovalCopyStaffByprocessInstanceId
(
UUID
processInstanceId
)
{
List
<
KObject
>
kObjects
=
new
ArrayList
<>();
ApprovalCopyEntity
approvalCopyEntity
=
approvalCopyDao
.
getApprovalCopyByprocessInstanceId
(
processInstanceId
);
if
(
approvalCopyEntity
!=
null
){
JSONArray
jsonArray
=
new
JSONArray
(
approvalCopyEntity
.
getStaffJson
());
for
(
int
i
=
0
;
i
<
jsonArray
.
length
();
i
++){
UUID
actorId
=
UUID
.
fromString
(
jsonArray
.
getString
(
i
));
KObject
staff
=
staffService
.
getById
(
actorId
);
kObjects
.
add
(
staff
);
}
}
return
kObjects
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/ApprovalNodeServiceImpl.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
service
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
import
javax.script.Bindings
;
import
javax.script.ScriptEngine
;
import
javax.script.ScriptEngineManager
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
org.mvel2.MVEL
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.Assert
;
import
com.beecode.amino.common.Convert
;
import
com.beecode.amino.core.Amino
;
import
com.beecode.bap.bill.BillService
;
import
com.beecode.bap.bill.HandlerService
;
import
com.beecode.bap.bill.data.BillData
;
import
com.beecode.bap.bill.define.BillDefine
;
import
com.beecode.bap.bill.json.BillDataJsonSerializer
;
import
com.beecode.bap.staff.service.StaffService
;
import
com.beecode.bap.workflow.core.BizProcess
;
import
com.beecode.bap.workflow.core.BizProcessState
;
import
com.beecode.bap.workflow.service.BizProcessService
;
import
com.beecode.bcp.participant.core.Participant
;
import
com.beecode.bcp.participant.core.ParticipantStrategy
;
import
com.beecode.bcp.participant.core.ParticipantStrategyDefinition
;
import
com.beecode.bcp.task.assignment.Actor
;
import
com.beecode.bcp.task.core.Task
;
import
com.beecode.bcp.task.core.TaskState
;
import
com.beecode.bcp.type.KClass
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.bcp.type.json.JSONObjectUtils
;
import
com.beecode.bcp.workflow.core.ProcessInstance
;
import
com.beecode.bcp.workflow.define.Workflow
;
import
com.beecode.bcp.workflow.define.WorkflowConstants
;
import
com.beecode.bcp.workflow.define.bpmn.BPMNDefinition
;
import
com.beecode.bcp.workflow.define.bpmn.Node
;
import
com.beecode.bcp.workflow.define.bpmn.NodeType
;
import
com.beecode.bcp.workflow.define.bpmn.SequenceFlow
;
import
com.beecode.bcp.workflow.define.bpmn.TaskNode
;
import
com.beecode.bcp.workflow.define.bpmn.WorkflowProcess
;
import
com.beecode.bcp.workflow.define.bpmn.ext.Arguments
;
import
com.beecode.bcp.workflow.define.bpmn.ext.Participation
;
import
com.beecode.bcp.workflow.define.bpmn.ext.UserTaskNode
;
import
com.beecode.bcp.workflow.internal.define.jbmp.ScriptTaskNodeImpl
;
import
com.beecode.bcp.workflow.service.WorkflowStorageService
;
import
com.beecode.inz.workflow.config.TriggerAction
;
import
com.beecode.inz.workflow.config.WorkflowConfigurationDefinition
;
import
com.beecode.inz.workflow.core.InzWorkflowDefinitionStateEnum
;
import
com.beecode.inz.workflow.entity.InzApprovalTask
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.entity.InzWorkflowDefinition
;
import
com.beecode.inz.workflow.entity.UserAssignment
;
import
com.beecode.inz.workflow.pojo.ApprovalNodesObj
;
import
com.beecode.inz.workflow.service.ApprovalNodeService
;
import
com.beecode.inz.workflow.service.BizTypeWorkflowConfigurationService
;
import
com.beecode.inz.workflow.service.InzApprovalTaskService
;
import
com.beecode.inz.workflow.service.InzWorkflowDefinitionService
;
import
com.fasterxml.jackson.databind.JsonNode
;
@Service
public
class
ApprovalNodeServiceImpl
implements
ApprovalNodeService
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ApprovalNodeServiceImpl
.
class
);
@Autowired
private
InzApprovalTaskService
inzApprovalTaskService
;
@Autowired
private
BizTypeWorkflowConfigurationService
bizTypeWorkflowConfigurationService
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
InzWorkflowDefinitionService
inzWorkflowDefinitionService
;
@Autowired
private
WorkflowStorageService
workflowStorageService
;
@Autowired
private
BizProcessService
bizProcessService
;
@Autowired
private
BillService
billService
;
@Autowired
private
HandlerService
handlerService
;
private
static
String
result_agree
=
"result==1"
;
private
static
String
result_n_sign
=
"length==0"
;
private
static
String
result_sign
=
"length>0"
;
private
static
String
script_end
=
"_idx>=n_"
;
private
static
String
n_equipCount
=
"equipCount==0"
;
private
static
String
equipCount
=
"equipCount>0"
;
private
static
String
equip
=
"equipCount"
;
@Autowired
@Qualifier
(
"com.beecode.bcp.workflow.datamodel.ProcessInstance"
)
public
KClass
processInstanceClass
;
private
ApplicationContext
getContext
()
{
return
Amino
.
getApplicationMetadataContext
();
}
@Override
public
List
<
ApprovalNodesObj
>
listApprovalNodeByInzBizProcess
(
InzBizProcess
inzBizProcess
,
String
storeJson
,
Boolean
isEquipment
)
{
UUID
processInstanceId
=
inzBizProcess
.
getProcessInstance
().
getId
();
List
<
ApprovalNodesObj
>
approvalNodesObjs
=
new
ArrayList
<>();
List
<
InzApprovalTask
>
allTask
=
new
ArrayList
<>();
allTask
.
addAll
(
inzApprovalTaskService
.
listApprovalTask
(
processInstanceId
));
allTask
=
inzApprovalTaskService
.
generateParenChildRelation
(
allTask
);
allTask
.
sort
(
new
Comparator
<
Task
>()
{
@Override
public
int
compare
(
Task
task1
,
Task
task2
)
{
return
task1
.
getStartTime
().
compareTo
(
task2
.
getStartTime
());
}
});
WorkflowConfigurationDefinition
config
=
bizTypeWorkflowConfigurationService
.
getBizTypeWorkflowConfigurationByBizTypeName
(
inzBizProcess
.
getBizTypeName
());
Assert
.
notNull
(
config
,
"param 'config' must not be null"
);
approvalNodesObjs
.
add
(
generateStartApprovalRecord
(
config
,
inzBizProcess
));
for
(
InzApprovalTask
inzApprovalTask
:
allTask
){
approvalNodesObjs
.
add
(
generateApprovalPendingRecord
(
inzApprovalTask
));
}
if
(
inzBizProcess
.
getWorkflowState
()
!=
BizProcessState
.
DONE_WITH_AGREE
.
getValue
()
&&
inzBizProcess
.
getWorkflowState
()
!=
BizProcessState
.
DONE_WITH_REJECT
.
getValue
()){
ProcessInstance
processInstance
=
inzBizProcess
.
getProcessInstance
();
WorkflowProcess
workflowProcess
=
processInstance
.
getWorkflow
().
getBpmnDefinition
().
getWorkflowProcess
();
pendAddSignInfo
(
approvalNodesObjs
,
workflowProcess
,
processInstance
);
String
parameters
=
processInstance
.
getParameters
();
JSONObject
parametersJson
=
new
JSONObject
(
parameters
);
parametersJson
.
put
(
"result"
,
1
);
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
processInstance
,
null
,
JSONObjectUtils
.
toMap
(
parametersJson
.
toString
()));
// getNodeInfo(workflowProcess,approvalNodesObjs,storeJson);
}
return
approvalNodesObjs
;
}
private
void
getNodeInfo
(
WorkflowProcess
workflowProcess
,
List
<
ApprovalNodesObj
>
approvalNodesObjs
,
String
storeJson
,
Boolean
isEquipment
){
String
nodeId
=
approvalNodesObjs
.
get
(
approvalNodesObjs
.
size
()-
1
).
getId
();
for
(
SequenceFlow
e
:
workflowProcess
.
getSequenceFlows
()){
if
(
e
.
getCondition
()
!=
null
&&
nodeId
.
equals
(
e
.
getSourceRef
())
&&
e
.
getCondition
().
contains
(
result_agree
)
&&
e
.
getCondition
().
contains
(
result_n_sign
)){
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)&&
getLoad
(
isEquipment
,
e
)){
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
e
.
getTargetRef
());
approvalNodesObj
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
Node
node
=
workflowProcess
.
findNode
(
e
.
getTargetRef
());
if
(
NodeType
.
TASK
==
node
.
getType
()){
TaskNode
taskNode
=
(
TaskNode
)
node
;
UserTaskNode
userTaskNode
=
(
UserTaskNode
)
taskNode
.
getExtensionNode
();
approvalNodesObj
.
setApprovalUsers
(
getParticipant
(
userTaskNode
.
getParticipations
(),
storeJson
,
null
));
}
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
normal
);
approvalNodesObjs
.
add
(
approvalNodesObj
);
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
isEquipment
);
break
;
}
}
else
if
(
e
.
getCondition
()
!=
null
&&
nodeId
.
equals
(
e
.
getSourceRef
())
&&
e
.
getCondition
().
equals
(
result_agree
)){
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)){
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
e
.
getTargetRef
());
approvalNodesObj
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
Node
node
=
workflowProcess
.
findNode
(
e
.
getTargetRef
());
if
(
NodeType
.
TASK
==
node
.
getType
()){
TaskNode
taskNode
=
(
TaskNode
)
node
;
UserTaskNode
userTaskNode
=
(
UserTaskNode
)
taskNode
.
getExtensionNode
();
approvalNodesObj
.
setApprovalUsers
(
getParticipant
(
userTaskNode
.
getParticipations
(),
storeJson
,
null
));
}
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
normal
);
approvalNodesObjs
.
add
(
approvalNodesObj
);
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
isEquipment
);
break
;
}
}
}
}
private
void
getNodeInfo
(
WorkflowProcess
workflowProcess
,
List
<
ApprovalNodesObj
>
approvalNodesObjs
,
String
storeJson
,
ProcessInstance
rejectProcessInstance
,
String
nodeId
,
Map
<
String
,
Object
>
params
){
if
(
nodeId
==
null
){
nodeId
=
approvalNodesObjs
.
get
(
approvalNodesObjs
.
size
()-
1
).
getId
();
}
String
nodeParam
=
null
;
if
(
nodeId
.
contains
(
"-"
)){
nodeParam
=
"n_"
+
String
.
valueOf
(
nodeId
).
replaceAll
(
"-"
,
"n"
)+
"_staffs"
;
}
else
{
nodeParam
=
"n_"
+
nodeId
+
"_staffs"
;
}
Object
nodeInfo_
=
rejectProcessInstance
.
getParameterValue
(
nodeParam
);
if
(
nodeInfo_
!=
null
&&
nodeInfo_
.
toString
().
equals
(
""
)){
nodeInfo_
=
null
;
}
Object
nodeInfo
=
nodeInfo_
;
for
(
SequenceFlow
e
:
workflowProcess
.
getSequenceFlows
()){
if
(
nodeInfo
!=
null
&&
e
.
getCondition
()
!=
null
&&
nodeId
.
equals
(
e
.
getSourceRef
())
&&
e
.
getCondition
().
contains
(
result_agree
)
&&
e
.
getCondition
().
contains
(
result_sign
)
){
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)){
JSONArray
jsonArray
=
new
JSONArray
(
nodeInfo
.
toString
());
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
e
.
getTargetRef
());
approvalNodesObj
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
boolean
repeatedly
=
false
;
for
(
int
i
=
0
;
i
<
jsonArray
.
length
();
i
++){
Object
actor
=
jsonArray
.
get
(
i
);
if
(
actor
instanceof
JSONArray
){
ApprovalNodesObj
approvalNodesObj_
=
new
ApprovalNodesObj
();
approvalNodesObj_
.
setId
(
e
.
getTargetRef
());
approvalNodesObj_
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj_
.
setApprovalResult
(-
1
);
List
<
UserAssignment
>
userAssignments_
=
new
ArrayList
<>();
JSONArray
jsonArray_
=
(
JSONArray
)
actor
;
jsonArray_
.
forEach
(
actorId
->{
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actorId
.
toString
())));
userAssignments_
.
add
(
userAssignment
);
});
approvalNodesObj_
.
setType
(
ApprovalNodesObj
.
NodeType
.
addSign
);
approvalNodesObj_
.
setApprovalUsers
(
userAssignments_
);
approvalNodesObjs
.
add
(
approvalNodesObj_
);
repeatedly
=
true
;
}
else
if
(
actor
instanceof
String
){
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actor
.
toString
())));
userAssignments
.
add
(
userAssignment
);
}
}
if
(!
repeatedly
){
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
addSign
);
approvalNodesObj
.
setApprovalUsers
(
userAssignments
);
approvalNodesObjs
.
add
(
approvalNodesObj
);
}
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
rejectProcessInstance
,
null
,
params
);
break
;
}
}
else
if
(
nodeInfo
==
null
&&
e
.
getCondition
()
!=
null
&&
nodeId
.
equals
(
e
.
getSourceRef
())
&&
e
.
getCondition
().
contains
(
result_agree
)
&&
e
.
getCondition
().
contains
(
result_n_sign
)){
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)){
Node
nodeSource
=
workflowProcess
.
findNode
(
e
.
getSourceRef
());
if
(
NodeType
.
TASK
==
nodeSource
.
getType
()){
TaskNode
taskNodeSource
=
(
TaskNode
)
nodeSource
;
taskNodeSource
.
getDataOutputAssociations
().
forEach
((
dataOutputAssociation
)
->
{
params
.
put
(
dataOutputAssociation
.
getTarget
().
getId
(),
getTaskParams
(
params
,
dataOutputAssociation
.
getTarget
().
getId
()));
});
}
if
(
evalCondition
(
params
,
e
.
getCondition
(),
workflowProcess
.
getBpmnDefinition
())){
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
e
.
getTargetRef
());
approvalNodesObj
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
Node
node
=
workflowProcess
.
findNode
(
e
.
getTargetRef
());
Object
pNodeInfo
=
getPNodeInfo
(
e
.
getTargetRef
(),
rejectProcessInstance
);
if
(
pNodeInfo
!=
null
){
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
JSONArray
jsonArray
=
new
JSONArray
(
pNodeInfo
.
toString
());
jsonArray
.
forEach
(
actorId
->{
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actorId
.
toString
())));
userAssignments
.
add
(
userAssignment
);
});
approvalNodesObj
.
setApprovalUsers
(
userAssignments
);
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
changeStaff
);
}
else
if
(
NodeType
.
TASK
==
node
.
getType
()){
TaskNode
taskNode
=
(
TaskNode
)
node
;
UserTaskNode
userTaskNode
=
(
UserTaskNode
)
taskNode
.
getExtensionNode
();
approvalNodesObj
.
setApprovalUsers
(
getParticipant
(
userTaskNode
.
getParticipations
(),
storeJson
,
rejectProcessInstance
));
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
normal
);
}
approvalNodesObjs
.
add
(
approvalNodesObj
);
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
rejectProcessInstance
,
null
,
params
);
break
;
}
continue
;
}
}
else
if
(
nodeInfo
==
null
&&
e
.
getCondition
()
!=
null
&&
nodeId
.
equals
(
e
.
getSourceRef
())
&&
e
.
getCondition
().
equals
(
result_agree
)){
if
(
e
.
getTarget
()
instanceof
ScriptTaskNodeImpl
)
{
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
rejectProcessInstance
,
e
.
getTargetRef
(),
params
);
break
;
}
else
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)){
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
e
.
getTargetRef
());
approvalNodesObj
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
Node
node
=
workflowProcess
.
findNode
(
e
.
getTargetRef
());
Object
pNodeInfo
=
getPNodeInfo
(
e
.
getTargetRef
(),
rejectProcessInstance
);
if
(
pNodeInfo
!=
null
){
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
JSONArray
jsonArray
=
new
JSONArray
(
pNodeInfo
.
toString
());
jsonArray
.
forEach
(
actorId
->{
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actorId
.
toString
())));
userAssignments
.
add
(
userAssignment
);
});
approvalNodesObj
.
setApprovalUsers
(
userAssignments
);
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
changeStaff
);
}
else
if
(
NodeType
.
TASK
==
node
.
getType
()){
TaskNode
taskNode
=
(
TaskNode
)
node
;
UserTaskNode
userTaskNode
=
(
UserTaskNode
)
taskNode
.
getExtensionNode
();
approvalNodesObj
.
setApprovalUsers
(
getParticipant
(
userTaskNode
.
getParticipations
(),
storeJson
,
rejectProcessInstance
));
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
normal
);
}
approvalNodesObjs
.
add
(
approvalNodesObj
);
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
rejectProcessInstance
,
null
,
params
);
break
;
}
}
else
if
(
nodeInfo
==
null
&&
e
.
getCondition
()
!=
null
&&
nodeId
.
equals
(
e
.
getSourceRef
())
&&
e
.
getCondition
().
contains
(
script_end
))
{
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)){
Node
nodeSource
=
workflowProcess
.
findNode
(
e
.
getSourceRef
());
if
(
NodeType
.
TASK
==
nodeSource
.
getType
()){
TaskNode
taskNodeSource
=
(
TaskNode
)
nodeSource
;
taskNodeSource
.
getDataOutputAssociations
().
forEach
((
dataOutputAssociation
)
->
{
params
.
put
(
dataOutputAssociation
.
getTarget
().
getId
(),
getTaskParams
(
params
,
dataOutputAssociation
.
getTarget
().
getId
()));
});
}
String
expr
=
e
.
getCondition
().
replace
(
"_idx>=n_"
,
"_idx<n_"
);
if
(
evalCondition
(
params
,
expr
,
workflowProcess
.
getBpmnDefinition
())){
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
e
.
getTargetRef
());
approvalNodesObj
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
Node
node
=
workflowProcess
.
findNode
(
e
.
getTargetRef
());
Object
pNodeInfo
=
getPNodeInfo
(
e
.
getTargetRef
(),
rejectProcessInstance
);
if
(
pNodeInfo
!=
null
){
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
JSONArray
jsonArray
=
new
JSONArray
(
pNodeInfo
.
toString
());
jsonArray
.
forEach
(
actorId
->{
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actorId
.
toString
())));
userAssignments
.
add
(
userAssignment
);
});
approvalNodesObj
.
setApprovalUsers
(
userAssignments
);
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
changeStaff
);
}
else
if
(
NodeType
.
TASK
==
node
.
getType
()){
TaskNode
taskNode
=
(
TaskNode
)
node
;
UserTaskNode
userTaskNode
=
(
UserTaskNode
)
taskNode
.
getExtensionNode
();
approvalNodesObj
.
setApprovalUsers
(
getParticipant
(
userTaskNode
.
getParticipations
(),
storeJson
,
rejectProcessInstance
));
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
normal
);
}
approvalNodesObjs
.
add
(
approvalNodesObj
);
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
rejectProcessInstance
,
null
,
params
);
break
;
}
continue
;
}
}
}
}
/**
* 开始节点的审批记录
* @param config
* @param inzBizProcess
* @return
*/
private
ApprovalNodesObj
generateStartApprovalRecord
(
WorkflowConfigurationDefinition
config
,
InzBizProcess
inzBizProcess
){
ApprovalNodesObj
approvalNode
=
new
ApprovalNodesObj
();
TriggerAction
triggerAction
=
config
.
getTriggerCondition
().
findTriggerActionByName
(
inzBizProcess
.
getTriggerAction
());
if
(
null
!=
triggerAction
){
approvalNode
.
setName
(
triggerAction
.
getTitle
());
}
else
{
approvalNode
.
setName
(
inzBizProcess
.
getTriggerAction
());
}
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
UserAssignment
submitUser
=
new
UserAssignment
(
inzBizProcess
.
getSubmitter
());
submitUser
.
setActorId
(
inzBizProcess
.
getSubmitter
().
getUuid
(
"id"
));
userAssignments
.
add
(
submitUser
);
WorkflowProcess
workflowProcess
=
inzBizProcess
.
getProcessInstance
().
getWorkflow
().
getBpmnDefinition
().
getWorkflowProcess
();
workflowProcess
.
getSequenceFlows
().
forEach
(
e
->{
if
(
e
.
getSource
().
getName
().
equals
(
"Start"
)){
approvalNode
.
setId
(
e
.
getSourceRef
());
}
});
approvalNode
.
setApprovalUsers
(
userAssignments
);
approvalNode
.
setApprovalResult
(
1
);
return
approvalNode
;
}
/**
* 待已审批的审批记录
* @param type
* @param name
* @param task
* @return
*/
private
ApprovalNodesObj
generateApprovalPendingRecord
(
InzApprovalTask
task
){
ApprovalNodesObj
approvalNode
=
new
ApprovalNodesObj
();
approvalNode
.
setName
(
task
.
getWorkItem
().
getWorkItemName
());
approvalNode
.
setId
(
task
.
getWorkItem
().
getNodeId
());
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
if
(
null
!=
task
.
getPeopleAssignments
()
&&
!
task
.
getPeopleAssignments
().
isEmpty
()){
for
(
Actor
actor
:
task
.
getPeopleAssignments
()){
userAssignments
.
add
((
UserAssignment
)
actor
);
}
}
approvalNode
.
setApprovalUsers
(
userAssignments
);
if
(
task
.
getTaskState
()
==
TaskState
.
COMPLETED
){
approvalNode
.
setApprovalResult
(
1
);
}
return
approvalNode
;
}
private
List
<
UserAssignment
>
getParticipant
(
List
<?
extends
Participation
>
participations
,
String
storeJson
,
ProcessInstance
processInstance
){
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
Map
<
UUID
,
Participant
>
userMap
=
new
HashMap
<
UUID
,
Participant
>();
for
(
Participation
participation
:
participations
)
{
ParticipantStrategyDefinition
definition
=
Amino
.
getApplicationMetadataContext
()
.
getBean
(
participation
.
getName
(),
ParticipantStrategyDefinition
.
class
);
ParticipantStrategy
participantStrategy
=
definition
.
getParticipantStrategy
();
Map
<
String
,
Object
>
params
=
new
HashMap
<
String
,
Object
>();
if
(
processInstance
==
null
){
KObject
kObject
=
JSONObjectUtils
.
toObject
(
"{}"
,
processInstanceClass
);
kObject
.
set
(
"parameters"
,
"{\"currentStore\":\""
+
storeJson
+
"\"}"
);
processInstance
=
new
ProcessInstance
(
kObject
);
}
params
.
put
(
"processinstance"
,
processInstance
);
Arguments
arguments
=
participation
.
getArguments
();
arguments
.
forEach
((
argument
)
->
params
.
put
(
argument
.
getName
(),
argument
.
getValue
()));
List
<
Participant
>
participants
=
participantStrategy
.
getParticipant
(
params
);
if
(
null
!=
participants
&&
!
participants
.
isEmpty
()){
for
(
Participant
participant
:
participants
){
if
(
participant
instanceof
com
.
beecode
.
bcp
.
participant
.
core
.
User
){
if
(
userMap
.
get
(
participant
.
getId
())
==
null
){
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
participant
.
getId
()));
userAssignments
.
add
(
userAssignment
);
userMap
.
put
(
participant
.
getId
(),
participant
);
}
}
}
}
}
return
userAssignments
;
}
@Override
public
List
<
ApprovalNodesObj
>
listDefinitionApprovalNodeByBizTypeName
(
String
bizTypeName
,
String
storeJson
,
UUID
bizDataId
,
String
define
,
String
disposeType
,
Boolean
isEquipment
)
{
List
<
ApprovalNodesObj
>
approvalNodesObjs
=
new
ArrayList
<>();
List
<
InzWorkflowDefinition
>
defeinitions
=
inzWorkflowDefinitionService
.
listWorkflowDefinitionByBizTypeName
(
bizTypeName
,
true
);
Assert
.
notEmpty
(
defeinitions
,
"param 'defeinitions' must not be null"
);
InzWorkflowDefinition
definition
=
null
;
for
(
InzWorkflowDefinition
tempDefinition
:
defeinitions
){
if
(
tempDefinition
.
getDefinitionState
()
==
InzWorkflowDefinitionStateEnum
.
ENABLED
){
if
(
disposeType
!=
null
){
JSONObject
configJson
=
new
JSONObject
(
tempDefinition
.
getWorkflowConfig
());
String
type
=
""
;
if
(
disposeType
.
equals
(
"scrap"
)){
type
=
"submitToScrap"
;
}
else
if
(
disposeType
.
equals
(
"sell-off"
)){
type
=
"submitToSellOff"
;
}
if
(
configJson
.
getJSONObject
(
"triggerCondition"
).
get
(
"action"
).
toString
().
contains
(
type
)){
definition
=
tempDefinition
;
break
;
}
}
else
{
definition
=
tempDefinition
;
break
;
}
}
}
Assert
.
notNull
(
definition
,
"param 'definition' must not be null"
);
Workflow
workflow
=
workflowStorageService
.
getWorkflowOfMaxVersionByWorkflowDefinitionId
(
definition
.
getId
());
WorkflowProcess
workflowProcess
=
workflow
.
getBpmnDefinition
().
getWorkflowProcess
();
approvalNodesObjs
.
add
(
generateStartApprovalNode
(
workflowProcess
));
// if( bizDataId != null && define == null ){
// BizProcess bizProcess = bizProcessService.getBizProcesByBizTypeName(bizTypeName, bizDataId);
// if(bizProcess != null){
// ProcessInstance rejectProcessInstance = bizProcess.getProcessInstance();
// String nodeId = approvalNodesObjs.get(approvalNodesObjs.size()-1).getId();
// String nodeParam = null;
// if(nodeId.contains("-")){
// nodeParam = "n_"+String.valueOf(nodeId).replaceAll("-", "n")+"_staffs";
// }else{
// nodeParam = "n_"+nodeId+"_staffs";
// }
// String parameters = rejectProcessInstance.getParameters();
// JSONObject parametersJson = new JSONObject(parameters);
// parametersJson.put("result", 1);
// Map<String, Object> params = JSONObjectUtils.toMap(parametersJson.toString());
// Object nodeInfo = rejectProcessInstance.getParameterValue(nodeParam);
// String firstNodeId = getFirstNodeInfo_(workflowProcess,approvalNodesObjs);
// if(nodeInfo != null && !nodeInfo.toString().equals("") && !nodeInfo.toString().equals("\"start_no_add_sign\"")){
// getFirstNodeInfo(workflowProcess,approvalNodesObjs,firstNodeId,storeJson,nodeInfo);
// getNodeInfo(workflowProcess,approvalNodesObjs,storeJson,rejectProcessInstance,null,params);
// }else{
// getFirstNodeInfo(workflowProcess,approvalNodesObjs,firstNodeId,storeJson,rejectProcessInstance);
// getNodeInfo(workflowProcess,approvalNodesObjs,storeJson,rejectProcessInstance,null,params);
// }
// }
// return approvalNodesObjs;
// }else
if
(
bizDataId
!=
null
&&
define
!=
null
){
BillDefine
billDefine
=
getContext
().
getBean
(
define
,
BillDefine
.
class
);
JsonNode
json
=
handlerService
.
handleRO
(
s
->
{
BillData
billData
=
billService
.
getBillData
(
billDefine
,
bizDataId
,
null
);
return
new
BillDataJsonSerializer
(
billData
).
withRenderSubs
(
false
).
serialize
();
});
JsonNode
flowData
=
json
.
get
(
"flowData"
);
if
(!
flowData
.
isNull
()){
JSONObject
jsonObject
=
new
JSONObject
(
flowData
.
asText
());
KObject
kObject
=
JSONObjectUtils
.
toObject
(
"{}"
,
processInstanceClass
);
kObject
.
set
(
"parameters"
,
jsonObject
.
getJSONObject
(
"param"
).
toString
());
ProcessInstance
rejectProcessInstance
=
new
ProcessInstance
(
kObject
);
String
nodeId
=
approvalNodesObjs
.
get
(
approvalNodesObjs
.
size
()-
1
).
getId
();
String
nodeParam
=
null
;
if
(
nodeId
.
contains
(
"-"
)){
nodeParam
=
"n_"
+
String
.
valueOf
(
nodeId
).
replaceAll
(
"-"
,
"n"
)+
"_staffs"
;
}
else
{
nodeParam
=
"n_"
+
nodeId
+
"_staffs"
;
}
String
parameters
=
rejectProcessInstance
.
getParameters
();
JSONObject
parametersJson
=
new
JSONObject
(
parameters
);
parametersJson
.
put
(
"result"
,
1
);
Map
<
String
,
Object
>
params
=
JSONObjectUtils
.
toMap
(
parametersJson
.
toString
());
Object
nodeInfo
=
rejectProcessInstance
.
getParameterValue
(
nodeParam
);
String
firstNodeId
=
getFirstNodeInfo_
(
workflowProcess
,
approvalNodesObjs
);
if
(
nodeInfo
!=
null
&&
!
nodeInfo
.
toString
().
equals
(
""
)
&&
!
nodeInfo
.
toString
().
equals
(
"\"start_no_add_sign\""
)){
getFirstNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
firstNodeId
,
storeJson
,
nodeInfo
);
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
rejectProcessInstance
,
null
,
params
);
}
else
{
getFirstNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
firstNodeId
,
storeJson
,
rejectProcessInstance
);
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
rejectProcessInstance
,
null
,
params
);
}
return
approvalNodesObjs
;
}
}
String
nodeId
=
getFirstNodeInfo_
(
workflowProcess
,
approvalNodesObjs
);
if
(
nodeId
!=
null
){
getFirstNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
nodeId
,
storeJson
);
getNodeInfo
(
workflowProcess
,
approvalNodesObjs
,
storeJson
,
isEquipment
);
}
return
approvalNodesObjs
;
}
private
ApprovalNodesObj
generateStartApprovalNode
(
WorkflowProcess
workflowProcess
){
ApprovalNodesObj
approvalNode
=
new
ApprovalNodesObj
();
workflowProcess
.
getSequenceFlows
().
forEach
(
e
->{
if
(
e
.
getSource
().
getName
().
equals
(
"Start"
)){
approvalNode
.
setId
(
e
.
getSourceRef
());
}
});
approvalNode
.
setName
(
"提交"
);
return
approvalNode
;
}
private
String
getFirstNodeInfo_
(
WorkflowProcess
workflowProcess
,
List
<
ApprovalNodesObj
>
approvalNodesObjs
){
String
nodeId
=
approvalNodesObjs
.
get
(
approvalNodesObjs
.
size
()-
1
).
getId
();
String
targetNodeId
=
null
;
for
(
SequenceFlow
e
:
workflowProcess
.
getSequenceFlows
()){
if
(
nodeId
.
equals
(
e
.
getSourceRef
())){
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)){
targetNodeId
=
e
.
getTargetRef
();
break
;
}
}
}
return
targetNodeId
;
}
private
void
getFirstNodeInfo
(
WorkflowProcess
workflowProcess
,
List
<
ApprovalNodesObj
>
approvalNodesObjs
,
String
nodeId
,
String
storeJson
){
// String nodeId = approvalNodesObjs.get(approvalNodesObjs.size()-1).getId();
for
(
SequenceFlow
e
:
workflowProcess
.
getSequenceFlows
()){
if
(
e
.
getCondition
()
!=
null
&&
nodeId
.
equals
(
e
.
getSourceRef
())
&&
e
.
getCondition
().
contains
(
result_n_sign
)){
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)){
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
e
.
getTargetRef
());
approvalNodesObj
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
Node
node
=
workflowProcess
.
findNode
(
e
.
getTargetRef
());
if
(
NodeType
.
TASK
==
node
.
getType
()){
TaskNode
taskNode
=
(
TaskNode
)
node
;
UserTaskNode
userTaskNode
=
(
UserTaskNode
)
taskNode
.
getExtensionNode
();
approvalNodesObj
.
setApprovalUsers
(
getParticipant
(
userTaskNode
.
getParticipations
(),
storeJson
,
null
));
}
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
normal
);
approvalNodesObjs
.
add
(
approvalNodesObj
);
break
;
}
}
}
}
private
void
getFirstNodeInfo
(
WorkflowProcess
workflowProcess
,
List
<
ApprovalNodesObj
>
approvalNodesObjs
,
String
nodeId
,
String
storeJson
,
ProcessInstance
processInstance
){
// String nodeId = approvalNodesObjs.get(approvalNodesObjs.size()-1).getId();
for
(
SequenceFlow
e
:
workflowProcess
.
getSequenceFlows
()){
if
(
e
.
getCondition
()
!=
null
&&
nodeId
.
equals
(
e
.
getSourceRef
())
&&
e
.
getCondition
().
contains
(
result_n_sign
)){
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)){
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
e
.
getTargetRef
());
approvalNodesObj
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
Node
node
=
workflowProcess
.
findNode
(
e
.
getTargetRef
());
Object
pNodeInfo
=
getPNodeInfo
(
e
.
getTargetRef
(),
processInstance
);
if
(
pNodeInfo
!=
null
){
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
JSONArray
jsonArray
=
new
JSONArray
(
pNodeInfo
.
toString
());
jsonArray
.
forEach
(
actorId
->{
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actorId
.
toString
())));
userAssignments
.
add
(
userAssignment
);
});
approvalNodesObj
.
setApprovalUsers
(
userAssignments
);
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
changeStaff
);
}
else
if
(
NodeType
.
TASK
==
node
.
getType
()){
TaskNode
taskNode
=
(
TaskNode
)
node
;
UserTaskNode
userTaskNode
=
(
UserTaskNode
)
taskNode
.
getExtensionNode
();
approvalNodesObj
.
setApprovalUsers
(
getParticipant
(
userTaskNode
.
getParticipations
(),
storeJson
,
processInstance
));
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
normal
);
}
approvalNodesObjs
.
add
(
approvalNodesObj
);
break
;
}
}
}
}
private
void
getFirstNodeInfo
(
WorkflowProcess
workflowProcess
,
List
<
ApprovalNodesObj
>
approvalNodesObjs
,
String
nodeId
,
String
storeJson
,
Object
nodeInfo
){
// String nodeId = approvalNodesObjs.get(approvalNodesObjs.size()-1).getId();
for
(
SequenceFlow
e
:
workflowProcess
.
getSequenceFlows
()){
if
(
e
.
getCondition
()
!=
null
&&
nodeId
.
equals
(
e
.
getSourceRef
())
&&
e
.
getCondition
().
contains
(
result_sign
)){
if
(!
e
.
getTarget
().
getName
().
equals
(
"End"
)){
JSONArray
jsonArray
=
new
JSONArray
(
nodeInfo
.
toString
());
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
e
.
getTargetRef
());
approvalNodesObj
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
boolean
repeatedly
=
false
;
for
(
int
i
=
0
;
i
<
jsonArray
.
length
();
i
++){
Object
actor
=
jsonArray
.
get
(
i
);
if
(
actor
instanceof
JSONArray
){
ApprovalNodesObj
approvalNodesObj_
=
new
ApprovalNodesObj
();
approvalNodesObj_
.
setId
(
e
.
getTargetRef
());
approvalNodesObj_
.
setName
(
e
.
getTarget
().
getName
());
approvalNodesObj_
.
setApprovalResult
(-
1
);
List
<
UserAssignment
>
userAssignments_
=
new
ArrayList
<>();
JSONArray
jsonArray_
=
(
JSONArray
)
actor
;
jsonArray_
.
forEach
(
actorId
->{
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actorId
.
toString
())));
userAssignments_
.
add
(
userAssignment
);
});
approvalNodesObj_
.
setType
(
ApprovalNodesObj
.
NodeType
.
addSign
);
approvalNodesObj_
.
setApprovalUsers
(
userAssignments_
);
approvalNodesObjs
.
add
(
approvalNodesObj_
);
repeatedly
=
true
;
}
else
if
(
actor
instanceof
String
){
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actor
.
toString
())));
userAssignments
.
add
(
userAssignment
);
}
}
if
(!
repeatedly
){
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
addSign
);
approvalNodesObj
.
setApprovalUsers
(
userAssignments
);
approvalNodesObjs
.
add
(
approvalNodesObj
);
}
break
;
}
}
}
}
private
Object
getPNodeInfo
(
String
nodeId
,
ProcessInstance
processInstance
){
String
nodeParam
=
null
;
if
(
nodeId
.
contains
(
"-"
)){
nodeParam
=
"p_"
+
String
.
valueOf
(
nodeId
).
replaceAll
(
"-"
,
"p"
)+
"_staffs"
;
}
else
{
nodeParam
=
"p_"
+
nodeId
+
"_staffs"
;
}
Object
nodeInfo_
=
processInstance
.
getParameterValue
(
nodeParam
);
if
(
nodeInfo_
!=
null
&&
nodeInfo_
.
toString
().
equals
(
""
)){
nodeInfo_
=
null
;
}
return
nodeInfo_
;
}
private
boolean
getLoad
(
Boolean
isEquipment
,
SequenceFlow
e
){
boolean
load
=
false
;
if
(
isEquipment
!=
null
){
if
(
e
.
getCondition
().
contains
(
equip
)){
if
(
isEquipment
&&
e
.
getCondition
().
contains
(
equipCount
)){
load
=
true
;
}
else
if
(!
isEquipment
&&
e
.
getCondition
().
contains
(
n_equipCount
)){
load
=
true
;
}
}
else
{
load
=
true
;
}
}
else
{
load
=
true
;
}
return
load
;
}
private
void
pendAddSignInfo
(
List
<
ApprovalNodesObj
>
approvalNodesObjs
,
WorkflowProcess
workflowProcess
,
ProcessInstance
processInstance
){
String
nodeId
=
approvalNodesObjs
.
get
(
approvalNodesObjs
.
size
()-
1
).
getId
();
Node
node
=
workflowProcess
.
findNode
(
nodeId
);
boolean
isAddSignNode
=
false
;
for
(
SequenceFlow
sequenceFlow
:
node
.
getOutFlows
()){
if
(
sequenceFlow
.
getTarget
()
instanceof
ScriptTaskNodeImpl
){
isAddSignNode
=
true
;
}
}
if
(
isAddSignNode
){
String
addSignNodeId
=
null
;
int
size
=
0
;
for
(
int
i
=
approvalNodesObjs
.
size
();
i
>
0
;
i
--){
ApprovalNodesObj
approvalNodesObj
=
approvalNodesObjs
.
get
(
i
-
1
);
if
(!
approvalNodesObj
.
getId
().
equals
(
nodeId
)){
addSignNodeId
=
approvalNodesObj
.
getId
();
break
;
}
else
{
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
addSign
);
size
++;
}
}
String
nodeParam
=
null
;
if
(
nodeId
.
contains
(
"-"
)){
nodeParam
=
"n_"
+
String
.
valueOf
(
addSignNodeId
).
replaceAll
(
"-"
,
"n"
)+
"_staffs"
;
}
else
{
nodeParam
=
"n_"
+
addSignNodeId
+
"_staffs"
;
}
Object
nodeInfo_
=
processInstance
.
getParameterValue
(
nodeParam
);
if
(
nodeInfo_
!=
null
&&
nodeInfo_
.
toString
().
equals
(
""
)){
nodeInfo_
=
null
;
}
Object
nodeInfo
=
nodeInfo_
;
JSONArray
jsonArray
=
new
JSONArray
(
nodeInfo
.
toString
());
for
(
int
i
=
size
;
i
<
jsonArray
.
length
();
i
++){
if
(
jsonArray
.
get
(
i
)
instanceof
JSONArray
){
ApprovalNodesObj
approvalNodesObj
=
new
ApprovalNodesObj
();
approvalNodesObj
.
setId
(
nodeId
);
approvalNodesObj
.
setName
(
node
.
getName
());
approvalNodesObj
.
setApprovalResult
(-
1
);
JSONArray
jsonArray_
=
(
JSONArray
)
jsonArray
.
get
(
i
);
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
jsonArray_
.
forEach
(
actorId
->{
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actorId
.
toString
())));
userAssignments
.
add
(
userAssignment
);
});
approvalNodesObj
.
setType
(
ApprovalNodesObj
.
NodeType
.
addSign
);
approvalNodesObj
.
setApprovalUsers
(
userAssignments
);
approvalNodesObjs
.
add
(
approvalNodesObj
);
}
}
}
else
{
approvalNodesObjs
.
get
(
approvalNodesObjs
.
size
()-
1
).
setType
(
ApprovalNodesObj
.
NodeType
.
normal
);
}
}
private
boolean
evalCondition
(
Map
<
String
,
Object
>
params
,
String
expr
,
BPMNDefinition
bpmnDefinition
){
String
exprLang
=
bpmnDefinition
.
getExpressionLanguage
();
if
(
exprLang
==
null
)
{
return
false
;
}
switch
(
exprLang
)
{
case
WorkflowConstants
.
LANG_JAVASCRIPT
:
return
evalConditionJS
(
params
,
expr
);
case
WorkflowConstants
.
LANG_MVEL2
:
return
evalConditionMVEL
(
params
,
expr
);
default
:
return
false
;
}
}
private
boolean
evalConditionMVEL
(
Map
<
String
,
Object
>
params
,
String
expr
)
{
try
{
Object
object
=
MVEL
.
eval
(
expr
,
params
);
return
Boolean
.
valueOf
(
object
.
toString
());
}
catch
(
Exception
e
)
{
logger
.
error
(
"Error occurs while evaluating mvel expression "
,
e
);
}
return
false
;
}
private
boolean
evalConditionJS
(
Map
<
String
,
Object
>
params
,
String
expr
)
{
ScriptEngineManager
manager
=
new
ScriptEngineManager
();
ScriptEngine
engine
=
manager
.
getEngineByName
(
"javascript"
);
Bindings
bindings
=
engine
.
createBindings
();
bindings
.
putAll
(
params
);
try
{
Object
result
=
engine
.
eval
(
expr
,
bindings
);
return
Convert
.
toBoolean
(
result
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"Error occurs while evaluating JavaScript expression "
,
e
);
}
return
false
;
}
private
Object
getTaskParams
(
Map
<
String
,
Object
>
params
,
String
key
){
Object
object
=
null
;
object
=
params
.
get
(
key
);
if
(
object
==
null
){
object
=
""
;
}
return
object
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/ApprovalRecordServiceImpl.java
View file @
ef3b44a9
...
...
@@ -4,6 +4,7 @@ import java.util.ArrayList;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.UUID
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
...
...
@@ -12,20 +13,33 @@ import org.springframework.stereotype.Service;
import
org.springframework.util.Assert
;
import
org.springframework.util.CollectionUtils
;
import
com.beecode.bap.staff.service.StaffService
;
import
com.beecode.bap.workflow.core.BizProcessState
;
import
com.beecode.bcp.task.assignment.Actor
;
import
com.beecode.bcp.task.core.Task
;
import
com.beecode.bcp.task.core.TaskState
;
import
com.beecode.bcp.workflow.core.StorageWorkflow
;
import
com.beecode.bcp.workflow.define.bpmn.ext.ExtensionNode
;
import
com.beecode.bcp.workflow.define.bpmn.ext.UserTaskNode
;
import
com.beecode.inz.workflow.config.TriggerAction
;
import
com.beecode.inz.workflow.config.WorkflowConfigurationDefinition
;
import
com.beecode.inz.workflow.dao.InzApprovalTaskDao
;
import
com.beecode.inz.workflow.dao.TranspondApprovalStaffDao
;
import
com.beecode.inz.workflow.dao.TranspondApprovalSuggestionDao
;
import
com.beecode.inz.workflow.entity.ApprovalPendingRecord
;
import
com.beecode.inz.workflow.entity.ApprovalRecord
;
import
com.beecode.inz.workflow.entity.ApprovedRecord
;
import
com.beecode.inz.workflow.entity.InzApprovalTask
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.entity.SubmitApprovalSuggestionEntity
;
import
com.beecode.inz.workflow.entity.TranspondApprovalStaffEntity
;
import
com.beecode.inz.workflow.entity.TranspondApprovalSuggestionEntity
;
import
com.beecode.inz.workflow.entity.UserAssignment
;
import
com.beecode.inz.workflow.pojo.WorkflowRecordsObj
;
import
com.beecode.inz.workflow.service.ApprovalRecordService
;
import
com.beecode.inz.workflow.service.BizTypeWorkflowConfigurationService
;
import
com.beecode.inz.workflow.service.InzApprovalTaskService
;
import
com.beecode.inz.workflow.service.InzBizProcessService
;
import
com.beecode.inz.workflow.service.SubmitApprovalSuggestionService
;
@Service
public
class
ApprovalRecordServiceImpl
implements
ApprovalRecordService
{
...
...
@@ -35,6 +49,23 @@ public class ApprovalRecordServiceImpl implements ApprovalRecordService{
@Autowired
private
BizTypeWorkflowConfigurationService
bizTypeWorkflowConfigurationService
;
@Autowired
private
SubmitApprovalSuggestionService
submitApprovalSuggestionService
;
@Autowired
private
TranspondApprovalStaffDao
transpondApprovalStaffDao
;
@Autowired
private
TranspondApprovalSuggestionDao
transpondApprovalSuggestionDao
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
InzBizProcessService
inzBizProcessService
;
@Autowired
private
InzApprovalTaskDao
inzApprovalTaskDao
;
/**
* 待审批的审批记录
...
...
@@ -79,6 +110,7 @@ public class ApprovalRecordServiceImpl implements ApprovalRecordService{
approvalRecord
.
setSuggestions
(
task
.
getSuggestion
());
approvalRecord
.
setStartTime
(
task
.
getFinishTime
());
approvalRecord
.
setFinishTime
(
task
.
getFinishTime
());
approvalRecord
.
setAttribute1
(
task
.
getAttribute1
());
if
(
null
!=
task
.
getActualActor
()){
approvalRecord
.
setApprovalUser
((
UserAssignment
)
task
.
getActualActor
());
}
...
...
@@ -92,6 +124,19 @@ public class ApprovalRecordServiceImpl implements ApprovalRecordService{
}
return
approvalRecord
;
}
private
WorkflowRecordsObj
generateWorkflowRecord
(
String
name
,
String
type
,
InzApprovalTask
task
){
WorkflowRecordsObj
record
=
new
WorkflowRecordsObj
();
record
.
setName
(
name
);
record
.
setOperation
(
String
.
valueOf
(
task
.
getResult
()));
record
.
setSuggestion
(
task
.
getSuggestion
());
record
.
setFinishTime
(
task
.
getFinishTime
());
if
(
null
!=
task
.
getActualActor
()){
record
.
setApprovalUser
((
UserAssignment
)
task
.
getActualActor
());
}
return
record
;
}
/**
* 开始节点的审批记录
* @param config
...
...
@@ -112,11 +157,48 @@ public class ApprovalRecordServiceImpl implements ApprovalRecordService{
UserAssignment
submitUser
=
new
UserAssignment
(
inzBizProcess
.
getSubmitter
());
submitUser
.
setActorId
(
inzBizProcess
.
getSubmitter
().
getUuid
(
"id"
));
approvalRecord
.
setApprovalUser
(
submitUser
);
return
approvalRecord
;
}
/**
* 开始节点的审批记录
* @param config
* @param inzBizProcess
* @return
*/
private
WorkflowRecordsObj
generateStartWorkflowRecord
(
WorkflowConfigurationDefinition
config
,
InzBizProcess
inzBizProcess
,
List
<
InzApprovalTask
>
allTask
,
List
<
InzApprovalTask
>
toDoTask
){
WorkflowRecordsObj
record
=
new
WorkflowRecordsObj
();
TriggerAction
triggerAction
=
config
.
getTriggerCondition
().
findTriggerActionByName
(
inzBizProcess
.
getTriggerAction
());
if
(
null
!=
triggerAction
){
record
.
setName
(
triggerAction
.
getTitle
());
}
else
{
record
.
setName
(
inzBizProcess
.
getTriggerAction
());
}
record
.
setOperation
(
"1"
);
record
.
setFinishTime
(
inzBizProcess
.
getSubmitTime
());
UserAssignment
submitUser
=
new
UserAssignment
(
inzBizProcess
.
getSubmitter
());
submitUser
.
setActorId
(
inzBizProcess
.
getSubmitter
().
getUuid
(
"id"
));
SubmitApprovalSuggestionEntity
submitApprovalSuggestionEntity
=
submitApprovalSuggestionService
.
getSubmitApprovalSuggestionByprocessInstanceId
(
inzBizProcess
.
getProcessInstance
().
getId
());
if
(
submitApprovalSuggestionEntity
!=
null
){
record
.
setSuggestion
(
submitApprovalSuggestionEntity
.
getSuggestion
());
}
record
.
setApprovalUser
(
submitUser
);
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
if
(
allTask
.
size
()>
0
){
InzApprovalTask
task
=
allTask
.
get
(
0
);
addApprovalUserAssignment
(
task
,
userAssignments
);
record
.
setReceiverUser
(
userAssignments
);
}
else
if
(
toDoTask
.
size
()>
0
){
InzApprovalTask
task
=
toDoTask
.
get
(
0
);
addToDoUserAssignment
(
task
,
userAssignments
);
record
.
setReceiverUser
(
userAssignments
);
}
return
record
;
}
/**
* 结束节点的审批记录
* @param inzBizProcess
* @return
...
...
@@ -147,18 +229,16 @@ public class ApprovalRecordServiceImpl implements ApprovalRecordService{
records
.
add
(
generateStartApprovalRecord
(
config
,
inzBizProcess
));
StorageWorkflow
workflow
=
(
StorageWorkflow
)
inzBizProcess
.
getProcessInstance
().
getWorkflow
();
String
origionDefinition
=
workflow
.
getOriginalDefinition
();
JSONObject
origionDefinitionJson
=
new
JSONObject
(
origionDefinition
);
JSONArray
nodeArray
=
origionDefinitionJson
.
getJSONArray
(
"tasks"
);
for
(
int
i
=
0
;
i
<
nodeArray
.
length
()
;
i
++){
String
nodeId
=
nodeArray
.
getJSONObject
(
i
).
getString
(
"id"
);
String
name
=
nodeArray
.
getJSONObject
(
i
).
getString
(
"name"
);
String
type
=
nodeArray
.
getJSONObject
(
i
).
getString
(
"type"
);
for
(
InzApprovalTask
task
:
allTask
){
if
(
nodeId
.
equals
(
task
.
getWorkItem
().
getNodeId
())){
for
(
int
i
=
0
,
length
=
allTask
.
size
()
;
i
<
length
;
i
++)
{
InzApprovalTask
task
=
allTask
.
get
(
i
);
String
name
=
task
.
getWorkItem
().
getWorkItemName
();
ExtensionNode
extensionNode
=
task
.
getWorkItem
().
getTaskNode
().
getExtensionNode
();
String
type
=
""
;
if
(
extensionNode
instanceof
UserTaskNode
)
{
type
=
((
UserTaskNode
)
extensionNode
).
getTaskType
();
}
List
<
InzApprovalTask
>
tempTasks
=
new
ArrayList
<
InzApprovalTask
>();
tempTasks
.
add
(
allTask
.
get
(
i
));
ApprovalRecord
tempRecord
=
null
;
if
(
task
.
getTaskState
()
==
TaskState
.
COMPLETED
){
tempRecord
=
generateApprovdRecord
(
name
,
type
,
task
);
...
...
@@ -185,14 +265,7 @@ public class ApprovalRecordServiceImpl implements ApprovalRecordService{
});
}
records
.
add
(
tempRecord
);
break
;
}
}
}
if
(
inzBizProcess
.
getWorkflowState
()
==
BizProcessState
.
DONE_WITH_AGREE
.
getValue
()
||
inzBizProcess
.
getWorkflowState
()
==
BizProcessState
.
DONE_WITH_REJECT
.
getValue
()){
...
...
@@ -223,4 +296,168 @@ public class ApprovalRecordServiceImpl implements ApprovalRecordService{
return
records
;
}
@Override
public
List
<
WorkflowRecordsObj
>
listWorkflowRecordByProcessInstance
(
InzBizProcess
inzBizProcess
)
{
Assert
.
notNull
(
inzBizProcess
,
"param 'inzBizProcess' must not be null"
);
List
<
WorkflowRecordsObj
>
records
=
new
ArrayList
<>();
records
.
addAll
(
getWorkflowRecords
(
inzBizProcess
));
List
<
InzBizProcess
>
inzBizProcesses
=
inzBizProcessService
.
listBizProcessByBizDataIdAndStateAndNoProcessInstanceId
(
inzBizProcess
.
getBizDataId
(),
BizProcessState
.
DONE_WITH_REJECT
,
inzBizProcess
.
getProcessInstance
().
getId
());
for
(
InzBizProcess
inzBizProcess_
:
inzBizProcesses
){
records
.
addAll
(
getWorkflowRecords
(
inzBizProcess_
));
}
Collections
.
sort
(
records
,
new
Comparator
<
WorkflowRecordsObj
>(){
@Override
public
int
compare
(
WorkflowRecordsObj
o1
,
WorkflowRecordsObj
o2
)
{
return
o1
.
getFinishTime
().
after
(
o2
.
getFinishTime
())
?
-
1
:
1
;
}
});
return
records
;
}
private
List
<
WorkflowRecordsObj
>
getWorkflowRecords
(
InzBizProcess
inzBizProcess
){
Assert
.
notNull
(
inzBizProcess
,
"param 'inzBizProcess' must not be null"
);
List
<
InzApprovalTask
>
allTask
=
new
ArrayList
<>();
allTask
.
addAll
(
inzApprovalTaskService
.
listApprovedTask
(
inzBizProcess
.
getProcessInstance
().
getId
()));
List
<
InzApprovalTask
>
toDoTask
=
inzApprovalTaskDao
.
listToDoTask
(
inzBizProcess
.
getProcessInstance
().
getId
());
allTask
=
inzApprovalTaskService
.
generateParenChildRelation
(
allTask
);
toDoTask
=
inzApprovalTaskService
.
generateParenChildRelation
(
toDoTask
);
List
<
WorkflowRecordsObj
>
records
=
new
ArrayList
<>();
WorkflowConfigurationDefinition
config
=
bizTypeWorkflowConfigurationService
.
getBizTypeWorkflowConfigurationByBizTypeName
(
inzBizProcess
.
getBizTypeName
());
Assert
.
notNull
(
config
,
"param 'config' must not be null"
);
records
.
add
(
generateStartWorkflowRecord
(
config
,
inzBizProcess
,
allTask
,
toDoTask
));
for
(
int
i
=
0
,
length
=
allTask
.
size
()
;
i
<
length
;
i
++)
{
InzApprovalTask
task
=
allTask
.
get
(
i
);
JSONObject
taskParams
=
new
JSONObject
(
task
.
toKObject
().
getString
(
Task
.
PARAMETERS
));
if
(
taskParams
.
has
(
"autoComplete"
)
&&
taskParams
.
getBoolean
(
"autoComplete"
)){
continue
;
}
if
(
null
!=
task
.
getChildren
()
&&
!
task
.
getChildren
().
isEmpty
()){
for
(
Task
child
:
task
.
getChildren
()){
InzApprovalTask
childTask
=
(
InzApprovalTask
)
child
;
JSONObject
taskParams_
=
new
JSONObject
(
childTask
.
toKObject
().
getString
(
Task
.
PARAMETERS
));
if
(
taskParams_
.
has
(
"autoComplete"
)
&&
taskParams_
.
getBoolean
(
"autoComplete"
)){
continue
;
}
getNodeRecord
(
childTask
,
allTask
,
toDoTask
,
length
,
inzBizProcess
,
records
,
i
);
}
}
else
{
getNodeRecord
(
task
,
allTask
,
toDoTask
,
length
,
inzBizProcess
,
records
,
i
);
}
}
List
<
WorkflowRecordsObj
>
records_
=
new
ArrayList
<
WorkflowRecordsObj
>();
List
<
TranspondApprovalStaffEntity
>
transpondApprovalStaffEntities
=
transpondApprovalStaffDao
.
getTranspondApprovalStaffByprocessInstanceId
(
inzBizProcess
.
getProcessInstance
().
getId
());
for
(
TranspondApprovalStaffEntity
transpondApprovalStaffEntity
:
transpondApprovalStaffEntities
){
WorkflowRecordsObj
workflowRecordsObj
=
new
WorkflowRecordsObj
();
workflowRecordsObj
.
setFinishTime
(
transpondApprovalStaffEntity
.
getFinishTime
());
if
(
transpondApprovalStaffEntity
.
getOperation
().
equals
(
TranspondApprovalStaffEntity
.
operationType
.
copy
)){
workflowRecordsObj
.
setName
(
"抄送"
);
}
else
{
workflowRecordsObj
.
setName
(
"转发"
);
}
workflowRecordsObj
.
setSuggestion
(
transpondApprovalStaffEntity
.
getSuggestion
());
workflowRecordsObj
.
setOperation
(
transpondApprovalStaffEntity
.
getOperation
().
toString
());
workflowRecordsObj
.
setApprovalUser
(
new
UserAssignment
(
staffService
.
getById
(
transpondApprovalStaffEntity
.
getSubmitId
())));
JSONArray
jsonArray
=
new
JSONArray
(
transpondApprovalStaffEntity
.
getStaffJson
());
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
jsonArray
.
forEach
(
actorId
->{
UserAssignment
userAssignment
=
new
UserAssignment
(
staffService
.
getById
(
UUID
.
fromString
(
actorId
.
toString
())));
userAssignments
.
add
(
userAssignment
);
});
workflowRecordsObj
.
setReceiverUser
(
userAssignments
);
records_
.
add
(
workflowRecordsObj
);
}
List
<
TranspondApprovalSuggestionEntity
>
transpondApprovalSuggestionEntities
=
transpondApprovalSuggestionDao
.
getTranspondApprovalSuggestionByprocessInstanceId
(
inzBizProcess
.
getProcessInstance
().
getId
());
for
(
TranspondApprovalSuggestionEntity
transpondApprovalSuggestionEntity
:
transpondApprovalSuggestionEntities
){
WorkflowRecordsObj
workflowRecordsObj
=
new
WorkflowRecordsObj
();
workflowRecordsObj
.
setFinishTime
(
transpondApprovalSuggestionEntity
.
getFinishTime
());
if
(
transpondApprovalSuggestionEntity
.
getOperation
().
equals
(
TranspondApprovalSuggestionEntity
.
operationType
.
copy
)){
workflowRecordsObj
.
setName
(
"抄送"
);
}
else
{
workflowRecordsObj
.
setName
(
"转发"
);
}
workflowRecordsObj
.
setOperation
(
transpondApprovalSuggestionEntity
.
getOperation
().
toString
());
workflowRecordsObj
.
setApprovalUser
(
new
UserAssignment
(
staffService
.
getById
(
transpondApprovalSuggestionEntity
.
getSubmitId
())));
workflowRecordsObj
.
setSuggestion
(
transpondApprovalSuggestionEntity
.
getSuggestion
());
records_
.
add
(
workflowRecordsObj
);
}
records
.
addAll
(
records_
);
return
records
;
}
private
void
getNodeRecord
(
InzApprovalTask
task
,
List
<
InzApprovalTask
>
allTask
,
List
<
InzApprovalTask
>
toDoTask
,
int
length
,
InzBizProcess
inzBizProcess
,
List
<
WorkflowRecordsObj
>
records
,
int
i
){
String
name
=
task
.
getWorkItem
().
getWorkItemName
();
ExtensionNode
extensionNode
=
task
.
getWorkItem
().
getTaskNode
().
getExtensionNode
();
String
type
=
""
;
if
(
extensionNode
instanceof
UserTaskNode
)
{
type
=
((
UserTaskNode
)
extensionNode
).
getTaskType
();
}
List
<
InzApprovalTask
>
tempTasks
=
new
ArrayList
<
InzApprovalTask
>();
tempTasks
.
add
(
allTask
.
get
(
i
));
WorkflowRecordsObj
tempRecord
=
null
;
if
(
task
.
getTaskState
()
==
TaskState
.
COMPLETED
){
tempRecord
=
generateWorkflowRecord
(
name
,
type
,
task
);
List
<
UserAssignment
>
userAssignments
=
new
ArrayList
<>();
if
(
i
==
(
length
-
1
)){
if
(
toDoTask
.
size
()>
0
){
InzApprovalTask
task_
=
toDoTask
.
get
(
0
);
addToDoUserAssignment
(
task_
,
userAssignments
);
tempRecord
.
setReceiverUser
(
userAssignments
);
}
else
{
UserAssignment
submitUser
=
new
UserAssignment
(
inzBizProcess
.
getSubmitter
());
submitUser
.
setActorId
(
inzBizProcess
.
getSubmitter
().
getUuid
(
"id"
));
userAssignments
.
add
(
submitUser
);
tempRecord
.
setReceiverUser
(
userAssignments
);
}
}
else
{
InzApprovalTask
task_
=
allTask
.
get
(
i
+
1
);
addApprovalUserAssignment
(
task_
,
userAssignments
);
tempRecord
.
setReceiverUser
(
userAssignments
);
}
records
.
add
(
tempRecord
);
}
}
private
void
addToDoUserAssignment
(
InzApprovalTask
task_
,
List
<
UserAssignment
>
userAssignments
){
if
(
null
!=
task_
.
getChildren
()
&&
!
task_
.
getChildren
().
isEmpty
()){
task_
.
getChildren
().
forEach
((
child
)->{
InzApprovalTask
childTask
=
(
InzApprovalTask
)
child
;
if
(
null
!=
childTask
.
getPeopleAssignments
()
&&
!
childTask
.
getPeopleAssignments
().
isEmpty
()){
for
(
Actor
actor
:
childTask
.
getPeopleAssignments
()){
userAssignments
.
add
((
UserAssignment
)
actor
);
}
}
});
}
else
{
for
(
Actor
actor
:
task_
.
getPeopleAssignments
()){
userAssignments
.
add
((
UserAssignment
)
actor
);
}
}
}
private
void
addApprovalUserAssignment
(
InzApprovalTask
task_
,
List
<
UserAssignment
>
userAssignments
){
if
(
null
!=
task_
.
getChildren
()
&&
!
task_
.
getChildren
().
isEmpty
()){
task_
.
getChildren
().
forEach
((
child
)->{
InzApprovalTask
childTask
=
(
InzApprovalTask
)
child
;
UserAssignment
userAssignment
=
(
UserAssignment
)
childTask
.
getActualActor
();
userAssignments
.
add
(
userAssignment
);
});
}
else
{
UserAssignment
userAssignment
=
(
UserAssignment
)
task_
.
getActualActor
();
userAssignments
.
add
(
userAssignment
);
}
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/ApprovalSendCopyServiceImpl.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
service
;
import
java.util.Date
;
import
java.util.UUID
;
import
org.json.JSONArray
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.beecode.bap.staff.service.StaffService
;
import
com.beecode.bap.workflow.dao.CommonTaskDao
;
import
com.beecode.bcp.task.core.Task
;
import
com.beecode.bcp.task.define.TaskDefinition
;
import
com.beecode.bcp.task.oa.dao.OaMessageDao
;
import
com.beecode.bcp.task.oa.entity.OaMessageEntity
;
import
com.beecode.bcp.task.service.TaskDefinitionService
;
import
com.beecode.bcp.type.KClass
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.inz.workflow.dao.ApprovalCopyDao
;
import
com.beecode.inz.workflow.dao.TranspondApprovalStaffDao
;
import
com.beecode.inz.workflow.entity.ApprovalCopyEntity
;
import
com.beecode.inz.workflow.entity.TranspondApprovalStaffEntity
;
import
com.beecode.inz.workflow.service.ApprovalSendCopyService
;
import
com.beecode.inz.workflow.util.InzApprovalTaskConstants
;
@Service
public
class
ApprovalSendCopyServiceImpl
implements
ApprovalSendCopyService
{
@Autowired
private
TaskDefinitionService
taskDefinitionService
;
@Autowired
private
CommonTaskDao
bizTaskDao
;
@Autowired
private
ApprovalCopyDao
approvalCopyDao
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
OaMessageDao
oaMessageDao
;
@Autowired
private
TranspondApprovalStaffDao
transpondApprovalStaffDao
;
@Override
@Transactional
public
void
sendApprovalCopy
(
UUID
taskId
,
int
result
)
{
TaskDefinition
taskDefinition
=
taskDefinitionService
.
getByName
(
InzApprovalTaskConstants
.
TASK_DEFINITION_NAME
);
KClass
taskClass
=
taskDefinition
.
getKClass
();
KObject
taskObject
=
bizTaskDao
.
getTask
(
taskClass
,
taskId
);
int
processInstanceState
=
taskObject
.
get
(
"processInstance"
).
getInt
(
"processState"
);
if
(
result
==
1
&&
processInstanceState
==
2
){
ApprovalCopyEntity
approvalCopyEntity
=
approvalCopyDao
.
getApprovalCopyByprocessInstanceId
(
taskObject
.
get
(
"processInstance"
).
getUuid
(
"id"
));
if
(
approvalCopyEntity
!=
null
){
JSONArray
jsonArray
=
new
JSONArray
(
approvalCopyEntity
.
getStaffJson
());
for
(
int
i
=
0
;
i
<
jsonArray
.
length
();
i
++){
UUID
actorId
=
UUID
.
fromString
(
jsonArray
.
getString
(
i
));
KObject
staff
=
staffService
.
getById
(
actorId
);
String
bizObjectName
=
taskObject
.
getString
(
"bizObjectName"
);
String
[]
names
=
bizObjectName
.
split
(
"-"
);
OaMessageEntity
oaMessageEntity
=
new
OaMessageEntity
();
oaMessageEntity
.
setSender
(
"宝贝王系统"
);
oaMessageEntity
.
setSenderTime
(
new
Date
());
if
(
names
.
length
>
0
){
oaMessageEntity
.
setFlowType
(
names
[
0
]);
}
else
{
oaMessageEntity
.
setFlowType
(
taskObject
.
getString
(
Task
.
BIZ_TYPE_NAME
));
}
oaMessageEntity
.
setFlowId
(
taskObject
.
get
(
"processInstance"
).
getUuid
(
"id"
).
toString
());
oaMessageEntity
.
setTitle
(
bizObjectName
.
replaceAll
(
"-"
,
" "
));
oaMessageEntity
.
setNodeName
(
taskObject
.
get
(
"workItem"
).
getString
(
"workItemName"
));
String
url
=
"/app/ApprovalCopy?bizTypeName="
+
taskObject
.
getString
(
Task
.
BIZ_TYPE_NAME
)+
"&bizDataId="
+
taskObject
.
getUuid
(
"bizDataId"
).
toString
()+
"&show=true&type=copy"
;
oaMessageEntity
.
setPtpUrl
(
url
);
oaMessageEntity
.
setUserId
(
staff
.
get
(
"user"
).
getString
(
"username"
));
oaMessageEntity
.
setCreator
(
taskObject
.
get
(
"bizProcess"
).
get
(
"submitter"
).
get
(
"user"
).
getString
(
"username"
));
oaMessageEntity
.
setCreateTime
(
taskObject
.
get
(
"processInstance"
).
getDate
(
"startTime"
));
oaMessageEntity
.
setOperateTime
(
new
Date
());
oaMessageEntity
.
setFlowMess
(
1
);
oaMessageEntity
.
setViewType
(
0
);
oaMessageEntity
.
setStatus
(
0
);
oaMessageEntity
.
setErrorCount
(
0
);
oaMessageEntity
.
setMessageCreateTime
(
new
Date
());
oaMessageEntity
.
setAllowMobile
(
0
);
oaMessageEntity
.
setSenderCode
(
"fb77aaf5-ad40-4307-9ca6-2e1cbd29ffee"
);
oaMessageEntity
.
setTemp1
(
taskObject
.
get
(
"processInstance"
).
getUuid
(
"id"
).
toString
());
oaMessageDao
.
addOaMessage
(
oaMessageEntity
);
}
TranspondApprovalStaffEntity
transpondApprovalStaffEntity
=
new
TranspondApprovalStaffEntity
();
transpondApprovalStaffEntity
.
setFinishTime
(
new
Date
());
transpondApprovalStaffEntity
.
setOperation
(
TranspondApprovalStaffEntity
.
operationType
.
copy
);
transpondApprovalStaffEntity
.
setSubmitId
(
taskObject
.
get
(
"bizProcess"
).
get
(
"submitter"
).
getUuid
(
"id"
));
transpondApprovalStaffEntity
.
setProcessInstanceId
(
taskObject
.
get
(
"processInstance"
).
getUuid
(
"id"
));
transpondApprovalStaffEntity
.
setStaffJson
(
approvalCopyEntity
.
getStaffJson
());
transpondApprovalStaffDao
.
addTranspondApprovalStaffEntity
(
transpondApprovalStaffEntity
);
}
}
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/ApprovalTranspondServiceImpl.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
service
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.UUID
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.beecode.bap.staff.BapContext
;
import
com.beecode.bap.staff.service.StaffService
;
import
com.beecode.bcp.task.core.Task
;
import
com.beecode.bcp.task.oa.dao.OaMessageDao
;
import
com.beecode.bcp.task.oa.entity.OaMessageEntity
;
import
com.beecode.bcp.task.service.TaskService
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.inz.workflow.dao.TranspondApprovalStaffDao
;
import
com.beecode.inz.workflow.dao.TranspondApprovalSuggestionDao
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.entity.TranspondApprovalStaffEntity
;
import
com.beecode.inz.workflow.entity.TranspondApprovalSuggestionEntity
;
import
com.beecode.inz.workflow.service.ApprovalTranspondService
;
import
com.beecode.inz.workflow.service.InzBizProcessService
;
import
com.beecode.inz.workflow.service.InzWorkflowService
;
@Service
public
class
ApprovalTranspondServiceImpl
implements
ApprovalTranspondService
{
@Autowired
private
TaskService
taskService
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
OaMessageDao
oaMessageDao
;
@Autowired
private
BapContext
bapContext
;
@Autowired
private
InzBizProcessService
inzBizProcessService
;
@Autowired
private
InzWorkflowService
inzWorkflowService
;
@Autowired
private
TranspondApprovalSuggestionDao
transpondApprovalSuggestionDao
;
@Autowired
private
TranspondApprovalStaffDao
transpondApprovalStaffDao
;
@Override
@Transactional
public
void
approvalTranspond
(
UUID
bizProcessId
,
List
<
UUID
>
actorIds
,
String
type
,
String
url_
,
String
suggestion
)
{
UUID
loginActorId
=
null
;
try
{
loginActorId
=
bapContext
.
getCurrentStaff
().
getUuid
(
"id"
);
}
catch
(
Exception
e1
)
{
e1
.
printStackTrace
();
}
InzBizProcess
inzBizProcess
=
inzBizProcessService
.
getBizProcessById
(
bizProcessId
);
if
(
"transpondOneself"
.
equals
(
type
)
||
"transpondReject"
.
equals
(
type
)){
actorIds
.
add
(
inzBizProcess
.
getSubmitter
().
getUuid
(
"id"
));
}
else
{
TranspondApprovalStaffEntity
transpondApprovalStaffEntity
=
new
TranspondApprovalStaffEntity
();
transpondApprovalStaffEntity
.
setFinishTime
(
new
Date
());
transpondApprovalStaffEntity
.
setOperation
(
TranspondApprovalStaffEntity
.
operationType
.
transpond
);
transpondApprovalStaffEntity
.
setSubmitId
(
loginActorId
);
transpondApprovalStaffEntity
.
setProcessInstanceId
(
inzBizProcess
.
getProcessInstance
().
getId
());
transpondApprovalStaffEntity
.
setStaffJson
(
actorIds
.
toString
());
transpondApprovalStaffEntity
.
setSuggestion
(
suggestion
);
transpondApprovalStaffDao
.
addTranspondApprovalStaffEntity
(
transpondApprovalStaffEntity
);
}
for
(
UUID
actorId
:
actorIds
){
List
<
KObject
>
tasks
=
taskService
.
listTaskByProcessInstanceId
(
inzBizProcess
.
getProcessInstance
().
getId
());
if
(
tasks
.
size
()
>
0
){
KObject
taskObject
=
tasks
.
get
(
0
);
String
bizObjectName
=
taskObject
.
getString
(
"bizObjectName"
);
String
[]
names
=
bizObjectName
.
split
(
"-"
);
KObject
staff
=
staffService
.
getById
(
actorId
);
OaMessageEntity
oaMessageEntity
=
new
OaMessageEntity
();
oaMessageEntity
.
setSender
(
"宝贝王系统"
);
oaMessageEntity
.
setSenderTime
(
new
Date
());
if
(
names
.
length
>
0
){
oaMessageEntity
.
setFlowType
(
names
[
0
]);
}
else
{
oaMessageEntity
.
setFlowType
(
taskObject
.
getString
(
Task
.
BIZ_TYPE_NAME
));
}
oaMessageEntity
.
setFlowId
(
taskObject
.
get
(
"processInstance"
).
getUuid
(
"id"
).
toString
());
oaMessageEntity
.
setTitle
(
bizObjectName
.
replaceAll
(
"-"
,
" "
));
oaMessageEntity
.
setNodeName
(
taskObject
.
get
(
"workItem"
).
getString
(
"workItemName"
));
String
url
=
null
;
if
(
"transpondReject"
.
equals
(
type
)){
url
=
url_
;
}
else
{
url
=
"/app/ApprovalCopy?bizTypeName="
+
taskObject
.
getString
(
Task
.
BIZ_TYPE_NAME
)+
"&bizDataId="
+
taskObject
.
getUuid
(
"bizDataId"
).
toString
()+
"&show=true&type=transpond"
;
}
oaMessageEntity
.
setPtpUrl
(
url
);
oaMessageEntity
.
setUserId
(
staff
.
get
(
"user"
).
getString
(
"username"
));
oaMessageEntity
.
setCreator
(
taskObject
.
get
(
"bizProcess"
).
get
(
"submitter"
).
get
(
"user"
).
getString
(
"username"
));
oaMessageEntity
.
setCreateTime
(
taskObject
.
get
(
"processInstance"
).
getDate
(
"startTime"
));
oaMessageEntity
.
setOperateTime
(
new
Date
());
oaMessageEntity
.
setFlowMess
(
1
);
oaMessageEntity
.
setViewType
(
0
);
oaMessageEntity
.
setStatus
(
0
);
oaMessageEntity
.
setErrorCount
(
0
);
oaMessageEntity
.
setMessageCreateTime
(
new
Date
());
oaMessageEntity
.
setAllowMobile
(
0
);
oaMessageEntity
.
setSenderCode
(
"fb77aaf5-ad40-4307-9ca6-2e1cbd29ffee"
);
oaMessageEntity
.
setTemp1
(
taskObject
.
get
(
"processInstance"
).
getUuid
(
"id"
).
toString
());
oaMessageDao
.
addOaMessage
(
oaMessageEntity
);
}
}
}
@Override
@Transactional
public
void
completedApprovalTranspond
(
UUID
processInstanceId
,
String
suggestion
)
{
UUID
actorId
=
null
;
try
{
actorId
=
bapContext
.
getCurrentStaff
().
getUuid
(
"id"
);
}
catch
(
Exception
e1
)
{
// TODO Auto-generated catch block
e1
.
printStackTrace
();
}
TranspondApprovalSuggestionEntity
transpondApprovalSuggestionEntity
=
new
TranspondApprovalSuggestionEntity
();
if
(
suggestion
!=
null
){
transpondApprovalSuggestionEntity
.
setSuggestion
(
suggestion
);
}
transpondApprovalSuggestionEntity
.
setFinishTime
(
new
Date
());
transpondApprovalSuggestionEntity
.
setOperation
(
TranspondApprovalSuggestionEntity
.
operationType
.
receive
);
transpondApprovalSuggestionEntity
.
setSubmitId
(
actorId
);
transpondApprovalSuggestionEntity
.
setProcessInstanceId
(
processInstanceId
);
transpondApprovalSuggestionDao
.
addTranspondApprovalSuggestionEntity
(
transpondApprovalSuggestionEntity
);
KObject
staff
=
staffService
.
getById
(
actorId
);
String
flowId
=
processInstanceId
.
toString
();
String
userId
=
staff
.
get
(
"user"
).
getString
(
"username"
);
OaMessageEntity
oaMessageEntity
=
oaMessageDao
.
getOaMessageByFlowMessAndByFlowIdAndUserId
(
1
,
flowId
,
userId
);
if
(
oaMessageEntity
!=
null
){
OaMessageEntity
oaMessageEntity1
=
new
OaMessageEntity
();
BeanUtils
.
copyProperties
(
oaMessageEntity
,
oaMessageEntity1
);
oaMessageEntity1
.
setPtpUrl
(
oaMessageEntity
.
getPtpUrl
()+
"&show=false"
);
oaMessageEntity1
.
setMessageId
(
null
);
oaMessageEntity1
.
setFlowMess
(
2
);
oaMessageEntity1
.
setStatus
(
0
);
oaMessageEntity1
.
setOperateTime
(
new
Date
());
// oaMessageEntity.setFlowMess(2);
// oaMessageEntity.setOperateTime(new Date());
// oaMessageDao.updateOaMessage(oaMessageEntity);
oaMessageDao
.
addOaMessage
(
oaMessageEntity1
);
}
}
@Override
public
void
startAutoCompleteApproval
(
UUID
bizProcessId
)
{
InzBizProcess
inzBizProcess
=
inzBizProcessService
.
getBizProcessById
(
bizProcessId
);
inzWorkflowService
.
startAutoCompleteWorkflow
(
inzBizProcess
.
getProcessInstance
());
}
@Override
@Transactional
public
void
approvalTranspond
(
UUID
bizProcessId
,
UUID
loginActorId
,
List
<
UUID
>
actorIds
,
String
suggestion
)
{
InzBizProcess
inzBizProcess
=
inzBizProcessService
.
getBizProcessById
(
bizProcessId
);
TranspondApprovalStaffEntity
transpondApprovalStaffEntity
=
new
TranspondApprovalStaffEntity
();
transpondApprovalStaffEntity
.
setFinishTime
(
new
Date
());
transpondApprovalStaffEntity
.
setOperation
(
TranspondApprovalStaffEntity
.
operationType
.
transpond
);
transpondApprovalStaffEntity
.
setSubmitId
(
loginActorId
);
transpondApprovalStaffEntity
.
setProcessInstanceId
(
inzBizProcess
.
getProcessInstance
().
getId
());
transpondApprovalStaffEntity
.
setStaffJson
(
actorIds
.
toString
());
transpondApprovalStaffEntity
.
setSuggestion
(
suggestion
);
transpondApprovalStaffDao
.
addTranspondApprovalStaffEntity
(
transpondApprovalStaffEntity
);
for
(
UUID
actorId
:
actorIds
){
List
<
KObject
>
tasks
=
taskService
.
listTaskByProcessInstanceId
(
inzBizProcess
.
getProcessInstance
().
getId
());
if
(
tasks
.
size
()
>
0
){
KObject
taskObject
=
tasks
.
get
(
0
);
String
bizObjectName
=
taskObject
.
getString
(
"bizObjectName"
);
String
[]
names
=
bizObjectName
.
split
(
"-"
);
KObject
staff
=
staffService
.
getById
(
actorId
);
OaMessageEntity
oaMessageEntity
=
new
OaMessageEntity
();
oaMessageEntity
.
setSender
(
"宝贝王系统"
);
oaMessageEntity
.
setSenderTime
(
new
Date
());
if
(
names
.
length
>
0
){
oaMessageEntity
.
setFlowType
(
names
[
0
]);
}
else
{
oaMessageEntity
.
setFlowType
(
taskObject
.
getString
(
Task
.
BIZ_TYPE_NAME
));
}
oaMessageEntity
.
setFlowId
(
taskObject
.
get
(
"processInstance"
).
getUuid
(
"id"
).
toString
());
oaMessageEntity
.
setTitle
(
bizObjectName
.
replaceAll
(
"-"
,
" "
));
oaMessageEntity
.
setNodeName
(
taskObject
.
get
(
"workItem"
).
getString
(
"workItemName"
));
String
url
=
null
;
url
=
"/app/ApprovalCopy?bizTypeName="
+
taskObject
.
getString
(
Task
.
BIZ_TYPE_NAME
)+
"&bizDataId="
+
taskObject
.
getUuid
(
"bizDataId"
).
toString
()+
"&show=true&type=transpond"
;
oaMessageEntity
.
setPtpUrl
(
url
);
oaMessageEntity
.
setUserId
(
staff
.
get
(
"user"
).
getString
(
"username"
));
oaMessageEntity
.
setCreator
(
taskObject
.
get
(
"bizProcess"
).
get
(
"submitter"
).
get
(
"user"
).
getString
(
"username"
));
oaMessageEntity
.
setCreateTime
(
taskObject
.
get
(
"processInstance"
).
getDate
(
"startTime"
));
oaMessageEntity
.
setOperateTime
(
new
Date
());
oaMessageEntity
.
setFlowMess
(
1
);
oaMessageEntity
.
setViewType
(
0
);
oaMessageEntity
.
setStatus
(
0
);
oaMessageEntity
.
setErrorCount
(
0
);
oaMessageEntity
.
setMessageCreateTime
(
new
Date
());
oaMessageEntity
.
setAllowMobile
(
0
);
oaMessageEntity
.
setSenderCode
(
"fb77aaf5-ad40-4307-9ca6-2e1cbd29ffee"
);
oaMessageEntity
.
setTemp1
(
taskObject
.
get
(
"processInstance"
).
getUuid
(
"id"
).
toString
());
oaMessageDao
.
addOaMessage
(
oaMessageEntity
);
}
}
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/FlowChartInfoServiceImpl.java
View file @
ef3b44a9
...
...
@@ -5,8 +5,6 @@ import java.util.Date;
import
java.util.List
;
import
java.util.UUID
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.Assert
;
...
...
@@ -73,35 +71,23 @@ public class FlowChartInfoServiceImpl implements FlowChartInfoService{
submitActor
.
setActorId
(
inzBizProcess
.
getSubmitter
().
getUuid
(
"id"
));
nodes
.
add
(
generateStartNode
(
triggerAction
,
submitActor
,
startTime
));
String
origionDefinition
=
workflow
.
getOriginalDefinition
();
JSONObject
origionDefinitionJson
=
new
JSONObject
(
origionDefinition
);
JSONArray
nodeArray
=
origionDefinitionJson
.
getJSONArray
(
"tasks"
);
List
<
InzApprovalTask
>
allTask
=
new
ArrayList
<>();
allTask
.
addAll
(
inzApprovalTaskService
.
listApprovedTask
(
inzBizProcess
.
getProcessInstance
().
getId
()));
allTask
.
addAll
(
inzApprovalTaskService
.
listToDoTask
(
inzBizProcess
.
getProcessInstance
().
getId
()));
allTask
=
inzApprovalTaskService
.
generateParenChildRelation
(
allTask
);
for
(
int
i
=
0
;
i
<
nodeArray
.
length
()
;
i
++){
String
nodeId
=
nodeArray
.
getJSONObject
(
i
).
getString
(
"id"
);
String
name
=
nodeArray
.
getJSONObject
(
i
).
getString
(
"name"
);
String
type
=
nodeArray
.
getJSONObject
(
i
).
getString
(
"type"
);
List
<
InzApprovalTask
>
tempTasks
=
new
ArrayList
<>();
for
(
InzApprovalTask
task
:
allTask
){
if
(
nodeId
.
equals
(
task
.
getWorkItem
().
getNodeId
())){
tempTasks
.
add
(
task
);
}
}
if
(
tempTasks
.
size
()
==
0
){
continue
;
}
boolean
last
=
false
;
if
(
i
==
nodeArray
.
length
()
-
1
){
last
=
true
;
}
nodes
.
add
(
generateNodeInfo
(
nodeId
,
name
,
type
,
last
,
tempTasks
));
for
(
int
i
=
0
,
length
=
allTask
.
size
()
;
i
<
length
;
i
++)
{
String
nodeId
=
allTask
.
get
(
i
).
getWorkItem
().
getNodeId
();
String
name
=
allTask
.
get
(
i
).
getWorkItem
().
getWorkItemName
();
// ExtensionNode extensionNode = allTask.get(i).getWorkItem().getTaskNode().getExtensionNode();
String
type
=
"userTask"
;
// if(extensionNode instanceof UserTaskNode) {
// type = ((UserTaskNode)extensionNode).getTaskType();
// }
List
<
InzApprovalTask
>
tempTasks
=
new
ArrayList
<
InzApprovalTask
>();
tempTasks
.
add
(
allTask
.
get
(
i
));
nodes
.
add
(
generateNodeInfo
(
nodeId
,
name
,
type
,
false
,
tempTasks
));
}
return
chartInfo
;
}
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/InzApprovalTaskServiceImpl.java
View file @
ef3b44a9
...
...
@@ -7,24 +7,33 @@ import java.util.List;
import
java.util.Map
;
import
java.util.UUID
;
import
org.json.JSONObject
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.beecode.bap.staff.BapContext
;
import
com.beecode.bap.workflow.dao.CommonTaskDao
;
import
com.beecode.bap.workflow.service.BizProcessService
;
import
com.beecode.bap.workflow.service.BizTaskService
;
import
com.beecode.bcp.task.assignment.Actor
;
import
com.beecode.bcp.task.core.Task
;
import
com.beecode.bcp.task.core.TaskState
;
import
com.beecode.bcp.task.define.TaskDefinition
;
import
com.beecode.bcp.task.service.TaskDefinitionService
;
import
com.beecode.bcp.type.KClass
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.bcp.workflow.core.ProcessInstance
;
import
com.beecode.bcp.workflow.core.WorkItem
;
import
com.beecode.bcp.workflow.exception.ParticipantNotFoundException
;
import
com.beecode.bcp.workflow.exception.WorkflowRuntimeException
;
import
com.beecode.bcp.workflow.task.core.WorkflowTask
;
import
com.beecode.inz.workflow.dao.CommonDao
;
import
com.beecode.inz.workflow.dao.InzApprovalTaskDao
;
import
com.beecode.inz.workflow.entity.InzApprovalTask
;
import
com.beecode.inz.workflow.exception.WorkflowExceptionCode
;
import
com.beecode.inz.workflow.service.ApprovalSendCopyService
;
import
com.beecode.inz.workflow.service.InzApprovalTaskService
;
import
com.beecode.inz.workflow.util.InzApprovalTaskConstants
;
@Service
...
...
@@ -42,11 +51,19 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
private
InzApprovalTaskDao
inzApprovalTaskDao
;
@Autowired
private
BizProcessService
bizProcessService
;
@Autowired
private
CommonDao
commonDao
;
@Autowired
private
TaskDefinitionService
taskDefinitionService
;
@Autowired
private
ApprovalSendCopyService
approvalSendCopyService
;
@Autowired
private
CommonTaskDao
bizTaskDao
;
public
List
<
InzApprovalTask
>
generateParenChildRelation
(
List
<
InzApprovalTask
>
tasks
){
Map
<
UUID
,
InzApprovalTask
>
parentMap
=
new
HashMap
<>();
...
...
@@ -58,20 +75,18 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
if
(
null
==
parent
){
parent
=
(
InzApprovalTask
)
task
.
geParent
();
parentMap
.
put
(
parent
.
getId
(),
parent
);
List
<
Task
>
children
=
new
ArrayList
<
Task
>();
parent
.
setChildren
(
children
);
}
else
if
(
null
==
parent
.
getChildren
()){
List
<
Task
>
children
=
new
ArrayList
<
Task
>();
parent
.
setChildren
(
children
);
}
parent
.
getChildren
().
add
(
task
);
parent
.
addChildren
(
task
);
}
};
List
<
InzApprovalTask
>
result
=
new
ArrayList
<>(
parentMap
.
values
());
List
<
InzApprovalTask
>
result
=
new
ArrayList
<
InzApprovalTask
>(
parentMap
.
values
());
result
.
sort
(
new
Comparator
<
Task
>()
{
@Override
public
int
compare
(
Task
task1
,
Task
task2
)
{
return
task1
.
getStartTime
().
compareTo
(
task2
.
getStartTime
());
}
});
for
(
InzApprovalTask
task
:
result
){
if
(
null
==
task
.
getChildren
()
||
task
.
getChildren
().
isEmpty
()){
continue
;
...
...
@@ -100,6 +115,12 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
@Override
public
void
completeTask
(
UUID
taskId
,
int
result
,
String
suggestions
)
{
completeTask
(
taskId
,
result
,
suggestions
,
null
,
null
);
}
@Override
public
void
completeTask
(
UUID
taskId
,
int
result
,
String
suggestions
,
Map
<
String
,
String
>
argus
,
String
attribute1
)
{
// TaskDefinition taskDefinition = Amino.getApplicationMetadataContext().getBean(InzApprovalTaskConstants.TASK_DEFINITION_NAME, TaskDefinition.class);
TaskDefinition
taskDefinition
=
taskDefinitionService
.
getByName
(
InzApprovalTaskConstants
.
TASK_DEFINITION_NAME
);
UUID
actorId
=
null
;
try
{
...
...
@@ -109,7 +130,25 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
e1
.
printStackTrace
();
}
try
{
bizTaskService
.
completeTask
(
taskDefinition
,
taskId
,
actorId
,
result
,
suggestions
);
KClass
taskClass
=
taskDefinition
.
getKClass
();
KObject
object
=
bizTaskDao
.
getTask
(
taskClass
,
taskId
);
ProcessInstance
processInstance
=
new
ProcessInstance
(
object
.
get
(
WorkflowTask
.
PROCESSINSTANCE
));
String
nodeId
=
object
.
get
(
WorkflowTask
.
WORKITEM
).
getString
(
WorkItem
.
ATTR_NODEID
);
String
nodeParam
=
null
;
if
(
nodeId
.
contains
(
"-"
)){
nodeParam
=
"n_"
+
String
.
valueOf
(
nodeId
).
replaceAll
(
"-"
,
"n"
)+
"_staffs"
;
}
else
{
nodeParam
=
"n_"
+
nodeId
+
"_staffs"
;
}
Object
nodeInfo
=
processInstance
.
getParameterValue
(
nodeParam
);
if
(
nodeInfo
!=
null
&&
!
nodeInfo
.
toString
().
equals
(
""
)){
argus
.
put
(
nodeParam
,
nodeInfo
.
toString
());
}
if
(
null
!=
attribute1
){
argus
.
put
(
"attribute1"
,
attribute1
);
}
bizTaskService
.
completeTask
(
taskDefinition
,
taskId
,
actorId
,
result
,
suggestions
,
argus
);
approvalSendCopyService
.
sendApprovalCopy
(
taskId
,
result
);
}
catch
(
ParticipantNotFoundException
e
)
{
logger
.
error
(
"ParticipantNotFoundException"
,
e
);
throw
new
WorkflowRuntimeException
(
WorkflowExceptionCode
.
PARTICIPANT_NOTFOUND_EXCEPTION
);
...
...
@@ -131,12 +170,24 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
@Override
public
List
<
InzApprovalTask
>
listToDoTask
(
UUID
processInstanceId
)
{
try
{
final
UUID
staffId
=
bapContext
.
getCurrentStaff
().
getUuid
(
"id"
);
// final UUID staffId = bapContext.getCurrentStaff().getUuid("id");
KObject
key
=
bapContext
.
getCurrentStaff
();
UUID
keyId
=
null
;
if
(
null
!=
key
){
keyId
=
key
.
getUuid
(
"id"
);
}
else
{
try
{
keyId
=
bapContext
.
getCurrentUser
().
getId
();
}
catch
(
Exception
e
){
logger
.
info
(
"获取待办任务列表时,没有当前登录用户,暂时给随机值"
);
keyId
=
UUID
.
randomUUID
();
}
}
List
<
InzApprovalTask
>
tasks
=
inzApprovalTaskDao
.
listToDoTask
(
processInstanceId
);
if
(
null
==
tasks
||
tasks
.
size
()
==
0
){
return
new
ArrayList
<>();
}
generateCanApprove
(
tasks
,
staff
Id
);
generateCanApprove
(
tasks
,
key
Id
);
return
tasks
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
...
...
@@ -182,17 +233,28 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
}
@Override
public
List
<
InzApprovalTask
>
getApprovalTasksByPend
()
{
UUID
actorId
=
null
;
try
{
actorId
=
bapContext
.
getCurrentStaff
().
getUuid
(
"id"
);
List
<
InzApprovalTask
>
tasks
=
inzApprovalTaskDao
.
getApprovalTasksByPend
(
actorId
);
generateCanApprove
(
tasks
,
actorId
);
return
tasks
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
new
RuntimeException
(
e
);
public
JSONObject
getLastTaskByBizDataId
(
UUID
bizDataId
)
{
List
<
KObject
>
kObjects
=
bizProcessService
.
listBizProcessKObject
(
bizDataId
);
if
(
null
==
kObjects
||
kObjects
.
size
()
==
0
){
return
null
;
}
kObjects
.
sort
((
a
,
b
)
->
b
.
getDate
(
"submitTime"
).
after
(
a
.
getDate
(
"submitTime"
))?
1
:-
1
);
KObject
lastOne
=
kObjects
.
get
(
0
);
KObject
processInstance
=
lastOne
.
get
(
"processInstance"
);
List
<
InzApprovalTask
>
tasks
=
listApprovedTask
(
processInstance
.
getUuid
(
"id"
));
InzApprovalTask
key
=
tasks
.
size
()>
0
?
tasks
.
get
(
tasks
.
size
()-
1
):
null
;
JSONObject
result
=
new
JSONObject
();
int
resultState
=
lastOne
.
getInt
(
"workflowState"
);
result
.
put
(
"workflowState"
,
resultState
);
if
(
key
==
null
){
result
.
put
(
"taskResult"
,
"1"
);
result
.
put
(
"suggestion"
,
"同意"
);
}
else
{
result
.
put
(
"taskResult"
,
key
.
getResult
());
result
.
put
(
"suggestion"
,
key
.
getSuggestion
());
}
return
result
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/InzBizProcessServiceImpl.java
View file @
ef3b44a9
...
...
@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
com.beecode.bap.workflow.core.BizProcess
;
import
com.beecode.bap.workflow.core.BizProcessState
;
import
com.beecode.bap.workflow.service.BizProcessService
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
...
...
@@ -46,5 +47,16 @@ public class InzBizProcessServiceImpl implements InzBizProcessService {
return
kObjects
.
stream
().
map
(
InzBizProcess:
:
new
).
collect
(
Collectors
.
toList
());
}
@Override
public
List
<
InzBizProcess
>
listBizProcessByBizDataIdAndStateAndNoProcessInstanceId
(
UUID
bizDataId
,
BizProcessState
bizProcessState
,
UUID
processInstanceId
)
{
List
<
KObject
>
kObjects
=
bizProcessService
.
listBizProcessByBizDataIdAndStateAndNoProcessInstanceId
(
bizDataId
,
bizProcessState
,
processInstanceId
);
if
(
null
==
kObjects
||
kObjects
.
size
()
==
0
){
return
new
ArrayList
<>();
}
return
kObjects
.
stream
().
map
(
InzBizProcess:
:
new
).
collect
(
Collectors
.
toList
());
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/InzWorkflowDefinitionServiceImpl.java
View file @
ef3b44a9
...
...
@@ -68,9 +68,9 @@ public class InzWorkflowDefinitionServiceImpl implements InzWorkflowDefinitionSe
String
bizTypeName
=
definitionContent
.
getJSONObject
(
InzWorkflowDefinition
.
WORKFLOW_CONFIG
).
getJSONObject
(
"triggerCondition"
).
getString
(
"bizTypeName"
);
kObject
.
set
(
InzWorkflowDefinition
.
ATTR_BIZTYPE_NAME
,
bizTypeName
);
String
workflowDefinitionName
=
(
kObject
.
getString
(
InzWorkflowDefinition
.
ATTR_BIZTYPE_NAME
)
+
"_workflow_definition"
+
"_"
+
UUID
.
randomUUID
().
toString
()).
toUpperCase
();
JSONObject
bpmnJson
=
WorkflowGenerator
.
getWorkflow
(
workflowDefinitionName
,
definitionContent
.
getJSONArray
(
"tasks"
)
);
//
String workflowDefinitionName = (kObject.getString(InzWorkflowDefinition.ATTR_BIZTYPE_NAME) + "_workflow_definition"+"_"+UUID.randomUUID().toString()).toUpperCase();
//JSONObject bpmnJson = WorkflowGenerator.getWorkflow(workflowDefinitionName, definitionContent.getJSONArray("tasks"));
JSONObject
bpmnJson
=
WorkflowGenerator
.
getWorkflow
(
kObject
);
WorkflowObj
workflowObj
=
null
;
try
{
workflowObj
=
objectMapper
.
readValue
(
bpmnJson
.
toString
(),
WorkflowObj
.
class
);
...
...
@@ -135,9 +135,10 @@ public class InzWorkflowDefinitionServiceImpl implements InzWorkflowDefinitionSe
KObject
kObject
=
definition
.
toKObject
();
kObject
.
set
(
InzWorkflowDefinition
.
ATTR_DEFINITION_STATE
,
InzWorkflowDefinitionStateEnum
.
ENABLED
.
getValue
());
JSONObject
definitionContent
=
new
JSONObject
(
kObject
.
getString
(
InzWorkflowDefinition
.
ATTR_DEFINITION_CONTENT
));
String
workflowDefinitionName
=
kObject
.
getString
(
InzWorkflowDefinition
.
ATTR_NAME
);
JSONObject
bpmnJson
=
WorkflowGenerator
.
getWorkflow
(
workflowDefinitionName
,
definitionContent
.
getJSONArray
(
"tasks"
));
// JSONObject definitionContent = new JSONObject(kObject.getString(InzWorkflowDefinition.ATTR_DEFINITION_CONTENT));
//String workflowDefinitionName = kObject.getString(InzWorkflowDefinition.ATTR_NAME);
// JSONObject bpmnJson = WorkflowGenerator.getWorkflow(workflowDefinitionName, definitionContent.getJSONArray("tasks"));
JSONObject
bpmnJson
=
WorkflowGenerator
.
getWorkflow
(
kObject
);
WorkflowObj
workflowObj
=
null
;
try
{
workflowObj
=
objectMapper
.
readValue
(
bpmnJson
.
toString
(),
WorkflowObj
.
class
);
...
...
@@ -151,12 +152,12 @@ public class InzWorkflowDefinitionServiceImpl implements InzWorkflowDefinitionSe
extendData
.
put
(
"workflowDefinitionId"
,
kObject
.
getUuid
(
"id"
).
toString
());
workflowDefinitionService
.
updateWorkflowDefinition
(
workflowObj
,
kObject
);
if
(!
deploymentService
.
isDeployed
(
definition
)){
//未发布,需要执行发布
//
if(!deploymentService.isDeployed(definition)){//未发布,需要执行发布
Workflow
workflow
=
deploymentService
.
deploy
(
definition
);
if
(
null
!=
workflow
){
extendData
.
put
(
"workflowId"
,
workflow
.
getId
());
}
}
//
}
KObject
log
=
logKClass
.
newInstance
();
log
.
set
(
"module"
,
LOG_MODULE
);
log
.
set
(
"businessObjectId"
,
kObject
.
getUuid
(
"id"
).
toString
());
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/InzWorkflowServiceImpl.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
service
;
import
java.time.Instant
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
...
...
@@ -18,18 +19,27 @@ import org.springframework.transaction.annotation.Transactional;
import
org.springframework.util.Assert
;
import
com.beecode.amino.core.Amino
;
import
com.beecode.bap.bill.WorkflowBillConstants.FlowAttributes
;
import
com.beecode.bap.staff.BapContext
;
import
com.beecode.bap.staff.service.StaffService
;
import
com.beecode.bap.workflow.core.BizProcess
;
import
com.beecode.bap.workflow.core.BizProcessState
;
import
com.beecode.bap.workflow.service.BapWorkflowService
;
import
com.beecode.bap.workflow.service.BizProcessService
;
import
com.beecode.bcp.core.context.AminoContextHolder
;
import
com.beecode.bcp.task.core.Task
;
import
com.beecode.bcp.task.service.TaskService
;
import
com.beecode.bcp.type.KClass
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.bcp.workflow.core.ProcessInstance
;
import
com.beecode.bcp.workflow.core.WorkItem
;
import
com.beecode.bcp.workflow.entity.WorkflowRejectRecord
;
import
com.beecode.bcp.workflow.exception.ParticipantNotFoundException
;
import
com.beecode.bcp.workflow.exception.WorkflowRuntimeException
;
import
com.beecode.bcp.workflow.service.ProcessService
;
import
com.beecode.bcp.workflow.service.WorkflowRejectRecordService
;
import
com.beecode.bcp.workflow.task.core.WorkflowTask
;
import
com.beecode.bcp.workflow.task.service.WorkflowTaskService
;
import
com.beecode.inz.basis.condition.ConditionExecutor
;
import
com.beecode.inz.basis.condition.FieldValueRelation
;
import
com.beecode.inz.basis.condition.GroupCondition
;
...
...
@@ -38,17 +48,20 @@ import com.beecode.inz.basis.condition.SingleCondition;
import
com.beecode.inz.workflow.config.WorkflowConfigurationDefinition
;
import
com.beecode.inz.workflow.core.InzWorkflowDefinitionStateEnum
;
import
com.beecode.inz.workflow.dao.CommonDao
;
import
com.beecode.inz.workflow.entity.ApprovalCopyEntity
;
import
com.beecode.inz.workflow.entity.InzApprovalTask
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.entity.InzWorkflowBiztrait
;
import
com.beecode.inz.workflow.entity.InzWorkflowDefinition
;
import
com.beecode.inz.workflow.exception.StartWorkflowParticipantNotFoundException
;
import
com.beecode.inz.workflow.exception.WorkflowExceptionCode
;
import
com.beecode.inz.workflow.service.ApprovalCopyService
;
import
com.beecode.inz.workflow.service.BizTypeWorkflowConfigurationService
;
import
com.beecode.inz.workflow.service.InzApprovalTaskService
;
import
com.beecode.inz.workflow.service.InzWorkflowDefinitionService
;
import
com.beecode.inz.workflow.service.InzWorkflowService
;
import
com.beecode.inz.workflow.util.InzBizProcessConstants
;
@Service
public
class
InzWorkflowServiceImpl
implements
InzWorkflowService
{
...
...
@@ -67,14 +80,33 @@ public class InzWorkflowServiceImpl implements InzWorkflowService{
private
InzApprovalTaskService
inzApprovalTaskService
;
@Autowired
private
BapContext
bapContext
;
private
CommonDao
commonDao
;
@Autowired
private
CommonDao
commonDao
;
private
StaffService
staffService
;
@Autowired
private
BapContext
bapContext
;
@Autowired
private
BizTypeWorkflowConfigurationService
bizTypeWorkflowConfigurationService
;
@Autowired
private
WorkflowRejectRecordService
workflowRejectRecordService
;
@Autowired
private
TaskService
taskService
;
@Autowired
private
ProcessService
processService
;
@Autowired
private
WorkflowTaskService
workflowTaskService
;
@Autowired
private
ApprovalCopyService
approvalCopyService
;
@Override
public
boolean
canStartWotkflow
(
String
actionName
,
String
bizTypeName
,
KObject
bizData
)
{
WorkflowConfigurationDefinition
config
=
bizTypeWorkflowConfigurationService
.
getBizTypeWorkflowConfigurationByBizTypeName
(
bizTypeName
);
...
...
@@ -129,17 +161,73 @@ public class InzWorkflowServiceImpl implements InzWorkflowService{
return
true
;
}
/**
* 根据指定modelname和id,找到对应的对象,检查无误开始一个工作流
* @param actionName
* @param bizTypeName
* @param bizObjectName
* @param modelName kclass name
* @param modelId kobject id
* @return 200:正常开始;
* 503:检查失败,无法开始工作流;
* @throws WorkflowRuntimeException
*/
@Transactional
@Override
public
void
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
KObject
bizData
)
throws
WorkflowRuntimeException
{
this
.
startWorkflow
(
actionName
,
bizTypeName
,
bizObjectName
,
null
,
bizData
);
public
int
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
String
modelName
,
UUID
modelId
)
throws
WorkflowRuntimeException
{
return
startWorkflow
(
actionName
,
bizTypeName
,
bizObjectName
,
modelName
,
modelId
,
null
);
}
@Transactional
@Override
public
int
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
String
modelName
,
UUID
modelId
,
String
bizAffiliationName
)
throws
WorkflowRuntimeException
{
int
resultValue
=
200
;
//1 找到对应的对象
KObject
object
=
commonDao
.
load
(
modelName
,
modelId
);
if
(
object
!=
null
)
{
if
(
canStartWotkflow
(
actionName
,
bizTypeName
,
object
))
{
this
.
startWorkflow
(
actionName
,
bizTypeName
,
bizObjectName
,
null
,
object
,
null
,
bizAffiliationName
);
}
else
{
resultValue
=
-
503
;
}
}
else
{
// 找不到对象报错
throw
new
WorkflowRuntimeException
(
"KObject is not found:"
+
modelName
+
"#"
+
modelId
);
}
return
resultValue
;
}
@Transactional
@Override
public
void
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
KObject
bizData
)
throws
WorkflowRuntimeException
{
startWorkflow
(
actionName
,
bizTypeName
,
bizObjectName
,
null
,
bizData
,
null
);
}
@Transactional
@Override
public
void
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
KObject
bizData
,
Map
<
String
,
Object
>
params
)
throws
WorkflowRuntimeException
{
startWorkflow
(
actionName
,
bizTypeName
,
bizObjectName
,
null
,
bizData
,
params
);
}
@Transactional
@Override
public
void
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
String
bizProcessName
,
KObject
bizData
)
throws
WorkflowRuntimeException
{
startWorkflow
(
actionName
,
bizTypeName
,
bizObjectName
,
bizProcessName
,
bizData
,
null
);
}
@Transactional
@Override
public
void
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
String
bizProcessName
,
KObject
bizData
,
Map
<
String
,
Object
>
params
)
throws
WorkflowRuntimeException
{
startWorkflow
(
actionName
,
bizTypeName
,
bizObjectName
,
bizProcessName
,
bizData
,
null
,
null
);
}
@Transactional
@Override
public
void
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
String
bizProcessName
,
KObject
bizData
,
Map
<
String
,
Object
>
params
,
String
bizAffiliationName
)
throws
WorkflowRuntimeException
{
WorkflowConfigurationDefinition
config
=
bizTypeWorkflowConfigurationService
.
getBizTypeWorkflowConfigurationByBizTypeName
(
bizTypeName
);
Assert
.
notNull
(
config
,
"param 'config' must not be null"
);
List
<
InzWorkflowDefinition
>
defeinitions
=
inzWorkflowDefinitionService
.
listWorkflowDefinitionByBizTypeName
(
bizTypeName
,
true
);
...
...
@@ -166,6 +254,11 @@ public class InzWorkflowServiceImpl implements InzWorkflowService{
KObject
currentLoginStaff
=
null
;
try
{
currentLoginStaff
=
bapContext
.
getCurrentStaff
();
// List<KObject> staffs = staffService.getByUsername("c_user_default");
// if(null == staffs || staffs.size()<=0){
// throw new Exception();
// }
// currentLoginStaff = staffs.get(0);
}
catch
(
Exception
e
)
{
throw
new
WorkflowRuntimeException
(
"获取当前登录用户失败!"
);
}
...
...
@@ -174,13 +267,21 @@ public class InzWorkflowServiceImpl implements InzWorkflowService{
if
(
null
==
bizObjectName
||
bizObjectName
.
trim
().
length
()
==
0
){
bizObjectName
=
config
.
getBizTypeInfo
().
getTitle
()+
"对象"
;
}
Map
<
String
,
Object
>
params
=
new
HashedMap
<>();
params
.
put
(
"bizObjectName"
,
bizObjectName
);
params
.
put
(
"bizTypeName"
,
bizTypeName
);
params
.
put
(
"submitterId"
,
currentLoginStaff
.
getUuid
(
"id"
));
Map
<
String
,
Object
>
paramsToUse
=
new
HashedMap
<>();
if
(
params
!=
null
)
{
paramsToUse
.
putAll
(
params
);
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
paramsToUse
.
entrySet
()){
if
(
entry
.
getValue
().
toString
().
equals
(
"\"start_no_add_sign\""
)){
paramsToUse
.
put
(
entry
.
getKey
(),
""
);
}
}
}
paramsToUse
.
put
(
"bizObjectName"
,
bizObjectName
);
paramsToUse
.
put
(
"bizTypeName"
,
bizTypeName
);
paramsToUse
.
put
(
"submitterId"
,
currentLoginStaff
.
getUuid
(
"id"
));
ProcessInstance
processInstance
=
null
;
try
{
processInstance
=
workflowService
.
startWorkflow
(
AminoContextHolder
.
getContext
().
getTenant
(),
definition
,
bizData
,
params
);
processInstance
=
workflowService
.
startWorkflow
(
AminoContextHolder
.
getContext
().
getTenant
(),
definition
,
bizData
,
params
ToUse
);
}
catch
(
ParticipantNotFoundException
e
)
{
logger
.
error
(
"ParticipantNotFoundException"
,
e
);
throw
new
StartWorkflowParticipantNotFoundException
();
...
...
@@ -192,6 +293,7 @@ public class InzWorkflowServiceImpl implements InzWorkflowService{
KObject
bizProcessKObject
=
Amino
.
getApplicationMetadataContext
().
getBean
(
InzBizProcessConstants
.
ENTITY_NAME
,
KClass
.
class
).
newInstance
();
bizProcessKObject
.
set
(
InzBizProcess
.
ATTR_BIZOBJECTNAME
,
bizObjectName
);
bizProcessKObject
.
set
(
InzBizProcess
.
ATTR_BIZAFFILIATIONNAME
,
bizAffiliationName
);
bizProcessKObject
.
set
(
InzBizProcess
.
ATTR_BIZTYPENAME
,
bizTypeName
);
bizProcessKObject
.
set
(
InzBizProcess
.
ATTR_TRIGGERACTION
,
actionName
);
bizProcessKObject
.
set
(
InzBizProcess
.
ATTR_PROCESSINSTANCE
,
processInstance
.
toKobject
());
...
...
@@ -225,11 +327,66 @@ public class InzWorkflowServiceImpl implements InzWorkflowService{
commonDao
.
update
(
v
);
});
KClass
dataType
=
bizData
.
getType
();
if
(
dataType
.
hasAttribute
(
InzWorkflowBiztrait
.
ATTR_APPROVESTATE
))
{
bizData
.
set
(
InzWorkflowBiztrait
.
ATTR_APPROVESTATE
,
BizProcessState
.
IN_PROCESS
.
getValue
());
}
else
if
(
dataType
.
hasAttribute
(
FlowAttributes
.
ATTR_FLOW_STAE
))
{
bizData
.
set
(
FlowAttributes
.
ATTR_FLOW_STAE
,
BizProcessState
.
IN_PROCESS
.
getValue
());
}
if
(
dataType
.
hasAttribute
(
InzWorkflowBiztrait
.
ATTR_BIZPROCESS
))
{
bizData
.
set
(
InzWorkflowBiztrait
.
ATTR_BIZPROCESS
,
bizProcessKObject
);
}
else
if
(
dataType
.
hasAttribute
(
FlowAttributes
.
ATTR_BIZ_PROCESS
))
{
bizData
.
set
(
FlowAttributes
.
ATTR_BIZ_PROCESS
,
bizProcessKObject
);
}
if
(
dataType
.
hasAttribute
(
FlowAttributes
.
ATTR_FLOW_SUBMIT_TIME
))
{
bizData
.
set
(
FlowAttributes
.
ATTR_FLOW_SUBMIT_TIME
,
Instant
.
now
());
}
if
(
dataType
.
hasAttribute
(
FlowAttributes
.
ATTR_FLOW_FINISH_TIME
))
{
bizData
.
setNull
(
FlowAttributes
.
ATTR_FLOW_FINISH_TIME
);
}
commonDao
.
update
(
bizData
);
if
(
params
!=
null
&&
params
.
containsKey
(
"autoComplete"
)){
if
((
boolean
)
params
.
get
(
"autoComplete"
)){
BizProcess
bizProcess
=
bizProcessService
.
getBizProcesByBizTypeNameAndSubmitUser
(
bizTypeName
,
bizData
.
getUuid
(
"id"
),
currentLoginStaff
.
getUuid
(
"id"
));
if
(
bizProcess
!=
null
){
ProcessInstance
rejectProcessInstance
=
bizProcess
.
getProcessInstance
();
UUID
rejectProcessInstanceId
=
rejectProcessInstance
.
getId
();
if
(
rejectProcessInstance
.
getWorkflow
().
getId
().
equals
(
processInstance
.
getWorkflow
().
getId
())){
ProcessInstance
processInstance_
=
processInstance
;
WorkflowRejectRecord
workflowRejetRecord
=
new
WorkflowRejectRecord
();
workflowRejetRecord
.
setProcessInstanceId
(
processInstance_
.
getId
());
workflowRejetRecord
.
setRejectProcessInstanceId
(
rejectProcessInstanceId
);
workflowRejetRecord
.
setState
(
WorkflowRejectRecordService
.
REJECT_STATE_START
);
List
<
KObject
>
kObjects
=
taskService
.
listTaskByProcessInstanceId
(
rejectProcessInstanceId
);
for
(
KObject
object
:
kObjects
){
if
(
99
==
object
.
getInt
(
Task
.
RESULT
)){
workflowRejetRecord
.
setRejectNodeId
(
object
.
get
(
WorkflowTask
.
WORKITEM
).
getString
(
WorkItem
.
ATTR_NODEID
));
break
;
}
}
if
(
workflowRejetRecord
.
getRejectNodeId
()
!=
null
){
ApprovalCopyEntity
approvalCopyEntity
=
approvalCopyService
.
getApprovalCopyByprocessInstanceId
(
rejectProcessInstanceId
);
if
(
approvalCopyEntity
!=
null
){
ApprovalCopyEntity
approvalCopyEntity_
=
new
ApprovalCopyEntity
();
approvalCopyEntity_
.
setProcessInstanceId
(
processInstance_
.
getId
());
approvalCopyEntity_
.
setStaffJson
(
approvalCopyEntity
.
getStaffJson
());
approvalCopyService
.
addApprovalCopy
(
approvalCopyEntity_
);
}
workflowRejectRecordService
.
addWorkflowRejectRecord
(
workflowRejetRecord
);
processService
.
updateProcess
(
processInstance
.
toKobject
());
}
}
}
}
}
}
@Override
public
void
startAutoCompleteWorkflow
(
ProcessInstance
processInstance
)
{
workflowTaskService
.
startAutoCompleteTask
(
null
,
null
,
null
,
processInstance
);
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/internal/service/SubmitApprovalSuggestionServiceImpl.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
internal
.
service
;
import
java.util.UUID
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.beecode.inz.workflow.dao.SubmitApprovalSuggestionDao
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.entity.SubmitApprovalSuggestionEntity
;
import
com.beecode.inz.workflow.service.InzBizProcessService
;
import
com.beecode.inz.workflow.service.SubmitApprovalSuggestionService
;
@Service
public
class
SubmitApprovalSuggestionServiceImpl
implements
SubmitApprovalSuggestionService
{
@Autowired
private
SubmitApprovalSuggestionDao
submitApprovalSuggestionDao
;
@Autowired
private
InzBizProcessService
inzBizProcessService
;
@Override
@Transactional
public
void
addSubmitApprovalSuggestion
(
UUID
bizProcessId
,
String
suggestion
)
{
InzBizProcess
inzBizProcess
=
inzBizProcessService
.
getBizProcessById
(
bizProcessId
);
SubmitApprovalSuggestionEntity
submitApprovalSuggestionEntity
=
new
SubmitApprovalSuggestionEntity
();
submitApprovalSuggestionEntity
.
setSuggestion
(
suggestion
);
submitApprovalSuggestionEntity
.
setProcessInstanceId
(
inzBizProcess
.
getProcessInstance
().
getId
());
submitApprovalSuggestionDao
.
addSubmitApprovalSuggestionEntity
(
submitApprovalSuggestionEntity
);
}
@Override
public
SubmitApprovalSuggestionEntity
getSubmitApprovalSuggestionByprocessInstanceId
(
UUID
processInstanceId
)
{
return
submitApprovalSuggestionDao
.
getSubmitApprovalSuggestionByprocessInstanceId
(
processInstanceId
);
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/listener/CommonWorkflowBillProcessEventListener.java
0 → 100644
View file @
ef3b44a9
/**
*
*/
package
com
.
beecode
.
inz
.
workflow
.
listener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.beecode.amino.core.Amino
;
import
com.beecode.bap.bill.Bill
;
import
com.beecode.bap.bill.BillService
;
import
com.beecode.bap.bill.WorkflowBillConstants
;
import
com.beecode.bap.bill.define.BillDefine
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.inz.workflow.service.WorkflowBillService
;
/**
* @author huangkaibin
*
*/
public
class
CommonWorkflowBillProcessEventListener
implements
InzBizProcessEventListener
{
@Autowired
private
BillService
billService
;
@Override
public
void
afterProcessCompleted
(
InzBizProcessEvent
event
)
{
String
billDefineName
=
event
.
getInzBizProcess
().
getBizTypeName
();
BillDefine
billDefine
=
Amino
.
getApplicationMetadataContext
().
getBean
(
billDefineName
,
BillDefine
.
class
);
if
(
event
.
isAgreed
())
{
KObject
billObj
=
event
.
getInzBizProcess
().
getBizDataObject
();
Bill
bill
=
billService
.
restoreBill
(
billDefine
,
billObj
);
billService
.
executeAction
(
bill
,
WorkflowBillConstants
.
BIZ_WORKFLOW
+
"."
+
WorkflowBillService
.
METHOD_APPROVE
);
}
else
if
(
event
.
isRejected
())
{
KObject
billObj
=
event
.
getInzBizProcess
().
getBizDataObject
();
Bill
bill
=
billService
.
restoreBill
(
billDefine
,
billObj
);
billService
.
executeAction
(
bill
,
WorkflowBillConstants
.
BIZ_WORKFLOW
+
"."
+
WorkflowBillService
.
METHOD_REJECT
);
}
}
public
BillService
getBillService
()
{
return
billService
;
}
public
void
setBillService
(
BillService
billService
)
{
this
.
billService
=
billService
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/listener/InzBizProcessEvent.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
listener
;
import
com.beecode.bap.workflow.core.BizProcessState
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
public
final
class
InzBizProcessEvent
{
...
...
@@ -10,4 +11,10 @@ public final class InzBizProcessEvent {
public
InzBizProcess
getInzBizProcess
()
{
return
inzBizProcess
;
}
public
boolean
isAgreed
()
{
return
inzBizProcess
.
getWorkflowState
()
==
BizProcessState
.
DONE_WITH_AGREE
.
getValue
();
}
public
boolean
isRejected
()
{
return
inzBizProcess
.
getWorkflowState
()
==
BizProcessState
.
DONE_WITH_REJECT
.
getValue
();
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/listener/InzBizProcessEventListener.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
listener
;
public
interface
InzBizProcessEventListener
{
void
beforeProcessStarted
(
InzBizProcessEvent
event
);
default
void
beforeProcessStarted
(
InzBizProcessEvent
event
)
{
}
void
afterProcessStarted
(
InzBizProcessEvent
event
);
default
void
afterProcessStarted
(
InzBizProcessEvent
event
)
{
void
beforeProcessCompleted
(
InzBizProcessEvent
event
);
}
void
afterProcessCompleted
(
InzBizProcessEvent
event
);
default
void
beforeProcessCompleted
(
InzBizProcessEvent
event
)
{
}
default
void
afterProcessCompleted
(
InzBizProcessEvent
event
)
{
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/listener/RTWorkFlowEvent.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
listener
;
import
org.springframework.context.ApplicationEvent
;
public
class
RTWorkFlowEvent
extends
ApplicationEvent
{
private
String
type
;
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
public
RTWorkFlowEvent
(
Object
source
)
{
super
(
source
);
}
public
RTWorkFlowEvent
(
Object
source
,
String
type
)
{
super
(
source
);
this
.
type
=
type
;
}
public
String
getType
()
{
return
type
;
}
public
void
setType
(
String
type
)
{
this
.
type
=
type
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/listener/TaskEventListenerImpl.java
View file @
ef3b44a9
...
...
@@ -4,6 +4,7 @@ import java.util.UUID;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.beecode.amino.core.Amino
;
import
com.beecode.bap.workflow.core.BizProcess
;
import
com.beecode.bap.workflow.core.CommonTask
;
import
com.beecode.bcp.task.event.TaskEvent
;
...
...
@@ -16,6 +17,7 @@ public class TaskEventListenerImpl implements TaskEventListener{
@Autowired
private
InzBizProcessService
inzBizProcessService
;
@Override
public
void
beforeTaskStartedEvent
(
TaskEvent
event
)
{
// TODO Auto-generated method stub
...
...
@@ -58,8 +60,7 @@ public class TaskEventListenerImpl implements TaskEventListener{
@Override
public
void
afterTaskStartedEvent
(
TaskEvent
event
)
{
// TODO Auto-generated method stub
Amino
.
getApplicationContext
().
publishEvent
(
new
RTWorkFlowEvent
(
event
,
"after_started"
));
}
@Override
...
...
@@ -70,7 +71,7 @@ public class TaskEventListenerImpl implements TaskEventListener{
@Override
public
void
afterTaskCompletedEvent
(
TaskEvent
event
)
{
Amino
.
getApplicationContext
().
publishEvent
(
new
RTWorkFlowEvent
(
event
,
"after_completed"
));
}
@Override
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/participant/CommomParticipantStrategy.java
View file @
ef3b44a9
...
...
@@ -16,6 +16,7 @@ import com.beecode.bcp.participant.core.ParticipantStrategy;
import
com.beecode.bcp.participant.core.User
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.bcp.type.json.JSONObjectUtils
;
import
com.beecode.bcp.workflow.core.ProcessInstance
;
import
com.fasterxml.jackson.databind.JsonNode
;
public
class
CommomParticipantStrategy
implements
ParticipantStrategy
{
...
...
@@ -35,6 +36,36 @@ public class CommomParticipantStrategy implements ParticipantStrategy{
final
List
<
Participant
>
participants
=
new
ArrayList
<>();
KObject
task
=
(
KObject
)
params
.
get
(
"task"
);
ProcessInstance
processInstance
=
(
ProcessInstance
)
params
.
get
(
"processinstance"
);
if
(
task
!=
null
&&
processInstance
!=
null
){
String
nodeId
=
task
.
get
(
"workItem"
).
getString
(
"nodeId"
);
String
nodeParam
=
null
;
if
(
nodeId
.
contains
(
"-"
)){
nodeParam
=
"p_"
+
String
.
valueOf
(
nodeId
).
replaceAll
(
"-"
,
"p"
)+
"_staffs"
;
}
else
{
nodeParam
=
"p_"
+
nodeId
+
"_staffs"
;
}
String
staffsContent
=
(
String
)
processInstance
.
getParameterValue
(
nodeParam
);
if
(
null
!=
staffsContent
&&
!
""
.
equals
(
staffsContent
))
{
JsonNode
staffsJson
=
JSONObjectUtils
.
toJson
(
staffsContent
);
staffsJson
.
forEach
((
staffJson
)->{
KObject
staff
=
staffService
.
getById
(
UUID
.
fromString
(
staffJson
.
asText
()));
if
(
null
==
staff
||
staff
.
isNull
())
{
return
;
}
if
(
staff
.
get
(
Staff
.
USER
).
getBoolean
(
Staff
.
ENABLED
)){
participants
.
add
(
new
User
(
staff
.
getUuid
(
"id"
)));
}
});
return
participants
;
}
}
if
(
null
!=
params
.
get
(
PARAM_STAFFS
)){
JsonNode
staffsJson
=
JSONObjectUtils
.
toJson
(
params
.
get
(
PARAM_STAFFS
).
toString
());
staffsJson
.
forEach
((
staffJson
)->{
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/participant/SubmitOrgPathAppointRoleParticipantStrategy.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
participant
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.beecode.bap.org.service.BapOrgDetailService
;
import
com.beecode.bap.staff.Staff
;
import
com.beecode.bap.staff.service.StaffService
;
import
com.beecode.bcp.authz.service.RoleService
;
import
com.beecode.bcp.core.Department
;
import
com.beecode.bcp.participant.core.Participant
;
import
com.beecode.bcp.participant.core.ParticipantStrategy
;
import
com.beecode.bcp.participant.core.User
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.bcp.type.json.JSONObjectUtils
;
import
com.fasterxml.jackson.databind.JsonNode
;
/**
* 提交人所在单位及其上级单位(按照路径匹配)中
* 符合指定角色的职员,即为该参与者策略的策略者。
* 解释:
* 和提交人有直接或者间接上下级(向上)关系的
* @author jiaokai
*/
public
class
SubmitOrgPathAppointRoleParticipantStrategy
implements
ParticipantStrategy
{
private
static
String
PARAM_ROLES
=
"roles"
;
private
static
final
String
SUBMITTER_ID
=
"submitterId"
;
@Autowired
private
RoleService
roleService
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
BapOrgDetailService
orgService
;
@Override
public
List
<
Participant
>
getParticipant
(
Map
<
String
,
Object
>
params
)
{
final
List
<
Participant
>
participants
=
new
ArrayList
<>();
List
<
KObject
>
staffsAll
=
new
ArrayList
<>();
if
(
null
!=
params
.
get
(
PARAM_ROLES
)){
JsonNode
rolesJson
=
JSONObjectUtils
.
toJson
(
params
.
get
(
PARAM_ROLES
));
rolesJson
.
forEach
((
role
)->{
UUID
roleId
=
UUID
.
fromString
(
role
.
asText
());
staffsAll
.
addAll
(
this
.
findStaffByRoleId
(
roleId
));
});
}
UUID
submitterId
=
UUID
.
fromString
(
params
.
get
(
SUBMITTER_ID
).
toString
());
KObject
submitterKObj
=
staffService
.
getById
(
submitterId
);
UUID
submitOrgId
=
submitterKObj
.
get
(
Staff
.
DEPARTMENT
).
getUuid
(
Department
.
PROP_ORG_ID
);
Map
<
String
,
KObject
>
submitOrgDetail
=
orgService
.
getByOrgId
(
submitOrgId
);
String
submitOrgParents
=
submitOrgDetail
.
get
(
"parents"
).
getString
();
for
(
KObject
staff
:
staffsAll
){
UUID
staffOrgId
=
staff
.
get
(
Staff
.
DEPARTMENT
).
getUuid
(
Department
.
PROP_ORG_ID
);
String
keyIdStr
=
staffOrgId
.
toString
().
replaceAll
(
"-"
,
""
).
toUpperCase
();
if
(
submitOrgParents
.
indexOf
(
keyIdStr
)>=
0
){
participants
.
add
(
new
User
(
staff
.
getUuid
(
"id"
)));
}
}
return
participants
;
}
public
List
<
KObject
>
findStaffByRoleId
(
UUID
id
)
{
List
<
KObject
>
staffs
=
new
ArrayList
<>();
List
<
com
.
beecode
.
bcp
.
User
>
users
=
roleService
.
getUsers
(
id
);
if
(
users
!=
null
&&
users
.
size
()
>
0
)
{
staffs
=
users
.
stream
().
map
(
com
.
beecode
.
bcp
.
User
::
getId
).
map
(
staffService:
:
getByUserId
).
collect
(
Collectors
.
toList
());
}
return
staffs
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/participant/SubmiterSubsidiaryRoleParticipantStrategy.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
participant
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.beecode.bap.core.dao.OrganizationDao
;
import
com.beecode.bap.staff.Staff
;
import
com.beecode.bap.staff.service.StaffService
;
import
com.beecode.bap.workflow.constants.BizProcessConstant
;
import
com.beecode.bcp.authz.service.RoleService
;
import
com.beecode.bcp.core.Organization
;
import
com.beecode.bcp.participant.core.Participant
;
import
com.beecode.bcp.participant.core.ParticipantStrategy
;
import
com.beecode.bcp.participant.core.User
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.bcp.type.json.JSONObjectUtils
;
import
com.beecode.bcp.workflow.core.ProcessInstance
;
import
com.beecode.inz.workflow.dao.CommonDao
;
import
com.fasterxml.jackson.databind.JsonNode
;
/**
* 提交人所在子公司及总部
* 符合指定角色的职员,即为该参与者策略的策略者。
* 解释:
*
* @author jk
*/
public
class
SubmiterSubsidiaryRoleParticipantStrategy
implements
ParticipantStrategy
{
private
static
String
PARAM_ROLES
=
"roles"
;
@Autowired
private
RoleService
roleService
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
CommonDao
commonDao
;
@Autowired
private
OrganizationDao
orgDao
;
@Override
public
List
<
Participant
>
getParticipant
(
Map
<
String
,
Object
>
params
)
{
final
List
<
Participant
>
participants
=
new
ArrayList
<>();
List
<
KObject
>
staffs
=
new
ArrayList
<>();
if
(
null
!=
params
.
get
(
PARAM_ROLES
)){
JsonNode
rolesJson
=
JSONObjectUtils
.
toJson
(
params
.
get
(
PARAM_ROLES
));
rolesJson
.
forEach
((
role
)->{
UUID
roleId
=
UUID
.
fromString
(
role
.
asText
());
staffs
.
addAll
(
this
.
findStaffByRoleId
(
roleId
));
});
}
ProcessInstance
pi
=
(
ProcessInstance
)
params
.
get
(
"processinstance"
);
// if(null == pi){
// for(KObject staff : staffs){
// participants.add(new User(staff.getUuid("id")));
// }
// return participants;
// }
String
bizParamsStr
=
pi
.
getParameters
();
JSONObject
bizParams
=
new
JSONObject
(
bizParamsStr
);
UUID
dataId
=
UUID
.
fromString
(
bizParams
.
getString
(
BizProcessConstant
.
BIZ_DATA_ID
));
KObject
assetPackage
=
null
;
String
bizTypeName
=
bizParams
.
getString
(
BizProcessConstant
.
BIZ_TYPE_NAME
);
if
(
bizTypeName
.
equals
(
"Enroll"
)){
KObject
enroll
=
commonDao
.
load
(
"rongtong.zhaoshang.datamodel.Enroll"
,
dataId
);
assetPackage
=
enroll
.
get
(
"assetPackage"
);
}
else
if
(
bizTypeName
.
equals
(
"Deposit"
)){
KObject
deposit
=
commonDao
.
load
(
"rongtong.zhaoshang.datamodel.DepositRecord"
,
dataId
);
assetPackage
=
deposit
.
get
(
"enroll"
).
get
(
"assetPackage"
);
}
KObject
subsidiary
=
assetPackage
.
get
(
"subsidiary"
);
Organization
org
=
orgDao
.
getOrgByCode
(
subsidiary
.
getString
(
"name"
));
UUID
orgId
=
org
.
getId
();
for
(
KObject
staff
:
staffs
){
if
(
orgId
.
equals
(
staff
.
get
(
Staff
.
DEPARTMENT
).
getUuid
(
"orgId"
))){
participants
.
add
(
new
User
(
staff
.
getUuid
(
"id"
)));
}
}
return
participants
;
}
public
List
<
KObject
>
findStaffByRoleId
(
UUID
id
)
{
List
<
KObject
>
staffs
=
new
ArrayList
<>();
List
<
com
.
beecode
.
bcp
.
User
>
users
=
roleService
.
getUsers
(
id
);
if
(
users
!=
null
&&
users
.
size
()
>
0
)
{
staffs
=
users
.
stream
().
map
(
com
.
beecode
.
bcp
.
User
::
getId
).
map
(
staffService:
:
getByUserId
).
collect
(
Collectors
.
toList
());
}
return
staffs
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/pojo/ApprovalNodesObj.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
pojo
;
import
java.util.List
;
public
class
ApprovalNodesObj
{
public
enum
NodeType
{
normal
,
addSign
,
changeStaff
;
}
private
int
approvalResult
;
private
String
id
;
private
String
name
;
private
String
currentStore
;
private
NodeType
type
;
private
List
<
com
.
beecode
.
inz
.
workflow
.
entity
.
UserAssignment
>
approvalUsers
;
public
String
getId
()
{
return
id
;
}
public
void
setId
(
String
id
)
{
this
.
id
=
id
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
List
<
com
.
beecode
.
inz
.
workflow
.
entity
.
UserAssignment
>
getApprovalUsers
()
{
return
approvalUsers
;
}
public
void
setApprovalUsers
(
List
<
com
.
beecode
.
inz
.
workflow
.
entity
.
UserAssignment
>
approvalUsers
)
{
this
.
approvalUsers
=
approvalUsers
;
}
public
int
getApprovalResult
()
{
return
approvalResult
;
}
public
void
setApprovalResult
(
int
approvalResult
)
{
this
.
approvalResult
=
approvalResult
;
}
public
String
getCurrentStore
()
{
return
currentStore
;
}
public
void
setCurrentStore
(
String
currentStore
)
{
this
.
currentStore
=
currentStore
;
}
public
NodeType
getType
()
{
return
type
;
}
public
void
setType
(
NodeType
type
)
{
this
.
type
=
type
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/pojo/InzApprovalTaskObj.java
View file @
ef3b44a9
...
...
@@ -10,6 +10,7 @@ import com.beecode.inz.workflow.entity.InzApprovalTask;
import
com.beecode.inz.workflow.entity.UserAssignment
;
public
class
InzApprovalTaskObj
{
private
String
name
;
private
UUID
taskId
;
private
Date
approvalTime
;
private
Date
startTime
;
...
...
@@ -25,6 +26,7 @@ public class InzApprovalTaskObj {
private
List
<
InzApprovalTaskObj
>
children
;
public
InzApprovalTaskObj
(
InzApprovalTask
task
){
this
.
name
=
task
.
getName
();
this
.
taskId
=
task
.
getId
();
this
.
approvalTime
=
task
.
getFinishTime
();
this
.
taskState
=
task
.
getTaskState
().
getValue
();
...
...
@@ -43,6 +45,8 @@ public class InzApprovalTaskObj {
action
=
"已通过"
;
}
else
if
(
task
.
getResult
()
==
99
){
action
=
"已驳回"
;
}
else
if
(
task
.
getResult
()
==
50
){
action
=
"已退回"
;
}
this
.
taskState
=
task
.
getTaskState
().
getValue
();
this
.
bizObjectName
=
task
.
getBizObjectName
();
...
...
@@ -62,6 +66,14 @@ public class InzApprovalTaskObj {
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
boolean
isCanApprove
()
{
return
canApprove
;
}
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/pojo/WorkflowRecordsObj.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
pojo
;
import
java.util.Date
;
import
java.util.List
;
import
com.beecode.inz.workflow.entity.UserAssignment
;
public
class
WorkflowRecordsObj
{
private
String
name
;
private
String
operation
;
private
String
suggestion
;
private
Date
finishTime
;
private
UserAssignment
approvalUser
;
private
List
<
UserAssignment
>
receiverUser
;
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getOperation
()
{
return
operation
;
}
public
void
setOperation
(
String
operation
)
{
this
.
operation
=
operation
;
}
public
String
getSuggestion
()
{
return
suggestion
;
}
public
void
setSuggestion
(
String
suggestion
)
{
this
.
suggestion
=
suggestion
;
}
public
Date
getFinishTime
()
{
return
finishTime
;
}
public
void
setFinishTime
(
Date
finishTime
)
{
this
.
finishTime
=
finishTime
;
}
public
UserAssignment
getApprovalUser
()
{
return
approvalUser
;
}
public
void
setApprovalUser
(
UserAssignment
approvalUser
)
{
this
.
approvalUser
=
approvalUser
;
}
public
List
<
UserAssignment
>
getReceiverUser
()
{
return
receiverUser
;
}
public
void
setReceiverUser
(
List
<
UserAssignment
>
receiverUser
)
{
this
.
receiverUser
=
receiverUser
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/query/InzApprovalTaskQueryDataProcessor.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
query
;
import
java.util.List
;
import
java.util.UUID
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -8,7 +9,9 @@ import com.beecode.inz.query.entity.RowData;
import
com.beecode.inz.query.processor.DataProcessor
;
import
com.beecode.inz.query.processor.DataProcessorContext
;
import
com.beecode.inz.workflow.config.WorkflowConfigurationDefinition
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.service.BizTypeWorkflowConfigurationService
;
import
com.beecode.inz.workflow.service.InzBizProcessService
;
public
class
InzApprovalTaskQueryDataProcessor
implements
DataProcessor
{
...
...
@@ -16,9 +19,13 @@ public class InzApprovalTaskQueryDataProcessor implements DataProcessor{
private
BizTypeWorkflowConfigurationService
bizTypeWorkflowConfigurationService
;
private
static
final
String
BIZ_TYPE_NAME
=
"bizTypeName"
;
private
static
final
String
BIZ_PROCESS_ID
=
"bizProcess.id"
;
private
static
final
String
BIZT_YPETITLE_V
=
"bizTypeTitle_v"
;
private
static
final
String
ASSET_PACKAGE_TITLE
=
"assetPackageTitle"
;
@Autowired
private
InzBizProcessService
inzBizProcessService
;
@Override
public
void
process
(
DataProcessorContext
context
)
{
...
...
@@ -34,6 +41,12 @@ public class InzApprovalTaskQueryDataProcessor implements DataProcessor{
}
String
bizTypeTitle_v
=
config
.
getBizTypeInfo
().
getTitle
();
row
.
put
(
BIZT_YPETITLE_V
,
bizTypeTitle_v
);
if
(
null
==
row
.
get
(
BIZ_PROCESS_ID
)){
continue
;
}
UUID
bizProcessId
=
UUID
.
fromString
(
row
.
get
(
BIZ_PROCESS_ID
).
toString
());
InzBizProcess
process
=
inzBizProcessService
.
getBizProcessById
(
bizProcessId
);
row
.
put
(
ASSET_PACKAGE_TITLE
,
process
.
getBizAffiliationName
());
}
}
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/query/InzWorkflowDefinitionQueryDataProcessor.java
View file @
ef3b44a9
...
...
@@ -33,7 +33,14 @@ public class InzWorkflowDefinitionQueryDataProcessor implements DataProcessor{
return
;
}
for
(
RowData
row
:
rowDatas
){
String
bizTypeName
=
row
.
get
(
BIZ_TYPE_NAME
).
toString
();
Object
bizTypeNameObj
=
row
.
get
(
BIZ_TYPE_NAME
);
String
bizTypeName
=
""
;
if
(
bizTypeNameObj
==
null
){
bizTypeName
=
"未填写"
;
continue
;
}
else
{
bizTypeName
=
bizTypeNameObj
.
toString
();
}
WorkflowConfigurationDefinition
config
=
bizTypeWorkflowConfigurationService
.
getBizTypeWorkflowConfigurationByBizTypeName
(
bizTypeName
);
if
(
null
==
config
){
continue
;
...
...
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/ApprovalCopyService.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
service
;
import
java.util.List
;
import
java.util.UUID
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.inz.workflow.entity.ApprovalCopyEntity
;
public
interface
ApprovalCopyService
{
void
approvalCopy
(
UUID
bizProcessId
,
String
actors
);
void
completedApprovalCopy
(
UUID
processInstanceId
,
String
suggestion
);
void
addApprovalCopy
(
ApprovalCopyEntity
approvalCopyEntity
);
ApprovalCopyEntity
getApprovalCopyByprocessInstanceId
(
UUID
processInstanceId
);
List
<
KObject
>
getApprovalCopyStaffByprocessInstanceId
(
UUID
processInstanceId
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/ApprovalNodeService.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
service
;
import
java.util.List
;
import
java.util.UUID
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.pojo.ApprovalNodesObj
;
public
interface
ApprovalNodeService
{
List
<
ApprovalNodesObj
>
listApprovalNodeByInzBizProcess
(
InzBizProcess
inzBizProcess
,
String
storeJson
,
Boolean
isEquipment
);
List
<
ApprovalNodesObj
>
listDefinitionApprovalNodeByBizTypeName
(
String
bizTypeName
,
String
storeJson
,
UUID
bizDataId
,
String
define
,
String
disposeType
,
Boolean
isEquipment
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/ApprovalRecordService.java
View file @
ef3b44a9
...
...
@@ -4,7 +4,9 @@ import java.util.List;
import
com.beecode.inz.workflow.entity.ApprovalRecord
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.pojo.WorkflowRecordsObj
;
public
interface
ApprovalRecordService
{
List
<
ApprovalRecord
>
listApprovalRecordByProcessInstance
(
InzBizProcess
inzBizProcess
);
List
<
WorkflowRecordsObj
>
listWorkflowRecordByProcessInstance
(
InzBizProcess
inzBizProcess
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/ApprovalSendCopyService.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
service
;
import
java.util.UUID
;
public
interface
ApprovalSendCopyService
{
void
sendApprovalCopy
(
UUID
taskId
,
int
result
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/ApprovalTranspondService.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
service
;
import
java.util.List
;
import
java.util.UUID
;
public
interface
ApprovalTranspondService
{
void
approvalTranspond
(
UUID
bizProcessId
,
List
<
UUID
>
actorIds
,
String
type
,
String
url
,
String
suggestion
);
void
approvalTranspond
(
UUID
bizProcessId
,
UUID
loginActorId
,
List
<
UUID
>
actorIds
,
String
suggestion
);
void
startAutoCompleteApproval
(
UUID
bizProcessId
);
void
completedApprovalTranspond
(
UUID
processInstanceId
,
String
suggestion
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/InzApprovalTaskService.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
service
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
import
org.json.JSONObject
;
import
com.beecode.bcp.workflow.exception.WorkflowRuntimeException
;
import
com.beecode.inz.workflow.entity.InzApprovalTask
;
public
interface
InzApprovalTaskService
{
void
completeTask
(
UUID
taskId
,
int
result
,
String
suggestions
)
throws
WorkflowRuntimeException
;
void
completeTask
(
UUID
taskId
,
int
result
,
String
suggestions
,
Map
<
String
,
String
>
argus
,
String
attribute1
)
throws
WorkflowRuntimeException
;
/**
* 根据流程查询已审批的任务列表
* 按照审批完成时间升序
...
...
@@ -29,8 +33,5 @@ public interface InzApprovalTaskService {
List
<
InzApprovalTask
>
generateParenChildRelation
(
List
<
InzApprovalTask
>
tasks
);
/**
* 查询自己待审批的任务列表
*/
List
<
InzApprovalTask
>
getApprovalTasksByPend
();
JSONObject
getLastTaskByBizDataId
(
UUID
bizDataId
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/InzBizProcessService.java
View file @
ef3b44a9
...
...
@@ -3,10 +3,12 @@ package com.beecode.inz.workflow.service;
import
java.util.List
;
import
java.util.UUID
;
import
com.beecode.bap.workflow.core.BizProcessState
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
public
interface
InzBizProcessService
{
InzBizProcess
getBizProcessByWorkflowProcessInstanceId
(
UUID
processInstanceId
);
List
<
InzBizProcess
>
listBizProcessByBizDataId
(
UUID
bizData
);
List
<
InzBizProcess
>
listBizProcessByBizDataIdAndStateAndNoProcessInstanceId
(
UUID
bizDataId
,
BizProcessState
state
,
UUID
processInstanceId
);
InzBizProcess
getBizProcessById
(
UUID
id
)
;
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/InzWorkflowService.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
service
;
import
java.util.UUID
;
import
java.util.Map
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.bcp.workflow.core.ProcessInstance
;
import
com.beecode.bcp.workflow.exception.WorkflowRuntimeException
;
public
interface
InzWorkflowService
{
...
...
@@ -19,6 +23,17 @@ public interface InzWorkflowService {
* @param actionName 动作标识
* @param bizTypeName 业务类型标识
* @param bizObjectName 对象名称
* @param bizData 业务数据
* @param params 启动参数
* @throws WorkflowRuntimeException 工作流异常
*/
void
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
KObject
bizData
,
Map
<
String
,
Object
>
params
)
throws
WorkflowRuntimeException
;
/**
*
* @param actionName 动作标识
* @param bizTypeName 业务类型标识
* @param bizObjectName 对象名称
* @param bizProcessName 业务流程实例名称,是一段描述性的文本,用来表示当前的审批业务场景
* @param bizData 业务数据
* @throws WorkflowRuntimeException
...
...
@@ -28,8 +43,38 @@ public interface InzWorkflowService {
*
* @param actionName 动作标识
* @param bizTypeName 业务类型标识
* @param bizObjectName 对象名称
* @param bizProcessName 业务流程实例名称,是一段描述性的文本,用来表示当前的审批业务场景
* @param bizData 业务数据
* @param params 启动参数
* @throws WorkflowRuntimeException
*/
void
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
String
bizProcessName
,
KObject
bizData
,
Map
<
String
,
Object
>
params
)
throws
WorkflowRuntimeException
;
void
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
String
bizProcessName
,
KObject
bizData
,
Map
<
String
,
Object
>
params
,
String
bizAffiliationName
)
throws
WorkflowRuntimeException
;
/**
*
* @param actionName 动作标识
* @param bizTypeName 业务类型标识
* @param bizData 业务数据
* @return
*/
boolean
canStartWotkflow
(
String
actionName
,
String
bizTypeName
,
KObject
bizData
);
void
startAutoCompleteWorkflow
(
ProcessInstance
processInstance
);
/**
* 根据指定modelname和id,找到对应的对象,检查无误开始一个工作流
* @param actionName
* @param bizTypeName
* @param bizObjectName
* @param modelName kclass name
* @param modelId kobject id
* @return 200:正常开始;
* 503:检查失败,无法开始工作流;
* @throws WorkflowRuntimeException
*/
int
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
String
modelName
,
UUID
modelId
)
throws
WorkflowRuntimeException
;
int
startWorkflow
(
String
actionName
,
String
bizTypeName
,
String
bizObjectName
,
String
modelName
,
UUID
modelId
,
String
bizAffiliationName
)
throws
WorkflowRuntimeException
;
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/SubmitApprovalSuggestionService.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
service
;
import
java.util.UUID
;
import
com.beecode.inz.workflow.entity.SubmitApprovalSuggestionEntity
;
public
interface
SubmitApprovalSuggestionService
{
void
addSubmitApprovalSuggestion
(
UUID
bizProcessId
,
String
suggestion
);
SubmitApprovalSuggestionEntity
getSubmitApprovalSuggestionByprocessInstanceId
(
UUID
processInstanceId
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/WorkflowBillService.java
0 → 100644
View file @
ef3b44a9
/**
*
*/
package
com
.
beecode
.
inz
.
workflow
.
service
;
import
java.util.Map
;
import
org.springframework.lang.Nullable
;
import
com.beecode.bap.bill.Bill
;
import
com.beecode.bap.bill.WorkflowBillConstants
;
import
com.beecode.bap.bill.annotations.Autoparam
;
import
com.beecode.bcp.biz.BizServiceInterface
;
import
com.beecode.bcp.biz.Parameter
;
/**
* @author huangkaibin
*
*/
@BizServiceInterface
(
WorkflowBillConstants
.
BIZ_WORKFLOW
)
public
interface
WorkflowBillService
{
String
METHOD_SUBMIT
=
"submit"
;
String
METHOD_APPROVE
=
"approve"
;
String
METHOD_REJECT
=
"reject"
;
/**
* 提交单据到工作流
* @param bill 单据
* @param params 启动工作流的参数,可以传<code>null</code>
* @return 默认情况下提交给工作流后返回<code>null</code>,如果没有配置工作流,就调用{@link #approve(Bill)}方法并返回结果。o
*/
Object
submit
(
@Autoparam
Bill
bill
,
@Nullable
@Parameter
(
optional
=
true
)
Map
<
String
,
Object
>
params
);
/**
* 工作流审批同意后执行的动作
* @param bill 单据
* @return 由业务决定具体返回内容
*/
Object
approve
(
@Autoparam
Bill
bill
);
/**
* 工作流审批拒绝后执行的动作
* @param bill 单据
* @return 由业务决定具体返回内容
*/
Object
reject
(
@Autoparam
Bill
bill
);
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/service/support/AbstractWorkflowBillService.java
0 → 100644
View file @
ef3b44a9
/**
*
*/
package
com
.
beecode
.
inz
.
workflow
.
service
.
support
;
import
java.time.Instant
;
import
java.util.Map
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.beecode.bap.bill.Bill
;
import
com.beecode.bap.bill.BillConstants.BillStates
;
import
com.beecode.bap.bill.BillConstants.MasterAttributes
;
import
com.beecode.bap.bill.WorkflowBillConstants
;
import
com.beecode.bap.bill.WorkflowBillConstants.FlowAttributes
;
import
com.beecode.bap.bill.WorkflowBillConstants.FlowStates
;
import
com.beecode.bap.bill.data.BillData
;
import
com.beecode.bap.bill.support.BillDataExt
;
import
com.beecode.bap.workflow.service.BizProcessService
;
import
com.beecode.bcp.biz.BizServiceImplement
;
import
com.beecode.bcp.type.KClass
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.inz.workflow.service.InzWorkflowService
;
import
com.beecode.inz.workflow.service.WorkflowBillService
;
/**
* @author huangkaibin
*
*/
@BizServiceImplement
(
WorkflowBillConstants
.
WORKFLOW_BILL_MASTER_BASE
)
public
abstract
class
AbstractWorkflowBillService
implements
WorkflowBillService
{
protected
final
Logger
logger
=
LoggerFactory
.
getLogger
(
getClass
());
@Autowired
protected
InzWorkflowService
workflowService
;
@Autowired
protected
BizProcessService
bizProcessService
;
@Transactional
@Override
public
Object
submit
(
Bill
bill
,
Map
<
String
,
Object
>
params
)
{
return
submitToWorkflow
(
bill
,
METHOD_SUBMIT
,
null
,
params
);
}
protected
Object
submitToWorkflow
(
Bill
bill
,
String
action
,
String
bizObjectName
,
Map
<
String
,
Object
>
params
)
{
String
bizTypeName
=
bill
.
getDefine
().
getName
();
bizObjectName
=
bizObjectName
==
null
?
bill
.
getCode
()
:
bizObjectName
;
BillData
billData
=
bill
.
getData
();
billData
.
set
(
MasterAttributes
.
ATTR_BILL_STATE
,
BillStates
.
HANDLING
);
KObject
bizData
=
((
BillDataExt
)
billData
).
toKObject
();
if
(
workflowService
.
canStartWotkflow
(
action
,
bizTypeName
,
bizData
))
{
workflowService
.
startWorkflow
(
action
,
bizTypeName
,
bizObjectName
,
bizData
,
params
);
return
null
;
}
else
{
KClass
clz
=
bill
.
getDefine
().
getDataType
();
if
(
clz
.
hasAttribute
(
FlowAttributes
.
ATTR_FLOW_STAE
))
{
billData
.
set
(
FlowAttributes
.
ATTR_FLOW_STAE
,
FlowStates
.
APPROVED
);
}
Instant
time
=
Instant
.
now
();
if
(
clz
.
hasAttribute
(
FlowAttributes
.
ATTR_FLOW_SUBMIT_TIME
))
{
billData
.
set
(
FlowAttributes
.
ATTR_FLOW_SUBMIT_TIME
,
time
);
}
if
(
clz
.
hasAttribute
(
FlowAttributes
.
ATTR_FLOW_FINISH_TIME
))
{
billData
.
set
(
FlowAttributes
.
ATTR_FLOW_FINISH_TIME
,
time
);
}
return
approve
(
bill
);
}
}
// @Transactional
@Override
public
Object
reject
(
Bill
bill
)
{
// BillData billData = bill.getData();
// billData.set(MasterAttributes.ATTR_BILL_STATE, BillStates.SAVED);
// KClass clz = bill.getDefine().getDataType();
// if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_STAE)) {
// billData.set(FlowAttributes.ATTR_FLOW_STAE, FlowStates.REJECTED);
// }
// Instant time = Instant.now();
// if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_SUBMIT_TIME)) {
// billData.set(FlowAttributes.ATTR_FLOW_SUBMIT_TIME, time);
// }
// if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_FINISH_TIME)) {
// billData.set(FlowAttributes.ATTR_FLOW_FINISH_TIME, time);
// }
return
null
;
}
public
InzWorkflowService
getWorkflowService
()
{
return
workflowService
;
}
public
void
setWorkflowService
(
InzWorkflowService
workflowService
)
{
this
.
workflowService
=
workflowService
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/util/WorkflowGenerator.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
util
;
import
java.util.UUID
;
...
...
@@ -5,7 +6,220 @@ import java.util.UUID;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.inz.workflow.entity.InzWorkflowDefinition
;
public
class
WorkflowGenerator
{
/**
* 按照GOJS编辑出来的json格式生成BPMN格式
* @param workflowDefinitionName
* @param workflowConent
* @return
*/
public
static
JSONObject
getWorkflow
(
KObject
workflowObject
)
{
JSONObject
workflow
=
new
JSONObject
();
JSONObject
definitionContentJSON
=
new
JSONObject
(
new
JSONObject
(
workflowObject
.
getObject
(
"definitionContent"
).
toString
()).
get
(
"workflowConfig"
).
toString
());
String
taskName
=
definitionContentJSON
.
optString
(
"taskName"
).
replaceAll
(
" "
,
""
);
String
name
=
workflowObject
.
getString
(
"name"
);
if
(
null
==
name
||
name
.
equals
(
""
))
name
=
(
workflowObject
.
getString
(
InzWorkflowDefinition
.
ATTR_BIZTYPE_NAME
)
+
"_workflow_definition"
+
"_"
+
UUID
.
randomUUID
().
toString
()).
toUpperCase
();
String
title
=
workflowObject
.
getString
(
"title"
);
workflow
.
put
(
"name"
,
name
);
workflow
.
put
(
"title"
,
title
);
workflow
.
put
(
"description"
,
title
);
workflow
.
put
(
"mainProcess"
,
name
);
workflow
.
put
(
"processes"
,
new
JSONArray
());
JSONArray
processesArray
=
workflow
.
getJSONArray
(
"processes"
);
JSONObject
process
=
new
JSONObject
();
processesArray
.
put
(
process
);
process
.
put
(
"id"
,
name
);
process
.
put
(
"terminateEvents"
,
new
JSONArray
());
process
.
put
(
"serviceTasks"
,
new
JSONArray
());
process
.
put
(
"userTasks"
,
new
JSONArray
());
process
.
put
(
"countersignTasks"
,
new
JSONArray
());
process
.
put
(
"subProcesses"
,
new
JSONArray
());
//process.put("parallelGateways", new JSONArray());
process
.
put
(
"boundaryEvents"
,
new
JSONArray
());
process
.
put
(
"processParameters"
,
new
JSONArray
());
JSONArray
endEvents
=
new
JSONArray
();
JSONArray
tasks
=
new
JSONArray
();
JSONArray
countersignTasks
=
new
JSONArray
();
JSONArray
parallelGateways
=
new
JSONArray
();
//并行网关
JSONArray
exclusiveGateways
=
new
JSONArray
();
//排他网关
process
.
put
(
"processParameters"
,
generateProcessParameters
());
JSONObject
diagramObject
=
new
JSONObject
(
workflowObject
.
getString
(
"diagram"
));
JSONArray
nodes
=
diagramObject
.
getJSONArray
(
"nodeDataArray"
);
for
(
int
i
=
0
,
length
=
nodes
.
length
()
;
i
<
length
;
i
++)
{
JSONObject
node
=
nodes
.
getJSONObject
(
i
);
String
x
=
"0"
,
y
=
"0"
,
width
=
"100"
,
height
=
"20"
;
if
(
node
.
has
(
"loc"
))
{
String
loc
=
node
.
getString
(
"loc"
);
String
[]
locs
=
loc
.
split
(
" "
);
if
(
locs
.
length
>=
2
)
{
x
=
locs
[
0
];
y
=
locs
[
1
];
}
}
if
(
node
.
has
(
"size"
))
{
String
size
=
node
.
getString
(
"size"
);
String
[]
sizes
=
size
.
split
(
" "
);
if
(
sizes
.
length
>=
2
)
{
width
=
sizes
[
0
]
;
height
=
sizes
[
1
];
}
}
String
category
=
node
.
getString
(
"category"
);
switch
(
category
)
{
case
"event"
:
int
dimension
=
node
.
getInt
(
"eventDimension"
);
if
(
dimension
==
1
)
{
generateProcessParameters
(
process
,
node
.
getInt
(
"key"
));
JSONObject
startObject
=
generateStartEvent
(
node
);
startObject
.
put
(
"x"
,
x
);
startObject
.
put
(
"y"
,
y
);
startObject
.
put
(
"width"
,
width
);
startObject
.
put
(
"height"
,
height
);
//startObject.put("outputs", generateTaskOutputs(node.getInt("key")));
process
.
put
(
"startEvent"
,
startObject
);
}
else
if
(
dimension
==
8
)
{
JSONObject
endObject
=
generateEndEvents
(
node
);
endObject
.
put
(
"x"
,
x
);
endObject
.
put
(
"y"
,
y
);
endObject
.
put
(
"width"
,
width
);
endObject
.
put
(
"height"
,
height
);
endEvents
.
put
(
endObject
);
}
break
;
case
"activity"
:
generateProcessParameters
(
process
,
node
.
getInt
(
"key"
));
String
type
=
null
;
if
(
node
.
has
(
"type"
)){
type
=
node
.
getString
(
"type"
);
}
int
taskType
=
node
.
getInt
(
"taskType"
);
String
taskTaskName
=
node
.
getString
(
"taskName"
);
Boolean
allowAuto
=
null
;
Boolean
temporary
=
null
;
if
(
node
.
has
(
"allowAuto"
)){
allowAuto
=
node
.
getBoolean
(
"allowAuto"
);
}
if
(
node
.
has
(
"temporary"
)){
temporary
=
node
.
getBoolean
(
"temporary"
);
}
if
(
taskType
==
2
)
{
// 人工任务
JSONObject
task
=
new
JSONObject
();
task
.
put
(
"id"
,
String
.
valueOf
(
node
.
getInt
(
"key"
)));
task
.
put
(
"name"
,
node
.
getString
(
"text"
));
// if(null != taskTaskName&&!"".equals(taskTaskName)) {
// taskName = taskTaskName;
// }
task
.
put
(
"task"
,
generateTaskDefinitionConfig
((
taskTaskName
!=
null
&&
!
""
.
equals
(
taskTaskName
))?
taskTaskName:
taskName
));
task
.
put
(
"participationStrategies"
,
generateParticipationStrategies
(
node
.
getJSONArray
(
"participationStrategies"
)));
task
.
put
(
"outputs"
,
generateTaskOutputs
(
node
.
getInt
(
"key"
)));
task
.
put
(
"x"
,
x
);
task
.
put
(
"y"
,
y
);
task
.
put
(
"width"
,
width
);
task
.
put
(
"height"
,
height
);
task
.
put
(
"allowAuto"
,
allowAuto
!=
null
?
allowAuto:
false
);
task
.
put
(
"temporary"
,
temporary
!=
null
?
temporary:
false
);
if
(
type
==
null
||
"userTask"
.
equals
(
type
)){
tasks
.
put
(
task
);
}
else
if
(
"countersignTask"
.
equals
(
type
)){
countersignTasks
.
put
(
task
);
}
}
break
;
case
"gateway"
:
//{"loc":"-160 -200","gatewayType":4,"text":"排他网关","category":"gateway","key":204}
int
gatewayType
=
node
.
getInt
(
"gatewayType"
);
if
(
gatewayType
==
4
){
//排他网关
JSONObject
gateway
=
new
JSONObject
();
generateProcessParameters
(
process
,
node
.
getInt
(
"key"
));
gateway
.
put
(
"id"
,
String
.
valueOf
(
node
.
getInt
(
"key"
)));
gateway
.
put
(
"name"
,
node
.
getString
(
"text"
));
gateway
.
put
(
"direction"
,
"diverging"
);
gateway
.
put
(
"x"
,
x
);
gateway
.
put
(
"y"
,
y
);
gateway
.
put
(
"width"
,
width
);
gateway
.
put
(
"height"
,
height
);
gateway
.
put
(
"outputs"
,
generateTaskOutputs
(
node
.
getInt
(
"key"
)));
exclusiveGateways
.
put
(
gateway
);
}
default
:
break
;
}
}
JSONArray
sequenceFlows
=
diagramObject
.
getJSONArray
(
"linkDataArray"
);
JSONArray
conditionFlows
=
generateConditionFlows
(
sequenceFlows
);
process
.
put
(
"sequenceFlows"
,
generateSequenceFlows
(
sequenceFlows
));
process
.
put
(
"conditionFlows"
,
conditionFlows
);
process
.
put
(
"userTasks"
,
tasks
);
process
.
put
(
"countersignTasks"
,
countersignTasks
);
process
.
put
(
"endEvents"
,
endEvents
);
process
.
put
(
"exclusiveGateways"
,
exclusiveGateways
);
process
.
put
(
"parallelGateways"
,
parallelGateways
);
return
workflow
;
}
private
static
JSONArray
generateSequenceFlows
(
JSONArray
flows
)
{
if
(
null
==
flows
||
flows
.
length
()
==
0
)
return
new
JSONArray
();
JSONArray
result
=
new
JSONArray
();
for
(
int
i
=
0
,
length
=
flows
.
length
()
;
i
<
length
;
i
++)
{
JSONObject
sequenceFlow
=
flows
.
getJSONObject
(
i
);
JSONObject
flow
=
new
JSONObject
();
flow
.
put
(
"id"
,
UUID
.
randomUUID
());
String
name
=
"SequenceFlow"
+
i
;
if
(
sequenceFlow
.
has
(
"item"
))
{
name
=
sequenceFlow
.
getString
(
"item"
);
}
flow
.
put
(
"name"
,
name
);
flow
.
put
(
"sourceRef"
,
String
.
valueOf
(
sequenceFlow
.
getInt
(
"from"
)));
flow
.
put
(
"targetRef"
,
String
.
valueOf
(
sequenceFlow
.
getInt
(
"to"
)));
flow
.
put
(
"points"
,
new
JSONArray
());
if
(!
sequenceFlow
.
has
(
"expression"
)
)
{
result
.
put
(
flow
);
}
}
return
result
;
}
private
static
JSONArray
generateConditionFlows
(
JSONArray
flows
)
{
if
(
null
==
flows
||
flows
.
length
()
==
0
)
return
new
JSONArray
();
JSONArray
result
=
new
JSONArray
();
for
(
int
i
=
0
,
length
=
flows
.
length
()
;
i
<
length
;
i
++)
{
JSONObject
sequenceFlow
=
flows
.
getJSONObject
(
i
);
JSONObject
flow
=
new
JSONObject
();
flow
.
put
(
"id"
,
UUID
.
randomUUID
());
String
name
=
"ConditionFlow"
+
i
;
if
(
sequenceFlow
.
has
(
"item"
))
{
name
=
sequenceFlow
.
getString
(
"item"
);
}
flow
.
put
(
"name"
,
name
);
flow
.
put
(
"sourceRef"
,
String
.
valueOf
(
sequenceFlow
.
getInt
(
"from"
)));
flow
.
put
(
"targetRef"
,
String
.
valueOf
(
sequenceFlow
.
getInt
(
"to"
)));
flow
.
put
(
"points"
,
new
JSONArray
());
if
(
sequenceFlow
.
has
(
"expression"
)
)
{
flow
.
put
(
"condition"
,
sequenceFlow
.
getString
(
"expression"
));
result
.
put
(
flow
);
}
}
return
result
;
}
public
static
JSONObject
getWorkflow
(
String
workflowDefinitionName
,
JSONArray
tasks
)
{
JSONObject
workflow
=
new
JSONObject
();
...
...
@@ -77,6 +291,18 @@ public class WorkflowGenerator {
return
startEvent
;
}
private
static
final
JSONObject
generateStartEvent
(
JSONObject
start
)
{
JSONObject
startEvent
=
new
JSONObject
();
startEvent
.
put
(
"id"
,
String
.
valueOf
(
start
.
getInt
(
"key"
)));
return
startEvent
;
}
private
static
final
JSONObject
generateEndEvents
(
JSONObject
end
)
{
JSONObject
endEvent
=
new
JSONObject
();
endEvent
.
put
(
"id"
,
String
.
valueOf
(
end
.
getInt
(
"key"
)));
return
endEvent
;
}
private
static
final
JSONArray
generateEndEvents
()
{
JSONArray
endEvents
=
new
JSONArray
();
...
...
@@ -92,7 +318,7 @@ public class WorkflowGenerator {
JSONObject
task
=
new
JSONObject
();
task
.
put
(
"id"
,
taskObj
.
getString
(
"id"
));
task
.
put
(
"name"
,
taskObj
.
getString
(
"name"
));
task
.
put
(
"task"
,
generateTaskDefinitionConfig
());
task
.
put
(
"task"
,
generateTaskDefinitionConfig
(
null
));
task
.
put
(
"participationStrategies"
,
generateParticipationStrategies
(
taskObj
.
getJSONArray
(
"participationStrategies"
)));
task
.
put
(
"outputs"
,
generateTaskOutputs
());
...
...
@@ -103,17 +329,21 @@ public class WorkflowGenerator {
JSONObject
task
=
new
JSONObject
();
task
.
put
(
"id"
,
taskObj
.
getString
(
"id"
));
task
.
put
(
"name"
,
taskObj
.
getString
(
"name"
));
task
.
put
(
"task"
,
generateTaskDefinitionConfig
());
task
.
put
(
"task"
,
generateTaskDefinitionConfig
(
null
));
task
.
put
(
"participationStrategies"
,
generateParticipationStrategies
(
taskObj
.
getJSONArray
(
"participationStrategies"
)));
task
.
put
(
"outputs"
,
generateTaskOutputs
());
return
task
;
}
private
static
final
JSONObject
generateTaskDefinitionConfig
()
{
private
static
final
JSONObject
generateTaskDefinitionConfig
(
String
name
)
{
JSONObject
config
=
new
JSONObject
();
config
.
put
(
"arguments"
,
generateTaskInputArguments
());
if
(
null
!=
name
&&!
name
.
equals
(
""
))
{
config
.
put
(
"name"
,
name
);
}
else
{
config
.
put
(
"name"
,
"com.beecode.inz.workflow.task.ApprovalTaskDefinition"
);
}
return
config
;
}
...
...
@@ -173,7 +403,65 @@ public class WorkflowGenerator {
result
.
put
(
"name"
,
"result"
);
result
.
put
(
"type"
,
"int"
);
JSONObject
isSpecial
=
new
JSONObject
();
isSpecial
.
put
(
"name"
,
"isSpecial"
);
isSpecial
.
put
(
"type"
,
"boolean"
);
JSONObject
isTemporary
=
new
JSONObject
();
isTemporary
.
put
(
"name"
,
"isTemporary"
);
isTemporary
.
put
(
"type"
,
"boolean"
);
JSONObject
value
=
new
JSONObject
();
value
.
put
(
"name"
,
"value"
);
value
.
put
(
"type"
,
"double"
);
JSONObject
totalValue
=
new
JSONObject
();
totalValue
.
put
(
"name"
,
"totalValue"
);
totalValue
.
put
(
"type"
,
"double"
);
JSONObject
equipCount
=
new
JSONObject
();
equipCount
.
put
(
"name"
,
"equipCount"
);
equipCount
.
put
(
"type"
,
"int"
);
array
.
put
(
result
);
array
.
put
(
isSpecial
);
array
.
put
(
isTemporary
);
array
.
put
(
value
);
array
.
put
(
totalValue
);
array
.
put
(
equipCount
);
return
array
;
}
private
static
final
JSONArray
generateTaskOutputs
(
int
nodeId
)
{
JSONArray
array
=
new
JSONArray
();
JSONObject
result
=
new
JSONObject
();
result
.
put
(
"name"
,
"result"
);
result
.
put
(
"type"
,
"int"
);
JSONObject
isSpecial
=
new
JSONObject
();
isSpecial
.
put
(
"name"
,
"isSpecial"
);
isSpecial
.
put
(
"type"
,
"boolean"
);
JSONObject
isTemporary
=
new
JSONObject
();
isTemporary
.
put
(
"name"
,
"isTemporary"
);
isTemporary
.
put
(
"type"
,
"boolean"
);
String
nodeParam
=
null
;
if
(
nodeId
<
0
){
nodeParam
=
"n_"
+
String
.
valueOf
(
nodeId
).
replaceAll
(
"-"
,
"n"
)+
"_staffs"
;
}
else
{
nodeParam
=
"n_"
+
nodeId
+
"_staffs"
;
}
JSONObject
node
=
new
JSONObject
();
node
.
put
(
"name"
,
nodeParam
);
node
.
put
(
"type"
,
"string"
);
array
.
put
(
result
);
array
.
put
(
isSpecial
);
array
.
put
(
isTemporary
);
array
.
put
(
node
);
return
array
;
}
...
...
@@ -205,6 +493,24 @@ public class WorkflowGenerator {
return
json
;
}
private
static
JSONArray
generateProcessParameters
(
JSONObject
process
,
int
nodeId
){
JSONArray
arg
=
process
.
getJSONArray
(
"processParameters"
);
String
nodeParam
=
null
;
if
(
nodeId
<
0
){
nodeParam
=
"n_"
+
String
.
valueOf
(
nodeId
).
replaceAll
(
"-"
,
"n"
)+
"_staffs"
;
}
else
{
nodeParam
=
"n_"
+
nodeId
+
"_staffs"
;
}
JSONObject
arg1
=
new
JSONObject
();
arg1
.
put
(
"name"
,
nodeParam
);
arg1
.
put
(
"key"
,
nodeParam
);
arg1
.
put
(
"type"
,
"string"
);
arg
.
put
(
arg1
);
return
arg
;
}
private
static
JSONArray
generateProcessParameters
()
{
JSONArray
array
=
new
JSONArray
();
...
...
@@ -233,13 +539,73 @@ public class WorkflowGenerator {
arg5
.
put
(
"key"
,
"submitterId"
);
arg5
.
put
(
"type"
,
"string"
);
JSONObject
arg6
=
new
JSONObject
();
arg6
.
put
(
"name"
,
"isSpecial"
);
arg6
.
put
(
"key"
,
"isSpecial"
);
arg6
.
put
(
"type"
,
"boolean"
);
JSONObject
arg7
=
new
JSONObject
();
arg7
.
put
(
"name"
,
"onSpecialJudge"
);
arg7
.
put
(
"key"
,
"onSpecialJudge"
);
arg7
.
put
(
"type"
,
"boolean"
);
JSONObject
arg8
=
new
JSONObject
();
arg8
.
put
(
"name"
,
"startLevel"
);
arg8
.
put
(
"key"
,
"startLevel"
);
arg8
.
put
(
"type"
,
"int"
);
JSONObject
arg9
=
new
JSONObject
();
arg9
.
put
(
"name"
,
"rebacking"
);
arg9
.
put
(
"key"
,
"rebacking"
);
arg9
.
put
(
"type"
,
"boolean"
);
JSONObject
arg10
=
new
JSONObject
();
arg10
.
put
(
"name"
,
"orgTitle"
);
arg10
.
put
(
"key"
,
"orgTitle"
);
arg10
.
put
(
"type"
,
"string"
);
JSONObject
arg11
=
new
JSONObject
();
arg11
.
put
(
"name"
,
"depTitle"
);
arg11
.
put
(
"key"
,
"depTitle"
);
arg11
.
put
(
"type"
,
"string"
);
JSONObject
arg12
=
new
JSONObject
();
arg12
.
put
(
"name"
,
"isTemporary"
);
arg12
.
put
(
"key"
,
"isTemporary"
);
arg12
.
put
(
"type"
,
"boolean"
);
JSONObject
value
=
new
JSONObject
();
value
.
put
(
"name"
,
"value"
);
value
.
put
(
"key"
,
"value"
);
value
.
put
(
"type"
,
"double"
);
JSONObject
totalValue
=
new
JSONObject
();
totalValue
.
put
(
"name"
,
"totalValue"
);
totalValue
.
put
(
"key"
,
"totalValue"
);
totalValue
.
put
(
"type"
,
"double"
);
JSONObject
equipCount
=
new
JSONObject
();
equipCount
.
put
(
"name"
,
"equipCount"
);
equipCount
.
put
(
"key"
,
"equipCount"
);
equipCount
.
put
(
"type"
,
"int"
);
array
.
put
(
arg1
);
array
.
put
(
arg2
);
array
.
put
(
arg3
);
array
.
put
(
arg4
);
array
.
put
(
arg5
);
array
.
put
(
arg6
);
array
.
put
(
arg7
);
array
.
put
(
arg8
);
array
.
put
(
arg9
);
array
.
put
(
arg10
);
array
.
put
(
arg11
);
array
.
put
(
arg12
);
array
.
put
(
value
);
array
.
put
(
totalValue
);
array
.
put
(
equipCount
);
return
array
;
}
}
\ No newline at end of file
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/web/ApprovalCopyController.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
web
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.UUID
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.beecode.bcp.type.KObject
;
import
com.beecode.bcp.type.json.JSONObjectUtils
;
import
com.beecode.bcp.workflow.exception.WorkflowRuntimeException
;
import
com.beecode.inz.workflow.service.ApprovalCopyService
;
@RestController
public
class
ApprovalCopyController
{
@Autowired
private
ApprovalCopyService
approvalCopyService
;
@RequestMapping
(
value
=
"/workflow/approvalCopy"
,
method
=
RequestMethod
.
POST
)
public
Object
approvalCheck
(
@RequestBody
String
body
)
{
JSONObject
returnObj
=
new
JSONObject
();
returnObj
.
put
(
"status"
,
200
);
JSONObject
bodyJson
=
new
JSONObject
(
body
);
UUID
bizProcessId
=
UUID
.
fromString
(
bodyJson
.
getString
(
"bizProcessId"
));
JSONArray
actors
=
bodyJson
.
getJSONArray
(
"actors"
);
try
{
approvalCopyService
.
approvalCopy
(
bizProcessId
,
actors
.
toString
());
}
catch
(
WorkflowRuntimeException
e
)
{
returnObj
.
put
(
"status"
,
500
);
returnObj
.
put
(
"code"
,
e
.
getMessage
());
}
return
JSONObjectUtils
.
toJson
(
returnObj
.
toString
());
}
@RequestMapping
(
value
=
"/workflow/completedApprovalCopy"
,
method
=
RequestMethod
.
POST
)
public
Object
completedApprovalCheck
(
@RequestBody
String
body
)
{
JSONObject
returnObj
=
new
JSONObject
();
returnObj
.
put
(
"status"
,
200
);
JSONObject
bodyJson
=
new
JSONObject
(
body
);
UUID
processInstanceId
=
UUID
.
fromString
(
bodyJson
.
getString
(
"processInstanceId"
));
String
suggestion
=
null
;
if
(
bodyJson
.
has
(
"suggestion"
)){
if
(!
""
.
equals
(
bodyJson
.
getString
(
"suggestion"
))){
suggestion
=
bodyJson
.
getString
(
"suggestion"
);
}
}
try
{
approvalCopyService
.
completedApprovalCopy
(
processInstanceId
,
suggestion
);
}
catch
(
WorkflowRuntimeException
e
)
{
returnObj
.
put
(
"status"
,
500
);
returnObj
.
put
(
"code"
,
e
.
getMessage
());
}
return
JSONObjectUtils
.
toJson
(
returnObj
.
toString
());
}
@RequestMapping
(
value
=
"/workflow/approvalCopyStaff"
,
method
=
RequestMethod
.
GET
)
public
List
<
KObject
>
getApprovalCopyStaff
(
@RequestParam
(
name
=
"workflowProcessInstanceId"
,
required
=
true
)
UUID
workflowProcessInstanceId
)
{
return
approvalCopyService
.
getApprovalCopyStaffByprocessInstanceId
(
workflowProcessInstanceId
);
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/web/ApprovalNodeController.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
web
;
import
java.util.List
;
import
java.util.UUID
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.pojo.ApprovalNodesObj
;
import
com.beecode.inz.workflow.service.ApprovalNodeService
;
import
com.beecode.inz.workflow.service.InzBizProcessService
;
@RestController
public
class
ApprovalNodeController
{
@Autowired
private
ApprovalNodeService
approvalNodeService
;
@Autowired
private
InzBizProcessService
inzBizProcessService
;
@RequestMapping
(
value
=
"/workflow/approvalNodes"
,
method
=
RequestMethod
.
GET
)
public
List
<
ApprovalNodesObj
>
getFlowNodeInfo
(
@RequestParam
(
name
=
"workflowProcessInstanceId"
,
required
=
true
)
UUID
workflowProcessInstanceId
,
@RequestParam
(
name
=
"storeJson"
,
required
=
false
)
String
storeJson
,
@RequestParam
(
name
=
"isEquipment"
,
required
=
false
)
Boolean
isEquipment
)
{
InzBizProcess
inzBizProcess
=
inzBizProcessService
.
getBizProcessByWorkflowProcessInstanceId
(
workflowProcessInstanceId
);
return
approvalNodeService
.
listApprovalNodeByInzBizProcess
(
inzBizProcess
,
storeJson
,
isEquipment
);
}
@RequestMapping
(
value
=
"/workflow/workflowDefinitionApprovalNodes"
,
method
=
RequestMethod
.
GET
)
public
List
<
ApprovalNodesObj
>
getFlowDefinitionNodeInfo
(
@RequestParam
(
name
=
"bizTypeName"
,
required
=
true
)
String
bizTypeName
,
@RequestParam
(
name
=
"storeJson"
,
required
=
false
)
String
storeJson
,
@RequestParam
(
name
=
"bizDataId"
,
required
=
false
)
UUID
bizDataId
,
@RequestParam
(
name
=
"define"
,
required
=
false
)
String
define
,
@RequestParam
(
name
=
"disposeType"
,
required
=
false
)
String
disposeType
,
@RequestParam
(
name
=
"isEquipment"
,
required
=
false
)
Boolean
isEquipment
)
{
return
approvalNodeService
.
listDefinitionApprovalNodeByBizTypeName
(
bizTypeName
,
storeJson
,
bizDataId
,
define
,
disposeType
,
isEquipment
);
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/web/ApprovalRecordController.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
web
;
import
java.util.List
;
import
java.util.UUID
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
import
com.beecode.inz.workflow.entity.InzBizProcess
;
import
com.beecode.inz.workflow.pojo.ApprovalRecordsObj
;
import
com.beecode.inz.workflow.pojo.WorkflowRecordsObj
;
import
com.beecode.inz.workflow.service.ApprovalRecordService
;
import
com.beecode.inz.workflow.service.InzBizProcessService
;
...
...
@@ -30,4 +32,10 @@ public class ApprovalRecordController {
obj
.
setApprovalRecords
(
approvalRecordService
.
listApprovalRecordByProcessInstance
(
inzBizProcess
));
return
obj
;
}
@RequestMapping
(
value
=
"/workflow/records"
,
method
=
RequestMethod
.
GET
)
public
List
<
WorkflowRecordsObj
>
getFlowRecords
(
@RequestParam
(
name
=
"workflowProcessInstanceId"
,
required
=
true
)
String
workflowProcessInstanceId
)
{
InzBizProcess
inzBizProcess
=
inzBizProcessService
.
getBizProcessByWorkflowProcessInstanceId
(
UUID
.
fromString
(
workflowProcessInstanceId
));
return
approvalRecordService
.
listWorkflowRecordByProcessInstance
(
inzBizProcess
);
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/web/ApprovalTranspondController.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
web
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.UUID
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.beecode.bcp.type.json.JSONObjectUtils
;
import
com.beecode.bcp.workflow.exception.WorkflowRuntimeException
;
import
com.beecode.inz.workflow.service.ApprovalTranspondService
;
import
com.beecode.inz.workflow.service.SubmitApprovalSuggestionService
;
@RestController
public
class
ApprovalTranspondController
{
@Autowired
private
ApprovalTranspondService
approvalTranspondService
;
@Autowired
private
SubmitApprovalSuggestionService
submitApprovalSuggestionService
;
@RequestMapping
(
value
=
"/workflow/approvalTranspond"
,
method
=
RequestMethod
.
POST
)
public
Object
approvalTranspond
(
@RequestBody
String
body
)
{
JSONObject
returnObj
=
new
JSONObject
();
returnObj
.
put
(
"status"
,
200
);
JSONObject
bodyJson
=
new
JSONObject
(
body
);
/**
* 转发别人 transpondOther
* 给自己的 transpondOneself
* 驳回给自己的 transpondReject
*/
String
type
=
bodyJson
.
getString
(
"type"
);
String
suggestion
=
null
;
String
url
=
null
;
if
(
bodyJson
.
has
(
"suggestion"
)){
suggestion
=
bodyJson
.
getString
(
"suggestion"
);
}
if
(
bodyJson
.
has
(
"url"
)){
url
=
bodyJson
.
getString
(
"url"
);
}
UUID
bizProcessId
=
UUID
.
fromString
(
bodyJson
.
getString
(
"bizProcessId"
));
List
<
UUID
>
actorIds
=
new
ArrayList
<>();
if
(
bodyJson
.
has
(
"actors"
)){
JSONArray
jsonArray
=
bodyJson
.
getJSONArray
(
"actors"
);
for
(
int
i
=
0
;
i
<
jsonArray
.
length
();
i
++){
actorIds
.
add
(
UUID
.
fromString
(
jsonArray
.
getString
(
i
)));
}
}
try
{
approvalTranspondService
.
approvalTranspond
(
bizProcessId
,
actorIds
,
type
,
url
,
suggestion
);
if
(
suggestion
!=
null
&&
!
suggestion
.
equals
(
""
)
&&
(
"transpondOneself"
.
equals
(
type
)
||
"transpondReject"
.
equals
(
type
))){
submitApprovalSuggestionService
.
addSubmitApprovalSuggestion
(
bizProcessId
,
suggestion
);
}
approvalTranspondService
.
startAutoCompleteApproval
(
bizProcessId
);
}
catch
(
WorkflowRuntimeException
e
)
{
returnObj
.
put
(
"status"
,
500
);
returnObj
.
put
(
"code"
,
e
.
getMessage
());
}
return
JSONObjectUtils
.
toJson
(
returnObj
.
toString
());
}
@RequestMapping
(
value
=
"/workflow/completedApprovalTranspond"
,
method
=
RequestMethod
.
POST
)
public
Object
completedApprovalTranspond
(
@RequestBody
String
body
)
{
JSONObject
returnObj
=
new
JSONObject
();
returnObj
.
put
(
"status"
,
200
);
JSONObject
bodyJson
=
new
JSONObject
(
body
);
UUID
processInstanceId
=
UUID
.
fromString
(
bodyJson
.
getString
(
"processInstanceId"
));
String
suggestion
=
null
;
if
(
bodyJson
.
has
(
"suggestion"
)){
if
(!
""
.
equals
(
bodyJson
.
getString
(
"suggestion"
))){
suggestion
=
bodyJson
.
getString
(
"suggestion"
);
}
}
try
{
approvalTranspondService
.
completedApprovalTranspond
(
processInstanceId
,
suggestion
);
}
catch
(
WorkflowRuntimeException
e
)
{
returnObj
.
put
(
"status"
,
500
);
returnObj
.
put
(
"code"
,
e
.
getMessage
());
}
return
JSONObjectUtils
.
toJson
(
returnObj
.
toString
());
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/web/InzApprovalTaskController.java
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
web
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.Map
;
import
java.util.UUID
;
import
org.json.JSONObject
;
...
...
@@ -14,7 +15,6 @@ import org.springframework.web.bind.annotation.RestController;
import
com.beecode.bcp.type.json.JSONObjectUtils
;
import
com.beecode.bcp.workflow.exception.WorkflowRuntimeException
;
import
com.beecode.inz.workflow.entity.InzApprovalTask
;
import
com.beecode.inz.workflow.pojo.InzApprovalTaskObj
;
import
com.beecode.inz.workflow.service.InzApprovalTaskService
;
...
...
@@ -36,9 +36,21 @@ public class InzApprovalTaskController {
int
result
=
bodyJson
.
getInt
(
"approvalAction"
);
String
suggestions
=
bodyJson
.
optString
(
"suggestions"
);
String
attribute1
=
bodyJson
.
optString
(
"attribute1"
);
JSONObject
extendAttribute
=
bodyJson
.
optJSONObject
(
"extendAttribute"
);
Map
<
String
,
String
>
argus
=
new
HashMap
<>();
if
(
extendAttribute
!=
null
){
Iterator
<?>
it
=
extendAttribute
.
keys
();
while
(
it
.
hasNext
()){
String
key
=
(
String
)
it
.
next
();
//得到value的值
String
value
=
extendAttribute
.
optString
(
key
);
//System.out.println(value);
argus
.
put
(
key
,
value
);
}
}
try
{
inzApprovalTaskService
.
completeTask
(
taskId
,
result
,
suggestions
);
inzApprovalTaskService
.
completeTask
(
taskId
,
result
,
suggestions
,
argus
,
attribute1
);
}
catch
(
WorkflowRuntimeException
e
)
{
returnObj
.
put
(
"status"
,
500
);
returnObj
.
put
(
"code"
,
e
.
getMessage
());
...
...
@@ -52,15 +64,16 @@ public class InzApprovalTaskController {
return
new
InzApprovalTaskObj
(
inzApprovalTaskService
.
getInzApprovalTaskById
(
taskId
));
}
@RequestMapping
(
value
=
"/workflow/pendApprovalTasks"
,
method
=
RequestMethod
.
GET
)
public
List
<
Object
>
getApprovalTasks
()
{
List
<
Object
>
objects
=
new
ArrayList
<>();
List
<
InzApprovalTask
>
inzApprovalTasks
=
inzApprovalTaskService
.
getApprovalTasksByPend
();
for
(
InzApprovalTask
inzApprovalTask
:
inzApprovalTasks
){
if
(
inzApprovalTask
.
getBizProcess
().
getProcessInstance
()
!=
null
){
objects
.
add
(
new
InzApprovalTaskObj
(
inzApprovalTask
));
}
@RequestMapping
(
value
=
"/workflow/taks/bizid/{bizDataId}"
,
method
=
RequestMethod
.
GET
)
public
Object
getLastTaskByBizDataId
(
@PathVariable
(
"bizDataId"
)
UUID
bizDataId
)
{
JSONObject
result
=
inzApprovalTaskService
.
getLastTaskByBizDataId
(
bizDataId
);
if
(
null
==
result
){
result
=
new
JSONObject
();
result
.
put
(
"code"
,
500
);
result
.
put
(
"reason"
,
"找不到对应的工作流实例"
);
}
else
{
result
.
put
(
"code"
,
200
);
}
return
objects
;
return
result
.
toString
()
;
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/web/InzWorkflowController.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
web
;
import
java.util.Map
;
import
java.util.UUID
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.beecode.bcp.type.json.JSONObjectUtils
;
import
com.beecode.inz.basis.team.pojo.ResponseObj
;
import
com.beecode.inz.workflow.service.InzWorkflowService
;
/**
* 远程调用启用一些工作流的逻辑,开放接口
*
* @author pengwufeng
*
*/
@RequestMapping
(
value
=
"/workflow/api"
)
@RestController
public
class
InzWorkflowController
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
InzWorkflowController
.
class
);
@Autowired
private
InzWorkflowService
inzWorkflowService
;
/**
* 开始一个工作流
*
* @param body
* @return
*/
@PostMapping
(
value
=
"start"
)
public
ResponseObj
<?>
startWorkflow
(
@RequestBody
String
body
)
{
String
actionName
=
null
;
String
bizTypeName
=
null
;
String
bizObjectName
=
null
;
String
modelName
=
null
;
String
bizAffiliationName
=
null
;
UUID
modelId
=
null
;
// 读取参数
try
{
Map
<
String
,
Object
>
parms
=
JSONObjectUtils
.
toMap
(
body
);
actionName
=
parms
.
get
(
"actionName"
).
toString
();
bizTypeName
=
parms
.
get
(
"bizTypeName"
).
toString
();
bizObjectName
=
parms
.
get
(
"bizObjectName"
).
toString
();
modelName
=
parms
.
get
(
"modelName"
).
toString
();
bizAffiliationName
=
parms
.
get
(
"bizAffiliationName"
).
toString
();
modelId
=
UUID
.
fromString
(
parms
.
get
(
"modelId"
).
toString
());
}
catch
(
Exception
e
)
{
logger
.
warn
(
""
,
e
);
return
ResponseObj
.
error
(
"Invalid required parms"
);
}
try
{
int
resultCode
=
inzWorkflowService
.
startWorkflow
(
actionName
,
bizTypeName
,
bizObjectName
,
modelName
,
modelId
,
bizAffiliationName
);
return
ResponseObj
.
response
(
resultCode
,
""
,
null
);
}
catch
(
Exception
e
)
{
logger
.
warn
(
""
,
e
);
return
ResponseObj
.
error
(
e
.
getMessage
());
}
}
}
backend/inz.workflow/src/main/java/com/beecode/inz/workflow/web/SubmitApprovalSuggestionController.java
0 → 100644
View file @
ef3b44a9
package
com
.
beecode
.
inz
.
workflow
.
web
;
import
java.util.UUID
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.beecode.bcp.type.json.JSONObjectUtils
;
import
com.beecode.bcp.workflow.exception.WorkflowRuntimeException
;
import
com.beecode.inz.workflow.service.SubmitApprovalSuggestionService
;
@RestController
public
class
SubmitApprovalSuggestionController
{
@Autowired
private
SubmitApprovalSuggestionService
submitApprovalSuggestionService
;
@RequestMapping
(
value
=
"/workflow/submitApprovalSuggestion"
,
method
=
RequestMethod
.
POST
)
public
Object
approvalCheck
(
@RequestBody
String
body
)
{
JSONObject
returnObj
=
new
JSONObject
();
returnObj
.
put
(
"status"
,
200
);
JSONObject
bodyJson
=
new
JSONObject
(
body
);
UUID
bizProcessId
=
UUID
.
fromString
(
bodyJson
.
getString
(
"bizProcessId"
));
String
suggestion
=
bodyJson
.
getString
(
"suggestion"
);
try
{
submitApprovalSuggestionService
.
addSubmitApprovalSuggestion
(
bizProcessId
,
suggestion
);
}
catch
(
WorkflowRuntimeException
e
)
{
returnObj
.
put
(
"status"
,
500
);
returnObj
.
put
(
"code"
,
e
.
getMessage
());
}
return
JSONObjectUtils
.
toJson
(
returnObj
.
toString
());
}
@RequestMapping
(
value
=
"/workflow/submitApprovalSuggestion"
,
method
=
RequestMethod
.
GET
)
public
Object
completedApprovalCheck
(
@RequestParam
(
name
=
"processInstanceId"
,
required
=
true
)
UUID
processInstanceId
)
{
return
submitApprovalSuggestionService
.
getSubmitApprovalSuggestionByprocessInstanceId
(
processInstanceId
);
}
}
backend/inz.workflow/src/main/model/com/beecode/inz/workflow/datamodel/InzApprovalTask.mk
View file @
ef3b44a9
...
...
@@ -16,6 +16,9 @@
<annotation id='4f3e9d09-9873-4d12-b78b-01d34040cb48' attributeId='1282df11-5502-4190-84ac-6f1f241d9e77' name='length' value='100'>
</annotation>
</attribute>
<attribute id='0f80efb9-f2cf-4d7d-a28b-41c27f75c17e' name='attribute1' columnName='attribute1' title='附加参数1' type='string' default='' precision='' isArray='false'>
<annotation id='9140425a-bd07-48e8-9824-6fa00f8a3e3d' attributeId='e9455f71-c3fc-4ce3-a9cd-15905b5a7983' name='length' value='500'></annotation>
</attribute>
<hibernate>/inz.workflow/src/main/resources/config/InzApprovalTask.hbm.xml</hibernate>
</dataModel>
</content>
...
...
backend/inz.workflow/src/main/model/com/beecode/inz/workflow/datamodel/InzBizProcess.mk
View file @
ef3b44a9
...
...
@@ -16,6 +16,10 @@
<annotation id='224222d9-9a70-4309-92e0-6105a4438483' attributeId='e211805a-b1d8-4866-859e-c8c9b9a6ffad' name='length' value='200'>
</annotation>
</attribute>
<attribute id='be60e8a1-93c4-4b9b-9299-37f58a4c55fc' name='bizAffiliationName' columnName='biz_affiliation_name' title='对象业务归属名称' type='string' default='' precision='' isArray='false'>
<annotation id='b6f67d50-2295-423b-94c8-8a2c5e03f5f0' attributeId='ed7cc63e-e770-4021-8bed-564c46986eed' name='length' value='200'>
</annotation>
</attribute>
<attribute id='b4cb7081-1c81-4944-ab8c-5a85db1d5539' name='triggerAction' columnName='trigger_action' title='触发动作' type='string' default='' precision='' isArray='false'>
<annotation id='e7df47eb-54a7-4b8b-b51e-b0dda7213977' attributeId='035d7759-12a1-424a-915b-9dfa86a6607b' name='length' value='200'>
</annotation>
...
...
backend/inz.workflow/src/main/model/com/beecode/inz/workflow/datamodel/InzWorkflowDefinition.mk
View file @
ef3b44a9
...
...
@@ -28,6 +28,10 @@
<annotation id='74c4afb5-b971-4d3d-a0e6-135bd6d5c77c' attributeId='74f7fc99-f01a-45fa-8b79-2287654d5ed6' name='length' value='100'>
</annotation>
</attribute>
<attribute id='3183fcf5-e975-4e88-a079-7d9a7bb6a990' name='diagram' columnName='diagram' title='画布' type='string' default='' precision='' isArray='false'>
<annotation id='74c4afb5-b971-4d3d-a0e6-135bd6d5c770' attributeId='74f7fc99-f01a-45fa-8b79-2287654d5ed0' name='length' value='20000'>
</annotation>
</attribute>
<attribute id='6ad04f35-321f-4a02-b7fe-6d9220bbc5ce' name='discard' title='是否废弃' type='boolean' default='false' precision='' isArray='false'>
<annotation id='08d17bd3-abe9-4652-b5be-bbbd5d09b73e' attributeId='00be979e-7d60-405c-9fd5-d03048609ea7' name='length' value='undefined'>
</annotation>
...
...
backend/inz.workflow/src/main/resources/META-INF/spring.factories
View file @
ef3b44a9
backend/inz.workflow/src/main/resources/com/beecode/inz/workflow/datamodel/InzApprovalTask.jmx
View file @
ef3b44a9
...
...
@@ -28,6 +28,20 @@
<m:description></m:description>
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>
bcp.type.constraint.StringLength
</m:type>
<m:value>
500
</m:value>
</m:annotation>
</m:annotations>
<m:id>
0f80efb9-f2cf-4d7d-a28b-41c27f75c17e
</m:id>
<m:name>
attribute1
</m:name>
<m:title>
附加参数1
</m:title>
<m:type>
string
</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
</m:attributes>
</m:class>
</content>
...
...
backend/inz.workflow/src/main/resources/com/beecode/inz/workflow/datamodel/InzBizProcess.jmx
View file @
ef3b44a9
...
...
@@ -35,6 +35,20 @@
<m:value>
200
</m:value>
</m:annotation>
</m:annotations>
<m:id>
be60e8a1-93c4-4b9b-9299-37f58a4c55fc
</m:id>
<m:name>
bizAffiliationName
</m:name>
<m:title>
对象业务归属名称
</m:title>
<m:type>
string
</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>
bcp.type.constraint.StringLength
</m:type>
<m:value>
200
</m:value>
</m:annotation>
</m:annotations>
<m:id>
b4cb7081-1c81-4944-ab8c-5a85db1d5539
</m:id>
<m:name>
triggerAction
</m:name>
<m:title>
触发动作
</m:title>
...
...
backend/inz.workflow/src/main/resources/com/beecode/inz/workflow/datamodel/InzWorkflowDefinition.jmx
View file @
ef3b44a9
...
...
@@ -61,6 +61,20 @@
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>
bcp.type.constraint.StringLength
</m:type>
<m:value>
20000
</m:value>
</m:annotation>
</m:annotations>
<m:id>
3183fcf5-e975-4e88-a079-7d9a7bb6a990
</m:id>
<m:name>
diagram
</m:name>
<m:title>
画布
</m:title>
<m:type>
string
</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations/>
<m:id>
6ad04f35-321f-4a02-b7fe-6d9220bbc5ce
</m:id>
<m:name>
discard
</m:name>
...
...
backend/inz.workflow/src/main/resources/com/beecode/inz/workflow/participant/SubmiterSubsidiaryRoleParticipant.jmx
0 → 100644
View file @
ef3b44a9
<?xml version="1.0" encoding="UTF-8"?>
<metadata
xmlns=
"http://www.beecode.cn/schema/amino-metadata"
xmlns:m=
"http://www.beecode.cn/schema/bcp-participant"
>
<specification>
1.0
</specification>
<id>
592a327c-fc41-44dd-a239-678b2d217982
</id>
<name>
com.beecode.inz.workflow.participant.SubmiterSubsidiaryRoleParticipant
</name>
<title>
提交对象共同子公司的角色
</title>
<define>
bcp.participant
</define>
<define-version>
1.0
</define-version>
<content>
<m:participation-strategy>
<m:input>
<m:name>
submitterId
</m:name>
<m:title>
提交人Id
</m:title>
<m:description></m:description>
<m:type>
string
</m:type>
</m:input>
<m:input>
<m:name>
roles
</m:name>
<m:title>
角色
</m:title>
<m:description>
json数组
</m:description>
<m:type>
string
</m:type>
</m:input>
<m:implementation
runtime=
"java"
>
com.beecode.inz.workflow.participant.SubmiterSubsidiaryRoleParticipantStrategy
</m:implementation>
</m:participation-strategy>
</content>
</metadata>
backend/inz.workflow/src/main/resources/config/InzApprovalTask.hbm.xml
View file @
ef3b44a9
...
...
@@ -8,5 +8,8 @@
<property
name=
"bizObjectName"
type=
"nstring"
not-null=
"false"
>
<column
name=
"bizObjectName"
length=
"100"
></column>
</property>
<property
name=
"attribute1"
type=
"nstring"
not-null=
"false"
>
<column
name=
"attribute1"
length=
"500"
></column>
</property>
</union-subclass>
</hibernate-mapping>
\ No newline at end of file
backend/inz.workflow/src/main/resources/config/InzBizProcess.hbm.xml
View file @
ef3b44a9
...
...
@@ -8,6 +8,9 @@
<property
name=
"bizObjectName"
type=
"nstring"
not-null=
"false"
>
<column
name=
"bizObjectName"
length=
"200"
></column>
</property>
<property
name=
"bizAffiliationName"
type=
"nstring"
not-null=
"false"
>
<column
name=
"bizAffiliationName"
length=
"200"
></column>
</property>
<property
name=
"triggerAction"
type=
"nstring"
not-null=
"false"
>
<column
name=
"triggerAction"
length=
"200"
></column>
</property>
...
...
backend/inz.workflow/src/main/resources/config/InzWorkflowDefinition.hbm.xml
View file @
ef3b44a9
...
...
@@ -20,5 +20,8 @@
<property
name=
"description"
type=
"nstring"
not-null=
"false"
>
<column
name=
"description"
length=
"100"
></column>
</property>
<property
name=
"diagram"
type=
"text"
not-null=
"false"
>
<column
name=
"diagram"
></column>
</property>
</subclass>
</hibernate-mapping>
\ No newline at end of file
backend/inz.workflow/src/test/java/com/beecode/inz/workflow/EmbeddedContainerCustomizer.java
View file @
ef3b44a9
backend/inz.workflow/src/test/java/com/beecode/inz/workflow/WebConfiguration.java
View file @
ef3b44a9
backend/inz.workflow/src/test/java/com/beecode/inz/workflow/WebProperties.java
View file @
ef3b44a9
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