activiti6.0获取流程节点信息返回,并获取网关上的变量

响应实体类:

package com.ddmc.workflow.response.activiti;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;


@Data
public class BpmnModelResp implements Serializable {
    /**
     * 流程实例ID
     */
    private String processDefinitionId;
    private String processDefinitionName;
    private String processDefinitionDesc;
    /**
     * 租户号
     */
    private String tenantId;
    /**
     * 分类
     */
    private String category;
    /**
     * 任务节点
     */
    private List<UserTask> userTaskListResp = new ArrayList<>();
    /**
     * 开始节点
     */
    private List<StartEvent> startEventListResp = new ArrayList<>();

    /**
     * 网关节点
     */
    private List<GatewayResp> gatewayListResp = new ArrayList<>();

    public BpmnModelResp() {

    }


    @Setter
    @Getter
    public static class UserTask implements Serializable {
        private String id;
        private String name;
        private String category;
        private String formKey;
        private String assignee;
        private String owner;
        private String desc;
        /*
         模板设计指定工作流会签人员变量
         */
        private String countersignParameters;
        /**
         * ALL-会签,ANY-任签; 默认任签
         */
        private String type = "ANY";
        private List<ApproverResp> approverList = new ArrayList<>();
    }

    @Setter
    @Getter
    public static class StartEvent implements Serializable {
        private String id;
        private String name;
        private String formKey;
        private String owner;
        private String desc;
    }


    @Setter
    @Getter
    public static class GatewayResp implements Serializable {
        //上一个节点Id
        private Set<String> parentIds;
        private String id;
        private String name;
        private Set<String> conditionExpressions;
    }
}

获取节点代码:

 

 private BpmnModelResp fillBaseInfo(BpmnModelResp bpmnModelResp, String processDefinitionId, org.activiti.bpmn.model.Process process) {
        bpmnModelResp.setProcessDefinitionId(processDefinitionId);
        bpmnModelResp.setProcessDefinitionName(process.getName());
        bpmnModelResp.setProcessDefinitionDesc(process.getDocumentation());
        return bpmnModelResp;
    }

    public BpmnModelResp fillUserTasks(BpmnModelResp bpmnModelResp, List<org.activiti.bpmn.model.UserTask> userTasks) {
        userTasks.stream().forEach(user -> {
            BpmnModelResp.UserTask UserTask = new BpmnModelResp.UserTask();
            UserTask.setFormKey(user.getFormKey());
            UserTask.setId(user.getId());
            UserTask.setName(user.getName());
            UserTask.setOwner(user.getOwner());
            UserTask.setCategory(user.getCategory());
            UserTask.setAssignee(user.getAssignee());
            UserTask.setDesc(user.getDocumentation());
            MultiInstanceLoopCharacteristics loopCharacteristics = user.getLoopCharacteristics();
            if (loopCharacteristics != null) {
                String countersignParameters = loopCharacteristics.getInputDataItem();
                if (StringUtils.isNotEmpty(countersignParameters)) {
                    String replace = countersignParameters.replace("#{", "").replace("${", "").replace("}", "");
                    UserTask.setCountersignParameters(replace);
                }
            }
            bpmnModelResp.getUserTaskListResp().add(UserTask);
        });
        return bpmnModelResp;
    }

    private BpmnModelResp fillStartEvent(BpmnModelResp bpmnModelResp, List<org.activiti.bpmn.model.StartEvent> startEventList) {
        startEventList.stream().forEach(event -> {
            BpmnModelResp.StartEvent startEvent = new BpmnModelResp.StartEvent();
            startEvent.setFormKey(event.getFormKey());
            startEvent.setId(event.getId());
            startEvent.setName(event.getName());
            startEvent.setOwner(event.getInitiator());
            startEvent.setDesc(event.getDocumentation());
            bpmnModelResp.getStartEventListResp().add(startEvent);
        });
        return bpmnModelResp;
    }

    /**
     * 每一个路由解析他的出线的表达式参数
     *
     * @param gateways
     * @return
     */
    private BpmnModelResp fillGateway(BpmnModelResp bpmnModelResp, List<? extends Gateway> gateways) {
        if (CollectionUtils.isEmpty(gateways)) {
            return bpmnModelResp;
        }
        gateways.stream().forEach(gat -> {
            if (gat instanceof ExclusiveGateway) {
                Set<String> conditionKeys = new HashSet();
                BpmnModelResp.GatewayResp gatewayResp = new BpmnModelResp.GatewayResp();
                List<SequenceFlow> outgoingFlows = ((ExclusiveGateway) gat).getOutgoingFlows();
                if (CollectionUtil.isNotEmpty(outgoingFlows)) {
                    outgoingFlows.forEach(flow -> {
                        conditionKeys.addAll(getCountersignParameters(flow.getConditionExpression()));
                    });
                }
                List<SequenceFlow> incomingFlows = ((ExclusiveGateway) gat).getIncomingFlows();
                if (CollectionUtil.isNotEmpty(incomingFlows)) {
                    Set<String> incoming = incomingFlows.stream().map(SequenceFlow::getSourceRef).collect(Collectors.toSet());
                    gatewayResp.setParentIds(incoming);
                }
                gatewayResp.setId(gat.getId());
                gatewayResp.setName(((ExclusiveGateway) gat).getName());
                gatewayResp.setConditionExpressions(conditionKeys);
                bpmnModelResp.getGatewayListResp().add(gatewayResp);
            }

        });
        return bpmnModelResp;
    }

    private static final Set<String> getCountersignParameters(String param) {
        Set<String> resList = new HashSet<>();
        param = param.replace("#{", "").replace("${", "").replace("}", "");
        char[] res = param.toCharArray();
        Queue s = new ArrayBlockingQueue(500);
        for (int i = 0; i < res.length; i++) {
            char c = res[i];
            if (c != '>' && c != '<' && c != '=' && c != '&' && c != '|' && !isInteger(String.valueOf(c))) {
                s.add(c);
            } else {
                int j = 0;
                String temp = "";
                while (!s.isEmpty()) {
                    temp += (Character) s.poll();
                }
                if (StringUtils.isNotEmpty(temp)) {
                    resList.add(temp);
                }
            }
        }
        return resList;
    }

    private static boolean isInteger(String str) {
        Pattern pattern = Pattern.compile("[0-9]*");
        return pattern.matcher(str).matches();
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章