Skip to content
本页目录

Activiti6.0 无流程线退回(任意流程节点跳转)

跳转 avitivi 任务流程节点

java
    //跳转方法
    public void jumpTask(String taskId, String nodeKey) {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        ManagementService managementService = processEngine.getManagementService();
        //当前任务
        Task currentTask = taskService.createTaskQuery().taskId(taskId).singleResult();
        //获取流程定义
        Process process = repositoryService.getBpmnModel(currentTask.getProcessDefinitionId()).getMainProcess();
        //获取目标节点定义
        FlowNode targetNode = (FlowNode) process.getFlowElement(nodeKey);
        //删除当前运行任务
        String executionEntityId = managementService.executeCommand(new DeleteTaskCmd(currentTask.getId()));
        //流程执行到来源节点
        managementService.executeCommand(new SetFLowNodeAndGoCmd(targetNode, executionEntityId));
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

获取上个任务的执行人

java
    // 获取上个任务的执行人,若传 nodeKey 则查询最近一次的该节点的任务执行人
    private String getLastTaskAssignee(String instanceId, String nodeKey){
        String retString = null;
        List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
                .processInstanceId(instanceId).finished()
                .orderByHistoricTaskInstanceEndTime().desc()
                .list();

        if ( list.size() > 0 && StringUtils.isEmpty(nodeKey) ){
            retString = list.get(0).getAssignee();
        }
        if ( StringUtils.isNotEmpty(nodeKey) ){
            for (HistoricTaskInstance taskInfo : list) {
                if (taskInfo.getTaskDefinitionKey().equals(nodeKey)) {
                    retString = taskInfo.getAssignee();
                    break;
                }
            }
        }

        return retString;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

举个🌰

java

    @Transactional
    @Override
    public boolean back(Map<String, String> map) {
        mapHasKeys(map, new String[]{ "taskId", "lcslid", "userId", "sjsbid", "shyj" });
        String taskId = map.get("taskId");
        String lcslid = map.get("lcslid");
        String userId = map.get("userId");
        String sjsbid = map.get("sjsbid");
        String shyj = map.get("shyj");

        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        if (!task.getTaskDefinitionKey().equals("jd_qzhzxdf")) {
            throw new CustomException("errorInfo_1");
        }

        String nextUserId = this.getLastTaskAssignee(lcslid, "jd_xznbhs");
        SysUser sysUser = sysUserService.selectUserById(Long.valueOf(nextUserId));
        if ( sysUser == null ){
            throw new CustomException("errorInfo_2");
        }

        // 跳转流程节点
        this.jumpTask(taskId, "jd_xznbhs");

        // 设置任务执行人
        Task nextTask = taskService.createTaskQuery().processInstanceId(lcslid).singleResult();
        taskService.setAssignee(nextTask.getId(), String.valueOf(sysUser.getUserId()));

        // 更新当前任务流程记录
        this.updNowTaskHis( "退回XXXX", userId, taskId, shyj, lcslid);

        // 添加新的任务流程记录
        this.addNextTaskHis(lcslid, Long.valueOf(sjsbid));

        // 更新主业务表
        this.updSjsb(lcslid, Long.valueOf(sjsbid), "06");

        return true;
    }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41