Activiti 开发案例之动态指派任务
程序员文章站
2023-09-28 13:09:23
流程图 以上是一个请假的流程图,以下为流程任务节点描述: 员工发起请假流程 部门经理审批 同意则进入人事审批 拒绝则调整申请或者直接结束流程 人事审批通过则进入销假环节 人事审批拒绝则调整申请或者直接结束流程 员工销假结束流程 任务分配 员工发起申请 部门经理审批 通过逻辑: 拒绝逻辑: 待办任务 ......
流程图
以上是一个请假的流程图,以下为流程任务节点描述:
- 员工发起请假流程
- 部门经理审批
- 同意则进入人事审批
- 拒绝则调整申请或者直接结束流程
- 人事审批通过则进入销假环节
- 人事审批拒绝则调整申请或者直接结束流程
- 员工销假结束流程
任务分配
员工发起申请
processinstance process = runtimeservice.startprocessinstancebykey("leave",businesskey, variables); task task = taskservice.createtaskquery().processinstanceid(process.getid()).active().singleresult(); //此时,不要应删除掉流程图中赋值的角色,否则会重复 taskservice.addcandidategroup(task.getid(),"部门经理");
部门经理审批
通过逻辑:
map<string,object> variables=new hashmap<string,object>(); variables.put("approve", "true"); task task = taskservice.createtaskquery().processinstanceid(processinstanceid).active().singleresult(); //一定要认领任务之后,重新获取当前任务,然后分配角色。 taskservice.claim(taskid, userid); taskservice.complete(taskid, variables); task = taskservice.createtaskquery().processinstanceid(process.getid()).active().singleresult(); //此时,不要应删除掉流程图中赋值的角色,否则会重复 taskservice.addcandidategroup(task.getid(),"人事");
拒绝逻辑:
map<string,object> variables=new hashmap<string,object>(); variables.put("approve", "false"); task task = taskservice.createtaskquery().processinstanceid(processinstanceid).active().singleresult(); //一定要认领任务之后,重新获取当前任务,然后分配角色。 taskservice.claim(taskid, userid); taskservice.complete(taskid, variables); task = taskservice.createtaskquery().processinstanceid(process.getid()).active().singleresult(); //applyid为申请人id taskservice.addcandidateuser(task.getid(),applyid);
待办任务
api 查询
taskquery taskquery = taskservice.createtaskquery(); list<task> list = taskquery.taskcandidateorassigned(userid)
使用api的话,需要做视图映射,activiti开发案例之创建用户表视图实现关联查询
sql 查询
-- 多个用户或者角色可以用 in select distinct res.* from act_ru_task res left join act_ru_identitylink i on i.task_id_ = res.id_ where suspension_state_ = '1' and ( res.assignee_ ='99' or (res.assignee_ is null and ( i.user_id_ = '99' or i.group_id_ = '部门经理' )))