工作流 activiti (三)流程实例图的绘制
请假流程图
流程图
创建用户和角色
用户表
新建请假表
发起请假流程
1.查询出业务表的ID(编号)
select * from leave
2.发起审批
3.查询待办流程
2.发起请假申请:RuntimeService
RuntimeService:提供了处理流程实例不同步骤的结构和行为。包括启动流程实例、暂停和激活流程实例等功能
2.1启动请假。
/*启动流程/
@RequestMapping(value = "/start", method = RequestMethod.GET)
public Map<String, Object> start(@RequestParam String userId){
Map<String, Object> vars = new HashMap<>();
Leave leave = new Leave();
leave.setUserId(userId); //当前用户ID
vars.put("leave",leave);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave1",vars);
Map<String, Object> resultMap = new HashMap<>();
return resultMap;
}
2.2 部门经理查询需要处理的数据。
// 假设使用的是 Activiti 或类似的工作流引擎
List<Task> tasks = taskService.createTaskQuery()
.taskAssignee("wangjingli") // 王经理的用户名
.list();
for (Task task : tasks) {
System.out.println("Task ID: " + task.getId());
System.out.println("Task Name: " + task.getName());
}
一旦王经理找到了需要审核的任务,他可以通过任务ID来获取与该任务相关的所有变量,其中就包括 Leave 对象。
// 假设王经理找到了一个任务并获取了它的ID
String taskId = tasks.get(0).getId(); // 假设只关注第一个任务
Map<String, Object> taskVariables = taskService.getVariables(taskId);
// 打印出所有的任务变量
for (Map.Entry<String, Object> entry : taskVariables.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 特别关注'leave'变量
Object leaveObj = taskVariables.get("leave");
if (leaveObj instanceof Leave) {
Leave leave = (Leave) leaveObj;
System.out.println("Leave details:");
System.out.println("User ID: " + leave.getUserId());
// 打印其他Leave对象的属性...
}
图例说明
主键ID:流程定义中节点的唯一标识
名称(Name):
描述信息(documentation):
异步:
同步情况下,完成节点任务和验证下一节点的地址是在同一事务中进行,所以当中如果发生异常,就会回滚当前事务,回滚已完成的任务,重新开始执行。如果勾选了异步,则一个节点完成了就提交事务,不依赖于下一个节点。也就是说不管下一个节点发生了什么,都不关已完成节点的事。完成任务在一个事务中进行,验证下一个节点的地址操作交给定时任务异步来完成。也就是说,如果设置任务是同步的,则发生异常后,会直接回滚;如果设置异步,则会单独执行和回滚
互斥任务:
执行监听器:
多实例类型:
基数(多实例):
集合(多实例):
元素变量(多实例):
完成条件(多实例)
是否补偿:
分配用户(assignee):
表单编号:
到期时间:
优先级:
表单属性:
任务监听器:
参考文章:
https://blog.csdn.net/qq_49045151/article/details/121209349