1.利用flowable-ui(本地搭建或者服务器搭建都可),画出流程图文件,并导出为相关xml
导出xml如下:
2.集成项目导入相关maven依赖(第一次新建会在数据库中初始化工作流相关的表):
org.flowable flowable-spring-boot-starter 6.7.13.根据相关API,配合XML完成工作流工作步骤.
主要API:
1.获取工作流实例,并启动工作流:
// leave为员工请假流程xml文件中的id
ProcessInstance a1 = runtimeService.startProcessInstanceByKey(“test”, map);
Task task = taskService.createTaskQuery().processInstanceId(a1.getId()).singleResult();
taskService.complete(task.getId());
2、启动后任务会自动走流程到设定的审批人,获取审批人下对应任务:
// 查询领导分组的任务
List teacher = taskService.createTaskQuery().taskCandidateGroup(“a”).list(); //这里审批人ID为a
for (Task task : teacher) {
// 根据任务id查询当前任务参数
Map<String, Object> variables = taskService.getVariables(task.getId());
System.out.println(variables.get(“day”) + “,” + variables.get(“studentUser”));
}
3.推进任务,根据map中传递字段来判断任务该进入哪个环节(审批或驳回)
taskService.complete(teacherTask.getId(), teacherMap);
4.查询已完成的某任务的执行流程;
//获取该类型工作流任务列表
List processInstance = runtimeService.createProcessInstanceQuery().processDefinitionKey(“test”).orderByStartTime().desc().list();
if (CollectionUtils.isEmpty(processInstance)) {
System.out.println(“------------------------------------------”);
}
// 获取最近的一个流程
List activities = historyService.createHistoricActivityInstanceQuery()
.processInstanceId(processInstance.get(0).getId())
// 只查询已经完成的活动
.finished()
// 按照结束时间排序
.orderByHistoricActivityInstanceEndTime().desc()
.list();
List collect = activities.stream().map(a -> “活动名称:” + a.getActivityName() + “;活动执行时间:” + a.getDurationInMillis() + “毫秒”).collect(Collectors.toList());
总结:
整体思考下来,如果要在项目中集成工作流,主要流程步骤为:
1.导入相关Maven依赖,生成相关XML配置文件(流程要确定清楚,并且ID命名要清晰)并放入resources/processes目录下.
2.业务流程中配合使用工作流相关API,并且做好相应校验.(做好封装),要确认的点:
封装好对应的工作流map,到每一步都执行对应的步骤.(根据taskId与工作流类型,获取任务状态,调用API推进任务,获取任务执行详情等)
参考链接:https://blog.csdn.net/zhousenshan/article/details/134625532