工作流:需要层层审批,工作流程的计算模型,场景:请假,加班等
要实现请假:
1 制作activiti流程模型(基于Activiti官方提供的war包放到tomcat中运行)
每一个步骤里面都有id 和侯选组(后续和业务数据库绑定)
2 将制作好的模型(xml文件)上次到activiti系统中(springboot集成了activiti 有单独的activiti的数据库)
springboot集承了多数据源 一个是ihrm数据库,一个是activiti数据库(主库)
1 上传好流程后并恢复(开启)流程
1.1请假流程
用户提交请假申请设计到业务数据库的三张表(ihrm)
1 proc_instance 流程表
2 proc_task_instance 流程任务表(每一个流程下会有多个任务)
3 proc_user_group 侯选组表 //id是activiti自带数据库中的group表中的id eg:process_leavel 候选组的key
提交申请流程:
用户提交请假时间,天数 ,流程类型(这里是请假),用户id
1 后端远程调用 用户微服务获取user
2 构造业务数据 并通过processkey(流程标识)查询流程定义数据,即是哪个流程
ProcessDefinition result = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(processKey)
.processDefinitionTenantId(companyId) //公司id 因为是sass结构
.latestVersion()
.singleResult();
3开启流程,让activiti db的流程id和业务数据的id有一个绑定关系
runtimeService.startProcessInstanceById(result.getId()
, instance.getProcessId()
, vars); //流程定义的id,业务数据id,内置的参数 参数代表流程上的一些判断一些参数
Map vars = new HashMap();if ("process_leave".equals(processKey)){//请假vars.put("days" , map.get("duration"));//大于3天在交给总裁办审批}runtimeService.startProcessInstanceById(result.getId(), instance.getProcessId(), vars); //流程定义的id,业务数据id,内置的参数ProcessInstance processInstance =runtimeService.startProcessInstanceById(result.getId(), instance.getProcessId(), vars);
4 //自动执行第一个任务节点
//获取下一个节点数据,填充业务数据中当前待审批人
获取审批人的逻辑://查询任务的节点数据(候选人组)
封装业务数据procInstanceDao procTaskInstanceDao
(zijichulide 上传流程的时候,指定候选人组,通过activiti 模型中(xml) 为 通过候选人组 再在业务数据库中建立一个新表 存放对应的候选人 )
以上就是一个用户发起了请假流程的一个审批。
2 发起过后就到了审批人审批的接口逻辑
审批人的查询逻辑 有当前处理人,companyid,所以能查询到对应的审批
点击审核通过
//如果审核通过,完成当前的任务
//查询出当前节点,完成当前节点任务
//查询出下一个节点,如果存在下一个流程没有结束