Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
hel-developer-guide
Project
Project
Details
Activity
Releases
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
chenhao
hel-developer-guide
Commits
d13519f4
Commit
d13519f4
authored
Aug 05, 2017
by
custom
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updates 后端开发/activiti_demo.md
Auto commit by GitBook Editor
parent
9b978bf4
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
84 additions
and
65 deletions
+84
-65
activiti_demo.md
后端开发/activiti_demo.md
+84
-65
No files found.
后端开发/activiti_demo.md
View file @
d13519f4
# 工作流
demo
# 工作流
开发指南
整体流程
*
打开工作流模块,设计工作流流程
*
实现
一个当前功能启动工作流的接口
*
在自己的业务层调用自己实现的工作流类
一、工作流开发整体思路
*
流程设计
*
实现
启动接口
*
调用实现类
*
启动工作流
二、流程设计
1 新建工作流并填写对应的信息
![](
/assets/wfl_demo_1.png
)
![](
/assets/wfl_demo_2.png
)
2 编辑对应的审批节点链,可参考已实现的工作流程
*
这里需要注意分类跟唯一标识这个字段,后面编写实现类的时候需要传入分类跟唯一标识。
2 保存之后点击对应工作流的第一个图标,即可编辑对应的工作流节点,下面将详细介绍一些常用的工作流属性(新建工作流的时候可参考已实现工作流)
*
ID:自动生成,节点唯一标识
*
名称:当前节点中文描述
*
文档:消息机制,可在上下文中取到,如:我是${name},name为实现类里面配置的参数
*
审批方式:默认为全部通过
*
审批方式变量:当审批方式选择一定比例时,可设置变量如0.4,表示当审批人数达到这个比例后将会通过
*
审批规则:选择对应的审批人,可在审批规则中定义
*
加签:若勾选,则当前审批者可添加审批人
*
表单url:表示审批流程中可插入的页面,能让审判者读阅
*
执行监听器:执行监听器start跟end两种分别代表在该节点之前跟在该节点之后,在代理表达式里面可调用对应自己写的java类,格式如下:${endActionEventTask}
*
任务监听器:任务监听器可参考执行监听器
下图是一个完整的工作流流程设计
![](
/assets/wfl_demo_3.png
)
3 编写一个自己的实现类,实现IActivitiCommonService接口
二、实现启动接口
*
编写一个自己的实现类,实现IActivitiCommonService接口
![](
/assets/wfl_demo_4.png
)
...
...
@@ -22,88 +42,87 @@
实现类代码如下
```
java
package
hls
.
core
.
wfl
.
service
.
impl
;
import
com.hand.hap.activiti.dto.ReProcdef
;
import
com.hand.hap.activiti.service.IActivitiService
;
import
com.hand.hap.activiti.service.IReProcdefService
;
import
com.hand.hap.core.IRequest
;
import
hls.core.prj.dto.PrjProject
;
import
hls.core.prj.dto.PrjProjectMeeting
;
import
hls.core.prj.mapper.PrjProjectMeetingMapper
;
import
hls.core.prj.service.PrjProjectService
;
import
hls.core.wfl.service.IActivitiCommonService
;
import
net.sf.json.JSONObject
;
import
org.activiti.rest.service.api.engine.variable.RestVariable
;
import
org.activiti.rest.service.api.runtime.process.ProcessInstanceCreateRequest
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
@Service
@Transactional
public
class
PrjActivitStartServiceImpl
implements
IActivitiCommonService
{
private
static
final
String
workFlowType
=
"PRJ_PROJECT"
;
@Autowired
private
IActivitiService
activitiService
;
@Autowired
private
IReProcdefService
reProcdefService
;
@Autowired
private
PrjProjectService
projectService
;
@Autowired
private
PrjProjectMeetingMapper
meetingMapper
;
@Override
public
String
getWorkFlowType
()
{
return
workFlowType
;
}
@Override
public
void
process
(
IRequest
iRequest
,
List
list
,
Map
params
)
{
private
static
final
String
workFlowType
=
"PRJ_PROJECT"
;
@Autowired
private
IActivitiService
activitiService
;
@Autowired
private
IReProcdefService
reProcdefService
;
@Autowired
private
PrjProjectService
projectService
;
@Autowired
private
PrjProjectMeetingMapper
meetingMapper
;
@Override
public
String
getWorkFlowType
()
{
return
workFlowType
;
}
@Override
public
void
process
(
IRequest
iRequest
,
List
list
,
Map
params
)
{
ProcessInstanceCreateRequest
processInstanceCreateRequest
=
getProcessInstanceCreateRequest
((
PrjProject
)
list
.
get
(
0
),
iRequest
);
activitiService
.
startProcess
(
iRequest
,
processInstanceCreateRequest
);
}
private
ProcessInstanceCreateRequest
getProcessInstanceCreateRequest
(
PrjProject
prjProject
,
IRequest
iRequest
)
{
ProcessInstanceCreateRequest
createRequest
=
new
ProcessInstanceCreateRequest
();
{
ProcessInstanceCreateRequest
createRequest
=
new
ProcessInstanceCreateRequest
();
PrjProject
project
=
projectService
.
selectByPrimaryKey
(
iRequest
,
prjProject
);
ReProcdef
reProcdefs
;
reProcdefs
=
reProcdefService
.
queryReProcdef
(
"PRJ_PROJECT_APPROVE"
,
"PRJ_PROJECT"
);
String
id
=
reProcdefs
.
getId_
();
String
name
=
reProcdefs
.
getName_
();
createRequest
.
setProcessDefinitionId
(
id
);
createRequest
.
setBusinessKey
(
prjProject
.
getProjectId
().
toString
());
List
<
RestVariable
>
variables
=
new
ArrayList
<
RestVariable
>();
List
<
RestVariable
>
transientVariables
=
new
ArrayList
<
RestVariable
>();
reProcdefs
=
reProcdefService
.
queryReProcdef
(
"PRJ_PROJECT_APPROVE"
,
"PRJ_PROJECT"
);
String
id
=
reProcdefs
.
getId_
();
String
name
=
reProcdefs
.
getName_
();
createRequest
.
setProcessDefinitionId
(
id
);
createRequest
.
setBusinessKey
(
prjProject
.
getProjectId
().
toString
());
List
<
RestVariable
>
variables
=
new
ArrayList
<
RestVariable
>();
List
<
RestVariable
>
transientVariables
=
new
ArrayList
<
RestVariable
>();
RestVariable
restVariable1
=
new
RestVariable
();
RestVariable
restVariable2
=
new
RestVariable
();
RestVariable
restVariable3
=
new
RestVariable
();
RestVariable
restVariable4
=
new
RestVariable
();
RestVariable
restVariable3
=
new
RestVariable
();
RestVariable
restVariable4
=
new
RestVariable
();
RestVariable
restVariable5
=
new
RestVariable
();
RestVariable
restVariable6
=
new
RestVariable
();
restVariable1
.
setName
(
"processDefinitionId"
);
restVariable1
.
setValue
(
id
);
variables
.
add
(
restVariable1
);
restVariable2
.
setName
(
"prjProject"
);
JSONObject
jsonObject
=
new
JSONObject
().
fromObject
(
prjProject
);
restVariable2
.
setValue
(
jsonObject
.
toString
());
variables
.
add
(
restVariable2
);
restVariable3
.
setName
(
"iRequest"
);
restVariable3
.
setValue
(
iRequest
);
variables
.
add
(
restVariable3
);
restVariable4
.
setName
(
"projectNum"
);
restVariable4
.
setValue
(
project
.
getProjectNumber
());
variables
.
add
(
restVariable4
);
restVariable5
.
setName
(
"projectName"
);
restVariable5
.
setValue
(
project
.
getProjectName
());
variables
.
add
(
restVariable5
);
restVariable6
.
setName
(
"startUserName"
);
restVariable6
.
setValue
(
iRequest
.
getEmployeeCode
());
variables
.
add
(
restVariable6
);
RestVariable
restVariable6
=
new
RestVariable
();
restVariable1
.
setName
(
"processDefinitionId"
);
restVariable1
.
setValue
(
id
);
variables
.
add
(
restVariable1
);
restVariable2
.
setName
(
"prjProject"
);
JSONObject
jsonObject
=
new
JSONObject
().
fromObject
(
prjProject
);
restVariable2
.
setValue
(
jsonObject
.
toString
());
variables
.
add
(
restVariable2
);
restVariable3
.
setName
(
"iRequest"
);
restVariable3
.
setValue
(
iRequest
);
variables
.
add
(
restVariable3
);
restVariable4
.
setName
(
"projectNum"
);
restVariable4
.
setValue
(
project
.
getProjectNumber
());
variables
.
add
(
restVariable4
);
restVariable5
.
setName
(
"projectName"
);
restVariable5
.
setValue
(
project
.
getProjectName
());
variables
.
add
(
restVariable5
);
restVariable6
.
setName
(
"startUserName"
);
restVariable6
.
setValue
(
iRequest
.
getEmployeeCode
());
variables
.
add
(
restVariable6
);
RestVariable
restVariable7
=
new
RestVariable
();
RestVariable
restVariable8
=
new
RestVariable
();
RestVariable
restVariable9
=
new
RestVariable
();
restVariable7
.
setName
(
"documentCategory"
);
restVariable7
.
setValue
(
project
.
getDocumentCategory
());
variables
.
add
(
restVariable7
);
restVariable8
.
setName
(
"documentType"
);
restVariable8
.
setValue
(
project
.
getDocumentType
());
variables
.
add
(
restVariable8
);
restVariable9
.
setName
(
"documentId"
);
restVariable9
.
setValue
(
project
.
getProjectId
());
variables
.
add
(
restVariable9
);
RestVariable
restVariable8
=
new
RestVariable
();
RestVariable
restVariable9
=
new
RestVariable
();
restVariable7
.
setName
(
"documentCategory"
);
restVariable7
.
setValue
(
project
.
getDocumentCategory
());
variables
.
add
(
restVariable7
);
restVariable8
.
setName
(
"documentType"
);
restVariable8
.
setValue
(
project
.
getDocumentType
());
variables
.
add
(
restVariable8
);
restVariable9
.
setName
(
"documentId"
);
restVariable9
.
setValue
(
project
.
getProjectId
());
variables
.
add
(
restVariable9
);
RestVariable
restVariable10
=
new
RestVariable
();
restVariable10
.
setName
(
"doubleFlag"
);
restVariable10
.
setName
(
"doubleFlag"
);
PrjProjectMeeting
meeting
=
new
PrjProjectMeeting
();
meeting
.
setProjectId
(
prjProject
.
getProjectId
());
List
<
PrjProjectMeeting
>
list
=
meetingMapper
.
select
(
meeting
);
if
(
list
.
size
()
>
0
)
{
restVariable10
.
setValue
(
"Y"
);
}
else
{
restVariable10
.
setValue
(
"N"
);
}
meeting
.
setProjectId
(
prjProject
.
getProjectId
());
List
<
PrjProjectMeeting
>
list
=
meetingMapper
.
select
(
meeting
);
if
(
list
.
size
()
>
0
)
{
restVariable10
.
setValue
(
"Y"
);
}
else
{
restVariable10
.
setValue
(
"N"
);
}
variables
.
add
(
restVariable10
);
RestVariable
restVariable11
=
new
RestVariable
();
restVariable11
.
setName
(
"pName"
);
restVariable11
.
setValue
(
name
);
restVariable11
.
setValue
(
name
);
variables
.
add
(
restVariable11
);
createRequest
.
setVariables
(
variables
);
createRequest
.
setTransientVariables
(
transientVariables
);
return
createRequest
;
}}
```
4 启动工作流
*
关键参数讲解:
private static final String workFlowType = "PRJ_PROJECT";在启动工作流的时候工作流会根据这个类型找到对应的实现类,
在启动工作流的时候会调用process方法,该方法会调用getProcessInstanceCreateRequest方法,在getProcessInstanceCreateRequest方法里面
可以将自己工作流所需参数都放到里面去,可以在后面的流程中取到自己所需参数
三 调用实现类并启动工作流
```
Map<String,Object> params = new HashMap<String,Object>();
params.put("workFlowType","PRJ_PROJECT");
activitiStartService.start(iRequest,projects,params);
```
*
代码解析
params.put("workFlowType","PRJ_PROJECT");放入的为工作流实现类的类型
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