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

    技术2022-07-11  74

    响应实体类:

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

     

    Processed: 0.016, SQL: 12