当前位置: 移动技术网 > IT编程>开发语言>Java > Activiti 开发案例之动态指派任务

Activiti 开发案例之动态指派任务

2019年08月09日  | 移动技术网IT编程  | 我要评论

流程图

以上是一个请假的流程图,以下为流程任务节点描述:

  • 员工发起请假流程
  • 部门经理审批
  • 同意则进入人事审批
  • 拒绝则调整申请或者直接结束流程
  • 人事审批通过则进入销假环节
  • 人事审批拒绝则调整申请或者直接结束流程
  • 员工销假结束流程

任务分配

员工发起申请

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_  = '部门经理'  ))) 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网