• 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_  = '部门经理'  ))) 
    
  • 相关阅读:
    Debian 9 更换源
    MySqlDataAdapter.Fill() 报异常‘给定关键字不在字典中’的解决方案
    阿里云函数计算 .NET Core 初体验
    TimeSpan 的 Milliseconds 和 TotalMilliseconds 有啥区别?
    使用 gitee 托管你的 go 模块
    markdown的css样式(自己写的)
    markdown的流程图实现和代码语法着色
    Python元组与字典详解
    centos7的防火墙(firewalld)
    centos7 安装java和tomcat9
  • 原文地址:https://www.cnblogs.com/smallSevens/p/11324995.html
Copyright © 2020-2023  润新知