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

十二、终止任务

复制代码
流程基本与回退任务一致,只是把回退节点换成结束节点即可
相关推荐
小小菜鸡ing22 分钟前
pymysql
java·服务器·数据库
getapi25 分钟前
shareId 的产生与传递链路
java
我没想到原来他们都是一堆坏人1 小时前
(未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
java·前端·python
沙二原住民2 小时前
提升数据库性能的秘密武器:深入解析慢查询、连接池与Druid监控
java·数据库·oracle
mabo_9704@163.com2 小时前
SpringAI调用MCP服务的实现思路
spring·ai
小小工匠2 小时前
SpringBoot - Spring 资源加载全解析:ResourceLoader 与 ResourceUtils 的正确打开方式
spring boot·spring·resourceloader·resourcutils
Jerry&Grj2 小时前
SpringBoot埋点功能技术实现方案深度解析:架构设计、性能优化与扩展性实践
java·微服务·性能优化·springboot·架构设计·埋点技术
没有bug.的程序员2 小时前
Redis Stream:轻量级消息队列深度解析
java·数据库·chrome·redis·消息队列
用户8160791833332 小时前
告别“魔法”:包你解决 Gradle 的下载慢问题
java
当归10243 小时前
SQL Server死锁排查实战指南
java·服务器·网络