文章目录
一、bpmn文件部署
java
复制代码
@Auroward
RepositoryService rep;
//通过流区创建一个工作流对象
rep.createDeployment().addInputStream(filename, is).deploy();
//涉及的表
act_re_deployment: 流程定义部署表,每部署一次就增加一条记录
act_re_procdef :流程定义表,部署每个新的流程定义都会在这张表中增加一条记录
act_ge_bytearray :流程资源表,流程部署的 bpmn文件和png图片会保存在该表中
二、发起一个流程
java
复制代码
@Autowired
IdentityService identityservice;
@Auroward
RuntimeService runtimeservice;
//添加与业务之间的关系
identityservice.setAuthenticatedUserId("业务key-连接业务数据和流程数据,一般使用表的主键");
//启动
ProcessInstance instance=runtimeservice.startProcessInstanceByKey("业务流程key","业务key","变量");
//涉及的表
act_hi_actinst 流程实例执行历史
act_hi_identitylink 流程的参与用户的历史信息
act_hi_procinst 流程实例历史信息
act_hi_taskinst 流程任务历史信息
act_ru_execution 流程执行信息
act_ru_identitylink 流程的参与用户信息
act_ru_task 任务信息
三、查找任务
java
复制代码
@Autowired
TaskService taskservice;
@Auroward
RuntimeService runtimeservice;
//一、添加与业务之间的关系
List<Task> tasks=taskservice.createTaskQuery().taskAssignee("指定用户").taskName("指定名称").listPage("第几页", "每页几条
//二、根据taskId查找任务
Task task = taskservice.createTaskQuery().taskId("任务id").singleResult();
/**
* task.getProcessInstanceId() 流程实例id
*/
ProcessInstance process = runservice.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
四、提交/完成任务
java
复制代码
@Autowired
TaskService taskservice;
//声明责任人--如果省略了这一步,任务不回向下走
taskservice.claim("要声明的任务", "用户,不可为空");
//完成任务(变量可以为空,一般用于指派下一个人)
taskservice.complete("要声明的任务", "变量");
五、流程定义的查询
java
复制代码
@Autowired
RepositoryService rep;
//
List<ProcessDefinition> list = rep.createProcessDefinitionQuery().listPage("第几页", "每页几条")
// 输出流程定义的信息
for (ProcessDefinition processDefinition : list) {
System.out.println("流程定义的ID:" + processDefinition.getId());
System.out.println("流程定义的name:" + processDefinition.getName());
System.out.println("流程定义的key:" + processDefinition.getKey());
System.out.println("流程定义的version:" + processDefinition.getVersion());
System.out.println("流程部署的id:" + processDefinition.getDeploymentId());
}
六、流程的删除
java
复制代码
@Autowired
RepositoryService rep;
// 设置为TRUE 级联删除流程定义,及时流程有实例启动,也可以删除,设置为false 非级联删除操作。
rep.deleteDeployment("流程标识", true);
七、流程历史信息查看
java
复制代码
@Autowired
HistoryService histiryservice;
// 创建一个历史流程实例对象
HistoricProcessInstanceQuery his = histiryservice.createHistoricProcessInstanceQuery()
//给定id
HistoricProcessInstanceQuery process = his.processDefinitionId("");
//给定key
HistoricProcessInstanceQuery process = his.processDefinitionKey("");
//只选择由给定用户启动的历史流程实例。
process = process.startedBy("用户标识");
//只选择完成的
process = process.finished();
//历史流程实例
List<HistoricProcessInstance> info = process.listPage(firstrow, rowCount);
八、指派任务
java
复制代码
@Autowired
TaskService taskservice;
// 指派的第一种方式
taskService.setAssignee(task.getId(), "jack");
// 指派的第二种方式
taskService.deleteCandidateUser(task.getId(), "tom");
taskService.addCandidateUser(task.getId(), "jack");
九、委派任务
java
复制代码
@Autowired
TaskService taskservice;
// 将任务进行委派
taskService.delegateTask(task.getId(), "rose");
//被委派人办理任务后,委派人标记任务已完成
taskService.resolveTask(task.getId());
十、放回任务
java
复制代码
@Autowired
TaskService taskservice;
// 重新放回去
taskService.setAssignee(task.getId(), null);
taskService.unclaim(task.getId());
十一、回退任务
1. 找到任务
2. 找到当前实例历史执行记录
3. 拿到上一步任务节点
4. 记录当前节点的流转方向
5. 清除当前节点的流转方向
6. 将当前节点指向回退的节点
7. 完成当前节点任务
8. 查询此任务,将回退节点的执行人重新赋值到该节点
9. 恢复当前节点的流转方向
十二、终止任务
流程基本与回退任务一致,只是把回退节点换成结束节点即可