spring-activiti 一些操作

文章目录

一、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. 恢复当前节点的流转方向

十二、终止任务

复制代码
流程基本与回退任务一致,只是把回退节点换成结束节点即可
相关推荐
BUTCHER55 分钟前
Netty Channel 生命周期
java·服务器·网络
Java爱好狂.7 分钟前
2026如何备战互联网大厂Java面试?
java·分布式·高并发·java面试·后端开发·java架构师·互联网大厂
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ15 分钟前
EasyExcel中AnalysisEventListener<T>抽象类的方法执行顺序
java
悟空码字23 分钟前
别再让你的SpringBoot包"虚胖"了!这份瘦身攻略请收好
java·spring boot·后端
szm022525 分钟前
操作系统-
java·linux·服务器
哆啦A梦158830 分钟前
java项目在后端做跨域配置
java·vue3
用户83071968408233 分钟前
从互斥锁到无锁,Java 20年并发安全进化史
java
盐水冰33 分钟前
【烘焙坊项目】后端搭建(13)- 数据统计--图形报表
java·后端·学习·spring
易雪寒35 分钟前
Java List 根据List中对象的属性值是否相同作为同一组,分割成多个连续的子List
java·数据结构·list·分组切割
小王不爱笑13240 分钟前
Kubernetes(K8s)核心知识点
java