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

十二、终止任务

复制代码
流程基本与回退任务一致,只是把回退节点换成结束节点即可
相关推荐
李慕婉学姐1 天前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆1 天前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin1 天前
设计模式之桥接模式
java·设计模式·桥接模式
model20051 天前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉1 天前
JavaBean相关补充
java·开发语言
提笔忘字的帝国1 天前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882481 天前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈1 天前
两天开发完成智能体平台
java·spring·go
alonewolf_991 天前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹1 天前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理