camunda根据当前任务id获取下一步审批节点

 /**
     * 根据当前任务id获取下一步审批节点
     *
     * @param taskId
     * @return
     */
    @Override
    public List<Map<String, String>> getNextAuditNodes(String taskId) {
        HistoricTaskInstance historicTask = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();
        if (Objects.isNull(historicTask)) {
            return null;
        }

        ProcessDefinition processDefinition = getByKey(historicTask.getProcessDefinitionKey());
        BpmnModelInstance bpmnModelInstance = repositoryService.getBpmnModelInstance(processDefinition.getId());
        UserTask userTask = bpmnModelInstance.getModelElementById(historicTask.getTaskDefinitionKey());
        Collection<SequenceFlow> outgoing = userTask.getOutgoing();
        Iterator<SequenceFlow> iterator = outgoing.stream().iterator();
        List<Map<String, String>> nodeList = new ArrayList<>();
        while (iterator.hasNext()) {
            SequenceFlow flow = iterator.next();
            FlowNode target = flow.getTarget();
            if ("exclusiveGateway".equals(target.getElementType().getTypeName())) {
                Collection<SequenceFlow> targetOutgoing = target.getOutgoing();
                Iterator<SequenceFlow> targetIt = targetOutgoing.stream().iterator();
                while (targetIt.hasNext()) {
                    SequenceFlow targetFlow = targetIt.next();
                    FlowNode gatewayTarget = targetFlow.getTarget();
                    Map<String, String> map = generateTaskNode(gatewayTarget);
                    if (!Objects.isNull(map)) {
                        nodeList.add(map);
                    }
                }
            } else if ("userTask".equals(target.getElementType().getTypeName())) {
                Map<String, String> map = generateTaskNode(target);
                if (!Objects.isNull(map)) {
                    nodeList.add(map);
                }
            }
        }
        return nodeList;
    }


    /**
     * 生成任务节点
     *
     * @param target
     * @return
     */
    public Map<String, String> generateTaskNode(FlowNode target) {
        if ("userTask".equals(target.getElementType().getTypeName())) {
            Map<String, String> map = new HashMap<>();
            map.put("value", target.getId());
            map.put("label", target.getName());
            map.put("assignee", getTaskAssign(target));
            return map;
        }
        return null;
    }

    /**
     * 获取任务办理人
     *
     * @param target
     * @return
     */
    public String getTaskAssign(FlowNode target) {
        //代理人
        String assignee = target.getAttributeValueNs(BpmnModelConstants.CAMUNDA_NS, "assignee");
        if (StringUtils.isNotBlank(assignee)) {
            return assignee;
        } else {
            //代理人不存在,获取组任务办理人
            String candidateUsers = target.getAttributeValueNs(BpmnModelConstants.CAMUNDA_NS, "candidateUsers");
            if (StringUtils.isNotBlank(candidateUsers)) {
                return candidateUsers;
            } else {
                //如果组任务办理人不存在,获取多实例任务办理人
                MultiInstanceLoopCharacteristics modelElementInstance = (MultiInstanceLoopCharacteristics) target
                        .getUniqueChildElementByNameNs(BpmnModelConstants.BPMN20_NS, "multiInstanceLoopCharacteristics");
                if (!Objects.isNull(modelElementInstance)) {
                    return modelElementInstance.getAttributeValueNs(BpmnModelConstants.CAMUNDA_NS, "collection");
                }
                return null;
            }
        }
    }

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值