欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-09-28 13:09:23
流程图 以上是一个请假的流程图,以下为流程任务节点描述: 员工发起请假流程 部门经理审批 同意则进入人事审批 拒绝则调整申请或者直接结束流程 人事审批通过则进入销假环节 人事审批拒绝则调整申请或者直接结束流程 员工销假结束流程 任务分配 员工发起申请 部门经理审批 通过逻辑: 拒绝逻辑: 待办任务 ......

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

流程图

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

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

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

任务分配

员工发起申请

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