1. 创建流程

创建一个3个节点的流程:
开始—>审核—>结束。
xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
             xmlns:flowable="http://flowable.org/bpmn"
targetNamespace="http://www.flowable.org/processdef">

  <process id="process_audit2" name="审核流程">

    <startEvent id="startNode1" name="开始">
      <outgoing>Flow_0ksehsm</outgoing>
    </startEvent>

    <endEvent id="Event_08rzeth" name="结束">
      <incoming>Flow_18upiqx</incoming>
    </endEvent>

    <sequenceFlow id="Flow_0ksehsm" sourceRef="startNode1" targetRef="Activity_0ipmowu" />
    <sequenceFlow id="Flow_18upiqx" sourceRef="Activity_0ipmowu" targetRef="Event_08rzeth" />

    <!--用户任务:需要指定用户来执行
    flowable:assignee:任务受理人,动态设置受理人为流程参数中的approval
    -->
    <userTask id="Activity_0ipmowu" name="审核" flowable:assignee="${approval}">
      <incoming>Flow_1huwgzm</incoming>
      <outgoing>Flow_18upiqx</outgoing>
    </userTask>

  </process>

</definitions>

将xml文件保存在src/main/resources/processes下
在这里插入图片描述
启动项目,等流程自动部署到数据库。
在这里插入图片描述

2. 启动流程

设置审批人,启动流程。
下面填写的的approval参数即为xml文件中的${approval},参数名称要保持一致

    @PostMapping("/start")
    @Transactional(rollbackFor = Exception.class)
    public String start(@RequestParam String key) {
        try {
            // 构建流程启动需要的流程参数信息
            Map<String, Object> variables = new HashMap<String, Object>();
            variables.put("approval", 2);

            // 设置流程启动用户
            identityService.setAuthenticatedUserId("1");
            // 根据key启动,返回流程实例
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key,variables);
            // 返回流程实例ID
            return processInstance.getProcessInstanceId();
        } catch (Exception e) {
            e.printStackTrace();
            return "启动失败!";
        }
    }

启动:
在这里插入图片描述
启动成功。
因为代码里是把审核节点的审批人设为了"2",现在我们去查询一下用户2的待办任务:

    /**获取指定用户的待办的任务列表
     * 代办
     * */
    @GetMapping("/getNeedDoTasks/{userId}")
    @Transactional(rollbackFor = Exception.class)
    public String getNeedDoTasks(@PathVariable String userId) {
        List<Task> tasks = taskService.createTaskQuery()
                .taskCandidateOrAssigned(userId)
                .list();

        if (!tasks.isEmpty()) {
            List<Map<String, Object>> list = new ArrayList<>();
            for (Task task : tasks) {
                Map<String, Object> map = new HashMap<>();
                //代办id
                String taskId = task.getId();
                //代办节点名称
                String taskName = task.getName();
                //创建时间
                Date createTime = task.getCreateTime();
                map.put("taskId", taskId);
                map.put("taskName", taskName);
                map.put("createTime", createTime);
                list.add(map);
            }
            return listToString(list,',');
        }

        return "当前用户在当前流程实例中并无待办!";
    }

结果:
在这里插入图片描述
查询其他用户,比如用户"1"的待办列表:
在这里插入图片描述

可以看到,任务成功分配给了用户"2"处理。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐