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();
    }

 

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