SpringBoot集成流程引擎实战,画流程图及流程启动篇(新手向,超详细)
前言:根据若依-流程引擎项目学习,需要完整代码请跳转至
https://gitee.com/shenzhanwang/RuoYi-activiti
用户任务(userTask) 代码和画图对应
流程启动的代码在下面,可以对照着画图好理解
leave为整个流程的标识,启动流程的时候就会传入流程标识
applyuserid为发起人的id,applyleave为流程节点的id,业务上可以通过该id查询处于该节点下的所有流程任务
deptleader为部门领导的id,deptleaderaudit为流程节点的id,业务上可以通过该id查询处于该节点下的所有流程任务
hr为人事的id,hraudit为流程节点的id,业务上可以通过该id查询处于该节点下的所有流程任务
发起流程 代码
@Service
public class ActivitiServiceImpl implements ActivitiService
{
@Resource
private RuntimeService runtimeService;
@Resource
private TaskService taskService;
@Resource
IdentityService identityService;
@Resource
HistoryService historyService;
/**
* 发起流程
* @param userId 流程发起人
* @param key 业务表的唯一值
* @param deptleader 部门领导的id
* @param hr 人事的id
*/
public void initiateProcess(String userId,String key,String deptleader,String hr)
{
//设置流程发起人
identityService.setAuthenticatedUserId(userId);
//创建流程变量
HashMap<String, Object> variables = new HashMap<>();
//发起人的id
variables.put("applyuserid", userId);
//部门领导的id
variables.put("deptleader", deptleader);
//人事的id
variables.put("hr", hr);
/**
* 作用:启动 engineering 流程
* 第一个参数为流程定义的key
* 第二个参数为流程的唯一标识(一般和业务表的唯一标识一致,方便查询)
* 第三个参数为流程变量(我这里只是用于存储审核人)
*/
runtimeService.startProcessInstanceByKey("leave", key, variables);
}
}
网关(sequenceFlow) 代码和画图对应
流程启动的代码在下面,可以对照着画图好理解
网关 会根据流转条件走对应的用户任务 如带的false就会走调整申请的流程
网关 会根据流转条件走对应的用户任务 如带的true就会走调人事审批
用户审核 代码
/**
* 审核任务
* @param taskId 任务id
* @param userName 审核人名称
* @param variables 请求参数{"approve": "false","comment": "不通过"}
* @return
*/
@Override
public void auditingTask(String taskId, String userName, Map<String, Object> variables) {
//设置代理(审核人)
taskService.setAssignee(taskId, userName);
// 通过任务id 查出流程实例id
String processInstanceId = taskService.createTaskQuery().taskId(taskId).singleResult().getProcessInstanceId();
if (variables == null) {
taskService.complete(taskId);
} else {
// 添加审批意见
if (variables.get("comment") != null) {
taskService.addComment(taskId, processInstanceId, (String) variables.get("comment"));
variables.remove("comment");
variables.remove("taskId");
}
//提交任务
taskService.complete(taskId, variables);
}
}
以上就是基础的画流程图及初步使用java执行流程引擎