Commit d13519f4 authored by custom's avatar custom

Updates 后端开发/activiti_demo.md

Auto commit by GitBook Editor
parent 9b978bf4
# 工作流demo # 工作流开发指南
整体流程 一、工作流开发整体思路
* 打开工作流模块,设计工作流流程 * 流程设计
* 实现一个当前功能启动工作流的接口 * 实现启动接口
* 在自己的业务层调用自己实现的工作流类 * 调用实现类
* 启动工作流 * 启动工作流
1 新建工作流并填写对应的信息 二、流程设计
![](/assets/wfl_demo_1.png)
![](/assets/wfl_demo_2.png) 1 新建工作流并填写对应的信息
![](/assets/wfl_demo_1.png)
2 编辑对应的审批节点链,可参考已实现的工作流程 ![](/assets/wfl_demo_2.png)
![](/assets/wfl_demo_3.png)
*这里需要注意分类跟唯一标识这个字段,后面编写实现类的时候需要传入分类跟唯一标识。
3 编写一个自己的实现类,实现IActivitiCommonService接口
2 保存之后点击对应工作流的第一个图标,即可编辑对应的工作流节点,下面将详细介绍一些常用的工作流属性(新建工作流的时候可参考已实现工作流)
![](/assets/wfl_demo_4.png) * ID:自动生成,节点唯一标识
* 名称:当前节点中文描述
* 文档:消息机制,可在上下文中取到,如:我是${name},name为实现类里面配置的参数
实现类代码如下 * 审批方式:默认为全部通过
```java * 审批方式变量:当审批方式选择一定比例时,可设置变量如0.4,表示当审批人数达到这个比例后将会通过
package hls.core.wfl.service.impl; * 审批规则:选择对应的审批人,可在审批规则中定义
* 加签:若勾选,则当前审批者可添加审批人
import com.hand.hap.activiti.dto.ReProcdef; * 表单url:表示审批流程中可插入的页面,能让审判者读阅
* 执行监听器:执行监听器start跟end两种分别代表在该节点之前跟在该节点之后,在代理表达式里面可调用对应自己写的java类,格式如下:${endActionEventTask}
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; ![](/assets/wfl_demo_3.png)
import hls.core.prj.dto.PrjProjectMeeting;
import hls.core.prj.mapper.PrjProjectMeetingMapper; 二、实现启动接口
import hls.core.prj.service.PrjProjectService;
import hls.core.wfl.service.IActivitiCommonService; * 编写一个自己的实现类,实现IActivitiCommonService接口
import net.sf.json.JSONObject;
import org.activiti.rest.service.api.engine.variable.RestVariable;
import org.activiti.rest.service.api.runtime.process.ProcessInstanceCreateRequest; ![](/assets/wfl_demo_4.png)
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; ```java
import java.util.Map;
@Service @Service
@Transactional @Transactional
public class PrjActivitStartServiceImpl implements IActivitiCommonService public class PrjActivitStartServiceImpl implements IActivitiCommonService
{ {
private static final String workFlowType = "PRJ_PROJECT"; @Autowired private static final String workFlowType = "PRJ_PROJECT";
private IActivitiService activitiService; @Autowired
@Autowired private IActivitiService activitiService;
private IReProcdefService reProcdefService; @Autowired
@Autowired private IReProcdefService reProcdefService;
private PrjProjectService projectService; @Autowired
@Autowired private PrjProjectService projectService;
private PrjProjectMeetingMapper meetingMapper; @Autowired
@Override private PrjProjectMeetingMapper meetingMapper;
public String getWorkFlowType() { return workFlowType; } @Override
@Override public String getWorkFlowType() { return workFlowType; }
public void process(IRequest iRequest, List list, Map params) @Override
{ public void process(IRequest iRequest, List list, Map params)
ProcessInstanceCreateRequest processInstanceCreateRequest = getProcessInstanceCreateRequest((PrjProject)list.get(0),iRequest); {
activitiService.startProcess(iRequest, processInstanceCreateRequest); ProcessInstanceCreateRequest processInstanceCreateRequest = getProcessInstanceCreateRequest((PrjProject)list.get(0),iRequest);
} activitiService.startProcess(iRequest, processInstanceCreateRequest);
private ProcessInstanceCreateRequest getProcessInstanceCreateRequest(PrjProject prjProject, IRequest iRequest) }
{ private ProcessInstanceCreateRequest getProcessInstanceCreateRequest(PrjProject prjProject, IRequest iRequest)
ProcessInstanceCreateRequest createRequest = new ProcessInstanceCreateRequest(); {
PrjProject project=projectService.selectByPrimaryKey(iRequest,prjProject); ReProcdef reProcdefs ; ProcessInstanceCreateRequest createRequest = new ProcessInstanceCreateRequest();
reProcdefs = reProcdefService.queryReProcdef("PRJ_PROJECT_APPROVE","PRJ_PROJECT"); PrjProject project=projectService.selectByPrimaryKey(iRequest,prjProject); ReProcdef reProcdefs ;
String id = reProcdefs.getId_(); reProcdefs = reProcdefService.queryReProcdef("PRJ_PROJECT_APPROVE","PRJ_PROJECT");
String name = reProcdefs.getName_(); createRequest.setProcessDefinitionId(id); createRequest.setBusinessKey(prjProject.getProjectId().toString()); String id = reProcdefs.getId_();
List<RestVariable> variables = new ArrayList<RestVariable>(); List<RestVariable> transientVariables = new ArrayList<RestVariable>(); String name = reProcdefs.getName_(); createRequest.setProcessDefinitionId(id);
RestVariable restVariable1 = new RestVariable(); RestVariable restVariable2 = new RestVariable(); createRequest.setBusinessKey(prjProject.getProjectId().toString());
RestVariable restVariable3 = new RestVariable(); List<RestVariable> variables = new ArrayList<RestVariable>(); List<RestVariable> transientVariables = new ArrayList<RestVariable>();
RestVariable restVariable4 = new RestVariable(); RestVariable restVariable1 = new RestVariable(); RestVariable restVariable2 = new RestVariable();
RestVariable restVariable5 = new RestVariable(); RestVariable restVariable3 = new RestVariable();
RestVariable restVariable6 = new RestVariable(); RestVariable restVariable4 = new RestVariable();
RestVariable restVariable5 = new RestVariable();
restVariable1.setName("processDefinitionId"); RestVariable restVariable6 = new RestVariable();
restVariable1.setValue(id); variables.add(restVariable1);
restVariable2.setName("prjProject"); restVariable1.setName("processDefinitionId");
JSONObject jsonObject= new JSONObject().fromObject(prjProject); restVariable2.setValue(jsonObject.toString()); variables.add(restVariable2); restVariable1.setValue(id); variables.add(restVariable1);
restVariable3.setName("iRequest"); restVariable3.setValue(iRequest); restVariable2.setName("prjProject");
variables.add(restVariable3); JSONObject jsonObject= new JSONObject().fromObject(prjProject); restVariable2.setValue(jsonObject.toString());
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); variables.add(restVariable2);
RestVariable restVariable7 = new RestVariable(); restVariable3.setName("iRequest"); restVariable3.setValue(iRequest);
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(restVariable3);
variables.add(restVariable8); restVariable9.setName("documentId"); restVariable9.setValue(project.getProjectId()); restVariable4.setName("projectNum"); restVariable4.setValue(project.getProjectNumber()); variables.add(restVariable4);
variables.add(restVariable9); restVariable5.setName("projectName"); restVariable5.setValue(project.getProjectName()); variables.add(restVariable5);
RestVariable restVariable10 = new RestVariable(); restVariable6.setName("startUserName"); restVariable6.setValue(iRequest.getEmployeeCode()); variables.add(restVariable6);
restVariable10.setName("doubleFlag"); RestVariable restVariable7 = new RestVariable();
PrjProjectMeeting meeting = new PrjProjectMeeting(); RestVariable restVariable8 = new RestVariable(); RestVariable restVariable9 = new RestVariable();
meeting.setProjectId(prjProject.getProjectId()); restVariable7.setName("documentCategory"); restVariable7.setValue(project.getDocumentCategory()); variables.add(restVariable7);
List<PrjProjectMeeting> list = meetingMapper.select(meeting); if(list.size() >0) { restVariable10.setValue("Y"); }else{ restVariable10.setValue("N"); } restVariable8.setName("documentType"); restVariable8.setValue(project.getDocumentType());
variables.add(restVariable10); variables.add(restVariable8); restVariable9.setName("documentId"); restVariable9.setValue(project.getProjectId());
RestVariable restVariable11 = new RestVariable(); restVariable11.setName("pName"); variables.add(restVariable9);
restVariable11.setValue(name); RestVariable restVariable10 = new RestVariable();
variables.add(restVariable11); createRequest.setVariables(variables); createRequest.setTransientVariables(transientVariables); restVariable10.setName("doubleFlag");
return createRequest; 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"); }
4 启动工作流 variables.add(restVariable10);
``` RestVariable restVariable11 = new RestVariable(); restVariable11.setName("pName");
Map<String,Object> params = new HashMap<String,Object>(); restVariable11.setValue(name);
params.put("workFlowType","PRJ_PROJECT"); variables.add(restVariable11); createRequest.setVariables(variables); createRequest.setTransientVariables(transientVariables);
activitiStartService.start(iRequest,projects,params); return createRequest;
}}
```
\ No newline at end of file ```
* 关键参数讲解:
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");放入的为工作流实现类的类型
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment